1 00:00:00,000 --> 00:00:02,270 >> [Aktualizace: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] 3 00:00:04,620 --> 00:00:07,660 [To je CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Vítejte všichni. To je přezkoumání kvíz 1. 5 00:00:11,610 --> 00:00:15,040 Stejně jako upozornění, to je - mám na mysli, budeme se snažit pokrýt 6 00:00:15,040 --> 00:00:17,770 jak velké množství materiálu, jak je to možné, ale to neznamená, že 7 00:00:17,770 --> 00:00:20,780 budeme pokrývat všechny věci, které mohou být v kvízu 1. 8 00:00:20,780 --> 00:00:25,270 Takže se ujistěte, že máte také se podívat na přednášku, části, vše, co můžete. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 bude ve středu příští středu. 10 00:00:28,240 --> 00:00:33,800 Tak se určitě studovat. Bude to být docela hodně, jako první kvíz 11 00:00:33,800 --> 00:00:36,390 pokud jde o jeho formát, ale to asi bude mnohem těžší. 12 00:00:36,390 --> 00:00:39,600 Alespoň v loňském roce, kdy jsem vzal 50, myslel jsem, že to bylo mnohem těžší. 13 00:00:39,600 --> 00:00:42,410 Tak hodně studovat. 14 00:00:42,410 --> 00:00:45,190 >> Jdu k pokrytí datové struktury a Huffmanova kódování. 15 00:00:45,190 --> 00:00:47,910 To je něco, co mnoho lidí myslí, že je složitý, 16 00:00:47,910 --> 00:00:51,930 ale budu se snažit, aby to tak jednoduché, jak je to možné. 17 00:00:51,930 --> 00:00:56,330 Za prvé, to, co chceme, vy to vědět kvíz 1 je 18 00:00:56,330 --> 00:01:00,970 pochopit koncepční popis každého z datových struktur, které budu prezentovat. 19 00:01:00,970 --> 00:01:03,960 To znamená, že nemáte skutečně 20 00:01:03,960 --> 00:01:07,020 implementaci hash tabulky v testu 1. 21 00:01:07,020 --> 00:01:10,250 Nechceme implementovat celou hash tabulky, možná se budeme snažit 22 00:01:10,250 --> 00:01:13,090 aby jste implementovat některé funkce, 23 00:01:13,090 --> 00:01:16,940 nejběžnější operace, ale nebudeme dělat implementovat všechno. 24 00:01:16,940 --> 00:01:21,010 Takže je důležité, abyste pochopili koncept za každé datové struktury 25 00:01:21,010 --> 00:01:23,510 a také to, že jste schopni kód v C, 26 00:01:23,510 --> 00:01:27,880 jen nejběžnější operace, které mají pro každou datovou strukturu. 27 00:01:27,880 --> 00:01:30,090 A také moci prohlédnout ukazatele a structs, 28 00:01:30,090 --> 00:01:33,470 protože oni se objeví hodně v těchto datových struktur. 29 00:01:33,470 --> 00:01:37,380 >> Za prvé, spojené seznamy. Propojené seznamy jsou vlastně velmi podobné polí, 30 00:01:37,380 --> 00:01:39,930 ale rozdíl mezi propojeného seznamu a pole, 31 00:01:39,930 --> 00:01:45,160 Za prvé, je to, že spojový seznam má velmi flexibilní velikost, 32 00:01:45,160 --> 00:01:50,060 zatímco v polích musíte buď zvolit velmi velké velikosti pro pole, 33 00:01:50,060 --> 00:01:53,710 takže víte, že budete mít možnost uložit všechny vaše data v tomto poli, 34 00:01:53,710 --> 00:01:59,370 nebo budete muset použít malloc mají flexibilní délku pole. 35 00:01:59,370 --> 00:02:03,680 V spojových seznamů je to velmi jednoduché stačí získat více prvků, 36 00:02:03,680 --> 00:02:07,210 dát více prvků v propojeném seznamu nebo odstranit prvky. 37 00:02:07,210 --> 00:02:09,370 A skutečně, pokud nechcete, spojový seznam musí být tříděny, 38 00:02:09,370 --> 00:02:13,950 můžete vyhledat a odstranit prvky v konstantním čase, 39 00:02:13,950 --> 00:02:16,800 takže O (1) čas, takže je to velmi pohodlné. 40 00:02:16,800 --> 00:02:20,660 Musíte jen dávat pozor, aby vždy pamatovat na malloc a volný uzly, 41 00:02:20,660 --> 00:02:25,510 jen proto, že pokud to neuděláte, budete mít k nevracení paměti. 42 00:02:25,510 --> 00:02:31,480 Takže spojové seznamy - definice uzlu je, stejně jako to, co jsme tady. 43 00:02:31,480 --> 00:02:35,110 Dal jsem int n, ale můžete uložit všechna data, které chcete. 44 00:02:35,110 --> 00:02:37,280 Takže pokud chcete uložit řetězec, to je v pořádku. 45 00:02:37,280 --> 00:02:41,690 Chcete-li uložit struct, to je v pořádku, dvojitý, co chcete. 46 00:02:41,690 --> 00:02:44,630 Jen jsem dal int n pro příklady zde. 47 00:02:44,630 --> 00:02:46,800 A máte ukazatel na další uzel. 48 00:02:46,800 --> 00:02:51,940 Takže, v podstatě, spojový seznam má některá data, a pak to ukazuje na další uzel. 49 00:02:51,940 --> 00:02:56,710 Pokud je to poslední prvek v propojeném seznamu, bude to ukazovat na NULL. 50 00:02:56,710 --> 00:02:59,060 Tak tohle je příklad propojeného seznamu. 51 00:02:59,250 --> 00:03:05,960 >> Dobře, takže teď pojďme podívat, co bychom měli dělat, když chci vložit prvek do propojeného seznamu. 52 00:03:05,960 --> 00:03:08,810 Za prvé, bude funkce insert být typu void 53 00:03:08,810 --> 00:03:11,350 protože nechci vrátit nic. 54 00:03:11,350 --> 00:03:14,200 A já vezmu int jako argument, 55 00:03:14,200 --> 00:03:17,090 protože chci vědět, co chci vložit. 56 00:03:17,090 --> 00:03:21,840 Takže to, co je první věc, kterou bych měl udělat? No, měl jsem malloc na newnode, 57 00:03:21,840 --> 00:03:24,240 tak to je první řádek. 58 00:03:24,240 --> 00:03:27,580 Jen jsem vytvořit nový uzel, aby v propojeném seznamu. 59 00:03:27,580 --> 00:03:32,360 Tak co mám dělat? No, víme, že v našich implementacích spojových seznamů 60 00:03:32,360 --> 00:03:38,180 ve třídě, jsme vždy dát hlavu jako globální proměnné. 61 00:03:38,180 --> 00:03:41,800 Takže to, co můžeme udělat, je změnit na hlavu. 62 00:03:41,800 --> 00:03:44,300 Můžu tento nový uzel bude nový šéf, 63 00:03:44,300 --> 00:03:46,670 a to bude ukazovat na předchozí hlavy. 64 00:03:46,670 --> 00:03:50,390 Jak můžeme udělat, že? První věc, kterou musíte udělat, 65 00:03:50,390 --> 00:03:54,770 je změnit na 'n' v novém uzlu na hodnotu, 66 00:03:54,770 --> 00:03:57,530 který byl předán do funkce. 67 00:03:57,530 --> 00:04:01,050 Pak newnode dál se bude hlava. 68 00:04:01,050 --> 00:04:05,800 Hlava se bude newnode. Takže je to docela jednoduché. 69 00:04:05,800 --> 00:04:10,090 Pro smazání uzlu, můžeme udělat to jako - 70 00:04:10,090 --> 00:04:14,790 Jeden způsob, jak bychom mohli udělat, je říci, 71 00:04:14,790 --> 00:04:18,160 v pořádku, když jsem chtěl odstranit, například 3, 72 00:04:18,160 --> 00:04:24,850 to, co jsem mohl udělat, je upozornit na předchozí uzel 73 00:04:24,850 --> 00:04:27,580 k dalšímu uzlu 3. 74 00:04:27,580 --> 00:04:29,400 Takže bych prostě něco takového. 75 00:04:29,400 --> 00:04:33,400 Ale co je problém s tím, že? 76 00:04:33,400 --> 00:04:37,400 Mám nevracení paměti, takže nemám přístup na číslo 3 už. 77 00:04:37,400 --> 00:04:42,480 Problém s tím je, že nebudu mít možnost osvobodit tento uzel. 78 00:04:42,480 --> 00:04:45,360 Budu mít k nevracení paměti a (nesrozumitelné), bude mě nenávidět. 79 00:04:45,360 --> 00:04:49,370 Takže místo toho, aby dělal to, že bych měl pravděpodobně dočasný ukazatel. 80 00:04:49,370 --> 00:04:53,210 Tak jsem dal tepl. To bude ukazovat na uzel, který chci odstranit. 81 00:04:53,210 --> 00:04:58,170 A pak jsem se přesunout na předchozí uzly bodu k dalšímu uzlu 82 00:04:58,170 --> 00:05:00,390 uzlu, který chci odstranit. 83 00:05:00,390 --> 00:05:02,730 A nakonec, mohu uvolnit ukazatel. 84 00:05:02,730 --> 00:05:07,480 Musím se uvolnit ukazatel, který jsem vytvořil právě tam? 85 00:05:07,480 --> 00:05:09,560 Já nemusím, jen proto, že - 86 00:05:09,560 --> 00:05:13,430 Rozdíl je v tom, že tento uzel byl vytvořen pomocí malloc, 87 00:05:13,430 --> 00:05:17,280 takže je to v haldě, přičemž tento byl jen deklarován jako NULL přepínače ve stohu. 88 00:05:17,280 --> 00:05:20,000 Takže nemám ho osvobodit. 89 00:05:20,000 --> 00:05:22,030 >> Dobře. Takže teď pojďme hovořit o komíny. 90 00:05:22,030 --> 00:05:24,680 Komíny jsou docela jednoduché. 91 00:05:24,680 --> 00:05:29,540 Udělali jsme hromady a fronty ve třídě jen pomocí polí, 92 00:05:29,540 --> 00:05:32,820 ale měli byste být obeznámeni - prostě být si vědom 93 00:05:32,820 --> 00:05:40,740 které můžete udělat hromady ve frontách pomocí propojených seznamů stejně. 94 00:05:40,740 --> 00:05:44,460 Takže pokud máte pole, co by bylo stack? 95 00:05:44,460 --> 00:05:46,810 Zásobník, první, bude mít velikost. 96 00:05:46,810 --> 00:05:49,950 Musíte uložit, co je velikost zásobníku, který máte právě teď. 97 00:05:49,950 --> 00:05:52,980 A také se bude mít pole, v tomto případě čísel, 98 00:05:52,980 --> 00:05:55,120 ale pokud chcete, to může být pole 99 00:05:55,120 --> 00:06:00,380 řetězců, pole struct, cokoliv, co chcete uložit. 100 00:06:00,380 --> 00:06:03,240 O zásobníku: Rozdíl mezi komínem a propojeného seznamu 101 00:06:03,240 --> 00:06:08,590 je, že v zásobníku budete mít přístup k poslední prvek, který byl uveden v zásobníku pouze. 102 00:06:08,590 --> 00:06:11,770 Je to tzv. poslední dovnitř, první ven. 103 00:06:11,770 --> 00:06:15,090 Stejně jako máte hromadu zásobníků, 104 00:06:15,090 --> 00:06:17,670 když dáte zásobník na vrcholu zásobníku, 105 00:06:17,670 --> 00:06:22,670 musíte nejprve odstranit tento zásobník mít přístup k ostatním zásobníků. 106 00:06:22,670 --> 00:06:26,310 Je to totéž s komíny. 107 00:06:26,310 --> 00:06:31,220 Takže pokud chci, například, přidat prvek do zásobníku, co mám dělat? 108 00:06:31,220 --> 00:06:34,070 Říká se tlak, a je to docela jednoduché. 109 00:06:34,070 --> 00:06:37,130 První věc, kterou musíte udělat, je zkontrolovat, zda velikost zásobníku 110 00:06:37,130 --> 00:06:40,150 je větší nebo rovna kapacitě zásobníku. 111 00:06:40,150 --> 00:06:45,810 Protože pokud jste již na plnou kapacitu, nemůžete přidat nic jiného. 112 00:06:45,810 --> 00:06:51,140 A pak, pokud ne, budete muset přidat prvek do zásobníku. 113 00:06:51,140 --> 00:06:54,530 A konečně, zvýšit velikost. Takže je to docela jednoduché. 114 00:06:54,530 --> 00:06:57,140 Tak jsem jen přidat číslo 2. 115 00:06:57,140 --> 00:07:00,350 A když chci pop, což znamená, že chci odstranit 116 00:07:00,350 --> 00:07:03,870 poslední prvek, který byl přidán, a vrátí hodnotu prvku, 117 00:07:03,870 --> 00:07:09,180 První věc, kterou musím zkontrolovat je, že zásobník není prázdný. 118 00:07:09,180 --> 00:07:11,510 Vzhledem k tomu, jestli je to prázdné, nemohu nic nevrací. 119 00:07:11,510 --> 00:07:14,820 V tomto případě, vracím -1. 120 00:07:14,820 --> 00:07:18,960 Jinak, budu decrement velikost spec, 121 00:07:18,960 --> 00:07:22,510 a vrátit čísla (s.size). 122 00:07:22,510 --> 00:07:27,230 Proč jsem decrement velikosti a pak se vrátit s.size? 123 00:07:27,230 --> 00:07:30,930 Je to proto, že v tomto případě, spec má velikost 4, 124 00:07:30,930 --> 00:07:33,810 a chci se vrátit na čtvrtý element, ne? 125 00:07:33,810 --> 00:07:36,030 Ale co je index čtvrtého prvku? Tři. 126 00:07:36,030 --> 00:07:44,510 Protože jsem si velikost - bude 3, mohu jen vrátit s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 protože je to 3. Takže je to jen index. 128 00:07:48,410 --> 00:07:50,380 >> Teď fronty. Fronty jsou skoro to samé. 129 00:07:50,380 --> 00:07:54,950 Jediný rozdíl je, že místo toho, aby jako poslední dovnitř, první ven, 130 00:07:54,950 --> 00:07:57,480 Máte-first in, first out. 131 00:07:57,480 --> 00:07:59,460 Pravděpodobně, pokud čekáte jít na koncert, 132 00:07:59,460 --> 00:08:04,260 byste rád, kdyby jste měli stack místo fronty. 133 00:08:04,260 --> 00:08:07,730 Jako poslední, kdo přišel by byl první člověk vstoupit do koncert. 134 00:08:07,730 --> 00:08:09,760 Ty by pravděpodobně neměl být šťastný. 135 00:08:09,760 --> 00:08:15,020 Ve frontě, první osoba, která se v roce je také první osoba, se dostat ven. 136 00:08:15,020 --> 00:08:18,720 A tak v definici fronty, kromě toho, že velikost v poli, 137 00:08:18,720 --> 00:08:23,360 budete také mít hlavu, což je index do čela zásobníku. 138 00:08:23,360 --> 00:08:29,000 Takže první prvek právě teď. 139 00:08:29,000 --> 00:08:32,710 Enqueue je totéž jako stisknutí pro komíny. 140 00:08:32,710 --> 00:08:34,980 Pokud byly velmi naivní, byste jen říct, 141 00:08:34,980 --> 00:08:39,289 dobře, můžu jen udělat přesně totéž, co jsem udělal pro Push. 142 00:08:39,289 --> 00:08:44,030 Já si jen zkontrolovat, jestli to není nad kapacitu. 143 00:08:44,030 --> 00:08:48,760 Pokud je to, myslím, vrátí false, jinak mohu jen exportovat novou hodnotu 144 00:08:48,760 --> 00:08:50,630 a pak zvýšit velikost. 145 00:08:50,630 --> 00:08:52,750 Ale proč je to špatně? 146 00:08:52,750 --> 00:08:55,010 Pojďme se podívat, tento příklad. 147 00:08:55,010 --> 00:08:57,020 Snažím se enqueue spoustu věcí, 148 00:08:57,020 --> 00:08:58,390 a pak budu dequeue a enqueue. 149 00:08:58,390 --> 00:09:00,550 Je tu spousta příkazů, ale je to velmi jednoduché. 150 00:09:00,550 --> 00:09:04,790 Chystám se enqueue 5, tak se přidá 5 a pak 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, a pak chci dequeue něco, 152 00:09:09,310 --> 00:09:12,000 což znamená, že jdu k odstranění prvního prvku. 153 00:09:12,000 --> 00:09:14,640 Takže jdu odstranit číslo 3, že jo? 154 00:09:14,640 --> 00:09:17,320 První element. Dobře. 155 00:09:17,320 --> 00:09:21,450 Nyní, když se snažím enqueue něco jiného, ​​co se bude dít? 156 00:09:21,450 --> 00:09:24,290 Podle mého provádění, 157 00:09:24,290 --> 00:09:31,040 Chtěl jsem dát další číslo v indexu q.size. 158 00:09:31,040 --> 00:09:35,140 V tomto případě je velikost je 8, 159 00:09:35,140 --> 00:09:38,640 takže index 8 bude tady na poslední pozici. 160 00:09:38,640 --> 00:09:43,900 Pokud se snažím enqueue 1 tady, bych přepsání poslední pozici 161 00:09:43,900 --> 00:09:45,870 na číslo 1, což je úplně špatně. 162 00:09:45,870 --> 00:09:49,870 To, co chci udělat, je obalí a jít na první pozici. 163 00:09:49,870 --> 00:09:52,870 Možná byste jen říct, dobře, budu muset zkontrolovat 164 00:09:52,870 --> 00:09:55,600 když jsem si skutečně dát tam něco. 165 00:09:55,600 --> 00:09:58,560 Pokud ne, jen říkám, oh, nová plná kapacita 166 00:09:58,560 --> 00:10:02,010 je vlastně kapacita - 1, a vy nemůžete dát prvek existuje. 167 00:10:02,010 --> 00:10:06,150 Ale v čem je problém? Problém je v tom, že když jsem dequeue všechno tady 168 00:10:06,150 --> 00:10:08,240 a pak se snažím přidat něco jiného, ​​bylo by to jen říct, 169 00:10:08,240 --> 00:10:11,210 dobře, že jsi na plnou kapacitu, což je 0. 170 00:10:11,210 --> 00:10:13,620 Takže vaše fronta je pryč. 171 00:10:13,620 --> 00:10:16,990 Musíte se obalí, a způsob obtékání kolem 172 00:10:16,990 --> 00:10:22,040 že vy jste se naučili v vizionářské a dalších psets používal mod. 173 00:10:22,040 --> 00:10:29,090 Můžete si to vyzkoušet doma pochopit, proč byste to q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod kapacita, ale pokud si zkontrolovat tady, 175 00:10:31,080 --> 00:10:34,760 můžeme vidět, že to funguje. 176 00:10:34,760 --> 00:10:37,760 Takže v posledním příkladu, q.size bylo 8 177 00:10:37,760 --> 00:10:47,590 a hlava byla 1, protože to byla tato pozice 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 jít do indexu 0.. Budeme ve správné poloze. 180 00:10:56,640 --> 00:10:59,750 A pak zkuste frontu doma. 181 00:10:59,750 --> 00:11:04,950 Některé důležité věci: pokusit se pochopit rozdíl mezi zásobníku a fronty. 182 00:11:04,950 --> 00:11:11,620 Doma, pokusit se dostat velmi dobře obeznámeni s realizací Zařadí, Dequeue, tlačit a pop. 183 00:11:11,620 --> 00:11:16,560 A také pochopit, když byste použít každou z nich. 184 00:11:16,560 --> 00:11:22,830 >> Tak pojďme si odpočinout po dobu 10 sekund s partou Pokémonů. 185 00:11:22,830 --> 00:11:26,080 A teď se vraťme do datových struktur. 186 00:11:26,080 --> 00:11:29,770 Hash tabulky. Mnoho lidí se bojí hash tabulky. 187 00:11:29,770 --> 00:11:33,650 v problému nastavení 6, Kontrola pravopisu. 188 00:11:33,650 --> 00:11:35,980 Hash tabulky a snaží se, hodně lidí se bojí o nich. 189 00:11:35,980 --> 00:11:38,540 Myslí si, že to tak těžké pochopit. Jo? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problém sada 5. >> Problem sada 5, jo. Díky Rob. 191 00:11:41,490 --> 00:11:43,370 Jo. Šest bylo Huff n 'Puff, jo. 192 00:11:43,370 --> 00:11:49,340 Problém sada 5 byla pravopisu, a vy jste museli použít buď hash tabulky nebo zkusit. 193 00:11:49,340 --> 00:11:55,360 Spousta lidí si myslí, že oni byli velmi těžké pochopit, ale oni jsou vlastně docela jednoduché. 194 00:11:55,360 --> 00:12:01,290 Co je hash tabulka, v podstatě? Hash tabulka je pole spojových seznamů. 195 00:12:01,290 --> 00:12:06,730 Jediný rozdíl mezi pole a hash tabulky 196 00:12:06,730 --> 00:12:09,730 je, že v tabulce hash máte něco jako funkce hash. 197 00:12:09,730 --> 00:12:12,080 Jaká je funkce hash? 198 00:12:12,080 --> 00:12:13,970 Já nevím, jestli vy můžete přečíst zde. 199 00:12:13,970 --> 00:12:16,090 To je příklad tabulky hash. 200 00:12:16,090 --> 00:12:19,220 Takže vidíte, že máte pole s 31 prvky. 201 00:12:19,220 --> 00:12:22,440 A to, co děláme v hash tabulce se mají funkce hash 202 00:12:22,440 --> 00:12:26,660 že se bude překládat klíč, každý pravý na indexu. 203 00:12:26,660 --> 00:12:31,740 Pokud, například, když chci vybrat pro B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Já bych dal B. Harrison v mých hašovacích funkcí, 205 00:12:34,190 --> 00:12:36,960 a hashovací funkce vrátí 24. 206 00:12:36,960 --> 00:12:40,930 Takže vím, že chci ukládat B. Harrison v 24.. 207 00:12:40,930 --> 00:12:46,580 Tak to je rozdíl mezi jen mít celou řadu a má hash tabulky. 208 00:12:46,580 --> 00:12:48,740 V tabulce hash budete mít funkci, která se ti to říct 209 00:12:48,740 --> 00:12:54,740 kam ukládat data, která chcete uložit. 210 00:12:54,740 --> 00:12:57,040 Pro hašovací funkce, budete chtít podívat na funkce hash 211 00:12:57,040 --> 00:13:00,600 že je deterministický a dobře distribuován. 212 00:13:00,600 --> 00:13:07,810 Jak můžete vidět zde, uvidíte, že mnoho údajů, které jsem chtěl, aby obchod byl vlastně 19 213 00:13:07,810 --> 00:13:12,470 namísto použití 31 a 30 a 29, které byly všechny zdarma. 214 00:13:12,470 --> 00:13:16,920 Takže funkce hash, že jsem nebyl moc dobře distribuován. 215 00:13:16,920 --> 00:13:20,710 Když říkáme, dobře distribuován, znamená to, že chceme mít, 216 00:13:20,710 --> 00:13:26,520 zhruba, alespoň 1 nebo 2 pro každý z - 217 00:13:26,520 --> 00:13:32,190 jako, rozdíl 1 nebo 2 pro každý z indexů v poli. 218 00:13:32,190 --> 00:13:43,950 Chcete-li mít zhruba stejný počet prvků v každé aplikaci seznamu v poli. 219 00:13:43,950 --> 00:13:48,600 A je to snadné zjistit, jestli je to platný v hash tabulce, zobrazení jako tabulky hash. 220 00:13:48,600 --> 00:13:51,770 Pak >> stromy. Jedná se o strom. 221 00:13:51,770 --> 00:13:56,400 Stromy v informatice jsou vzhůru nohama nějakého důvodu. 222 00:13:56,400 --> 00:14:00,150 Tak tady máte kořen stromu a pak listy. 223 00:14:00,150 --> 00:14:05,630 Měli byste prostě víte, názvosloví pro rodiče a dítě. 224 00:14:05,630 --> 00:14:12,880 Každý uzel má své děti, které jsou uzly, které jsou pod rodiči. 225 00:14:12,880 --> 00:14:19,660 Tak, například, 2 se bude základní desky pro 3 a pro druhé dítě tam, 226 00:14:19,660 --> 00:14:25,290 zatímco 3 bude rodič 1 a ostatní děti, které jsou tam. 227 00:14:25,290 --> 00:14:29,990 A 1 bude 3 dítě, a tak dále. 228 00:14:29,990 --> 00:14:34,610 Máme něco mnohem zajímavější, tzv. binární vyhledávací strom, 229 00:14:34,610 --> 00:14:39,040 v níž jsou všechny hodnoty na pravé uzlu 230 00:14:39,040 --> 00:14:41,660 se bude na pravé straně, přímo tady - na pravé, 231 00:14:41,660 --> 00:14:46,780 se bude větší než prvek v kořeni. 232 00:14:46,780 --> 00:14:49,780 Takže pokud mám číslo 5, přímo tady, všechny prvky na pravé straně 233 00:14:49,780 --> 00:14:51,940 se bude větší než 5, a na levé straně 234 00:14:51,940 --> 00:14:56,770 všechny prvky se bude méně než 5. 235 00:14:56,770 --> 00:14:58,780 Proč je to užitečné? 236 00:14:58,780 --> 00:15:01,660 No, pokud chci zjistit, jestli je tady číslo 7, například, 237 00:15:01,660 --> 00:15:05,960 Jen jsem jít na 5 první a budu vidět, je 7 větší nebo menší než 5? 238 00:15:05,960 --> 00:15:09,540 Je to větší, takže vím, že to bude muset být na pravé straně stromu. 239 00:15:09,540 --> 00:15:13,980 Takže mám mnohem menší věci na pohled. 240 00:15:13,980 --> 00:15:19,520 Při provádění binárního vyhledávacího stromu, uzlu, já prostě budu muset mít k dispozici údaje, 241 00:15:19,520 --> 00:15:21,750 takže int n; můžete mít také řetězec 242 00:15:21,750 --> 00:15:23,630 nebo něco, co chtěl. 243 00:15:23,630 --> 00:15:28,100 Jen musíte dávat pozor na definování toho, co je větší, to, co je menší. 244 00:15:28,100 --> 00:15:30,390 Takže pokud jste měli řetězce, například, můžete definovat 245 00:15:30,390 --> 00:15:34,690 že všechny ty věci, na pravé straně budou mít větší délku, 246 00:15:34,690 --> 00:15:40,940 levá budou mít nižší délky, takže je to opravdu jen na vás. 247 00:15:40,940 --> 00:15:44,930 >> Jak mohu implementovat najít pro BST? 248 00:15:44,930 --> 00:15:47,840 První věc, kterou budete muset udělat, je zkontrolovat, zda kořen je NULL. 249 00:15:47,840 --> 00:15:50,920 Pokud je to NULL, znamená to, že věc není tam 250 00:15:50,920 --> 00:15:53,330 proto, že nemají ani strom, ne? 251 00:15:53,330 --> 00:15:55,790 Tak jsem se vrátit false. 252 00:15:55,790 --> 00:15:58,740 Jinak, já jdu zkontrolovat, zda je číslo větší 253 00:15:58,740 --> 00:16:01,720 než hodnota v kořeni. 254 00:16:01,720 --> 00:16:04,250 Budu se snažit najít prvek na pravé straně 255 00:16:04,250 --> 00:16:08,590 stromu. 256 00:16:08,590 --> 00:16:11,310 Vidíte, že jsem pomocí rekurze zde. 257 00:16:11,310 --> 00:16:14,150 A pak, pokud je to méně, jdu se podívat na levé straně. 258 00:16:14,150 --> 00:16:18,330 A konečně, v opačném případě, je-li to není menší nebo větší, 259 00:16:18,330 --> 00:16:20,660 to znamená, že je hodnota sama o sobě. 260 00:16:20,660 --> 00:16:23,010 Tak jsem jen vrátit true. 261 00:16:23,010 --> 00:16:26,360 Můžete vidět, že jsem použil v případě, kdyby, kdyby. 262 00:16:26,360 --> 00:16:30,820 A pamatujte, v kvízu 0, měli jsme problém, který měl v případě, kdyby, kdyby, 263 00:16:30,820 --> 00:16:32,780 a vy jste měl najít neefektivnosti, 264 00:16:32,780 --> 00:16:35,180 a neefektivita bylo, že jste použili v případě. 265 00:16:35,180 --> 00:16:39,060 Měli byste použili v případě, else if, else if a else. 266 00:16:39,060 --> 00:16:44,240 Takže bych měl použít else if a else if a else tady? 267 00:16:44,240 --> 00:16:46,200 Má někdo - jo? 268 00:16:46,200 --> 00:16:51,140 [Student mluvení, neslyšitelný] 269 00:16:51,140 --> 00:16:53,480 To je perfektní. Takže ona říká, že nezáleží na tom, 270 00:16:53,480 --> 00:16:55,930 jen proto, že neefektivnost, že jsme měli před 271 00:16:55,930 --> 00:16:59,550 bylo to proto, že možná kdyby byla splněna některá podmínka, 272 00:16:59,550 --> 00:17:03,570 takže jste provedli akci, ale pak šli zkontrolovat všechny ostatní podmínky. 273 00:17:03,570 --> 00:17:06,319 Ale v tomto případě, že se vrátil hned, tak to nevadí. 274 00:17:06,319 --> 00:17:09,220 Takže nemusíte se jinak použít, pokud. 275 00:17:09,220 --> 00:17:11,740 >> A konečně, pojďme mluvit o pokusech, 276 00:17:11,740 --> 00:17:13,800 což je věcí každého oblí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 velmi rychle vyhledat hodnoty, ale používá velké množství paměti. 279 00:17:20,369 --> 00:17:22,530 A je to obvykle filtrovat slova, takže když 280 00:17:22,530 --> 00:17:27,920 chcete implementovat, například, já nevím, jako telefonní seznam ve vašem telefonu 281 00:17:27,920 --> 00:17:30,440 a chcete být schopni typ B 282 00:17:30,440 --> 00:17:32,510 a jen jména lidí, kteří mají B. 283 00:17:32,510 --> 00:17:37,960 Je to velmi jednoduché implementovat, že používáte vyzkoušet, například. 284 00:17:37,960 --> 00:17:39,820 Jak definovat uzel v pokus? 285 00:17:39,820 --> 00:17:43,910 Jen musíte mít bool, která bude is_word. 286 00:17:43,910 --> 00:17:48,660 To znamená, že s využitím všech znaků před tímto uzlem, 287 00:17:48,660 --> 00:17:51,920 jste byli schopni vytvořit slovo, 288 00:17:51,920 --> 00:17:57,230 a pak budete mít celou řadu ukazatelů na uzly. 289 00:17:57,230 --> 00:18:03,120 Vidíte, že máme řadu nadřazeného uzlu, takže uzel * pole? Jo? 290 00:18:03,120 --> 00:18:06,050 Takže pojďme se podívat, jak to bude fungovat. Pro kontrolu pravopisu, 291 00:18:06,050 --> 00:18:08,230 Máme řadu 27 prvků, 292 00:18:08,230 --> 00:18:12,150 protože máme všechny dopisy a apostrof. 293 00:18:12,150 --> 00:18:17,800 Než tady budu jen tak používat dva, protože chci mít možnost psát na tabuli. 294 00:18:17,800 --> 00:18:20,230 Dobře. Tak tohle je příklad pokusu. 295 00:18:20,230 --> 00:18:25,600 Pokud jsem definovat první uzel, budu mít řadu prvků 2 296 00:18:25,600 --> 00:18:29,290 že jsou dva ukazatele na NULL, tak jsem dal "a" a "b". 297 00:18:29,290 --> 00:18:32,430 A já budu mít bool, která říká, že is_word. 298 00:18:32,430 --> 00:18:34,420 To bude false pro první, 299 00:18:34,420 --> 00:18:37,370 jen proto, že předtím, než že nemáte žádné znaky. 300 00:18:37,370 --> 00:18:40,900 Takže prázdné slovo není slovo. Takže je to falešné. 301 00:18:40,900 --> 00:18:46,320 Pokud chci přidat 'a' do tohoto slovníku, co bych měl udělat? 302 00:18:46,320 --> 00:18:49,760 Jen bych si, aby malloc nový uzel pro "A", 303 00:18:49,760 --> 00:18:54,630 a pak přidat své slovo na hodnotu true. 304 00:18:54,630 --> 00:19:00,180 Tak to prostě znamená, že když "" bude pravda. Smysl? 305 00:19:00,180 --> 00:19:04,120 Pak, když chci přidat "BA", budu muset malloc 1 pro "b", 306 00:19:04,120 --> 00:19:07,550 a pak jdu nastavit boolean false, 307 00:19:07,550 --> 00:19:10,160 protože "b" sám o sobě není slovo. 308 00:19:10,160 --> 00:19:13,010 Pak jdu do malloc jiný pro "a", takže "BA", 309 00:19:13,010 --> 00:19:16,290 a pak jdu nastavit, že je to slovo na hodnotu true. 310 00:19:16,290 --> 00:19:18,950 Vzhledem k tomu, "ba" je slovo. 311 00:19:18,950 --> 00:19:21,910 A pak, když chci zjistit, jestli "b" je v tomto slovníku, 312 00:19:21,910 --> 00:19:26,730 Můžu prostě jít na první, "b". Jdu dolů, a já jsem se na slovo, je, a to říká false. 313 00:19:26,730 --> 00:19:30,110 Takže to není slovo. Chci-li zkontrolovat "BA", 314 00:19:30,110 --> 00:19:38,010 Jdu na první, "b", a pak jít do "A", a vidím to pravda, tak to je slovo. Smysl? 315 00:19:38,010 --> 00:19:41,950 Mnoho lidí se zmást pokusů. Ne? 316 00:19:41,950 --> 00:19:44,740 >> Konečně, Huffmanovo kódování. Huffman kódování je velmi užitečné 317 00:19:44,740 --> 00:19:47,550 z důvodu úspory paměti a kompresi textových souborů, 318 00:19:47,550 --> 00:19:52,270 jen proto, že mnoho případů, kdy používáte "a" a "e", například, 319 00:19:52,270 --> 00:19:57,710 v dokumentech, ale já nevím, jestli vy použít "q" nebo "Z" tolik. 320 00:19:57,710 --> 00:20:02,040 S pouze 1 bajt pro každou postavu, 321 00:20:02,040 --> 00:20:08,520 každý - na 256 znaků, které máme v tabulce ASCII není příliš optimální, 322 00:20:08,520 --> 00:20:11,410 jen proto, že tam jsou některé znaky, které používají mnohem více, 323 00:20:11,410 --> 00:20:15,180 takže byste měli pravděpodobně používat méně paměti pro ty. 324 00:20:15,180 --> 00:20:17,560 Jak mohu použít Huffmanovo kódování? 325 00:20:17,560 --> 00:20:20,010 Musíme udělat Huffman strom. 326 00:20:20,010 --> 00:20:23,370  Huffman strom má uzly 327 00:20:23,370 --> 00:20:27,760 které mají symbol, který bude jako, 'a', 'b', 'c', dopis, 328 00:20:27,760 --> 00:20:32,990 bez ohledu na písmeno máte, frekvence, která je frekvence, která se objeví slovo v textu, 329 00:20:32,990 --> 00:20:36,280 že jste byli vytvoření Huffmanova stromu pro, 330 00:20:36,280 --> 00:20:41,800 a pak uzel, který se bude ukazovat na levé straně stromu Huffman 331 00:20:41,800 --> 00:20:47,210 a další uzel, který bude ukazovat na pravé straně. Takže stejně jako strom. 332 00:20:47,210 --> 00:20:49,440 Jak si vytvořit Huffman strom? 333 00:20:49,440 --> 00:20:54,020 Budeš vybrat dva uzly, které mají nejnižší frekvence. 334 00:20:54,020 --> 00:20:56,490 Pokud máte kravatu budete vybrat 2 uzly 335 00:20:56,490 --> 00:20:59,870 , které mají nejnižší hodnoty ASCII stejně. 336 00:20:59,870 --> 00:21:02,420 Pak budete vytvořit nový strom z těchto 2 uzly 337 00:21:02,420 --> 00:21:08,030 že bude mít kombinovanou frekvenci v nadřazeného uzlu. 338 00:21:08,030 --> 00:21:13,240 A pak budete odstranit 2 děti z lesa 339 00:21:13,240 --> 00:21:15,570 a nahradit je s rodiči. 340 00:21:15,570 --> 00:21:18,930 A budete opakovat, že až budete mít pouze jeden strom v lese. 341 00:21:18,930 --> 00:21:23,840 Takže pojďme se podívat, jak by to Huffman strom ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Můžete vidět, že všechna písmena mají frekvenci 1 s výjimkou "A", který má frekvenci 2. 343 00:21:29,220 --> 00:21:34,090 Tak jsem vytvořil uzly pro všechny dopisy jsem dal v pořadí ASCII hodnoty a frekvence. 344 00:21:34,090 --> 00:21:40,090 Takže pokud chci vytvořit první strom, bude to s "L" a "M". 345 00:21:40,090 --> 00:21:43,100 Tak je to tady. Frekvence dvojice bude 2 346 00:21:43,100 --> 00:21:49,470 protože je to 1 + 1, pak další 2 s nejnižší frekvencí jsou "Y" a "Z". 347 00:21:49,470 --> 00:21:53,180 A pak jsem si všechny z nich jsou - mají frekvenci 2. 348 00:21:53,180 --> 00:22:00,470 Takže, které z nich jsou ty, které mají nejnižší hodnotu ASCII pro ten příští? 349 00:22:00,470 --> 00:22:04,830 "A" a "L". Tak jsem se vytvořit nový uzel, 350 00:22:04,830 --> 00:22:09,930 a konečně, že je to 4, a 2, SO 2 bude na levé straně. 351 00:22:09,930 --> 00:22:12,430 A to je strom Huffman. 352 00:22:12,430 --> 00:22:16,060 Pak, když chci napsat nějaký text, 353 00:22:16,060 --> 00:22:24,440 jako v binární převést na text, pomocí stromu Huffman je velmi snadné. 354 00:22:24,440 --> 00:22:30,220 Například, když řeknu, že pohybující se na levé straně je 0 a pohybuje se doprava je 1, 355 00:22:30,220 --> 00:22:32,410 Co je to, že bude reprezentovat? 356 00:22:32,410 --> 00:22:35,530 Tak jako 1, 1, tak vpravo, vpravo, 357 00:22:35,530 --> 00:22:40,370 a pak 0, takže by se opustil L, a pak 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Takže 1, 0, takže jen 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 A pak 0, 1, tak "Z". 360 00:22:47,540 --> 00:22:52,170 A pak 1, 0, 0 - ne. 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šechno pro mě, Rob je převezme. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Tak, týden 7 věci. 364 00:23:08,400 --> 00:23:11,390 Máme hodně projít opravdu rychle. 365 00:23:11,390 --> 00:23:13,430 Bitové operátory, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 knihovna, pak HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 All in jako 15 - 20minut. 368 00:23:20,990 --> 00:23:24,330 Bitové operátory. K dispozici je 6 z nich, které potřebujete vědět. 369 00:23:24,330 --> 00:23:31,200 Bitová a bitové OR, XOR, posun doleva, pravý shift, a ne. 370 00:23:31,200 --> 00:23:35,420 Pravý Shift a ne sotva viděli v přednášce vůbec. 371 00:23:35,420 --> 00:23:40,480 Půjdeme přes něj rychle sem, ale je dobré vědět, že se jedná o 6, které existují. 372 00:23:40,480 --> 00:23:45,070 Pamatujte si, že bitové operátory jsou, jako když děláte 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Nejste zabývající se binární 3 a 4. 374 00:23:49,420 --> 00:23:56,550 S operátory bitové jste vlastně zabývá jednotlivými bity čísel 3 a 4. 375 00:23:56,550 --> 00:23:59,120 >> Takže první, že budeme říkat, je bitový není, 376 00:23:59,120 --> 00:24:02,340 a vše, co dělá, je otočit všechny bity. 377 00:24:02,340 --> 00:24:05,500 Tak tady, pokud píšete to v C, nebudete psát 378 00:24:05,500 --> 00:24:09,380 jako ~ 11011 nebo cokoliv jiného, ​​měli byste napsat to líbí ~ 4, 379 00:24:09,380 --> 00:24:12,970 a pak by to hodit na binární reprezentaci 4. 380 00:24:12,970 --> 00:24:24,800 Tak tady, ~ nějaké binární číslo 1101101 bude přesně hodit všechny 1 k 0 je 0 a všechny je na 1 je. 381 00:24:24,800 --> 00:24:27,600 Jak říkám tam, časté používání tohoto, 382 00:24:27,600 --> 00:24:30,830 a budeme ho vidět v trochu, je jako chceme přijít s nějakým číslem 383 00:24:30,830 --> 00:24:35,460 kde jsou všechny bity jsou 1, s výjimkou jednoho z nich. 384 00:24:35,460 --> 00:24:38,560 Takže je to obvykle snazší vyjádřit číslo 385 00:24:38,560 --> 00:24:40,630 kde je nastavena jen, že jeden bit, 386 00:24:40,630 --> 00:24:44,650 a pak se ~ o to, aby každý další bit je nastaven, s výjimkou, že jeden. 387 00:24:44,650 --> 00:24:50,300 Takže to je to, co budeme používat více v trochu. 388 00:24:50,300 --> 00:24:58,220 >> Bitové nebo. Zde jsou 2 binární čísla, a tyto 2 čísla 389 00:24:58,220 --> 00:25:00,780 jsou velmi reprezentativní, protože představují všechny možné 390 00:25:00,780 --> 00:25:07,290 Kombinace bitů, co by bylo potřeba operovat. 391 00:25:07,290 --> 00:25:13,540 Tady, když jsem or'd každého trochu, budeme jen tak srovnat rovně dolů. 392 00:25:13,540 --> 00:25:15,410 A tak na levé straně máme 1 a 1. 393 00:25:15,410 --> 00:25:20,510 Když jsem Bitové | ty, co mám dostat? Jeden. 394 00:25:20,510 --> 00:25:25,320 Pak Bitové | 0 a 1 se chystá dát mi? Jeden. 395 00:25:25,320 --> 00:25:27,840 Bitová 1 a 0 bude to samé, jeden. 396 00:25:27,840 --> 00:25:31,880 Bitová 0 | 0 se chystá dát mi 0. 397 00:25:31,880 --> 00:25:37,300 Takže jediný případ, kdy jsem si je 0 v 0 | 0 případ. 398 00:25:37,300 --> 00:25:40,020 A můžete si myslet, že stejně jako vaše logické nejvzdálenější regiony. 399 00:25:40,020 --> 00:25:44,830 Takže pokud si myslíte, že 1. jako skutečné a 0 jako falešné, totéž platí zde. 400 00:25:44,830 --> 00:25:50,040 Takže pravda nebo pravda, je pravda, true nebo false, je pravda. 401 00:25:50,040 --> 00:25:57,150 False nebo pravda je pravda, false nebo false, je jediná věc, která je ve skutečnosti falešný. 402 00:25:57,150 --> 00:26:00,100 Zde je příklad, který byste měli vědět 403 00:26:00,100 --> 00:26:05,160 jako docela dobrý příklad toho, kdy jsou použity bitové operátory. 404 00:26:05,160 --> 00:26:08,660 Zde kdybychom nebo kapitál "A" s OX20, 405 00:26:08,660 --> 00:26:11,830 a my se podíváme na to ve chvíli, dostaneme něco. 406 00:26:11,830 --> 00:26:16,020 A pokud my nebo malá písmena "a" s OX20, dostaneme něco. 407 00:26:16,020 --> 00:26:26,750 Takže pojďme se vytáhnout ASCII tabulku. 408 00:26:26,750 --> 00:26:34,000 Dobře. Zde vidíme, že "A" je - 409 00:26:34,000 --> 00:26:36,920 tu máme "'je desítkové 65. 410 00:26:36,920 --> 00:26:45,120 Ale já půjdu s hexadecimální, který je Ox41. 411 00:26:45,120 --> 00:26:48,280 Jsem si jistý, viděli jsme to ve třídě. Myslím, že jsme to viděli ve třídě 412 00:26:48,280 --> 00:26:52,730 že je to docela snadné převést z šestnáctkové na binární. 413 00:26:52,730 --> 00:26:55,280 Takže tady, když chci dát 4 do binární, 414 00:26:55,280 --> 00:26:59,550 že to prostě bude 0100. 415 00:26:59,550 --> 00:27:03,620 To je jeden je místo, 2 v místě, 4 je místem, takže je to 4. 416 00:27:03,620 --> 00:27:08,550 Pak jsem se rozdělit 1 do binární, který se chystá být 0001. 417 00:27:08,550 --> 00:27:14,280 A tak to bude reprezentace "A" na binární. 418 00:27:14,280 --> 00:27:22,720 S malými písmeny "a", je to teď všechno bude Ox61, 419 00:27:22,720 --> 00:27:27,050 kde, rozdělení těchto nahoru do jeho binární, takže 6 - 420 00:27:27,050 --> 00:27:37,830 Pojďme skutečně udělat - je tam bez gumy? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Takže rozdělení 6 do binární bude 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 A rozdělení 1 bude 0001. 423 00:27:54,610 --> 00:27:56,520 Podíváme-li se rozdíl mezi těmito 2, 424 00:27:56,520 --> 00:28:04,250 vidíme, že jediný rozdíl mezi malými a kapitálu "A", je to jediný kousek. 425 00:28:04,250 --> 00:28:11,810 Takže se vrací zde - v pořádku. 426 00:28:11,810 --> 00:28:15,920 Vrátíme-li se zde, pokud se podíváme na to, co trochu OX20 je, 427 00:28:15,920 --> 00:28:22,210 tak rozdělení OX20 do jeho binární, 428 00:28:22,210 --> 00:28:27,310 je 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, jediný bit, který je nastaven, je to trochu, že se zabýváme, 430 00:28:33,470 --> 00:28:38,210 s přepínání mezi velkými a malými písmeny "A". 431 00:28:38,210 --> 00:28:47,610 Kdybych nebo 'A', což je tenhle, "", 432 00:28:47,610 --> 00:28:50,580 jestli jsem nebo "A" s OX20, 433 00:28:50,580 --> 00:28:53,490 co mám dostat? 434 00:28:53,490 --> 00:28:58,960 [Student, neslyšitelná] >> malými písmeny "A", protože se to bude hodit tento bit na 1. 435 00:28:58,960 --> 00:29:04,170 A jestli jsem nebo "" s OX20, co mám dostat? 436 00:29:04,170 --> 00:29:08,780 Malá, protože jen ORing "'s OX20, 437 00:29:08,780 --> 00:29:14,580 Jdu se ORing tento jediný kousek na 1, je to už jedno, tak to nevadí. 438 00:29:14,580 --> 00:29:17,960 Tak jsme se "A" a "A". 439 00:29:17,960 --> 00:29:24,820 >> Bitové a. Opět platí, že můžeme myslet na to, jak naše logické a protějšek. 440 00:29:24,820 --> 00:29:28,180 Na levé straně máme pravda a pravda. 441 00:29:28,180 --> 00:29:31,160 Bude to pravda, a pro všechny případy, 442 00:29:31,160 --> 00:29:36,270 false a true nebo pravdivé a nepravdivé, nebo false a false, 443 00:29:36,270 --> 00:29:38,550 žádná z těchto věcí, jsou pravdivé. 444 00:29:38,550 --> 00:29:44,170 Takže to, co jsme se nakonec dostat je 1000. 445 00:29:44,170 --> 00:29:48,830 Takže teď, tady, tady, kde jsem použil věrný bitového ne, 446 00:29:48,830 --> 00:29:52,230 kde jsme měli OX20. 447 00:29:52,230 --> 00:29:54,350 Tak tohle je OX20. 448 00:29:54,350 --> 00:29:59,570 A teď, co chci dělat, bitový ~ z OX20. 449 00:29:59,570 --> 00:30:03,600 To se bude hodit všechny 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 se mě dát to, co? 452 00:30:18,940 --> 00:30:22,430 Jen kousek opravdu musíme přemýšlet o tom, je to jedno, 453 00:30:22,430 --> 00:30:26,020 protože, pokud všechny tyto bity jsou nastaveny na hodnotu 1, 454 00:30:26,020 --> 00:30:29,000 pak budeme mít přesně to, co "A" bylo, 455 00:30:29,000 --> 00:30:31,260 s výjimkou, snad, co je tento bit. 456 00:30:31,260 --> 00:30:34,460 Protože kdyby to bylo 1, teď to bude nastavena na 0, 457 00:30:34,460 --> 00:30:39,810 proto, že bez ohledu na to, je, anded s tím bude 0. 458 00:30:39,810 --> 00:30:43,280 Takže to, co je "" & ~ OX20 chystá dát mi? 459 00:30:43,280 --> 00:30:48,200 [Studenti odpověď, neslyšitelná] >> A co je "" a - to je "A". 460 00:30:48,200 --> 00:30:52,170 A co je "" & ~ OX20 chystá dát mi? 461 00:30:52,170 --> 00:30:56,720 "A." Vzhledem k tomu, to je v současné době 1. 462 00:30:56,720 --> 00:30:59,570 Anding s touto 0 se chystá udělat to 0, 463 00:30:59,570 --> 00:31:02,530 a teď budeme mít "A". 464 00:31:02,530 --> 00:31:06,600 >> Oba jsou "," a v neposlední řadě tohoto typu, 465 00:31:06,600 --> 00:31:10,830 máme XOR. Je to velmi podobné, nebo 466 00:31:10,830 --> 00:31:14,400 kromě toho se rozumí výhradně nebo. 467 00:31:14,400 --> 00:31:18,420 To je jako to, co si obvykle myslí jako, nebo v reálném světě. 468 00:31:18,420 --> 00:31:23,190 Takže si to buď "x" nebo "y", ale ne obojí. 469 00:31:23,190 --> 00:31:28,700 Zde 1 ^ 1 bude 0. 470 00:31:28,700 --> 00:31:33,650 Vzhledem k tomu, pravda, to je - to nefunguje, tak s logickým true a false 471 00:31:33,650 --> 00:31:37,150 jako bitový & a nebo dělat, 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 Protože jsme se jen chcete vrátit hodnotu true, pokud pouze jeden z nich je pravdivá. 474 00:31:44,810 --> 00:31:50,950 So 1 ^ 1 je 0. Co 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šech okolností, 0 bitový něco 0 bude 0. 477 00:32:03,890 --> 00:32:10,270 1 bitový něco 0 nebo 0 bitový 1, 478 00:32:10,270 --> 00:32:14,660 jestli je to | nebo ^, to bude 1, a pokud je to a to bude 0. 479 00:32:14,660 --> 00:32:20,850 A jediný případ, kdy 1 bitový 1 není 1 je s exkluzivní nebo. 480 00:32:20,850 --> 00:32:24,580 To je 0110. 481 00:32:24,580 --> 00:32:36,520 Tak tady, pomocí XOR - tak jsme zpátky na 20 let. 482 00:32:36,520 --> 00:32:43,480 'A' ^ OX20 je tyto 2 bity budeme srovnávat. 483 00:32:43,480 --> 00:32:50,020 Takže 1 ^ 0 se chystá mi dát, co? Jeden. 484 00:32:50,020 --> 00:32:58,430 'A' ^ OX20 se chystá dát mi? Malá. 485 00:32:58,430 --> 00:33:04,010 '"^ OX20 se chystá dát mi? Kapitál A. 486 00:33:04,010 --> 00:33:09,310 Vzhledem k tomu, co to dělá, to XORing s OX20 487 00:33:09,310 --> 00:33:15,380 je skutečně mizerný, co je tento bit. 488 00:33:15,380 --> 00:33:21,240 Pokud je to 0, je to teď bude stát 1. 489 00:33:21,240 --> 00:33:26,160 Vzhledem k tomu, to je 1, 1 ^ 1 je 0. 490 00:33:26,160 --> 00:33:33,280 Takže naše "" se stala "A", a náš "A" se stalo "". 491 00:33:33,280 --> 00:33:36,910 Takže XOR je opravdu pohodlný způsob, jak jen mizerný případ. 492 00:33:36,910 --> 00:33:39,960 Chcete jen pro iteraci řetězec písmen 493 00:33:39,960 --> 00:33:44,330 a střídat případ každého jednotlivého znaku, 494 00:33:44,330 --> 00:33:50,680 stačí XOR vše s OX20. 495 00:33:50,680 --> 00:33:55,220 >> Nyní nám zbývá posun. Levý shift je jen tak, v podstatě, 496 00:33:55,220 --> 00:34:01,250 tlačit všechna čísla do, nebo vlevo, a vložte 0 je za nimi. 497 00:34:01,250 --> 00:34:05,550 Takže tady máme 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Budeme tlačit 3 0 je z pravé strany, 499 00:34:08,560 --> 00:34:13,580 a dostaneme 01101000. 500 00:34:13,580 --> 00:34:16,380 V nonbinary hlediska, 501 00:34:16,380 --> 00:34:24,699 vidíme, že to je opravdu řešení 13 doleva posunuté s 3, který nám dává 104. 502 00:34:24,699 --> 00:34:32,530 Takže vlevo posun, vidíme zde, x << y je v podstatě 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 Pokud si jen myslíte o binární obecně, jak každou číslici, 505 00:34:45,679 --> 00:34:49,530 Vyjdeme-li z pravé strany, je to v 1 je místo, pak na 2 místa, pak 4 v místě. 506 00:34:49,530 --> 00:34:51,330 Takže tím, že tlačí do 0 let z pravé strany, 507 00:34:51,330 --> 00:34:55,080 jsme prostě tlačí věci, které byly ve 4. místa do 8 místa, 508 00:34:55,080 --> 00:34:57,920 a věci, které byly v 8 místa na 16. místa. 509 00:34:57,920 --> 00:35:01,280 Každý posun jen násobí o 2. Jo? 510 00:35:01,280 --> 00:35:05,210 [Student] Co se stane, když se posune o 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Pokud se posunul o 5 byste jen ztratit číslice. 512 00:35:10,790 --> 00:35:15,410 Nevyhnutelně, je to totéž. Stejně jako celá čísla jsou pouze 32 bitů, 513 00:35:15,410 --> 00:35:20,750 takže pokud přidáte 2 opravdu velké celá čísla, je to prostě nevejde celé číslo. 514 00:35:20,750 --> 00:35:23,660 Takže je to to samé zde. Pokud se posunul o 5, 515 00:35:23,660 --> 00:35:25,650 bychom jen ztratit, že jeden. 516 00:35:25,650 --> 00:35:28,820 A to je něco, co mám na mysli tím "hrubě" 517 00:35:28,820 --> 00:35:37,470 kde pokud posun příliš daleko, ztratíte bitů. 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 jedeme do tuhého 0 Off konci, 520 00:35:43,090 --> 00:35:48,400 a pro naše účely, vyplňte 0 let zleva. 521 00:35:48,400 --> 00:35:52,910 Takže, co děláme, jsme v podstatě zvrátit to, co jsme už udělali. 522 00:35:52,910 --> 00:35:57,780 A vidíme, že tři 0 je na pravé straně právě spadl, 523 00:35:57,780 --> 00:36:02,020 a my jsme tlačil 1101 úplně napravo. 524 00:36:02,020 --> 00:36:08,380 To dělá 104 >> 3, která je ve skutečnosti, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Takže teď, tady, je to podobný nápad. 526 00:36:11,200 --> 00:36:18,720 Proč je to jen zhruba x / 2 ^ y, a ne ve skutečnosti x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Protože když jsem se posunul o 4, bych ztratil jeden. 528 00:36:22,240 --> 00:36:25,950 V podstatě, co si myslíte o, jen myslet na celočíselné dělení obecně. 529 00:36:25,950 --> 00:36:31,070 Tak, jako je 5/2 je 2.. Není to 2.5. 530 00:36:31,070 --> 00:36:35,000 Je to stejná myšlenka tady. Když jsme se rozdělit o 2, 531 00:36:35,000 --> 00:36:39,910 můžeme ztratit liché bity na cestě. 532 00:36:39,910 --> 00:36:43,870 Takže teď - to je pro bitové operace. To je vše, co potřebujete vědět. 533 00:36:43,870 --> 00:36:46,340 Vzpomeňte si na případy použití jsme viděli ve třídě, 534 00:36:46,340 --> 00:36:49,340 jako bitová maska ​​je vhodná pro Bitové operátory, 535 00:36:49,340 --> 00:36:53,220 nebo je použít pro bitové masky. 536 00:36:53,220 --> 00:36:58,620 Velká písmena a malá písmena, konverze je docela typický příklad. 537 00:36:58,620 --> 00:37:01,640 >> Dobře, takže buffer overflow útoky. 538 00:37:01,640 --> 00:37:05,110 Každý, kdo si vzpomenout, co bylo s touto funkcí v pořádku? 539 00:37:05,110 --> 00:37:10,140 Všimněte si, jsme deklarovali pole 12 bajtů, 12 znaků, 540 00:37:10,140 --> 00:37:18,510 a pak zkopírovat do naší paměti 12 znaků celý řetězec bar. 541 00:37:18,510 --> 00:37:25,080 Takže to, co je tady za problém? 542 00:37:25,080 --> 00:37:32,270 Magické číslo 12 by měl do značné míry okamžitě vyskočí as - proč 12? 543 00:37:32,270 --> 00:37:35,050 Co když se stane, bar na více než 12 znaků? 544 00:37:35,050 --> 00:37:41,200 Co když bar je miliony postav? 545 00:37:41,200 --> 00:37:46,010 Zde je problém memcpy. Pokud bar je dostatečně dlouhý, 546 00:37:46,010 --> 00:37:50,330 to bude jen zcela - 'c', 'c' není jedno, že to bylo jen 12 znaků; 547 00:37:50,330 --> 00:37:53,280 "C" není jedno, že se nevejde, že mnoho bytů. 548 00:37:53,280 --> 00:37:58,250 Bude to jen zcela přepsat znak, 12 bajtů jsme přidělené na to, 549 00:37:58,250 --> 00:38:01,830 a vše kolem něj v paměti, která není ve skutečnosti patří do této vyrovnávací paměti 550 00:38:01,830 --> 00:38:06,520 s tím, co řetězec bar. 551 00:38:06,520 --> 00:38:09,780 Takže to byl obrázek jsme viděli ve třídě 552 00:38:09,780 --> 00:38:12,220 kde máme naše stack roste. 553 00:38:12,220 --> 00:38:16,040 Ty by měly být použity na tyto obrázky, nebo se znovu seznámit se s nimi. 554 00:38:16,040 --> 00:38:21,260 Máme zásobník roste, paměťové adresy začínají na 0 na vrcholu 555 00:38:21,260 --> 00:38:26,270 a růst se rád 4000000000 na dně. 556 00:38:26,270 --> 00:38:28,820 Máme pole 'c' někde v paměti, 557 00:38:28,820 --> 00:38:32,260 pak máme ukazatel na zatarasit hned pod ním, 558 00:38:32,260 --> 00:38:38,720 a pak tu máme uložený rám ukazatel v naší zpáteční adresou a naší mateřské rutinu v zásobníku. 559 00:38:38,720 --> 00:38:40,800 Vzpomeň si, co zpáteční adresa je? 560 00:38:40,800 --> 00:38:45,360 Je to, když hlavní volá funkci foo, volá funkci bar, 561 00:38:45,360 --> 00:38:48,100 nevyhnutelně, bar vrátí. 562 00:38:48,100 --> 00:38:52,610 Takže když bar vrátí, oni potřebují vědět, že se vrací do foo, že ji volal. 563 00:38:52,610 --> 00:39:01,360 Takže zpáteční adresa je adresa funkce, že se má vrátit, když funkce vrací. 564 00:39:01,360 --> 00:39:05,830 Důvodem je to důležité pro buffer overflow útoky je proto, pohodlně, 565 00:39:05,830 --> 00:39:09,580 hackeři chtěli změnit, že zpáteční adresu. 566 00:39:09,580 --> 00:39:14,950 Místo toho, aby šel zpátky do foo, jdu se vrátit tam, kam hacker chce, abych se vrátila do. 567 00:39:14,950 --> 00:39:17,760 A, pohodlně, kde hacker často se chce vrátit do 568 00:39:17,760 --> 00:39:22,400 je začátek bufferu, který jsme původně měli. 569 00:39:22,400 --> 00:39:26,170 Takže všimnout, opět, Malá Indie. 570 00:39:26,170 --> 00:39:28,490 Zařízení je příkladem Malý indický systém, 571 00:39:28,490 --> 00:39:34,140 takže celé číslo, nebo ukazatel je uložen s obrácenými bajtů. 572 00:39:34,140 --> 00:39:38,980 Takže tady 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 Vzpomeňte si na hexadecimální číslice? 575 00:39:48,250 --> 00:39:50,640 Nechceme zvrátit hexadecimální číslice v Malé indické, 576 00:39:50,640 --> 00:39:56,110 protože 2 hexadecimální číslice tvoří jeden byte, a my zvrátit bajtů. 577 00:39:56,110 --> 00:40:00,300 To je důvod, proč jsme neukládáme, jako, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Uložíme, místo toho, každý pár 2 číslic, počínaje zprava. 579 00:40:07,520 --> 00:40:10,880 Tato adresa odkazuje na adresu začátku 580 00:40:10,880 --> 00:40:15,190 z naší paměti, že jsme skutečně chtěli zkopírovat do na prvním místě. 581 00:40:15,190 --> 00:40:19,230 Důvodem, proč je užitečné proto, že to, co v případě, že útočník 582 00:40:19,230 --> 00:40:24,100 se stalo, namísto řetězec, který byl právě 583 00:40:24,100 --> 00:40:27,060 neškodný řetězec, jako je jejich jméno nebo něco, 584 00:40:27,060 --> 00:40:33,900 co když místo toho, že string jsou jen některé libovolného kódu 585 00:40:33,900 --> 00:40:38,610 že udělali, co chtěli to udělat? 586 00:40:38,610 --> 00:40:45,630 Aby mohli - já si nemyslím, že jakékoliv chladné kódu. 587 00:40:45,630 --> 00:40:47,780 Mohlo by to být cokoliv, i když. Jakékoliv katastrofální kód. 588 00:40:47,780 --> 00:40:51,440 Kdyby chtěli, mohli prostě dělat něco na segmentech chyb, ale to by bylo zbytečné. 589 00:40:51,440 --> 00:40:54,950 Obvykle to hack systému. 590 00:40:54,950 --> 00:40:59,930 >> Dobře. CS50 knihovny. 591 00:40:59,930 --> 00:41:04,800 To je, v podstatě, vezmi_int, getString, všechny ty funkce, jsme Vám k dispozici. 592 00:41:04,800 --> 00:41:10,630 Takže máme char * string, a to abstrakce, že odfoukl 593 00:41:10,630 --> 00:41:12,450 v určitém okamžiku v průběhu semestru. 594 00:41:12,450 --> 00:41:18,220 Pamatujte si, že řetězec je jen pole znaků. 595 00:41:18,220 --> 00:41:23,240 Takže tady vidíme zkrácenou verzi GetString. 596 00:41:23,240 --> 00:41:25,920 Měli byste se podívat zpět na to vzpomenout si, jak je to ve skutečnosti realizována. 597 00:41:25,920 --> 00:41:30,950 Klíčové informace jsou Všimněte si, dostaneme v jediném znaku najednou 598 00:41:30,950 --> 00:41:34,570 ze standardního vstupu, který je stejně jako nám psát na klávesnici. 599 00:41:34,570 --> 00:41:37,890 Takže jeden znak v čase, a pokud se dostanete příliš mnoho znaků, 600 00:41:37,890 --> 00:41:40,580 takže pokud n + 1 je větší než kapacita, 601 00:41:40,580 --> 00:41:44,140 pak musíme zvýšit kapacitu naší paměti. 602 00:41:44,140 --> 00:41:47,780 Tak tady jsme zdvojnásobení velikosti naší paměti. 603 00:41:47,780 --> 00:41:51,840 A to stále děje, jsme se vložit znak do naší paměti 604 00:41:51,840 --> 00:41:56,220 dokud neobdržíme nový řádek nebo konec souboru nebo cokoli jiného, 605 00:41:56,220 --> 00:41:59,380 V takovém případě jsme hotovi s řetězci a pak reálném GetString 606 00:41:59,380 --> 00:42:05,120 zmenšuje paměť, jako kdybychom přiděleno příliš mnoho paměti, že se vrátím a zmenšit trochu. 607 00:42:05,120 --> 00:42:08,830 Tak jsme se neukazují, ale hlavní myšlenka je 608 00:42:08,830 --> 00:42:11,960 to má číst v jednom znaku najednou. 609 00:42:11,960 --> 00:42:17,140 To může nejen číst v celé věci najednou, 610 00:42:17,140 --> 00:42:19,550 protože jejich paměť je pouze určité velikosti. 611 00:42:19,550 --> 00:42:26,590 Takže pokud je řetězec, který se snaží vložit do vyrovnávací paměti je příliš velká, pak by to přetéct. 612 00:42:26,590 --> 00:42:28,940 Tak tady jsme zabránit tomu, aby jen o čtení v jediném znaku 613 00:42:28,940 --> 00:42:33,750 v čase a roste vždy, když je třeba. 614 00:42:33,750 --> 00:42:40,270 Takže vezmi_int a ostatní knihovní funkce CS50 mají tendenci používat getString 615 00:42:40,270 --> 00:42:42,310 v jejich realizaci. 616 00:42:42,310 --> 00:42:45,370 Tak jsem upozornil na důležité věci tady. 617 00:42:45,370 --> 00:42:49,460 Vyzývá getString získat řetězec. 618 00:42:49,460 --> 00:42:51,710 Pokud getString nepodařilo vrátit paměť, 619 00:42:51,710 --> 00:42:54,270 si uvědomit, že getString mallocs něco, takže když budete volat getString 620 00:42:54,270 --> 00:42:57,820 neměli byste (nesrozumitelné) uvolnit, že řetězec, který jste dostali. 621 00:42:57,820 --> 00:43:02,870 Tak tady, pokud se nepodařilo malloc něco, vrátíme INT_MAX jen jako příznak, že 622 00:43:02,870 --> 00:43:05,650 Ahoj, byli jsme vlastně schopni získat celé číslo. 623 00:43:05,650 --> 00:43:10,830 Ty by měly ignorovat, co se vrátím k vám, nebo 624 00:43:10,830 --> 00:43:15,540 neměli byste léčit to jako platný vstup. 625 00:43:15,540 --> 00:43:21,360 A konečně, za předpokladu, že se podaří, budeme používat sscanf s tímto zvláštním příznakem, 626 00:43:21,360 --> 00:43:23,820 což znamená, že první zápas celé číslo, 627 00:43:23,820 --> 00:43:26,770 pak nalezeny žádné 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 vrací, kolik zápasů, pokud úspěšně provedena? 630 00:43:32,940 --> 00:43:37,010 Vrátí hodnotu 1, pokud je úspěšně uzavřeno celé číslo, 631 00:43:37,010 --> 00:43:40,890 vrátí hodnotu 0, pokud to neodpovídalo celé číslo, a to se vrátí 2 632 00:43:40,890 --> 00:43:45,920 pokud je uzavřeno číslo následuje nějaký znak. 633 00:43:45,920 --> 00:43:49,780 Takže všimnete jsme opakovat, pokud se nic jiného než jeden zápas. 634 00:43:49,780 --> 00:43:55,230 Pokud tedy součástí 1, 2, 3, C, nebo 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 pak 1, 2, 3 by se ukládají na celé číslo, 636 00:43:57,400 --> 00:43:59,620 X by se ukládají na charakteru, 637 00:43:59,620 --> 00:44:06,410 sscanf vrátí 2, a budeme opakovat, protože chceme jen celé číslo. 638 00:44:06,410 --> 00:44:09,810 >> Rychle foukání přes HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language je struktura a sémantika na webu. 640 00:44:15,340 --> 00:44:19,960 Zde je příklad z přednášky, kde máme HTML tagy. 641 00:44:19,960 --> 00:44:22,110 Máme hlavy tagy, tělo tagy, 642 00:44:22,110 --> 00:44:27,770 máme příklady prázdných značek, kde jsme vlastně nemají start a úzké tag, 643 00:44:27,770 --> 00:44:30,820 musíme jen odkaz a obrázek. 644 00:44:30,820 --> 00:44:38,480 Neexistuje žádný obraz tag zavírání, je tu jen jediná značka, která dosáhne vše, co značka musí udělat. 645 00:44:38,480 --> 00:44:41,950 Odkaz je příklad, uvidíme, jak si odkaz na CSS, 646 00:44:41,950 --> 00:44:45,910 skript je příkladem toho, jak si odkaz na externí JavaScript. 647 00:44:45,910 --> 00:44:53,100 Je to docela jednoduché, a pamatujte, že HTML není programovací jazyk. 648 00:44:53,100 --> 00:44:58,250 Zde si vzpomenout, jak byste definovat formu, nebo alespoň to, co by to udělat? 649 00:44:58,250 --> 00:45:01,740 Taková forma má akci a metody. 650 00:45:01,740 --> 00:45:06,210 Metody budete jen někdy vidět jsou GET a POST. 651 00:45:06,210 --> 00:45:09,040 Takže si je verze, kde dostane, co dát do URL. 652 00:45:09,040 --> 00:45:11,680 POST je místo, kde to není dát do URL. 653 00:45:11,680 --> 00:45:18,520 Místo toho, všechna data z formuláře se vloží více skryté v požadavku HTTP. 654 00:45:18,520 --> 00:45:22,390 Tak tady, akce definuje, kde požadavek HTTP jde. 655 00:45:22,390 --> 00:45:27,490 Tam, kde to jde, je google.com / search. 656 00:45:27,490 --> 00:45:32,890 Metoda. Vzpomeňte si na rozdíly mezi GET a POST, 657 00:45:32,890 --> 00:45:37,200 a jen říct, jako například, pokud chcete záložky něco. 658 00:45:37,200 --> 00:45:40,660 Už nikdy se nebudete moci záložku POST URL 659 00:45:40,660 --> 00:45:44,970 protože data nejsou zahrnuty 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, měli byste očekávat, že přenos 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, a to dělá. 663 00:45:57,710 --> 00:46:00,170 Ale je to také přenáší všechny obrázky, které najdete na webu, 664 00:46:00,170 --> 00:46:05,400 žádné stahování, které provedete spustit jako HTTP požadavku. 665 00:46:05,400 --> 00:46:10,350 Takže HTTP je jen jazyk World Wide Web. 666 00:46:10,350 --> 00:46:15,610 A zde je třeba si uvědomit, tento druh požadavku HTTP. 667 00:46:15,610 --> 00:46:19,300 Zde HTTP/1.1 na straně právě říká, že je to verze 668 00:46:19,300 --> 00:46:21,570 protokolu jsem pomocí. 669 00:46:21,570 --> 00:46:25,770 Je to skoro vždy bude HTTP/1.1, jak budete vidět. 670 00:46:25,770 --> 00:46:30,110 Pak vidíme, že je to GET, POST alternativou je, že můžete vidět. 671 00:46:30,110 --> 00:46:40,790 A URL, které jsem se snažil navštívit byla www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Takže si pamatujte, že to, otazník q = bla bla bla, 673 00:46:44,240 --> 00:46:49,040 je druh věcí, které je předložené podobě. 674 00:46:49,040 --> 00:46:51,830 Reakce by to mohlo vrátit ke mně bude vypadat nějak takhle. 675 00:46:51,830 --> 00:46:54,050 Opět platí, že počínaje protokolu, který se chystá být, že, 676 00:46:54,050 --> 00:46:59,190 následuje stavový kód. Tady je to 200 OK. 677 00:46:59,190 --> 00:47:05,060 A konečně, webové stránky, které jsem vlastně požádal bude následovat. 678 00:47:05,060 --> 00:47:08,210 Možný stav kód, který jste mohli vidět, a měli byste vědět několik z nich. 679 00:47:08,210 --> 00:47:12,770 200 OK jste pravděpodobně neviděli. 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 obvykle, pokud jdete na webových stránkách a něco, co je rozbité, nebo jejich PHP kód, dojde k chybě, 682 00:47:22,140 --> 00:47:24,930 zatímco my v zařízení mají tak velký oranžový box 683 00:47:24,930 --> 00:47:27,830 že přijde a říká, jako, něco není v pořádku, tento kód nefunguje 684 00:47:27,830 --> 00:47:30,380 nebo tato funkce je špatné. 685 00:47:30,380 --> 00:47:33,230 Obvykle webové stránky nechci, abys věděl, jaké funkce jsou skutečně špatné, 686 00:47:33,230 --> 00:47:37,880 takže místo toho si jen dát 500 interní chyby serveru. 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 Pamatujte si, že tam je Internet mimo World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Stejně jako když budete hrát online hru, která nemá jít přes HTTP, 690 00:47:52,270 --> 00:47:55,740 to prochází jiná - je to stále používáte internet, 691 00:47:55,740 --> 00:47:58,900 ale nepoužívá HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP je jen jeden příklad z protokolu postavený na protokolu TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP doslovně znamená Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Každý počítač má IP adresu, jsou tyto 4-místný věci 695 00:48:11,500 --> 00:48:16,510 jako je 192.168.2.1, nebo co, že má tendenci být lokální 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, co překládá věci, jako je google.com, aby skutečné IP adresy. 699 00:48:33,410 --> 00:48:37,700 Takže pokud jste typ, že IP adresy do URL, 700 00:48:37,700 --> 00:48:40,850 že by tě přivést na Google, ale nemají tendenci si pamatovat ty věci. 701 00:48:40,850 --> 00:48:45,470 Ty mají tendenci se místo toho pamatovat google.com. 702 00:48:45,470 --> 00:48:51,560 Poslední věc, kterou máme, je porty, kde je to TCP součástí IP protokolu. 703 00:48:51,560 --> 00:48:54,880 TCP dělá víc. Přemýšlejte o tom, jak máte ve Vašem webovém prohlížeči chod. 704 00:48:54,880 --> 00:48:58,670 Možná máte nějaké e-mailové aplikace běží; 705 00:48:58,670 --> 00:49:02,150 Možná budete mít nějaký jiný program, který používá Internet v chodu. 706 00:49:02,150 --> 00:49:05,090 Ti všichni potřebují přístup k internetu, 707 00:49:05,090 --> 00:49:08,100 ale má počítač pouze jeden WiFi karty nebo cokoliv. 708 00:49:08,100 --> 00:49:10,780 Takže porty jsou tak, že jsme schopni rozdělit 709 00:49:10,780 --> 00:49:13,550 jak tyto aplikace jsou schopni používat internet. 710 00:49:13,550 --> 00:49:17,230 Každá aplikace dostane jeden konkrétní port, který můžete poslouchat na, 711 00:49:17,230 --> 00:49:19,670 a ve výchozím nastavení, HTTP používá port 80. 712 00:49:19,670 --> 00:49:22,410 Některé e-mailové služby využívat 25. 713 00:49:22,410 --> 00:49:24,490 Ty s nízkým číslem mají tendenci být vyhrazena. 714 00:49:24,490 --> 00:49:29,270 Ty jsou obvykle schopni získat vyšší číselná ty pro sebe. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Jsme ve stylu webové stránky s CSS, ne s HTML. 717 00:49:36,030 --> 00:49:38,440 K dispozici jsou 3 místa si můžete dát své CSS. 718 00:49:38,440 --> 00:49:46,300 To může být inline, mezi tagy stylu, nebo ve zcela samostatném souboru a poté spojena palců 719 00:49:46,300 --> 00:49:48,470 A tady je jen příkladem CSS. 720 00:49:48,470 --> 00:49:50,450 Ty by měly uznat tento vzor, 721 00:49:50,450 --> 00:49:54,310 kde první příklad máme odpovídající tag těla, 722 00:49:54,310 --> 00:49:56,680 a tady jsme centrování značku těla. 723 00:49:56,680 --> 00:50:00,420 Druhý příklad, jsme odpovídající věc 724 00:50:00,420 --> 00:50:04,740 s ID zápatí, a my se ucházíte některé styly, které. 725 00:50:04,740 --> 00:50:07,310 Všimněte si, že ID zápatí textu zarovná doleva, 726 00:50:07,310 --> 00:50:09,840 vzhledem k tomu, tělo textu zarovná centrum. 727 00:50:09,840 --> 00:50:13,180 Zápatí je uvnitř těla. 728 00:50:13,180 --> 00:50:16,470 To bude místo, text-align odešel, i když tělo říká textu zarovnání na střed. 729 00:50:16,470 --> 00:50:18,880 To je celý kaskádové část. 730 00:50:18,880 --> 00:50:22,110 Můžete mít - můžete zadat styly pro tělo, 731 00:50:22,110 --> 00:50:25,320 a poté, co v těle můžete zadat konkrétnější styly, 732 00:50:25,320 --> 00:50:28,160 a věci fungují tak, jak očekáváte. 733 00:50:28,160 --> 00:50:34,420 Konkrétnější CSS specifikací mají přednost. 734 00:50:34,420 --> 00:50:46,140 Myslím, že to je. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Ahoj všichni. Kdybych mohl jen získat vaši pozornost. 736 00:50:49,260 --> 00:50:53,990 Jsem Ali a já jdu přes PHP a SQL opravdu rychle. 737 00:50:53,990 --> 00:51:00,310 Takže můžeme začít. PHP je zkratka pro PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 A jak všichni by měli vědět, že je to server-side skriptovací jazyk, 739 00:51:03,730 --> 00:51:06,800 a my ho použít pro zadní část webových stránek, 740 00:51:06,800 --> 00:51:12,540 a jak to dělá hodně výpočtů, na za-scény části. 741 00:51:12,540 --> 00:51:17,510 Syntaxe. Není to jako C, překvapení, překvapení. 742 00:51:17,510 --> 00:51:22,060 Vždy musí začít, pokud vidíte, - Nemůžu se pohnout kupředu. 743 00:51:22,060 --> 00:51:31,340 Můžete vidět, co potřebujete nové druhy závorek a pak budete také potřebovat? Php. 744 00:51:31,340 --> 00:51:35,780 To je vždycky, jak jste se zaměřte PHP text, váš PHP kód. 745 00:51:35,780 --> 00:51:39,180 Takže to může být jen jako C, kde si trochu dát to na poprvé. 746 00:51:39,180 --> 00:51:42,290 Musíte vždy obklopují ji. 747 00:51:42,290 --> 00:51:47,610 A teď, hlavní syntaxe je, že všechny proměnné, je třeba začít s znak $. 748 00:51:47,610 --> 00:51:49,490 Musíte to udělat, když jste je definovat, co musíte udělat, je 749 00:51:49,490 --> 00:51:51,860 pokud máte na mysli, aby se na ně později. 750 00:51:51,860 --> 00:51:56,510 Vždy je třeba, aby $. To je tvůj nový nejlepší přítel, docela hodně. 751 00:51:56,510 --> 00:52:01,690 Nemusíte - na rozdíl od C, nemusíte se dát jaký typ proměnné je. 752 00:52:01,690 --> 00:52:04,940 Takže zatímco vy potřebujete dolarů, nemusíte dát, jako, 753 00:52:04,940 --> 00:52:09,470 int x, nebo řetězec y, a tak dále, a tak dále. 754 00:52:09,470 --> 00:52:11,490 Tak malý rozdíl. 755 00:52:11,490 --> 00:52:15,590 V důsledku toho, to znamená, že PHP je slabě typu. 756 00:52:15,590 --> 00:52:19,310 PHP je slabě typ jazyka, a to slabě napsaný proměnných. 757 00:52:19,310 --> 00:52:24,020 Jinými slovy to znamená, že můžete přepínat mezi různými druhy typy proměnných. 758 00:52:24,020 --> 00:52:27,230 Můžete si uložit číslo 1 jako int, 759 00:52:27,230 --> 00:52:29,650 můžete uložit jako řetězec, a můžete uložit jako float, 760 00:52:29,650 --> 00:52:33,550 a to všechno bude, že číslo 1. 761 00:52:33,550 --> 00:52:36,080 I když jste ukládání v různých formách, 762 00:52:36,080 --> 00:52:39,120 je to pořád - variabilní typy jsou stále drží na konci. 763 00:52:39,120 --> 00:52:41,540 Takže když se podíváte sem, pokud si pamatujete z pset 7, 764 00:52:41,540 --> 00:52:43,500 mnozí z vás asi měl problémy s tím. 765 00:52:43,500 --> 00:52:47,280 Dva stejné příznaky, 3 rovnítka, 4 rovnítka. 766 00:52:47,280 --> 00:52:49,990 Dobře, nejsou tam žádné 4 rovnítka, ale tam jsou 2 a 3. 767 00:52:49,990 --> 00:52:53,320 Můžete použít dva stejné znaky ke zkontrolování logiky hodnot. 768 00:52:53,320 --> 00:52:55,830 Je možné zkontrolovat u všech typů. 769 00:52:55,830 --> 00:52:58,770 Takže pokud můžete vidět v prvním příkladu, 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 jsou jak technicky, 1, 772 00:53:06,710 --> 00:53:10,790 ale jsou různé typy. Ale pro dvojité rovná, bude to ještě projít. 773 00:53:10,790 --> 00:53:15,510 Nicméně, pro trojité rovná, zkontroluje hodnoty, jakož i různé druhy. 774 00:53:15,510 --> 00:53:18,760 To znamená, že to nebude projít v tomto druhém případě zde, 775 00:53:18,760 --> 00:53:22,350 kam s použitím 3 rovnítka místo. 776 00:53:22,350 --> 00:53:26,590 Tak to je hlavní rozdíl, že jste měli všichni ukázali se. 777 00:53:26,590 --> 00:53:31,570 >> Zřetězení je další silný věc, kterou můžete použít v PHP. 778 00:53:31,570 --> 00:53:34,080 Je to v podstatě jen to šikovný tečka zápis, 779 00:53:34,080 --> 00:53:36,230 a to je to, jak můžete svázat provázky dohromady. 780 00:53:36,230 --> 00:53:40,800 Takže pokud máte kočku a máte psa a chcete dát dva řetězce dohromady, 781 00:53:40,800 --> 00:53:44,080 můžete použít období, a to je trochu o tom, jak to funguje. 782 00:53:44,080 --> 00:53:46,660 Můžete také jen umístit vedle sebe, 783 00:53:46,660 --> 00:53:49,030 jak můžete vidět zde v pravém dolním příkladu, 784 00:53:49,030 --> 00:53:51,610 kde jsem echo řetězec 1, 2 prostor řetězec. 785 00:53:51,610 --> 00:53:56,930 PHP bude vědět, aby je nahradili jako takové. 786 00:53:56,930 --> 00:53:59,780 Pole. Nyní, v PHP, existují 2 různé druhy polí. 787 00:53:59,780 --> 00:54:03,180 Můžete mít pravidelné pole, a můžete mít také asociativní pole, 788 00:54:03,180 --> 00:54:06,040 a my jsme jít přes ně právě teď. 789 00:54:06,040 --> 00:54:08,280 Pravidelné pole jsou právě to v C, 790 00:54:08,280 --> 00:54:11,240 a tak budete mít indexy, které jsou očíslované. 791 00:54:11,240 --> 00:54:13,160 Právě teď se právě chystá vytvořit a dát - 792 00:54:13,160 --> 00:54:15,500 tak to je, jak jsme se vytvořit prázdné pole, pak budeme 793 00:54:15,500 --> 00:54:17,310 vložit do čísle indexu 0.. 794 00:54:17,310 --> 00:54:19,200 Chystáme se dát číslo 6, hodnotu 6. 795 00:54:19,200 --> 00:54:21,500 Můžete to vidět na spodní části zde. 796 00:54:21,500 --> 00:54:24,240 Where's - na indexovým číslem 1 jdeme dát hodnotu číslo 4, 797 00:54:24,240 --> 00:54:26,720 a tak můžete vidět, že je to 6, je tu 4, 798 00:54:26,720 --> 00:54:29,160 a pak, jak jsme tisknete věci, 799 00:54:29,160 --> 00:54:33,550 když se snažíme a vytisknout hodnotu uloženou v čísle indexu 0., 800 00:54:33,550 --> 00:54:36,900 pak uvidíme hodnotu 6 je vytisknout. V pohodě? 801 00:54:36,900 --> 00:54:40,160 Tak to je pravidelná pole pro vás. 802 00:54:40,160 --> 00:54:42,750 Dalším způsobem, jak můžete také přidat věci do pravidelných řad teď 803 00:54:42,750 --> 00:54:44,780 je stačí připojit je na konci. 804 00:54:44,780 --> 00:54:47,240 To znamená, že nemusíte specifikovat konkrétní index. 805 00:54:47,240 --> 00:54:51,000 Můžete vidět číslo, a pak v hranatých závorkách není index zadán. 806 00:54:51,000 --> 00:54:56,270 A bude to znát - PHP bude vědět, že stačí přidat na konec seznamu, další volné místo. 807 00:54:56,270 --> 00:54:59,190 Takže můžete vidět 1 přímo tam v té 0 místě, 808 00:54:59,190 --> 00:55:02,690 2 šel tam na prvním místě. 809 00:55:02,690 --> 00:55:04,690 3. jde - je tam přidáno stejně. 810 00:55:04,690 --> 00:55:06,720 Takže to trochu dává smysl. Jenom stále přidáváme ji, 811 00:55:06,720 --> 00:55:09,360 a pak, když jsme ozvěnou index číslo 1, 812 00:55:09,360 --> 00:55:13,080 bude tisknout na hodnotu 2. 813 00:55:13,080 --> 00:55:16,800 >> Pak máme pole, které jsou asociativní pole. 814 00:55:16,800 --> 00:55:19,370 Asociativní pole, místo s číselnými indexy, 815 00:55:19,370 --> 00:55:23,630 to, co dělají, je, že mají indexy, které jsou podle provázku. 816 00:55:23,630 --> 00:55:25,670 Můžete vidět, místo - Zbavil jsem se všech těchto číselných indexů, 817 00:55:25,670 --> 00:55:32,140 a teď je to key1, key2, key3, a oni jsou v uvozovkách znamenat, že jsou všechny řetězce. 818 00:55:32,140 --> 00:55:34,470 Takže můžeme mít příklad. 819 00:55:34,470 --> 00:55:38,790 Příkladem je to, že máme TF, a to je jméno indexu. 820 00:55:38,790 --> 00:55:42,030 Chystáme se dát "Ali" jako název, na indexu, kalorií snědli, 821 00:55:42,030 --> 00:55:47,640 můžeme dát int tentokrát namísto řetězec, 822 00:55:47,640 --> 00:55:52,240 a pak na indexu rád, můžeme dát celou řadu uvnitř ní. 823 00:55:52,240 --> 00:55:55,490 Takže je to druh - je to podobný koncept, jak jsme měli 824 00:55:55,490 --> 00:55:58,930 indexy s čísly, ale nyní můžeme změnit indexy kolem 825 00:55:58,930 --> 00:56:03,890 mít je jako řetězce místo. 826 00:56:03,890 --> 00:56:06,070 Můžete to udělat také, kromě toho jen dělá to individuálně, 827 00:56:06,070 --> 00:56:09,400 můžete to udělat vše v jednom bloku. Takže můžete vidět, že tf tohoto pole, 828 00:56:09,400 --> 00:56:13,350 a pak jsme se vydali je všechny do jedné obří hranatá závorka sady. 829 00:56:13,350 --> 00:56:15,220 Tak, že může věci urychlit. 830 00:56:15,220 --> 00:56:19,730 Je to spíše stylistické volby než ne. 831 00:56:19,730 --> 00:56:21,550 Máme také smyčky. 832 00:56:21,550 --> 00:56:26,020 V jazyce C máme smyčky, které fungují jako tento. 833 00:56:26,020 --> 00:56:29,690 Měli jsme naší nabídku, a šli jsme od indexu 0 až do konce seznamu, 834 00:56:29,690 --> 00:56:31,740 a my jsme to všechno vytisknout, ne? 835 00:56:31,740 --> 00:56:33,880 Kromě Problém je, že pro asociativní pole, 836 00:56:33,880 --> 00:56:36,610 se nemusí nutně vědět, ty číselné indexy 837 00:56:36,610 --> 00:56:39,610 protože teď máme řetězec indexy. 838 00:56:39,610 --> 00:56:44,800 Nyní používáme foreach smyčky, které znovu, doufejme, že použité v pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach smyčky bude jen vědět, každou část seznamu. 840 00:56:48,930 --> 00:56:52,450 A to nemusí vědět přesně číselný index, který máte. 841 00:56:52,450 --> 00:56:56,490 Takže máte syntaxi foreach, takže je to foreach, vložíte pole. 842 00:56:56,490 --> 00:57:00,430 Takže moje pole se nazývá pset, a pak jako, na slovo, 843 00:57:00,430 --> 00:57:04,530 a pak si dát tento místní dočasnou proměnnou, které budete používat 844 00:57:04,530 --> 00:57:10,690 jen pro konkrétní věc, která se děje držet specifické - 845 00:57:10,690 --> 00:57:14,770 jedna instance nebo jedna část pole. 846 00:57:14,770 --> 00:57:18,350 Pset num bude mít jeden, a pak možná to bude mít číslo 6, 847 00:57:18,350 --> 00:57:20,410 a pak to bude mít číslo 2. 848 00:57:20,410 --> 00:57:26,630 Ale to je zaručeno, že projít každou hodnotu, která je v poli. 849 00:57:26,630 --> 00:57:30,530 Užitečné funkce, které byste měli vědět, v PHP se vyžadují, 850 00:57:30,530 --> 00:57:35,880 takže je zajištěno, že budete, včetně některých souborů, echo, exit, prázdný. 851 00:57:35,880 --> 00:57:40,490 Vřele doporučuji vám podívat se na pset 7 a podívat se na těchto funkcí. 852 00:57:40,490 --> 00:57:42,810 Možná budete muset znát ty, 853 00:57:42,810 --> 00:57:47,060 tak bych určitě vědět, co přesně ti jsou všichni dělají. 854 00:57:47,060 --> 00:57:50,080 >> A teď jdeme projít rozsahu velmi rychle. 855 00:57:50,080 --> 00:57:53,490 V rozsahu, PHP je tak trochu funky věci, na rozdíl od C 856 00:57:53,490 --> 00:57:56,170 a tak jsme jen tak rychle projít. 857 00:57:56,170 --> 00:57:58,930 Takže řekněme, že začneme v té šipky, které máme tam. 858 00:57:58,930 --> 00:58:02,900 A budeme začít s $ i. Takže proměnná "i" se bude 0, 859 00:58:02,900 --> 00:58:06,730 a my jsme jen tak, aby tisk je v tom velkém bílém poli tam. 860 00:58:06,730 --> 00:58:09,220 Chystáme se začít s i0, a pak jdeme 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 pak budeme zvyšovat ji v pro smyčce, 863 00:58:15,210 --> 00:58:17,810 a pak to bude hodnota 1. 864 00:58:17,810 --> 00:58:20,070 Jedním z nich je méně než 3, tak to bude projít, že pro smyčce, 865 00:58:20,070 --> 00:58:23,230 a pak budeme vidět, že znovu vytisknout. 866 00:58:23,230 --> 00:58:25,520 Chystáme se ji zvýšit opět na 2, 867 00:58:25,520 --> 00:58:29,860 a 2 je menší než 3, tak to bude projít pro smyčce, a to bude tisknout dvě. 868 00:58:29,860 --> 00:58:35,100 Pak budete na vědomí, že 3 je menší než 3, takže budeme vymanit se z cyklu for. 869 00:58:35,100 --> 00:58:40,050 Takže teď jsme vystoupil, a pak budeme chodit do aFunction. 870 00:58:40,050 --> 00:58:45,010 Dobře. Takže musíte si uvědomit, že tato proměnná, které jsme vytvořili, 871 00:58:45,010 --> 00:58:48,270 'i' proměnná, není místně rozsahem. 872 00:58:48,270 --> 00:58:50,280 To znamená, že to není místní smyčky, 873 00:58:50,280 --> 00:58:58,060 a že proměnná ještě můžeme přistupovat a měnit poté, a to bude ještě efektivnější. 874 00:58:58,060 --> 00:59:02,160 Takže pokud jdete do funkce dnes, uvidíte, že jsme také použít "i" proměnné, 875 00:59:02,160 --> 00:59:05,320 a budeme zvyšovat 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Člověk by si myslel, zpočátku založený na C, že je to kopie "i" proměnné. 877 00:59:09,410 --> 00:59:12,830 Je to úplně něco jiného, ​​což je správné. 878 00:59:12,830 --> 00:59:16,560 Takže když jsme ji vytisknout, budeme tisknout "i" + +, který je do tisku, že 4, 879 00:59:16,560 --> 00:59:19,640 a pak budeme - Omlouvám se. 880 00:59:19,640 --> 00:59:22,030 Pak jdeme na konec z této funkce, 881 00:59:22,030 --> 00:59:24,820 a budeme mít kde, že šipka je právě teď. 882 00:59:24,820 --> 00:59:29,190 To znamená, že poté, nicméně, i když funkce změnit hodnotu "i", 883 00:59:29,190 --> 00:59:32,620 neměla měnit mimo funkci, 884 00:59:32,620 --> 00:59:35,060 proto, že funkce má samostatný prostor. 885 00:59:35,060 --> 00:59:38,960 To znamená, že když jsme echo "i", se to nezměnilo v rámci funkce, 886 00:59:38,960 --> 00:59:43,660 a tak potom budeme opět tisknout 3. 887 00:59:43,660 --> 00:59:47,520 Různé věci, o působnosti v PHP, než v C. 888 00:59:47,520 --> 00:59:51,130 >> Nyní v PHP a HTML. 889 00:59:51,130 --> 00:59:53,510 PHP se používá, aby se webové stránky dynamický. 890 00:59:53,510 --> 00:59:58,660 Je to trochu dělá věci jinak. 891 00:59:58,660 --> 01:00:02,090 Máme se liší od HTML. 892 01:00:02,090 --> 01:00:05,230 S HTML, vždy jen stejnou statickou věc, jako je, jak Rob ukázal, 893 01:00:05,230 --> 01:00:09,370 vzhledem k tomu, PHP, můžete změnit věci, podle toho, kdo je uživatelem. 894 01:00:09,370 --> 01:00:11,830 Takže pokud jsem to, jsem, "Jste přihlášen jako -" a pak jméno, 895 01:00:11,830 --> 01:00:14,420 a můžu změnit název. Takže teď jmenuje Josef, 896 01:00:14,420 --> 01:00:18,880 a to je "o mně", ale pak jsem si také změnit název, aby Tommy. 897 01:00:18,880 --> 01:00:21,700 A to by bylo něco jiného. 898 01:00:21,700 --> 01:00:23,840 Takže můžeme také měnit různé věci o něm, 899 01:00:23,840 --> 01:00:27,070 a ukáže jiný obsah na základě názvu. 900 01:00:27,070 --> 01:00:31,430 Takže PHP může trochu změnit to, co se děje ve vašich webových stránkách. 901 01:00:31,430 --> 01:00:33,540 Stejný zde. Přesto, na vědomí, že mají jiný obsah, 902 01:00:33,540 --> 01:00:38,870 i když jsou technicky stále přístup, že stejné webové stránky na povrchu. 903 01:00:38,870 --> 01:00:43,450 Generování HTML. K dispozici jsou 2 různé způsoby, jak to udělat. 904 01:00:43,450 --> 01:00:48,980 Takže půjdeme do tohoto práva nyní. První způsob je, máte - jo, omlouvám se. 905 01:00:48,980 --> 01:00:51,150 Takže stačí mít pravidelné pro smyčce v PHP, 906 01:00:51,150 --> 01:00:56,270 a pak echo v PHP a echo z HTML. 907 01:00:56,270 --> 01:00:58,720 Použití, co vás Rob ukázal HTML skriptu 908 01:00:58,720 --> 01:01:04,030 a pak pomocí PHP tisknout jen vytisknout na webové stránky. 909 01:01:04,030 --> 01:01:09,520 Alternativní způsob je udělat to jako byste oddělit PHP a HTML. 910 01:01:09,520 --> 01:01:11,940 Takže můžete mít řadu PHP, který začíná pro smyčce, 911 01:01:11,940 --> 01:01:16,020 pak můžete mít řádek kódu HTML v samostatné věci, 912 01:01:16,020 --> 01:01:19,700 a pak ukončit smyčku, opět s PHP. 913 01:01:19,700 --> 01:01:21,800 Takže je to trochu oddělit to. 914 01:01:21,800 --> 01:01:24,020 Na levé straně, můžete se, že máte všechny - 915 01:01:24,020 --> 01:01:26,360 je to jen 1 kus PHP. 916 01:01:26,360 --> 01:01:28,510 Na pravé straně můžete vidět, že máte řadu PHP, 917 01:01:28,510 --> 01:01:32,540 Máte řadu HTML, a budete mít řadu PHP znovu. 918 01:01:32,540 --> 01:01:36,870 Tak oddělování to do toho, co dělají. 919 01:01:36,870 --> 01:01:39,330 A všimněte si, že tak jako tak, pro jednoho z nich, 920 01:01:39,330 --> 01:01:41,980 stále vytisknout obraz, obraz, image, 921 01:01:41,980 --> 01:01:44,540 tak, že HTML ještě je vytištěn stejným způsobem. 922 01:01:44,540 --> 01:01:49,870 A pak budete stále vidět 3 snímky zobrazovat na vašich webových stránkách. 923 01:01:49,870 --> 01:01:52,820 Takže je to 2 různé způsoby, jak dělat totéž. 924 01:01:52,820 --> 01:01:55,060 >> Nyní máme formulářů a žádostí. Jak se vám Rob ukázal, 925 01:01:55,060 --> 01:01:59,400 existují formy HTML, a my se jen vítr přes to. 926 01:01:59,400 --> 01:02:02,040 Máte akce a máte metodu, a vaše akce 927 01:02:02,040 --> 01:02:04,350 druh vám ukáže, kam se chystáte odeslat, a způsob to, zda 928 01:02:04,350 --> 01:02:06,960 to bude GET nebo POST. 929 01:02:06,960 --> 01:02:11,220 A požadavek GET, jak řekl Rob, znamená to, že se chystáte dát ve formě 930 01:02:11,220 --> 01:02:15,760 a uvidíte, že jako URL, zatímco požadavek POST se nezobrazí v adrese URL. 931 01:02:15,760 --> 01:02:17,840 Tak malý rozdíl. 932 01:02:17,840 --> 01:02:19,950 Nicméně, jedna věc, která je podobná věc 933 01:02:19,950 --> 01:02:22,560 je, že POST a GET jsou stejně nejisté. 934 01:02:22,560 --> 01:02:26,430 Takže si může myslet, že jen proto, že nechcete vidět v URL, 935 01:02:26,430 --> 01:02:28,790 to znamená, že POST je bezpečnější, 936 01:02:28,790 --> 01:02:34,420 ale stále můžete vidět ve vašich souborů cookie v informacích, které posíláte. 937 01:02:34,420 --> 01:02:38,260 Takže si nemyslím, že o jedno nebo druhé. 938 01:02:38,260 --> 01:02:42,160 Další věc k poznámce je, že máte také oddíl proměnné. 939 01:02:42,160 --> 01:02:45,850 Vy jste používal toto v pset 7, jak dostat své ID uživatele informace. 940 01:02:45,850 --> 01:02:48,550 Co se stalo, bylo to, že můžete použít tento asociativní pole, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, a pak budete moci přistupovat různé věci 942 01:02:53,310 --> 01:02:57,720 a uložit různé věci přes stránkách. 943 01:02:57,720 --> 01:03:00,750 >> Poslední věc je, že máme SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 a to je programovací jazyk pro správu databází. 945 01:03:04,360 --> 01:03:08,220 Co přesně je databáze? Jsou to kolekce tabulek, 946 01:03:08,220 --> 01:03:10,630 a každá tabulka může mít podobné typy objektů. 947 01:03:10,630 --> 01:03:14,990 Takže jsme měli tabulku uživatelů ve vaší financí pset. 948 01:03:14,990 --> 01:03:20,610 A proč jsou užitečné? Vzhledem k tomu, že je to způsob, jak trvale uchovávat informace. 949 01:03:20,610 --> 01:03:22,840 Je to způsob, jak sledovat, co a správu věcí 950 01:03:22,840 --> 01:03:25,890 a vlastně vidět to na různých stránkách a sledování. 951 01:03:25,890 --> 01:03:29,930 Vzhledem k tomu, pokud jste právě uložte ji na té jedné bezprostřední chvíli 952 01:03:29,930 --> 01:03:33,720 a pak ji použít později, nebudete moci přistupovat něco, co jste si uložili. 953 01:03:33,720 --> 01:03:37,660 Máme čtyři hlavní věci, které používáme pro příkazy SQL. 954 01:03:37,660 --> 01:03:40,190 Máme SELECT, INSERT, DELETE a aktualizace. 955 01:03:40,190 --> 01:03:42,880 Ty jsou velmi důležité pro vás vědět, pro kvíz. 956 01:03:42,880 --> 01:03:45,990 >> Budeme rychle projít vyberte právě teď. 957 01:03:45,990 --> 01:03:48,540 V podstatě jste výběrem řádků z databáze. 958 01:03:48,540 --> 01:03:52,400 Takže pokud máte, tady - 959 01:03:52,400 --> 01:03:56,740 máme tyto dvě odlišné věci, a chceme vybrat z tabulky tříd 960 01:03:56,740 --> 01:04:01,480 kde úžasné - kde v úžasné sloupci hodnota je 1. 961 01:04:01,480 --> 01:04:04,460 Takže si můžete prohlédnout zde, máme tyto dvě věci název třídy, 962 01:04:04,460 --> 01:04:08,490 CS50 a Stat110, a máme třídy ID a heslo. 963 01:04:08,490 --> 01:04:13,150 Takže chceme-li vybrat všechny uvedené informace. 964 01:04:13,150 --> 01:04:17,480 Pak můžete vidět tady, že je to trochu vybírání z té úžasné sloupce, 965 01:04:17,480 --> 01:04:25,170 kde všechny věci jsou 1, a pak to má ID třídy, název třídy a slogan, který se může vybrat. 966 01:04:25,170 --> 01:04:28,100 Jak přesně to děláte v kódu? Musíte použít PHP. 967 01:04:28,100 --> 01:04:33,830 Tak to je něco o tom, jak PHP a SQL se vztahují ke každému jiný. 968 01:04:33,830 --> 01:04:38,130 Nyní máme kód, a budeme používat naše funkce dotazu 969 01:04:38,130 --> 01:04:41,370 jako jsme to udělali v pset 7, a budeme spuštění dotazu SQL. 970 01:04:41,370 --> 01:04:43,870 Pak budeme mít - 971 01:04:43,870 --> 01:04:46,280 musíme vždy ověřit, zda Row trojitý rovný-li false. 972 01:04:46,280 --> 01:04:49,010 Takže znovu, budete chtít zkontrolovat typ a hodnotu, 973 01:04:49,010 --> 01:04:53,880 a pak, pokud to nefunguje, pak budete chtít omluvit, jako obvykle, jak jsme to udělali v pset 7. 974 01:04:53,880 --> 01:04:55,870 V opačném případě budete chtít procházet všechno se ti hodit 975 01:04:55,870 --> 01:04:59,410 foreach smyčky, které jsme právě přešel. 976 01:04:59,410 --> 01:05:01,280 Teď, když jsme průchozí a udělali jsme to v minulosti, 977 01:05:01,280 --> 01:05:05,080 předpokládejme, že náš dotaz prošel, teď máme smyčky foreach. 978 01:05:05,080 --> 01:05:11,050 A první řádek má, takže tady je řada, tady, je to zabalený v krabici. 979 01:05:11,050 --> 01:05:14,010 Bude to vytisknout všechny informace, které se to dostali. 980 01:05:14,010 --> 01:05:18,070 Takže to bude tisknout na dně "Wanna Learn HTML?" 981 01:05:18,070 --> 01:05:23,370 Pak to bude jít na další řádek, protože je dokončena první pro smyčce, 982 01:05:23,370 --> 01:05:26,510 a tak pak to bude tisknout druhý řádek z toho, 983 01:05:26,510 --> 01:05:32,120 který se bude STAT110, Najděte všechny okamžiky. 984 01:05:32,120 --> 01:05:34,290 >> Jedna poslední věc je na SQL zabezpečení. 985 01:05:34,290 --> 01:05:37,300 Vím, že David se dotkl na to trochu v přednášce. 986 01:05:37,300 --> 01:05:40,730 Můžete si přečíst později. Je to opravdu legrační. 987 01:05:40,730 --> 01:05:45,320 SQL Injection je trochu ošemetná věc. 988 01:05:45,320 --> 01:05:49,890 Řekněme, že jste právě držet těchto proměnných přímo do dotazu, 989 01:05:49,890 --> 01:05:52,290 jak můžete vidět v tomto prvním řádku. 990 01:05:52,290 --> 01:05:54,520 Takže se zdá v pořádku, že jo? Jenom uvedení na uživatelské jméno 991 01:05:54,520 --> 01:05:58,820 a heslo k SQL dotazu, a chcete, aby loď ji a získat to, co je v tabulce dat. 992 01:05:58,820 --> 01:06:01,450 To se zdá dost jednoduché. Takže řekněme, že někdo dává, 993 01:06:01,450 --> 01:06:04,910 k zadání hesla, tento OR textu přímo zde - 994 01:06:04,910 --> 01:06:06,780 by měla být skutečně v červeném poli. 995 01:06:06,780 --> 01:06:11,920 Takže řekněme, že dát toto heslo do - to je to, co vstoupí. 996 01:06:11,920 --> 01:06:16,520 Tak oni jsou uvedení OR "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Druh hloupá hesla mít. 998 01:06:20,880 --> 01:06:25,070 Nyní se pojďme prostě nahradit ji, a budete na vědomí, že v tomto SQL dotazu podnikem, 999 01:06:25,070 --> 01:06:29,090 vyhodnocuje vždy pravda, protože budete na vědomí, že 1000 01:06:29,090 --> 01:06:32,240 můžete SQL dotazu vybrat všechny tyto informace 1001 01:06:32,240 --> 01:06:35,420 nebo můžete jen 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Tak to je vždycky hodnotit na hodnotu true. 1003 01:06:41,030 --> 01:06:46,610 Že to nebude opravdu pracovat, protože to znamená, že hacker může proniknout do vašeho systému. 1004 01:06:46,610 --> 01:06:49,300 Řešením tohoto problému je, že musíte používat systém CHOP, 1005 01:06:49,300 --> 01:06:51,360 což znamená, že budete muset použít otazníky, 1006 01:06:51,360 --> 01:06:53,350 což je to, co vy používané v pset 7, 1007 01:06:53,350 --> 01:06:57,620 kde budete používat otazník v místě, kam chcete dát něco, 1008 01:06:57,620 --> 01:07:01,430 a pak budete mít čárku, a pak budete mít později, 1009 01:07:01,430 --> 01:07:07,610 po vašem řetězec, různé proměnné, které chcete nahradit do otazníkem. 1010 01:07:07,610 --> 01:07:10,330 Takže budete poznamenat, že teď mám tyhle červené otazníky. 1011 01:07:10,330 --> 01:07:15,420 Pak jsem dal proměnné po mých strun, takže vím, že je nahradit v tomto pořadí poté. 1012 01:07:15,420 --> 01:07:18,470 To zajistí, že pokud to někdo dělá takhle, 1013 01:07:18,470 --> 01:07:24,050 a mají nebo 1 = 1 situaci, že se ujistěte, 1014 01:07:24,050 --> 01:07:30,490 na zadním konci, ujistěte se, že nebude vlastně rozbít dotazu SQL. 1015 01:07:30,490 --> 01:07:33,660 Dobře, tak to je docela hodně to, vichřice PHP a SQL. 1016 01:07:33,660 --> 01:07:41,520 Hodně štěstí vám všem, a teď se ve státě Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Dobře všichni. Je čas jít přes nějaký JavaScript 1018 01:07:44,270 --> 01:07:48,840 a některé další věci velmi rychle, takže nemáme dnes večer držet vás. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Ano. JavaScript je docela cool věc, údajně. 1020 01:07:56,930 --> 01:07:59,090 Věci, které opravdu potřebujete vědět o JavaScriptu, je to něco jako 1021 01:07:59,090 --> 01:08:03,810 na straně klienta konec, jaké jsou vaše webové aplikace se bude dělat. 1022 01:08:03,810 --> 01:08:08,280 Je tu několik věcí, které prostě nechtějí starat o celou dobu na straně serveru. 1023 01:08:08,280 --> 01:08:12,880 Všechny malé interakce, zvýraznění jednu věc, že ​​něco zmizí. 1024 01:08:12,880 --> 01:08:15,340 Opravdu nechci mluvit k serveru po celou dobu za to. 1025 01:08:15,340 --> 01:08:18,069 A něco z toho není ani možné provést na straně serveru. 1026 01:08:18,069 --> 01:08:21,899 To je důvod, proč potřebujeme něco jako JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Skvělé věci o JavaScriptu: To je dynamicky napsaný. 1028 01:08:24,359 --> 01:08:27,149 Co to znamená, že váš program nepotřebuje vědět, 1029 01:08:27,149 --> 01:08:30,970 co, přesně, proměnné jsou, když píšete to. 1030 01:08:30,970 --> 01:08:34,510 Je to tak nějak přijít na to, jak to běží. 1031 01:08:34,510 --> 01:08:37,520 Další věci, které jsou v pohodě o tom: Je to složená závorka jazyk, 1032 01:08:37,520 --> 01:08:41,359 což znamená, že syntaxe je podobná C a PHP. 1033 01:08:41,359 --> 01:08:47,050 Nemusíte dělat hodně přepracovat, když se učíte JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Zde máme trochu JavaScriptu. 1035 01:08:49,180 --> 01:08:52,560 Zajímavá věc, tady je to, že když se podíváte na to, 1036 01:08:52,560 --> 01:08:56,330 máme trochu JavaScriptu tady v tagu hlavy. 1037 01:08:56,330 --> 01:08:59,479 Co je to v podstatě jen patří soubor JavaScript. 1038 01:08:59,479 --> 01:09:02,260 To je jeden způsob, jak můžete zahrnout JavaScript do svého programu. 1039 01:09:02,260 --> 01:09:06,910 Pak druhý trochu je vlastně nějaký inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 velmi podobný styl inline s CSS, 1041 01:09:10,790 --> 01:09:16,180 a vy jste jen psát nějaký kód velmi rychle tam. 1042 01:09:16,180 --> 01:09:18,120 JavaScript má pole. 1043 01:09:18,120 --> 01:09:20,850 Jen další způsob, jak udržet dat kolem, velmi užitečné. 1044 01:09:20,850 --> 01:09:25,180 Velmi příjemné a snadné syntaxe. 1045 01:09:25,180 --> 01:09:29,870 Můžete použít hranaté závorky pro přístup vše a udržet vše pohromadě. 1046 01:09:29,870 --> 01:09:35,020 Nic příliš složitá. 1047 01:09:35,020 --> 01:09:38,630 Super věc o JavaScriptu a skriptovacích jazyků obecně 1048 01:09:38,630 --> 01:09:40,920 je, že nemusíte mít strach o velikosti pole. 1049 01:09:40,920 --> 01:09:43,880 Stačí použít Array.length a sledovat to, 1050 01:09:43,880 --> 01:09:46,960 a také pole můžete zvětšit nebo zmenšit, jak budete potřebovat, aby to. 1051 01:09:46,960 --> 01:09:49,279 Takže vy ani nemusíte obávat jakéhokoliv druhu, 1052 01:09:49,279 --> 01:09:57,050 oh ne, musím přidělit více věcí, nebo něco takového. 1053 01:09:57,050 --> 01:10:00,090 >> Super věc je, že JavaScript je něco, co nazývá objekty. 1054 01:10:00,090 --> 01:10:04,800 Je to objektově-orientovaný jazyk, takže to, co bylo, je, v podstatě, 1055 01:10:04,800 --> 01:10:10,100 způsob, jak pro vás, aby skupiny dat dohromady, poněkud podobný struct, 1056 01:10:10,100 --> 01:10:17,280 ale můžete přistupovat jako struct nebo v syntaxi asociativní pole. 1057 01:10:17,280 --> 01:10:22,520 Je to docela jednoduché, a co můžete udělat s tímto je skupina dat dohromady 1058 01:10:22,520 --> 01:10:24,810 pokud máte spoustu údajů, které se vztahuje. 1059 01:10:24,810 --> 01:10:26,850 Vzhledem k tomu, že je to všechno, co potřebuješ k popisu automobilu, 1060 01:10:26,850 --> 01:10:29,050 nemusíte ho mít v spoustu různých míst. 1061 01:10:29,050 --> 01:10:35,300 Můžete jen držet je do 1 objekt v JavaScriptu. 1062 01:10:35,300 --> 01:10:39,090 Jak asi víte, Iterace je jedním z těch nudné úkoly. 1063 01:10:39,090 --> 01:10:43,810 Prostě to přes znovu. Musíte mluvit každý objekt v autě, 1064 01:10:43,810 --> 01:10:47,340 nebo budete muset projít každou položku v seznamu, nebo něco takového. 1065 01:10:47,340 --> 01:10:51,770 Takže JavaScript musí, podobně jako PHP, syntaxe foreach. 1066 01:10:51,770 --> 01:10:54,590 V tomto případě, je to ve smyčce. 1067 01:10:54,590 --> 01:10:57,300 Chcete-li používat pouze na objekty to. 1068 01:10:57,300 --> 01:11:01,030 Tam jsou některé problémy, které se vyskytují, pokud používáte tento na polích. 1069 01:11:01,030 --> 01:11:03,750 Obecně je jedna z těch, co se však, že je velmi užitečné, 1070 01:11:03,750 --> 01:11:06,590 protože jste odstranit spoustu režie 1071 01:11:06,590 --> 01:11:10,270 protože nemusíte vytáhnout všechno, co v objektu sami. 1072 01:11:10,270 --> 01:11:12,300 Nemusíte si pamatovat všechny klíčové jména. 1073 01:11:12,300 --> 01:11:18,270 Prostě nějak dostat je zpět v této syntaxi. 1074 01:11:18,270 --> 01:11:21,500 V tomto, FOR, chcete jen vzpomenout 1075 01:11:21,500 --> 01:11:27,180 že jste se dostal zpátky všechny klíče, velmi podobným způsobem jako tabulky hash. 1076 01:11:27,180 --> 01:11:30,880 Pokud si pamatujete z toho, když by se dal v řetězci byste mohli dostat něco ven 1077 01:11:30,880 --> 01:11:33,840 které by měly přiřazenu hodnotu s ním. 1078 01:11:33,840 --> 01:11:36,360 Co můžete dělat s tímto je, můžete říct, v pořádku, 1079 01:11:36,360 --> 01:11:42,120 Dal jsem do auta a zavolal jsem to Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Takže si můžete dát v řetězci Ferrari později, a můžete dostat to ven. 1081 01:11:45,290 --> 01:11:50,000 A můžete to udělat ve smyčce, se v cyklu. 1082 01:11:50,000 --> 01:11:53,320 Takže jen více o objektech. Klíčovou věcí z toho, co potřebujete mít na paměti, 1083 01:11:53,320 --> 01:12:00,340 je, že můžete použít objekt struct jako syntaxe, kdykoli budete chtít s nimi, 1084 01:12:00,340 --> 01:12:04,590 výjimkou případů, kdy to, co si bude používat jako řetězec není platný název proměnné. 1085 01:12:04,590 --> 01:12:07,650 Takže když se podíváte na to, že máme klíč s mezerami. 1086 01:12:07,650 --> 01:12:12,500 No, pokud jste měli dát object.key, prostor, s, prostor, prostor, 1087 01:12:12,500 --> 01:12:15,320 že by se prostě nemělo smysl syntakticky. 1088 01:12:15,320 --> 01:12:22,730 Takže si jen můžete udělat s tímto druhem syntaxe držáku. 1089 01:12:22,730 --> 01:12:26,520 >> Také JavaScript je velmi prostor-moudré PHP. 1090 01:12:26,520 --> 01:12:29,050 Máte dva způsoby, jak řešit prostor. 1091 01:12:29,050 --> 01:12:31,960 Nemůžete mít var před proměnnou, 1092 01:12:31,960 --> 01:12:34,060 a to jen znamená, že to je globální. 1093 01:12:34,060 --> 01:12:37,050 Můžete jej vidět odkudkoli. Dokonce i když jste se dát do příkazu if, 1094 01:12:37,050 --> 01:12:42,430 nikde jinde v kódu po tomto okamžiku jste mohli vidět, že proměnné. 1095 01:12:42,430 --> 01:12:46,730 Další věc, i když je s var, je omezena na cokoliv funkce jste palců 1096 01:12:46,730 --> 01:12:48,870 Pokud nejste ve funkci, dobře, je to globální. 1097 01:12:48,870 --> 01:12:53,900 Ale pokud jste ve funkci je viditelná pouze v rámci této funkce. 1098 01:12:53,900 --> 01:12:56,420 Nemám příklad, ale, jo. Je to jedna z těch věcí, kde 1099 01:12:56,420 --> 01:12:59,900 můžete spravovat to, co proměnné chcete být globální, 1100 01:12:59,900 --> 01:13:03,810 co proměnné, které chtějí být lokální, ale musíte dávat pozor na to, 1101 01:13:03,810 --> 01:13:06,890 protože nemáte typ jemné ovládání zrna, co děláte v C, 1102 01:13:06,890 --> 01:13:15,820 kde pokud něco je deklarován v cyklu for, bude to, aby zůstali v tom, že pro smyčce. 1103 01:13:15,820 --> 01:13:18,790 Co jsme vlastně záleží používáte JavaScript pro manipuluje webové stránky, ne? 1104 01:13:18,790 --> 01:13:21,800 Myslím, že je důvod, proč to děláme. 1105 01:13:21,800 --> 01:13:23,840 >> K tomu budeme používat něco, co nazývá DOM. 1106 01:13:23,840 --> 01:13:25,850 Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 V podstatě to, co to udělá, je, že se všechny vaše HTML 1108 01:13:29,430 --> 01:13:34,110 a modely ji do spoustu objektů, které jsou vnořeny do sebe. 1109 01:13:34,110 --> 01:13:37,080 Můžete začít s něčím, jako je tento. 1110 01:13:37,080 --> 01:13:44,770 Máte, na pravé pro mě, parta kódu tam, že je to druh - 1111 01:13:44,770 --> 01:13:46,640 Člověk by si myslel, že by bylo velmi obtížné manipulovat, 1112 01:13:46,640 --> 01:13:48,700 protože byste se analýze přes spoustu textu 1113 01:13:48,700 --> 01:13:52,080 a mají se dát sebe věci. A co když to není správně naformátován? 1114 01:13:52,080 --> 01:13:54,880 Špatné věci se bude dít. 1115 01:13:54,880 --> 01:13:58,140 Takže JavaScript se postará o to za vás, a vy dostanete příjemnou datovou strukturu, 1116 01:13:58,140 --> 01:14:01,390 jako ten, po mé levici, kde stačí mít doklad, 1117 01:14:01,390 --> 01:14:03,530 a uvnitř se, že máte něco jako HTML, 1118 01:14:03,530 --> 01:14:05,600 a uvnitř, že máte hlavu a tělo, 1119 01:14:05,600 --> 01:14:08,420 a v té hlavě máte titul, a tak dále, a tak dále, a tak dále. 1120 01:14:08,420 --> 01:14:11,810 To zjednodušuje manipulaci webové stránky tak, že je to jen, 1121 01:14:11,810 --> 01:14:14,190 oh, chci mluvit k tomuto objektu. 1122 01:14:14,190 --> 01:14:21,340 Seřadit velmi podobným způsobem byste mluvit s jiným objektem, kterou jste uzavřeli sami. 1123 01:14:21,340 --> 01:14:25,980 Jak jsem řekl, vše DOM v objektu dokumentu. 1124 01:14:25,980 --> 01:14:29,290 Buď je to jen jedno místo, a pak můžete jít v něm najít věci, 1125 01:14:29,290 --> 01:14:33,880 a můžete to udělat - to je starý styl, jak to udělat, až tam, 1126 01:14:33,880 --> 01:14:38,130 kde děláte document.getElementById, a pak jméno, 1127 01:14:38,130 --> 01:14:42,420 a jak jste si asi řekne, to dostane velmi nemotorný po chvíli. 1128 01:14:42,420 --> 01:14:44,480 Takže jste asi nechcete dělat, že. To je důvod, proč máme 1129 01:14:44,480 --> 01:14:48,760 Další věc, kterou budeme o tom mluvit po tomto. 1130 01:14:48,760 --> 01:14:52,510 Klíčovou věcí je zde to, že v pořádku, budete muset všechny tyto prvky, jo? 1131 01:14:52,510 --> 01:14:56,400 Takže možná bych mohl změnit barvu něco, když se stránka načte. 1132 01:14:56,400 --> 01:14:58,380 Tak co? Co když je moje uživatelská klikne něco? 1133 01:14:58,380 --> 01:15:00,540 Chci, aby to něco zajímavého, když kliknou něco. 1134 01:15:00,540 --> 01:15:02,600 To je důvod, proč máme událostí. 1135 01:15:02,600 --> 01:15:05,330 Můžete v podstatě najít libovolný prvek ve vašem DOM, 1136 01:15:05,330 --> 01:15:08,560 a pak říct, hej. Když se to načte nebo někdo klikne, 1137 01:15:08,560 --> 01:15:11,410 nebo když se myši nad ním, něco s ním. 1138 01:15:11,410 --> 01:15:15,330 A to, co máte, je, budete mít funkce, které zvládne za vás. 1139 01:15:15,330 --> 01:15:17,980 Tyto funkce jsou obslužné rutiny událostí. 1140 01:15:17,980 --> 01:15:20,440 Jaké Jsou - je to jen fantazie způsob, jak říkat, 1141 01:15:20,440 --> 01:15:23,500 Tato funkce se provádí pouze tehdy, když se tato událost stane. 1142 01:15:23,500 --> 01:15:28,070 Tak to zpracovává událost, která nastane. 1143 01:15:28,070 --> 01:15:30,810 To je, jak byste vyložit obslužnou rutinu události. 1144 01:15:30,810 --> 01:15:34,750 Mám nějaké tlačítko, a když na něj kliknete, to exploduje. 1145 01:15:34,750 --> 01:15:40,560 Takže se nemusíte klikněte na tlačítko. 1146 01:15:40,560 --> 01:15:42,910 To je jeden způsob, jak se blíží to, že jo? 1147 01:15:42,910 --> 01:15:46,430 Máte tag tlačítko, a na kliknutí budete mít řetězec, který říká, 1148 01:15:46,430 --> 01:15:50,460 oh, mimochodem, já to vybuchuje věc pro mě. 1149 01:15:50,460 --> 01:15:53,990 Jinak je to prostě jako normální tlačítko, kterým jste právě vytvořili. 1150 01:15:53,990 --> 01:15:56,550 Můžete to udělat také jiný způsob, 1151 01:15:56,550 --> 01:16:02,770 uchopením DOM element, ale budeme šetřit, že poté, co mluvíme o jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Je to knihovna, která je cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Můžete ji použít na cokoliv. 1154 01:16:09,580 --> 01:16:12,090 A to jen vám dává mnoho nástrojů pro práci s. 1155 01:16:12,090 --> 01:16:15,850 Vzhledem k tomu, JavaScript, zatímco silný, nemá všechny nástroje, které potřebujete 1156 01:16:15,850 --> 01:16:20,550 po vybalení z krabice opravdu řešení webové aplikace budete chtít dělat. 1157 01:16:20,550 --> 01:16:24,650 Tak to zjednodušuje spoustu věcí, dává vám hodně funkcí 1158 01:16:24,650 --> 01:16:28,760 po vybalení z krabice, které byste normálně muset napsat sám, znovu a znovu a znovu. 1159 01:16:28,760 --> 01:16:31,600 A právě dělá věci velmi jednoduché. 1160 01:16:31,600 --> 01:16:35,780 Máte také selektory, které vám umožní vzít všechny ty prvky, 1161 01:16:35,780 --> 01:16:42,800 od DOM mnohem více jednoduše, aniž by museli používat tyto velmi dlouhé volání funkce. 1162 01:16:42,800 --> 01:16:46,630 Více informací o těchto selektory. Máte, tam jste, řekněme, 1163 01:16:46,630 --> 01:16:49,800 Chci se dostat prvek s ID "skály." 1164 01:16:49,800 --> 01:16:56,450 No, jQuery, je to jen $ a pak řetězec, který má půl kila, a pak "skála". 1165 01:16:56,450 --> 01:17:01,960 Je to velmi jednoduché a mnohem rychlejší než tradiční JavaScript způsob řešení tohoto problému. 1166 01:17:01,960 --> 01:17:06,120 A máte podobné věci pro třídy a typy prvků. 1167 01:17:06,120 --> 01:17:08,140 jQuery je - jedním z chladné rysy se můžete trochu stlačit 1168 01:17:08,140 --> 01:17:14,350 se svými dotazy na vašeho DOM velmi, velmi rychle. 1169 01:17:14,350 --> 01:17:18,980 Teď jsme zpátky do zpracování událostí, a to je to, jak byste zvládnout jednu událost v jQuery. 1170 01:17:18,980 --> 01:17:23,090 Takže, co budeme zde říkáme, v pořádku. Mám tag script, že jo? 1171 01:17:23,090 --> 01:17:25,400 Tak jsem si to inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Co budeme dělat, je, že se chystáte říci, v pořádku. 1173 01:17:27,750 --> 01:17:30,860 Pokud je dokument připraven, což znamená, že dokument je načten, 1174 01:17:30,860 --> 01:17:34,660 jsme se jít do této funkce, a budeme říkat, všechno v pořádku, 1175 01:17:34,660 --> 01:17:37,060 Tato funkce je ve skutečnosti dělá něco jiného. 1176 01:17:37,060 --> 01:17:42,320 Je to v podstatě říká, dobře, dej mi prvek s ID "MojeID". 1177 01:17:42,320 --> 01:17:47,960 A pak dát tento funkční rutinu, který provede, když na něj kliknete. 1178 01:17:47,960 --> 01:17:49,820 V podstatě to, co to dělá, je, že říká, všechno v pořádku. 1179 01:17:49,820 --> 01:17:52,630 Načtení stránky, takže budu v, najít tento prvek, 1180 01:17:52,630 --> 01:17:56,420 dát tuto obslužnou rutinu události, a to v podstatě nastaví vaše stránky pro vás. 1181 01:17:56,420 --> 01:18:00,520 A to je to, jak budete chtít přemýšlet o zpracování událostí. 1182 01:18:00,520 --> 01:18:06,310 Stačí jen chtít přemýšlet o tom, v pořádku, když se vyskytne něco, co chci, aby se stalo? 1183 01:18:06,310 --> 01:18:10,520 Nechcete myslet, jo, já potřebuji, aby se ujistil rozhovory To, co k této věci, 1184 01:18:10,520 --> 01:18:14,660 tahle věc bla bla bla, protože si jen chcete mluvit, co se týče událostí. 1185 01:18:14,660 --> 01:18:17,650 Když se to stane, to se stane. Když se to stane, že se stane. 1186 01:18:17,650 --> 01:18:20,240 A kdyby to vyvolat další věci, to je skvělé. 1187 01:18:20,240 --> 01:18:22,150 Ale nechcete, aby se pokusila udělat složitý kód 1188 01:18:22,150 --> 01:18:24,130 kam spouštění více věcí najednou, 1189 01:18:24,130 --> 01:18:28,860 protože jste právě chystá dát si bolest hlavy. 1190 01:18:28,860 --> 01:18:32,340 >> Pořádku. Nyní se můžeme dostat naše stránky pro zpracování událostí, 1191 01:18:32,340 --> 01:18:35,640 ale řekněme, že moje uživatel klepne na tlačítko. 1192 01:18:35,640 --> 01:18:38,040 Co když chci poslat tuto žádost zpět na server, 1193 01:18:38,040 --> 01:18:41,100 ale já nechci, aby znovu načíst stránku, protože by museli znovu načíst novou stránku 1194 01:18:41,100 --> 01:18:44,390 pokaždé, když se dostane trochu nudný, a proč ho potřebuji 1195 01:18:44,390 --> 01:18:47,430 znovu strhnout záhlaví, zápatí a znovu, 1196 01:18:47,430 --> 01:18:49,670 a všechny prvky na stránce znovu 1197 01:18:49,670 --> 01:18:53,180 jen osvěžit pozdrav nebo čas? 1198 01:18:53,180 --> 01:18:55,290 Takže to je důvod, proč máme něco jako Ajax. 1199 01:18:55,290 --> 01:18:59,150 Co můžeme dělat tady s Ajax je můžeme říci, v pořádku, 1200 01:18:59,150 --> 01:19:01,290 Chci poslat nějaká data na server, 1201 01:19:01,290 --> 01:19:04,010 a chci se dostat odpověď zpět, abych mohl aktualizovat stránku, 1202 01:19:04,010 --> 01:19:12,120 nebo možná jen udělat nějakou algoritmický výpočet, který nemusí nutně ukázat nic, co by uživatele. 1203 01:19:12,120 --> 01:19:15,500 Co je potřeba udělat? No, budete potřebovat adresu URL, kterou potřebujete mluvit. 1204 01:19:15,500 --> 01:19:18,650 Váš server nejen magicky poslouchat odnikud. 1205 01:19:18,650 --> 01:19:21,960 Musíte mít zvláštní místo, které posíláte data. 1206 01:19:21,960 --> 01:19:26,240 A budete také potřebovat nějaká data k odeslání, nebo možná je to dotaz bezdatovými. 1207 01:19:26,240 --> 01:19:31,380 Chcete jen ping na server a říct, hej, já jsem naživu, nebo něco takového. 1208 01:19:31,380 --> 01:19:35,150 A pak budete chtít funkci, která v podstatě zpracovává s úspěchem. 1209 01:19:35,150 --> 01:19:38,250 Řekněme, že se vrátíš nějaké informace ze serveru, 1210 01:19:38,250 --> 01:19:42,960 a chcete změnit název uživatele na jejich straně. 1211 01:19:42,960 --> 01:19:44,930 Takže byste získat informace zpět, 1212 01:19:44,930 --> 01:19:48,860 a vy byste tlačit, že na obrazovce. 1213 01:19:48,860 --> 01:19:51,170 Co se stane, je, když je stránka připravena, 1214 01:19:51,170 --> 01:19:56,500 vytvořit na funkci click na toto tlačítko s názvem přivítání. 1215 01:19:56,500 --> 01:19:58,810 Co to tedy dělá, je, když je toto tlačítko tlačil, 1216 01:19:58,810 --> 01:20:03,700 mluvíte greetings.php, uděláte požadavek POST, 1217 01:20:03,700 --> 01:20:07,290 a říkáš, hej, dej mi něco z vaší stránky. 1218 01:20:07,290 --> 01:20:09,890 Nemáme opravdu potřeba popisovat, ale greetings.php, 1219 01:20:09,890 --> 01:20:12,480 Řekněme, vrací "ahoj svět." 1220 01:20:12,480 --> 01:20:15,650 Takže se vrátíme tento "Hello World", a na úspěchu tohoto, 1221 01:20:15,650 --> 01:20:20,730 za předpokladu, že nic není v pořádku, pak stačí jít do této cílové místo 1222 01:20:20,730 --> 01:20:25,720 že jsme upřesnili a my jsme jen držet odpověď tam. 1223 01:20:25,720 --> 01:20:31,560 A to je velmi jednoduchý způsob vytvoření dotazu Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Velmi rychle, Rob nějak zmínil již, 1225 01:20:34,340 --> 01:20:37,170 co se může pokazit, se špatné věci se stávají, 1226 01:20:37,170 --> 01:20:42,660 takže se chcete seznámit s těmito kódy odezvy HTTP. 1227 01:20:42,660 --> 01:20:46,030 Co jsou to jsou jen jako, 200, vše proběhlo v pořádku. 1228 01:20:46,030 --> 01:20:48,670 Něco jiného, ​​špatné věci se stalo. 1229 01:20:48,670 --> 01:20:50,790 Je to obecně, co si chcete zapamatovat. 1230 01:20:50,790 --> 01:20:53,440 Ale je příjemné vědět, že všechny z nich. 1231 01:20:53,440 --> 01:20:55,970 A konečně, jakmile jsme prošli všechno, 1232 01:20:55,970 --> 01:20:58,680 musíme velmi rychle mluvit o designu, 1233 01:20:58,680 --> 01:21:00,620 a pak můžeme nechat vše odejít. 1234 01:21:00,620 --> 01:21:03,410 Design. Věci, které chcete mít na paměti. 1235 01:21:03,410 --> 01:21:06,950 Zeptejte se sami sebe na tyto otázky: Kdo bude používat tento? 1236 01:21:06,950 --> 01:21:09,580 Jaké budou používat jej? Co moji uživatelé záleží? 1237 01:21:09,580 --> 01:21:11,750 Co se to, co je zajímá? 1238 01:21:11,750 --> 01:21:14,500 Jste prostě nechtějí, aby se o aplikaci a nechat ji jen růst 1239 01:21:14,500 --> 01:21:18,270 a stát se to obří, všechny náročné věc, kterou nemůžete ani dokončit. 1240 01:21:18,270 --> 01:21:23,900 Chcete-li mít jednotlivé cíle a plány, a věci, které chcete oslovit. 1241 01:21:23,900 --> 01:21:29,000 Ať je to snadné. To vše říká, v podstatě, 1242 01:21:29,000 --> 01:21:34,950 aby bylo snadné pro uživatele, aby jej používat, nedělají to obří blob textu jako je tento snímek je ve skutečnosti. 1243 01:21:34,950 --> 01:21:38,020 Prostě chci, aby to bylo něco, kde je to velmi snadné pro někoho jít 1244 01:21:38,020 --> 01:21:40,800 a dělat to, co chtějí dělat. 1245 01:21:40,800 --> 01:21:42,920 Nechcete, aby se navigovat 5 stran 1246 01:21:42,920 --> 01:21:45,460 se dostat do primární funkcí vašeho webu. 1247 01:21:45,460 --> 01:21:49,290 Pokud Google měl 5 stran, než byste mohli ještě hledat něco, 1248 01:21:49,290 --> 01:21:53,080 nikdo by se používat. 1249 01:21:53,080 --> 01:21:55,890 A konečně, prototyp papír, focus group. 1250 01:21:55,890 --> 01:21:59,220 Mají dobrý design a testování postupů. 1251 01:21:59,220 --> 01:22:00,730 Jen proto, že si myslíte, že to funguje u vás, 1252 01:22:00,730 --> 01:22:04,860 neznamená, že někdo jiný 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]