1 00:00:00,000 --> 00:00:02,270 >> [Suriin: Pagsusulit 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] 3 00:00:04,620 --> 00:00:07,660 [Ito ay CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Maligayang pagdating sa lahat. Ito ay pagsusuri para sa pagsusulit 1. 5 00:00:11,610 --> 00:00:15,040 Tulad ng disclaimer, ito ay - Ibig kong sabihin, kami ay pagpunta sa subukan upang masakop 6 00:00:15,040 --> 00:00:17,770 bilang magkano ang materyal hangga't maaari, ngunit iyon ay hindi nangangahulugan na 7 00:00:17,770 --> 00:00:20,780 kami ay pagpunta upang masakop ang lahat ng mga bagay na maaaring maging sa pagsusulit 1. 8 00:00:20,780 --> 00:00:25,270 Kaya siguraduhin mo ring tingnan ang panayam, mga seksyon, ang lahat ng bagay na magagawa mo na. 9 00:00:25,270 --> 00:00:28,240 Pagsusulit 1 ay magiging sa Miyerkules, sa susunod na Miyerkules. 10 00:00:28,240 --> 00:00:33,800 Kaya siguraduhin na mag-aral. Ito ay pagpunta sa maging, halos, tulad ng una pagsusulit 11 00:00:33,800 --> 00:00:36,390 patungkol sa format nito, ngunit marahil ito pupuntahan ay mas mahirap. 12 00:00:36,390 --> 00:00:39,600 Hindi bababa sa, nakaraang taon noong kinuha ko 50, naisip ko na ito ay mas mahirap. 13 00:00:39,600 --> 00:00:42,410 Kaya mag-aral ng maraming. 14 00:00:42,410 --> 00:00:45,190 >> Pupunta ako upang masakop ang mga istraktura ng data at Huffman coding. 15 00:00:45,190 --> 00:00:47,910 Ito ay isang bagay na ng maraming mga tao sa tingin ay complex, 16 00:00:47,910 --> 00:00:51,930 ngunit ako pagpunta sa subukan upang gawin itong bilang madaling hangga't maaari. 17 00:00:51,930 --> 00:00:56,330 Una sa lahat, kung ano ang gusto namin sa iyo guys upang malaman para sa pagsusulit 1 ay upang 18 00:00:56,330 --> 00:01:00,970 maunawaan ang haka-haka mga paglalarawan ng bawat isa sa mga istraktura ng data na pupuntahan ko ipakita. 19 00:01:00,970 --> 00:01:03,960 Nangangahulugan iyon na hindi mo kailangang i-aktwal 20 00:01:03,960 --> 00:01:07,020 ipatupad ang hash talahanayan sa iyong pagsusulit 1. 21 00:01:07,020 --> 00:01:10,250 Hindi namin gusto mong ipatupad ang isang kabuuan ng hash talahanayan; siguro susubukan naming 22 00:01:10,250 --> 00:01:13,090 upang gawing mong ipatupad ng ilang mga pag-andar, 23 00:01:13,090 --> 00:01:16,940 ang pinaka-karaniwang mga operasyon, ngunit kami ay hindi pagpunta sa gawin ipatupad mo ang lahat. 24 00:01:16,940 --> 00:01:21,010 Kaya mahalaga na maunawaan mo ang konsepto sa likod ng bawat istraktura ng data 25 00:01:21,010 --> 00:01:23,510 at din na nagagawa mong code sa C, 26 00:01:23,510 --> 00:01:27,880 lamang ang mga pinaka-karaniwang mga operasyon mayroon sila para sa bawat istraktura ng data. 27 00:01:27,880 --> 00:01:30,090 At magagawang upang suriin ang mga payo at structs din, 28 00:01:30,090 --> 00:01:33,470 dahil lumilitaw ang mga ito ng maraming sa mga istraktura ng data. 29 00:01:33,470 --> 00:01:37,380 >> Una, naka-link na mga listahan. Mga listahan ng Linked ay aktwal na halos kapareho sa array, 30 00:01:37,380 --> 00:01:39,930 ngunit ang pagkakaiba sa pagitan ng isang naka-link na listahan at isang array, 31 00:01:39,930 --> 00:01:45,160 una sa lahat, ay na ang isang naka-link na listahan ay may sukat napaka-kakayahang umangkop, 32 00:01:45,160 --> 00:01:50,060 habang sa array kailangan mong alinman sa pumili ng isang napakalaking sukat para sa array, 33 00:01:50,060 --> 00:01:53,710 sa gayon ay alam mong naka-pagpunta sa ay makakapag-imbak ang lahat ng iyong data sa na array, 34 00:01:53,710 --> 00:01:59,370 o mayroon kang gamitin ang malloc upang magkaroon ng isang may kakayahang umangkop haba ng array. 35 00:01:59,370 --> 00:02:03,680 Sa naka-link na listahan ay masyadong madaling makakuha lamang sa higit pang mga elemento, 36 00:02:03,680 --> 00:02:07,210 ilagay sa higit pang mga elemento sa naka-link na listahan o alisin ang mga elemento. 37 00:02:07,210 --> 00:02:09,370 At talagang, kung hindi mo nais ang naka-link na listahan na pinagsunod-sunod, 38 00:02:09,370 --> 00:02:13,950 maaari mong hanapin at alisin ang mga sangkap sa pare-pareho ang oras, 39 00:02:13,950 --> 00:02:16,800 kaya O (1) oras, sa gayon ay masyadong maginhawa. 40 00:02:16,800 --> 00:02:20,660 Mayroon kang lamang upang mag-ingat na laging tandaan na malloc at libreng mga nodes, 41 00:02:20,660 --> 00:02:25,510 dahil lang kung wala ka, magkakaroon ka ng memory paglabas. 42 00:02:25,510 --> 00:02:31,480 Kaya naka-link na listahan - ang kahulugan ng isang node ay tulad lamang ng kung ano ang mayroon kami doon. 43 00:02:31,480 --> 00:02:35,110 Naglagay ako int n, ngunit maaari kang mag-imbak ng anumang data na gusto mo. 44 00:02:35,110 --> 00:02:37,280 Kaya kung nais mong i-imbak ang isang string, ito ay pinong. 45 00:02:37,280 --> 00:02:41,690 Kung nais mong i-imbak ang isang struct, ito ay pinong, isang double, kahit anong gusto mo. 46 00:02:41,690 --> 00:02:44,630 Ilagay ko lang ang int n para sa mga halimbawa dito. 47 00:02:44,630 --> 00:02:46,800 At mayroon kang isang pointer sa susunod na node. 48 00:02:46,800 --> 00:02:51,940 Kaya, talaga, naka-link na listahan ay may ilang mga data, at pagkatapos ay tumuturo ito sa susunod na node. 49 00:02:51,940 --> 00:02:56,710 Kung ito ay ang huling elemento sa naka-link na listahan, ito ay pagpunta upang tumuro sa null. 50 00:02:56,710 --> 00:02:59,060 Kaya ito ay isang halimbawa ng isang naka-link na listahan. 51 00:02:59,250 --> 00:03:05,960 >> Okay, kaya hayaan na ngayon ni makita kung ano ang dapat naming gawin kung gusto kong ipasok ang isang elemento sa isang naka-link na listahan. 52 00:03:05,960 --> 00:03:08,810 Una, isang insert function na ay magiging walang bisa ng uri 53 00:03:08,810 --> 00:03:11,350 dahil hindi ko nais upang bumalik kahit ano. 54 00:03:11,350 --> 00:03:14,200 At ako pagpunta sa tumagal ng isang int bilang isang argument, 55 00:03:14,200 --> 00:03:17,090 dahil gusto kong malaman kung ano ang gusto ko ipapasok. 56 00:03:17,090 --> 00:03:21,840 Kaya ano ang unang bagay na dapat kong gawin? Well, ang dapat kong malloc sa newnode, 57 00:03:21,840 --> 00:03:24,240 nang sa gayon ay ang unang linya. 58 00:03:24,240 --> 00:03:27,580 Lang ako sa paglikha ng isang bagong node ang ilalagay sa isang naka-link na listahan. 59 00:03:27,580 --> 00:03:32,360 Kaya kung ano ang maaari kong gawin? Well, alam namin na sa aming mga pagpapatupad ng naka-link na mga listahan 60 00:03:32,360 --> 00:03:38,180 sa klase, palagi naming ilagay ang ulo bilang isang global variable. 61 00:03:38,180 --> 00:03:41,800 Kaya kung ano ang maaari naming gawin ay baguhin ang ulo. 62 00:03:41,800 --> 00:03:44,300 Maaari ba akong gumawa ng bagong node maging ang bagong ulo, 63 00:03:44,300 --> 00:03:46,670 at ito ay pagpunta sa ituro sa nakaraang ulo. 64 00:03:46,670 --> 00:03:50,390 Paano namin maaaring gawin iyon? Ang unang bagay na kailangan kong gawin 65 00:03:50,390 --> 00:03:54,770 ay baguhin ang 'n' sa bagong node sa halaga, 66 00:03:54,770 --> 00:03:57,530 kung saan ito ay pumasa sa sa pagpapaandar. 67 00:03:57,530 --> 00:04:01,050 Pagkatapos ay newnode susunod ay magiging ang ulo. 68 00:04:01,050 --> 00:04:05,800 Ang ulo ay pagpunta sa ma-newnode. Kaya ito ay medyo simple. 69 00:04:05,800 --> 00:04:10,090 Para sa pagtanggal ng isang node, maaari naming gawin ito tulad ng - 70 00:04:10,090 --> 00:04:14,790 Ang isang paraan na maaari kaming gawin iyon ay upang sabihin, 71 00:04:14,790 --> 00:04:18,160 okay, kung gusto kong tanggalin ang, halimbawa, 3, 72 00:04:18,160 --> 00:04:24,850 ano ang maaari kong gawin ay ituro lang ang mga nakaraang node 73 00:04:24,850 --> 00:04:27,580 sa susunod na node ng 3. 74 00:04:27,580 --> 00:04:29,400 Kaya gusto kong gawin lamang ng isang bagay tulad na. 75 00:04:29,400 --> 00:04:33,400 Ngunit ano ang problema sa paggawa na? 76 00:04:33,400 --> 00:04:37,400 Mayroon akong isang tumagas memory, kaya hindi ko ay may access sa ang bilang 3 na ngayon. 77 00:04:37,400 --> 00:04:42,480 Ang problema sa na ay hindi na pupuntahan ko magagawang palayain na node. 78 00:04:42,480 --> 00:04:45,360 Pupunta ako sa may memory tumagas at (hindi maintindihan) ay pagpunta sa pagkamuhi sa akin. 79 00:04:45,360 --> 00:04:49,370 Kaya sa halip ng paggawa na, ang dapat kong marahil ay may isang pansamantalang pointer. 80 00:04:49,370 --> 00:04:53,210 Kaya ko bang ilagay ang Temp. Ito ay pagpunta sa ay tumuturo sa node na gusto kong tanggalin. 81 00:04:53,210 --> 00:04:58,170 At pagkatapos ay maaari kong ilipat ang nakaraang mga node sa punto sa susunod na node 82 00:04:58,170 --> 00:05:00,390 ng node na gusto kong tanggalin. 83 00:05:00,390 --> 00:05:02,730 At sa wakas, ang maaari kong palayain ang pointer. 84 00:05:02,730 --> 00:05:07,480 Dapat ko bang palayain ang pointer na aking nilikha doon? 85 00:05:07,480 --> 00:05:09,560 Hindi ko na kailangang, dahil lamang - 86 00:05:09,560 --> 00:05:13,430 ang pagkakaiba ay na ito node ay nilikha gamit ang malloc, 87 00:05:13,430 --> 00:05:17,280 kaya sa magbunton, habang ang isang ito ay ipinahayag lamang bilang isang null lumipat sa stack. 88 00:05:17,280 --> 00:05:20,000 Kaya hindi ko na kailangang palayain ito. 89 00:05:20,000 --> 00:05:22,030 >> Okay. Kaya-usapan natin ang tungkol sa mga stack ipaalam sa ngayon. 90 00:05:22,030 --> 00:05:24,680 Mga stack ay medyo prangka. 91 00:05:24,680 --> 00:05:29,540 Ginawa namin stack at queues sa klase lamang gamit ang array, 92 00:05:29,540 --> 00:05:32,820 ngunit dapat mong maging pamilyar - magkaroon ng kamalayan lamang 93 00:05:32,820 --> 00:05:40,740 na maaari mo ring gawin stack sa queues gamit ang naka-link na mga listahan pati na rin. 94 00:05:40,740 --> 00:05:44,460 Kaya kung mayroon kang isang array, ano ang magiging isang stack? 95 00:05:44,460 --> 00:05:46,810 Ang isang stack, una, ay magkakaroon na magkaroon ng laki. 96 00:05:46,810 --> 00:05:49,950 Mayroon kang mag-imbak ng kung ano ay ang laki ng stack na mayroon ka ngayon. 97 00:05:49,950 --> 00:05:52,980 At din magkakaroon ka ng isang array, sa ganitong kaso ng mga numero, 98 00:05:52,980 --> 00:05:55,120 ngunit kung gusto mo, maaari itong maging isang array 99 00:05:55,120 --> 00:06:00,380 ng mga string, isang array ng struct, ang anumang bagay na nais mong iimbak. 100 00:06:00,380 --> 00:06:03,240 Tungkol sa stack: Ang pagkakaiba sa pagitan ng isang stack at isang naka-link na listahan 101 00:06:03,240 --> 00:06:08,590 ay na sa stack na may access sa huling elemento na ilalagay sa stack mo lamang. 102 00:06:08,590 --> 00:06:11,770 Ito ay tinatawag na huling in, unang out. 103 00:06:11,770 --> 00:06:15,090 Tulad lamang mayroon kang isang stack ng trays, 104 00:06:15,090 --> 00:06:17,670 kung ilalagay mo ang isang tray sa tuktok ng stack, 105 00:06:17,670 --> 00:06:22,670 mayroon kang upang alisin muna na tray upang magkaroon ng access sa iba pang mga trays. 106 00:06:22,670 --> 00:06:26,310 Ito ay ang parehong bagay sa stack. 107 00:06:26,310 --> 00:06:31,220 Kaya kapag gusto kong, halimbawa, magdagdag ng isang sangkap sa isang stack, ano ang dapat kong gawin? 108 00:06:31,220 --> 00:06:34,070 Ito ay tinatawag na push, at ito ay medyo prangka. 109 00:06:34,070 --> 00:06:37,130 Ang unang bagay na kailangan mong gawin ay check kung ang laki ng stack 110 00:06:37,130 --> 00:06:40,150 ay hindi mas malaki sa o katumbas ng kapasidad ng stack. 111 00:06:40,150 --> 00:06:45,810 Dahil kung mayroon ka ay sa buong kapasidad, hindi ka maaaring magdagdag ng ano pa man. 112 00:06:45,810 --> 00:06:51,140 At pagkatapos kung hindi, mayroon na lamang kayong upang idagdag ang elemento sa stack. 113 00:06:51,140 --> 00:06:54,530 At sa wakas, dagdagan ang laki. Kaya ito ay medyo prangka. 114 00:06:54,530 --> 00:06:57,140 Kaya idagdag ko lang ang numero 2. 115 00:06:57,140 --> 00:07:00,350 At kung gusto kong mag-pop, na nangangahulugan na gusto kong alisin 116 00:07:00,350 --> 00:07:03,870 huling elemento na ay naidagdag at ibalik ang halaga ng elemento, 117 00:07:03,870 --> 00:07:09,180 ang unang bagay na kailangan kong suriin ay ang stack ay hindi walang laman. 118 00:07:09,180 --> 00:07:11,510 Dahil kung ito ay walang laman, hindi ko maibabalik ang anumang bagay. 119 00:07:11,510 --> 00:07:14,820 Sa kasong iyon, ako bumabalik -1. 120 00:07:14,820 --> 00:07:18,960 Kung hindi man, ako pagpunta sa pagbawas sa laki ng spec, 121 00:07:18,960 --> 00:07:22,510 at ibalik numero (s.size). 122 00:07:22,510 --> 00:07:27,230 Bakit ang pagbawas ko ang laki at pagkatapos ay bumalik s.size? 123 00:07:27,230 --> 00:07:30,930 Ito ay dahil, sa kasong ito, ang spec ay may sukat 4, 124 00:07:30,930 --> 00:07:33,810 at gusto kong ibalik ang ika-apat na elemento, tama? 125 00:07:33,810 --> 00:07:36,030 Ngunit ano ay ang index ng ika-apat na elemento? Tatlong. 126 00:07:36,030 --> 00:07:44,510 Dahil ko laki - ay magiging 3, maaari ba akong bumalik lamang s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 dahil ito ay 3. Kaya lang ang index. 128 00:07:48,410 --> 00:07:50,380 >> Ngayon queues. Queues ay medyo magkano ang parehong bagay. 129 00:07:50,380 --> 00:07:54,950 Ang pagkakaiba lamang ay na sa halip ng pagkakaroon ng huling in, unang out, 130 00:07:54,950 --> 00:07:57,480 Mayroon una kang in, unang out. 131 00:07:57,480 --> 00:07:59,460 Marahil kung ikaw ay naghihintay upang pumunta sa isang konsiyerto, 132 00:07:59,460 --> 00:08:04,260 Hindi ka magiging masaya kung mayroon kang isang stack sa halip ng isang queue. 133 00:08:04,260 --> 00:08:07,730 Ang pagiging ang huling tao na dumating ay magiging ang unang taong pumasok sa konsiyerto. 134 00:08:07,730 --> 00:08:09,760 Hindi mo marahil ay magiging masaya. 135 00:08:09,760 --> 00:08:15,020 Sa pila, ang unang tao upang makakuha ng sa ding ang unang taong upang makakuha ng out. 136 00:08:15,020 --> 00:08:18,720 Kaya sa ang kahulugan ng isang pila, bukod sa pagkakaroon sa laki sa array, 137 00:08:18,720 --> 00:08:23,360 mayroon ka ring magkaroon ng ulo, kung saan ay ang index sa ulo ng stack. 138 00:08:23,360 --> 00:08:29,000 Kaya sa unang elemento sa ngayon. 139 00:08:29,000 --> 00:08:32,710 Enqueue ay ang parehong bagay bilang push para sa mga stack. 140 00:08:32,710 --> 00:08:34,980 Kung ikaw ay napaka-simple, gusto mong sabihin lamang, 141 00:08:34,980 --> 00:08:39,289 well, lamang ang maaari kong gawin nang eksakto ang parehong bagay tulad ng ginawa ko para sa push. 142 00:08:39,289 --> 00:08:44,030 Maaari ko pa lang suriin kung ito ay hindi na lagpas sa kapasidad. 143 00:08:44,030 --> 00:08:48,760 Kung ito ay, bumalik ako ng hindi totoo, kung hindi, maaari ko lang i-export ang mga bagong halaga 144 00:08:48,760 --> 00:08:50,630 at pagkatapos ay dagdagan ang laki. 145 00:08:50,630 --> 00:08:52,750 Ngunit kung bakit ito ay mali? 146 00:08:52,750 --> 00:08:55,010 Tingnan ang halimbawang ito Hayaan. 147 00:08:55,010 --> 00:08:57,020 Sinusubukan ko upang enqueue ng grupo ng mga bagay-bagay, 148 00:08:57,020 --> 00:08:58,390 at pagkatapos ay pupuntahan ko dequeue at enqueue. 149 00:08:58,390 --> 00:09:00,550 Marami ng mga utos, subalit ito ay napaka-simpleng. 150 00:09:00,550 --> 00:09:04,790 Pupunta ako sa enqueue 5, kaya magdagdag 5, at pagkatapos ay i-7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, at pagkatapos ay gusto kong dequeue isang bagay, 152 00:09:09,310 --> 00:09:12,000 na nangangahulugan na pupuntahan ko alisin ang unang elemento. 153 00:09:12,000 --> 00:09:14,640 Kaya pupuntahan ko alisin ang bilang 3, tama? 154 00:09:14,640 --> 00:09:17,320 Ang unang elemento. Okay. 155 00:09:17,320 --> 00:09:21,450 Ngayon kung sinusubukan kong i-enqueue ibang bagay, kung ano ang mangyayari? 156 00:09:21,450 --> 00:09:24,290 Ayon sa aking pagpapatupad, 157 00:09:24,290 --> 00:09:31,040 Ako ay pagpunta sa ilagay ang susunod na numero sa index q.size. 158 00:09:31,040 --> 00:09:35,140 Sa kasong ito, ang laki ay 8, 159 00:09:35,140 --> 00:09:38,640 kaya ang index 8 ay magiging dito mismo sa huling posisyon. 160 00:09:38,640 --> 00:09:43,900 Kung sinusubukan kong i-enqueue 1 dito mismo, Gusto ko ma-Sasapawan nito ang huling posisyon 161 00:09:43,900 --> 00:09:45,870 sa numero 1, na kung saan ay ganap na mali. 162 00:09:45,870 --> 00:09:49,870 Ano Gusto kong gawin ay balutin sa paligid at pumunta sa unang posisyon. 163 00:09:49,870 --> 00:09:52,870 Siguro gusto mong sabihin lamang, mahusay, mayroon akong lamang upang suriin 164 00:09:52,870 --> 00:09:55,600 kung ang maaari kong talagang ilagay ang isang bagay doon. 165 00:09:55,600 --> 00:09:58,560 Kung hindi, lamang ko sabihin, oh, ang mga bagong ganap na kapasidad 166 00:09:58,560 --> 00:10:02,010 ay ang tunay na kapasidad - 1, at hindi ka maaaring maglagay ng isang elemento doon. 167 00:10:02,010 --> 00:10:06,150 Ngunit ano ang problema? Ang problema ay kung dequeue ko lang ang lahat ng bagay dito mismo 168 00:10:06,150 --> 00:10:08,240 at pagkatapos ay subukan ko upang magdagdag ng iba pa, ay sabihin lamang, 169 00:10:08,240 --> 00:10:11,210 rin, ikaw ay sa buong kapasidad, na kung saan ay 0. 170 00:10:11,210 --> 00:10:13,620 Kaya iyong queue ay nawala. 171 00:10:13,620 --> 00:10:16,990 Kailangan mong balutin sa paligid, at isang paraan ng pambalot sa paligid 172 00:10:16,990 --> 00:10:22,040 na guys natutunan sa taong nagkakaroon ng mga pangitain at iba pang mga psets ay gumagamit ng mod. 173 00:10:22,040 --> 00:10:29,090 Maaari mo itong subukan sa bahay upang maunawaan kung bakit nais mong gawin q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod kapasidad, ngunit kung suriin mo dito mismo, 175 00:10:31,080 --> 00:10:34,760 maaari naming makita na ito ay gumagana. 176 00:10:34,760 --> 00:10:37,760 Kaya't sa nakaraang halimbawa, q.size ay 8 177 00:10:37,760 --> 00:10:47,590 at ang ulo ay 1, dahil ito ay ang posisyon ng ito dito ng array. 178 00:10:47,590 --> 00:10:51,970 Kaya ito ang magiging 8 + 1, 9. Mod kapasidad 9 ay magiging 0. 179 00:10:51,970 --> 00:10:56,640 Ito pumunta sa index 0. Babalik kami sa kanang posisyon. 180 00:10:56,640 --> 00:10:59,750 At pagkatapos ay subukan ang queue sa bahay. 181 00:10:59,750 --> 00:11:04,950 Ang ilang mahalagang bagay: subukan upang maunawaan ang pagkakaiba sa pagitan ng isang stack at isang queue. 182 00:11:04,950 --> 00:11:11,620 Sa tahanan, subukan upang makakuha ng napaka-pamilyar sa pagpapatupad ng enqueue, dequeue, push at pop. 183 00:11:11,620 --> 00:11:16,560 At din maunawaan kapag gusto mong gamitin ang bawat isa sa kanila. 184 00:11:16,560 --> 00:11:22,830 >> Ng magrelaks para sa 10 segundo sa isang bungkos ng Pokemons Kaya ipaalam. 185 00:11:22,830 --> 00:11:26,080 At ngayon sabihin bumalik sa mga istraktura ng data. 186 00:11:26,080 --> 00:11:29,770 Hash talahanayan. Ang isang pulutong ng mga tao ay natakot ng hash talahanayan. 187 00:11:29,770 --> 00:11:33,650 sa set problema 6, Spell Checker. 188 00:11:33,650 --> 00:11:35,980 Hash talahanayan at pagsusubok, ng maraming mga tao makakuha ng natakot ng mga ito. 189 00:11:35,980 --> 00:11:38,540 Iniisip nila na ang mga ito kaya mahirap maunawaan. Oo? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problema set 5. >> Problema set 5, oo. Salamat Rob. 191 00:11:41,490 --> 00:11:43,370 Oo. Anim na noon ay tampo n 'espongha, oo. 192 00:11:43,370 --> 00:11:49,340 Problema set 5 ay Spell Checker, at kayo ay nagkaroon na gamitin ang alinman sa isang hash talahanayan o isang try. 193 00:11:49,340 --> 00:11:55,360 Ang isang pulutong ng mga tao naisip na sila ay sobrang mahirap na maunawaan, ngunit ang mga ito ay aktwal na medyo simple. 194 00:11:55,360 --> 00:12:01,290 Ano ang isang hash talahanayan, talaga? Ang isang hash talahanayan ay isang hilera ng mga naka-link na mga listahan. 195 00:12:01,290 --> 00:12:06,730 Ang tanging pagkakaiba sa pagitan ng isang array at isang hash talahanayan 196 00:12:06,730 --> 00:12:09,730 ay na sa hash talahanayan mayroon kang isang bagay na tinatawag na isang hash. 197 00:12:09,730 --> 00:12:12,080 Ano ang isang hash? 198 00:12:12,080 --> 00:12:13,970 Hindi ko alam kung ka guys ay maaaring magbasa dito. 199 00:12:13,970 --> 00:12:16,090 Ito ay isang halimbawa ng isang hash table. 200 00:12:16,090 --> 00:12:19,220 Kaya maaari mong makita na mayroon kang isang array na may 31 mga elemento. 201 00:12:19,220 --> 00:12:22,440 At ano ang ginagawa namin sa isang hash talahanayan ay magkaroon ng hash 202 00:12:22,440 --> 00:12:26,660 na ay pagpunta upang isalin ang isang susi, ang bawat int sa isang index. 203 00:12:26,660 --> 00:12:31,740 Kung, halimbawa, kung gusto kong piliin para sa B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Gusto ko ilagay B. Harrison sa aking mga pag-andar ng hash, 205 00:12:34,190 --> 00:12:36,960 at ang hash ay magbabalik 24. 206 00:12:36,960 --> 00:12:40,930 Kaya alam ko na gusto kong i-store B. Harrison sa 24. 207 00:12:40,930 --> 00:12:46,580 Kaya na ang pagkakaiba sa pagitan lamang pagkakaroon ng isang array at pagkakaroon ng hash table. 208 00:12:46,580 --> 00:12:48,740 Sa hash talahanayan magkakaroon ka ng isang function na ay pagpunta sa sabihin sa iyo 209 00:12:48,740 --> 00:12:54,740 kung saan upang i-imbak ang data na nais mong iimbak. 210 00:12:54,740 --> 00:12:57,040 Para sa hash, na nais mong maghanap ng isang hash 211 00:12:57,040 --> 00:13:00,600 na deterministic at well-distributed. 212 00:13:00,600 --> 00:13:07,810 Tulad ng iyong nakikita dito, nakikita mo na maraming mga data na Nais kong tindahan ay talagang 19 213 00:13:07,810 --> 00:13:12,470 sa halip ng paggamit 31 at 30 at 29, na kung saan ay libre lahat. 214 00:13:12,470 --> 00:13:16,920 Kaya ang hash na aking ginagamit ay hindi masyadong mahusay na ipinamamahagi. 215 00:13:16,920 --> 00:13:20,710 Kapag sinasabi namin well-distributed, nangangahulugan ito na gusto naming magkaroon, 216 00:13:20,710 --> 00:13:26,520 halos, hindi bababa sa 1 o 2 para sa bawat isa sa mga - 217 00:13:26,520 --> 00:13:32,190 tulad ng, ang isang pagkakaiba ng 1 o 2 para sa bawat isa ang mga indeks sa array. 218 00:13:32,190 --> 00:13:43,950 Gusto mong magkaroon, humigit-kumulang, ang parehong numero ng mga elemento sa bawat naka-link na listahan sa array. 219 00:13:43,950 --> 00:13:48,600 At ito'y madali upang suriin kung ito ay wastong sa hash talahanayan, tingnan ang bilang ng hash talahanayan. 220 00:13:48,600 --> 00:13:51,770 >> Pagkatapos ay puno. Ito ay isang tree. 221 00:13:51,770 --> 00:13:56,400 Puno sa computer science ay baligtad para sa ilang kadahilanan. 222 00:13:56,400 --> 00:14:00,150 Kaya dito mismo mayroon kang root ng tree at pagkatapos ay ang mga dahon. 223 00:14:00,150 --> 00:14:05,630 Dapat mong malaman lamang ang mga katawagan para sa mga magulang at anak. 224 00:14:05,630 --> 00:14:12,880 Ang bawat node ay may mga anak nito, na mga nodes na ay mababa sa magulang. 225 00:14:12,880 --> 00:14:19,660 Kaya, halimbawa, 2 ay magiging mga magulang para sa 3 at para sa iba pang mga bata doon, 226 00:14:19,660 --> 00:14:25,290 habang 3 ay magiging mga magulang para sa 1 at ang ibang mga bata na ang naroon. 227 00:14:25,290 --> 00:14:29,990 At 1 ay magiging anak 3, at iba pa. 228 00:14:29,990 --> 00:14:34,610 Mayroon kaming isang bagay na mas kawili-wiling, na tinatawag na isang binary paghahanap tree, 229 00:14:34,610 --> 00:14:39,040 kung saan ang lahat ng mga halaga sa kanan ng isang node 230 00:14:39,040 --> 00:14:41,660 ay pagpunta sa maging sa kanan, dito mismo - sa kanan, 231 00:14:41,660 --> 00:14:46,780 ay magiging mas mataas kaysa sa elemento sa root. 232 00:14:46,780 --> 00:14:49,780 Kaya kung mayroon akong mga numero 5 dito mismo, ang lahat ng mga elemento sa kanan 233 00:14:49,780 --> 00:14:51,940 ay magiging mas mataas kaysa sa 5, at sa kaliwa 234 00:14:51,940 --> 00:14:56,770 lahat ng mga elemento ay pagpunta sa maging mas mababa sa 5. 235 00:14:56,770 --> 00:14:58,780 Bakit ito kapaki-pakinabang ay? 236 00:14:58,780 --> 00:15:01,660 Well, kung gusto kong i-check kung ang numero 7 ay dito, halimbawa, 237 00:15:01,660 --> 00:15:05,960 Pumunta ko lang sa 5 muna at pupuntahan ko makita, ay 7 mas malaki o mas mababa sa 5? 238 00:15:05,960 --> 00:15:09,540 Ito ay mas malaki, upang malaman ko ito pupuntahan kailangang maging sa kanan ng tree. 239 00:15:09,540 --> 00:15:13,980 Kaya Mayroon akong higit na mas mababa bagay-bagay upang tumingin sa. 240 00:15:13,980 --> 00:15:19,520 Sa pagpapatupad ng isang binary puno ng paghahanap, ang node, tingin lang ako sa pagpunta sa mayroon na magkaroon ng data, 241 00:15:19,520 --> 00:15:21,750 kaya int n; maaari ka ring magkaroon ng isang string 242 00:15:21,750 --> 00:15:23,630 o anumang bagay na gusto mo. 243 00:15:23,630 --> 00:15:28,100 Mayroon kang lamang maging maingat sa paglalarawan ng kung ano ay mas malaki, kung ano ay mas mababa. 244 00:15:28,100 --> 00:15:30,390 Kaya kung kayo ay nagkaroon ng mga string, halimbawa, na maaari mong tukuyin ang 245 00:15:30,390 --> 00:15:34,690 na ang lahat ng mga bagay sa kanan ay pagpunta sa may mas malaking haba, 246 00:15:34,690 --> 00:15:40,940 sa kaliwa ay pagpunta sa may mas mababang mga haba, kaya talagang nakasalalay sa iyo. 247 00:15:40,940 --> 00:15:44,930 >> Paano ko maaaring ipatupad mahanap para sa BST? 248 00:15:44,930 --> 00:15:47,840 Ang unang bagay na kakailanganin naming gawin ay suriin kung ang ugat ay walang bisa. 249 00:15:47,840 --> 00:15:50,920 Kung ito ay walang bisa, nangangahulugan ito na ang bagay ay hindi doon 250 00:15:50,920 --> 00:15:53,330 dahil hindi mo kahit na may isang puno, tama? 251 00:15:53,330 --> 00:15:55,790 Kaya bumalik ako ng hindi totoo. 252 00:15:55,790 --> 00:15:58,740 Kung hindi man, ako pagpunta upang suriin kung ang mga numero ay mas malaki 253 00:15:58,740 --> 00:16:01,720 kaysa sa halaga sa root. 254 00:16:01,720 --> 00:16:04,250 Pupunta ako sa subukang maghanap ng mga elemento sa kanan 255 00:16:04,250 --> 00:16:08,590 mula sa puno. 256 00:16:08,590 --> 00:16:11,310 Ang makikita mo na gumagamit ako ng recursion dito. 257 00:16:11,310 --> 00:16:14,150 At pagkatapos ay kung ito ay mas kaunti, Pupunta ako sa tumingin sa kaliwa. 258 00:16:14,150 --> 00:16:18,330 At sa wakas, kung hindi man, kung hindi mas o hindi mas malaki, 259 00:16:18,330 --> 00:16:20,660 ibig sabihin nito na ito ang halaga mismo. 260 00:16:20,660 --> 00:16:23,010 Kaya bumalik ko lang ang totoo. 261 00:16:23,010 --> 00:16:26,360 Maaari mong makita dito na ginamit ko kung, kung, kung. 262 00:16:26,360 --> 00:16:30,820 At tandaan, sa pagsusulit 0, nagkaroon kami ng problema na nagkaroon kung, kung, kung, 263 00:16:30,820 --> 00:16:32,780 at na ipagpalagay upang mahanap ang kawalan ng kaalaman, 264 00:16:32,780 --> 00:16:35,180 at ang kawalan ng kaalaman ay na iyong ginamit kung. 265 00:16:35,180 --> 00:16:39,060 Dapat na ginamit mo kung, iba kung, iba kung, at iba pa. 266 00:16:39,060 --> 00:16:44,240 Kaya, ang dapat kong gamitin pang tao kung at iba kung at iba pa dito? 267 00:16:44,240 --> 00:16:46,200 Sinusuportahan ba ng sinuman - oo? 268 00:16:46,200 --> 00:16:51,140 [Pagsasalita ng Mag-aaral, hindi marinig] 269 00:16:51,140 --> 00:16:53,480 Iyan ay perpekto. Kaya ang sinasabi niya na ito ay hindi mahalaga, 270 00:16:53,480 --> 00:16:55,930 dahil lang sa kawalan ng kaalaman na namin ay may bago 271 00:16:55,930 --> 00:16:59,550 ay na dahil, siguro kung ilang mga kundisyon ay nasisiyahan na dito, 272 00:16:59,550 --> 00:17:03,570 kaya mo gumanap ang isang aksyon, ngunit pagkatapos ikaw ay pagpunta upang suriin ang lahat ng mga iba pang mga kondisyon. 273 00:17:03,570 --> 00:17:06,319 Ngunit sa kasong ito, nagbalik ito agad-agad, kaya hindi mahalaga. 274 00:17:06,319 --> 00:17:09,220 Kaya hindi mo na kailangang gumamit ng ibang tao kung. 275 00:17:09,220 --> 00:17:11,740 >> At sa wakas, makipag-usap tungkol sa pagsusubok na ipaalam, 276 00:17:11,740 --> 00:17:13,800 na kung saan ay paborito ng lahat. 277 00:17:13,800 --> 00:17:15,980 Isang try ay isang puno ng array. 278 00:17:15,980 --> 00:17:20,369 Ito ay napakabilis upang maghanap ng mga halaga, ngunit ito ay gumagamit ng maraming memorya. 279 00:17:20,369 --> 00:17:22,530 At ito ay karaniwang upang i-filter ng mga salita, kaya kapag ka 280 00:17:22,530 --> 00:17:27,920 nais ipatupad, halimbawa, hindi ko alam, tulad ng isang libro ng telepono sa iyong telepono 281 00:17:27,920 --> 00:17:30,440 at nais mong magagawang i-type B 282 00:17:30,440 --> 00:17:32,510 at mayroon lamang mga pangalan ng mga tao na may B. 283 00:17:32,510 --> 00:17:37,960 Ito ay napakadaling ipatupad na ang paggamit ng isang try, halimbawa. 284 00:17:37,960 --> 00:17:39,820 Paano ko tutukuyin mo ang isang node sa isang try? 285 00:17:39,820 --> 00:17:43,910 Mayroon kang lamang upang magkaroon ng isang bool na pagpunta sa ma-is_word. 286 00:17:43,910 --> 00:17:48,660 Iyon ay kumakatawan na ang paggamit ng lahat ang mga character na bago na node, 287 00:17:48,660 --> 00:17:51,920 nagawa mong bumuo ng isang salita, 288 00:17:51,920 --> 00:17:57,230 at pagkatapos ay magkakaroon ka ng isang array ng mga payo sa mga node. 289 00:17:57,230 --> 00:18:03,120 Maaari mong makita na mayroon kami ng isang hanay ng mga magulang nodes, kaya node * array? Oo? 290 00:18:03,120 --> 00:18:06,050 Kaya sabihin makita kung paano na gagana. Para sa spell check, 291 00:18:06,050 --> 00:18:08,230 mayroon kaming isang array ng 27 mga elemento, 292 00:18:08,230 --> 00:18:12,150 dahil mayroon kaming lahat ang mga titik plus ang kudlit. 293 00:18:12,150 --> 00:18:17,800 Bago dito lang ako sa pagpunta sa gamitin ang 2 dahil gusto kong maging magagawang magsulat sa board. 294 00:18:17,800 --> 00:18:20,230 Okay. Kaya ito ay isang halimbawa ng isang try. 295 00:18:20,230 --> 00:18:25,600 Kung tukuyin ko lang ang unang node, kukunin ko na magkaroon ng isang hanay ng mga 2 elemento 296 00:18:25,600 --> 00:18:29,290 na 2 pointer sa null, upang ilagay ko lang ang 'isang' at 'b'. 297 00:18:29,290 --> 00:18:32,430 At ako pupunta upang magkaroon ng isang bool na nagsasabing is_word. 298 00:18:32,430 --> 00:18:34,420 Ito ay pagpunta sa maging hindi totoo para sa unang isa, 299 00:18:34,420 --> 00:18:37,370 dahil lang, bago na wala kang anumang mga character. 300 00:18:37,370 --> 00:18:40,900 Kaya isang walang laman na salita ay hindi isang salita. Kaya ito ay hindi totoo. 301 00:18:40,900 --> 00:18:46,320 Kung gusto kong idagdag ang 'isang' sa diksyunaryo ito, ano ang magiging kailangan kong gawin? 302 00:18:46,320 --> 00:18:49,760 Gusto ko magkaroon lang sa malloc isang bagong node para sa 'isang', 303 00:18:49,760 --> 00:18:54,630 at pagkatapos ay idagdag ang salita nito sa true. 304 00:18:54,630 --> 00:19:00,180 Kaya lamang ay kumakatawan ito na nagki 'ang isang' ay magiging totoo. Magkaroon ng kahulugan? 305 00:19:00,180 --> 00:19:04,120 Pagkatapos ay kapag gusto kong idagdag ang 'BA', ang kukunin ko upang malloc 1 para sa 'b', 306 00:19:04,120 --> 00:19:07,550 at pagkatapos ay pupuntahan ko i-set up ang boolean sa hindi totoo, 307 00:19:07,550 --> 00:19:10,160 dahil 'b' sa pamamagitan ng kanyang sarili ay hindi isang salita. 308 00:19:10,160 --> 00:19:13,010 Pagkatapos Pupunta ako sa malloc ng isa pa para sa 'isang', kaya 'BA', 309 00:19:13,010 --> 00:19:16,290 at pagkatapos ay pupuntahan ko i-set up ito ay isang salita sa true. 310 00:19:16,290 --> 00:19:18,950 Dahil 'BA' ay isang salita. 311 00:19:18,950 --> 00:19:21,910 At pagkatapos ay kapag gusto kong makita kung 'b' ay nasa diksiyonaryo ito, 312 00:19:21,910 --> 00:19:26,730 Maaari kong pumunta lamang sa unang isa, 'b'. Pumunta ako pababa, at hanapin ko sa ay salita, at sinasabi nito na hindi totoo. 313 00:19:26,730 --> 00:19:30,110 Kaya ito ay hindi isang salita. Kung gusto kong i-check ang 'BA', 314 00:19:30,110 --> 00:19:38,010 Pumunta ako sa unang isa, 'b', at pagkatapos ay pumunta sa 'isang', at nakikita ko totoo, kaya ito ay isang salita. Magkaroon ng kahulugan? 315 00:19:38,010 --> 00:19:41,950 Ang isang pulutong ng mga tao makakuha ng malito sa pamamagitan ng pagsusubok. Walang? 316 00:19:41,950 --> 00:19:44,740 >> Sa wakas, Huffman coding. Huffman coding ay lubhang kapaki-pakinabang 317 00:19:44,740 --> 00:19:47,550 i-save ang memorya at i-compress na mga tekstong file, 318 00:19:47,550 --> 00:19:52,270 dahil lang ng maraming beses gamitin mo ang 'isang' at 'e', ​​halimbawa, 319 00:19:52,270 --> 00:19:57,710 sa iyong mga dokumento, ngunit hindi ko alam kung ikaw guys gamitin ang 'q' o 'z' bilang magkano. 320 00:19:57,710 --> 00:20:02,040 Ang pagkakaroon byte 1 lamang para sa bawat solong character, 321 00:20:02,040 --> 00:20:08,520 bawat solong - ang 256 na character na mayroon kami sa table ASCII ay hindi masyadong pinakamainam, 322 00:20:08,520 --> 00:20:11,410 dahil lang mayroong ilang mga character na gamitin mo ang marami pang iba, 323 00:20:11,410 --> 00:20:15,180 kaya dapat mong marahil gamitin mas mababa memory para sa mga. 324 00:20:15,180 --> 00:20:17,560 Paano ko gagamitin ang Huffman coding? 325 00:20:17,560 --> 00:20:20,010 Mayroon kaming na gawin ang isang Huffman tree. 326 00:20:20,010 --> 00:20:23,370  Isang Huffman puno ay may mga node 327 00:20:23,370 --> 00:20:27,760 na magkaroon ng isang simbolo na ay magiging tulad ng, 'isang', 'b', 'c', ang titik, 328 00:20:27,760 --> 00:20:32,990 kahit anong sulat na mayroon ka, ang isang dalas na ay ang dalas na lumilitaw ang salita sa teksto, 329 00:20:32,990 --> 00:20:36,280 na ikaw ay lumilikha ng Huffman puno para sa, 330 00:20:36,280 --> 00:20:41,800 at pagkatapos ay isang node na ay pagpunta upang tumuro sa kaliwa ng Huffman puno 331 00:20:41,800 --> 00:20:47,210 at isa pa na node na ay pagpunta upang tumuro sa kanan. Kaya gusto lamang ng isang tree. 332 00:20:47,210 --> 00:20:49,440 Paano bumuo ka ng isang Huffman puno? 333 00:20:49,440 --> 00:20:54,020 Ikaw ay pagpunta sa pumili ng 2 nodes na mayroong pinakamababang frequency. 334 00:20:54,020 --> 00:20:56,490 Kung mayroon kang ang kurbatang ka ng pagpunta sa pumili ng 2 nodes 335 00:20:56,490 --> 00:20:59,870 na mayroon pati na rin ang pinakamababang halaga na ASCII. 336 00:20:59,870 --> 00:21:02,420 Pagkatapos ay ikaw ay pagpunta upang lumikha ng bagong puno out ng mga 2 nodes 337 00:21:02,420 --> 00:21:08,030 na ay pagpunta sa may pinagsamang dalas sa magulang na node. 338 00:21:08,030 --> 00:21:13,240 At pagkatapos ka ng pagpunta sa alisin ang 2 bata mula sa gubat 339 00:21:13,240 --> 00:21:15,570 at palitan ang mga ito sa magulang. 340 00:21:15,570 --> 00:21:18,930 At ka ng pagpunta sa ulitin na hanggang sa magkaroon ka lamang ng 1 puno sa kagubatan. 341 00:21:18,930 --> 00:21:23,840 Kaya sabihin makita kung paano mo gawin ang isang Huffman puno para ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Maaari mong makita dito na ang lahat ang mga titik na mayroon dalas 1 maliban para sa 'A'; na may dalas 2. 343 00:21:29,220 --> 00:21:34,090 Kaya Lumikha ako node para sa lahat ang mga titik Naglagay ako sa pagkakasunud-sunod ng halaga ASCII at dalas. 344 00:21:34,090 --> 00:21:40,090 Kaya kung nais kong lumikha ng unang puno, ito ay may 'L' at 'M'. 345 00:21:40,090 --> 00:21:43,100 Kaya dito. Ang dalas ng mga pares ay magiging 2 346 00:21:43,100 --> 00:21:49,470 dahil ito ay 1 + 1, pagkatapos ay ang susunod na 2 na may pinakamababang frequency ay 'Y' at 'Z'. 347 00:21:49,470 --> 00:21:53,180 At pagkatapos Mayroon akong lahat ng mga ito sa pagiging - magkaroon ng isang dalas ng 2. 348 00:21:53,180 --> 00:22:00,470 Kaya kung alin ang sana ang mga iyon ay may pinakamababang halaga na ASCII para sa susunod na isa? 349 00:22:00,470 --> 00:22:04,830 'A' at 'L'. Kaya lumikha ako ng bagong node, 350 00:22:04,830 --> 00:22:09,930 at sa wakas, ito ay 4 at 2, kaya 2 ay magiging sa kaliwa. 351 00:22:09,930 --> 00:22:12,430 At ito ang Huffman tree. 352 00:22:12,430 --> 00:22:16,060 Pagkatapos ay kapag gusto kong magsulat ng ilang teksto, 353 00:22:16,060 --> 00:22:24,440 tulad ng sa binary ma-convert sa text, gamit ang Huffman puno Napakadaling. 354 00:22:24,440 --> 00:22:30,220 Halimbawa, kung sabihin ko na gumagalaw sa kaliwa ay isang 0 at paglipat sa kanan ay isang 1, 355 00:22:30,220 --> 00:22:32,410 Ano na pagpunta sa kumakatawan? 356 00:22:32,410 --> 00:22:35,530 Kaya tulad ng 1, 1, kaya karapatan, karapatan, 357 00:22:35,530 --> 00:22:40,370 at pagkatapos ay 0, kaya ang natitira ay magiging L, at pagkatapos 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Kaya 1, 0, kaya 1 lamang, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 At pagkatapos ay 0, 1, kaya 'Z'. 360 00:22:47,540 --> 00:22:52,170 At pagkatapos 1, 0, 0 - walang. 361 00:22:52,170 --> 00:22:56,780 0, 0 ay magiging 'Y', kaya Lazy. 362 00:22:56,780 --> 00:23:06,060 Kaya na ang lahat para sa akin, Rob ng pagpunta upang sakupin. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Kaya, linggo 7 mga bagay-bagay. 364 00:23:08,400 --> 00:23:11,390 Nakakuha kami ng maraming upang pumunta sa paglipas ng talagang mabilis. 365 00:23:11,390 --> 00:23:13,430 Bitwise operator, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 library, pagkatapos ng HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Lahat ng sa tulad ng 15-20 minuto. 368 00:23:20,990 --> 00:23:24,330 Bitwise operator. Mayroong 6 na sa kanila na ang kailangan mong malaman. 369 00:23:24,330 --> 00:23:31,200 Bitwise at, bitwise o, XOR, pakaliwa shift, i-right shift, at hindi. 370 00:23:31,200 --> 00:23:35,420 Mag-right shift at hindi mo halos nakita sa lecture sa lahat. 371 00:23:35,420 --> 00:23:40,480 Susubukan naming pumunta sa paglipas ng ito mabilis dito, subalit ito ay handa na upang malaman na ang mga ito ay ang 6 na umiiral. 372 00:23:40,480 --> 00:23:45,070 Tandaan na ang bitwise operator ay tulad ng kapag gumawa ka 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Hindi ka naka pagharap sa mga binary ng 3 at 4. 374 00:23:49,420 --> 00:23:56,550 Gamit ang bitwise operator ikaw ay talagang pagharap sa mga indibidwal na mga piraso ng ang mga numero 3 at 4. 375 00:23:56,550 --> 00:23:59,120 >> Kaya ang unang isa na aming sinasabi ay bitwise hindi, 376 00:23:59,120 --> 00:24:02,340 at ang lahat ng ginagawa nito ay i-flip ang lahat ng mga piraso. 377 00:24:02,340 --> 00:24:05,500 Kaya dito, kung ikaw ay sumusulat ito sa C, ikaw ay hindi sumulat ito 378 00:24:05,500 --> 00:24:09,380 bilang ~ 11,011 o kahit ano, gusto mong isulat ito i ~ 4, 379 00:24:09,380 --> 00:24:12,970 at pagkatapos ay i-flip ito ang binary na representasyon ng 4. 380 00:24:12,970 --> 00:24:24,800 Kaya dito, ~ ng ilang mga binary numero 1101101 ay pagpunta sa eksaktong i-flip ang lahat ng 1 sa 0 at ang lahat ng 0 upang 1 ni. 381 00:24:24,800 --> 00:24:27,600 Tulad ng sinasabi ko doon, ang madalas na paggamit ng mga ito, 382 00:24:27,600 --> 00:24:30,830 at kami na makita ito sa isang bit, ay tulad ng gusto naming makabuo ng ilang mga numero 383 00:24:30,830 --> 00:24:35,460 kung saan ang lahat ng mga bits ay 1, maliban para sa isa sa mga ito. 384 00:24:35,460 --> 00:24:38,560 Kaya ito ay kadalasang mas madali upang ipahayag ang bilang 385 00:24:38,560 --> 00:24:40,630 kung saan lang na single bit ay nakatakda, 386 00:24:40,630 --> 00:24:44,650 at pagkatapos ay dadalhin ang ~ ng ito, kaya ang bawat iba pang mga bit ay nakatakda maliban para sa isa na. 387 00:24:44,650 --> 00:24:50,300 Kaya na kung ano ang pagpunta naming gumamit ng higit sa isang bit. 388 00:24:50,300 --> 00:24:58,220 >> Bitwise o. Narito ang 2 binary numero, at mga 2 numero 389 00:24:58,220 --> 00:25:00,780 ay medyo kinatawan, dahil kinakatawan nila ang bawat posibleng 390 00:25:00,780 --> 00:25:07,290 kumbinasyon ng mga piraso maaari mong kailangan upang gumana sa. 391 00:25:07,290 --> 00:25:13,540 Dito, kapag or'd ko bawat bit, kami ay lamang ng pagpunta sa ihambing diretso pababa. 392 00:25:13,540 --> 00:25:15,410 Kaya sa kaliwang bahagi mayroon kaming 1 at 1. 393 00:25:15,410 --> 00:25:20,510 Kapag bitwise ako | mga, kung ano ako ng pagpunta upang makakuha? One. 394 00:25:20,510 --> 00:25:25,320 Pagkatapos bitwise | 0 at 1 ay pagpunta sa magbibigay sa akin? One. 395 00:25:25,320 --> 00:25:27,840 Bitwise 1 at 0 ay magiging ang parehong bagay, isa. 396 00:25:27,840 --> 00:25:31,880 Bitwise 0 | 0 ay pagpunta sa akong bigyan 0. 397 00:25:31,880 --> 00:25:37,300 Kaya ang tanging kaso kung saan nakukuha ko 0 ay nasa 0 | 0 kaso. 398 00:25:37,300 --> 00:25:40,020 At maaari mong isipin na tulad ng ginagawa ng iyong mga lohikal na ors. 399 00:25:40,020 --> 00:25:44,830 Kaya kung sa tingin mo ng 1 bilang totoo at 0 bilang huwad, ang parehong bagay ay nalalapat dito. 400 00:25:44,830 --> 00:25:50,040 Kaya totoo o totoo ay totoo; totoo o hindi totoo. 401 00:25:50,040 --> 00:25:57,150 Hindi totoo o totoo ay totoo; mali o hindi totoo ay ang tanging bagay na talagang hindi totoo. 402 00:25:57,150 --> 00:26:00,100 Narito ang halimbawa na dapat mong malaman 403 00:26:00,100 --> 00:26:05,160 bilang isang magandang magandang halimbawa ng kung kailan bitwise operator ay ginamit. 404 00:26:05,160 --> 00:26:08,660 Narito kung kami o kabisera 'A' sa Ox20, 405 00:26:08,660 --> 00:26:11,830 at titingnan namin ito sa isang segundo, makakakuha tayo ng isang bagay. 406 00:26:11,830 --> 00:26:16,020 At kung namin o maliliit na 'ang isang' na may Ox20, makakakuha tayo ng isang bagay. 407 00:26:16,020 --> 00:26:26,750 Kaya ni-pull up ASCII talahanayan ipaalam. 408 00:26:26,750 --> 00:26:34,000 Okay. Narito makita namin na 'A' ay may - 409 00:26:34,000 --> 00:26:36,920 dito mayroon kaming 'A' ay desimal 65. 410 00:26:36,920 --> 00:26:45,120 Ngunit masisiyahan pumunta ako sa hexadecimal, na kung saan ay Ox41. 411 00:26:45,120 --> 00:26:48,280 Pretty bang Nakita namin ito sa klase. Sa tingin ko Nakita namin ito sa klase 412 00:26:48,280 --> 00:26:52,730 na ito ay medyo madaling i-convert mula sa hexadecimal sa binary. 413 00:26:52,730 --> 00:26:55,280 Kaya dito, kapag gusto kong ilagay 4 sa binary, 414 00:26:55,280 --> 00:26:59,550 na lamang ang pagpunta sa maging 0100. 415 00:26:59,550 --> 00:27:03,620 Ito ay 1 ng lugar, ang lugar na 2, ang lugar 4, kaya ito ay 4. 416 00:27:03,620 --> 00:27:08,550 Pagkatapos ay maaari kong hatiin 1 sa binary, na kung saan ay magiging 0001. 417 00:27:08,550 --> 00:27:14,280 At kaya ito ay magiging ang representasyon ng 'A' sa binary. 418 00:27:14,280 --> 00:27:22,720 Pagkuha ng lowercase na 'isang', ito ay ngayon pagpunta sa maging Ox61, 419 00:27:22,720 --> 00:27:27,050 kung saan, paghahati mga up sa binary nito, kaya isang 6 - 420 00:27:27,050 --> 00:27:37,830 Ni aktwal na gawin ito Hayaan - ay walang pambura? Pambura. 421 00:27:37,830 --> 00:27:48,220 Ox61. Kaya paghahati 6 sa binary ay magiging 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 At paghahati ng 1 ay magiging 0001. 423 00:27:54,610 --> 00:27:56,520 Sa pagtingin sa mga pagkakaiba sa pagitan ng mga 2, 424 00:27:56,520 --> 00:28:04,250 nakita namin na ang tanging pagkakaiba sa pagitan ng isang maliit na titik at may malaking titik 'A' ay ang nag-iisang bit. 425 00:28:04,250 --> 00:28:11,810 Kaya babalik sa dito - okay. 426 00:28:11,810 --> 00:28:15,920 Babalik sa dito, kung tinitingnan namin kung ano ang bit Ox20 ay, 427 00:28:15,920 --> 00:28:22,210 kaya paghahati ng Ox20 sa binary nito, 428 00:28:22,210 --> 00:28:27,310 ay 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, ang tanging bit na itakda ay bit na ito na kami ay nababahala sa, 430 00:28:33,470 --> 00:28:38,210 may lumilipat sa pagitan ng capital at lowercase na 'ang isang'. 431 00:28:38,210 --> 00:28:47,610 Kung ako o 'A', na kung saan ay ang isang ito, 'A', 432 00:28:47,610 --> 00:28:50,580 kung ako o 'A' sa Ox20, 433 00:28:50,580 --> 00:28:53,490 kung ano ako ng pagpunta upang makakuha? 434 00:28:53,490 --> 00:28:58,960 [Mag-aaral, hindi marinig] >> Maliit na titik 'ng', sapagkat ito ang nangyayari upang i-flip ito bit sa isang 1. 435 00:28:58,960 --> 00:29:04,170 At kung ako o 'ang isang' na may Ox20, kung ano ako ng pagpunta upang makakuha? 436 00:29:04,170 --> 00:29:08,780 Maliit na titik a, dahil oring lamang 'ang isang' na may Ox20, 437 00:29:08,780 --> 00:29:14,580 Lamang ako pupunta na oring ito solong bit sa isang 1; ito nang 1, kaya hindi mahalaga. 438 00:29:14,580 --> 00:29:17,960 Kaya makuha namin 'ang isang' at 'isang'. 439 00:29:17,960 --> 00:29:24,820 >> Bitwise at. Muli, maaari naming isipin na ito bilang aming mga lohikal at kamukhang-mukha. 440 00:29:24,820 --> 00:29:28,180 Sa kaliwang bahagi mayroon kami totoo at tunay. 441 00:29:28,180 --> 00:29:31,160 Ito ay pagpunta sa maging totoo, at para sa lahat ng mga kaso, 442 00:29:31,160 --> 00:29:36,270 hindi totoo at tama o totoo at hindi totoo, o hindi totoo at hindi totoo, 443 00:29:36,270 --> 00:29:38,550 wala sa mga bagay na totoo. 444 00:29:38,550 --> 00:29:44,170 Kaya kung ano ang napupunta namin na maging ay 1000. 445 00:29:44,170 --> 00:29:48,830 Kaya ngayon, narito, narito kung saan ginamit ko na ang mga mapagkakatiwalaan bitwise hindi, 446 00:29:48,830 --> 00:29:52,230 kung saan namin ay may Ox20. 447 00:29:52,230 --> 00:29:54,350 Kaya ito ay Ox20. 448 00:29:54,350 --> 00:29:59,570 Ngayon kung ano ang gusto kong gawin, bitwise ~ ng Ox20. 449 00:29:59,570 --> 00:30:03,600 Iyon ay pagpunta upang i-flip ang lahat ng mga piraso. 450 00:30:03,600 --> 00:30:09,330 Kaya Mayroon akong 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 At kaya 'A' anded may ~ Ox20 ay pagpunta sa magbibigay sa akin kung ano? 452 00:30:18,940 --> 00:30:22,430 Ang tanging bit talagang kailangan naming isipin ang tungkol ay ang isang ito, 453 00:30:22,430 --> 00:30:26,020 dahil, kung ang lahat ng mga bits ay nakatakda sa 1, 454 00:30:26,020 --> 00:30:29,000 pagkatapos kami ay pagpunta upang makakuha ng kung ano mismo ang 'A' ay, 455 00:30:29,000 --> 00:30:31,260 maliban sa, marahil, kung ano ito ay bit. 456 00:30:31,260 --> 00:30:34,460 Dahil kung ito ay isang 1, ngayon ito ay pagpunta sa itakda sa isang 0, 457 00:30:34,460 --> 00:30:39,810 dahil kahit anong ito ay, anded may ito ay magiging 0. 458 00:30:39,810 --> 00:30:43,280 Kaya kung ano ang 'A' & ~ Ox20 pagpunta sa magbibigay sa akin? 459 00:30:43,280 --> 00:30:48,200 [Mga mag-aaral sagutin, hindi marinig] >> At kung ano ay 'isang' at - ito ay 'A'. 460 00:30:48,200 --> 00:30:52,170 At kung ano ay 'isang' & ~ Ox20 pagpunta sa magbibigay sa akin? 461 00:30:52,170 --> 00:30:56,720 'A.' Dahil ito ay kasalukuyang isang 1. 462 00:30:56,720 --> 00:30:59,570 Anding na may ganitong 0 ay pagpunta sa gawin itong isang 0, 463 00:30:59,570 --> 00:31:02,530 at ngayon kami ay pagpunta upang makakuha ng isang 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Ang parehong ay 'A,' at huling ngunit hindi bababa sa na may ganitong uri, 465 00:31:06,600 --> 00:31:10,830 mayroon kaming XOR. Ito ay napaka magkano katulad o, 466 00:31:10,830 --> 00:31:14,400 maliban ito ay nangangahulugan lang o. 467 00:31:14,400 --> 00:31:18,420 Ito ay tulad ng kung ano ang iyong karaniwang sa tingin ng bilang o sa tunay na mundo. 468 00:31:18,420 --> 00:31:23,190 Kaya gawin mo ang alinman sa 'x' o 'y', ngunit hindi pareho. 469 00:31:23,190 --> 00:31:28,700 Narito 1 ^ 1 ay magiging 0. 470 00:31:28,700 --> 00:31:33,650 Dahil ang totoo, ito ay - hindi ito gumana pati na rin sa mga lohikal na totoo at hindi totoo 471 00:31:33,650 --> 00:31:37,150 bilang bitwise & at o gawin, 472 00:31:37,150 --> 00:31:40,100 pero totoo ^ true false. 473 00:31:40,100 --> 00:31:44,810 Dahil nais lamang naming nagbabalik ng tunay na kung ang isa lamang sa mga ito ay totoo. 474 00:31:44,810 --> 00:31:50,950 Kaya 1 ^ 1 ay 0. Paano ang tungkol sa 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Ay 1. 1 ^ 0 ay 1, 0 0 ^ ay 0. 476 00:31:56,010 --> 00:32:03,890 Kaya sa ilalim ng lahat ng mga pangyayari, 0 bitwise isang bagay 0 ay magiging 0. 477 00:32:03,890 --> 00:32:10,270 1 bitwise isang bagay 0 o 0 bitwise 1, 478 00:32:10,270 --> 00:32:14,660 kung ito ay | o ^, ito ay maging isang 1, at kung ito ay & magkakaroon ito ay 0. 479 00:32:14,660 --> 00:32:20,850 At ang tanging kaso kung saan 1 bitwise 1 ay hindi 1 ay may eksklusibong o. 480 00:32:20,850 --> 00:32:24,580 Iyan 0110. 481 00:32:24,580 --> 00:32:36,520 Kaya dito ngayon, gamit XOR - kaya hindi namin pabalik sa 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ Ox20 ay mga 2 piraso kami ng paghahambing. 483 00:32:43,480 --> 00:32:50,020 Kaya isang 1 ^ 0 ay pagpunta sa ninyo ako ng kung ano? Isang isa. 484 00:32:50,020 --> 00:32:58,430 'A' ^ Ox20 ay pagpunta sa magbibigay sa akin? Maliit na titik a. 485 00:32:58,430 --> 00:33:04,010 'Ang isang' ^ Ox20 ay pagpunta sa magbibigay sa akin? Capital A. 486 00:33:04,010 --> 00:33:09,310 Dahil kahit anong ito ay ginagawa, ito XORing may Ox20 487 00:33:09,310 --> 00:33:15,380 ay epektibo flipping kahit anong ito ay bit. 488 00:33:15,380 --> 00:33:21,240 Kung ito ay isang 0, ito ay ngayon pagpunta sa maging isang 1. 489 00:33:21,240 --> 00:33:26,160 Dahil ito ay isang 1, 1 ^ 1 ay 0. 490 00:33:26,160 --> 00:33:33,280 Kaya aming 'ang isang' ay naging 'A', at ang aming 'A' ay naging 'ang isang'. 491 00:33:33,280 --> 00:33:36,910 Kaya XOR ay isang tunay na maginhawang paraan ng flipping lamang ang kaso. 492 00:33:36,910 --> 00:33:39,960 Gusto mo lang na umulit sa isang string ng mga titik 493 00:33:39,960 --> 00:33:44,330 at pagsalitin kaso ng bawat solong character, 494 00:33:44,330 --> 00:33:50,680 ikaw lang XOR lahat ng bagay na may Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Ngayon na iniwanan namin shift. Kaliwa shift ay pagpunta lamang sa, talaga, 496 00:33:55,220 --> 00:34:01,250 itulak ang lahat ng mga numero sa, o sa kaliwa, at ipasok 0 ni sa likod ng mga ito. 497 00:34:01,250 --> 00:34:05,550 Kaya dito mayroon kaming 00,001,101. 498 00:34:05,550 --> 00:34:08,560 Kami ay pagpunta sa itulak 3 sa 0 mula sa kanan, 499 00:34:08,560 --> 00:34:13,580 at makakakuha tayo ng 01,101,000. 500 00:34:13,580 --> 00:34:16,380 Sa nonbinary termino, 501 00:34:16,380 --> 00:34:24,699 nakita namin na iyon talaga ang pagharap 13-kaliwa-Paglipat sa 3, na nagbibigay sa amin ng 104. 502 00:34:24,699 --> 00:34:32,530 Kaya kaliwang paglilipat, makikita natin dito, x << y ay isa lamang x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 ay 8, kaya 13 * 8 ay 104. 504 00:34:40,139 --> 00:34:45,679 Kung sa tingin mo lamang tungkol sa binary sa pangkalahatan, gaano bawat digit, 505 00:34:45,679 --> 00:34:49,530 kung simulan namin mula sa kanan, ito ang 1 lugar, pagkatapos ay i-lugar ang 2, at pagkatapos lugar ang 4 na. 506 00:34:49,530 --> 00:34:51,330 Kaya sa pamamagitan ng pagtulak sa 0 mula sa kanan, 507 00:34:51,330 --> 00:34:55,080 naka pagtulak lang namin ang mga bagay na nasa lugar ang 4 na lugar ang 8 ni, 508 00:34:55,080 --> 00:34:57,920 at mga bagay na nasa lugar ang 8 upang lugar ang 16 ni. 509 00:34:57,920 --> 00:35:01,280 Ang bawat shift multiply sa pamamagitan lamang ng 2. Oo? 510 00:35:01,280 --> 00:35:05,210 [Mag-aaral] Ano ang mangyayari kung ikaw Paglipat sa pamamagitan ng 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Kung Paglipat sa pamamagitan ng 5 gusto mo mawala lamang digit. 512 00:35:10,790 --> 00:35:15,410 Hindi maaaring hindi, ito ay ang parehong bagay. Tulad ng, integer ay bit sa 32 lamang, 513 00:35:15,410 --> 00:35:20,750 kaya kung idagdag mo ang 2 talagang malaki integer, ito lamang ay hindi magkasya sa isang integer. 514 00:35:20,750 --> 00:35:23,660 Kaya ito ang parehong bagay dito. Kung ikaw Paglipat sa pamamagitan ng 5, 515 00:35:23,660 --> 00:35:25,650 Gusto naming mawala lamang isa na. 516 00:35:25,650 --> 00:35:28,820 At iyon ang uri ng kung ano ang ibig sabihin ko sa pamamagitan ng "halos," 517 00:35:28,820 --> 00:35:37,470 kung saan kung lilipat ka masyadong malayo, nawalan ka ng bits. 518 00:35:37,470 --> 00:35:39,830 >> Right shift ay magiging ng kabaligtaran, 519 00:35:39,830 --> 00:35:43,090 kung saan kami ay pagpunta sa tulak 0 ng off sa dulo, 520 00:35:43,090 --> 00:35:48,400 at para sa aming mga layunin, punan 0 mula sa kaliwa. 521 00:35:48,400 --> 00:35:52,910 Kaya ginagawa ito, talaga kami pagtaliwas kung ano na kami ay tapos na. 522 00:35:52,910 --> 00:35:57,780 At nakita namin na ang tatlong 0 sa kanan ay bumagsak lamang off, 523 00:35:57,780 --> 00:36:02,020 at na-hunhon namin ang 1101 ang lahat ng mga paraan sa kanan. 524 00:36:02,020 --> 00:36:08,380 Ito ay ginagawa 104 >> 3, na kung saan ay, mabisa, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Kaya ngayon, dito, ito ay isang katulad na ideya. 526 00:36:11,200 --> 00:36:18,720 Bakit ito halos lamang ay x / 2 ^ y, at hindi talagang x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Dahil kung ako ay Paglipat sa pamamagitan ng 4, sana ako nawala isang 1. 528 00:36:22,240 --> 00:36:25,950 Talaga, ano sa tingin mo ng, sa tingin lamang ng integer division sa pangkalahatan. 529 00:36:25,950 --> 00:36:31,070 Kaya, tulad ng 5/2 ay 2. Ito ay hindi 2.5. 530 00:36:31,070 --> 00:36:35,000 Ito ay ang parehong mga ideya dito. Kapag hinati namin sa pamamagitan ng 2, 531 00:36:35,000 --> 00:36:39,910 maaari naming mawala ang mga kakaibang mga piraso sa kahabaan ng paraan. 532 00:36:39,910 --> 00:36:43,870 Kaya ngayon - iyon ito para sa bitwise. Iyon lang ang kailangan mong malaman. 533 00:36:43,870 --> 00:36:46,340 Tandaan ang mga kaso na paggamit nakita natin sa klase, 534 00:36:46,340 --> 00:36:49,340 tulad ng isang bit mask ay kapaki-pakinabang para sa bitwise operator, 535 00:36:49,340 --> 00:36:53,220 o gamitin mo ang mga ito para sa bit mask. 536 00:36:53,220 --> 00:36:58,620 Malalaking titik at maliliit na mga titik, mga conversion ay isang kaakit-akit na prototypical halimbawa. 537 00:36:58,620 --> 00:37:01,640 >> Okay, sa gayon buffer overflow na pag-atake. 538 00:37:01,640 --> 00:37:05,110 Sinuman matandaan kung ano ang mali sa function na ito? 539 00:37:05,110 --> 00:37:10,140 Abisuhan ang ipinahayag kami ng isang hanay ng mga 12 bytes, 12 na karakter, 540 00:37:10,140 --> 00:37:18,510 at pagkatapos ay kokopyahin namin sa aming buffer ng 12 char ang buong string bar. 541 00:37:18,510 --> 00:37:25,080 Kaya ano ang problema dito? 542 00:37:25,080 --> 00:37:32,270 Ang magic number 12 dapat halos agad-pop out bilang - kung bakit 12? 543 00:37:32,270 --> 00:37:35,050 Paano kung bar ang mangyayari na maging mas mababa sa 12 mga character? 544 00:37:35,050 --> 00:37:41,200 Paano kung bar ay milyon-milyong mga character? 545 00:37:41,200 --> 00:37:46,010 Narito ang isyu ay memcpy. Kung bar ay mahaba sapat, 546 00:37:46,010 --> 00:37:50,330 ito ay ganap lamang - 'c', 'c' ay hindi na mahalaga na ito ay character 12 lamang; 547 00:37:50,330 --> 00:37:53,280 'C' ay hindi na mahalaga na hindi ito maaaring magkasya na maraming bytes. 548 00:37:53,280 --> 00:37:58,250 Ito ay ganap lamang patungan pansamantalang trabaho, ang 12 bytes na inilalaan namin para rito, 549 00:37:58,250 --> 00:38:01,830 at ang lahat ng nakalipas na ito sa memorya na hindi talaga nabibilang sa na nagpapahina ng lakas 550 00:38:01,830 --> 00:38:06,520 may anuman ang string bar. 551 00:38:06,520 --> 00:38:09,780 Kaya ito ay ang larawan nakita natin sa klase 552 00:38:09,780 --> 00:38:12,220 kung saan mayroon kaming ang aming stack na lumalagong up. 553 00:38:12,220 --> 00:38:16,040 Dapat mong magamit upang ilan sa mga larawang o maging pamilyar sa mga ito muli. 554 00:38:16,040 --> 00:38:21,260 Na aming stack na lumalagong namin up, memory address magsisimula sa 0 sa tuktok 555 00:38:21,260 --> 00:38:26,270 at palaguin pababa upang i 4000000000 sa ibaba. 556 00:38:26,270 --> 00:38:28,820 Mayroon kaming ang aming array 'c' sa isang lugar sa memorya, 557 00:38:28,820 --> 00:38:32,260 pagkatapos ay mayroon kaming ang aming pointer sa bar karapatan sa ilalim nito, 558 00:38:32,260 --> 00:38:38,720 at pagkatapos ay mayroon kaming ito save frame pointer sa aming return address at stack ang aming mga magulang routine ni. 559 00:38:38,720 --> 00:38:40,800 Tandaan kung ano ang return address ay? 560 00:38:40,800 --> 00:38:45,360 Ito ay kapag ang pangunahing tawag ng isang function foo, tawag ng isang function bar, 561 00:38:45,360 --> 00:38:48,100 hindi maaaring hindi, bar babalik. 562 00:38:48,100 --> 00:38:52,610 Kaya kapag ang pagbalik ng bar, kailangan nila upang malaman na ito ang nangyayari pabalik sa foo na tinatawag na ito. 563 00:38:52,610 --> 00:39:01,360 Kaya ang return address ay ang address ng pag-andar na ito ay may upang bumalik sa kapag ang pag-andar babalik. 564 00:39:01,360 --> 00:39:05,830 Ang dahilan na mahalaga para sa pag-atake ng buffer overflow ay dahil, maginhawa, 565 00:39:05,830 --> 00:39:09,580 i hacker na baguhin na return address. 566 00:39:09,580 --> 00:39:14,950 Sa halip ng pagpunta pabalik sa foo, Pupunta ako upang bumalik sa kung saan man nais ni ang Hacker sa akin upang bumalik sa. 567 00:39:14,950 --> 00:39:17,760 At, Maginhawa, kung saan madalas Nais ni ang Hacker upang bumalik sa 568 00:39:17,760 --> 00:39:22,400 ay ang simula ng buffer na orihinal na namin ay may. 569 00:39:22,400 --> 00:39:26,170 Kaya't mapapansin, muli, Little India. 570 00:39:26,170 --> 00:39:28,490 Ang appliance ay isang halimbawa ng isang Little Indian sistema, 571 00:39:28,490 --> 00:39:34,140 kaya isang integer o isang pointer ay naka-imbak sa bytes reverse. 572 00:39:34,140 --> 00:39:38,980 Kaya dito makita namin - ay ito? Oo. 573 00:39:38,980 --> 00:39:45,660 Nakakakita kami ng Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Tandaan ang mga digit hexadecimal? 575 00:39:48,250 --> 00:39:50,640 Hindi namin baligtarin ang hexadecimal digit sa Little India, 576 00:39:50,640 --> 00:39:56,110 dahil 2 digit hexadecimal bumubuo ng isang solong byte, at baligtarin namin ang bytes. 577 00:39:56,110 --> 00:40:00,300 Iyon ang dahilan kung bakit hindi kami nag-iimbak, tulad ng, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Iniimbak namin, sa halip, ang bawat pares ng 2 digit, na nagsisimula mula sa kanan. 579 00:40:07,520 --> 00:40:10,880 Ang address na iyon ay tumutukoy sa address ng pagsisimula 580 00:40:10,880 --> 00:40:15,190 sa aming mga buffer na namin nais na aktwal na upang kopyahin papunta sa unang lugar. 581 00:40:15,190 --> 00:40:19,230 Ang dahilan na kapaki-pakinabang ay dahil, paano kung ang pag-atake 582 00:40:19,230 --> 00:40:24,100 nangyari sa, sa halip ng pagkakaroon ng isang string lamang 583 00:40:24,100 --> 00:40:27,060 isang hindi nakakapinsala string ng mga katulad, ang kanilang pangalan o isang bagay, 584 00:40:27,060 --> 00:40:33,900 ano kung, sa halip, na string ay lamang ng ilang di-makatwirang code 585 00:40:33,900 --> 00:40:38,610 na ginawa kahit anong nais nila itong gawin? 586 00:40:38,610 --> 00:40:45,630 Kaya nila - ako maaaring hindi tingin ng anumang mga cool na code. 587 00:40:45,630 --> 00:40:47,780 Ito ay maaaring maging anumang bagay, bagaman. Ang anumang mapaminsalang code. 588 00:40:47,780 --> 00:40:51,440 Kung nais nila, maaari nilang gawin lamang ng isang bagay sa seg faults, ngunit iyon ay magiging walang bisa. 589 00:40:51,440 --> 00:40:54,950 Karaniwan nilang gawin ito sa tadtarin sa iyong system. 590 00:40:54,950 --> 00:40:59,930 >> Okay. CS50 library. 591 00:40:59,930 --> 00:41:04,800 Ito ay, talaga, getInt, getString, ang lahat ng mga function na ibinigay namin para sa iyo. 592 00:41:04,800 --> 00:41:10,630 Kaya mayroon kaming pansamantalang trabaho * string, at iyon ang abstraction na namin blew ang layo 593 00:41:10,630 --> 00:41:12,450 sa isang punto sa panahon ng semestre. 594 00:41:12,450 --> 00:41:18,220 Alalahanin na ang isang string ay lamang ng isang hanay ng mga character. 595 00:41:18,220 --> 00:41:23,240 Kaya dito makita natin ang isang abridged bersyon ng getString. 596 00:41:23,240 --> 00:41:25,920 Dapat mong lingunin ito upang matandaan kung paano talaga ito ay ipinatupad. 597 00:41:25,920 --> 00:41:30,950 Key mga detalye ay, mapansin makuha namin sa isang solong character sa isang pagkakataon 598 00:41:30,950 --> 00:41:34,570 mula sa standard sa, na kung saan ay tulad lang sa amin ang pagta-type sa keyboard. 599 00:41:34,570 --> 00:41:37,890 Kaya isang solong character sa isang pagkakataon, at kung makuha namin masyadong maraming mga character, 600 00:41:37,890 --> 00:41:40,580 kaya kung n + 1 ay mas malaki sa kapasidad, 601 00:41:40,580 --> 00:41:44,140 pagkatapos ay kailangan namin upang madagdagan ang kapasidad ng aming buffer. 602 00:41:44,140 --> 00:41:47,780 Kaya dito kami pagdodoble sa laki ng aming buffer. 603 00:41:47,780 --> 00:41:51,840 At iyon ay nagpapanatili ng pagpunta; isingit namin ang mga character na sa aming buffer 604 00:41:51,840 --> 00:41:56,220 hanggang sa matanggap namin ang isang bagong linya o pagtatapos ng file o kahit anong, 605 00:41:56,220 --> 00:41:59,380 sa kasong ito, tapos na kami sa string at pagkatapos ay ang tunay na getString 606 00:41:59,380 --> 00:42:05,120 Pinaliliit ang memorya, tulad ng kung inilalaan namin ng masyadong maraming memorya magkakaroon ito bumalik at pag-urong ng kaunti. 607 00:42:05,120 --> 00:42:08,830 Kaya hindi namin ipakita na, ngunit ang pangunahing ideya ay 608 00:42:08,830 --> 00:42:11,960 ito ay upang basahin sa isang solong character sa isang pagkakataon. 609 00:42:11,960 --> 00:42:17,140 Hindi ito maaaring basahin lamang sa isang buong bagay nang sabay-sabay, 610 00:42:17,140 --> 00:42:19,550 sapagkat ang kanilang buffer ay lamang ng isang tiyak na laki. 611 00:42:19,550 --> 00:42:26,590 Kaya kung ang string na ito sinusubukan upang ipasok sa buffer ay masyadong malaki, pagkatapos ay magdudulot ito apaw. 612 00:42:26,590 --> 00:42:28,940 Kaya dito pigilan namin na sa pamamagitan lamang ng pagbabasa sa isang solong character 613 00:42:28,940 --> 00:42:33,750 sa isang pagkakataon at lumalaki sa tuwing kailangan naming. 614 00:42:33,750 --> 00:42:40,270 Kaya getInt at ang iba pang mga pag-andar CS50 library ay may posibilidad na gamitin getString 615 00:42:40,270 --> 00:42:42,310 sa kanilang mga pagpapatupad. 616 00:42:42,310 --> 00:42:45,370 Kaya naka-highlight ko ang mga mahahalagang bagay dito. 617 00:42:45,370 --> 00:42:49,460 Tawag Nag getString upang makakuha ng isang string. 618 00:42:49,460 --> 00:42:51,710 Kung nabigo getString upang bumalik memorya, 619 00:42:51,710 --> 00:42:54,270 tandaan na getString mallocs isang bagay, kaya kahit kailan mo tawagan getString 620 00:42:54,270 --> 00:42:57,820 dapat mong hindi (hindi maintindihan) palayain na string na iyong nakuha. 621 00:42:57,820 --> 00:43:02,870 Kaya dito, kung nabigo ito sa malloc isang bagay, bumalik kami INT_MAX bilang isang flag lang iyon, 622 00:43:02,870 --> 00:43:05,650 hey, kami ay hindi talagang magagawang upang makakuha ng isang integer. 623 00:43:05,650 --> 00:43:10,830 Dapat mong huwag pansinin ang anumang bumalik ako sa iyo, o 624 00:43:10,830 --> 00:43:15,540 hindi mo dapat ituring ito bilang isang wastong input. 625 00:43:15,540 --> 00:43:21,360 Sa wakas, sa pag-aakala na ang magtagumpay, ginagamit namin sscanf may espesyal na flag, 626 00:43:21,360 --> 00:43:23,820 na nangangahulugan, tumugma sa unang isang integer, 627 00:43:23,820 --> 00:43:26,770 pagkatapos ay tumugma sa anumang mga character pagkatapos na integer. 628 00:43:26,770 --> 00:43:29,070 Kaya't mapapansin gusto namin ito upang pumatas 1. 629 00:43:29,070 --> 00:43:32,940 Kaya sscanf babalik ang kung gaano karaming mga tugma kung Matagumpay na nagawa? 630 00:43:32,940 --> 00:43:37,010 Ito ay bumalik 1 kung matagumpay ito tumugma sa isang integer, 631 00:43:37,010 --> 00:43:40,890 ito ay bumalik 0 kung hindi ito tumugma sa isang integer, at ito ay bumalik 2 632 00:43:40,890 --> 00:43:45,920 kung tumugma ito isang integer na sinusundan ng ilang mga character. 633 00:43:45,920 --> 00:43:49,780 Kaya't mapapansin muling subukan namin kung tumutugma namin ang anumang bagay ngunit 1. 634 00:43:49,780 --> 00:43:55,230 Kaya kung ipinasok namin 1, 2, 3, C, o 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 pagkatapos 1, 2, 3 gusto makakuha ng naka-imbak sa integer, 636 00:43:57,400 --> 00:43:59,620 X nais makakuha ng naka-imbak sa mga karakter, 637 00:43:59,620 --> 00:44:06,410 Gusto sscanf bumalik 2, at gusto naming subukang gamitin ulit, dahil gusto lang namin ang isang integer. 638 00:44:06,410 --> 00:44:09,810 >> Mabilis na pamumulaklak sa pamamagitan ng HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 Hypertext Markup Language ay ang istraktura at semantika ng web. 640 00:44:15,340 --> 00:44:19,960 Narito ang halimbawa mula sa panayam kung saan mayroon kaming mga tag na HTML. 641 00:44:19,960 --> 00:44:22,110 Mayroon kaming head tag, katawan tag, 642 00:44:22,110 --> 00:44:27,770 mayroon kaming mga halimbawa ng mga walang laman na mga tag kung saan kami talaga ay walang isang panimula at malapit na tag, 643 00:44:27,770 --> 00:44:30,820 mayroon lang namin link at imahe. 644 00:44:30,820 --> 00:44:38,480 Walang dulong tag ng imahe; mayroong lamang isang solong tag na accomplishes ang lahat ng bagay kailangan ng tag na gawin. 645 00:44:38,480 --> 00:44:41,950 Ang link ay isang halimbawa; makikita namin kung paano ka mag-link sa CSS, 646 00:44:41,950 --> 00:44:45,910 ang script ay isang halimbawa ng kung paano mo i-link sa isang panlabas na JavaScript. 647 00:44:45,910 --> 00:44:53,100 Ito ay medyo prangka, at tandaan, HTML ay hindi isang programming language. 648 00:44:53,100 --> 00:44:58,250 Dito, tandaan kung paano mo tukuyin ang isang form o hindi bababa sa kung ano ang gagawin? 649 00:44:58,250 --> 00:45:01,740 Ang ganitong mga form sa isang May isang pagkilos at isang paraan. 650 00:45:01,740 --> 00:45:06,210 Ang pamamaraan na ito ay mo man lamang makita ang mga GET at POST. 651 00:45:06,210 --> 00:45:09,040 Kaya GET ay ang bersyon kung saan ang bagay ay makakakuha ng ilalagay sa URL. 652 00:45:09,040 --> 00:45:11,680 POST ay kung saan ito ay hindi ilalagay sa URL. 653 00:45:11,680 --> 00:45:18,520 Sa halip, ang anumang data mula sa form na ito ay naipasok sa higit pang nakatagong sa kahilingan ng HTTP. 654 00:45:18,520 --> 00:45:22,390 Kaya dito, ang pagkilos ay tumutukoy kung saan napupunta ang mga kahilingan ng HTTP. 655 00:45:22,390 --> 00:45:27,490 Saan ito ang nangyayari ay google.com / search. 656 00:45:27,490 --> 00:45:32,890 Pamamaraan. Tandaan ang mga pagkakaiba sa pagitan ng GET at POST, 657 00:45:32,890 --> 00:45:37,200 at, sabihin lamang bilang isang halimbawa, kung nais mong i-bookmark ang isang bagay. 658 00:45:37,200 --> 00:45:40,660 Hindi mo magagawang i-bookmark ang isang POST URL 659 00:45:40,660 --> 00:45:44,970 dahil ang data ay hindi kasama sa URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, ngayon, ay Hypertext Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 Ang Hypertext Transfer Protocol, gusto mong asahan ito upang maglipat ng mga 662 00:45:54,080 --> 00:45:57,710 Hypertext Markup Language, at ginagawa nito. 663 00:45:57,710 --> 00:46:00,170 Ngunit mayroon din transfer ng anumang mga imahe na mahanap ka sa Web, 664 00:46:00,170 --> 00:46:05,400 anumang mga pag-download na gagawin mo simulan bilang isang kahilingang HTTP. 665 00:46:05,400 --> 00:46:10,350 Kaya HTTP lamang ang wika ng World Wide Web. 666 00:46:10,350 --> 00:46:15,610 At dito kailangan mong nakikilala ang uri ng isang HTTP kahilingan. 667 00:46:15,610 --> 00:46:19,300 Narito HTTP/1.1 sa gilid lamang sabi iyon ang bersyon 668 00:46:19,300 --> 00:46:21,570 ng protocol gumagamit ako. 669 00:46:21,570 --> 00:46:25,770 Ito ay halos palaging magiging HTTP/1.1, bilang makikita mo ito. 670 00:46:25,770 --> 00:46:30,110 Pagkatapos nakita namin na ito ay GET, ang alternatibong pagiging POST, na maaari mong makita. 671 00:46:30,110 --> 00:46:40,790 At ang URL na ako ay sinusubukan mong bisitahin ay www.google.com/search?q = blah, blah, blah. 672 00:46:40,790 --> 00:46:44,240 Kaya tandaan na ito, ang mga tandang pananong q = blah blah blah, 673 00:46:44,240 --> 00:46:49,040 ay ang uri ng mga bagay-bagay na ay isinumite sa pamamagitan ng isang form. 674 00:46:49,040 --> 00:46:51,830 Ang tugon maaari itong bumalik sa akin magmumukhang ito. 675 00:46:51,830 --> 00:46:54,050 Muli, na nagsisimula sa protocol, na kung saan ay pagpunta sa maging iyon, 676 00:46:54,050 --> 00:46:59,190 kasunod ang code ng katayuan. Narito ito ay 200 OK. 677 00:46:59,190 --> 00:47:05,060 At sa wakas, ang web page na talaga ko tinanong para sa ay sinundan. 678 00:47:05,060 --> 00:47:08,210 Ang mga posibleng code ng katayuan na maaari mong makita, at dapat mong malaman ang ilan sa mga ito. 679 00:47:08,210 --> 00:47:12,770 200 OK marahil mo nakita bago. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, Error 500 Internal Server 681 00:47:17,830 --> 00:47:22,140 ay karaniwang kung pupunta ka sa isang website at isang bagay ay nasira o ang kanilang mga pag-crash code na PHP, 682 00:47:22,140 --> 00:47:24,930 samantalang sa appliance na mayroon kami na malaki orange na kahon 683 00:47:24,930 --> 00:47:27,830 na ay lumalabas at sabi, tulad ng, ang isang bagay ay mali, ang code na ito ay hindi gumagana 684 00:47:27,830 --> 00:47:30,380 o ito pagpapaandar ng masama. 685 00:47:30,380 --> 00:47:33,230 Karaniwan mga website ay hindi gusto mong pag-alam kung ano ang function ay aktwal na masama, 686 00:47:33,230 --> 00:47:37,880 kaya sa halip makikita lang nila magbibigay sa iyo ng 500 Panloob na error sa server. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP ay 1 layer sa ilalim ng HTTP. 688 00:47:43,050 --> 00:47:47,550 Tandaan na mayroong Internet sa labas ng World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Tulad ng kung i-play ka ng isang online game na hindi pumunta sa pamamagitan ng HTTP, 690 00:47:52,270 --> 00:47:55,740 itong ibang mapupuntahan sa pamamagitan ng isang iba't ibang - ito ay gumagamit pa rin ng Internet, 691 00:47:55,740 --> 00:47:58,900 ngunit hindi ito ang ginagamit ng HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP ay isa lamang halimbawa ng mga protocol na binuo sa TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP Literal na nangangahulugan ng Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Ang bawat computer na may IP address; ang mga ito ay mga 4-digit na mga bagay 695 00:48:11,500 --> 00:48:16,510 tulad ng 192.168.2.1, o kahit ano; na may gawi na maging isang lokal na isa. 696 00:48:16,510 --> 00:48:23,390 Ngunit iyon ay ang pattern ng isang IP address. 697 00:48:23,390 --> 00:48:29,060 Kaya ang DNS, Pangalan ng Serbisyo ng Domain, 698 00:48:29,060 --> 00:48:33,410 na kung ano ang tina-translate bagay tulad ng google.com sa isang aktwal na mga IP address. 699 00:48:33,410 --> 00:48:37,700 Kaya kung nagta-type ka na IP address sa isang URL, 700 00:48:37,700 --> 00:48:40,850 na magdadala sa iyo sa Google, ngunit ikaw ay may posibilidad hindi upang alalahanin ang mga bagay. 701 00:48:40,850 --> 00:48:45,470 Ikaw ay may posibilidad sa halip na tandaan google.com. 702 00:48:45,470 --> 00:48:51,560 Ang huling bagay na mayroon kami ay port, kung saan ito ay ang TCP bahagi ng IP. 703 00:48:51,560 --> 00:48:54,880 TCP gumagana ang higit pa. Mag-isip tungkol sa, tulad ng, mayroon kang ang pagpapatakbo ng iyong browser ng web. 704 00:48:54,880 --> 00:48:58,670 Siguro ay may ilang mga running email application iyo; 705 00:48:58,670 --> 00:49:02,150 siguro mayroon kang ilang mga iba pang mga program na gumagamit ng running Internet. 706 00:49:02,150 --> 00:49:05,090 Ang lahat ng mga kailangan ng access sa Internet, 707 00:49:05,090 --> 00:49:08,100 ngunit ang iyong computer ay may lamang 1 WiFi card o kahit anong. 708 00:49:08,100 --> 00:49:10,780 Kaya port ay ang paraan na magagawa naming maghiwalay 709 00:49:10,780 --> 00:49:13,550 paano mga application na ito ay magagawang gamitin ang Internet. 710 00:49:13,550 --> 00:49:17,230 Ang bawat application ay makakakuha ng 1 tukoy na port ay maaari na itong makinig sa, 711 00:49:17,230 --> 00:49:19,670 at sa pamamagitan ng default, ang HTTP ay gumagamit ng port 80. 712 00:49:19,670 --> 00:49:22,410 Ang ilang mga serbisyo ng email na ginagamit 25. 713 00:49:22,410 --> 00:49:24,490 Ang mga mababang-numero ay may posibilidad na ma-reserbado. 714 00:49:24,490 --> 00:49:29,270 Ikaw ay karaniwang magagawang upang makakuha ng mas mataas na bilang na mga bago para sa iyong sarili. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheet. 716 00:49:32,010 --> 00:49:36,030 Style kami ng mga pahina ng web na may CSS, hindi sa HTML. 717 00:49:36,030 --> 00:49:38,440 May 3 lugar na maaari mong ilagay ang iyong mga CSS. 718 00:49:38,440 --> 00:49:46,300 Maaari itong maging inline, sa pagitan ng estilo ng mga tag, o sa isang ganap na hiwalay na file at pagkatapos ay naka-link in 719 00:49:46,300 --> 00:49:48,470 At dito ay isa lamang halimbawa ng CSS. 720 00:49:48,470 --> 00:49:50,450 Dapat mong kilalanin ang pattern na ito, 721 00:49:50,450 --> 00:49:54,310 kung saan ang unang halimbawa ay kami ay tumutugma sa tag katawan, 722 00:49:54,310 --> 00:49:56,680 at dito kami pagsasentro ang tag katawan. 723 00:49:56,680 --> 00:50:00,420 Ang ikalawang halimbawa, kami ay tumutugma sa bagay 724 00:50:00,420 --> 00:50:04,740 may ID footer, at ipinapadala namin sa paglalapat ng ilang mga estilo upang iyon. 725 00:50:04,740 --> 00:50:07,310 Pansinin na ID footer text-aligns sa kaliwa, 726 00:50:07,310 --> 00:50:09,840 samantalang ang katawan ng teksto-aligns center. 727 00:50:09,840 --> 00:50:13,180 Footer ay nasa loob ng katawan. 728 00:50:13,180 --> 00:50:16,470 Ito ay, sa halip,-Ihanay ang teksto na kaliwa, kahit na-Ihanay teksto center katawan sabi. 729 00:50:16,470 --> 00:50:18,880 Ito ang buong cascading bahagi nito. 730 00:50:18,880 --> 00:50:22,110 Maaari kang magkaroon ng - maaari mong tukuyin ang mga estilo para sa katawan, 731 00:50:22,110 --> 00:50:25,320 at pagkatapos bagay sa katawan maaari mong tukuyin ang mas tiyak na mga estilo, 732 00:50:25,320 --> 00:50:28,160 at mga bagay na gumana tulad ng inaasahan. 733 00:50:28,160 --> 00:50:34,420 Mas tiyak na CSS specifiers ang mangunguna. 734 00:50:34,420 --> 00:50:46,140 Sa tingin ko na ito. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Hi sa lahat. Kung lamang ako maaaring makakuha ng iyong pansin. 736 00:50:49,260 --> 00:50:53,990 Ako Ali at pupuntahan ko pumunta sa pamamagitan ng PHP at SQL talagang mabilis. 737 00:50:53,990 --> 00:51:00,310 Kaya maaari naming magsimula. PHP ay maikli para sa PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 At bilang dapat mo ang lahat ng alam, ito ay isang wika na server-side scripting, 739 00:51:03,730 --> 00:51:06,800 at ginagamit namin ito para sa likod ng pagtatapos ng mga website, 740 00:51:06,800 --> 00:51:12,540 at kung paano ito gumagana ng maraming mga computations, ang bahagi sa likod ng mga eksena-. 741 00:51:12,540 --> 00:51:17,510 Syntax. Hindi ito i C, sorpresa, sorpresa. 742 00:51:17,510 --> 00:51:22,060 Palaging Ito ay upang magsimula sa, kung maaari mong makita, ang - ko maaaring hindi ilipat nang mas maaga. 743 00:51:22,060 --> 00:51:31,340 Maaari mong makita ang kailangan mo sa bagong uri ng mga tirante at pagkatapos ay kailangan mo rin ang? Php. 744 00:51:31,340 --> 00:51:35,780 Iyon ay palaging kung paano mayroon kang mag-frame ang iyong teksto ng PHP, ang iyong code na PHP. 745 00:51:35,780 --> 00:51:39,180 Kaya hindi ito lamang ay maaaring maging tulad ng C, kung saan mo uri ng unang ilagay ito sa. 746 00:51:39,180 --> 00:51:42,290 Kailangan mong palaging palibutan ito. 747 00:51:42,290 --> 00:51:47,610 At ngayon, ang mga pangunahing syntax ay na kailangan ang lahat ng mga variable na magsimula sa $ character. 748 00:51:47,610 --> 00:51:49,490 Kailangan mong gawin ito kapag naka-pagtukoy sa mga ito; kailangan mong gawin ito 749 00:51:49,490 --> 00:51:51,860 kapag tapos ka nagre-refer na sa kanila sa susunod. 750 00:51:51,860 --> 00:51:56,510 Palagi kang kailangan na $. Ito ay ang iyong bagong pinakamatalik na kaibigan, halos. 751 00:51:56,510 --> 00:52:01,690 Wala ka - hindi tulad ng C, hindi mo na kailangang ilagay kung anong uri ng uri ng variable na ito ay. 752 00:52:01,690 --> 00:52:04,940 Kaya habang ginagawa mo kailangan ang $, hindi mo na kailangang ilagay, tulad ng, 753 00:52:04,940 --> 00:52:09,470 int x o string y, at iba pa, at iba pa. 754 00:52:09,470 --> 00:52:11,490 Kaya ang isang bahagyang pagkakaiba. 755 00:52:11,490 --> 00:52:15,590 Bilang resulta ng na ito, nangangahulugan ito na PHP ay isang mahina uri. 756 00:52:15,590 --> 00:52:19,310 PHP ay isang mahina wika uri, at ito ay mahina-type na mga variable. 757 00:52:19,310 --> 00:52:24,020 Sa ibang salita, na nangangahulugan na maaari kang lumipat sa pagitan ng iba't ibang mga uri ng variable na uri. 758 00:52:24,020 --> 00:52:27,230 Maaari kang mag-imbak ang iyong numero ng 1 bilang isang int, 759 00:52:27,230 --> 00:52:29,650 Maaari kang mag-imbak ito bilang isang string, at maaari kang mag-imbak ito bilang isang float, 760 00:52:29,650 --> 00:52:33,550 at ito ay maging lahat na numero 1. 761 00:52:33,550 --> 00:52:36,080 Kahit na naka-imbak nito sa iba't-ibang mga form, 762 00:52:36,080 --> 00:52:39,120 pa rin ito - hinahawakan pa rin ang uri ng variable sa dulo. 763 00:52:39,120 --> 00:52:41,540 Kaya't kung tiningnan mo dito, kung iyong naaalala mula pset 7, 764 00:52:41,540 --> 00:52:43,500 marami sa inyo marahil ay nagkaroon ng mga isyu sa ito. 765 00:52:43,500 --> 00:52:47,280 Dalawang katumbas karatula, 3 pantay na mga karatula, 4 pantay na mga karatula. 766 00:52:47,280 --> 00:52:49,990 Okay, walang mga 4 pantay na mga palatandaan, ngunit may mga 2 at 3. 767 00:52:49,990 --> 00:52:53,320 Gamitin mo 2 katumbas senyales upang suriin ang mga halaga. 768 00:52:53,320 --> 00:52:55,830 Maaari itong tingnan sa kabuuan ng mga uri. 769 00:52:55,830 --> 00:52:58,770 Kaya kung maaari mong makita sa unang halimbawa, 770 00:52:58,770 --> 00:53:02,210 Mayroon akong num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Kaya ang iyong mga int at ang iyong mga string Parehong, technically, 1, 772 00:53:06,710 --> 00:53:10,790 ngunit ang mga ito ay iba't ibang uri. Ngunit para sa double Kapantay, ito ay pa rin pumasa. 773 00:53:10,790 --> 00:53:15,510 Gayunpaman, para sa mga triple Kapantay, sinusuri ito halaga pati na rin ang iba't-ibang uri. 774 00:53:15,510 --> 00:53:18,760 Iyon ay nangangahulugan na ito ay hindi pagpunta sa pumasa sa na pangalawang kaso dito, 775 00:53:18,760 --> 00:53:22,350 kung saan gumagamit ka ng 3 pantay na mga karatula sa halip. 776 00:53:22,350 --> 00:53:26,590 Kaya na ang isang pangunahing pagkakaiba na dapat mong lahat ang nagpakita sa ngayon. 777 00:53:26,590 --> 00:53:31,570 >> String pagdudugtong ay isa pang mahusay na bagay na maaari mong gamitin sa PHP. 778 00:53:31,570 --> 00:53:34,080 Ito ay isa lamang lang ito na madaling gamitin pagtatanda na tuldok, 779 00:53:34,080 --> 00:53:36,230 at iyon ang kung paano mo maaaring isailalim mga string ng sama-sama. 780 00:53:36,230 --> 00:53:40,800 Kaya kung mayroon kang Cat at mayroon kang Aso, at nais mong ilagay ang 2 string magkasama, 781 00:53:40,800 --> 00:53:44,080 maaari mong gamitin ang panahon, at iyon ang uri ng kung paano ito gumagana. 782 00:53:44,080 --> 00:53:46,660 Maaari mo ring lamang ilagay ang mga ito sa tabi ng bawat isa, 783 00:53:46,660 --> 00:53:49,030 bilang maaari mong makita dito sa ibabang halimbawa, 784 00:53:49,030 --> 00:53:51,610 kung saan ako echo string 1, space string 2. 785 00:53:51,610 --> 00:53:56,930 PHP ay malaman upang palitan ang mga ito bilang tulad. 786 00:53:56,930 --> 00:53:59,780 Ang mga array. Ngayon, sa PHP, may mga 2 iba't ibang mga uri ng array. 787 00:53:59,780 --> 00:54:03,180 Maaari kang magkaroon ng regular na array, at maaari mo ring magkaroon nag-uugnay array, 788 00:54:03,180 --> 00:54:06,040 at kami ay pagpunta sa pumunta sa pamamagitan ng mga ito sa ngayon. 789 00:54:06,040 --> 00:54:08,280 Regular na array lamang ito sa C, 790 00:54:08,280 --> 00:54:11,240 at sa gayon mayroon kang mga indeks na may bilang. 791 00:54:11,240 --> 00:54:13,160 Sa ngayon lang kami ng pagpunta upang lumikha ng isa at ilagay - 792 00:54:13,160 --> 00:54:15,500 kaya ito ay kung paano namin lumikha ng isang walang laman na array, pagkatapos kami ay pagpunta sa 793 00:54:15,500 --> 00:54:17,310 ilagay sa index ng numero ng 0. 794 00:54:17,310 --> 00:54:19,200 Kami ay pagpunta sa ilagay ang bilang 6, ang halaga 6. 795 00:54:19,200 --> 00:54:21,500 Maaari mong makita ito sa ilalim dito. 796 00:54:21,500 --> 00:54:24,240 Where's - sa index ng numero 1 kami ng pagpunta sa ilagay halaga bilang 4, 797 00:54:24,240 --> 00:54:26,720 at sa gayon maaari mong makita mayroong 6, may 4, 798 00:54:26,720 --> 00:54:29,160 at pagkatapos ay bilang ka sa pag-print namin ang mga bagay, 799 00:54:29,160 --> 00:54:33,550 kapag sinubukan namin at i-print ang halaga na naka-imbak sa index bilang 0, 800 00:54:33,550 --> 00:54:36,900 pagkatapos ay gagamitin namin makita ang halaga 6 ini-print mo. Cool? 801 00:54:36,900 --> 00:54:40,160 Kaya na regular na array para sa iyo. 802 00:54:40,160 --> 00:54:42,750 Ang isa pang paraan maaari mo ring idagdag ang mga bagay na regular na array ngayon 803 00:54:42,750 --> 00:54:44,780 ay maaari mo lamang isama ang mga ito sa dulo. 804 00:54:44,780 --> 00:54:47,240 Nangangahulugan iyon na hindi mo na kailangang tukuyin ang partikular na index. 805 00:54:47,240 --> 00:54:51,000 Maaari mong makita ang numero, at pagkatapos ay sa square bracket walang tinukoy na index. 806 00:54:51,000 --> 00:54:56,270 At ito ay alam - PHP ay malaman upang idagdag lamang ito sa dulo ng listahan, ang susunod na libreng lugar. 807 00:54:56,270 --> 00:54:59,190 Kaya maaari mong makita ang 1 doon sa na 0 lugar, 808 00:54:59,190 --> 00:55:02,690 ang 2 nagpunta doon sa unang puwesto. 809 00:55:02,690 --> 00:55:04,690 Ang 3 pumupunta - ay idinagdag din doon. 810 00:55:04,690 --> 00:55:06,720 Kaya na uri ng saysay. Lamang ka patuloy na pagdagdag nito, 811 00:55:06,720 --> 00:55:09,360 at pagkatapos ay kapag kami ay echoing sa index ng numero 1, 812 00:55:09,360 --> 00:55:13,080 ito ay i-print ang halaga 2. 813 00:55:13,080 --> 00:55:16,800 >> Pagkatapos mayroon kaming array na nag-uugnay array. 814 00:55:16,800 --> 00:55:19,370 Nag-uugnay array, sa halip ng pagkakaroon ng numerical mga indeks, 815 00:55:19,370 --> 00:55:23,630 kung ano ang ginagawa nila ay, mayroon silang mga indeks na sa pamamagitan ng string. 816 00:55:23,630 --> 00:55:25,670 Maaari mong makita, sa halip na - Nakatanggap ako mapupuksa ang lahat ng mga numero ng mga indeks, 817 00:55:25,670 --> 00:55:32,140 at ngayon ito ay key1, key2, key3, at ang mga ito ay sa double quote upang magpahiwatig na ang mga ito ay ang lahat ng mga string. 818 00:55:32,140 --> 00:55:34,470 Kaya maaari kaming magkaroon ng isang halimbawa ng mga ito. 819 00:55:34,470 --> 00:55:38,790 Ang halimbawa nito ay mayroon kaming ang tf, at iyon ang pangalan index. 820 00:55:38,790 --> 00:55:42,030 Kami ay pagpunta sa ilagay "Ali" bilang pangalan, sa index, calories kinakain, 821 00:55:42,030 --> 00:55:47,640 Maaari naming ilagay sa isang int oras na ito sa halip ng isang string, 822 00:55:47,640 --> 00:55:52,240 at pagkatapos ay sa index ng mga gusto, maaari naming ilagay ang isang buong array sa loob nito. 823 00:55:52,240 --> 00:55:55,490 Kaya ito ay uri ng - ito ay isang katulad na konsepto sa kung paano namin ay may 824 00:55:55,490 --> 00:55:58,930 mga indeks na may mga numero, ngunit ngayon ay maaari naming baguhin ang mga indeks sa paligid 825 00:55:58,930 --> 00:56:03,890 upang magkaroon ng mga ito bilang mga string sa halip. 826 00:56:03,890 --> 00:56:06,070 Maaari mo ring gawin ito, bukod sa lamang gawin ito nang paisa-isa, 827 00:56:06,070 --> 00:56:09,400 Maaari mo ang lahat ng ito gawin sa isang tipak. Kaya maaari mong makita na tf ng na array, 828 00:56:09,400 --> 00:56:13,350 at pagkatapos ay itakda namin ang mga ito lahat sa isang higanteng square bracket set. 829 00:56:13,350 --> 00:56:15,220 Kaya maaari na mapabilis ang mga bagay up. 830 00:56:15,220 --> 00:56:19,730 Ito ay higit pa sa isang pangkakanyahan choice kaysa hindi. 831 00:56:19,730 --> 00:56:21,550 Mayroon din kaming mga loop. 832 00:56:21,550 --> 00:56:26,020 Sa C mayroon kaming mga loop na gumagana tulad nito. 833 00:56:26,020 --> 00:56:29,690 Nagkaroon kami ng aming mga array, at kami ay nagpunta mula sa index ng 0 sa dulo ng listahan, 834 00:56:29,690 --> 00:56:31,740 at i-print namin ang lahat ng ito, tama? 835 00:56:31,740 --> 00:56:33,880 Maliban ang problema ay, para sa nag-uugnay array, 836 00:56:33,880 --> 00:56:36,610 hindi namin kinakailangang alam ang mga numerikal na indeks ng 837 00:56:36,610 --> 00:56:39,610 dahil ngayon ay mayroon kaming ang mga indeks ng string. 838 00:56:39,610 --> 00:56:44,800 Ngayon ginagamit namin foreach loop, kung saan, muli, mo sana ay ginamit sa pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach loop malalaman lamang bawat solong bahagi ng listahan. 840 00:56:48,930 --> 00:56:52,450 At ito ay hindi na kailangang eksaktong alam ang index ng numerical na mayroon ka. 841 00:56:52,450 --> 00:56:56,490 Kaya mayroon kang foreach syntax, kaya foreach, ilagay mo ang array. 842 00:56:56,490 --> 00:57:00,430 Kaya ang aking mga array ay tinatawag na pset, at pagkatapos ay bilang, ang salita bilang, 843 00:57:00,430 --> 00:57:04,530 at pagkatapos mong ilagay ito lokal na pansamantalang variable na kayo ay pagpunta sa gamitin 844 00:57:04,530 --> 00:57:10,690 para lamang sa mga partikular na bagay na pupuntahan matagal ang tiyak - 845 00:57:10,690 --> 00:57:14,770 Halimbawa isa o ang isa na seksyon ng array. 846 00:57:14,770 --> 00:57:18,350 Pset num ay humawak 1, at pagkatapos ay marahil ito ay pindutin nang matagal ang numero 6, 847 00:57:18,350 --> 00:57:20,410 at pagkatapos ay ito pindutin nang matagal ang numero 2. 848 00:57:20,410 --> 00:57:26,630 Ngunit ito ay garantisadong upang pumunta sa pamamagitan ng bawat solong halaga na sa array. 849 00:57:26,630 --> 00:57:30,530 Kapaki-pakinabang na mga pag-andar na dapat mong malaman sa PHP ay ang mga nangangailangan, 850 00:57:30,530 --> 00:57:35,880 nang sa gayon ay tinitiyak na kayo ay kabilang ang ilang mga file, echo, lumabas, walang laman. 851 00:57:35,880 --> 00:57:40,490 Masidhing kong inirerekumendang kang tumingin sa pset 7 at tumingin sa mga function. 852 00:57:40,490 --> 00:57:42,810 Maaaring mayroon kang malaman iyon, 853 00:57:42,810 --> 00:57:47,060 kaya talagang ko malalaman kung ano, eksakto, iyon ay paggawa ng lahat. 854 00:57:47,060 --> 00:57:50,080 >> At ngayon kami ay pagpunta sa pumunta sa pamamagitan ng saklaw talaga mabilis. 855 00:57:50,080 --> 00:57:53,490 Sa saklaw, PHP ay uri ng isang funky bagay, hindi tulad ng C, 856 00:57:53,490 --> 00:57:56,170 at kaya lang kami ng pagpunta sa pumunta sa pamamagitan ng ito mabilis. 857 00:57:56,170 --> 00:57:58,930 Kaya sabihin nating simulan namin sa na arrow na mayroon kami doon. 858 00:57:58,930 --> 00:58:02,900 At kami ay pagpunta sa magsimula sa $ i. Kaya ang variable ang 'i' ay magiging 0, 859 00:58:02,900 --> 00:58:06,730 at kami ay lamang ng pagpunta sa panatilihin ang pag-print ito sa na malaki puting kahon banda roon. 860 00:58:06,730 --> 00:58:09,220 Kami ay pagpunta sa magsimula sa i0, at pagkatapos kami ay pagpunta sa echo ito. 861 00:58:09,220 --> 00:58:12,670 Kaya naroon ang 0. 862 00:58:12,670 --> 00:58:15,210 At pagkatapos ay kami ay pagpunta sa dagdagan ito sa pamamagitan ng para sa loop, 863 00:58:15,210 --> 00:58:17,810 at pagkatapos ito ay magiging halaga ng 1. 864 00:58:17,810 --> 00:58:20,070 Ang isa ay mas mababa sa 3, kaya pagpunta sa pumasa sa pamamagitan ng na para sa loop, 865 00:58:20,070 --> 00:58:23,230 at pagkatapos kami ay pagpunta upang makita muli itong naka-print. 866 00:58:23,230 --> 00:58:25,520 Kami ay pagpunta sa dagdagan itong muli sa 2, 867 00:58:25,520 --> 00:58:29,860 at 2 ay mas mababa sa 3, kaya makikita ito pumasa ang para sa loop, at makikita ito i-print ang 2. 868 00:58:29,860 --> 00:58:35,100 Pagkatapos ay makikita mo tandaan na 3 ay hindi mas mababa sa 3, kaya ipapakita namin masira out ng para sa loop. 869 00:58:35,100 --> 00:58:40,050 Kaya ngayon na lumabas kami, at pagkatapos kami ay pagpunta sa pumunta sa aFunction. 870 00:58:40,050 --> 00:58:45,010 Okay. Kaya kailangan mong tandaan na ito variable na aming nilikha, 871 00:58:45,010 --> 00:58:48,270 ang 'i' na variable, ay hindi lokal scoped. 872 00:58:48,270 --> 00:58:50,280 Iyon ay nangangahulugan na ito ay hindi lokal sa loop, 873 00:58:50,280 --> 00:58:58,060 at variable na maaari pa rin namin ma-access at baguhin pagkatapos, at ito ay magiging epektibo pa rin. 874 00:58:58,060 --> 00:59:02,160 Kaya kung pumunta ka sa ang pag-andar ngayon, makikita mo na ring gamitin namin ang 'i' na variable, 875 00:59:02,160 --> 00:59:05,320 at kami ay pagpunta sa dagdagan ang 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Gusto mong isipin, sa una, batay sa C, na na ang isang kopya ng 'i' variable. 877 00:59:09,410 --> 00:59:12,830 Ito ay isang ganap na kakaiba bagay, na kung saan ay tama. 878 00:59:12,830 --> 00:59:16,560 Kaya kapag i-print namin ito, kami ay pagpunta sa i-print ang 'i' + +, na kung saan ay pagpunta sa i-print out na 4, 879 00:59:16,560 --> 00:59:19,640 at pagkatapos kami ay pagpunta sa - paumanhin. 880 00:59:19,640 --> 00:59:22,030 Pagkatapos kami ay pagpunta sa magtapos out sa na function, 881 00:59:22,030 --> 00:59:24,820 at kami ay pagpunta sa maging kung saan arrow na ngayon. 882 00:59:24,820 --> 00:59:29,190 Iyon ay nangangahulugan na pagkatapos, gayunpaman, kahit na ang function ay nagbago ang halaga ng 'i', 883 00:59:29,190 --> 00:59:32,620 hindi ito baguhin sa labas ng pag-andar, 884 00:59:32,620 --> 00:59:35,060 dahil ang function ay may nakahiwalay na saklaw. 885 00:59:35,060 --> 00:59:38,960 Nangangahulugan iyon na kapag Echo namin ang 'i', hindi ito ang nagbago sa ang saklaw ng pag-andar, 886 00:59:38,960 --> 00:59:43,660 at kaya pagkatapos kami ay pagpunta sa i-print muli 3. 887 00:59:43,660 --> 00:59:47,520 Iba't ibang bagay tungkol sa saklaw sa PHP kaysa sa C. 888 00:59:47,520 --> 00:59:51,130 >> Ngayon sa PHP at HTML. 889 00:59:51,130 --> 00:59:53,510 PHP ay ginagamit upang gumawa ng mga web page dynamic. 890 00:59:53,510 --> 00:59:58,660 Ito uri ng gumagawa ng mga bagay na naiiba. 891 00:59:58,660 --> 01:00:02,090 Mayroon kaming ito naiiba mula sa HTML. 892 01:00:02,090 --> 01:00:05,230 Sa HTML, palagi lang namin magkaroon ng parehong static na bagay, tulad ng kung paano ito ay nagpakita ng Rob, 893 01:00:05,230 --> 01:00:09,370 samantalang ang PHP, maaari mong baguhin ang mga bagay batay sa kung sino ang gumagamit ay. 894 01:00:09,370 --> 01:00:11,830 Kaya kung mayroon akong ito, ko, "Ikaw ay naka-log in bilang -" at pagkatapos ay ang pangalan, 895 01:00:11,830 --> 01:00:14,420 at ang maaari kong baguhin ang pangalan. Kaya ngayon ang pangalan ay Joseph, 896 01:00:14,420 --> 01:00:18,880 at ito ay may "tungkol sa akin," ngunit pagkatapos ay maaari kong ring baguhin ang pangalan upang magkaroon Tommy. 897 01:00:18,880 --> 01:00:21,700 At iyon ay magiging isang iba't ibang mga bagay. 898 01:00:21,700 --> 01:00:23,840 Kaya pagkatapos ay maaari naming ring baguhin ang iba't ibang mga bagay tungkol sa kanya, 899 01:00:23,840 --> 01:00:27,070 at ito ay nagpapakita ng iba't ibang nilalaman batay sa pangalan. 900 01:00:27,070 --> 01:00:31,430 Kaya PHP Maaari uri ng baguhin kung ano ang nagaganap sa iyong website. 901 01:00:31,430 --> 01:00:33,540 Parehong dito. Still, tandaan na mayroon sila ng ibang nilalaman, 902 01:00:33,540 --> 01:00:38,870 kahit na technically-access mo pa rin na parehong web pahina sa ibabaw. 903 01:00:38,870 --> 01:00:43,450 Bumubuo ng HTML. May 2 iba't ibang mga paraan na maaari mong gawin ito. 904 01:00:43,450 --> 01:00:48,980 Kaya ipagpapatuloy namin sa pamamagitan ng na ngayon. Ang unang paraan ay, mayroon kang - oo, paumanhin. 905 01:00:48,980 --> 01:00:51,150 Kaya mayroon lamang sa iyo ang iyong regular para sa loop sa PHP, 906 01:00:51,150 --> 01:00:56,270 at pagkatapos ay echo mo sa PHP at echo mo out HTML. 907 01:00:56,270 --> 01:00:58,720 Paggamit ng kung ano ang ipinakita sa iyo Rob ng HTML script 908 01:00:58,720 --> 01:01:04,030 at pagkatapos ay ang paggamit ng naka-print na PHP upang mag-print lang ito sa web page. 909 01:01:04,030 --> 01:01:09,520 Ang alternatibong paraan ay ang gawin ito bilang kung ihiwalay mo ang PHP at HTML. 910 01:01:09,520 --> 01:01:11,940 Kaya maaari kang magkaroon ng isang linya ng PHP na magsisimula ang para sa loop, 911 01:01:11,940 --> 01:01:16,020 pagkatapos ay maaari kang magkaroon ng mga linya ng HTML sa isang hiwalay na bagay, 912 01:01:16,020 --> 01:01:19,700 at pagkatapos ay magtapos ka sa loop, muli, na may PHP. 913 01:01:19,700 --> 01:01:21,800 Kaya ito ay uri ng naghihiwalay ito. 914 01:01:21,800 --> 01:01:24,020 Sa kaliwang bahagi, maaari mong mayroon ka ng lahat ng - 915 01:01:24,020 --> 01:01:26,360 ito ay tipak 1 lang ng PHP. 916 01:01:26,360 --> 01:01:28,510 Sa kanan na maaari mong makita na ikaw ay may isang linya ng PHP, 917 01:01:28,510 --> 01:01:32,540 mayroon kang isang linya ng HTML, at mayroon kang muli ng isang linya ng PHP. 918 01:01:32,540 --> 01:01:36,870 Kaya na naghihiwalay sa ito sa kung anong ginagawa nila. 919 01:01:36,870 --> 01:01:39,330 At makikita mo tandaan na alinman paraan, para sa alinman sa mga ito, 920 01:01:39,330 --> 01:01:41,980 i-print pa rin nila ang mga imahe, mga larawan, mga imahe, 921 01:01:41,980 --> 01:01:44,540 kaya na HTML pa rin ay naka-print sa parehong paraan. 922 01:01:44,540 --> 01:01:49,870 At pagkatapos ay makakakita ka pa rin ng 3 mga larawan lalabas sa inyong website. 923 01:01:49,870 --> 01:01:52,820 Kaya ito ay 2 iba't ibang mga paraan ng paggawa ng parehong bagay. 924 01:01:52,820 --> 01:01:55,060 >> Ngayon mayroon kaming mga form at mga kahilingan. Tulad ng ipinakita sa iyo Rob, 925 01:01:55,060 --> 01:01:59,400 mayroong mga paraan ng HTML, at aming lamang Breeze sa pamamagitan ng ito. 926 01:01:59,400 --> 01:02:02,040 Mayroon kang isang aksyon at mayroon kang isang pamamaraan, at ang iyong mga aksyon 927 01:02:02,040 --> 01:02:04,350 uri ng nagpapakita sa iyo kung saan ka ng pagpunta sa ipadala ito, at ang mga pamamaraan ay kung 928 01:02:04,350 --> 01:02:06,960 ito ay pagpunta sa maging GET o isang POST. 929 01:02:06,960 --> 01:02:11,220 At isang kahilingan GET, tulad ng sinabi Rob, nangangahulugan na kayo ay pagpunta sa ilagay ito sa isang form 930 01:02:11,220 --> 01:02:15,760 at makikita mo ito bilang isang URL, samantalang ang isang POST kahilingan mo ay hindi makakakita sa isang URL. 931 01:02:15,760 --> 01:02:17,840 Kaya ang isang bahagyang pagkakaiba. 932 01:02:17,840 --> 01:02:19,950 Gayunpaman, isang bagay na ang isang katulad na bagay 933 01:02:19,950 --> 01:02:22,560 ay na POST at GET ay pantay hindi secure. 934 01:02:22,560 --> 01:02:26,430 Kaya maaari mong isipin na dahil lamang hindi mo makita ito sa URL, 935 01:02:26,430 --> 01:02:28,790 na nangangahulugang ang POST ay mas ligtas, 936 01:02:28,790 --> 01:02:34,420 ngunit maaari mo pa ring makita ito sa iyong mga cookies sa impormasyon na ipapadala mo. 937 01:02:34,420 --> 01:02:38,260 Kaya huwag isipin na ang tungkol sa isa o ang iba. 938 01:02:38,260 --> 01:02:42,160 Isa pang bagay upang tandaan ay na mayroon ka ring mga variable na seksyon. 939 01:02:42,160 --> 01:02:45,850 Ikaw guys ginamit ito sa pset 7 upang makuha ang iyong impormasyon ng user ID. 940 01:02:45,850 --> 01:02:48,550 Ano ang nangyari noon ay na maaari mong gamitin ito nag-uugnay array, 941 01:02:48,550 --> 01:02:53,310 ang $ _SESSION, at pagkatapos ikaw ay makakapag-access sa iba't ibang bagay 942 01:02:53,310 --> 01:02:57,720 at mag-store ng iba't ibang mga bagay sa kabuuan ng mga pahina. 943 01:02:57,720 --> 01:03:00,750 >> Huling bagay ay mayroon kaming SQL, Naka-istrakturang Wika Query, 944 01:03:00,750 --> 01:03:04,360 at ito ay isang programming language upang pamahalaan ang mga database. 945 01:03:04,360 --> 01:03:08,220 Ano, eksakto, ay mga database? Ang mga ito ay mga koleksyon ng mga talahanayan, 946 01:03:08,220 --> 01:03:10,630 at ang bawat talahanayan ay maaaring magkaroon ng katulad na uri ng mga bagay. 947 01:03:10,630 --> 01:03:14,990 Kaya nagkaroon kami ng isang talaan ng mga gumagamit sa iyong pset pananalapi. 948 01:03:14,990 --> 01:03:20,610 At bakit kapaki-pakinabang ang mga ito? Dahil ito ay isang paraan ng permanenteng pag-iimbak ng impormasyon. 949 01:03:20,610 --> 01:03:22,840 Ito ay isang paraan ng pagsubaybay sa mga bagay at pamamahala ng mga bagay 950 01:03:22,840 --> 01:03:25,890 at aktwal na makita ito sa iba't ibang mga pahina at nag-iingat ng track. 951 01:03:25,890 --> 01:03:29,930 Sapagkat kung ini-imbak mo lang ito sa na ang isa agarang sandali 952 01:03:29,930 --> 01:03:33,720 at pagkatapos ay gamitin ito sa ibang pagkakataon, hindi mo magagawang i-access ang anumang bagay na iyong na-save. 953 01:03:33,720 --> 01:03:37,660 Mayroon kaming 4 mga pangunahing bagay na ginagamit namin para sa SQL command. 954 01:03:37,660 --> 01:03:40,190 Mayroon kaming select, insert, tanggalin, at i-update. 955 01:03:40,190 --> 01:03:42,880 Iyon ang talagang mahalaga para sa iyo guys upang malaman para sa iyong pagsusulit. 956 01:03:42,880 --> 01:03:45,990 >> Kaming makikita mabilis na pumunta sa paglipas ng piliin ngayon. 957 01:03:45,990 --> 01:03:48,540 Talaga, ka ng pagpili sa mga hilera mula sa database. 958 01:03:48,540 --> 01:03:52,400 Kaya kung mayroon kang, dito mismo - 959 01:03:52,400 --> 01:03:56,740 mayroon kaming mga 2 iba't-ibang mga bagay, at gusto naming pumili mula sa talahanayan ng mga klase 960 01:03:56,740 --> 01:04:01,480 kung saan kahanga-hangang - kung saan sa kahanga-hangang hanay na ang halaga ay 1. 961 01:04:01,480 --> 01:04:04,460 Kaya maaari mong makita dito, mayroon kaming mga 2 mga bagay ng pangalan ng klase, 962 01:04:04,460 --> 01:04:08,490 CS50 at Stat110, at mayroon kaming mga klase at mga ID ng slogan. 963 01:04:08,490 --> 01:04:13,150 Kaya gusto namin upang piliin ang lahat ng impormasyon na iyon. 964 01:04:13,150 --> 01:04:17,480 Pagkatapos ay maaari mong makita dito mismo na ito uri ng pagpili out sa na kahanga-hangang hanay, 965 01:04:17,480 --> 01:04:25,170 kung saan lahat ng bagay ay 1, at pagkatapos nito ay ang klase ID, pangalan ng klase at slogan na maaari itong mamili. 966 01:04:25,170 --> 01:04:28,100 Paano eksaktong gagawin mo ito sa code? Mayroon kang upang gamitin ang PHP. 967 01:04:28,100 --> 01:04:33,830 Kaya na uri ng kung paano PHP at SQL ay may kaugnayan sa isa't isa. 968 01:04:33,830 --> 01:04:38,130 Ngayon na mayroon kami sa aming code, at kami ay pagpunta sa gamitin ang aming mga query 969 01:04:38,130 --> 01:04:41,370 tulad ng ginawa namin sa pset 7, at kami ay pagpunta upang patakbuhin ang SQL query. 970 01:04:41,370 --> 01:04:43,870 Pagkatapos kami ay pagpunta sa may - 971 01:04:43,870 --> 01:04:46,280 palagi naming mayroon upang suriin kung triple katumbas hilera kung hindi totoo. 972 01:04:46,280 --> 01:04:49,010 Kaya muli, nais mong suriin ang mga uri at ang halaga, 973 01:04:49,010 --> 01:04:53,880 at pagkatapos ay kung ito ay hindi gumana, pagkatapos ay gusto mong Humihingi, gaya ng dati, tulad ng ginawa namin sa pset 7. 974 01:04:53,880 --> 01:04:55,870 Kung hindi man, gusto mong i-loop sa pamamagitan ng lahat ng bagay na may mga madaling-gamiting 975 01:04:55,870 --> 01:04:59,410 foreach loop na nagpunta kami sa ibabaw lamang. 976 01:04:59,410 --> 01:05:01,280 Ngayon na kami ay sa pamamagitan ng looping at gumawa kami ng nakalipas na ito, 977 01:05:01,280 --> 01:05:05,080 Ipagpalagay nating na ang aming query pumasa sa ipaalam, na ngayon ay mayroon kaming ang aming foreach loop. 978 01:05:05,080 --> 01:05:11,050 At ang unang hilera ito ay may, kaya narito ang hilera, dito mismo; ito ay boxed. 979 01:05:11,050 --> 01:05:14,010 Ito ay pagpunta sa i-print out ang lahat ng mga impormasyon na ito ay nakuha. 980 01:05:14,010 --> 01:05:18,070 Kaya ito ay pagpunta sa i-print out sa ilalim "Nais mong Dagdagan ang HTML?" 981 01:05:18,070 --> 01:05:23,370 Pagkatapos ito ay pagpunta sa pumunta sa susunod na hilera, dahil ito ay nakumpleto ang unang para sa loop, 982 01:05:23,370 --> 01:05:26,510 at kaya pagkatapos ito ay pagpunta sa i-print ang pangalawang linya ng ito, 983 01:05:26,510 --> 01:05:32,120 na kung saan ay pagpunta sa maging STAT110, Hanapin ang lahat ng mga sandali. 984 01:05:32,120 --> 01:05:34,290 >> Isang huling bagay ay sa SQL mga kahinaan. 985 01:05:34,290 --> 01:05:37,300 Alam ko hinawakan David sa ito nang kaunti sa panayam. 986 01:05:37,300 --> 01:05:40,730 Maaari mong basahin ito sa ibang pagkakataon. Ito ay talagang nakakatawa. 987 01:05:40,730 --> 01:05:45,320 SQL Injection ay isang uri ng mapaglalang bagay. 988 01:05:45,320 --> 01:05:49,890 Sabihin natin na ilagay mo lamang ang mga variable pakanan papunta sa iyong query, 989 01:05:49,890 --> 01:05:52,290 bilang maaari mong makita sa na unang linya. 990 01:05:52,290 --> 01:05:54,520 Kaya ito ay tila fine, tama? Lamang naglalagay ka ng sa user name 991 01:05:54,520 --> 01:05:58,820 at password sa iyong SQL query, at nais mong ipadala ang mga ito off at makakuha ng kahit ano ang nasa iyong mga talahanayan ng data. 992 01:05:58,820 --> 01:06:01,450 Iyon ay tila medyo simple. Kaya nagbibigay-daan sa sabihin ng isang tao ay nilalagay sa, 993 01:06:01,450 --> 01:06:04,910 para sa mga password, ito O teksto dito mismo - 994 01:06:04,910 --> 01:06:06,780 Dapat talagang nasa pulang kahon. 995 01:06:06,780 --> 01:06:11,920 Kaya sabihin nating na sila ilagay na password sa - na kung ano ang ipinasok nila. 996 01:06:11,920 --> 01:06:16,520 Kaya ito ay naka-putting O "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Kind ng isang ulok password upang magkaroon. 998 01:06:20,880 --> 01:06:25,070 Makikita mo tandaan na sa na SQL query ngayon palitan lamang sa mga ito Ngayon ipaalam, at, 999 01:06:25,070 --> 01:06:29,090 ito sinusuri upang palaging totoo, dahil makikita mo tandaan na 1000 01:06:29,090 --> 01:06:32,240 maaari mong SQL query piliin ang lahat ng impormasyon na ito 1001 01:06:32,240 --> 01:06:35,420 o maaari mong lamang magkaroon ng 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Kaya na palaging pagpunta upang suriin sa true. 1003 01:06:41,030 --> 01:06:46,610 Iyon hindi pagpunta ay upang talagang gumagana, dahil ibig sabihin nito ay na ang Hacker maaaring masira sa iyong system. 1004 01:06:46,610 --> 01:06:49,300 Ang solusyon dito ay na mayroon ka upang gamitin ang PDO system, 1005 01:06:49,300 --> 01:06:51,360 na nangangahulugan na mayroon kang upang gamitin ang mga tandang pananong, 1006 01:06:51,360 --> 01:06:53,350 na kung saan ay kung ano ang iyong guys ginamit sa pset 7, 1007 01:06:53,350 --> 01:06:57,620 kung saan ka ng pagpunta sa gumamit ng isang tandang pananong sa halip na kung saan mo nais na ilagay ang isang bagay, 1008 01:06:57,620 --> 01:07:01,430 at pagkatapos ay ka pagpunta sa magkaroon ng isang kuwit, at pagkatapos ay magkakaroon ka pagkatapos, 1009 01:07:01,430 --> 01:07:07,610 pagkatapos ng iyong string, ang iba't ibang mga variable na gusto mong palitan sa iyong tandang pananong. 1010 01:07:07,610 --> 01:07:10,330 Kaya makikita mo tandaan dito na ngayon Mayroon akong mga pulang tandang pananong. 1011 01:07:10,330 --> 01:07:15,420 Pagkatapos ko bang ilagay ang mga variable pagkatapos ng aking mga string ng sa gayon ay alam kong palitan ang mga ito sa ganoong pagkakasunod-sunod pagkatapos. 1012 01:07:15,420 --> 01:07:18,470 Iyon ay siguraduhin na kapag ang isang tao gagawin nito na tulad nito, 1013 01:07:18,470 --> 01:07:24,050 at mayroon silang o 1 = 1 sitwasyon, na tiyakin, 1014 01:07:24,050 --> 01:07:30,490 sa dulo pabalik, tiyakin na hindi ito aktwal na masira ang SQL query. 1015 01:07:30,490 --> 01:07:33,660 Okay, kaya na medyo magkano ito, isang ipuipo ng PHP at SQL. 1016 01:07:33,660 --> 01:07:41,520 Suwertehin ka sana sa lahat ng sa iyo, at ngayon upang Ore. 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Okay lahat. Oras upang pumunta sa paglipas ng ilang JavaScript 1018 01:07:44,270 --> 01:07:48,840 at ilang iba pang mga bagay masyadong mabilis kaya hindi kami hawak mo up ngayong gabi. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Oo. JavaScript ay uri ng isang astig na bagay, purportedly. 1020 01:07:56,930 --> 01:07:59,090 Ang mga bagay na kailangan mo ba talagang malaman tungkol sa JavaScript, ito ay isang uri ng tulad ng 1021 01:07:59,090 --> 01:08:03,810 ang client-side dulo ng kung ano ang iyong web app ay pagpunta sa ginagawa. 1022 01:08:03,810 --> 01:08:08,280 Mayroong ilang mga bagay na mo lamang ayaw mong mag-ingat ng lahat ng oras sa gilid ng server. 1023 01:08:08,280 --> 01:08:12,880 Ang lahat ng mga maliit na mga pakikipag-ugnayan, pag-highlight ang isang bagay, paggawa ng isang bagay mawala. 1024 01:08:12,880 --> 01:08:15,340 Ikaw talaga ayaw mong magkaroon upang makipag-usap sa iyong server sa lahat ng oras para doon. 1025 01:08:15,340 --> 01:08:18,069 At ang ilan sa mga iyon ay hindi kahit posible na gawin sa gilid server. 1026 01:08:18,069 --> 01:08:21,899 Ito ay kung bakit kailangan namin ng isang bagay tulad ng JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Cool bagay tungkol sa JavaScript: Ito ay dynamic na-type. 1028 01:08:24,359 --> 01:08:27,149 Ano ang ibig sabihin nito ay na ang iyong programa ay hindi kailangang malaman 1029 01:08:27,149 --> 01:08:30,970 ano, eksakto, ang mga variable ay kapag isulat mo ito out. 1030 01:08:30,970 --> 01:08:34,510 Makikita lamang ito ng isang uri ng malaman ito bilang pinapagana nito. 1031 01:08:34,510 --> 01:08:37,520 Iba pang mga bagay na cool na tungkol dito: Ito ay isang kulot wika suhay, 1032 01:08:37,520 --> 01:08:41,359 na nangangahulugan na ang syntax ay katulad ng C at PHP. 1033 01:08:41,359 --> 01:08:47,050 Hindi mo kailangang gawin magkano rework kapag naka-aaral ng JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Narito mayroon kami ng kaunting JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Kawili-wiling bagay dito mismo ay na, kung ang pagtingin mo dito, 1036 01:08:52,560 --> 01:08:56,330 magkaroon kami ng kaunting JavaScript doon sa head tag. 1037 01:08:56,330 --> 01:08:59,479 Ano ang ibig ay isa lamang isama lamang ng isang JavaScript na file. 1038 01:08:59,479 --> 01:09:02,260 Ito ay isang paraan maaari mong isama ang JavaScript sa iyong programa. 1039 01:09:02,260 --> 01:09:06,910 Pagkatapos ng ikalawang kaunti ay talagang ilang mga inline na JavaScript, 1040 01:09:06,910 --> 01:09:10,790 na halos kapareho sa isang estilo naaayon sa CSS, 1041 01:09:10,790 --> 01:09:16,180 at lamang sumusulat ka ng ilang mga code masyadong mabilis doon. 1042 01:09:16,180 --> 01:09:18,120 JavaScript ay array. 1043 01:09:18,120 --> 01:09:20,850 Isa pang paraan lamang upang panatilihin sa paligid ng data, napaka kapaki-pakinabang. 1044 01:09:20,850 --> 01:09:25,180 Napakabuti at madaling syntax. 1045 01:09:25,180 --> 01:09:29,870 Gumamit ka ng mga square bracket upang ma-access ang lahat at panatilihin ang lahat ng bagay nang magkakasama. 1046 01:09:29,870 --> 01:09:35,020 Wala masyadong kumplikado. 1047 01:09:35,020 --> 01:09:38,630 Ang mga cool na bagay tungkol sa JavaScript at mga wika scripting sa pangkalahatan 1048 01:09:38,630 --> 01:09:40,920 ay hindi mo na kailangang mag-alala tungkol sa laki ng array. 1049 01:09:40,920 --> 01:09:43,880 Maaari mo lamang gamitin array.length at subaybayan ang mga ito, 1050 01:09:43,880 --> 01:09:46,960 at din ang array ay maaaring lumaki o pag-urong bilang kailangan mo ito sa. 1051 01:09:46,960 --> 01:09:49,279 Kaya hindi mo kahit na kailangang mag-alala tungkol sa anumang uri ng, 1052 01:09:49,279 --> 01:09:57,050 oh hindi, kailangan ko upang magtalaga ng higit pang mga bagay, o anumang bagay tulad na. 1053 01:09:57,050 --> 01:10:00,090 >> Ang mga cool na bagay dito ay na ang JavaScript ay may isang bagay na tinatawag na mga bagay. 1054 01:10:00,090 --> 01:10:04,800 Ito ay isang object-oriented wika, kaya kung ano ito ay ay, mahalagang, 1055 01:10:04,800 --> 01:10:10,100 isang paraan para sa iyo na data ng pangkat magkasama, medyo katulad ng isang struct, 1056 01:10:10,100 --> 01:10:17,280 ngunit maaari mong i-access ito tulad ng isang struct o sa isang nag-uugnay array syntax. 1057 01:10:17,280 --> 01:10:22,520 Ito ay medyo simple at ano ang maaari mong gawin sa mga ito ang data ng pangkat magkasama 1058 01:10:22,520 --> 01:10:24,810 kung mayroon kang isang bungkos ng mga data na may kaugnayan. 1059 01:10:24,810 --> 01:10:26,850 Dahil ang lahat ng mga bagay na kailangan mong upang ilarawan ang isang kotse, 1060 01:10:26,850 --> 01:10:29,050 Hindi mo kailangang magkaroon ng ito sa isang bungkos ng iba't ibang mga lugar. 1061 01:10:29,050 --> 01:10:35,300 Maaari mong ilagay lang ito sa 1 bagay sa JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Habang ikaw ay marahil alam, iterating ay isa sa mga nakakapagod na gawain. 1063 01:10:39,090 --> 01:10:43,810 Gawin mo lang ito sa isang paulit-ulit. Kailangan mong makipag-usap sa bawat bagay sa kotse, 1064 01:10:43,810 --> 01:10:47,340 o kailangan mo upang pumunta sa pamamagitan ng bawat item sa isang listahan o isang bagay tulad na. 1065 01:10:47,340 --> 01:10:51,770 Kaya JavaScript ay, katulad ng PHP, isang foreach syntax. 1066 01:10:51,770 --> 01:10:54,590 Sa kasong ito, ito ay isang para sa loop. 1067 01:10:54,590 --> 01:10:57,300 Gusto mong gamitin ito lamang sa mga bagay. 1068 01:10:57,300 --> 01:11:01,030 May ilang mga problema na nagaganap kung gagamitin mo ito sa array. 1069 01:11:01,030 --> 01:11:03,750 Ito sa pangkalahatan ay isa sa mga bagay-bagay, bagaman, ito ay isang kapaki-pakinabang, 1070 01:11:03,750 --> 01:11:06,590 dahil puksain ang marami kang mga overhead 1071 01:11:06,590 --> 01:11:10,270 dahil hindi mo na kailangang mag-pull up ang lahat sa iyong bagay sa pamamagitan ng iyong sarili. 1072 01:11:10,270 --> 01:11:12,300 Hindi mo kailangang tandaan ang lahat ng mga mahahalagang pangalan. 1073 01:11:12,300 --> 01:11:18,270 Ikaw lamang ang uri ng mga ito pabalik sa ang syntax na ito. 1074 01:11:18,270 --> 01:11:21,500 Sa ito, may para sa, gusto mo lamang na tandaan 1075 01:11:21,500 --> 01:11:27,180 na nakakakuha ka pabalik lahat ang mga key, sa isang halos katulad na paraan upang hash table. 1076 01:11:27,180 --> 01:11:30,880 Kung naaalala mula sa na, kapag nais mong ilagay sa isang string na maaari mong makuha ang isang bagay out 1077 01:11:30,880 --> 01:11:33,840 na may isang nauugnay na halaga sa mga ito. 1078 01:11:33,840 --> 01:11:36,360 Ano ang maaari mong gawin sa mga ito ay maaari mong sabihin, ang lahat ng karapatan, 1079 01:11:36,360 --> 01:11:42,120 Naglagay ako sa isang kotse, at tinatawag ko itong isang Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Kaya maaari mong ilalagay sa string Ferrari muli sa ibang pagkakataon, at maaari kang makakuha ng na-out. 1081 01:11:45,290 --> 01:11:50,000 At maaari mong gawin iyon sa isang loop, na may para sa loop. 1082 01:11:50,000 --> 01:11:53,320 Kaya lamang ang nalalaman tungkol sa bagay. Ang pangunahing bagay mula ito kailangan mong matandaan 1083 01:11:53,320 --> 01:12:00,340 ay na maaari mong gamitin ang bagay struct tulad ng syntax kahit kailan mo gusto sa mga ito, 1084 01:12:00,340 --> 01:12:04,590 maliban kung ano ang iyong pagpunta upang magamit bilang isang string ay hindi isang wastong pangalan ng variable. 1085 01:12:04,590 --> 01:12:07,650 Kaya't kung tiningnan mo ang na doon, mayroon kaming key na may mga puwang. 1086 01:12:07,650 --> 01:12:12,500 Well, kung ikaw ay upang ilagay object.key, espasyo, may, puwang, puwang, 1087 01:12:12,500 --> 01:12:15,320 na lamang ay hindi magkaroon ng kahulugan syntactically. 1088 01:12:15,320 --> 01:12:22,730 Kaya mo lamang maaaring gawin na may ganitong uri ng bracket syntax. 1089 01:12:22,730 --> 01:12:26,520 >> Gayundin, ang JavaScript ay napaka-saklaw-matalino sa PHP. 1090 01:12:26,520 --> 01:12:29,050 Mayroon kang 2 paraan ng pagtugon sa saklaw. 1091 01:12:29,050 --> 01:12:31,960 Hindi ka maaaring magkaroon ng var sa harap ng isang variable, 1092 01:12:31,960 --> 01:12:34,060 at iyon lamang ang ibig sabihin nito ay global. 1093 01:12:34,060 --> 01:12:37,050 Maaari mong tingnan ito mula sa kahit saan. Kahit na kung ikaw ay upang ilagay ito sa isang kung pahayag, 1094 01:12:37,050 --> 01:12:42,430 saan pa man sa iyong code pagkatapos ng puntong iyon na maaari mong makita na variable na iyon. 1095 01:12:42,430 --> 01:12:46,730 Isa pang bagay, bagaman, ay sa pamamagitan ng var, ito ay limitado sa kahit anong function na ikaw ay in 1096 01:12:46,730 --> 01:12:48,870 Kung ikaw ay hindi sa isang function, na rin, ito ay global. 1097 01:12:48,870 --> 01:12:53,900 Ngunit kung ikaw ay nasa isang function ito ay nakikita lamang ng loob na function. 1098 01:12:53,900 --> 01:12:56,420 Wala akong isang halimbawa, ngunit, oo. Isa ito sa mga bagay na kung saan ang 1099 01:12:56,420 --> 01:12:59,900 maaari mong pamahalaan kung ano ang mga variable nais mong maging global, 1100 01:12:59,900 --> 01:13:03,810 ano variable nais mong maging lokal, ngunit mo kailangang maging maingat tungkol dito, 1101 01:13:03,810 --> 01:13:06,890 dahil hindi mo na kailangang ang uri ng mga masasarap na butil na kontrol ginagawa mo sa C, 1102 01:13:06,890 --> 01:13:15,820 kung saan kung ang isang bagay ay ipinahayag sa isang para sa loop, ito ay pagpunta upang manatili sa na para sa loop. 1103 01:13:15,820 --> 01:13:18,790 Ang bagay na talagang pinahahalagahan namin tungkol sa paggamit ng JavaScript para ay pagmamanipula ng mga web page, i-right? 1104 01:13:18,790 --> 01:13:21,800 Ibig kong sabihin, na ang dahilan kung bakit namin ginagawa ito. 1105 01:13:21,800 --> 01:13:23,840 >> Upang magawa iyon, gumagamit kami ng isang bagay na tinatawag na DOM. 1106 01:13:23,840 --> 01:13:25,850 Ang Dokumento Bagay Model. 1107 01:13:25,850 --> 01:13:29,430 Talaga, ano ang ginagawa nito ay tumatagal ng lahat ng iyong HTML 1108 01:13:29,430 --> 01:13:34,110 at mga modelo out ito sa isang bungkos ng mga bagay na nested sa loob ng bawat isa. 1109 01:13:34,110 --> 01:13:37,080 Mong simulan out na may isang bagay na katulad nito. 1110 01:13:37,080 --> 01:13:44,770 Mayroon kang, sa kanan para sa akin, isang bungkos ng code out doon na uri ng - 1111 01:13:44,770 --> 01:13:46,640 Gusto mong isipin na nais maging napakahirap upang manipulahin, 1112 01:13:46,640 --> 01:13:48,700 dahil gusto mo ay pag-parse sa pamamagitan ng grupo ng mga teksto 1113 01:13:48,700 --> 01:13:52,080 at pagkakaroon upang piraso hiwalayin bagay. At kung ano kung ito ay hindi wastong nai-format? 1114 01:13:52,080 --> 01:13:54,880 Masamang bagay ang mangyayari. 1115 01:13:54,880 --> 01:13:58,140 Kaya JavaScript tumatagal ng pag-aalaga ng mga ito para sa iyo, at makakakuha ka ng isang magandang istraktura ng data, 1116 01:13:58,140 --> 01:14:01,390 tulad ng isa sa aking kaliwa, kung saan mayroon na lamang kayong isang dokumento, 1117 01:14:01,390 --> 01:14:03,530 at sa loob na mayroon kang isang bagay na tinatawag na HTML, 1118 01:14:03,530 --> 01:14:05,600 at sa loob na mayroon kang isang ulo at isang katawan, 1119 01:14:05,600 --> 01:14:08,420 at sa loob na ulo mayroon kang isang pamagat, at iba pa, at iba pa, at iba pa. 1120 01:14:08,420 --> 01:14:11,810 Pinapasimple ito pagmamanipula ng isang web page upang ito ay para lamang, 1121 01:14:11,810 --> 01:14:14,190 oh, gusto ko lang makipag-usap sa bagay na ito. 1122 01:14:14,190 --> 01:14:21,340 Pagsunud-sunurin ayon ng isang halos katulad na paraan na gusto mong makipag-usap sa isa pang bagay na ginawa mo sa iyong sarili. 1123 01:14:21,340 --> 01:14:25,980 Tulad ng sinabi ko, ang lahat ng mga DOM ay nasa sa bagay na dokumento. 1124 01:14:25,980 --> 01:14:29,290 Alinman ito lamang ay isang lugar at pagkatapos ay maaari kang pumunta sa loob nito upang mahanap ang mga bagay, 1125 01:14:29,290 --> 01:14:33,880 at maaari mong gawin ito - ito ay ang lumang estilo ng paggawa nito, hanggang doon, 1126 01:14:33,880 --> 01:14:38,130 kung saan gagawin mo document.getElementById, at pagkatapos ay ang pangalan, 1127 01:14:38,130 --> 01:14:42,420 at bilang maaari mong marahil sabihin, ito ay nagiging sobrang mahirap gamitin matapos ang ilang panahon. 1128 01:14:42,420 --> 01:14:44,480 Kaya marahil hindi nais upang gawin iyon. Iyon ay kung bakit mayroon kaming 1129 01:14:44,480 --> 01:14:48,760 ang susunod na bagay kami ay pagpunta sa makipag-usap tungkol sa pagkatapos na ito. 1130 01:14:48,760 --> 01:14:52,510 Ang pangunahing bagay dito ay na, ang lahat ng karapatan, mayroon ka ng lahat ang mga elementong ito, tama? 1131 01:14:52,510 --> 01:14:56,400 Kaya siguro ang maaari kong palitan ang kulay ng isang bagay kapag nag-load ang pahina. 1132 01:14:56,400 --> 01:14:58,380 Kaya kung ano? Paano kung ang aking user ay nag-click ng isang bagay? 1133 01:14:58,380 --> 01:15:00,540 Gusto ko ito upang gawin ang isang bagay kawili-wiling kapag nag-click sila ng isang bagay. 1134 01:15:00,540 --> 01:15:02,600 Iyon ay kung bakit mayroon kaming mga kaganapan. 1135 01:15:02,600 --> 01:15:05,330 Maaari mong, talaga, makahanap ng anumang mga sangkap sa iyong DOM, 1136 01:15:05,330 --> 01:15:08,560 at pagkatapos ay sabihin, hey. Kapag ito naglo-load o may nag-click ito, 1137 01:15:08,560 --> 01:15:11,410 o kapag sila mouse sa ibabaw ng ito, gawin ang isang bagay na may ito. 1138 01:15:11,410 --> 01:15:15,330 At kung ano ang mayroon ka ay, mayroon kang mga pag-andar na pangasiwaan ito para sa iyo. 1139 01:15:15,330 --> 01:15:17,980 Ang mga pag-andar ng mga handler ng kaganapan. 1140 01:15:17,980 --> 01:15:20,440 Ano they're - ito ay lamang ng isang magarbong paraan ng sinasabi, 1141 01:15:20,440 --> 01:15:23,500 ito function ay ipinatupad lamang kapag nangyari ang kaganapan na ito. 1142 01:15:23,500 --> 01:15:28,070 Kaya nito pinangangasiwaan ang kaganapan na nangyayari. 1143 01:15:28,070 --> 01:15:30,810 Ito ay kung paano mo gustong mag-ipon out ng handler ng kaganapan. 1144 01:15:30,810 --> 01:15:34,750 Mayroon akong ilang mga pindutan, at kapag nag-click mo ito, explodes ito. 1145 01:15:34,750 --> 01:15:40,560 Kaya huwag i-click ang pindutan. 1146 01:15:40,560 --> 01:15:42,910 Ito ay isang paraan ng papalapit na ito, i-right? 1147 01:15:42,910 --> 01:15:46,430 Mayroon kang isang tag na pindutan, at sa pag-click mayroon kang isang string na nagsasabing, 1148 01:15:46,430 --> 01:15:50,460 oh, sa pamamagitan ng ang paraan, gawin ko ito sumasabog na bagay para sa akin. 1149 01:15:50,460 --> 01:15:53,990 Kung hindi man, ito ay katulad lamang ng isang regular na pindutan na iyong ginawa. 1150 01:15:53,990 --> 01:15:56,550 Maaari mo ring gawin ito ng isa pang paraan, 1151 01:15:56,550 --> 01:16:02,770 sa pamamagitan ng daklot ang DOM element, ngunit magkakaroon save namin na matapos naming makipag-usap tungkol sa jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Ito ay isang library na cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Maaari mo itong gamitin sa halos kahit ano. 1154 01:16:09,580 --> 01:16:12,090 At nagbibigay sa iyo ito lamang ng maraming mga tool upang gumana sa. 1155 01:16:12,090 --> 01:16:15,850 Dahil ang JavaScript, habang malakas, ay walang lahat ng mga kasangkapang kinakailangan mo 1156 01:16:15,850 --> 01:16:20,550 sa labas ng kahon upang talagang matugunan ang isang web app na maaaring gusto mong gawin. 1157 01:16:20,550 --> 01:16:24,650 Kaya pinapasimple ito ng maraming mga bagay, ay nagbibigay sa iyo ng maraming mga pag-andar 1158 01:16:24,650 --> 01:16:28,760 sa labas ng kahon na nais mong normal na kailangang isulat ang iyong sarili, paulit-ulit. 1159 01:16:28,760 --> 01:16:31,600 At lamang Ginagawang napaka-simple ang mga bagay. 1160 01:16:31,600 --> 01:16:35,780 Mayroon ka ring tagapili, na ipaalam magdadala sa iyo ang lahat ng mga elemento 1161 01:16:35,780 --> 01:16:42,800 mula sa iyong DOM higit pa lamang, sa halip ng pagkakaroon upang magamit ang mga napakatagal pinaandar na mga tawag. 1162 01:16:42,800 --> 01:16:46,630 Higit sa mga tagapili. Mayroon kang, hanggang doon ka pa, sabihin nating 1163 01:16:46,630 --> 01:16:49,800 Gusto kong makakuha ng isang elemento na may ID "bato." 1164 01:16:49,800 --> 01:16:56,450 Well, sa jQuery, ito ay $ lamang at pagkatapos ay isang string na may kalahating kilong, at pagkatapos ay "rock." 1165 01:16:56,450 --> 01:17:01,960 Ito ay napaka-simple at marami mas mabilis kaysa sa tradisyunal na JavaScript paraan ng tackling ang problemang ito. 1166 01:17:01,960 --> 01:17:06,120 At mayroon kang katulad na bagay para sa mga klase at mga uri ng elemento. 1167 01:17:06,120 --> 01:17:08,140 jQuery ay - isa sa mga cool na tampok ay maaari mong uri ng compress ang 1168 01:17:08,140 --> 01:17:14,350 down na ang iyong mga query sa iyong DOM napaka, napakabilis. 1169 01:17:14,350 --> 01:17:18,980 Ngayon kami ay pabalik sa handling kaganapan, at ito ay kung paano mo gustong pangasiwaan ang isang kaganapan sa jQuery. 1170 01:17:18,980 --> 01:17:23,090 Kaya kung ano kami ay pagpunta dito ay sinasabi na namin, ang lahat ng karapatan. Mayroon akong script tag, i-right? 1171 01:17:23,090 --> 01:17:25,400 Kaya Mayroon akong na ito ng mga inline na JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Ano kami ay pagpunta sa gawin ay kami ay pagpunta sa sabihin, ang lahat ng karapatan. 1173 01:17:27,750 --> 01:17:30,860 Kapag ang dokumento ay handa na, na nangangahulugan na ang dokumento ay nai-load, 1174 01:17:30,860 --> 01:17:34,660 pupunta kami upang pumunta sa sa na function, at kami ay pagpunta sa sabihin, ang lahat ng karapatan, 1175 01:17:34,660 --> 01:17:37,060 ang pagpapaganang ito ay aktwal na paggawa ng isang bagay iba. 1176 01:17:37,060 --> 01:17:42,320 Ay isa lamang na sinasabi nito, lahat ng karapatan, kumuha sa akin ang elemento na may ID "myid." 1177 01:17:42,320 --> 01:17:47,960 At pagkatapos ay bigyan ito ng isang humahawak ng function na executes kapag nag-click mo ito. 1178 01:17:47,960 --> 01:17:49,820 Talaga kung ano ang ginagawa ito ay, sinasabi nito, ang lahat ng karapatan. 1179 01:17:49,820 --> 01:17:52,630 Ang pahina ay malo-load, kaya pupuntahan ko sa, hanapin ang elementong ito, 1180 01:17:52,630 --> 01:17:56,420 bigyan ito ng handler ng kaganapan na ito, at ito ay nagtatakda talaga up ang iyong pahina para sa iyo. 1181 01:17:56,420 --> 01:18:00,520 At ito ay kung paano mo nais na isipin ang tungkol sa pangangasiwa ng kaganapan. 1182 01:18:00,520 --> 01:18:06,310 Gusto mo lang mag-isip tungkol sa, lahat ng karapatan, kapag ang isang bagay ay nangyayari, ano ang gusto kong mangyari? 1183 01:18:06,310 --> 01:18:10,520 Hindi mo nais na isipin ang tungkol, okay, kailangan ko upang matiyak na bagay na ito uusap sa bagay na ito, 1184 01:18:10,520 --> 01:18:14,660 bagay na ito blah blah blah, dahil gusto mo lamang na makipag-usap bagay sa mga tuntunin ng kaganapan. 1185 01:18:14,660 --> 01:18:17,650 Kapag nangyari ito, nangyari ito. Kapag nangyari ito, na mangyayari. 1186 01:18:17,650 --> 01:18:20,240 At kung ang mga bagay-trigger sa iba pang mga bagay, mabuti iyan. 1187 01:18:20,240 --> 01:18:22,150 Ngunit hindi mo nais na subukan at gawin kumplikado code 1188 01:18:22,150 --> 01:18:24,130 kung saan ka nagti-trigger ng maramihang mga bagay nang sabay-sabay, 1189 01:18:24,130 --> 01:18:28,860 dahil lamang ka ng pagpunta sa bigyan ang iyong sarili ng isang sakit ng ulo. 1190 01:18:28,860 --> 01:18:32,340 >> Lahat ng karapatan. Ngayon ay maaari naming makuha ang aming pahina upang mahawakan ang mga kaganapan, 1191 01:18:32,340 --> 01:18:35,640 ngunit sabihin nating ang aking mga user ay nag-click ng isang pindutan. 1192 01:18:35,640 --> 01:18:38,040 Paano kung gusto kong magpadala na kahilingan pabalik sa server, 1193 01:18:38,040 --> 01:18:41,100 ngunit hindi ko nais upang i-reload ang pahina, dahil hindi na kinakailangang i-reload ang isang bagong pahina 1194 01:18:41,100 --> 01:18:44,390 bawat solong oras ang nakukuha ng uri ng nakakainip, at kung bakit kailangan ko 1195 01:18:44,390 --> 01:18:47,430 upang hilahin pababa ang header muli, at muli ang footer, 1196 01:18:47,430 --> 01:18:49,670 at ang lahat ng mga elemento ng pahina ng muli 1197 01:18:49,670 --> 01:18:53,180 lamang upang i-refresh ang pagbati o ang oras? 1198 01:18:53,180 --> 01:18:55,290 Kaya na ang dahilan kung bakit mayroon kaming isang bagay tulad ng Ajax. 1199 01:18:55,290 --> 01:18:59,150 Ano ang maaari naming gawin dito sa Ajax ay maaari naming sabihin, ang lahat ng karapatan, 1200 01:18:59,150 --> 01:19:01,290 Gusto kong ipadala ang ilang mga data sa server, 1201 01:19:01,290 --> 01:19:04,010 at gusto ko upang makakuha ng isang tugon pabalik sa gayon maaari kong i-update ang aking pahina, 1202 01:19:04,010 --> 01:19:12,120 o siguro gawin lamang ng ilang mga algorithmic kalkulasyon na ay hindi kinakailangang magpakita ng kahit ano sa user. 1203 01:19:12,120 --> 01:19:15,500 Ano ang kailangan mong gawin ito? Well, kailangan mo ng URL kailangan mong makipag-usap sa. 1204 01:19:15,500 --> 01:19:18,650 Maaari hindi lamang magically makinig sa iyong server mula sa walang pinanggalingan. 1205 01:19:18,650 --> 01:19:21,960 Kailangan mong magkaroon ng isang tukoy na lugar ipapadala mo ang data na ito sa. 1206 01:19:21,960 --> 01:19:26,240 At kailangan mo rin ang ilang mga data upang magpadala, o marahil ito ay isang dataless query. 1207 01:19:26,240 --> 01:19:31,380 Gusto mo lang upang i-ping pabalik sa server at sabihin, hey, ako buhay, o isang bagay tulad na. 1208 01:19:31,380 --> 01:19:35,150 At pagkatapos ay nais mo ang isang function na talaga humahawak sa tagumpay. 1209 01:19:35,150 --> 01:19:38,250 Sabihin nating makabalik ng ilang impormasyon mula sa iyong server, 1210 01:19:38,250 --> 01:19:42,960 at gusto mong baguhin ang pamagat ng gumagamit sa kanilang pahina. 1211 01:19:42,960 --> 01:19:44,930 Kaya nais mong makakuha ng impormasyon pabalik, 1212 01:19:44,930 --> 01:19:48,860 at gusto mo itulak na sa screen. 1213 01:19:48,860 --> 01:19:51,170 Ano ang mangyayari ay, kapag ang pahina ay handa na, 1214 01:19:51,170 --> 01:19:56,500 kang lumikha ng on-click ang function para sa pindutan na tinatawag na greeter. 1215 01:19:56,500 --> 01:19:58,810 Ano pagkatapos ay gumagana ito ay, kapag pindutan na ay hunhon, 1216 01:19:58,810 --> 01:20:03,700 mong makipag-usap sa greetings.php, gumawa ka ng POST kahilingan, 1217 01:20:03,700 --> 01:20:07,290 at sabihin mo, hey, kumuha ako ng isang bagay mula sa iyong pahina. 1218 01:20:07,290 --> 01:20:09,890 Hindi kami talaga kailangan upang ilarawan iyon, ngunit greetings.php, 1219 01:20:09,890 --> 01:20:12,480 sabihin nating lang, nagbibigay sa likod "kumusta mundo." 1220 01:20:12,480 --> 01:20:15,650 Kaya kami makababalik ito "kumusta mundo," at sa tagumpay ng ito, 1221 01:20:15,650 --> 01:20:20,730 sa pag-aakala walang napupunta mali, pagkatapos ay pumunta lang namin sa na-target na lugar 1222 01:20:20,730 --> 01:20:25,720 na tinukoy namin at ilagay lang namin ang pagtugon sa doon. 1223 01:20:25,720 --> 01:20:31,560 At ito ay isang napaka-simpleng paraan ng pagse-set up ng isang Ajax query. 1224 01:20:31,560 --> 01:20:34,340 >> Tunay mabilis, uri ng mga nabanggit na ito Rob na, 1225 01:20:34,340 --> 01:20:37,170 mga bagay na maaari magkamali, masamang bagay ay maaaring mangyari, 1226 01:20:37,170 --> 01:20:42,660 kaya gusto mong maging pamilyar sa mga code na tugon ng HTTP. 1227 01:20:42,660 --> 01:20:46,030 Ano ang mga ito ay lamang, tulad ng, 200, ang lahat ng bagay nagpunta okay. 1228 01:20:46,030 --> 01:20:48,670 Ibang bagay, masamang bagay ang nangyari. 1229 01:20:48,670 --> 01:20:50,790 Ito ay sa pangkalahatan ang mga bagay na gusto mong matandaan. 1230 01:20:50,790 --> 01:20:53,440 Ngunit ito ay magaling na malaman ang lahat ng mga ito. 1231 01:20:53,440 --> 01:20:55,970 At sa wakas, sa sandaling na nawala namin ang lahat ng iyon, 1232 01:20:55,970 --> 01:20:58,680 kailangan namin upang makipag-usap nang napakabilis tungkol sa disenyo, 1233 01:20:58,680 --> 01:21:00,620 at pagkatapos ay maaari naming ipaalam sa iyo ang lahat ng mga umalis. 1234 01:21:00,620 --> 01:21:03,410 Disenyo. Mga bagay na nais mong matandaan. 1235 01:21:03,410 --> 01:21:06,950 Tanungin ang iyong sarili ang mga katanungang ito: Sino ang mag-i-gamit na ito? 1236 01:21:06,950 --> 01:21:09,580 Ano ang mga ito ay gamitin ito para sa? Ano ang aking mga user na nagmamalasakit sa? 1237 01:21:09,580 --> 01:21:11,750 Ano ang hindi nila asikasuhin? 1238 01:21:11,750 --> 01:21:14,500 Ikaw lamang ang ayaw na gumawa ng isang app at hayaan ito lumalaki lamang 1239 01:21:14,500 --> 01:21:18,270 at maging ang higanteng, lahat gugulin bagay na hindi mo kahit na maaaring matapos. 1240 01:21:18,270 --> 01:21:23,900 Gusto mong magkaroon ng hiwalay mga layunin at mga plano at mga bagay na nais mong tugunan. 1241 01:21:23,900 --> 01:21:29,000 Gawin itong walang hirap. Ang lahat ng ito sabi, talaga, 1242 01:21:29,000 --> 01:21:34,950 gawin itong madali para sa gumagamit na gamitin ito; huwag gawin itong isang higanteng patak ng teksto tulad ng slide na ito ay, talaga. 1243 01:21:34,950 --> 01:21:38,020 Gusto mo lamang ito upang maging isang bagay na kung saan ay masyadong madali para sa isang tao upang pumunta sa 1244 01:21:38,020 --> 01:21:40,800 at gawin kung ano ang gusto nilang gawin. 1245 01:21:40,800 --> 01:21:42,920 Hindi mo na nais ang mga ito upang magkaroon ng upang mag-navigate 5 mga pahina 1246 01:21:42,920 --> 01:21:45,460 upang makapunta sa iyong de-kalidad na pag-andar ng iyong site. 1247 01:21:45,460 --> 01:21:49,290 Kung nagkaroon ng Google 5 mga pahina bago maaari mong kahit na maghanap ng isang bagay na, 1248 01:21:49,290 --> 01:21:53,080 walang sinuman ang maaaring gamitin ito. 1249 01:21:53,080 --> 01:21:55,890 At bilang wakas, papel prototype, focus group. 1250 01:21:55,890 --> 01:21:59,220 Magkaroon ng magandang disenyo at mga kasanayan sa pagsubok. 1251 01:21:59,220 --> 01:22:00,730 Dahil lamang sa tingin mo ito gumagana para sa iyo, 1252 01:22:00,730 --> 01:22:04,860 ay hindi nangangahulugan na ang sinuman sa palagay nito ay gumagana. 1253 01:22:04,860 --> 01:22:14,490 Ngunit oo, na ito. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]