1 00:00:00,000 --> 00:00:02,270 >> [Aktualizácia: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali nahmatá, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] 3 00:00:04,620 --> 00:00:07,660 [To je CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Vitajte všetci. To je preskúmanie kvíz 1. 5 00:00:11,610 --> 00:00:15,040 Rovnako ako upozornenie, to je - mám na mysli, budeme sa snažiť pokryť 6 00:00:15,040 --> 00:00:17,770 ako veľké množstvo materiálu, ako je to možné, ale to neznamená, že 7 00:00:17,770 --> 00:00:20,780 budeme pokrývať všetky veci, ktoré môžu byť v kvíze 1. 8 00:00:20,780 --> 00:00:25,270 Takže sa uistite, že máte tiež sa pozrieť na prednášku, časti, všetko, čo môžete. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 bude v stredu budúcu stredu. 10 00:00:28,240 --> 00:00:33,800 Tak sa určite študovať. Bude to byť docela veľa, ako prvý kvíz 11 00:00:33,800 --> 00:00:36,390 pokiaľ ide o jeho formát, ale to asi bude oveľa ťažšie. 12 00:00:36,390 --> 00:00:39,600 Aspoň v minulom roku, kedy som vzal 50, myslel som, že to bolo oveľa ťažšie. 13 00:00:39,600 --> 00:00:42,410 Tak veľa študovať. 14 00:00:42,410 --> 00:00:45,190 >> Idem na pokrytie dátové štruktúry a Huffmanova kódovanie. 15 00:00:45,190 --> 00:00:47,910 To je niečo, čo mnoho ľudí myslí, že je zložitý, 16 00:00:47,910 --> 00:00:51,930 ale budem sa snažiť, aby to tak jednoduché, ako je to možné. 17 00:00:51,930 --> 00:00:56,330 Po prvé, to, čo chceme, vy to vedieť kvíz 1 je 18 00:00:56,330 --> 00:01:00,970 pochopiť koncepčné opis každého z dátových štruktúr, ktoré budem prezentovať. 19 00:01:00,970 --> 00:01:03,960 To znamená, že nemáte skutočne 20 00:01:03,960 --> 00:01:07,020 implementáciu hash tabuľky v teste 1. 21 00:01:07,020 --> 00:01:10,250 Nechceme implementovať celú hash tabuľky, možno sa budeme snažiť 22 00:01:10,250 --> 00:01:13,090 aby ste implementovať niektoré funkcie, 23 00:01:13,090 --> 00:01:16,940 najbežnejšie operácie, ale nebudeme robiť implementovať všetko. 24 00:01:16,940 --> 00:01:21,010 Takže je dôležité, aby ste pochopili koncept za každé dátové štruktúry 25 00:01:21,010 --> 00:01:23,510 a tiež to, že ste schopní kód v C, 26 00:01:23,510 --> 00:01:27,880 len najbežnejšie operácie, ktoré majú pre každú dátovú štruktúru. 27 00:01:27,880 --> 00:01:30,090 A tiež môcť prezrieť ukazovatele a structs, 28 00:01:30,090 --> 00:01:33,470 pretože oni sa objaví veľa v týchto dátových štruktúr. 29 00:01:33,470 --> 00:01:37,380 >> Po prvé, spojené zoznamy. Prepojené zoznamy sú vlastne veľmi podobné polí, 30 00:01:37,380 --> 00:01:39,930 ale rozdiel medzi prepojeného zoznamu a polia, 31 00:01:39,930 --> 00:01:45,160 Po prvé, je to, že spájať zoznam má veľmi flexibilné veľkosť, 32 00:01:45,160 --> 00:01:50,060 zatiaľ čo v poliach musíte navoliť veľmi veľké veľkosti pre polia, 33 00:01:50,060 --> 00:01:53,710 takže viete, že budete mať možnosť uložiť všetky vaše dáta v tomto poli, 34 00:01:53,710 --> 00:01:59,370 alebo budete musieť použiť malloc majú flexibilnú dĺžku poľa. 35 00:01:59,370 --> 00:02:03,680 V spojových zoznamov je to veľmi jednoduché stačí získať viac prvkov, 36 00:02:03,680 --> 00:02:07,210 dať viac prvkov v prepojenom zozname alebo odstrániť prvky. 37 00:02:07,210 --> 00:02:09,370 A skutočne, ak nechcete, spájať zoznam musí byť triedené, 38 00:02:09,370 --> 00:02:13,950 môžete vyhľadať a odstrániť prvky v konštantnom čase, 39 00:02:13,950 --> 00:02:16,800 takže O (1) čas, takže je to veľmi pohodlné. 40 00:02:16,800 --> 00:02:20,660 Musíte len dávať pozor, aby vždy pamätať na malloc a voľný uzly, 41 00:02:20,660 --> 00:02:25,510 len preto, že ak to neurobíte, budete mať k pretečeniu pamäte. 42 00:02:25,510 --> 00:02:31,480 Takže spojové zoznamy - definícia uzla je, rovnako ako to, čo sme tu. 43 00:02:31,480 --> 00:02:35,110 Dal som int n, ale môžete uložiť všetky dáta, ktoré chcete. 44 00:02:35,110 --> 00:02:37,280 Takže ak chcete uložiť reťazec, to je v poriadku. 45 00:02:37,280 --> 00:02:41,690 Ak chcete uložiť struct, to je v poriadku, dvojitý, čo chcete. 46 00:02:41,690 --> 00:02:44,630 Len som dal int n pre príklady tu. 47 00:02:44,630 --> 00:02:46,800 A máte ukazovateľ na ďalší uzol. 48 00:02:46,800 --> 00:02:51,940 Takže, v podstate, spájať zoznam má niektoré dáta, a potom to ukazuje na ďalší uzol. 49 00:02:51,940 --> 00:02:56,710 Ak je to posledný prvok v prepojenom zoznamu, bude to ukazovať na NULL. 50 00:02:56,710 --> 00:02:59,060 Tak toto je príklad prepojeného zoznamu. 51 00:02:59,250 --> 00:03:05,960 >> Dobre, takže teraz poďme pozrieť, čo by sme mali robiť, keď chcem vložiť prvok do prepojeného zoznamu. 52 00:03:05,960 --> 00:03:08,810 Po prvé, bude funkcia insert byť typu void 53 00:03:08,810 --> 00:03:11,350 pretože nechcem vrátiť nič. 54 00:03:11,350 --> 00:03:14,200 A ja vezmem int ako argument, 55 00:03:14,200 --> 00:03:17,090 pretože chcem vedieť, čo chcem vložiť. 56 00:03:17,090 --> 00:03:21,840 Takže to, čo je prvá vec, ktorú by som mal urobiť? No, mal som malloc na newnode, 57 00:03:21,840 --> 00:03:24,240 tak to je prvý riadok. 58 00:03:24,240 --> 00:03:27,580 Len som vytvoriť nový uzol, aby v prepojenom zozname. 59 00:03:27,580 --> 00:03:32,360 Tak čo mám robiť? No, vieme, že v našich implementáciách spojových zoznamov 60 00:03:32,360 --> 00:03:38,180 v triede, sme vždy dať hlavu ako globálne premenné. 61 00:03:38,180 --> 00:03:41,800 Takže to, čo môžeme urobiť, je zmeniť na hlavu. 62 00:03:41,800 --> 00:03:44,300 Môžem tento nový uzol bude nový šéf, 63 00:03:44,300 --> 00:03:46,670 a to bude ukazovať na predchádzajúcu hlavy. 64 00:03:46,670 --> 00:03:50,390 Ako môžeme urobiť, že? Prvá vec, ktorú musíte urobiť, 65 00:03:50,390 --> 00:03:54,770 je zmeniť na 'n' v novom uzle na hodnotu, 66 00:03:54,770 --> 00:03:57,530 ktorý bol odovzdaný do funkcie. 67 00:03:57,530 --> 00:04:01,050 Potom newnode ďalej sa bude hlava. 68 00:04:01,050 --> 00:04:05,800 Hlava sa bude newnode. Takže je to celkom jednoduché. 69 00:04:05,800 --> 00:04:10,090 Pre zmazanie uzla, môžeme urobiť to ako - 70 00:04:10,090 --> 00:04:14,790 Jeden spôsob, ako by sme mohli urobiť, je povedať, 71 00:04:14,790 --> 00:04:18,160 v poriadku, keď som chcel odstrániť, napríklad 3, 72 00:04:18,160 --> 00:04:24,850 to, čo som mohol urobiť, je upozorniť na predchádzajúcu uzol 73 00:04:24,850 --> 00:04:27,580 k ďalšiemu uzlu 3. 74 00:04:27,580 --> 00:04:29,400 Takže by som proste niečo také. 75 00:04:29,400 --> 00:04:33,400 Ale čo je problém s tým, že? 76 00:04:33,400 --> 00:04:37,400 Mám pretečeniu pamäte, takže nemám prístup na číslo 3 už. 77 00:04:37,400 --> 00:04:42,480 Problém s tým je, že nebudem mať možnosť oslobodiť tento uzol. 78 00:04:42,480 --> 00:04:45,360 Budem mať k pretečeniu pamäte a (nezrozumiteľné), bude ma nenávidieť. 79 00:04:45,360 --> 00:04:49,370 Takže namiesto toho, aby robil to, že by som mal pravdepodobne dočasný ukazovateľ. 80 00:04:49,370 --> 00:04:53,210 Tak som dal tepl. To bude ukazovať na uzol, ktorý chcem odstrániť. 81 00:04:53,210 --> 00:04:58,170 A potom som sa presunúť na predchádzajúcu uzly bodu k ďalšiemu uzlu 82 00:04:58,170 --> 00:05:00,390 uzla, ktorý chcem odstrániť. 83 00:05:00,390 --> 00:05:02,730 A nakoniec, môžem uvoľniť ukazovateľ. 84 00:05:02,730 --> 00:05:07,480 Musím sa uvoľniť ukazovateľ, ktorý som vytvoril práve tam? 85 00:05:07,480 --> 00:05:09,560 Ja nemusím, len preto, že - 86 00:05:09,560 --> 00:05:13,430 Rozdiel je v tom, že tento uzol bol vytvorený pomocou malloc, 87 00:05:13,430 --> 00:05:17,280 takže je to v halde, pričom tento bol len deklarovaný ako NULL prepínače v stohu. 88 00:05:17,280 --> 00:05:20,000 Takže nemám ho oslobodiť. 89 00:05:20,000 --> 00:05:22,030 >> Dobre. Takže teraz poďme hovoriť o komíny. 90 00:05:22,030 --> 00:05:24,680 Komíny sú celkom jednoduché. 91 00:05:24,680 --> 00:05:29,540 Urobili sme hromady a fronty v triede len pomocou polí, 92 00:05:29,540 --> 00:05:32,820 ale mali by ste byť oboznámení - proste byť si vedomý 93 00:05:32,820 --> 00:05:40,740 ktoré môžete urobiť hromady vo frontoch pomocou prepojených zoznamov rovnako. 94 00:05:40,740 --> 00:05:44,460 Takže ak máte pole, čo by bolo stack? 95 00:05:44,460 --> 00:05:46,810 Zásobník, prvý, bude mať veľkosť. 96 00:05:46,810 --> 00:05:49,950 Musíte uložiť, čo je veľkosť zásobníka, ktorý máte práve teraz. 97 00:05:49,950 --> 00:05:52,980 A tiež sa bude mať pole, v tomto prípade čísel, 98 00:05:52,980 --> 00:05:55,120 ale ak chcete, to môže byť pole 99 00:05:55,120 --> 00:06:00,380 reťazcov, pole struct, čokoľvek, čo chcete uložiť. 100 00:06:00,380 --> 00:06:03,240 O zásobníka: Rozdiel medzi komínom a prepojeného zoznamu 101 00:06:03,240 --> 00:06:08,590 je, že v zásobníku budete mať prístup k posledný prvok, ktorý bol uvedený v zásobníku len. 102 00:06:08,590 --> 00:06:11,770 Je to tzv posledný dnu, prvý von. 103 00:06:11,770 --> 00:06:15,090 Rovnako ako máte hromadu zásobníkov, 104 00:06:15,090 --> 00:06:17,670 keď dáte zásobník na vrchole zásobníka, 105 00:06:17,670 --> 00:06:22,670 musíte najprv odstrániť tento zásobník mať prístup k ostatným zásobníkov. 106 00:06:22,670 --> 00:06:26,310 Je to to isté s komínmi. 107 00:06:26,310 --> 00:06:31,220 Takže ak chcem, napríklad, pridať prvok do zásobníka, čo mám robiť? 108 00:06:31,220 --> 00:06:34,070 Hovorí sa tlak, a je to celkom jednoduché. 109 00:06:34,070 --> 00:06:37,130 Prvá vec, ktorú musíte urobiť, je skontrolovať, či veľkosť zásobníku 110 00:06:37,130 --> 00:06:40,150 je väčšia alebo rovná kapacite zásobníka. 111 00:06:40,150 --> 00:06:45,810 Pretože ak ste už na plnú kapacitu, nemôžete pridať nič iné. 112 00:06:45,810 --> 00:06:51,140 A potom, ak nie, budete musieť pridať prvok do zásobníka. 113 00:06:51,140 --> 00:06:54,530 A konečne, zvýšiť veľkosť. Takže je to celkom jednoduché. 114 00:06:54,530 --> 00:06:57,140 Tak som len pridať číslo 2. 115 00:06:57,140 --> 00:07:00,350 A keď chcem pop, čo znamená, že chcem odstrániť 116 00:07:00,350 --> 00:07:03,870 posledný prvok, ktorý bol pridaný, a vráti hodnotu prvku, 117 00:07:03,870 --> 00:07:09,180 Prvá vec, ktorú musím skontrolovať je, že zásobník nie je prázdny. 118 00:07:09,180 --> 00:07:11,510 Vzhľadom k tomu, či je to prázdne, nemôžem nič nevracia. 119 00:07:11,510 --> 00:07:14,820 V tomto prípade, vraciam -1. 120 00:07:14,820 --> 00:07:18,960 Inak, budem decrement veľkosť spec, 121 00:07:18,960 --> 00:07:22,510 a vrátiť čísla (s.size). 122 00:07:22,510 --> 00:07:27,230 Prečo som decrement veľkosti a potom sa vrátiť s.size? 123 00:07:27,230 --> 00:07:30,930 Je to preto, že v tomto prípade, špec má veľkosť 4, 124 00:07:30,930 --> 00:07:33,810 a chcem sa vrátiť na štvrtý element, nie? 125 00:07:33,810 --> 00:07:36,030 Ale čo je index štvrtého prvku? Tri. 126 00:07:36,030 --> 00:07:44,510 Pretože som si veľkosť - bude 3, môžem len vrátiť s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 pretože je to 3. Takže je to len index. 128 00:07:48,410 --> 00:07:50,380 >> Teraz fronty. Fronty sú skoro to isté. 129 00:07:50,380 --> 00:07:54,950 Jediný rozdiel je, že namiesto toho, aby ako posledný dnu, prvý von, 130 00:07:54,950 --> 00:07:57,480 Máte-first in, first out. 131 00:07:57,480 --> 00:07:59,460 Pravdepodobne, ak čakáte ísť na koncert, 132 00:07:59,460 --> 00:08:04,260 by ste rád, keby ste mali stack miesto fronty. 133 00:08:04,260 --> 00:08:07,730 Ako posledný, kto prišiel by bol prvý človek vstúpiť do koncert. 134 00:08:07,730 --> 00:08:09,760 Tie by pravdepodobne nemal byť šťastný. 135 00:08:09,760 --> 00:08:15,020 Vo fronte, prvá osoba, ktorá sa v roku je tiež prvá osoba, sa dostať von. 136 00:08:15,020 --> 00:08:18,720 A tak v definícii fronty, okrem toho, že veľkosť v poli, 137 00:08:18,720 --> 00:08:23,360 budete tiež mať hlavu, čo je index do čela zásobníka. 138 00:08:23,360 --> 00:08:29,000 Takže prvý prvok práve teraz. 139 00:08:29,000 --> 00:08:32,710 Enqueue je rovnaké ako kliknutie pre komíny. 140 00:08:32,710 --> 00:08:34,980 Ak boli veľmi naivné, by ste len povedať, 141 00:08:34,980 --> 00:08:39,289 dobre, môžem len urobiť presne to isté, čo som urobil pre Push. 142 00:08:39,289 --> 00:08:44,030 Ja si len skontrolovať, či to nie je nad kapacitu. 143 00:08:44,030 --> 00:08:48,760 Ak je to, myslím, vráti false, inak môžem len exportovať novú hodnotu 144 00:08:48,760 --> 00:08:50,630 a potom zvýšiť veľkosť. 145 00:08:50,630 --> 00:08:52,750 Ale prečo je to zle? 146 00:08:52,750 --> 00:08:55,010 Poďme sa pozrieť, tento príklad. 147 00:08:55,010 --> 00:08:57,020 Snažím sa enqueue veľa vecí, 148 00:08:57,020 --> 00:08:58,390 a potom budem dequeue a enqueue. 149 00:08:58,390 --> 00:09:00,550 Je tu veľa príkazov, ale je to veľmi jednoduché. 150 00:09:00,550 --> 00:09:04,790 Chystám sa enqueue 5, tak sa pridá 5 a potom 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, a potom chcem dequeue niečo, 152 00:09:09,310 --> 00:09:12,000 čo znamená, že idem na odstránenie prvého prvku. 153 00:09:12,000 --> 00:09:14,640 Takže idem odstrániť číslo 3, že jo? 154 00:09:14,640 --> 00:09:17,320 Prvý element. Dobre. 155 00:09:17,320 --> 00:09:21,450 Teraz, keď sa snažím enqueue niečo iné, čo sa bude diať? 156 00:09:21,450 --> 00:09:24,290 Podľa môjho vykonávania, 157 00:09:24,290 --> 00:09:31,040 Chcel som dať ďalšie číslo v indexe q.size. 158 00:09:31,040 --> 00:09:35,140 V tomto prípade je veľkosť je 8, 159 00:09:35,140 --> 00:09:38,640 takže index 8 bude tu na poslednej pozícii. 160 00:09:38,640 --> 00:09:43,900 Ak sa snažím enqueue 1 tu, by som prepísanie poslednej pozícii 161 00:09:43,900 --> 00:09:45,870 na číslo 1, čo je úplne zle. 162 00:09:45,870 --> 00:09:49,870 To, čo chcem urobiť, je obalí a ísť na prvej pozícii. 163 00:09:49,870 --> 00:09:52,870 Možno by ste len povedať, dobre, budem musieť skontrolovať 164 00:09:52,870 --> 00:09:55,600 keď som si skutočne dať tam niečo. 165 00:09:55,600 --> 00:09:58,560 Ak nie, len hovorím, oh, nová plná kapacita 166 00:09:58,560 --> 00:10:02,010 je vlastne kapacita - 1, a vy nemôžete dať prvok existuje. 167 00:10:02,010 --> 00:10:06,150 Ale v čom je problém? Problém je v tom, že keď som dequeue všetko tu 168 00:10:06,150 --> 00:10:08,240 a potom sa snažím pridať niečo iné, bolo by to len povedať, 169 00:10:08,240 --> 00:10:11,210 dobre, že si na plnú kapacitu, čo je 0. 170 00:10:11,210 --> 00:10:13,620 Takže vaše fronta je preč. 171 00:10:13,620 --> 00:10:16,990 Musíte sa obalí, a spôsob obtekania okolo 172 00:10:16,990 --> 00:10:22,040 že vy ste sa naučili v vizionárske a ďalších psets používal mod. 173 00:10:22,040 --> 00:10:29,090 Môžete si to vyskúšať doma pochopiť, prečo by ste to q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod kapacita, ale ak si skontrolovať tu, 175 00:10:31,080 --> 00:10:34,760 môžeme vidieť, že to funguje. 176 00:10:34,760 --> 00:10:37,760 Takže v poslednom príklade, q.size bolo 8 177 00:10:37,760 --> 00:10:47,590 a hlava bola 1, pretože to bola táto pozícia tady na pole. 178 00:10:47,590 --> 00:10:51,970 Tak to bude 8 + 1, 9. Mod kapacita 9 bude 0. 179 00:10:51,970 --> 00:10:56,640 To by ísť do indexu 0.. Budeme v správnej polohe. 180 00:10:56,640 --> 00:10:59,750 A potom skúste front doma. 181 00:10:59,750 --> 00:11:04,950 Niektoré dôležité veci: pokúsiť sa pochopiť rozdiel medzi zásobníka a fronty. 182 00:11:04,950 --> 00:11:11,620 Doma, pokúsiť sa dostať veľmi dobre oboznámení s realizáciou Zaradí, Dequeue, tlačiť a pop. 183 00:11:11,620 --> 00:11:16,560 A tiež pochopiť, keď by ste použiť každú z nich. 184 00:11:16,560 --> 00:11:22,830 >> Tak poďme si oddýchnuť po dobu 10 sekúnd s partiou Pokémonov. 185 00:11:22,830 --> 00:11:26,080 A teraz sa vráťme do dátových štruktúr. 186 00:11:26,080 --> 00:11:29,770 Hash tabuľky. Mnoho ľudí sa bojí hash tabuľky. 187 00:11:29,770 --> 00:11:33,650 v probléme nastavenia 6, Kontrola pravopisu. 188 00:11:33,650 --> 00:11:35,980 Hash tabuľky a snaží sa, veľa ľudí sa bojí o nich. 189 00:11:35,980 --> 00:11:38,540 Myslí si, že to tak ťažké pochopiť. Jo? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problém sada 5. >> Problem sada 5, jo. Vďaka Rob. 191 00:11:41,490 --> 00:11:43,370 Jo. Šesť bolo Huff n 'Puff, jo. 192 00:11:43,370 --> 00:11:49,340 Problém sada 5 bola pravopisu, a vy ste museli použiť buď hash tabuľky alebo skúsiť. 193 00:11:49,340 --> 00:11:55,360 Veľa ľudí si myslí, že oni boli veľmi ťažké pochopiť, ale oni sú vlastne celkom jednoduché. 194 00:11:55,360 --> 00:12:01,290 Čo je hash tabuľka, v podstate? Hash tabuľka je pole spojových zoznamov. 195 00:12:01,290 --> 00:12:06,730 Jediný rozdiel medzi pole a hash tabuľky 196 00:12:06,730 --> 00:12:09,730 je, že v tabuľke hash máte niečo ako funkcia hash. 197 00:12:09,730 --> 00:12:12,080 Aká je funkcia hash? 198 00:12:12,080 --> 00:12:13,970 Ja neviem, či vy môžete prečítať tu. 199 00:12:13,970 --> 00:12:16,090 To je príklad tabuľky hash. 200 00:12:16,090 --> 00:12:19,220 Takže vidíte, že máte pole s 31 prvkami. 201 00:12:19,220 --> 00:12:22,440 A to, čo robíme v hash tabuľke sa majú funkcie hash 202 00:12:22,440 --> 00:12:26,660 že sa bude prekladať kľúč, každý pravý na indexe. 203 00:12:26,660 --> 00:12:31,740 Ak, napríklad, keď chcem vybrať pre B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Ja by som dal B. Harrison v mojich hašovacej funkcií, 205 00:12:34,190 --> 00:12:36,960 a hashovacie funkcia vráti 24. 206 00:12:36,960 --> 00:12:40,930 Takže viem, že chcem ukladať B. Harrison v 24.. 207 00:12:40,930 --> 00:12:46,580 Tak to je rozdiel medzi len mať celý rad a má hash tabuľky. 208 00:12:46,580 --> 00:12:48,740 V tabuľke hash budete mať funkciu, ktorá sa ti to povedať 209 00:12:48,740 --> 00:12:54,740 kam ukladať dáta, ktoré chcete uložiť. 210 00:12:54,740 --> 00:12:57,040 Pre hašovacej funkcie, budete chcieť pozrieť na funkcie hash 211 00:12:57,040 --> 00:13:00,600 že je deterministický a dobre distribuovaný. 212 00:13:00,600 --> 00:13:07,810 Ako môžete vidieť tu, uvidíte, že mnoho údajov, ktoré som chcel, aby obchod bol vlastne 19 213 00:13:07,810 --> 00:13:12,470 namiesto použitia 31 a 30 a 29, ktoré boli všetky zadarmo. 214 00:13:12,470 --> 00:13:16,920 Takže funkcia hash, že som nebol moc dobre distribuovaný. 215 00:13:16,920 --> 00:13:20,710 Keď hovoríme, dobre distribuovaný, znamená to, že chceme mať, 216 00:13:20,710 --> 00:13:26,520 zhruba, aspoň 1 alebo 2 pre každý z - 217 00:13:26,520 --> 00:13:32,190 ako, rozdiel 1 alebo 2 pre každý z indexov v poli. 218 00:13:32,190 --> 00:13:43,950 Ak chcete mať zhruba rovnaký počet prvkov v každej aplikácii zoznamu v poli. 219 00:13:43,950 --> 00:13:48,600 A je to ľahké zistiť, či je to platný v hash tabuľke, zobrazenia ako tabuľky hash. 220 00:13:48,600 --> 00:13:51,770 Potom >> stromy. Jedná sa o strom. 221 00:13:51,770 --> 00:13:56,400 Stromy v informatike sú hore nohami nejakého dôvodu. 222 00:13:56,400 --> 00:14:00,150 Tak tu máte koreň stromu a potom listy. 223 00:14:00,150 --> 00:14:05,630 Mali by ste jednoducho viete, názvoslovie pre rodičov a dieťa. 224 00:14:05,630 --> 00:14:12,880 Každý uzol má svoje deti, ktoré sú uzly, ktoré sú pod rodičmi. 225 00:14:12,880 --> 00:14:19,660 Tak, napríklad, 2 sa bude základné dosky pre 3 a pre druhé dieťa tam, 226 00:14:19,660 --> 00:14:25,290 zatiaľ čo 3 bude rodič 1 a ostatné deti, ktoré sú tam. 227 00:14:25,290 --> 00:14:29,990 A 1 bude 3 dieťa, a tak ďalej. 228 00:14:29,990 --> 00:14:34,610 Máme niečo oveľa zaujímavejšie, tzv binárny vyhľadávací strom, 229 00:14:34,610 --> 00:14:39,040 v ktorej sú všetky hodnoty na pravej uzla 230 00:14:39,040 --> 00:14:41,660 sa bude na pravej strane, priamo tu - na pravej, 231 00:14:41,660 --> 00:14:46,780 sa bude väčšia ako prvok v koreni. 232 00:14:46,780 --> 00:14:49,780 Takže ak mám číslo 5, priamo tu, všetky prvky na pravej strane 233 00:14:49,780 --> 00:14:51,940 sa bude väčšia ako 5, a na ľavej strane 234 00:14:51,940 --> 00:14:56,770 všetky prvky sa bude menej ako 5. 235 00:14:56,770 --> 00:14:58,780 Prečo je to užitočné? 236 00:14:58,780 --> 00:15:01,660 No, ak chcem zistiť, či je tu číslo 7, napríklad, 237 00:15:01,660 --> 00:15:05,960 Len som ísť na 5 prvý a budem vidieť, je 7 väčšia alebo menšia ako 5? 238 00:15:05,960 --> 00:15:09,540 Je to väčšia, takže viem, že to bude musieť byť na pravej strane stromu. 239 00:15:09,540 --> 00:15:13,980 Takže mám oveľa menšie veci na pohľad. 240 00:15:13,980 --> 00:15:19,520 Pri vykonávaní binárneho vyhľadávacieho stromu, uzla, ja proste budem musieť mať k dispozícii údaje, 241 00:15:19,520 --> 00:15:21,750 takže int n; môžete mať tiež reťazec 242 00:15:21,750 --> 00:15:23,630 alebo niečo, čo chcel. 243 00:15:23,630 --> 00:15:28,100 Len musíte dávať pozor na definovanie toho, čo je väčšie, to, čo je menšie. 244 00:15:28,100 --> 00:15:30,390 Takže ak ste mali reťazca, napríklad, môžete definovať 245 00:15:30,390 --> 00:15:34,690 že všetky tie veci, na pravej strane budú mať väčšiu dĺžku, 246 00:15:34,690 --> 00:15:40,940 ľavá budú mať nižšiu dĺžky, takže je to naozaj len na vás. 247 00:15:40,940 --> 00:15:44,930 >> Ako môžem implementovať nájsť pre BST? 248 00:15:44,930 --> 00:15:47,840 Prvá vec, ktorú budete musieť urobiť, je skontrolovať, či koreň je NULL. 249 00:15:47,840 --> 00:15:50,920 Ak je to NULL, znamená to, že vec nie je tam 250 00:15:50,920 --> 00:15:53,330 preto, že nemajú ani strom, nie? 251 00:15:53,330 --> 00:15:55,790 Tak som sa vrátiť false. 252 00:15:55,790 --> 00:15:58,740 Inak, ja idem skontrolovať, či je číslo väčšie 253 00:15:58,740 --> 00:16:01,720 ako hodnota v koreni. 254 00:16:01,720 --> 00:16:04,250 Budem sa snažiť nájsť prvok na pravej strane 255 00:16:04,250 --> 00:16:08,590 stromu. 256 00:16:08,590 --> 00:16:11,310 Vidíte, že som pomocou rekurzie tu. 257 00:16:11,310 --> 00:16:14,150 A potom, ak je to menej, idem sa pozrieť na ľavej strane. 258 00:16:14,150 --> 00:16:18,330 A konečne, v opačnom prípade, ak je to nie je menšia alebo väčšia, 259 00:16:18,330 --> 00:16:20,660 to znamená, že je hodnota sama o sebe. 260 00:16:20,660 --> 00:16:23,010 Tak som len vrátiť true. 261 00:16:23,010 --> 00:16:26,360 Môžete vidieť, že som použil v prípade, keby, keby. 262 00:16:26,360 --> 00:16:30,820 A pamätajte, v kvíze 0, mali sme problém, ktorý mal v prípade, keby, keby, 263 00:16:30,820 --> 00:16:32,780 a vy ste mal nájsť neefektívnosti, 264 00:16:32,780 --> 00:16:35,180 a neefektivita bolo, že ste použili v prípade. 265 00:16:35,180 --> 00:16:39,060 Mali by ste použili v prípade, else if, else if a else. 266 00:16:39,060 --> 00:16:44,240 Takže by som mal použiť else if a else if a else tu? 267 00:16:44,240 --> 00:16:46,200 Má niekto - jo? 268 00:16:46,200 --> 00:16:51,140 [Študent rozprávanie, nepočuteľný] 269 00:16:51,140 --> 00:16:53,480 To je perfektné. Takže ona hovorí, že nezáleží na tom, 270 00:16:53,480 --> 00:16:55,930 len preto, že neefektívnosť, že sme mali pred 271 00:16:55,930 --> 00:16:59,550 bolo to preto, že možno keby bola splnená niektorá podmienka, 272 00:16:59,550 --> 00:17:03,570 takže ste vykonali akciu, ale potom išli skontrolovať všetky ostatné podmienky. 273 00:17:03,570 --> 00:17:06,319 Ale v tomto prípade, že sa vrátil hneď, tak to nevadí. 274 00:17:06,319 --> 00:17:09,220 Takže nemusíte sa inak použiť, ak. 275 00:17:09,220 --> 00:17:11,740 >> A konečne, poďme hovoriť o pokusoch, 276 00:17:11,740 --> 00:17:13,800 čo je vecou každého obľúbené. 277 00:17:13,800 --> 00:17:15,980 Try je strom z polí. 278 00:17:15,980 --> 00:17:20,369 Je to veľmi rýchlo vyhľadať hodnoty, ale používa veľké množstvo pamäte. 279 00:17:20,369 --> 00:17:22,530 A je to zvyčajne filtrovať slová, takže keď 280 00:17:22,530 --> 00:17:27,920 chcete implementovať, napríklad, ja neviem, ako telefónny zoznam vo vašom telefóne 281 00:17:27,920 --> 00:17:30,440 a chcete byť schopní typ B 282 00:17:30,440 --> 00:17:32,510 a len mená ľudí, ktorí majú B. 283 00:17:32,510 --> 00:17:37,960 Je to veľmi jednoduché implementovať, že používate vyskúšať, napríklad. 284 00:17:37,960 --> 00:17:39,820 Ako definovať uzol v pokus? 285 00:17:39,820 --> 00:17:43,910 Len musíte mať bool, ktorá bude is_word. 286 00:17:43,910 --> 00:17:48,660 To znamená, že s využitím všetkých znakov pred týmto uzlom, 287 00:17:48,660 --> 00:17:51,920 ste boli schopní vytvoriť slovo, 288 00:17:51,920 --> 00:17:57,230 a potom budete mať celý rad ukazovateľov na uzly. 289 00:17:57,230 --> 00:18:03,120 Vidíte, že máme rad nadradeného uzla, takže uzol * polia? Jo? 290 00:18:03,120 --> 00:18:06,050 Takže poďme sa pozrieť, ako to bude fungovať. Pre kontrolu pravopisu, 291 00:18:06,050 --> 00:18:08,230 Máme rad 27 prvkov, 292 00:18:08,230 --> 00:18:12,150 pretože máme všetky listy a apostrof. 293 00:18:12,150 --> 00:18:17,800 Ako tu budem len tak používať dva, pretože chcem mať možnosť písať na tabuľu. 294 00:18:17,800 --> 00:18:20,230 Dobre. Tak toto je príklad pokusu. 295 00:18:20,230 --> 00:18:25,600 Ak som definovať prvý uzol, budem mať rad prvkov 2 296 00:18:25,600 --> 00:18:29,290 že sú dva ukazovatele na NULL, tak som dal "a" a "b". 297 00:18:29,290 --> 00:18:32,430 A ja budem mať bool, ktorá hovorí, že is_word. 298 00:18:32,430 --> 00:18:34,420 To bude false pre prvý, 299 00:18:34,420 --> 00:18:37,370 len preto, že predtým, než že nemáte žiadne znaky. 300 00:18:37,370 --> 00:18:40,900 Takže prázdne slovo nie je slovo. Takže je to falošné. 301 00:18:40,900 --> 00:18:46,320 Ak chcem pridať 'a' do tohto slovníka, čo by som mal urobiť? 302 00:18:46,320 --> 00:18:49,760 Len by som si, aby malloc nový uzol pre "A", 303 00:18:49,760 --> 00:18:54,630 a potom pridať svoje slovo na hodnotu true. 304 00:18:54,630 --> 00:19:00,180 Tak to jednoducho znamená, že keď "" bude pravda. Zmysel? 305 00:19:00,180 --> 00:19:04,120 Potom, keď chcem pridať "BA", budem musieť malloc 1 pre "b", 306 00:19:04,120 --> 00:19:07,550 a potom idem nastaviť boolean false, 307 00:19:07,550 --> 00:19:10,160 pretože "b" sám o sebe nie je slovo. 308 00:19:10,160 --> 00:19:13,010 Potom idem do malloc iný pre "a", takže "BA", 309 00:19:13,010 --> 00:19:16,290 a potom idem nastaviť, že je to slovo na hodnotu true. 310 00:19:16,290 --> 00:19:18,950 Vzhľadom k tomu, "ba" je slovo. 311 00:19:18,950 --> 00:19:21,910 A potom, keď chcem zistiť, či "b" je v tomto slovníku, 312 00:19:21,910 --> 00:19:26,730 Môžem jednoducho ísť na prvé, "b". Idem dole, a ja som sa na slovo, je, a to hovorí false. 313 00:19:26,730 --> 00:19:30,110 Takže to nie je slovo. Chcem chcete skontrolovať "BA", 314 00:19:30,110 --> 00:19:38,010 Idem na prvú, "b", a potom ísť do "A", a vidím to pravda, tak to je slovo. Zmysel? 315 00:19:38,010 --> 00:19:41,950 Mnoho ľudí sa zmiasť pokusov. Nie? 316 00:19:41,950 --> 00:19:44,740 >> Konečne, Huffmanovo kódovanie. Huffman kódovanie je veľmi užitočné 317 00:19:44,740 --> 00:19:47,550 z dôvodu úspory pamäte a kompresiu textových súborov, 318 00:19:47,550 --> 00:19:52,270 len preto, že veľa prípadov, keď používate "a" a "e", napríklad, 319 00:19:52,270 --> 00:19:57,710 v dokumentoch, ale ja neviem, či vy použiť "q" alebo "Z" toľko. 320 00:19:57,710 --> 00:20:02,040 S iba 1 bajt pre každú postavu, 321 00:20:02,040 --> 00:20:08,520 každý - na 256 znakov, ktoré máme v tabuľke ASCII nie je príliš optimálne, 322 00:20:08,520 --> 00:20:11,410 len preto, že tam sú niektoré znaky, ktoré používajú oveľa viac, 323 00:20:11,410 --> 00:20:15,180 takže by ste mali pravdepodobne používať menej pamäte pre tie. 324 00:20:15,180 --> 00:20:17,560 Ako môžem použiť Huffmanovo kódovanie? 325 00:20:17,560 --> 00:20:20,010 Musíme urobiť Huffman strom. 326 00:20:20,010 --> 00:20:23,370  Huffman strom má uzly 327 00:20:23,370 --> 00:20:27,760 ktoré majú symbol, ktorý bude ako, 'a', 'b', 'c', list, 328 00:20:27,760 --> 00:20:32,990 bez ohľadu na písmeno máte, frekvencia, ktorá je frekvencia, ktorá sa objaví slovo v texte, 329 00:20:32,990 --> 00:20:36,280 že ste boli vytvorenie Huffmanova stromu pre, 330 00:20:36,280 --> 00:20:41,800 a potom uzol, ktorý sa bude ukazovať na ľavej strane stromu Huffman 331 00:20:41,800 --> 00:20:47,210 a ďalší uzol, ktorý bude ukazovať na pravej strane. Takže rovnako ako strom. 332 00:20:47,210 --> 00:20:49,440 Ako si vytvoriť Huffman strom? 333 00:20:49,440 --> 00:20:54,020 Budeš vybrať dva uzly, ktoré majú najnižšie frekvencie. 334 00:20:54,020 --> 00:20:56,490 Ak máte kravatu budete vybrať 2 uzly 335 00:20:56,490 --> 00:20:59,870 , Ktoré majú najnižšie hodnoty ASCII rovnako. 336 00:20:59,870 --> 00:21:02,420 Potom budete vytvoriť nový strom z týchto 2 uzly 337 00:21:02,420 --> 00:21:08,030 že bude mať kombinovanú frekvenciu v nadradeného uzla. 338 00:21:08,030 --> 00:21:13,240 A potom budete odstrániť 2 deti z lesa 339 00:21:13,240 --> 00:21:15,570 a nahradiť ich s rodičmi. 340 00:21:15,570 --> 00:21:18,930 A budete opakovať, že až budete mať iba jeden strom v lese. 341 00:21:18,930 --> 00:21:23,840 Takže poďme sa pozrieť, ako by to Huffman strom ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Môžete vidieť, že všetky písmená majú frekvenciu 1 s výnimkou "A", ktorý má frekvenciu 2. 343 00:21:29,220 --> 00:21:34,090 Tak som vytvoril uzly pre všetky listy som dal v poradí ASCII hodnoty a frekvencie. 344 00:21:34,090 --> 00:21:40,090 Takže ak chcem vytvoriť prvý strom, bude to s "L" a "M". 345 00:21:40,090 --> 00:21:43,100 Tak je to tu. Frekvencia dvojica bude 2 346 00:21:43,100 --> 00:21:49,470 pretože je to 1 + 1, potom ďalšie 2 s najnižšou frekvenciou sú "Y" a "Z". 347 00:21:49,470 --> 00:21:53,180 A potom som si všetky z nich sú - majú frekvenciu 2. 348 00:21:53,180 --> 00:22:00,470 Takže, ktoré z nich sú tie, ktoré majú najnižšiu hodnotu ASCII pre ten budúci? 349 00:22:00,470 --> 00:22:04,830 "A" a "L". Tak som sa vytvoriť nový uzol, 350 00:22:04,830 --> 00:22:09,930 a konečne, že je to 4, a 2, SO 2 bude na ľavej strane. 351 00:22:09,930 --> 00:22:12,430 A to je strom Huffman. 352 00:22:12,430 --> 00:22:16,060 Potom, keď chcem napísať nejaký text, 353 00:22:16,060 --> 00:22:24,440 ako v binárnej previesť na text, pomocou stromu Huffman je veľmi jednoduché. 354 00:22:24,440 --> 00:22:30,220 Napríklad, keď poviem, že pohybujúce sa na ľavej strane je 0 a pohybuje sa doprava je 1, 355 00:22:30,220 --> 00:22:32,410 Čo je to, že bude reprezentovať? 356 00:22:32,410 --> 00:22:35,530 Tak ako 1, 1, tak vpravo, vpravo, 357 00:22:35,530 --> 00:22:40,370 a potom 0, takže by sa opustil L, a potom 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Takže 1, 0, takže len 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 A potom 0, 1, tak "Z". 360 00:22:47,540 --> 00:22:52,170 A potom 1, 0, 0 - nie. 361 00:22:52,170 --> 00:22:56,780 0, 0 bude "Y", tak Lazy. 362 00:22:56,780 --> 00:23:06,060 Tak to je všetko pre mňa, Rob je prevezme. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Tak, týždeň 7 veci. 364 00:23:08,400 --> 00:23:11,390 Máme veľa prejsť naozaj rýchlo. 365 00:23:11,390 --> 00:23:13,430 Bitové operátormi, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 knižnica, potom HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 All in ako 15 - 20 minút. 368 00:23:20,990 --> 00:23:24,330 Bitové operátormi. K dispozícii je 6 z nich, ktoré potrebujete vedieť. 369 00:23:24,330 --> 00:23:31,200 Bitová a bitové OR, XOR, posun doľava, pravý shift, a nie. 370 00:23:31,200 --> 00:23:35,420 Pravý Shift a nie sotva videli v prednáške vôbec. 371 00:23:35,420 --> 00:23:40,480 Pôjdeme cez neho rýchlo sem, ale je dobré vedieť, že sa jedná o 6, ktoré existujú. 372 00:23:40,480 --> 00:23:45,070 Pamätajte si, že bitové operátory sú, ako keď robíte 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Nie ste zaoberajúca sa binárne 3 a 4. 374 00:23:49,420 --> 00:23:56,550 S operátormi bitové ste vlastne zaoberá jednotlivými bity čísel 3 a 4. 375 00:23:56,550 --> 00:23:59,120 >> Takže prvé, že budeme hovoriť, je bitový nie je, 376 00:23:59,120 --> 00:24:02,340 a všetko, čo robí, je otočiť všetky bity. 377 00:24:02,340 --> 00:24:05,500 Tak tu, ak píšete to v C, nebudete písať 378 00:24:05,500 --> 00:24:09,380 ako ~ 11011 alebo čokoľvek iného, ​​mali by ste napísať to páči ~ 4, 379 00:24:09,380 --> 00:24:12,970 a potom by to hodiť na binárne reprezentáciu 4. 380 00:24:12,970 --> 00:24:24,800 Tak tu, ~ nejaké binárne číslo 1101101 bude presne hodiť všetky 1 k 0 je 0 a všetky je na 1 je. 381 00:24:24,800 --> 00:24:27,600 Ako hovorím tam, časté používanie tohto, 382 00:24:27,600 --> 00:24:30,830 a budeme ho vidieť v trochu, je ako chceme prísť s nejakým číslom 383 00:24:30,830 --> 00:24:35,460 kde sú všetky bity sú 1, s výnimkou jedného z nich. 384 00:24:35,460 --> 00:24:38,560 Takže je to zvyčajne jednoduchšie vyjadriť číslo 385 00:24:38,560 --> 00:24:40,630 kde je nastavená len, že jeden bit, 386 00:24:40,630 --> 00:24:44,650 a potom sa ~ o to, aby každý ďalší bit je nastavený, s výnimkou, že jeden. 387 00:24:44,650 --> 00:24:50,300 Takže to je to, čo budeme používať viac v trochu. 388 00:24:50,300 --> 00:24:58,220 >> Bitové alebo. Tu sú 2 binárne čísla, a tieto 2 čísla 389 00:24:58,220 --> 00:25:00,780 sú veľmi reprezentatívne, pretože predstavujú všetky možné 390 00:25:00,780 --> 00:25:07,290 Kombinácia bitov, čo by bolo potrebné operovať. 391 00:25:07,290 --> 00:25:13,540 Tu, keď som or'd každého trochu, budeme len tak porovnať rovno dole. 392 00:25:13,540 --> 00:25:15,410 A tak na ľavej strane máme 1 a 1. 393 00:25:15,410 --> 00:25:20,510 Keď som Bitové | tie, čo mám dostať? Jeden. 394 00:25:20,510 --> 00:25:25,320 Potom Bitové | 0 a 1 sa chystá dať mi? Jeden. 395 00:25:25,320 --> 00:25:27,840 Bitová 1 a 0 bude to isté, jeden. 396 00:25:27,840 --> 00:25:31,880 Bitová 0 | 0 sa chystá dať mi 0. 397 00:25:31,880 --> 00:25:37,300 Takže jediný prípad, kedy som si je 0 v 0 | 0 prípad. 398 00:25:37,300 --> 00:25:40,020 A môžete si myslieť, že rovnako ako vaše logické najvzdialenejšie regióny. 399 00:25:40,020 --> 00:25:44,830 Takže ak si myslíte, že 1. ako skutočné a 0 ako falošné, to isté platí tu. 400 00:25:44,830 --> 00:25:50,040 Takže pravda alebo pravda, je pravda, true alebo false, je pravda. 401 00:25:50,040 --> 00:25:57,150 False alebo pravda je pravda, false alebo false, je jediná vec, ktorá je v skutočnosti falošný. 402 00:25:57,150 --> 00:26:00,100 Tu je príklad, ktorý by ste mali vedieť 403 00:26:00,100 --> 00:26:05,160 ako celkom dobrý príklad toho, kedy sú použité bitové operátory. 404 00:26:05,160 --> 00:26:08,660 Tu keby sme alebo kapitál "A" s OX20, 405 00:26:08,660 --> 00:26:11,830 a my sa pozrieme na to vo chvíli, dostaneme niečo. 406 00:26:11,830 --> 00:26:16,020 A ak my alebo malé písmená "a" s OX20, dostaneme niečo. 407 00:26:16,020 --> 00:26:26,750 Takže poďme sa vytiahnuť ASCII tabuľku. 408 00:26:26,750 --> 00:26:34,000 Dobre. Tu vidíme, že "A" je - 409 00:26:34,000 --> 00:26:36,920 tu máme "'je desiatkovej 65. 410 00:26:36,920 --> 00:26:45,120 Ale ja pôjdem s hexadecimálne, ktorý je Ox41. 411 00:26:45,120 --> 00:26:48,280 Som si istý, videli sme to v triede. Myslím, že sme to videli v triede 412 00:26:48,280 --> 00:26:52,730 že je to celkom jednoduché previesť z šestnástkovej na binárne. 413 00:26:52,730 --> 00:26:55,280 Takže tu, keď chcem dať 4 do binárne, 414 00:26:55,280 --> 00:26:59,550 že to jednoducho bude 0100. 415 00:26:59,550 --> 00:27:03,620 To je jeden je miesto, 2 v mieste, 4 je miestom, takže je to 4. 416 00:27:03,620 --> 00:27:08,550 Potom som sa rozdeliť 1 do binárne, ktorý sa chystá byť 0001. 417 00:27:08,550 --> 00:27:14,280 A tak to bude reprezentácie "A" na binárny. 418 00:27:14,280 --> 00:27:22,720 S malými písmenami "a", je to teraz všetko bude Ox61, 419 00:27:22,720 --> 00:27:27,050 kde, rozdelenie týchto hore do jeho binárny, takže 6 - 420 00:27:27,050 --> 00:27:37,830 Poďme skutočne urobiť - je tam bez gumy? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Takže rozdelenie 6 do binárnej bude 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 A rozdelenie 1 bude 0001. 423 00:27:54,610 --> 00:27:56,520 Ak sa pozrieme rozdiel medzi týmito 2, 424 00:27:56,520 --> 00:28:04,250 vidíme, že jediný rozdiel medzi malými a kapitálu "A", je to jediný kúsok. 425 00:28:04,250 --> 00:28:11,810 Takže sa vracia tu - v poriadku. 426 00:28:11,810 --> 00:28:15,920 Ak sa vrátime tu, ak sa pozrieme na to, čo trochu OX20 je, 427 00:28:15,920 --> 00:28:22,210 tak rozdelenie OX20 do jeho binárne, 428 00:28:22,210 --> 00:28:27,310 je 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, jediný bit, ktorý je nastavený, je to trochu, že sa zaoberáme, 430 00:28:33,470 --> 00:28:38,210 s prepínanie medzi veľkými a malými písmenami "A". 431 00:28:38,210 --> 00:28:47,610 Keby som alebo 'A', čo je tento, "", 432 00:28:47,610 --> 00:28:50,580 či som alebo "A" s OX20, 433 00:28:50,580 --> 00:28:53,490 čo mám dostať? 434 00:28:53,490 --> 00:28:58,960 [Študent, nepočuteľná] >> malými písmenami "A", pretože sa to bude hodiť tento bit na 1. 435 00:28:58,960 --> 00:29:04,170 A či som alebo "" s OX20, čo mám dostať? 436 00:29:04,170 --> 00:29:08,780 Malá, pretože len ORing "'s OX20, 437 00:29:08,780 --> 00:29:14,580 Idem sa ORing tento jediný kúsok na 1, je to už jedno, tak to nevadí. 438 00:29:14,580 --> 00:29:17,960 Tak sme sa "A" a "A". 439 00:29:17,960 --> 00:29:24,820 >> Bitové a Opäť platí, že môžeme myslieť na to, ako naše logické a náprotivok. 440 00:29:24,820 --> 00:29:28,180 Na ľavej strane máme pravda a pravda. 441 00:29:28,180 --> 00:29:31,160 Bude to pravda, a pre všetky prípady, 442 00:29:31,160 --> 00:29:36,270 false a true alebo pravdivé a nepravdivé, alebo false a false, 443 00:29:36,270 --> 00:29:38,550 žiadna z týchto vecí, sú pravdivé. 444 00:29:38,550 --> 00:29:44,170 Takže to, čo sme sa nakoniec dostať je 1000. 445 00:29:44,170 --> 00:29:48,830 Takže teraz, tu, tu, kde som použil verný bitového nie, 446 00:29:48,830 --> 00:29:52,230 kde sme mali OX20. 447 00:29:52,230 --> 00:29:54,350 Tak toto je OX20. 448 00:29:54,350 --> 00:29:59,570 A teraz, čo chcem robiť, bitový ~ z OX20. 449 00:29:59,570 --> 00:30:03,600 To sa bude hodiť všetky bity. 450 00:30:03,600 --> 00:30:09,330 Takže mám 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 A tak "" anded s ~ OX20 sa ma dať to, čo? 452 00:30:18,940 --> 00:30:22,430 Len kúsok naozaj musíme premýšľať o tom, je to jedno, 453 00:30:22,430 --> 00:30:26,020 pretože, ak všetky tieto bity sú nastavené na hodnotu 1, 454 00:30:26,020 --> 00:30:29,000 potom budeme mať presne to, čo "A" bolo, 455 00:30:29,000 --> 00:30:31,260 s výnimkou, snáď, čo je tento bit. 456 00:30:31,260 --> 00:30:34,460 Pretože keby to bolo 1, teraz to bude nastavená na 0, 457 00:30:34,460 --> 00:30:39,810 preto, že bez ohľadu na to, je, anded s tým bude 0. 458 00:30:39,810 --> 00:30:43,280 Takže to, čo je "" & ~ OX20 chystá dať mi? 459 00:30:43,280 --> 00:30:48,200 [Študenti odpoveď, nepočuteľná] >> A čo je "" a - to je "A". 460 00:30:48,200 --> 00:30:52,170 A čo je "" & ~ OX20 chystá dať mi? 461 00:30:52,170 --> 00:30:56,720 "A." Vzhľadom k tomu, to je v súčasnej dobe 1. 462 00:30:56,720 --> 00:30:59,570 Anding s touto 0 sa chystá urobiť to 0, 463 00:30:59,570 --> 00:31:02,530 a teraz budeme mať "A". 464 00:31:02,530 --> 00:31:06,600 >> Obaja sú "," a v neposlednom rade tohto typu, 465 00:31:06,600 --> 00:31:10,830 máme XOR. Je to veľmi podobné, alebo 466 00:31:10,830 --> 00:31:14,400 okrem toho sa rozumie výlučne alebo. 467 00:31:14,400 --> 00:31:18,420 To je ako to, čo si zvyčajne myslia ako, alebo v reálnom svete. 468 00:31:18,420 --> 00:31:23,190 Takže si to buď "x" alebo "y", ale nie oboje. 469 00:31:23,190 --> 00:31:28,700 Tu 1 ^ 1 bude 0. 470 00:31:28,700 --> 00:31:33,650 Vzhľadom k tomu, pravda, to je - to nefunguje, tak s logickým true a false 471 00:31:33,650 --> 00:31:37,150 ako bitový & a alebo robiť, 472 00:31:37,150 --> 00:31:40,100 ale je to pravda ^ pravda je false. 473 00:31:40,100 --> 00:31:44,810 Pretože sme sa len chcete vrátiť hodnotu true, ak iba jeden z nich je pravdivá. 474 00:31:44,810 --> 00:31:50,950 So 1 ^ 1 je 0. Čo je 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Je 1. 1 ^ 0 je 1, 0 ^ 0 je 0. 476 00:31:56,010 --> 00:32:03,890 Takže za všetkých okolností, 0 bitový niečo 0 bude 0. 477 00:32:03,890 --> 00:32:10,270 1 bitový niečo 0 alebo 0 bitový 1, 478 00:32:10,270 --> 00:32:14,660 či je to | alebo ^, to bude 1, a ak je to a to bude 0. 479 00:32:14,660 --> 00:32:20,850 A jediný prípad, kedy 1 bitový 1 nie 1 je s exkluzívnou alebo. 480 00:32:20,850 --> 00:32:24,580 To je 0110. 481 00:32:24,580 --> 00:32:36,520 Tak tu, pomocou XOR - tak sme späť na 20 rokov. 482 00:32:36,520 --> 00:32:43,480 'A' ^ OX20 je tieto 2 bity budeme porovnávať. 483 00:32:43,480 --> 00:32:50,020 Takže 1 ^ 0 sa chystá mi dať, čo? Jeden. 484 00:32:50,020 --> 00:32:58,430 'A' ^ OX20 sa chystá dať mi? Malá. 485 00:32:58,430 --> 00:33:04,010 '"^ OX20 sa chystá dať mi? Kapitál A. 486 00:33:04,010 --> 00:33:09,310 Vzhľadom k tomu, čo to robí, to XORing s OX20 487 00:33:09,310 --> 00:33:15,380 je skutočne mizerný, čo je tento bit. 488 00:33:15,380 --> 00:33:21,240 Ak je to 0, je to teraz bude stáť 1. 489 00:33:21,240 --> 00:33:26,160 Vzhľadom k tomu, to je 1, 1 ^ 1 je 0. 490 00:33:26,160 --> 00:33:33,280 Takže naše "" sa stala "A", a náš "A" sa stalo "". 491 00:33:33,280 --> 00:33:36,910 Takže XOR je naozaj pohodlný spôsob, ako len mizerný prípad. 492 00:33:36,910 --> 00:33:39,960 Chcete len pre iteráciu reťazec písmen 493 00:33:39,960 --> 00:33:44,330 a striedať prípad každého jednotlivého znaku, 494 00:33:44,330 --> 00:33:50,680 stačí XOR všetko s OX20. 495 00:33:50,680 --> 00:33:55,220 >> Teraz nám zostáva posun. Ľavý shift je len tak, v podstate, 496 00:33:55,220 --> 00:34:01,250 tlačiť všetky čísla do, alebo vľavo, a vložte 0 je za nimi. 497 00:34:01,250 --> 00:34:05,550 Takže tu máme 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Budeme tlačiť 3 0 je z pravej strany, 499 00:34:08,560 --> 00:34:13,580 a dostaneme 01101000. 500 00:34:13,580 --> 00:34:16,380 V nonbinary hľadiska, 501 00:34:16,380 --> 00:34:24,699 vidíme, že to je naozaj riešenie 13 doľava posunuté s 3, ktorý nám dáva 104. 502 00:34:24,699 --> 00:34:32,530 Takže vľavo posun, vidíme tu, x << y je v podstate x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 je 8, takže 13 * 8 je 104. 504 00:34:40,139 --> 00:34:45,679 Ak si len myslíte o binárny všeobecne, ako každú číslicu, 505 00:34:45,679 --> 00:34:49,530 Ak vychádzame z pravej strany, je to v 1 je miesto, potom na 2 miesta, potom 4 v mieste. 506 00:34:49,530 --> 00:34:51,330 Takže tým, že tlačí do 0 rokov z pravej strany, 507 00:34:51,330 --> 00:34:55,080 sme jednoducho tlačí veci, ktoré boli v 4. miesta do 8 miesta, 508 00:34:55,080 --> 00:34:57,920 a veci, ktoré boli v 8 miesta na 16. miesta. 509 00:34:57,920 --> 00:35:01,280 Každý posun len násobí o 2. Jo? 510 00:35:01,280 --> 00:35:05,210 [Študent] Čo sa stane, keď sa posunie o 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Ak sa posunul o 5 by ste len stratiť číslice. 512 00:35:10,790 --> 00:35:15,410 Nevyhnutne, je to to isté. Rovnako ako celé čísla sú iba 32 bitov, 513 00:35:15,410 --> 00:35:20,750 takže ak pridáte 2 naozaj veľké celé čísla, je to jednoducho nevojde celé číslo. 514 00:35:20,750 --> 00:35:23,660 Takže je to to isté tu. Ak sa posunul o 5, 515 00:35:23,660 --> 00:35:25,650 by sme len stratiť, že jeden. 516 00:35:25,650 --> 00:35:28,820 A to je niečo, čo mám na mysli tým "hrubo" 517 00:35:28,820 --> 00:35:37,470 kde ak posun príliš ďaleko, stratíte bitov. 518 00:35:37,470 --> 00:35:39,830 >> Právo posun bude opačný, 519 00:35:39,830 --> 00:35:43,090 kam ideme do tuhého 0 Off konci, 520 00:35:43,090 --> 00:35:48,400 a pre naše účely, vyplňte 0 rokov zľava. 521 00:35:48,400 --> 00:35:52,910 Takže, čo robíme, sme v podstate zvrátiť to, čo sme už urobili. 522 00:35:52,910 --> 00:35:57,780 A vidíme, že tri 0 je na pravej strane práve spadol, 523 00:35:57,780 --> 00:36:02,020 a my sme tlačil 1101 úplne napravo. 524 00:36:02,020 --> 00:36:08,380 To robí 104 >> 3, ktorá je v skutočnosti, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Takže teraz, tu, je to podobný nápad. 526 00:36:11,200 --> 00:36:18,720 Prečo je to len zhruba x / 2 ^ y, a nie v skutočnosti x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Pretože keď som sa posunul o 4, by som stratil jeden. 528 00:36:22,240 --> 00:36:25,950 V podstate, čo si myslíte o, len myslieť na celočíselné delenie všeobecne. 529 00:36:25,950 --> 00:36:31,070 Tak, ako je 5/2 je 2.. Nie je to 2.5. 530 00:36:31,070 --> 00:36:35,000 Je to rovnaká myšlienka tu. Keď sme sa rozdeliť o 2, 531 00:36:35,000 --> 00:36:39,910 môžeme stratiť nepárne bity na ceste. 532 00:36:39,910 --> 00:36:43,870 Takže teraz - to je pre bitové operácie. To je všetko, čo potrebujete vedieť. 533 00:36:43,870 --> 00:36:46,340 Spomeňte si na prípady použitia sme videli v triede, 534 00:36:46,340 --> 00:36:49,340 ako bitová maska ​​je vhodná pre Bitové operátorov, 535 00:36:49,340 --> 00:36:53,220 alebo ich použiť pre bitové masky. 536 00:36:53,220 --> 00:36:58,620 Veľké písmená a malé písmená, konverzia je celkom typický príklad. 537 00:36:58,620 --> 00:37:01,640 >> Dobre, takže buffer overflow útoky. 538 00:37:01,640 --> 00:37:05,110 Každý, kto si spomenúť, čo bolo s touto funkciou v poriadku? 539 00:37:05,110 --> 00:37:10,140 Všimnite si, sme deklarovali pole 12 bajtov, 12 znakov, 540 00:37:10,140 --> 00:37:18,510 a potom skopírovať do našej pamäti 12 znakov celý reťazec bar. 541 00:37:18,510 --> 00:37:25,080 Takže to, čo je tu za problém? 542 00:37:25,080 --> 00:37:32,270 Magické číslo 12 by mal do značnej miery okamžite vyskočí as - prečo 12? 543 00:37:32,270 --> 00:37:35,050 Čo keď sa stane, bar na viac ako 12 znakov? 544 00:37:35,050 --> 00:37:41,200 Čo keď bar je milióny postáv? 545 00:37:41,200 --> 00:37:46,010 Tu je problém memcpy. Pokiaľ bar je dostatočne dlhý, 546 00:37:46,010 --> 00:37:50,330 to bude len celkom - 'c', 'c' nie je jedno, že to bolo len 12 znakov; 547 00:37:50,330 --> 00:37:53,280 "C" nie je jedno, že sa nezmestí, že veľa bytov. 548 00:37:53,280 --> 00:37:58,250 Bude to len úplne prepísať znak, 12 bajtov sme pridelené na to, 549 00:37:58,250 --> 00:38:01,830 a všetko okolo neho v pamäti, ktorá nie je v skutočnosti patrí do tejto vyrovnávacej pamäti 550 00:38:01,830 --> 00:38:06,520 s tým, čo reťazec bar. 551 00:38:06,520 --> 00:38:09,780 Takže to bol obrázok sme videli v triede 552 00:38:09,780 --> 00:38:12,220 kde máme naše stack rastie. 553 00:38:12,220 --> 00:38:16,040 Tie by mali byť použité na tieto obrázky, alebo sa znova zoznámiť sa s nimi. 554 00:38:16,040 --> 00:38:21,260 Máme zásobník rastie, pamäťové adresy začínajú na 0 na vrchole 555 00:38:21,260 --> 00:38:26,270 a rast sa rád 4000000000 na dne. 556 00:38:26,270 --> 00:38:28,820 Máme pole 'c' niekde v pamäti, 557 00:38:28,820 --> 00:38:32,260 potom máme ukazovateľ na zatarasiť hneď pod ním, 558 00:38:32,260 --> 00:38:38,720 a potom tu máme uložený rám ukazovateľ v našej spiatočnou adresou a našej materskej rutinu v zásobníku. 559 00:38:38,720 --> 00:38:40,800 Spomeň si, čo spiatočná adresa je? 560 00:38:40,800 --> 00:38:45,360 Je to, keď hlavný volá funkciu foo, volá funkciu bar, 561 00:38:45,360 --> 00:38:48,100 nevyhnutne, bar vráti. 562 00:38:48,100 --> 00:38:52,610 Takže keď bar vráti, oni potrebujú vedieť, že sa vracia do foo, že ju volal. 563 00:38:52,610 --> 00:39:01,360 Takže spiatočná adresa je adresa funkcia, že sa má vrátiť, keď funkcia vracia. 564 00:39:01,360 --> 00:39:05,830 Dôvodom je to dôležité pre buffer overflow útoky je preto, pohodlne, 565 00:39:05,830 --> 00:39:09,580 hackeri chceli zmeniť, že spiatočnú adresu. 566 00:39:09,580 --> 00:39:14,950 Namiesto toho, aby šiel späť do foo, idem sa vrátiť tam, kam hacker chce, aby som sa vrátila do. 567 00:39:14,950 --> 00:39:17,760 A, pohodlne, kde hacker často sa chce vrátiť do 568 00:39:17,760 --> 00:39:22,400 je začiatok bufferu, ktorý sme pôvodne mali. 569 00:39:22,400 --> 00:39:26,170 Takže všimnúť, opäť, Malá India. 570 00:39:26,170 --> 00:39:28,490 Zariadenie je príkladom Malý indický systém, 571 00:39:28,490 --> 00:39:34,140 takže celé číslo, alebo ukazovateľ je uložený s obrátenými bajtov. 572 00:39:34,140 --> 00:39:38,980 Takže tu vidíme - je to? Jo. 573 00:39:38,980 --> 00:39:45,660 Vidíme Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Spomeňte si na hexadecimálne číslice? 575 00:39:48,250 --> 00:39:50,640 Nechceme zvrátiť hexadecimálne číslice v Malej indickej, 576 00:39:50,640 --> 00:39:56,110 pretože 2 hexadecimálne číslice tvoria jeden byte, a my zvrátiť bajtov. 577 00:39:56,110 --> 00:40:00,300 To je dôvod, prečo sme neukladáme, ako, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Uložíme, namiesto toho, každý pár 2 číslic, počnúc sprava. 579 00:40:07,520 --> 00:40:10,880 Táto adresa odkazuje na adresu začiatku 580 00:40:10,880 --> 00:40:15,190 z našej pamäti, že sme skutočne chceli skopírovať do na prvom mieste. 581 00:40:15,190 --> 00:40:19,230 Dôvodom, prečo je užitočné preto, že to, čo v prípade, že útočník 582 00:40:19,230 --> 00:40:24,100 sa stalo, namiesto reťazec, ktorý bol práve 583 00:40:24,100 --> 00:40:27,060 neškodný reťazec, ako je ich meno alebo niečo, 584 00:40:27,060 --> 00:40:33,900 čo keď namiesto toho, že string sú len niektoré ľubovoľného kódu 585 00:40:33,900 --> 00:40:38,610 že urobili, čo chceli to urobiť? 586 00:40:38,610 --> 00:40:45,630 Aby mohli - ja si nemyslím, že akékoľvek chladné kódu. 587 00:40:45,630 --> 00:40:47,780 Mohlo by to byť čokoľvek, aj keď. Akékoľvek katastrofálne kód. 588 00:40:47,780 --> 00:40:51,440 Keby chceli, mohli jednoducho robiť niečo na segmentoch chýb, ale to by bolo zbytočné. 589 00:40:51,440 --> 00:40:54,950 Zvyčajne to hack systému. 590 00:40:54,950 --> 00:40:59,930 >> Dobre. CS50 knižnice. 591 00:40:59,930 --> 00:41:04,800 To je, v podstate, vezmi_int, getString, všetky tie funkcie, sme Vám k dispozícii. 592 00:41:04,800 --> 00:41:10,630 Takže máme char * string, a to abstrakcia, že odfúkol 593 00:41:10,630 --> 00:41:12,450 v určitom okamihu v priebehu semestra. 594 00:41:12,450 --> 00:41:18,220 Pamätajte si, že reťazec je len pole znakov. 595 00:41:18,220 --> 00:41:23,240 Takže tu vidíme skrátenú verziu GetString. 596 00:41:23,240 --> 00:41:25,920 Mali by ste sa pozrieť späť na to spomenúť si, ako je to v skutočnosti realizovaná. 597 00:41:25,920 --> 00:41:30,950 Kľúčové informácie sú Všimnite si, dostaneme v jedinom znaku naraz 598 00:41:30,950 --> 00:41:34,570 zo štandardného vstupu, ktorý je rovnako ako nám písať na klávesnici. 599 00:41:34,570 --> 00:41:37,890 Takže jeden znak v čase, a ak sa dostanete príliš veľa znakov, 600 00:41:37,890 --> 00:41:40,580 takže ak n + 1 je väčšia ako kapacita, 601 00:41:40,580 --> 00:41:44,140 potom musíme zvýšiť kapacitu našej pamäti. 602 00:41:44,140 --> 00:41:47,780 Tak tu sme zdvojnásobenie veľkosti našej pamäti. 603 00:41:47,780 --> 00:41:51,840 A to stále deje, sme sa vložiť znak do našej pamäti 604 00:41:51,840 --> 00:41:56,220 kým nedostaneme nový riadok alebo koniec súboru alebo čokoľvek iné, 605 00:41:56,220 --> 00:41:59,380 V takom prípade sme hotoví s reťazcami a potom reálnom GetString 606 00:41:59,380 --> 00:42:05,120 zmenšuje pamäť, ako keby sme pridelené príliš veľa pamäti, že sa vrátim a zmenšiť trochu. 607 00:42:05,120 --> 00:42:08,830 Tak sme sa neukazujú, ale hlavná myšlienka je 608 00:42:08,830 --> 00:42:11,960 to má čítať v jednom znaku naraz. 609 00:42:11,960 --> 00:42:17,140 To môže nielen čítať v celej veci naraz, 610 00:42:17,140 --> 00:42:19,550 pretože ich pamäť je len určitej veľkosti. 611 00:42:19,550 --> 00:42:26,590 Takže ak je reťazec, ktorý sa snaží vložiť do vyrovnávacej pamäte je príliš veľká, potom by to pretiecť. 612 00:42:26,590 --> 00:42:28,940 Tak tu sme zabrániť tomu, aby len o čítanie v jedinom znaku 613 00:42:28,940 --> 00:42:33,750 v čase a rastie vždy, keď je treba. 614 00:42:33,750 --> 00:42:40,270 Takže vezmi_int a ostatné knižničný funkcie CS50 majú tendenciu používať getString 615 00:42:40,270 --> 00:42:42,310 v ich realizácii. 616 00:42:42,310 --> 00:42:45,370 Tak som upozornil na dôležité veci tu. 617 00:42:45,370 --> 00:42:49,460 Vyzýva getString získať reťazec. 618 00:42:49,460 --> 00:42:51,710 Ak getString nepodarilo vrátiť pamäť, 619 00:42:51,710 --> 00:42:54,270 si uvedomiť, že getString mallocs niečo, takže keď budete volať getString 620 00:42:54,270 --> 00:42:57,820 nemali by ste (nezrozumiteľné) uvoľniť, že reťazec, ktorý ste dostali. 621 00:42:57,820 --> 00:43:02,870 Tak tu, ak sa nepodarilo malloc niečo, vrátime INT_MAX len ako príznak, že 622 00:43:02,870 --> 00:43:05,650 Ahoj, boli sme vlastne schopní získať celé číslo. 623 00:43:05,650 --> 00:43:10,830 Tie by mali ignorovať, čo sa vrátim k vám, alebo 624 00:43:10,830 --> 00:43:15,540 nemali by ste liečiť to ako platný vstup. 625 00:43:15,540 --> 00:43:21,360 A konečne, za predpokladu, že sa podarí, budeme používať sscanf s týmto zvláštnym príznakom, 626 00:43:21,360 --> 00:43:23,820 čo znamená, že prvý zápas celé číslo, 627 00:43:23,820 --> 00:43:26,770 potom nájdené žiadne znaky po tom celé číslo. 628 00:43:26,770 --> 00:43:29,070 Takže všimnete chceme, aby equal 1. 629 00:43:29,070 --> 00:43:32,940 Tak sscanf vracia, koľko zápasov, ak úspešne vykonaná? 630 00:43:32,940 --> 00:43:37,010 Vráti hodnotu 1, ak je úspešne uzavreté celé číslo, 631 00:43:37,010 --> 00:43:40,890 vráti hodnotu 0, ak to nezodpovedalo celé číslo, a to sa vráti 2 632 00:43:40,890 --> 00:43:45,920 ak je uzavreté číslo nasleduje nejaký znak. 633 00:43:45,920 --> 00:43:49,780 Takže všimnete sme opakovať, ak sa nič iné ako jeden zápas. 634 00:43:49,780 --> 00:43:55,230 Pokiaľ teda súčasťou 1, 2, 3, C, alebo 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 potom 1, 2, 3 by sa ukladajú na celé číslo, 636 00:43:57,400 --> 00:43:59,620 X by sa ukladajú na charaktere, 637 00:43:59,620 --> 00:44:06,410 sscanf vráti 2, a budeme opakovať, pretože chceme len celé číslo. 638 00:44:06,410 --> 00:44:09,810 >> Rýchlo fúkanie cez HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language je štruktúra a sémantika na webe. 640 00:44:15,340 --> 00:44:19,960 Tu je príklad z prednášky, kde máme HTML tagy. 641 00:44:19,960 --> 00:44:22,110 Máme hlavy tagy, telo tagy, 642 00:44:22,110 --> 00:44:27,770 máme príklady prázdnych značiek, kde sme vlastne nemajú štart a úzke tag, 643 00:44:27,770 --> 00:44:30,820 musíme len odkaz a obrázok. 644 00:44:30,820 --> 00:44:38,480 Neexistuje žiadny obraz tag zatváranie, je tu len jediná značka, ktorá dosiahne všetko, čo značka musí urobiť. 645 00:44:38,480 --> 00:44:41,950 Odkaz je príklad, uvidíme, ako si odkaz na CSS, 646 00:44:41,950 --> 00:44:45,910 skript je príkladom toho, ako si odkaz na externé JavaScript. 647 00:44:45,910 --> 00:44:53,100 Je to celkom jednoduché, a pamätajte, že HTML nie je programovací jazyk. 648 00:44:53,100 --> 00:44:58,250 Tu si spomenúť, ako by ste definovať formu, alebo aspoň to, čo by to urobiť? 649 00:44:58,250 --> 00:45:01,740 Takáto forma má akciu a metódy. 650 00:45:01,740 --> 00:45:06,210 Metódy budete len niekedy vidieť sú GET a POST. 651 00:45:06,210 --> 00:45:09,040 Takže si je verzia, kde dostane, čo dať do URL. 652 00:45:09,040 --> 00:45:11,680 POST je miesto, kde to nie je dať do URL. 653 00:45:11,680 --> 00:45:18,520 Namiesto toho, všetky dáta z formulára sa vloží viac skryté v požiadavke HTTP. 654 00:45:18,520 --> 00:45:22,390 Tak tu, akcie definuje, kde požiadavka HTTP ide. 655 00:45:22,390 --> 00:45:27,490 Tam, kde to ide, je google.com / search. 656 00:45:27,490 --> 00:45:32,890 Metóda. Spomeňte si na rozdiely medzi GET a POST, 657 00:45:32,890 --> 00:45:37,200 a len povedať, ako napríklad, ak chcete záložky niečo. 658 00:45:37,200 --> 00:45:40,660 Už nikdy sa nebudete môcť záložku POST URL 659 00:45:40,660 --> 00:45:44,970 pretože dáta nie sú zahrnuté v URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, dnes je HyperText Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 HyperText Transfer Protocol, mali by ste očakávať, že prenos 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, a to robí. 663 00:45:57,710 --> 00:46:00,170 Ale je to tiež prenáša všetky obrázky, ktoré nájdete na webe, 664 00:46:00,170 --> 00:46:05,400 žiadne sťahovanie, ktoré urobíte spustiť ako HTTP požiadavky. 665 00:46:05,400 --> 00:46:10,350 Takže HTTP je len jazyk World Wide Web. 666 00:46:10,350 --> 00:46:15,610 A tu je potrebné si uvedomiť, tento druh požiadavke HTTP. 667 00:46:15,610 --> 00:46:19,300 Tu HTTP/1.1 na strane práve hovorí, že je to verzia 668 00:46:19,300 --> 00:46:21,570 protokolu som pomocou. 669 00:46:21,570 --> 00:46:25,770 Je to skoro vždy bude HTTP/1.1, ako budete vidieť. 670 00:46:25,770 --> 00:46:30,110 Potom vidíme, že je to GET, POST alternatívou je, že môžete vidieť. 671 00:46:30,110 --> 00:46:40,790 A URL, ktoré som sa snažil navštíviť bola www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Takže si pamätajte, že to, otáznik q = bla bla bla, 673 00:46:44,240 --> 00:46:49,040 je druh vecí, ktoré je predloženej podobe. 674 00:46:49,040 --> 00:46:51,830 Reakcie by to mohlo vrátiť ku mne bude vyzerať nejako takto. 675 00:46:51,830 --> 00:46:54,050 Opäť platí, že počnúc protokolu, ktorý sa chystá byť, že, 676 00:46:54,050 --> 00:46:59,190 nasleduje stavový kód. Tu je to 200 OK. 677 00:46:59,190 --> 00:47:05,060 A konečne, webové stránky, ktoré som vlastne požiadal bude nasledovať. 678 00:47:05,060 --> 00:47:08,210 Možný stav kód, ktorý ste mohli vidieť, a mali by ste vedieť niekoľko z nich. 679 00:47:08,210 --> 00:47:12,770 200 OK ste pravdepodobne nevideli. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found 500 Internal Server Error 681 00:47:17,830 --> 00:47:22,140 je zvyčajne, ak idete na webových stránkach a niečo, čo je rozbité, alebo ich PHP kód, dôjde k chybe, 682 00:47:22,140 --> 00:47:24,930 zatiaľ čo my v zariadení majú tak veľký oranžový box 683 00:47:24,930 --> 00:47:27,830 že príde a hovorí, ako, niečo nie je v poriadku, tento kód nefunguje 684 00:47:27,830 --> 00:47:30,380 alebo táto funkcia je zlé. 685 00:47:30,380 --> 00:47:33,230 Zvyčajne webové stránky nechcem, aby si vedel, aké funkcie sú skutočne zlé, 686 00:47:33,230 --> 00:47:37,880 takže namiesto toho si len dať 500 interné chyby servera. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP je 1 vrstva pod HTTP. 688 00:47:43,050 --> 00:47:47,550 Pamätajte si, že tam je Internet mimo World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Rovnako ako keď budete hrať online hru, ktorá nemá ísť cez HTTP, 690 00:47:52,270 --> 00:47:55,740 to prechádza iná - je to stále používate internet, 691 00:47:55,740 --> 00:47:58,900 ale nepoužíva HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP je len jeden príklad z protokolu postavený na protokole TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP doslovne znamená Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Každý počítač má IP adresu, sú tieto 4-miestny veci 695 00:48:11,500 --> 00:48:16,510 ako je 192.168.2.1, alebo čo, že má tendenciu byť lokálne jeden. 696 00:48:16,510 --> 00:48:23,390 Ale to je vzor IP adresy. 697 00:48:23,390 --> 00:48:29,060 Takže DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 to je to, čo prekladá veci, ako je google.com, aby skutočné IP adresy. 699 00:48:33,410 --> 00:48:37,700 Takže ak ste typ, že IP adresy do URL, 700 00:48:37,700 --> 00:48:40,850 že by ťa priviesť na Google, ale nemajú tendenciu si pamätať tie veci. 701 00:48:40,850 --> 00:48:45,470 Tie majú tendenciu sa namiesto toho pamätať google.com. 702 00:48:45,470 --> 00:48:51,560 Posledná vec, ktorú máme, je portami, kde je to TCP súčasťou IP protokolu. 703 00:48:51,560 --> 00:48:54,880 TCP robí viac. Premýšľajte o tom, ako máte vo Vašom webovom prehliadači chod. 704 00:48:54,880 --> 00:48:58,670 Možno máte nejaké e-mailovej aplikácie beží; 705 00:48:58,670 --> 00:49:02,150 Možno budete mať nejaký iný program, ktorý používa Internet v chode. 706 00:49:02,150 --> 00:49:05,090 Tí všetci potrebujú prístup k internetu, 707 00:49:05,090 --> 00:49:08,100 ale má počítač iba jeden WiFi karty alebo čokoľvek. 708 00:49:08,100 --> 00:49:10,780 Takže porty sú tak, že sme schopní rozdeliť 709 00:49:10,780 --> 00:49:13,550 ako tieto aplikácie sú schopní používať internet. 710 00:49:13,550 --> 00:49:17,230 Každá aplikácia dostane jeden konkrétny port, ktorý môžete počúvať na, 711 00:49:17,230 --> 00:49:19,670 a v predvolenom nastavení, HTTP používa port 80. 712 00:49:19,670 --> 00:49:22,410 Niektoré e-mailové služby využívať 25. 713 00:49:22,410 --> 00:49:24,490 Tie s nízkym číslom majú tendenciu byť vyhradené. 714 00:49:24,490 --> 00:49:29,270 Tie sú zvyčajne schopní získať vyššiu číselná ty pre seba. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Sme v štýle webovej stránky s CSS, nie s HTML. 717 00:49:36,030 --> 00:49:38,440 K dispozícii sú 3 miesta si môžete dať svoje CSS. 718 00:49:38,440 --> 00:49:46,300 To môže byť inline, medzi tagy štýlu, alebo v úplne samostatnom súbore a potom spojená palcov 719 00:49:46,300 --> 00:49:48,470 A tu je len príkladom CSS. 720 00:49:48,470 --> 00:49:50,450 Tie by mali uznať tento vzor, 721 00:49:50,450 --> 00:49:54,310 kde prvý príklad máme zodpovedajúce tag tela, 722 00:49:54,310 --> 00:49:56,680 a tu sme centrovanie značku tela. 723 00:49:56,680 --> 00:50:00,420 Druhý príklad, sme zodpovedajúce vec 724 00:50:00,420 --> 00:50:04,740 s ID päty, a my sa uchádzate niektoré štýly, ktoré. 725 00:50:04,740 --> 00:50:07,310 Všimnite si, že ID zápätie texte zarovná doľava, 726 00:50:07,310 --> 00:50:09,840 vzhľadom k tomu, telo texte zarovná centrum. 727 00:50:09,840 --> 00:50:13,180 Päta je vo vnútri tela. 728 00:50:13,180 --> 00:50:16,470 To bude miesto, text-align odišiel, aj keď telo hovorí texte zarovnanie na stred. 729 00:50:16,470 --> 00:50:18,880 To je celý kaskádové časť. 730 00:50:18,880 --> 00:50:22,110 Môžete mať - môžete zadať štýly pre telo, 731 00:50:22,110 --> 00:50:25,320 a potom, čo v tele môžete zadať konkrétnejšie štýly, 732 00:50:25,320 --> 00:50:28,160 a veci fungujú tak, ako očakávate. 733 00:50:28,160 --> 00:50:34,420 Konkrétnejšie CSS špecifikácií majú prednosť. 734 00:50:34,420 --> 00:50:46,140 Myslím, že to je. 735 00:50:46,140 --> 00:50:49,260 >> [Ali nahmatá] Ahoj všetci. Keby som mohol len získať vašu pozornosť. 736 00:50:49,260 --> 00:50:53,990 Som Ali a ja idem cez PHP a SQL naozaj rýchlo. 737 00:50:53,990 --> 00:51:00,310 Takže môžeme začať. PHP je skratka pre PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 A ako všetci by mali vedieť, že je to server-side skriptovací jazyk, 739 00:51:03,730 --> 00:51:06,800 a my ho použiť pre zadnú časť webových stránok, 740 00:51:06,800 --> 00:51:12,540 a ako to robí veľa výpočtov, na za-scény časti. 741 00:51:12,540 --> 00:51:17,510 Syntaxe. Nie je to ako C, prekvapenie, prekvapenie. 742 00:51:17,510 --> 00:51:22,060 Vždy musí začať, ak vidíte, - Nemôžem sa pohnúť dopredu. 743 00:51:22,060 --> 00:51:31,340 Môžete vidieť, čo potrebujete nové druhy zátvoriek a potom budete tiež potrebovať? Php. 744 00:51:31,340 --> 00:51:35,780 To je vždy, ako ste sa zamerajte PHP text, váš PHP kód. 745 00:51:35,780 --> 00:51:39,180 Takže to môže byť len ako C, kde si trochu dať to na prvýkrát. 746 00:51:39,180 --> 00:51:42,290 Musíte vždy obklopujú ju. 747 00:51:42,290 --> 00:51:47,610 A teraz, hlavné syntax je, že všetky ukazovatele, je potrebné začať s znak $. 748 00:51:47,610 --> 00:51:49,490 Musíte to urobiť, keď ste ich definovať, čo musíte urobiť, je 749 00:51:49,490 --> 00:51:51,860 ak máte na mysli, aby sa na ne neskôr. 750 00:51:51,860 --> 00:51:56,510 Vždy je potrebné, aby $. To je tvoj nový najlepší priateľ, docela veľa. 751 00:51:56,510 --> 00:52:01,690 Nemusíte - na rozdiel od C, nemusíte sa dať aký typ premennej je. 752 00:52:01,690 --> 00:52:04,940 Takže zatiaľ čo vy potrebujete dolárov, nemusíte dať, ako, 753 00:52:04,940 --> 00:52:09,470 int x, alebo reťazec y, a tak ďalej, a tak ďalej. 754 00:52:09,470 --> 00:52:11,490 Tak malý rozdiel. 755 00:52:11,490 --> 00:52:15,590 V dôsledku toho, to znamená, že PHP je slabo typu. 756 00:52:15,590 --> 00:52:19,310 PHP je slabo typ jazyka, a to slabo napísaný premenných. 757 00:52:19,310 --> 00:52:24,020 Inými slovami to znamená, že môžete prepínať medzi rôznymi druhmi typmi premenných. 758 00:52:24,020 --> 00:52:27,230 Môžete si uložiť číslo 1 ako int, 759 00:52:27,230 --> 00:52:29,650 môžete uložiť ako reťazec, a môžete uložiť ako float, 760 00:52:29,650 --> 00:52:33,550 a to všetko bude, že číslo 1. 761 00:52:33,550 --> 00:52:36,080 Aj keď ste ukladanie v rôznych formách, 762 00:52:36,080 --> 00:52:39,120 je to stále - variabilné typy sú stále drží na konci. 763 00:52:39,120 --> 00:52:41,540 Takže keď sa pozriete sem, ak si pamätáte z pset 7, 764 00:52:41,540 --> 00:52:43,500 mnohí z vás asi mal problémy s tým. 765 00:52:43,500 --> 00:52:47,280 Dva rovnaké príznaky, 3 znaky rovná, 4 rovnítka. 766 00:52:47,280 --> 00:52:49,990 Dobre, nie sú tam žiadne 4 znaky rovná, ale tam sú 2 a 3. 767 00:52:49,990 --> 00:52:53,320 Môžete použiť dva rovnaké znaky ku skontrolovaní logiky hodnôt. 768 00:52:53,320 --> 00:52:55,830 Je možné skontrolovať u všetkých typov. 769 00:52:55,830 --> 00:52:58,770 Takže ak môžete vidieť v prvom príklade, 770 00:52:58,770 --> 00:53:02,210 Mám num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Takže vaše int a vaše string sú ako technicky, 1, 772 00:53:06,710 --> 00:53:10,790 ale sú rôzne typy. Ale pre dvojité rovná, bude to ešte prejsť. 773 00:53:10,790 --> 00:53:15,510 Avšak, pre trojité rovná, skontroluje hodnoty, ako aj rôzne druhy. 774 00:53:15,510 --> 00:53:18,760 To znamená, že to nebude prejsť v tomto druhom prípade tu, 775 00:53:18,760 --> 00:53:22,350 kam s použitím 3 rovnítka miesto. 776 00:53:22,350 --> 00:53:26,590 Tak to je hlavný rozdiel, že ste mali všetci ukázali sa. 777 00:53:26,590 --> 00:53:31,570 >> Zreťazenie je ďalší silný vec, ktorú môžete použiť v PHP. 778 00:53:31,570 --> 00:53:34,080 Je to v podstate len to šikovný bodka zápisnica, 779 00:53:34,080 --> 00:53:36,230 a to je to, ako môžete zviazať povrázky dohromady. 780 00:53:36,230 --> 00:53:40,800 Takže ak máte mačku a máte psa a chcete dať dva reťazce dohromady, 781 00:53:40,800 --> 00:53:44,080 môžete použiť obdobie, a to je trochu o tom, ako to funguje. 782 00:53:44,080 --> 00:53:46,660 Môžete tiež len umiestniť vedľa seba, 783 00:53:46,660 --> 00:53:49,030 ako môžete vidieť tu v pravom dolnom príklade, 784 00:53:49,030 --> 00:53:51,610 kde som echo reťazec 1, 2 priestor reťazec. 785 00:53:51,610 --> 00:53:56,930 PHP bude vedieť, aby ich nahradili ako také. 786 00:53:56,930 --> 00:53:59,780 Poľa. Teraz, v PHP, existujú 2 rôzne druhy polí. 787 00:53:59,780 --> 00:54:03,180 Môžete mať pravidelné pole, a môžete mať tiež asociatívne pole, 788 00:54:03,180 --> 00:54:06,040 a my sme ísť cez ne práve teraz. 789 00:54:06,040 --> 00:54:08,280 Pravidelné polia sú práve to v C, 790 00:54:08,280 --> 00:54:11,240 a tak budete mať indexy, ktoré sú očíslované. 791 00:54:11,240 --> 00:54:13,160 Práve teraz sa práve chystá vytvoriť a dať - 792 00:54:13,160 --> 00:54:15,500 tak to je, ako sme sa vytvoriť prázdne pole, potom budeme 793 00:54:15,500 --> 00:54:17,310 vložiť do čísle indexu 0.. 794 00:54:17,310 --> 00:54:19,200 Chystáme sa dať číslo 6, hodnotu 6. 795 00:54:19,200 --> 00:54:21,500 Môžete to vidieť na spodnej časti tu. 796 00:54:21,500 --> 00:54:24,240 Where 's - na indexovým číslom 1 ideme dať hodnotu číslo 4, 797 00:54:24,240 --> 00:54:26,720 a tak môžete vidieť, že je to 6, je tu 4, 798 00:54:26,720 --> 00:54:29,160 a potom, ako sme tlačíte veci, 799 00:54:29,160 --> 00:54:33,550 keď sa snažíme a vytlačiť hodnotu uloženú v čísle indexe 0., 800 00:54:33,550 --> 00:54:36,900 potom uvidíme hodnotu 6 je vytlačiť. V pohode? 801 00:54:36,900 --> 00:54:40,160 Tak to je pravidelná pole pre vás. 802 00:54:40,160 --> 00:54:42,750 Ďalším spôsobom, ako môžete tiež pridať veci do pravidelných radov teraz 803 00:54:42,750 --> 00:54:44,780 ich stačí pripojiť je na konci. 804 00:54:44,780 --> 00:54:47,240 To znamená, že nemusíte špecifikovať konkrétny index. 805 00:54:47,240 --> 00:54:51,000 Môžete vidieť číslo, a potom v hranatých zátvorkách nie je index zadaný. 806 00:54:51,000 --> 00:54:56,270 A bude to poznať - PHP bude vedieť, že stačí pridať na koniec zoznamu, ďalšie voľné miesto. 807 00:54:56,270 --> 00:54:59,190 Takže môžete vidieť 1 priamo tam v tej 0 mieste, 808 00:54:59,190 --> 00:55:02,690 2 išiel tam na prvom mieste. 809 00:55:02,690 --> 00:55:04,690 3. ide - je tam pridané rovnako. 810 00:55:04,690 --> 00:55:06,720 Takže to trochu dáva zmysel. Len stále pridávame ju, 811 00:55:06,720 --> 00:55:09,360 a potom, keď sme ozvenou index číslo 1, 812 00:55:09,360 --> 00:55:13,080 bude tlačiť na hodnotu 2. 813 00:55:13,080 --> 00:55:16,800 >> Potom máme polia, ktoré sú asociatívne pole. 814 00:55:16,800 --> 00:55:19,370 Asociatívne pole, miesto s číselnými indexmi, 815 00:55:19,370 --> 00:55:23,630 to, čo robia, je, že majú indexy, ktoré sú podľa špagátu. 816 00:55:23,630 --> 00:55:25,670 Môžete vidieť, miesto - Zbavil som sa všetkých týchto číselných indexov, 817 00:55:25,670 --> 00:55:32,140 a teraz je to key1, key2, key3, a oni sú v úvodzovkách znamenať, že sú všetky reťazce. 818 00:55:32,140 --> 00:55:34,470 Takže môžeme mať príklad. 819 00:55:34,470 --> 00:55:38,790 Príkladom je to, že máme TF, a to je meno indexu. 820 00:55:38,790 --> 00:55:42,030 Chystáme sa dať "Ali" ako názov, na indexe, kalórií zjedli, 821 00:55:42,030 --> 00:55:47,640 môžeme dať int tentoraz namiesto reťazec, 822 00:55:47,640 --> 00:55:52,240 a potom na indexe rád, môžeme dať celý rad vnútri nej. 823 00:55:52,240 --> 00:55:55,490 Takže je to druh - je to podobný koncept, ako sme mali 824 00:55:55,490 --> 00:55:58,930 indexy s číslami, ale teraz môžeme zmeniť indexy okolo 825 00:55:58,930 --> 00:56:03,890 mať je ako reťazce miesto. 826 00:56:03,890 --> 00:56:06,070 Môžete to urobiť tiež, okrem toho len robí to individuálne, 827 00:56:06,070 --> 00:56:09,400 môžete to urobiť všetko v jednom bloku. Takže môžete vidieť, že tf tohto poľa, 828 00:56:09,400 --> 00:56:13,350 a potom sme sa vydali ich všetky do jednej obrie hranatá zátvorka sady. 829 00:56:13,350 --> 00:56:15,220 Tak, že môže veci urýchliť. 830 00:56:15,220 --> 00:56:19,730 Je to skôr štylistické voľby ako ne. 831 00:56:19,730 --> 00:56:21,550 Máme tiež slučky. 832 00:56:21,550 --> 00:56:26,020 V jazyku C máme slučky, ktoré fungujú ako tento. 833 00:56:26,020 --> 00:56:29,690 Mali sme našu ponuku, a išli sme od indexu 0 až do konca zoznamu, 834 00:56:29,690 --> 00:56:31,740 a my sme to všetko vytlačiť, nie? 835 00:56:31,740 --> 00:56:33,880 Okrem Problém je, že pre asociatívne pole, 836 00:56:33,880 --> 00:56:36,610 sa nemusí nutne vedieť, tie číselné indexy 837 00:56:36,610 --> 00:56:39,610 pretože teraz máme reťazec indexy. 838 00:56:39,610 --> 00:56:44,800 Teraz používame foreach slučky, ktoré znovu, dúfajme, že použité v pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach slučky bude len vedieť, každú časť zoznamu. 840 00:56:48,930 --> 00:56:52,450 A to nemusí vedieť presne číselný index, ktorý máte. 841 00:56:52,450 --> 00:56:56,490 Takže máte syntax foreach, takže je to foreach, vložíte pole. 842 00:56:56,490 --> 00:57:00,430 Takže moje pole sa nazýva pset, a potom ako, na slovo, 843 00:57:00,430 --> 00:57:04,530 a potom si dať tento miestny dočasnú premennú, ktoré budete používať 844 00:57:04,530 --> 00:57:10,690 len pre konkrétnu vec, ktorá sa deje držať špecifické - 845 00:57:10,690 --> 00:57:14,770 jedna inštancia alebo jedna časť poľa. 846 00:57:14,770 --> 00:57:18,350 Pset num bude mať jeden, a potom možno to bude mať číslo 6, 847 00:57:18,350 --> 00:57:20,410 a potom to bude mať číslo 2. 848 00:57:20,410 --> 00:57:26,630 Ale to je zaručené, že prejsť každú hodnotu, ktorá je v poli. 849 00:57:26,630 --> 00:57:30,530 Užitočné funkcie, ktoré by ste mali vedieť, v PHP sa vyžadujú, 850 00:57:30,530 --> 00:57:35,880 takže je zaistené, že budete, vrátane niektorých súborov, echo, exit, prázdny. 851 00:57:35,880 --> 00:57:40,490 Vrelo odporúčam vám pozrieť sa na pset 7 a pozrieť sa na týchto funkcií. 852 00:57:40,490 --> 00:57:42,810 Možno budete musieť poznať tie, 853 00:57:42,810 --> 00:57:47,060 tak by som určite vedieť, čo presne tí sú všetci robia. 854 00:57:47,060 --> 00:57:50,080 >> A teraz ideme prejsť rozsahu veľmi rýchlo. 855 00:57:50,080 --> 00:57:53,490 V rozsahu, PHP je tak trochu funky veci, na rozdiel od C 856 00:57:53,490 --> 00:57:56,170 a tak sme len tak rýchlo prejsť. 857 00:57:56,170 --> 00:57:58,930 Takže povedzme, že začneme v tej šípky, ktoré máme tam. 858 00:57:58,930 --> 00:58:02,900 A budeme začať s $ i Takže premenná "i" sa bude 0, 859 00:58:02,900 --> 00:58:06,730 a my sme len tak, aby tlač je v tom veľkom bielom poli tam. 860 00:58:06,730 --> 00:58:09,220 Chystáme sa začať s i0, a potom ideme na to echo. 861 00:58:09,220 --> 00:58:12,670 Takže tam je 0. 862 00:58:12,670 --> 00:58:15,210 A potom budeme zvyšovať ju v pre slučke, 863 00:58:15,210 --> 00:58:17,810 a potom to bude hodnota 1. 864 00:58:17,810 --> 00:58:20,070 Jedným z nich je menej ako 3, tak to bude prejsť, že pre sláčiky, 865 00:58:20,070 --> 00:58:23,230 a potom budeme vidieť, že znovu vytlačiť. 866 00:58:23,230 --> 00:58:25,520 Chystáme sa ju zvýšiť opäť na 2, 867 00:58:25,520 --> 00:58:29,860 a 2 je menšia ako 3, tak to bude prejsť pre sláčiky, a to bude tlačiť dve. 868 00:58:29,860 --> 00:58:35,100 Potom budete na vedomie, že 3 je menšia ako 3, takže budeme vymaniť sa z cyklu for. 869 00:58:35,100 --> 00:58:40,050 Takže teraz sme vystúpil, a potom budeme chodiť do aFunction. 870 00:58:40,050 --> 00:58:45,010 Dobre. Takže musíte si uvedomiť, že táto premenná, ktoré sme vytvorili, 871 00:58:45,010 --> 00:58:48,270 'I' premenná, nie je miestne rozsahom. 872 00:58:48,270 --> 00:58:50,280 To znamená, že to nie je miestna slučky, 873 00:58:50,280 --> 00:58:58,060 a že premenná ešte môžeme pristupovať a meniť potom, a to bude ešte efektívnejšia. 874 00:58:58,060 --> 00:59:02,160 Takže ak idete do funkcie dnes, uvidíte, že sme tiež použiť "i" premenné, 875 00:59:02,160 --> 00:59:05,320 a budeme zvyšovať 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Človek by si myslel, spočiatku založený na C, že je to kópia "i" premenné. 877 00:59:09,410 --> 00:59:12,830 Je to úplne niečo iné, čo je správne. 878 00:59:12,830 --> 00:59:16,560 Takže keď sme ju vytlačiť, budeme tlačiť "aj" + +, ktorý je do tlače, že 4, 879 00:59:16,560 --> 00:59:19,640 a potom budeme - Ospravedlňujem sa. 880 00:59:19,640 --> 00:59:22,030 Potom ideme na koniec z tejto funkcie, 881 00:59:22,030 --> 00:59:24,820 a budeme mať kde, že šípka je práve teraz. 882 00:59:24,820 --> 00:59:29,190 To znamená, že potom, však, aj keď funkcia zmeniť hodnotu "i", 883 00:59:29,190 --> 00:59:32,620 nemala meniť mimo funkciu, 884 00:59:32,620 --> 00:59:35,060 preto, že funkcia má samostatný priestor. 885 00:59:35,060 --> 00:59:38,960 To znamená, že keď sme echo "i", sa to nezmenilo v rámci funkcie, 886 00:59:38,960 --> 00:59:43,660 a tak potom budeme opäť tlačiť 3. 887 00:59:43,660 --> 00:59:47,520 Rôzne veci, o pôsobnosti v PHP, ako v C. 888 00:59:47,520 --> 00:59:51,130 >> Teraz v PHP a HTML. 889 00:59:51,130 --> 00:59:53,510 PHP sa používa, aby sa webové stránky dynamický. 890 00:59:53,510 --> 00:59:58,660 Je to trochu robí veci inak. 891 00:59:58,660 --> 01:00:02,090 Máme sa líši od HTML. 892 01:00:02,090 --> 01:00:05,230 S HTML, vždy len rovnakú statickú vec, ako je, ako Rob ukázal, 893 01:00:05,230 --> 01:00:09,370 vzhľadom k tomu, PHP, môžete zmeniť veci, podľa toho, kto je užívateľom. 894 01:00:09,370 --> 01:00:11,830 Takže ak som to, som, "Ste prihlásený ako -" a potom meno, 895 01:00:11,830 --> 01:00:14,420 a môžem zmeniť názov. Takže teraz menuje Josef, 896 01:00:14,420 --> 01:00:18,880 a to je "o mne", ale potom som si tiež zmeniť názov, aby Tommy. 897 01:00:18,880 --> 01:00:21,700 A to by bolo niečo iné. 898 01:00:21,700 --> 01:00:23,840 Takže môžeme tiež meniť rôzne veci o ňom, 899 01:00:23,840 --> 01:00:27,070 a ukáže iný obsah na základe názvu. 900 01:00:27,070 --> 01:00:31,430 Takže PHP môže trochu zmeniť to, čo sa deje vo vašich webových stránkach. 901 01:00:31,430 --> 01:00:33,540 Rovnaký tu. Napriek tomu, na vedomie, že majú iný obsah, 902 01:00:33,540 --> 01:00:38,870 aj keď sú technicky stále prístup, že rovnaké webové stránky na povrchu. 903 01:00:38,870 --> 01:00:43,450 Generovanie HTML. K dispozícii sú 2 rôzne spôsoby, ako to urobiť. 904 01:00:43,450 --> 01:00:48,980 Takže pôjdeme do tohto práva teraz. Prvý spôsob je, máte - jo, ospravedlňujem sa. 905 01:00:48,980 --> 01:00:51,150 Takže stačí mať pravidelné pre sláčiky v PHP, 906 01:00:51,150 --> 01:00:56,270 a potom echo v PHP a echo z HTML. 907 01:00:56,270 --> 01:00:58,720 Použitie, čo vás Rob ukázal HTML skriptu 908 01:00:58,720 --> 01:01:04,030 a potom pomocou PHP tlačiť len vytlačiť na webové stránky. 909 01:01:04,030 --> 01:01:09,520 Alternatívny spôsob je urobiť to ako by ste oddeliť PHP a HTML. 910 01:01:09,520 --> 01:01:11,940 Takže môžete mať rad PHP, ktorý začína na slučke, 911 01:01:11,940 --> 01:01:16,020 potom môžete mať riadok kódu HTML v samostatnej veci, 912 01:01:16,020 --> 01:01:19,700 a potom ukončiť slučku, opäť s PHP. 913 01:01:19,700 --> 01:01:21,800 Takže je to trochu oddeliť to. 914 01:01:21,800 --> 01:01:24,020 Na ľavej strane, môžete sa, že máte všetky - 915 01:01:24,020 --> 01:01:26,360 je to len 1 kus PHP. 916 01:01:26,360 --> 01:01:28,510 Na pravej strane môžete vidieť, že máte rad PHP, 917 01:01:28,510 --> 01:01:32,540 Máte rad HTML, a budete mať rad PHP znova. 918 01:01:32,540 --> 01:01:36,870 Tak oddeľovanie to do toho, čo robia. 919 01:01:36,870 --> 01:01:39,330 A všimnite si, že tak ako tak, pre jedného z nich, 920 01:01:39,330 --> 01:01:41,980 stále vytlačiť obraz, obraz, imidž, 921 01:01:41,980 --> 01:01:44,540 tak, že HTML ešte je vytlačený rovnakým spôsobom. 922 01:01:44,540 --> 01:01:49,870 A potom budete stále vidieť 3 snímky zobrazovať na vašich webových stránkach. 923 01:01:49,870 --> 01:01:52,820 Takže je to 2 rôzne spôsoby, ako robiť to isté. 924 01:01:52,820 --> 01:01:55,060 >> Teraz máme formulárov a žiadostí. Ako sa vám Rob ukázal, 925 01:01:55,060 --> 01:01:59,400 existujú formy HTML, a my sa len vietor cez to. 926 01:01:59,400 --> 01:02:02,040 Máte akcie a máte metódu, a vaše akcie 927 01:02:02,040 --> 01:02:04,350 druh vám ukáže, kam sa chystáte odoslať, a spôsob to, či 928 01:02:04,350 --> 01:02:06,960 to bude GET alebo POST. 929 01:02:06,960 --> 01:02:11,220 A požiadavku GET, ako povedal Rob, znamená to, že sa chystáte dať vo forme 930 01:02:11,220 --> 01:02:15,760 a uvidíte, že ako URL, zatiaľ čo požiadavka POST sa nezobrazí v adrese URL. 931 01:02:15,760 --> 01:02:17,840 Tak malý rozdiel. 932 01:02:17,840 --> 01:02:19,950 Avšak, jedna vec, ktorá je podobná vec 933 01:02:19,950 --> 01:02:22,560 je, že POST a GET sú rovnako neisté. 934 01:02:22,560 --> 01:02:26,430 Takže si môže myslieť, že len preto, že nechcete vidieť v URL, 935 01:02:26,430 --> 01:02:28,790 to znamená, že POST je bezpečnejšie, 936 01:02:28,790 --> 01:02:34,420 ale stále môžete vidieť vo vašich súborov cookie v informáciách, ktoré posielate. 937 01:02:34,420 --> 01:02:38,260 Takže si nemyslím, že o jedno alebo druhé. 938 01:02:38,260 --> 01:02:42,160 Ďalšia vec k poznámke je, že máte aj oddiel premenné. 939 01:02:42,160 --> 01:02:45,850 Vy ste používal toto v pset 7, ako dostať svoje ID užívateľa informácie. 940 01:02:45,850 --> 01:02:48,550 Čo sa stalo, bolo to, že môžete použiť tento asociatívne pole, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, A potom budete môcť pristupovať rôzne veci 942 01:02:53,310 --> 01:02:57,720 a uložiť rôzne veci cez stránkach. 943 01:02:57,720 --> 01:03:00,750 >> Posledná vec je, že máme SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 a to je programovací jazyk pre správu databáz. 945 01:03:04,360 --> 01:03:08,220 Čo presne je databáza? Sú to kolekcia tabuliek, 946 01:03:08,220 --> 01:03:10,630 a každá tabuľka môže mať podobné typy objektov. 947 01:03:10,630 --> 01:03:14,990 Takže sme mali tabuľku užívateľov vo vašej financií pset. 948 01:03:14,990 --> 01:03:20,610 A prečo sú užitočné? Vzhľadom k tomu, že je to spôsob, ako trvalo uchovávať informácie. 949 01:03:20,610 --> 01:03:22,840 Je to spôsob, ako sledovať, čo a správu vecí 950 01:03:22,840 --> 01:03:25,890 a vlastne vidieť to na rôznych stránkach a sledovanie. 951 01:03:25,890 --> 01:03:29,930 Vzhľadom k tomu, ak ste práve uložte ju na tej jednej bezprostrednej chvíli 952 01:03:29,930 --> 01:03:33,720 a potom ju použiť neskôr, nebudete môcť pristupovať niečo, čo ste si uložili. 953 01:03:33,720 --> 01:03:37,660 Máme štyri hlavné veci, ktoré používame pre príkazy SQL. 954 01:03:37,660 --> 01:03:40,190 Máme SELECT, INSERT, DELETE a aktualizácie. 955 01:03:40,190 --> 01:03:42,880 Tie sú veľmi dôležité pre vás vedieť, pre kvíz. 956 01:03:42,880 --> 01:03:45,990 >> Budeme rýchlo prejsť vyberte práve teraz. 957 01:03:45,990 --> 01:03:48,540 V podstate ste výberom riadkov z databázy. 958 01:03:48,540 --> 01:03:52,400 Takže ak máte, tu - 959 01:03:52,400 --> 01:03:56,740 máme tieto dve odlišné veci, a chceme vybrať z tabuľky tried 960 01:03:56,740 --> 01:04:01,480 kde úžasné - kde v úžasnej stĺpci hodnota je 1. 961 01:04:01,480 --> 01:04:04,460 Takže si môžete pozrieť tu, máme tieto dve veci názov triedy, 962 01:04:04,460 --> 01:04:08,490 CS50 a Stat110, a máme triedy ID a heslo. 963 01:04:08,490 --> 01:04:13,150 Takže ak chceme vybrať všetky uvedené informácie. 964 01:04:13,150 --> 01:04:17,480 Potom môžete vidieť tu, že je to trochu vyberanie z tej úžasnej stĺpce, 965 01:04:17,480 --> 01:04:25,170 kde všetky veci sú 1, a potom to má ID triedy, názov triedy a slogan, ktorý sa môže vybrať. 966 01:04:25,170 --> 01:04:28,100 Ako presne to robíte v kóde? Musíte použiť PHP. 967 01:04:28,100 --> 01:04:33,830 Tak to je niečo o tom, ako PHP a SQL sa vzťahujú ku každému iný. 968 01:04:33,830 --> 01:04:38,130 Teraz máme kód, a budeme používať naše funkcie dotazu 969 01:04:38,130 --> 01:04:41,370 ako sme to urobili v pset 7, a budeme spustenie dotazu SQL. 970 01:04:41,370 --> 01:04:43,870 Potom budeme mať - 971 01:04:43,870 --> 01:04:46,280 musíme vždy overiť, či Row trojitý rovný ak false. 972 01:04:46,280 --> 01:04:49,010 Takže znova, budete chcieť skontrolovať typ a hodnotu, 973 01:04:49,010 --> 01:04:53,880 a potom, ak to nefunguje, potom budete chcieť ospravedlniť, ako obvykle, ako sme to urobili v pset 7. 974 01:04:53,880 --> 01:04:55,870 V opačnom prípade budete chcieť prechádzať všetko sa ti hodiť 975 01:04:55,870 --> 01:04:59,410 foreach slučky, ktoré sme práve prešiel. 976 01:04:59,410 --> 01:05:01,280 Teraz, keď sme priechodná a urobili sme to v minulosti, 977 01:05:01,280 --> 01:05:05,080 predpokladajme, že náš dotaz prešiel, teraz máme slučky foreach. 978 01:05:05,080 --> 01:05:11,050 A prvý riadok má, takže tu je rad, tu, je to zabalený v krabici. 979 01:05:11,050 --> 01:05:14,010 Bude to vytlačiť všetky informácie, ktoré sa to dostali. 980 01:05:14,010 --> 01:05:18,070 Takže to bude tlačiť na dne "Wanna Learn HTML?" 981 01:05:18,070 --> 01:05:23,370 Potom to bude ísť na ďalší riadok, pretože je dokončená prvá pre sláčiky, 982 01:05:23,370 --> 01:05:26,510 a tak potom to bude tlačiť druhý riadok z toho, 983 01:05:26,510 --> 01:05:32,120 ktorý sa bude STAT110, Nájdite všetky okamihy. 984 01:05:32,120 --> 01:05:34,290 >> Jedna posledná vec je na SQL zabezpečenia. 985 01:05:34,290 --> 01:05:37,300 Viem, že Dávid sa dotkol na to trochu v prednáške. 986 01:05:37,300 --> 01:05:40,730 Môžete si prečítať neskôr. Je to naozaj smiešne. 987 01:05:40,730 --> 01:05:45,320 SQL Injection je trochu ošemetná vec. 988 01:05:45,320 --> 01:05:49,890 Povedzme, že ste práve držať týchto premenných priamo do dotazu, 989 01:05:49,890 --> 01:05:52,290 ako môžete vidieť v tomto prvom riadku. 990 01:05:52,290 --> 01:05:54,520 Takže sa zdá v poriadku, že jo? Len uvedenie na užívateľské meno 991 01:05:54,520 --> 01:05:58,820 a heslo k SQL dotazu, a chcete, aby loď ju a získať to, čo je v tabuľke dát. 992 01:05:58,820 --> 01:06:01,450 To sa zdá dosť jednoduché. Takže povedzme, že niekto dáva, 993 01:06:01,450 --> 01:06:04,910 na zadanie hesla, tento OR texte priamo tu - 994 01:06:04,910 --> 01:06:06,780 by mala byť skutočne v červenom poli. 995 01:06:06,780 --> 01:06:11,920 Takže povedzme, že dať toto heslo do - to je to, čo vstúpi. 996 01:06:11,920 --> 01:06:16,520 Tak oni sú uvedení OR "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Druh hlúpa hesla mať. 998 01:06:20,880 --> 01:06:25,070 Teraz sa poďme jednoducho nahradiť ju, a budete na vedomie, že v tomto SQL dotaze podnikom, 999 01:06:25,070 --> 01:06:29,090 vyhodnocuje vždy pravda, pretože budete na vedomie, že 1000 01:06:29,090 --> 01:06:32,240 môžete SQL dotazu vybrať všetky tieto informácie 1001 01:06:32,240 --> 01:06:35,420 alebo môžete len 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Tak to je vždy hodnotiť na hodnotu true. 1003 01:06:41,030 --> 01:06:46,610 Že to nebude naozaj pracovať, pretože to znamená, že hacker môže preniknúť do vášho systému. 1004 01:06:46,610 --> 01:06:49,300 Riešením tohto problému je, že musíte používať systém CHOP, 1005 01:06:49,300 --> 01:06:51,360 čo znamená, že budete musieť použiť otázniky, 1006 01:06:51,360 --> 01:06:53,350 čo je to, čo vy používané v pset 7, 1007 01:06:53,350 --> 01:06:57,620 kde budete používať otáznik v mieste, kam chcete dať niečo, 1008 01:06:57,620 --> 01:07:01,430 a potom budete mať čiarku, a potom budete mať neskôr, 1009 01:07:01,430 --> 01:07:07,610 po vašom reťazec, rôzne premenné, ktoré chcete nahradiť do otáznikom. 1010 01:07:07,610 --> 01:07:10,330 Takže budete poznamenať, že teraz mám tyhle červené otázniky. 1011 01:07:10,330 --> 01:07:15,420 Potom som dal premenné po mojich strún, takže viem, že je nahradiť v tomto poradí potom. 1012 01:07:15,420 --> 01:07:18,470 To zabezpečí, že ak to niekto robí takto, 1013 01:07:18,470 --> 01:07:24,050 a majú alebo 1 = 1 situácii, že sa uistite, 1014 01:07:24,050 --> 01:07:30,490 na zadnom konci, uistite sa, že nebude vlastne rozbiť dotazu SQL. 1015 01:07:30,490 --> 01:07:33,660 Dobre, tak to je celkom veľa to, víchrica PHP a SQL. 1016 01:07:33,660 --> 01:07:41,520 Veľa šťastia vám všetkým, a teraz sa v štáte Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Dobre všetci. Je čas ísť cez nejaký JavaScript 1018 01:07:44,270 --> 01:07:48,840 a niektoré ďalšie veci veľmi rýchlo, takže nemáme dnes večer držať vás. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Áno. JavaScript je celkom cool vec, údajne. 1020 01:07:56,930 --> 01:07:59,090 Veci, ktoré naozaj potrebujete vedieť o JavaScriptu, je to niečo ako 1021 01:07:59,090 --> 01:08:03,810 na strane klienta koniec, aké sú vaše webové aplikácie sa bude robiť. 1022 01:08:03,810 --> 01:08:08,280 Je tu niekoľko vecí, ktoré jednoducho nechcú starať o celú dobu na strane servera. 1023 01:08:08,280 --> 01:08:12,880 Všetky malé interakcie, zvýraznenie jednu vec, že ​​niečo zmizne. 1024 01:08:12,880 --> 01:08:15,340 Naozaj nechcem hovoriť k serveru po celú dobu za to. 1025 01:08:15,340 --> 01:08:18,069 A niečo z toho nie je ani možné vykonať na strane servera. 1026 01:08:18,069 --> 01:08:21,899 To je dôvod, prečo potrebujeme niečo ako JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Skvelé veci o JavaScriptu: To je dynamicky napísaný. 1028 01:08:24,359 --> 01:08:27,149 Čo to znamená, že váš program nepotrebuje vedieť, 1029 01:08:27,149 --> 01:08:30,970 čo, presne, premenné sú, keď píšete to. 1030 01:08:30,970 --> 01:08:34,510 Je to tak nejako prísť na to, ako to beží. 1031 01:08:34,510 --> 01:08:37,520 Ďalšie veci, ktoré sú v pohode o tom: Je to zložená zátvorka jazyk, 1032 01:08:37,520 --> 01:08:41,359 čo znamená, že syntax je podobná C a PHP. 1033 01:08:41,359 --> 01:08:47,050 Nemusíte robiť veľa prepracovať, keď sa učíte JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Tu máme trochu JavaScriptu. 1035 01:08:49,180 --> 01:08:52,560 Zaujímavá vec, tu je to, že keď sa pozriete na to, 1036 01:08:52,560 --> 01:08:56,330 máme trochu JavaScriptu tu v tagu hlavy. 1037 01:08:56,330 --> 01:08:59,479 Čo je to v podstate len patrí súbor JavaScript. 1038 01:08:59,479 --> 01:09:02,260 To je jeden spôsob, ako môžete zahrnúť JavaScript do vášho programu. 1039 01:09:02,260 --> 01:09:06,910 Potom druhý trochu je vlastne nejaký inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 veľmi podobný štýl inline s CSS, 1041 01:09:10,790 --> 01:09:16,180 a vy ste len písať nejaký kód veľmi rýchlo tam. 1042 01:09:16,180 --> 01:09:18,120 JavaScript má pole. 1043 01:09:18,120 --> 01:09:20,850 Len ďalší spôsob, ako udržať dát okolo, veľmi užitočné. 1044 01:09:20,850 --> 01:09:25,180 Veľmi príjemné a jednoduché syntaxe. 1045 01:09:25,180 --> 01:09:29,870 Môžete použiť hranaté zátvorky pre prístup všetko a udržať všetko pohromade. 1046 01:09:29,870 --> 01:09:35,020 Nič príliš zložitá. 1047 01:09:35,020 --> 01:09:38,630 Super vec o JavaScriptu a skriptovacích jazykov všeobecne 1048 01:09:38,630 --> 01:09:40,920 je, že nemusíte mať strach o veľkosti poľa. 1049 01:09:40,920 --> 01:09:43,880 Stačí použiť Array.length a sledovať to, 1050 01:09:43,880 --> 01:09:46,960 a tiež polia môžete zväčšiť alebo zmenšiť, ako budete potrebovať, aby to. 1051 01:09:46,960 --> 01:09:49,279 Takže vy ani nemusíte obávať akéhokoľvek druhu, 1052 01:09:49,279 --> 01:09:57,050 oh nie, musím prideliť viac vecí, alebo niečo také. 1053 01:09:57,050 --> 01:10:00,090 >> Super vec je, že JavaScript je niečo, čo nazýva objekty. 1054 01:10:00,090 --> 01:10:04,800 Je to objektovo-orientovaný jazyk, takže to, čo bolo, je, v podstate, 1055 01:10:04,800 --> 01:10:10,100 spôsob, ako pre vás, aby skupiny dát dohromady, trochu podobný struct, 1056 01:10:10,100 --> 01:10:17,280 ale môžete pristupovať ako struct alebo v syntaxi asociatívne pole. 1057 01:10:17,280 --> 01:10:22,520 Je to celkom jednoduché, a čo môžete urobiť s týmto je skupina dát dohromady 1058 01:10:22,520 --> 01:10:24,810 ak máte veľa údajov, ktoré sa vzťahuje. 1059 01:10:24,810 --> 01:10:26,850 Vzhľadom k tomu, že je to všetko, čo potrebuješ k popisu automobilu, 1060 01:10:26,850 --> 01:10:29,050 nemusíte ho mať v veľa rôznych miest. 1061 01:10:29,050 --> 01:10:35,300 Môžete len držať je do 1 objekt v JavaScriptu. 1062 01:10:35,300 --> 01:10:39,090 Ako asi viete, Iterácia je jedným z tých nudné úlohy. 1063 01:10:39,090 --> 01:10:43,810 Proste to cez znova. Musíte hovoriť každý objekt v aute, 1064 01:10:43,810 --> 01:10:47,340 alebo budete musieť prejsť každú položku v zozname, alebo niečo také. 1065 01:10:47,340 --> 01:10:51,770 Takže JavaScript musí, podobne ako PHP, syntaxe foreach. 1066 01:10:51,770 --> 01:10:54,590 V tomto prípade, je to v slučke. 1067 01:10:54,590 --> 01:10:57,300 Ak chcete používať iba na objekty to. 1068 01:10:57,300 --> 01:11:01,030 Tam sú niektoré problémy, ktoré sa vyskytujú, ak používate tento na poliach. 1069 01:11:01,030 --> 01:11:03,750 Všeobecne je jedna z tých, čo sa však, že je veľmi užitočné, 1070 01:11:03,750 --> 01:11:06,590 pretože ste odstrániť veľa réžia 1071 01:11:06,590 --> 01:11:10,270 pretože nemusíte vytiahnuť všetko, čo v objekte sami. 1072 01:11:10,270 --> 01:11:12,300 Nemusíte si pamätať všetky kľúčové mená. 1073 01:11:12,300 --> 01:11:18,270 Proste nejako dostať je späť v tejto syntaxi. 1074 01:11:18,270 --> 01:11:21,500 V tomto, FOR, chcete len spomenúť 1075 01:11:21,500 --> 01:11:27,180 že ste sa dostal späť všetky kľúče, veľmi podobným spôsobom ako tabuľky hash. 1076 01:11:27,180 --> 01:11:30,880 Ak si pamätáte z toho, keď by sa dal v reťazci by ste mohli dostať niečo von 1077 01:11:30,880 --> 01:11:33,840 ktoré by mali priradenú hodnotu s ním. 1078 01:11:33,840 --> 01:11:36,360 Čo môžete robiť s týmto je, môžete povedať, v poriadku, 1079 01:11:36,360 --> 01:11:42,120 Dal som do auta a zavolal som to Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Takže si môžete dať v reťazci Ferrari neskôr, a môžete dostať to von. 1081 01:11:45,290 --> 01:11:50,000 A môžete to urobiť v slučke, sa v cykle. 1082 01:11:50,000 --> 01:11:53,320 Takže len viac o objektoch. Kľúčovou vecou z toho, čo potrebujete mať na pamäti, 1083 01:11:53,320 --> 01:12:00,340 je, že môžete použiť objekt struct ako syntaxe, kedykoľvek budete chcieť s nimi, 1084 01:12:00,340 --> 01:12:04,590 výnimkou prípadov, kedy to, čo si bude používať ako reťazec nie je platný názov premennej. 1085 01:12:04,590 --> 01:12:07,650 Takže keď sa pozriete na to, že máme kľúč s medzerami. 1086 01:12:07,650 --> 01:12:12,500 No, ak ste mali dať object.key, priestor, s, priestor, priestor, 1087 01:12:12,500 --> 01:12:15,320 že by sa jednoducho nemalo zmysel syntakticky. 1088 01:12:15,320 --> 01:12:22,730 Takže si len môžete urobiť s týmto druhom syntaxe držiaku. 1089 01:12:22,730 --> 01:12:26,520 >> Tiež JavaScript je veľmi priestor-múdre PHP. 1090 01:12:26,520 --> 01:12:29,050 Máte dva spôsoby, ako riešiť priestor. 1091 01:12:29,050 --> 01:12:31,960 Nemôžete mať var pred premennú, 1092 01:12:31,960 --> 01:12:34,060 a to len znamená, že to je globálna. 1093 01:12:34,060 --> 01:12:37,050 Môžete ho vidieť odkiaľkoľvek. Dokonca aj keď ste sa dať do príkazu if, 1094 01:12:37,050 --> 01:12:42,430 nikde inde v kóde po tomto okamihu ste mohli vidieť, že premenné. 1095 01:12:42,430 --> 01:12:46,730 Ďalšia vec, aj keď je s var, je obmedzená na čokoľvek funkcie ste palcov 1096 01:12:46,730 --> 01:12:48,870 Ak nie ste vo funkcii, dobre, je to globálny. 1097 01:12:48,870 --> 01:12:53,900 Ale ak ste vo funkcii je viditeľná len v rámci tejto funkcie. 1098 01:12:53,900 --> 01:12:56,420 Nemám príklad, ale, jo. Je to jedna z tých vecí, kde 1099 01:12:56,420 --> 01:12:59,900 môžete spravovať to, čo premenné chcete byť globálne, 1100 01:12:59,900 --> 01:13:03,810 čo premenné, ktoré chcú byť lokálne, ale musíte dávať pozor na to, 1101 01:13:03,810 --> 01:13:06,890 pretože nemáte typ jemné ovládanie zrna, čo robíte v C, 1102 01:13:06,890 --> 01:13:15,820 kde ak niečo je deklarovaný v cykle for, bude to, aby zostali v tom, že pre sláčiky. 1103 01:13:15,820 --> 01:13:18,790 Čo sme vlastne záleží používate JavaScript pre manipuluje webové stránky, nie? 1104 01:13:18,790 --> 01:13:21,800 Myslím, že je dôvod, prečo to robíme. 1105 01:13:21,800 --> 01:13:23,840 >> K tomu budeme používať niečo, čo nazýva DOM. 1106 01:13:23,840 --> 01:13:25,850 Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 V podstate to, čo to urobí, je, že sa všetky vaše HTML 1108 01:13:29,430 --> 01:13:34,110 a modely ju do veľa objektov, ktoré sú vnorené do seba. 1109 01:13:34,110 --> 01:13:37,080 Môžete začať s niečím, ako je tento. 1110 01:13:37,080 --> 01:13:44,770 Máte, na pravé pre mňa, partia kódu tam, že je to druh - 1111 01:13:44,770 --> 01:13:46,640 Človek by si myslel, že by bolo veľmi ťažké manipulovať, 1112 01:13:46,640 --> 01:13:48,700 pretože by ste sa analýze cez veľa texte 1113 01:13:48,700 --> 01:13:52,080 a majú sa dať seba veci. A čo keď to nie je správne naformátovaný? 1114 01:13:52,080 --> 01:13:54,880 Zlé veci sa bude diať. 1115 01:13:54,880 --> 01:13:58,140 Takže JavaScript sa postará o to za vás, a vy dostanete príjemnou dátovú štruktúru, 1116 01:13:58,140 --> 01:14:01,390 ako ten, po mojej ľavici, kde stačí mať doklad, 1117 01:14:01,390 --> 01:14:03,530 a vo vnútri sa, že máte niečo ako HTML, 1118 01:14:03,530 --> 01:14:05,600 a vo vnútri, že máte hlavu a telo, 1119 01:14:05,600 --> 01:14:08,420 a v tej hlave máte titul, a tak ďalej, a tak ďalej, a tak ďalej. 1120 01:14:08,420 --> 01:14:11,810 To zjednodušuje manipuláciu webové stránky tak, že je to len, 1121 01:14:11,810 --> 01:14:14,190 oh, chcem hovoriť k tomuto objektu. 1122 01:14:14,190 --> 01:14:21,340 Zoradiť veľmi podobným spôsobom by ste hovoriť s iným objektom, ktorú ste uzavreli sami. 1123 01:14:21,340 --> 01:14:25,980 Ako som povedal, všetko DOM v objekte dokumente. 1124 01:14:25,980 --> 01:14:29,290 Buď je to len jedno miesto, a potom môžete ísť v ňom nájsť veci, 1125 01:14:29,290 --> 01:14:33,880 a môžete to urobiť - to je starý štýl, ako to urobiť, až tam, 1126 01:14:33,880 --> 01:14:38,130 kde robíte document.getElementById, a potom meno, 1127 01:14:38,130 --> 01:14:42,420 a ako ste si asi povie, to dostane veľmi nemotorný po chvíli. 1128 01:14:42,420 --> 01:14:44,480 Takže ste asi nechcete robiť, že. To je dôvod, prečo máme 1129 01:14:44,480 --> 01:14:48,760 Ďalšia vec, ktorú budeme o tom hovoriť po tomto. 1130 01:14:48,760 --> 01:14:52,510 Kľúčovou vecou je tu to, že v poriadku, budete musieť všetky tieto prvky, jo? 1131 01:14:52,510 --> 01:14:56,400 Takže možno by som mohol zmeniť farbu niečo, keď sa stránka načíta. 1132 01:14:56,400 --> 01:14:58,380 Tak čo? Čo keď je moja užívateľská klikne niečo? 1133 01:14:58,380 --> 01:15:00,540 Chcem, aby to niečo zaujímavé, keď kliknú niečo. 1134 01:15:00,540 --> 01:15:02,600 To je dôvod, prečo máme udalostí. 1135 01:15:02,600 --> 01:15:05,330 Môžete v podstate nájsť ľubovoľný prvok vo vašom DOM, 1136 01:15:05,330 --> 01:15:08,560 a potom povedať, hej. Keď sa to načíta alebo niekto klikne, 1137 01:15:08,560 --> 01:15:11,410 alebo keď sa myši nad ním, niečo s ním. 1138 01:15:11,410 --> 01:15:15,330 A to, čo máte, je, budete mať funkcie, ktoré zvládne za vás. 1139 01:15:15,330 --> 01:15:17,980 Tieto funkcie sú obslužné rutiny udalostí. 1140 01:15:17,980 --> 01:15:20,440 Aké Sú - je to len fantázia spôsob, ako hovoriť, 1141 01:15:20,440 --> 01:15:23,500 Táto funkcia sa vykonáva iba vtedy, keď sa táto udalosť stane. 1142 01:15:23,500 --> 01:15:28,070 Tak to spracováva udalosť, ktorá nastane. 1143 01:15:28,070 --> 01:15:30,810 To je, ako by ste vyložiť obslužnú rutinu udalosti. 1144 01:15:30,810 --> 01:15:34,750 Mám nejaké tlačidlo, a keď na neho kliknete, to exploduje. 1145 01:15:34,750 --> 01:15:40,560 Takže sa nemusíte kliknite na tlačidlo. 1146 01:15:40,560 --> 01:15:42,910 To je jeden spôsob, ako sa blíži to, že jo? 1147 01:15:42,910 --> 01:15:46,430 Máte tag tlačidlo, a na kliknutie budete mať reťazec, ktorý hovorí, 1148 01:15:46,430 --> 01:15:50,460 oh, mimochodom, ja to vybuchuje vec pre mňa. 1149 01:15:50,460 --> 01:15:53,990 Inak je to proste ako normálne tlačidlo, ktorým ste práve vytvorili. 1150 01:15:53,990 --> 01:15:56,550 Môžete to urobiť aj iný spôsob, 1151 01:15:56,550 --> 01:16:02,770 uchopením DOM element, ale budeme šetriť, že po tom, čo hovoríme o jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Je to knižnica, ktorá je cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Môžete ju použiť na čokoľvek. 1154 01:16:09,580 --> 01:16:12,090 A to len vám dáva veľa nástrojov pre prácu s 1155 01:16:12,090 --> 01:16:15,850 Vzhľadom k tomu, JavaScript, zatiaľ čo silný, nemá všetky nástroje, ktoré potrebujete 1156 01:16:15,850 --> 01:16:20,550 po vybalení z krabice naozaj riešení webové aplikácie budete chcieť robiť. 1157 01:16:20,550 --> 01:16:24,650 Tak to zjednodušuje veľa vecí, dáva vám veľa funkcií 1158 01:16:24,650 --> 01:16:28,760 po vybalení z krabice, ktoré by ste normálne musieť napísať sám, znova a znova a znova. 1159 01:16:28,760 --> 01:16:31,600 A práve robí veci veľmi jednoduché. 1160 01:16:31,600 --> 01:16:35,780 Máte tiež selektory, ktoré vám umožní vziať všetky tie prvky, 1161 01:16:35,780 --> 01:16:42,800 od DOM oveľa viac jednoducho, bez toho aby museli používať tieto veľmi dlhé volanie funkcie. 1162 01:16:42,800 --> 01:16:46,630 Viac informácií o týchto selektory. Máte, tam ste, povedzme, 1163 01:16:46,630 --> 01:16:49,800 Chcem sa dostať prvok s ID "skaly." 1164 01:16:49,800 --> 01:16:56,450 No, jQuery, je to len $ a potom reťazec, ktorý má pol kila, a potom "skala". 1165 01:16:56,450 --> 01:17:01,960 Je to veľmi jednoduché a oveľa rýchlejšie než tradičné JavaScript spôsob riešenia tohto problému. 1166 01:17:01,960 --> 01:17:06,120 A máte podobné veci pre triedy a typy prvkov. 1167 01:17:06,120 --> 01:17:08,140 jQuery je - jedným z chladnej rysy sa môžete trochu stlačiť 1168 01:17:08,140 --> 01:17:14,350 so svojimi otázkami na vášho DOM veľmi, veľmi rýchlo. 1169 01:17:14,350 --> 01:17:18,980 Teraz sme späť do spracovania udalostí, a to je to, ako by ste zvládnuť jednu udalosť v jQuery. 1170 01:17:18,980 --> 01:17:23,090 Takže, čo budeme tu hovoríme, v poriadku. Mám tag script, že jo? 1171 01:17:23,090 --> 01:17:25,400 Tak som si to inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Čo budeme robiť, je, že sa chystáte povedať, v poriadku. 1173 01:17:27,750 --> 01:17:30,860 Ak je dokument pripravený, čo znamená, že dokument je načítaný, 1174 01:17:30,860 --> 01:17:34,660 sme sa ísť do tejto funkcie, a budeme hovoriť, všetko v poriadku, 1175 01:17:34,660 --> 01:17:37,060 Táto funkcia je v skutočnosti robí niečo iné. 1176 01:17:37,060 --> 01:17:42,320 Je to v podstate hovorí, dobre, daj mi prvok s ID "MojeID". 1177 01:17:42,320 --> 01:17:47,960 A potom dať tento funkčný rutínu, ktorý vykoná, keď na neho kliknete. 1178 01:17:47,960 --> 01:17:49,820 V podstate to, čo to robí, je, že hovorí, všetko v poriadku. 1179 01:17:49,820 --> 01:17:52,630 Načítanie stránky, takže budem v, nájsť tento prvok, 1180 01:17:52,630 --> 01:17:56,420 dať túto obslužnú rutinu udalosti, a to v podstate nastaví vaše stránky pre vás. 1181 01:17:56,420 --> 01:18:00,520 A to je to, ako budete chcieť premýšľať o spracovanie udalostí. 1182 01:18:00,520 --> 01:18:06,310 Stačí len chcieť premýšľať o tom, v poriadku, keď sa vyskytne niečo, čo chcem, aby sa stalo? 1183 01:18:06,310 --> 01:18:10,520 Nechcete myslieť, jo, ja potrebujem, aby sa ubezpečil rozhovory To, čo k tejto veci, 1184 01:18:10,520 --> 01:18:14,660 táto vec bla bla bla, pretože si len chcete hovoriť, čo sa týka udalostí. 1185 01:18:14,660 --> 01:18:17,650 Keď sa to stane, to sa stane. Keď sa to stane, že sa stane. 1186 01:18:17,650 --> 01:18:20,240 A keby to vyvolať ďalšie veci, to je skvelé. 1187 01:18:20,240 --> 01:18:22,150 Ale nechcete, aby sa pokúsila urobiť zložitý kód 1188 01:18:22,150 --> 01:18:24,130 kam spúšťanie viac vecí naraz, 1189 01:18:24,130 --> 01:18:28,860 pretože ste práve chystá dať si bolesť hlavy. 1190 01:18:28,860 --> 01:18:32,340 >> Poriadku. Teraz sa môžeme dostať naše stránky pre spracovanie udalostí, 1191 01:18:32,340 --> 01:18:35,640 ale povedzme, že moja používateľ klikne na tlačidlo. 1192 01:18:35,640 --> 01:18:38,040 Čo keď chcem poslať túto žiadosť späť na server, 1193 01:18:38,040 --> 01:18:41,100 ale ja nechcem, aby znovu načítať stránku, pretože by museli znovu načítať novú stránku 1194 01:18:41,100 --> 01:18:44,390 zakaždým, keď sa dostane trochu nudný, a prečo ho potrebujem 1195 01:18:44,390 --> 01:18:47,430 znova strhnúť hlavičky, päty a znovu, 1196 01:18:47,430 --> 01:18:49,670 a všetky prvky na stránke znova 1197 01:18:49,670 --> 01:18:53,180 len osviežiť pozdrav alebo čas? 1198 01:18:53,180 --> 01:18:55,290 Takže to je dôvod, prečo máme niečo ako Ajax. 1199 01:18:55,290 --> 01:18:59,150 Čo môžeme robiť tu s Ajax je môžeme povedať, v poriadku, 1200 01:18:59,150 --> 01:19:01,290 Chcem poslať nejaké dáta na server, 1201 01:19:01,290 --> 01:19:04,010 a chcem sa dostať odpoveď späť, aby som mohol aktualizovať stránku, 1202 01:19:04,010 --> 01:19:12,120 alebo možno len urobiť nejakú algoritmický výpočet, ktorý nemusí nutne ukázať nič, čo by užívateľa. 1203 01:19:12,120 --> 01:19:15,500 Čo je potrebné urobiť? No, budete potrebovať adresu URL, ktorú potrebujete hovoriť. 1204 01:19:15,500 --> 01:19:18,650 Váš server nielen magicky počúvať odnikiaľ. 1205 01:19:18,650 --> 01:19:21,960 Musíte mať zvláštne miesto, ktoré posielate dáta. 1206 01:19:21,960 --> 01:19:26,240 A budete tiež potrebovať nejaké dáta na odoslanie, alebo možno je to otázka bezdatovými. 1207 01:19:26,240 --> 01:19:31,380 Chcete len ping na server a povedať, hej, ja som nažive, alebo niečo také. 1208 01:19:31,380 --> 01:19:35,150 A potom budete chcieť funkciu, ktorá v podstate spracováva s úspechom. 1209 01:19:35,150 --> 01:19:38,250 Povedzme, že sa vrátiš nejaké informácie zo servera, 1210 01:19:38,250 --> 01:19:42,960 a chcete zmeniť názov užívateľa na ich strane. 1211 01:19:42,960 --> 01:19:44,930 Takže by ste získať informácie späť, 1212 01:19:44,930 --> 01:19:48,860 a vy by ste tlačiť, že na obrazovke. 1213 01:19:48,860 --> 01:19:51,170 Čo sa stane, je, keď je stránka pripravená, 1214 01:19:51,170 --> 01:19:56,500 vytvoriť na funkciu click na toto tlačidlo s názvom privítanie. 1215 01:19:56,500 --> 01:19:58,810 Čo to teda robí, je, keď je toto tlačidlo tlačil, 1216 01:19:58,810 --> 01:20:03,700 hovoríte greetings.php, urobíte požiadavku POST, 1217 01:20:03,700 --> 01:20:07,290 a hovoríš, hej, daj mi niečo z vašej stránky. 1218 01:20:07,290 --> 01:20:09,890 Nemáme naozaj potreba popisovať, ale greetings.php, 1219 01:20:09,890 --> 01:20:12,480 Povedzme, vracia "ahoj svet." 1220 01:20:12,480 --> 01:20:15,650 Takže sa vrátime tento "Hello World", a na úspechu tohto, 1221 01:20:15,650 --> 01:20:20,730 za predpokladu, že nič nie je v poriadku, potom stačí ísť do tejto cieľovej miesto 1222 01:20:20,730 --> 01:20:25,720 že sme spresnili a my sme len držať odpoveď tam. 1223 01:20:25,720 --> 01:20:31,560 A to je veľmi jednoduchý spôsob vytvorenia dotazu Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Veľmi rýchlo, Rob nejako zmienil už, 1225 01:20:34,340 --> 01:20:37,170 čo sa môže pokaziť, sa zlé veci sa stávajú, 1226 01:20:37,170 --> 01:20:42,660 takže sa chcete zoznámiť s týmito kódmi odozvy HTTP. 1227 01:20:42,660 --> 01:20:46,030 Čo sú to sú len ako, 200, všetko prebehlo v poriadku. 1228 01:20:46,030 --> 01:20:48,670 Niečo iné, zlé veci sa stalo. 1229 01:20:48,670 --> 01:20:50,790 Je to všeobecne, čo si chcete zapamätať. 1230 01:20:50,790 --> 01:20:53,440 Ale je príjemné vedieť, že všetky z nich. 1231 01:20:53,440 --> 01:20:55,970 A konečne, akonáhle sme prešli všetko, 1232 01:20:55,970 --> 01:20:58,680 musíme veľmi rýchlo hovoriť o dizajne, 1233 01:20:58,680 --> 01:21:00,620 a potom môžeme nechať všetko odísť. 1234 01:21:00,620 --> 01:21:03,410 Design. Veci, ktoré chcete mať na pamäti. 1235 01:21:03,410 --> 01:21:06,950 Opýtajte sa sami seba na tieto otázky: Kto bude používať tento? 1236 01:21:06,950 --> 01:21:09,580 Aké budú používať ho? Čo moji užívatelia záleží? 1237 01:21:09,580 --> 01:21:11,750 Čo sa to, čo ich zaujíma? 1238 01:21:11,750 --> 01:21:14,500 Ste proste nechcú, aby sa o aplikáciu a nechať ju len rast 1239 01:21:14,500 --> 01:21:18,270 a stať sa to obrie, všetky náročné vec, ktorú nemôžete ani dokončiť. 1240 01:21:18,270 --> 01:21:23,900 Ak chcete mať jednotlivé ciele a plány, a veci, ktoré chcete osloviť. 1241 01:21:23,900 --> 01:21:29,000 Nech je to ľahké. To všetko hovorí, v podstate, 1242 01:21:29,000 --> 01:21:34,950 aby bolo jednoduché pre užívateľa, aby ho používať, nerobia to obrie blob texte ako je tento snímok je v skutočnosti. 1243 01:21:34,950 --> 01:21:38,020 Proste chcem, aby to bolo niečo, kde je to veľmi jednoduché pre niekoho ísť 1244 01:21:38,020 --> 01:21:40,800 a robiť to, čo chcú robiť. 1245 01:21:40,800 --> 01:21:42,920 Nechcete, aby sa navigovať 5 strán 1246 01:21:42,920 --> 01:21:45,460 sa dostať do primárnej funkcií vášho webu. 1247 01:21:45,460 --> 01:21:49,290 Ak Google mal 5 strán, ako by ste mohli ešte hľadať niečo, 1248 01:21:49,290 --> 01:21:53,080 nikto by sa používať. 1249 01:21:53,080 --> 01:21:55,890 A konečne, prototyp papier, focus group. 1250 01:21:55,890 --> 01:21:59,220 Majú dobrý dizajn a testovanie postupov. 1251 01:21:59,220 --> 01:22:00,730 Len preto, že si myslíte, že to funguje u vás, 1252 01:22:00,730 --> 01:22:04,860 neznamená, že niekto iný si myslí, že to funguje. 1253 01:22:04,860 --> 01:22:14,490 Ale jo, to je ono. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]