1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. Malan: Dobre. 3 00:00:12,900 --> 00:00:16,790 Takže vitajte na vôbec prvý CS50 posmrtné na kvíz. 4 00:00:16,790 --> 00:00:18,340 Mysleli sme, že slávnostne táto tradícia v tomto roku. 5 00:00:18,340 --> 00:00:20,960 A to bude príležitosť prejsť 6 00:00:20,960 --> 00:00:22,220 riešenie kvízu. 7 00:00:22,220 --> 00:00:26,160 A budeme zrýchliť alebo spomaliť na základe na záujme tých, ktorí tu. 8 00:00:26,160 --> 00:00:29,730 >> Takže ste asi tu, pretože ste zaujímalo, ako by ste mohli mať alebo 9 00:00:29,730 --> 00:00:31,170 mala odpovedať na niektoré z týchto problémov. 10 00:00:31,170 --> 00:00:33,300 Tak prečo by sme sa pozrieť Spočiatku tejto sekcii? 11 00:00:33,300 --> 00:00:34,450 Tak ako sa reťazca. 12 00:00:34,450 --> 00:00:37,600 To vám dal tri rôzne verzie programu, ktorý bol nakoniec 13 00:00:37,600 --> 00:00:39,650 chcel získať reťazec od užívateľa. 14 00:00:39,650 --> 00:00:42,530 Či alebo nie to robilo to bolo ponechané na vás zistiť. 15 00:00:42,530 --> 00:00:45,150 >> A pýtali sme sa v prvej otázke, 0, Predpokladám, že verzia 1 je 16 00:00:45,150 --> 00:00:46,400 zostavil a popravený. 17 00:00:46,400 --> 00:00:48,860 Prečo môže program segfault? 18 00:00:48,860 --> 00:00:51,150 Na prvý pohľad, nejaké návrhy , Prečo? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Jo. 21 00:00:54,489 --> 00:00:59,260 >> DIVÁKOV: Tak Spomínam si na to v Predchádzajúci príklad pri pohľade na 22 00:00:59,260 --> 00:01:05,506 char * s, a videl scan S a vidieť, pretože je to ukazovateľ, ako 23 00:01:05,506 --> 00:01:07,971 to ovplyvnilo to, čo ste skenovať? 24 00:01:07,971 --> 00:01:10,940 Je to to alebo adresa s? 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. Malan: OK. 26 00:01:11,180 --> 00:01:11,480 Dobrá. 27 00:01:11,480 --> 00:01:14,830 Takže v konečnom dôsledku, zdroj akéhokoľvek problému sa pravdepodobne bude znižovať 28 00:01:14,830 --> 00:01:16,210 tejto premennej s 29 00:01:16,210 --> 00:01:17,280 A to je naozaj variabilný. 30 00:01:17,280 --> 00:01:19,900 Dátový typ tejto premennej je char *, čo znamená, že to bude 31 00:01:19,900 --> 00:01:22,570 obsahovať adresu charakteru. 32 00:01:22,570 --> 00:01:23,850 A v tom spočíva pochopenie. 33 00:01:23,850 --> 00:01:28,330 Bude obsahovať adresu znak alebo, všeobecnejšie, 34 00:01:28,330 --> 00:01:32,110 adresa prvého znaku v celý blok znakov. 35 00:01:32,110 --> 00:01:36,680 >> Ale úlovok je, že skenovanie s, účel život, je daná adresu a vzhľadom 36 00:01:36,680 --> 00:01:40,960 Kód formátu, ako je% s, čítanie reťazec do kusa 37 00:01:40,960 --> 00:01:42,330 Pamäť na tejto adrese. 38 00:01:42,330 --> 00:01:46,040 Ale pretože tam nie je znamienko rovnosti pred že bodkočiarku na prvý 39 00:01:46,040 --> 00:01:49,310 riadok kódu, pretože to nie je v skutočnosti alokovať pamäť s 40 00:01:49,310 --> 00:01:53,020 malloc, pretože nie v skutočnosti alokovať pole nejaké veľkosti, všetky 41 00:01:53,020 --> 00:01:57,620 robíte číta užívateľa vstup z klávesnice do niektorej kompletnej 42 00:01:57,620 --> 00:02:00,490 hodnota odpadky, ktoré je s východiskovým. 43 00:02:00,490 --> 00:02:04,480 Takže šance sú vy budete segfault ak že adresa nie je len tak nestane 44 00:02:04,480 --> 00:02:08,009 byť hodnota, ktorú môžete, v skutočnosti, napíšte. 45 00:02:08,009 --> 00:02:10,889 Tak zlé neprerozdeliť pamäť tam. 46 00:02:10,889 --> 00:02:13,150 >> Takže v otázke č 1, sme sa spýtali, Predpokladám, že verzia 2 je 47 00:02:13,150 --> 00:02:14,230 zostavil a popravený. 48 00:02:14,230 --> 00:02:15,900 Prečo môže tento program segfault? 49 00:02:15,900 --> 00:02:17,990 Tak toto je menšia buggy. 50 00:02:17,990 --> 00:02:21,470 A je to naozaj len jeden zrejmý spôsob, kde môžete 51 00:02:21,470 --> 00:02:22,810 spustiť segfault tu. 52 00:02:22,810 --> 00:02:23,730 A to je tematické. 53 00:02:23,730 --> 00:02:28,180 Kedykoľvek sme pomocou c v pamäti, čo sa môžete urobiť pre to, prinútiť segfault 54 00:02:28,180 --> 00:02:30,718 vo verzii 2? 55 00:02:30,718 --> 00:02:35,560 >> DIVÁKOV: Ak používate tento vstup v reťazec, ktorý je dlhší ako 49 56 00:02:35,560 --> 00:02:35,975 znaky. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. Malan: Presne tak. 58 00:02:37,260 --> 00:02:41,420 Kedykoľvek vidíte niečo pevnej dĺžky , Pokiaľ ide o pole, vaše 59 00:02:41,420 --> 00:02:44,650 radar by mal ísť preč, že by to mohlo byť problematické, ak si nie ste kontrola 60 00:02:44,650 --> 00:02:45,810 hranice poľa. 61 00:02:45,810 --> 00:02:46,650 A že je tu problém. 62 00:02:46,650 --> 00:02:47,910 Stále pomocou scanf. 63 00:02:47,910 --> 00:02:52,200 Stále pomocou% s, čo znamená, že sa snaží čítať reťazec od užívateľa. 64 00:02:52,200 --> 00:02:56,300 To bude čítať do s, čo v tomto bode, je účinne 65 00:02:56,300 --> 00:02:58,570 adresa bloku pamäti alebo je to ekvivalent. 66 00:02:58,570 --> 00:03:02,080 Je to názov poľa znakov v pamäti. 67 00:03:02,080 --> 00:03:07,610 >> Ale presne to, ak budete čítať reťazec to je dlhší ako 49 znakov, 49 68 00:03:07,610 --> 00:03:10,440 pretože budete potrebovať priestor pre lomítkom 0, budete pretečeniu 69 00:03:10,440 --> 00:03:11,390 že vyrovnávacej pamäti. 70 00:03:11,390 --> 00:03:16,410 A môžete mať šťastie a byť schopný napísať znak, 51. 52., 53.. 71 00:03:16,410 --> 00:03:18,560 Ale v určitom okamihu, OS sa chystá povedať, no. 72 00:03:18,560 --> 00:03:21,270 To rozhodne nie je pamäť budete dotýkať. 73 00:03:21,270 --> 00:03:23,380 A program bude segfault. 74 00:03:23,380 --> 00:03:26,650 >> Takže tam sú heuristiky by mal byť akýkoľvek Čas máte pevnú dĺžku, máte 75 00:03:26,650 --> 00:03:30,150 aby sa ubezpečil, že ste kontrolu dĺžky na čo to je, že sa snažíte 76 00:03:30,150 --> 00:03:31,090 čítať do neho. 77 00:03:31,090 --> 00:03:35,110 >> DIVÁKOV: Takže riešenie, ktoré by ste mohli mali vyhlásenia kontrolu skutočne 78 00:03:35,110 --> 00:03:37,140 je dĺžka väčšia alebo menšie ako? 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. Malan: Presne tak. 80 00:03:37,730 --> 00:03:41,706 Stačí mať podmienku , Ktorý hovorí, ak - 81 00:03:41,706 --> 00:03:46,080 alebo skôr nemusíte nutne vedieť, dopredu, koľko znakov 82 00:03:46,080 --> 00:03:49,060 užívateľ bude písať, pretože Máte kurča a vajcia. 83 00:03:49,060 --> 00:03:51,860 Nie, kým ste si ju s scanf môžete zistiť, ako dlho to je. 84 00:03:51,860 --> 00:03:54,500 Ale v tomto okamihu, to je príliš neskoro, preto, že ste už čítali ju do 85 00:03:54,500 --> 00:03:55,710 niektoré blok pamäte. 86 00:03:55,710 --> 00:03:59,590 Tak ako stranou, CS50 knižnica vyhýba tento problém úplne, odvolanie 87 00:03:59,590 --> 00:04:01,060 pomocou fgetc. 88 00:04:01,060 --> 00:04:05,390 A to prečíta jeden znak v čase, špičkách spolu s vedomím, že vás 89 00:04:05,390 --> 00:04:08,060 nemôže pretečeniu charakter, ak budete čítať jednu po druhej. 90 00:04:08,060 --> 00:04:11,580 >> Háčik je s GetString odvolanie je že máme neustále re-veľkosti 91 00:04:11,580 --> 00:04:13,590 že kus pamäti, ktorý je len bolesť. 92 00:04:13,590 --> 00:04:15,310 Je to veľa riadkov Kód k tomu, že. 93 00:04:15,310 --> 00:04:18,779 Takže iný prístup by bol vlastne používať bratranca, takže 94 00:04:18,779 --> 00:04:19,790 hovoriť, o scanf. 95 00:04:19,790 --> 00:04:22,820 K dispozícii sú varianty mnoho z nich funkcie, ktoré v skutočnosti kontrolujú 96 00:04:22,820 --> 00:04:25,870 Dĺžka koľko znakov môžete čítať maximálne. 97 00:04:25,870 --> 00:04:29,430 A vy ste mohli určiť, nečítajú viac ako 50 znakov. 98 00:04:29,430 --> 00:04:34,110 Tak, že by bol iný prístup, ale menej ústretový väčších vstupov. 99 00:04:34,110 --> 00:04:37,040 >> Takže otázka 2 sa pýta, predpokladám, že verzia 3 je zostavený a vykonaný. 100 00:04:37,040 --> 00:04:39,960 Prečo by to program, segfault? 101 00:04:39,960 --> 00:04:42,650 Takže toto je vlastne rovnaký odpoveď, aj keď to 102 00:04:42,650 --> 00:04:43,590 Vyzerá trochu obsiahlejší. 103 00:04:43,590 --> 00:04:46,440 Budeme používať malloc, ktoré sa cítia ako dávame sami sebe viac možností. 104 00:04:46,440 --> 00:04:48,030 A potom sme uvoľnenie, ktoré pamäte na konci. 105 00:04:48,030 --> 00:04:49,580 Je to stále len 50 bajtov pamäti. 106 00:04:49,580 --> 00:04:53,620 Tak by sme mohli ešte skúsiť čítať v 51, 52, 1000 bajtov. 107 00:04:53,620 --> 00:04:55,830 Bude to segfault pre presne rovnaký dôvod. 108 00:04:55,830 --> 00:04:57,530 >> Ale je tu ďalší dôvod, prečo taky. 109 00:04:57,530 --> 00:05:03,890 Čo iné by mohlo malloc návrat vedľa adresa bloku pamäti? 110 00:05:03,890 --> 00:05:04,920 To by sa mohol vrátiť null. 111 00:05:04,920 --> 00:05:07,560 A pretože nie sme kontrola to, že by sme mohli robiť niečo 112 00:05:07,560 --> 00:05:11,350 hlúpy iného dôvodu, čo je to, že by sme mohli hovoriť scanf, prečítajte si 113 00:05:11,350 --> 00:05:16,050 vstup užívateľa z klávesnice do 0 polohy, AKA null. 114 00:05:16,050 --> 00:05:18,890 A tiež, bude určite spustiť segfault. 115 00:05:18,890 --> 00:05:21,590 Takže na účely kvíz je, by sa prijali jeden z tých, čo 116 00:05:21,590 --> 00:05:22,740 pádny dôvod. 117 00:05:22,740 --> 00:05:23,420 Jedným z nich je totožný. 118 00:05:23,420 --> 00:05:25,720 Jedným z nich je trochu zložitejšie,. 119 00:05:25,720 --> 00:05:28,975 >> A konečne, s ohľadom na programe je využitie pamäte, ako to verzie 2 a 120 00:05:28,975 --> 00:05:30,350 Verzia 3 sa líšia? 121 00:05:30,350 --> 00:05:35,070 Takže, čo to stojí, videli sme zdanlivo nekonečnú zásobu možné 122 00:05:35,070 --> 00:05:35,770 odpovede na to. 123 00:05:35,770 --> 00:05:39,300 A medzi odpoveďami ľudí, čo sme boli dúfal, že, ale prijali sme ďalšie 124 00:05:39,300 --> 00:05:42,250 veci, bola nejaká zmienka o Skutočnosť, že verzia 2 sa používa 125 00:05:42,250 --> 00:05:44,560 tzv stack. 126 00:05:44,560 --> 00:05:46,710 Verzia 3 je pomocou haldy. 127 00:05:46,710 --> 00:05:50,060 A funkčne, to nie je naozaj robiť všetko, čo veľký rozdiel. 128 00:05:50,060 --> 00:05:54,040 Na konci dňa, sme stále len dostať 50 bajtov pamäti. 129 00:05:54,040 --> 00:05:56,640 >> Ale to bol jeden z možných odpovedí že sme sa pozerali na. 130 00:05:56,640 --> 00:05:59,730 Ale uvidíte, ako vám vaše kvízy späť z TFS, že sme urobili 131 00:05:59,730 --> 00:06:04,330 prijať iné diskusie o ich rôznorodé použitie pamäti, ako. 132 00:06:04,330 --> 00:06:08,600 Ale stack a heap by bolo jednoduchá odpoveď ísť s 133 00:06:08,600 --> 00:06:11,150 Akékoľvek otázky? 134 00:06:11,150 --> 00:06:12,400 Dám vám Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: Takže problém 4. 137 00:06:20,210 --> 00:06:21,985 To je ten, kedy ste museli vyplniť v počte bajtov z všetkých 138 00:06:21,985 --> 00:06:23,460 Tieto rôzne typy používané. 139 00:06:23,460 --> 00:06:24,830 Takže prvá vec, ktorú vidíme. 140 00:06:24,830 --> 00:06:27,930 Predpokladajme, že 32-bitovú architektúru, takhle CS50 spotrebiča. 141 00:06:27,930 --> 00:06:33,530 Takže jedna zo základných vecí, o 32-bitovej architektúry, ktorá nám hovorí, 142 00:06:33,530 --> 00:06:37,490 presne, aký veľký ukazovateľ sa deje byť v architektúre. 143 00:06:37,490 --> 00:06:43,020 >> Takže hneď, vieme, že každý ukazovateľ Typ je 32-bitov alebo 4 bajty. 144 00:06:43,020 --> 00:06:46,010 Takže pri pohľade na túto tabuľku uzol * je typu ukazovateľ. 145 00:06:46,010 --> 00:06:47,250 To bude 4 bajty. 146 00:06:47,250 --> 00:06:51,640 Struct uzol *, to je doslova totožný s uzla hviezdy. 147 00:06:51,640 --> 00:06:53,590 A tak, že to bude 4 bajty. 148 00:06:53,590 --> 00:06:58,270 String, takže to nevyzerá ako ukazovateľ ešte, ale typedef, 149 00:06:58,270 --> 00:07:01,590 reťazec je len char *, ktoré je typu ukazovateľ. 150 00:07:01,590 --> 00:07:03,550 Tak, že to bude 4 bajty. 151 00:07:03,550 --> 00:07:06,150 >> Takže tieto tri sú všetci 4 bajty. 152 00:07:06,150 --> 00:07:09,350 Teraz, uzol a študentov sú trochu zložitejšie. 153 00:07:09,350 --> 00:07:15,160 Takže pri pohľade na uzol a študentom, vidíme, uzol ako celé číslo a ukazovateľ. 154 00:07:15,160 --> 00:07:18,050 A študent dva ukazovatele vnútri nej. 155 00:07:18,050 --> 00:07:23,340 Tak aspoň pre náš prípad, spôsob že sme nakoniec výpočet veľkosti 156 00:07:23,340 --> 00:07:27,020 Táto štruktúra je len sčítať všetko že je vnútri struct. 157 00:07:27,020 --> 00:07:30,690 >> Takže pre uzol, máme celé číslo, čo je 4 bajty. 158 00:07:30,690 --> 00:07:32,830 Máme ukazovateľ, ktorý má 4 bajty. 159 00:07:32,830 --> 00:07:35,820 A tak jeden uzol sa deje aby sa do 8 bajtov. 160 00:07:35,820 --> 00:07:39,490 A podobne pre študenta, máme ukazovateľ, ktorý je 4 bajty a ďalšie 161 00:07:39,490 --> 00:07:40,770 ukazovateľ, ktorý je 4 bajty. 162 00:07:40,770 --> 00:07:43,180 Takže, čo sa deje na koniec up je 8 bajtov. 163 00:07:43,180 --> 00:07:45,480 Uzol a študentské Takže je 8 bajtov. 164 00:07:45,480 --> 00:07:48,950 A títo traja sú všetci 4 bajty. 165 00:07:48,950 --> 00:07:50,240 Otázky na to? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Áno. 168 00:07:54,990 --> 00:07:58,413 >> DIVÁKOV: Je to 64-bit architektúra, by to 169 00:07:58,413 --> 00:07:59,880 dvojnásobok všetci z nich? 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: To nie zdvojnásobiť všetky z nich. 171 00:08:01,790 --> 00:08:05,830 Tak 64-bitovej architektúry, je, opäť, zmeny, ktoré zásadnú vec, že 172 00:08:05,830 --> 00:08:08,910 Ukazovateľ je teraz 64 bitov. 173 00:08:08,910 --> 00:08:09,290 Jo. 174 00:08:09,290 --> 00:08:10,930 Takže ukazovateľ je 8 bajtov. 175 00:08:10,930 --> 00:08:15,420 Takže to, že sa 4 byty sa bude 8 bajtov. 176 00:08:15,420 --> 00:08:18,617 Študent, ktorý bol dva ukazovatele, dobre, teraz to bude 177 00:08:18,617 --> 00:08:19,800 byť 8 bajtov, 8 bajtov. 178 00:08:19,800 --> 00:08:21,980 Bude to robiť 16 bajtov. 179 00:08:21,980 --> 00:08:25,710 >> Uzol, ale je stále ešte 4 byty. 180 00:08:25,710 --> 00:08:27,800 Takže tento ukazovateľ sa deje byť 8 bajtov. 181 00:08:27,800 --> 00:08:28,930 To je 4 bajty. 182 00:08:28,930 --> 00:08:30,870 Takže uzol sa deje len na 12 bajtov. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Akékoľvek ďalšie otázky na toto? 185 00:08:39,280 --> 00:08:44,500 Takže ďalší jeden, jedná sa o stavové kódy HTTP. 186 00:08:44,500 --> 00:08:48,000 A vy ste mal opísať okolnosti, za ktorých je sila 187 00:08:48,000 --> 00:08:49,810 sa vrátil k vám. 188 00:08:49,810 --> 00:08:56,730 jeden problém, ktorý som počul niektorých študentov je to, že sa snažili, aby 189 00:08:56,730 --> 00:08:58,950 Chyby byť na strane klienta. 190 00:08:58,950 --> 00:09:02,320 Takže keď sa snažíme, aby žiadosť na serveri, niečo, čo ide 191 00:09:02,320 --> 00:09:03,820 zle na našej strane. 192 00:09:03,820 --> 00:09:07,660 Ale všeobecne, tieto kódy sú vrátených serverom. 193 00:09:07,660 --> 00:09:11,720 Takže ak chceme zistiť, čo sa deje zlé alebo priamo na serveri, ktorý 194 00:09:11,720 --> 00:09:14,280 spôsobí, že tieto veci, ktoré majú byť vrátené. 195 00:09:14,280 --> 00:09:18,670 Tak prečo by mohla a server vracia stavový kód 200? 196 00:09:18,670 --> 00:09:19,920 Akékoľvek myšlienky? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Jo. 199 00:09:23,730 --> 00:09:27,850 Takže niečo o úspešnom požiadavka prešiel. 200 00:09:27,850 --> 00:09:30,260 A oni sú schopní sa vrátiť čo ste chcel. 201 00:09:30,260 --> 00:09:32,240 Takže je všetko v poriadku. 202 00:09:32,240 --> 00:09:35,662 Čo o 302 nájdených? 203 00:09:35,662 --> 00:09:36,618 Jo. 204 00:09:36,618 --> 00:09:39,008 >> Divákov: Server hľadal za to, čo ste požadovali. 205 00:09:39,008 --> 00:09:40,442 Ale to nemohol nájsť. 206 00:09:40,442 --> 00:09:42,850 Takže tam je chyba. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: Takže server bol hľadá to, čo ste chceli. 208 00:09:47,720 --> 00:09:51,682 Tak práve hľadáte tu, 302 nájdených, to bol schopný ju nájsť. 209 00:09:51,682 --> 00:09:53,035 >> DIVÁKOV: Ospravedlňujem sa. 210 00:09:53,035 --> 00:09:54,388 Našiel znamená, že oni si to. 211 00:09:54,388 --> 00:09:55,638 Prepáčte. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: Tak 302 Found. 214 00:10:00,160 --> 00:10:02,350 Server je schopný nájsť to, čo ste chceli. 215 00:10:02,350 --> 00:10:04,640 >> DIVÁKOV: Ale to nie je to zobrazenie? 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: rozdiel medzi to 302 a 200 je to, že 217 00:10:08,180 --> 00:10:09,280 vie, že to, čo chcete. 218 00:10:09,280 --> 00:10:12,000 Ale nie je to presne tam, kde ste sa chcel opýtať. 219 00:10:12,000 --> 00:10:14,580 Takže 302 je typický presmerovanie. 220 00:10:14,580 --> 00:10:16,510 Takže ste si vyžiadali stránku. 221 00:10:16,510 --> 00:10:19,590 Je to vie, oh, chcem ti vrátiť toto. 222 00:10:19,590 --> 00:10:21,070 Ale to je na inú adresu URL. 223 00:10:21,070 --> 00:10:23,534 Tak hele, vy vlastne chcete toto. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. Malan: Je to kus, ktorý povedal: že sme dali vy presmerovanie 225 00:10:26,950 --> 00:10:30,830 funkcia, ktorá používa funkciu záhlavia ktorý, podľa poradia, vytlačiť umiestnenie, 226 00:10:30,830 --> 00:10:34,110 hrubého čreva, a potom URL, na ktoré Ak chcete odmietnuť užívateľa. 227 00:10:34,110 --> 00:10:37,480 Aj keď ste nevideli 302 výslovne sa, že je to, čo PHP 228 00:10:37,480 --> 00:10:41,550 by sa mávnutím čarovného prútika vložte ako hlavičky hovorí presne to, čo povedal Rob tam - 229 00:10:41,550 --> 00:10:41,930 nájdených. 230 00:10:41,930 --> 00:10:43,180 Ale nájdete tu miesto. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB BOWDEN: OK. 233 00:10:46,160 --> 00:10:47,630 Takže to, čo o 403 zakázaný? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> DIVÁKOV: Myslím, že to, že server je v podstate hovorí, že klient 236 00:10:57,120 --> 00:10:59,970 nemôže získať prístup k domovskej stránke. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: Takže áno. 238 00:11:03,260 --> 00:11:07,670 No, typická odpoveď sme boli čaká je niečo ako, súbory 239 00:11:07,670 --> 00:11:08,920 nie sú primerane chmodded. 240 00:11:08,920 --> 00:11:11,590 To je asi, za akých okolností ste ich videli. 241 00:11:11,590 --> 00:11:18,920 Ale je tu dôvod, že klient môže byť na Škorpiónovi. 242 00:11:18,920 --> 00:11:20,440 Tam je vlastne ďalší stavový kód - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Takže sa jedná o veľmi podobné. 245 00:11:22,820 --> 00:11:24,590 >> 401 je neoprávnené. 246 00:11:24,590 --> 00:11:26,130 A 403 je zakázané. 247 00:11:26,130 --> 00:11:31,890 A tak neoprávnenému vám exkluzívne dostať, ak nie ste prihlásený 248 00:11:31,890 --> 00:11:34,520 Ale prihlásenie môže znamenať že ste oprávnení. 249 00:11:34,520 --> 00:11:37,930 Ale ak ste už prihlásení a môžete Stále nemáte oprávnenie, potom 250 00:11:37,930 --> 00:11:40,140 môžete tiež získať zakázané. 251 00:11:40,140 --> 00:11:45,320 Takže ak ste prihlásení a nemajú povolenie, zakázané je tiež 252 00:11:45,320 --> 00:11:47,164 niečo, čo môžete dostať. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. Malan: A mechanizmus , Ktoré tieto problémy sú zvyčajne 254 00:11:48,900 --> 00:11:53,100 rieši na serveri cez to príkaz? 255 00:11:53,100 --> 00:11:57,700 Chmod, ak je to vskutku oprávnenia vydá na súbor alebo adresár. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: A 404 nebola nájdená. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Jo. 259 00:12:03,470 --> 00:12:10,150 Takže na rozdiel od 302, kde nebolo presne kde sa pýtate, ale vie, čo 260 00:12:10,150 --> 00:12:12,710 chcete, to, to jednoducho musí žiadny nápad, čo chcete. 261 00:12:12,710 --> 00:12:15,648 A vy sa nevyžaduje niečo platný. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Som kanvice a potom 500 interný server. 264 00:12:22,310 --> 00:12:24,870 Tak prečo môžete dostať, že? 265 00:12:24,870 --> 00:12:26,120 >> Takže segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Ja vlastne neviem, triedenie štandard pre to. 268 00:12:30,640 --> 00:12:34,850 Ale ak vaše PHP kódu niečo zle v tom, teoreticky, mohla by 269 00:12:34,850 --> 00:12:39,650 vlastne segfault, v tom prípade, to 500 Interná chyba servera, niečo, čo 270 00:12:39,650 --> 00:12:41,400 je sa váš server je zle konfigurácie. 271 00:12:41,400 --> 00:12:44,320 Alebo je to chyba syntaxe v PHP kódu. 272 00:12:44,320 --> 00:12:46,095 Alebo sa niečo zlé deje. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. Malan: My sme vidieť segfault Medzi odpoveďami pár ľudí. 274 00:12:48,320 --> 00:12:49,490 A technicky, mohlo by sa to stalo. 275 00:12:49,490 --> 00:12:53,820 Ale, že by PHP, program napísal iných ľudí, v skutočnosti 276 00:12:53,820 --> 00:12:57,790 segfaulted, ktorý len vtedy, ak títo ľudia podelal a napísal buggy kód 277 00:12:57,790 --> 00:13:00,680 ich interpret by PHP samo o sebe segfault. 278 00:13:00,680 --> 00:13:06,460 Takže aj keď je 500 ako segfault v duchu, je to takmer vždy 279 00:13:06,460 --> 00:13:10,490 Výsledkom je problém konfiguračného súboru s webovým serverom, alebo, ako povedal Rob, 280 00:13:10,490 --> 00:13:13,200 syntaktická chyba, ako ste vy neuzavrela cenovú ponuku. 281 00:13:13,200 --> 00:13:16,180 Alebo ste stratili bodkočiarku niekde. 282 00:13:16,180 --> 00:13:23,677 >> DIVÁKOV: Takže pre Shuttle pset, som že keď som to urobil, keď som klikol 283 00:13:23,677 --> 00:13:26,300 prehliadač, ale nič prišiel, čo oni volali biela stránka. 284 00:13:26,300 --> 00:13:28,056 Ale bolo to preto, že z kódu. 285 00:13:28,056 --> 00:13:29,440 Myslím, že to bolo JavaScript, jo? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Jo. 287 00:13:29,770 --> 00:13:31,180 >> DIVÁKOV: Kiež by chyba ešte prísť? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Takže by ste sa dostali to chyba, pretože všetko 289 00:13:34,290 --> 00:13:36,930 z pohľadu webového servera bol úplne v poriadku. 290 00:13:36,930 --> 00:13:39,090 Ale ste požadovali index.html. 291 00:13:39,090 --> 00:13:42,000 Požadovali ste shuttle.js a service.js. 292 00:13:42,000 --> 00:13:44,580 A to sa podarilo úspešne vrátiť vám všetkým z tých vecí - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Je to len vtedy, keď sa váš prehliadač pokúšal interpretovať kód JavaScript, ktorý 296 00:13:49,330 --> 00:13:51,370 je to ako, počkajte, to nie je platné k chybe JavaScript. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Nejaké ďalšie otázky? 299 00:13:58,210 --> 00:14:00,750 Dobrá. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. Malan: Tak ďalšie až sa číslo 11. 301 00:14:04,120 --> 00:14:07,610 A 11 bol najdesivejšie pre mnoho ľudí. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Takže najdôležitejšia vec na vedomie tu sa, že je to skutočne o 304 00:14:18,570 --> 00:14:19,840 dvojnásobne spájať zoznam. 305 00:14:19,840 --> 00:14:23,160 Ale to nebolo rovnaké ako minulý rok dvojnásobne spájať zoznam problém, 306 00:14:23,160 --> 00:14:27,170 ktorý vám nedal na námietku, že zoznam by mohol v skutočnosti byť netriedený. 307 00:14:27,170 --> 00:14:29,640 >> A tak skutočnosť, že zoznam bol netriedeného a skutočnosť, že toto slovo bolo 308 00:14:29,640 --> 00:14:32,930 zdôraznené, že mal oznámiť , Že je to v skutočnosti zjednodušenie 309 00:14:32,930 --> 00:14:35,430 z toho, čo by inak bolo náročnejší problém 310 00:14:35,430 --> 00:14:36,600 a dlhšia. 311 00:14:36,600 --> 00:14:40,760 Takže Bežnou chybou tu bolo dali Riešenie minuloročný na jednom 312 00:14:40,760 --> 00:14:45,580 pager a potom už len slepo kopírovať, ktorý sa ako odpoveď, ktorá je správna 313 00:14:45,580 --> 00:14:48,520 odpovedať na inú otázku podobne v duchu. 314 00:14:48,520 --> 00:14:51,340 Ale jemnosti tu boli nasledujúce. 315 00:14:51,340 --> 00:14:55,200 >> Takže jedna, sme uzol vyhlásil a sú definované v obvyklým spôsobom tu. 316 00:14:55,200 --> 00:14:59,230 Potom sme definovaný zoznam je globálna ukazovateľ inicializovaný na hodnotu null. 317 00:14:59,230 --> 00:15:02,150 Potom sa zdá, že je dve funkcie máme prototypy pre tú, vložka 318 00:15:02,150 --> 00:15:03,240 a odstrániť. 319 00:15:03,240 --> 00:15:06,600 A potom tu máme nejaký ukážkový kód tu robiť veľa vloženie. 320 00:15:06,600 --> 00:15:09,930 A potom žiadame vás, aby ste dokončiť prevedenie vložky pod takým 321 00:15:09,930 --> 00:15:14,380 tak, že sa vloží do n zoznamu v konštantnom čase, tiež zdôraznil, 322 00:15:14,380 --> 00:15:15,730 aj keď už existuje. 323 00:15:15,730 --> 00:15:20,600 >> Takže krása je možné vložiť v konštantnom čase, je, že to znamená, 324 00:15:20,600 --> 00:15:23,060 že budete musieť vložiť nový uzol, kde? 325 00:15:23,060 --> 00:15:23,690 Do prednej časti. 326 00:15:23,690 --> 00:15:27,760 Tak to eliminuje, našťastie, aspoň jeden z prípadov, ktoré predtým vyžadovali 327 00:15:27,760 --> 00:15:30,520 ešte viac riadkov kódu, ako to urobil v minulom roku, a to aj v triede, keď sme 328 00:15:30,520 --> 00:15:34,040 hovoril skrze tieto veci s ľuďmi a s niektorými 329 00:15:34,040 --> 00:15:35,250 slovné pseudo kód. 330 00:15:35,250 --> 00:15:39,190 Takže riešenie tu, poďme preskočiť k tomu stačí mať vizuálny kontakt 331 00:15:39,190 --> 00:15:40,480 obrazovke. 332 00:15:40,480 --> 00:15:42,230 >> Všimnite si, že robíme nasledujúce. 333 00:15:42,230 --> 00:15:45,140 A tiež si všimnúť ďalšie zjednodušenie bolo, že aj keď je to 334 00:15:45,140 --> 00:15:48,280 už existuje, tak to znamená, že aj v prípade, číslo už existuje, môžete 335 00:15:48,280 --> 00:15:50,280 len slepo vložiť ďalšie kópie toho. 336 00:15:50,280 --> 00:15:52,560 A to tiež malo byť zjednodušenie, takže by ste mohli 337 00:15:52,560 --> 00:15:54,940 zamerať sa na, naozaj, niektorí viac intelektuálne zaujímavá časť a 338 00:15:54,940 --> 00:15:58,090 nie je len nejaký ďalší kontrolu chýb s ohľadom na obmedzený čas. 339 00:15:58,090 --> 00:16:02,880 >> Takže v tomto roztoku vzorky sa pridelí ukazovateľ na ľavej strane 340 00:16:02,880 --> 00:16:04,510 stranu tu k uzlu. 341 00:16:04,510 --> 00:16:07,190 Teraz si uvedomiť, že ukazovateľ, as Rob povedal, je iba 32 bitov. 342 00:16:07,190 --> 00:16:09,060 A to nie je v skutočnosti obsahovať adresa, kým 343 00:16:09,060 --> 00:16:09,970 priradiť mu adresu. 344 00:16:09,970 --> 00:16:13,220 A my, že na pravej strane strana cez malloc. 345 00:16:13,220 --> 00:16:16,550 Ako dobrý občan, môžeme skontrolovať, že malloc nie je v skutočnosti, null, takže 346 00:16:16,550 --> 00:16:18,690 nemáme náhodou vytvoriť segfault tu. 347 00:16:18,690 --> 00:16:22,840 A kedykoľvek použiť malloc v živote, vám by mala byť kontrola na null, inak 348 00:16:22,840 --> 00:16:24,090 Máte jemné chybu. 349 00:16:24,090 --> 00:16:28,460 >> Potom sme sa inicializovať, že null by priradenie n a predchádzajúcej a ďalšie. 350 00:16:28,460 --> 00:16:32,450 A v tomto prípade tu, som inicializáciu predchádzajúce na hodnotu null, pretože tento nový 351 00:16:32,450 --> 00:16:34,780 uzol bude nový začiatku môjho zoznamu. 352 00:16:34,780 --> 00:16:37,050 Takže tam to bude nič pred ním. 353 00:16:37,050 --> 00:16:42,010 A ja chcem, aby v podstate pripojiť Existujúci zoznam do nového uzla 354 00:16:42,010 --> 00:16:44,700 nastavenie vedľa rovná zoznam sám. 355 00:16:44,700 --> 00:16:47,120 Ale ja som to urobil len zatiaľ. 356 00:16:47,120 --> 00:16:51,780 Takže v prípade, že zoznam sám o sebe už existoval, a tam bol aspoň jeden uzol 357 00:16:51,780 --> 00:16:57,070 už na mieste, ak sa jedná o zoznam tu a ja vložiť nový uzol tu, som 358 00:16:57,070 --> 00:17:01,840 je potrebné, aby sa ubezpečil, že môj bývalý uzol body späť do môjho nového uzla, 359 00:17:01,840 --> 00:17:04,260 , Pretože to je, opäť, dvojnásobne spájať zoznam. 360 00:17:04,260 --> 00:17:05,460 >> Takže robíme kontrolu zdravý rozum. 361 00:17:05,460 --> 00:17:10,109 Ak zoznam nie je null, ak je už jeden alebo viac uzlov, potom tam 362 00:17:10,109 --> 00:17:12,470 Dodávam, že zadné odkaz, aby som tak povedal. 363 00:17:12,470 --> 00:17:15,420 A potom to posledné, čo potrebujeme urobiť, je aktualizovať globálna 364 00:17:15,420 --> 00:17:20,329 zoznam premenných sám bodu do tohto nového uzla. 365 00:17:20,329 --> 00:17:21,790 Jo. 366 00:17:21,790 --> 00:17:26,579 >> DIVÁKOV: V smere šípky [Nepočuteľné] sa rovná null, robí, že 367 00:17:26,579 --> 00:17:30,420 vysporiadať sa s zoznamu, pretože Zoznam je null? 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. Malan: Nie. 369 00:17:30,596 --> 00:17:34,500 To je jednoducho to, že som aktívne pozor, v tom, že ak je to môj 370 00:17:34,500 --> 00:17:38,730 Pôvodný zoznam sa možno niektoré ďalšie uzly tu a ja som vkladanie my 371 00:17:38,730 --> 00:17:42,380 nový uzol sem, tam sa deje byť nič sem. 372 00:17:42,380 --> 00:17:44,720 A chcem zachytiť ten nápad nastavením skôr 373 00:17:44,720 --> 00:17:47,740 null na nový uzol. 374 00:17:47,740 --> 00:17:51,410 A pravdepodobne, ak môj kód je správny a neexistuje žiadny iný spôsob, ako vložiť 375 00:17:51,410 --> 00:17:54,970 iné, než je táto funkcia uzly, pravdepodobne, aj keď zoznam už 376 00:17:54,970 --> 00:18:00,090 jeden alebo viac uzlov v ňom, pravdepodobne Zoznam, prvý uzol, by mal 377 00:18:00,090 --> 00:18:02,750 predchádzajúci ukazovateľ null sám. 378 00:18:02,750 --> 00:18:03,550 >> DIVÁKOV: A len následné-up. 379 00:18:03,550 --> 00:18:08,139 Dôvod, prečo dať ukazovateľ next rovná Zoznam je robíte ukazovateľ 380 00:18:08,139 --> 00:18:13,579 Pred zoznamu v tom, že to ukazuje na ďalšie, myslím, že - 381 00:18:13,579 --> 00:18:14,980 Ja nie - 382 00:18:14,980 --> 00:18:15,450 len zoznam? 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. Malan: Presne tak. 384 00:18:16,400 --> 00:18:19,400 A tak sa poďme skutočne zvážiť dve prípadov tu naozaj, aj keď 385 00:18:19,400 --> 00:18:22,070 Aby budeme uvažovať o nich nie je úplne rovnaký ako kód. 386 00:18:22,070 --> 00:18:26,250 Ale na vysokej úrovni, v prípade, že predstavuje zoznam, a to je 32-bit 387 00:18:26,250 --> 00:18:29,560 ukazovateľ, najjednoduchší scenár že je to null v predvolenom nastavení. 388 00:18:29,560 --> 00:18:33,010 A predpokladám Chcem vložiť Číslo 50 bolo prvé číslo. 389 00:18:33,010 --> 00:18:37,640 Takže budem pokračovať a prideliť uzol, ktorý bude obsahovať 390 00:18:37,640 --> 00:18:38,770 tri polia - 391 00:18:38,770 --> 00:18:42,070 n, predchádzajúce a ďalšie. 392 00:18:42,070 --> 00:18:44,580 >> Chystám sa dať číslo 50 tu, pretože to bude n 393 00:18:44,580 --> 00:18:46,130 To bude ďalší. 394 00:18:46,130 --> 00:18:48,530 A to bude predchádzajúce. 395 00:18:48,530 --> 00:18:50,910 A tak čo mám robiť v tomto prípade? 396 00:18:50,910 --> 00:18:53,900 No, ja som práve urobil linku 1 tu. 397 00:18:53,900 --> 00:18:55,400 Ukazovateľ n dostane n 398 00:18:55,400 --> 00:18:57,740 Ja potom povedal, predchádzajúce by mal dostať null. 399 00:18:57,740 --> 00:18:59,470 Takže to bude mať hodnotu null. 400 00:18:59,470 --> 00:19:01,365 Potom budem hovoriť ďalšie sa chystá do zoznamu dostať. 401 00:19:01,365 --> 00:19:05,150 >> A to jednoducho funguje dobre. 402 00:19:05,150 --> 00:19:06,500 To je null. 403 00:19:06,500 --> 00:19:10,620 A tak hovorím, nový uzol je vedľa poľa by mal dostať, čo to je. 404 00:19:10,620 --> 00:19:12,570 Tak, že kladie ďalšie null tam. 405 00:19:12,570 --> 00:19:14,510 A potom posledná vec, Aj to je skontrolovať tu. 406 00:19:14,510 --> 00:19:17,870 Ak zoznam nie je rovná NULL, ale je rovný null, takže sme vynechať 407 00:19:17,870 --> 00:19:18,470 dohromady. 408 00:19:18,470 --> 00:19:23,520 A tak všetko, čo robiť ďalej, je zoznam dostane ukazovateľ, ktorý má za následok obrazovo 409 00:19:23,520 --> 00:19:25,570 obrázok takhle. 410 00:19:25,570 --> 00:19:26,620 Takže to je jeden scenár. 411 00:19:26,620 --> 00:19:30,490 >> A ten, ktorý ste sa pýtal konkrétne je situácia, ako je táto, 412 00:19:30,490 --> 00:19:33,190 kde už máme zoznam jeden-uzla. 413 00:19:33,190 --> 00:19:36,240 A keď som sa vrátiť do pôvodnej Problém vyhlásenie, ďalšie zídeme 414 00:19:36,240 --> 00:19:39,320 vložiť povedzme je 34, len pre saké diskusie. 415 00:19:39,320 --> 00:19:46,210 Takže budem len pohodlne kresliť, ktoré sem. 416 00:19:46,210 --> 00:19:47,540 Práve som malloced. 417 00:19:47,540 --> 00:19:49,310 Predpokladajme, že som kontrolu na null. 418 00:19:49,310 --> 00:19:51,870 >> Teraz idem k inicializácii n byť 34. 419 00:19:51,870 --> 00:19:53,040 A to bude n 420 00:19:53,040 --> 00:19:54,670 To bude ďalší. 421 00:19:54,670 --> 00:19:57,100 A to bude predchádzajúce. 422 00:19:57,100 --> 00:19:59,370 Poďme sa uistite sa, že som to neurobil si to pospiatky. 423 00:19:59,370 --> 00:20:01,110 Predchádzajúce je na prvom mieste v definícii. 424 00:20:01,110 --> 00:20:03,070 Dovoľte mi, aby som tento problém odstrániť. 425 00:20:03,070 --> 00:20:04,410 Je to predchádzajúce. 426 00:20:04,410 --> 00:20:05,780 To je vedľa. 427 00:20:05,780 --> 00:20:08,620 Aj napriek tomu, že sú zhodné, poďme si to konzistentné. 428 00:20:08,620 --> 00:20:09,450 >> Predchádzajúce. 429 00:20:09,450 --> 00:20:11,030 To je vedľa. 430 00:20:11,030 --> 00:20:16,310 Tak som práve malloced moje vedomie, kontrolovať NULL, priradí 34 do uzla. 431 00:20:16,310 --> 00:20:17,570 Predchádzajúca dostane null. 432 00:20:17,570 --> 00:20:19,480 Tak, že mi to dáva. 433 00:20:19,480 --> 00:20:21,010 Ďalšie dostane zoznam. 434 00:20:21,010 --> 00:20:22,370 Takže zoznam je to. 435 00:20:22,370 --> 00:20:26,520 Takže je to teraz rovnaké ako čerpanie tejto šípka, takže sa upozorniť na jeden 436 00:20:26,520 --> 00:20:27,940 v rovnakom. 437 00:20:27,940 --> 00:20:30,400 A potom som kontrolu, či zoznam nie je rovné null. 438 00:20:30,400 --> 00:20:31,740 A nie je to tentoraz. 439 00:20:31,740 --> 00:20:35,580 Potom idem urobiť zoznam predchádzajúce dostane ukazovateľ. 440 00:20:35,580 --> 00:20:39,700 >> Takže zoznam Predchádzajúca dostane PTR. 441 00:20:39,700 --> 00:20:44,300 Tak to má za následok uvedenie grafický šípka tu. 442 00:20:44,300 --> 00:20:46,930 A to je už trochu vlnité, linky. 443 00:20:46,930 --> 00:20:50,780 A potom, konečne, som aktualizovať zoznam poukázať na ukazovateľ. 444 00:20:50,780 --> 00:20:55,560 Takže teraz to ukazuje na toho chlapa. 445 00:20:55,560 --> 00:20:57,170 A teraz, poďme robiť rýchle Kontrola zdravý rozum. 446 00:20:57,170 --> 00:20:59,470 >> Tu je zoznam, ktorý je globálna premenná. 447 00:20:59,470 --> 00:21:02,850 Prvý uzol je, v skutočnosti, 34, pretože Ja som po tú šípku. 448 00:21:02,850 --> 00:21:05,210 A to je správne, pretože chcem, aby vložiť na začiatku zoznamu 449 00:21:05,210 --> 00:21:06,070 všetky nové uzly. 450 00:21:06,070 --> 00:21:08,860 Jeho ďalšie pole ma vedie k tejto chlapa. 451 00:21:08,860 --> 00:21:10,710 Ak som ďalej, som narazila ďalšie je null. 452 00:21:10,710 --> 00:21:11,760 Takže to nič viac zoznamu. 453 00:21:11,760 --> 00:21:14,460 Ak som narazila predchádzajúce, som si tam, kde som čakať. 454 00:21:14,460 --> 00:21:16,435 >> Takže stále existuje niekoľko rád, samozrejme, manipulovať. 455 00:21:16,435 --> 00:21:19,870 Ale skutočnosť, že vám bolo povedané, k tomu to v konštantnom čase vás znamená iba to, 456 00:21:19,870 --> 00:21:22,910 majú konečný počet vecí máte dovolené robiť. 457 00:21:22,910 --> 00:21:24,290 A čo je to za číslo? 458 00:21:24,290 --> 00:21:25,185 To by mohol byť jeden krok. 459 00:21:25,185 --> 00:21:25,700 Mohlo by to byť dva. 460 00:21:25,700 --> 00:21:26,820 Mohlo by to byť 1000 krokov. 461 00:21:26,820 --> 00:21:30,500 Ale to je konečný, čo znamená, že nemôžete majú nejaký druh zacykleniu deje 462 00:21:30,500 --> 00:21:32,010 tu, no rekurzia, žiadne slučky. 463 00:21:32,010 --> 00:21:37,390 Je to proste musím byť tvrdý-kódované linky kódu, ako máme v tejto vzorke. 464 00:21:37,390 --> 00:21:42,330 >> Takže ďalší problém 12 nás požiadala, aby sme dokončení implementácie vyradenie 465 00:21:42,330 --> 00:21:46,740 pod takým spôsobom, že sa odstraňuje n zo zoznamu v lineárnom čase. 466 00:21:46,740 --> 00:21:48,740 Takže budete musieť trochu viac manévrovací priestor teraz. 467 00:21:48,740 --> 00:21:52,380 Môžete predpokladať, že n, ak je prítomná v zozname, bude prítomný 468 00:21:52,380 --> 00:21:53,340 nie viac ako raz. 469 00:21:53,340 --> 00:21:56,770 A to tiež má byť test založený na zjednodušujúce predpoklad, aby 470 00:21:56,770 --> 00:21:59,780 že ak nájdete číslo 50 niekde v zozname, nemáte tiež 471 00:21:59,780 --> 00:22:02,890 majú na starosti aj naďalej iterácii, hľadá všetky možné 472 00:22:02,890 --> 00:22:06,990 kópie z 50, čo by práve prechádzajú do nejaké drobné detaily, v obmedzenom čase. 473 00:22:06,990 --> 00:22:10,460 >> Takže s remove, tento bol určite náročnejšie a viac 474 00:22:10,460 --> 00:22:11,640 Kód písať. 475 00:22:11,640 --> 00:22:14,990 Ale na prvý pohľad, úprimne povedané, to by mohlo vyzerať ohromujúci a ako niečo, 476 00:22:14,990 --> 00:22:17,060 neexistuje žiadny spôsob, ako by ste mohli mať prísť s na kvíz. 477 00:22:17,060 --> 00:22:22,450 Ale ak sa zameriame na jednotlivé kroky, Dúfajme, že to naraz 478 00:22:22,450 --> 00:22:26,060 Pripadá vám, že každý z týchto jednotlivých kroky je zrejmý zmysel 479 00:22:26,060 --> 00:22:27,080 v spätnom pohľade. 480 00:22:27,080 --> 00:22:28,200 Takže poďme sa pozrieť. 481 00:22:28,200 --> 00:22:32,570 >> Tak za prvé, my inicializovať ukazovateľ byť zoznam sám. 482 00:22:32,570 --> 00:22:36,040 Pretože chcem lineárny čas, to znamená Budem mať nejaké slučky. 483 00:22:36,040 --> 00:22:39,730 A obyčajný spôsob, ako iterovat cez uzly v štruktúre zoznamu alebo akékoľvek 484 00:22:39,730 --> 00:22:43,860 štruktúry iteratívne je, aby sa ukazovateľ na prednej časti dát 485 00:22:43,860 --> 00:22:46,990 štruktúra a potom len spustiť aktualizáciu to a ísť svojou cestou 486 00:22:46,990 --> 00:22:48,650 prostredníctvom dátovej štruktúry. 487 00:22:48,650 --> 00:22:50,040 Takže budem robiť presne to. 488 00:22:50,040 --> 00:22:54,260 >> Zatiaľ čo ukazovateľ, môj dočasné premenné, nie je rovné null, poďme 489 00:22:54,260 --> 00:22:55,660 choďte do toho a skontrolovať. 490 00:22:55,660 --> 00:22:56,910 Mal som šťastie? 491 00:22:56,910 --> 00:23:01,740 Je n polia v uzle som v súčasnej dobe pri pohľade na rovný 492 00:23:01,740 --> 00:23:03,380 číslo som hľadal? 493 00:23:03,380 --> 00:23:05,410 A ak áno, poďme niečo urobiť. 494 00:23:05,410 --> 00:23:10,020 Teraz, všimnite si to, ak podmienka obklopuje celý 495 00:23:10,020 --> 00:23:11,520 Nasledujúce riadky kódu. 496 00:23:11,520 --> 00:23:14,610 To je jediné, čo ma zaujíma - nájsť číslo v otázke. 497 00:23:14,610 --> 00:23:18,010 Takže neexistuje žiadny iný, ktorý zjednodušuje veci koncepčne trochu. 498 00:23:18,010 --> 00:23:22,040 >> Ale teraz som si uvedomil, a môžete mať len si to uvedomil po myslenie 499 00:23:22,040 --> 00:23:24,720 je to cez trochu, je tu vlastne dve prípadov tu. 500 00:23:24,720 --> 00:23:28,060 Jedným z nich je, ak je uzol v začiatku zoznamu, ktorý je 501 00:23:28,060 --> 00:23:31,040 trochu nepríjemné, pretože to je zvláštny prípad, pretože sa budete musieť vysporiadať 502 00:23:31,040 --> 00:23:33,340 s tou vecou, ​​ktorá je len anomálie. 503 00:23:33,340 --> 00:23:35,720 Všade inde v zozname, je to to isté. 504 00:23:35,720 --> 00:23:38,050 K dispozícii je predchádzajúca uzol a ďalšie uzol, uzol predchádzajúce, ďalšie uzol. 505 00:23:38,050 --> 00:23:40,940 Ale ten chlap je trochu zvláštne v prípade, že je na začiatku. 506 00:23:40,940 --> 00:23:48,710 >> Takže v prípade, že ukazovateľ sa rovná zoznam sama o sebe, takže keď som na začiatku roka 507 00:23:48,710 --> 00:23:53,960 zoznam a našiel som n, musím urobiť pár vecí. 508 00:23:53,960 --> 00:23:59,230 Po prvé, musím do zoznamu zmeniť poukazujú na ďalšie pole, 50 rokov. 509 00:23:59,230 --> 00:24:01,270 Takže predpokladám, že sa snažím odobrať 34. 510 00:24:01,270 --> 00:24:03,560 Takže ten chlap musí ísť preč len chvíľu. 511 00:24:03,560 --> 00:24:07,210 >> Takže som chcel povedať, zoznam dostane ukazovateľ ďalšie. 512 00:24:07,210 --> 00:24:08,570 No, to je ukazovateľ. 513 00:24:08,570 --> 00:24:10,360 Ďalej sa ukazuje sem. 514 00:24:10,360 --> 00:24:17,470 Tak to sa mení na túto šípku vpravo teraz poukázať na toho chlapa tu. 515 00:24:17,470 --> 00:24:19,580 Teraz, pamätajte, že máme dočasné premenné. 516 00:24:19,580 --> 00:24:23,520 Takže sme sa osirelé všetky uzly, pretože som tiež toho chlapa v mojom 517 00:24:23,520 --> 00:24:25,010 realizácia remove. 518 00:24:25,010 --> 00:24:29,600 Takže teraz, ak zoznam sám o sebe nie je null, Musím opraviť niečo. 519 00:24:29,600 --> 00:24:32,690 >> Musím sa uistiť, že táto šípka, ktorý je už ukazuje 520 00:24:32,690 --> 00:24:36,830 50 až 34, to má ísť preč, pretože keď sa snažím zbaviť 521 00:24:36,830 --> 00:24:41,910 z 34, 50 mal lepší ponechať druh späť odkaz na to, ako 522 00:24:41,910 --> 00:24:42,820 arrow navrhol. 523 00:24:42,820 --> 00:24:44,820 Tak som to urobil čiaru. 524 00:24:44,820 --> 00:24:46,520 Tak som urobil. 525 00:24:46,520 --> 00:24:48,040 Tento prípad je vlastne celkom jednoduché. 526 00:24:48,040 --> 00:24:51,010 Odsekne hlavu zoznamu je pomerne jednoduché. 527 00:24:51,010 --> 00:24:52,980 >> Bohužiaľ, tam je to nepríjemné iný blok. 528 00:24:52,980 --> 00:24:56,170 Takže teraz, musím vziať do úvahy prípad tam, kde je niečo uprostred. 529 00:24:56,170 --> 00:24:59,880 Ale nie je to príliš hrozné, s výnimkou pre syntax ako je táto. 530 00:24:59,880 --> 00:25:03,080 Takže ak nie som na začiatku roka Zoznam, som niekde uprostred. 531 00:25:03,080 --> 00:25:08,160 A tento riadok je tu hovorí, začiatok na čo uzla ste na. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Prejsť na ďalšie pole z predchádzajúceho uzla a ukazujú, že na ukazovateľ. 534 00:25:18,550 --> 00:25:20,390 >> Poďme to obrazne. 535 00:25:20,390 --> 00:25:21,640 To bolo stále zložitejšie. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Takže ak mám predchádzajúce pole tu - poďme na to - ďalšie pole tu. 538 00:25:37,990 --> 00:25:41,200 Chystám sa zjednodušiť svoje ukazovatele, skôr ako kresliť veľa 539 00:25:41,200 --> 00:25:45,710 veci tam a späť brázdia navzájom. 540 00:25:45,710 --> 00:25:50,870 A teraz, povedzme, že je to 1, 2, 3 kvôli diskusiu, a to aj 541 00:25:50,870 --> 00:25:53,410 aj keď to nie je vyrovnaný so problém sa jedná. 542 00:25:53,410 --> 00:25:55,900 >> Takže tu je moja spájať zoznam. 543 00:25:55,900 --> 00:25:59,300 Snažím sa odstrániť dva v tomto najmä verzie príbehu. 544 00:25:59,300 --> 00:26:01,960 Takže som aktualizované ukazovateľ sa ukázal na toho chlapa. 545 00:26:01,960 --> 00:26:03,315 Tak toto je PTR. 546 00:26:03,315 --> 00:26:04,530 On ukázal tu. 547 00:26:04,530 --> 00:26:07,170 Toto je zoznam, ktorý existuje na celom svete ako predtým. 548 00:26:07,170 --> 00:26:09,200 A on ukázal tú bez ohľadu na to, čo. 549 00:26:09,200 --> 00:26:10,800 A teraz sa snažím odstrániť dva. 550 00:26:10,800 --> 00:26:13,850 >> Takže ak je ukazovateľ ukazuje tu, som bude nasledovať, zdá sa, 551 00:26:13,850 --> 00:26:17,110 predchádzajúci ukazovateľ, ktorý mi dáva na 1. 552 00:26:17,110 --> 00:26:22,290 Ja som potom chcel povedať, že budúci pole, čo ma privádza na to 553 00:26:22,290 --> 00:26:25,410 box tu, bude rovná ukazovateľ ďalšie. 554 00:26:25,410 --> 00:26:28,400 Takže ak tento ukazovateľ, je to hneď vedľa. 555 00:26:28,400 --> 00:26:31,840 To znamená, že to musí šípka poukázať na toho chlapa. 556 00:26:31,840 --> 00:26:35,140 >> Tak čo, že riadok kódu má len urobiť, je trochu z toho. 557 00:26:35,140 --> 00:26:37,500 A teraz to vyzerá, ako krok správnym smerom. 558 00:26:37,500 --> 00:26:41,390 V podstate Chceme odstrihnúť 2 out do stredu 1 a 3. 559 00:26:41,390 --> 00:26:44,400 Takže je logické, že chceme trasy tohto ukazovateľa okolo neho. 560 00:26:44,400 --> 00:26:50,400 Takže to ďalší riadok je kontrola, či ukazovateľ ďalšie nie je null, je tu 561 00:26:50,400 --> 00:26:54,200 naozaj niekto na pravej strane 2, to znamená, že musíme tiež urobiť 562 00:26:54,200 --> 00:26:55,850 trochu odstrihnúť tu. 563 00:26:55,850 --> 00:27:00,590 >> Takže teraz je potrebné dodržiavať tento ukazovateľ a aktualizovať predchádzajúce ukazovateľ na 564 00:27:00,590 --> 00:27:05,410 ten chlap urobiť trochu obísť tu bod tu. 565 00:27:05,410 --> 00:27:07,100 A teraz, vizuálne je to pekné. 566 00:27:07,100 --> 00:27:11,930 Je to trochu chaotický v tom, že tam je nikto ukázal na 2 už. 567 00:27:11,930 --> 00:27:13,600 2 ukazuje doľava. 568 00:27:13,600 --> 00:27:14,980 A 2 sa ukazuje na pravej strane. 569 00:27:14,980 --> 00:27:17,480 Ale on môže robiť, čo chce, pretože je to asi, aby sa oslobodil. 570 00:27:17,480 --> 00:27:19,480 A nezáleží na tom, čo tieto hodnoty sú už. 571 00:27:19,480 --> 00:27:23,040 >> Čo je dôležité je, že zostávajúce chlapci sú smerovanie vyššie 572 00:27:23,040 --> 00:27:24,280 a pod ním teraz. 573 00:27:24,280 --> 00:27:25,810 A vskutku, to je to, čo robiť ďalej. 574 00:27:25,810 --> 00:27:29,360 Sme bez ukazovateľ, čo znamená, povieme operačný systém, ste vítaní 575 00:27:29,360 --> 00:27:30,906 kultivovať to. 576 00:27:30,906 --> 00:27:34,900 A potom sa konečne vrátime. 577 00:27:34,900 --> 00:27:37,220 Else implicitne, ak sa sa ešte nevrátil, 578 00:27:37,220 --> 00:27:38,290 musíme hľadať ďalej. 579 00:27:38,290 --> 00:27:41,485 Takže ukazovateľ sa rovná ukazovateľ vedľa práve znamená pohybovať toho chlapa tu. 580 00:27:41,485 --> 00:27:42,600 Presunúť toho chlapa tu. 581 00:27:42,600 --> 00:27:45,400 Presunúť toho chlapa tu, či v skutočnosti, sme nenašli číslo 582 00:27:45,400 --> 00:27:46,960 hľadáme ešte. 583 00:27:46,960 --> 00:27:49,630 >> Takže úprimne povedané, vyzerá to úplne ohromujúci, myslím, že na prvý pohľad 584 00:27:49,630 --> 00:27:52,180 pohľad, a to najmä ak ste sa snažil s tým počas testu potom zistiť, 585 00:27:52,180 --> 00:27:52,850 niečo také. 586 00:27:52,850 --> 00:27:55,050 A ty pat si na chrbát. 587 00:27:55,050 --> 00:27:57,080 No, neexistuje spôsob, ako by som mohol mať prísť s tým na kvíz. 588 00:27:57,080 --> 00:28:00,470 Ale povedal by som, môžete, ak porušíte že sa do nich jednotlivé 589 00:28:00,470 --> 00:28:04,400 prípadoch a len pešo cez neho opatrne, aj keď, pravda, pod 590 00:28:04,400 --> 00:28:06,300 stresujúce situácie. 591 00:28:06,300 --> 00:28:09,470 >> Našťastie, vyrobený obrázok všetko šťastnejší. 592 00:28:09,470 --> 00:28:11,050 Tie by mohli čerpať na túto ľubovoľný počet spôsobov. 593 00:28:11,050 --> 00:28:12,760 Nemusíte robiť krížom krážom vec tu. 594 00:28:12,760 --> 00:28:14,520 Dalo by sa to urobiť s rovnou linky, ako je tento. 595 00:28:14,520 --> 00:28:18,790 Ale podstata tohto problému, v Všeobecne platí, že bolo si uvedomiť, že 596 00:28:18,790 --> 00:28:22,060 obrázok na konci by malo vyzerať trochu niečo také, pretože 597 00:28:22,060 --> 00:28:25,030 konštantný čas znamenal, že budete mať rušenie a rušenie a rušenie 598 00:28:25,030 --> 00:28:29,900 nové uzly na začiatku zoznamu. 599 00:28:29,900 --> 00:28:31,960 Akékoľvek otázky? 600 00:28:31,960 --> 00:28:34,565 Asi najnáročnejšie určite kódovanie otázky. 601 00:28:34,565 --> 00:28:37,690 >> DIVÁKOV: Takže je zoznam podobný hlavu v predchádzajúcich príkladoch. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. Malan: Presne tak, presne tak. 603 00:28:39,640 --> 00:28:43,130 Len iný názov pre globálna premenná. 604 00:28:43,130 --> 00:28:44,380 Na celom svete, čo? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB BOWDEN: OK. 607 00:28:49,730 --> 00:28:52,020 Takže to je ten, kde sa musel napísať odsek. 608 00:28:52,020 --> 00:28:56,060 Niektorí ľudia písali eseje na túto otázku. 609 00:28:56,060 --> 00:29:00,230 Ale stačí použiť týchto šesť termíny popísať, čo sa stane, keď 610 00:29:00,230 --> 00:29:02,440 skúste kontaktovať facebook.com. 611 00:29:02,440 --> 00:29:07,930 Tak som si len pohovoriť prostredníctvom procesu s využitím všetkých týchto podmienok. 612 00:29:07,930 --> 00:29:11,290 Takže v našom prehliadači, napíšeme facebook.com a stlačte klávesu Enter. 613 00:29:11,290 --> 00:29:17,280 Takže náš prehliadač sa deje na výstavbu HTTP požadovať, že to bude posielať 614 00:29:17,280 --> 00:29:22,220 prostredníctvom nejakého procesu na Facebook pre Facebook reagovať na nás s 615 00:29:22,220 --> 00:29:24,450 HTML svojej stránky. 616 00:29:24,450 --> 00:29:28,800 >> Takže to, čo je proces ktorý požiadavku HTTP 617 00:29:28,800 --> 00:29:30,730 skutočne dostane na Facebook? 618 00:29:30,730 --> 00:29:32,790 Takže najprv musíme prekladať Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Tak práve dal názov Facebook.com, kde vlastne robí HTTP požiadavky 620 00:29:38,780 --> 00:29:39,940 treba ísť? 621 00:29:39,940 --> 00:29:44,120 Takže musíme preložiť Facebook.com na IP adresu, ktorá jednoznačne 622 00:29:44,120 --> 00:29:47,620 určuje, čo stroj vlastne chcete poslať túto žiadosť. 623 00:29:47,620 --> 00:29:49,310 Váš notebook má IP adresu. 624 00:29:49,310 --> 00:29:52,240 Čokoľvek, pripojenie k internetu má IP adresu. 625 00:29:52,240 --> 00:29:59,030 >> Takže DNS, Domain Name System, ktorá je čo sa deje zvládnuť preklad 626 00:29:59,030 --> 00:30:03,750 od facebook.com na IP adresu, ktorá vlastne chcete kontaktovať. 627 00:30:03,750 --> 00:30:08,075 Tak sme sa kontaktovať DNS servery a povedzme, čo je facebook.com? 628 00:30:08,075 --> 00:30:16,560 To hovorí, oh, to je IP adresa 190,212 niečo, niečo, niečo. 629 00:30:16,560 --> 00:30:16,900 Dobrá. 630 00:30:16,900 --> 00:30:18,850 Teraz viem, čo stroj Chcem kontaktovať. 631 00:30:18,850 --> 00:30:22,360 >> Takže potom pošlite svoju požiadavku HTTP sa k tomuto zariadeniu. 632 00:30:22,360 --> 00:30:24,140 Tak ako to dostať do toho stroja? 633 00:30:24,140 --> 00:30:27,200 No, žiadosť ide od na routeru odrážanie. 634 00:30:27,200 --> 00:30:32,630 Spomeňte si na príklad v triede, kde sme vlastne videli cestu, ktorá 635 00:30:32,630 --> 00:30:35,340 pakety sa, keď sme sa snažili komunikovať. 636 00:30:35,340 --> 00:30:38,460 Videli sme, že skok cez Atlantik Ocean na jednom mieste, alebo čokoľvek iného. 637 00:30:38,460 --> 00:30:42,820 >> Takže posledný termín portu. 638 00:30:42,820 --> 00:30:46,520 Tak to je teraz na vašom počítači. 639 00:30:46,520 --> 00:30:49,970 Môžete mať viac vecí v súčasnej dobe komunikáciu s internetom. 640 00:30:49,970 --> 00:30:53,730 Takže môžem byť spustený, povedzme, Skype. 641 00:30:53,730 --> 00:30:55,670 Mohol by som mať webový prehliadač otvorený. 642 00:30:55,670 --> 00:30:59,010 Možno som niečo, čo torrenting súbory. 643 00:30:59,010 --> 00:31:00,880 Takže všetky tieto veci sú komunikáciu s 644 00:31:00,880 --> 00:31:02,600 internet nejakým spôsobom. 645 00:31:02,600 --> 00:31:08,070 >> Takže keď váš počítač prijme nejaké dáta z internetu, ako sa to 646 00:31:08,070 --> 00:31:10,130 vedieť, čo vlastne aplikácie chce údaje? 647 00:31:10,130 --> 00:31:12,610 Ako to, či tento konkrétny Dáta sú určené pre 648 00:31:12,610 --> 00:31:16,070 torrenting aplikácie na rozdiel od na webovom prehliadači? 649 00:31:16,070 --> 00:31:20,980 Takže to je účel portov v tom, že Všetky tieto aplikácie majú 650 00:31:20,980 --> 00:31:22,720 vyhlásil port na vašom počítači. 651 00:31:22,720 --> 00:31:27,580 Takže váš webový prehliadač hovorí, hej, Počúvam na porte 1000. 652 00:31:27,580 --> 00:31:32,240 A váš torrenting programu hovorí, Počúvam na porte 3000. 653 00:31:32,240 --> 00:31:34,770 A Skype hovorí, som pomocou portu 4000. 654 00:31:34,770 --> 00:31:41,950 >> Takže keď vám niektoré dáta, ktorá patrí do jednej z týchto aplikácií, dát 655 00:31:41,950 --> 00:31:45,510 je označený port, ktorý je v skutočnosti by mali byť zaslané spolu so. 656 00:31:45,510 --> 00:31:47,950 Tak to hovorí, oh, ja patrím na porte 1000. 657 00:31:47,950 --> 00:31:50,950 Viem, že potom musím, aby postúpil toto po mojej webovom prehliadači. 658 00:31:50,950 --> 00:31:56,440 Takže dôvod, prečo je to relevantné je, že webové servery majú tendenciu 659 00:31:56,440 --> 00:31:58,240 načúvať na porte 80. 660 00:31:58,240 --> 00:32:02,420 Takže keď som sa kontaktovať Facebook.com, som komunikáciu s nejakým strojom. 661 00:32:02,420 --> 00:32:06,390 Ale musím povedať, aký port, ktorý Stroj chcem komunikovať. 662 00:32:06,390 --> 00:32:09,160 A webové servery majú tendenciu byť načúva na porte 80. 663 00:32:09,160 --> 00:32:14,010 >> Keby chceli, mohli by ho nastaviť tak, že uvádza ako na porte 7000. 664 00:32:14,010 --> 00:32:19,090 A potom vo webovom prehliadači, mohol by som ručne zadať Facebook.com: 7000 k 665 00:32:19,090 --> 00:32:24,600 poslať požiadavku na porte 7000 webového servera Facebooku. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. Malan: A v tomto prípade, a to aj aj keď sme nemali požadovať, aby ľudia 667 00:32:26,820 --> 00:32:30,000 spomenúť to, v tomto prípade, aký port by žiadosť skutočne ísť na? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Skúste to znova. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Presne tak. 672 00:32:44,300 --> 00:32:47,960 Nehľadám, ale jemnosť že tam nič ako posledný. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: Tak HTTPS, pretože je to špeciálne pre počúvanie 674 00:32:51,770 --> 00:32:55,180 zašifrované, je to na porte 4430. 675 00:32:55,180 --> 00:32:57,680 >> Divákov: A e-maily sú 25, že jo? 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. Malan: Odchádzajúce e-maily, 25, jo. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Ja ani neviem, väčšina - Všetky tie nižšia bývajú 678 00:33:03,760 --> 00:33:06,310 vyhradené pre veci. 679 00:33:06,310 --> 00:33:09,260 Myslím, že všetko pod 1024 je vyhradené. 680 00:33:09,260 --> 00:33:13,450 >> DIVÁKOV: Prečo hovoríte, 3. Bol zlé číslo? 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Pretože IP adresy, tam štyri zoskupenia číslic. 682 00:33:18,820 --> 00:33:21,090 A oni sú od 0 do 255.. 683 00:33:21,090 --> 00:33:28,060 Takže 192.168.2.1 je spoločný lokálnej siete IP adresy. 684 00:33:28,060 --> 00:33:30,840 Všimnite si, všetky z nich sú menšie ako 255.. 685 00:33:30,840 --> 00:33:33,570 Takže keď som začal s 300, že nemohol mať 686 00:33:33,570 --> 00:33:35,210 jedným z čísiel. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. Malan: Ale to hlúpe klip od - bol to CSI, kde mali 688 00:33:38,170 --> 00:33:39,970 číslo, ktoré je príliš veľké pre IP adresu. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Prípadné otázky na to? 691 00:33:46,110 --> 00:33:51,710 Budúci, takže úplná zmena tému, ale máme to PHP polia pre 692 00:33:51,710 --> 00:33:53,270 domy na štvorkolke. 693 00:33:53,270 --> 00:33:56,360 A máme neusporiadané zoznam. 694 00:33:56,360 --> 00:33:59,550 A chceme vytlačiť každej položky zoznamu Len obsahujúci názov domu. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Takže máme slučky foreach. 697 00:34:11,870 --> 00:34:17,540 Takže pamätajte, že syntax je foreach pole ako položka v poli. 698 00:34:17,540 --> 00:34:22,360 Takže prostredníctvom každej opakovanie slučky, Dom bude trvať na jednej z 699 00:34:22,360 --> 00:34:24,060 hodnoty vnútri tohto poľa. 700 00:34:24,060 --> 00:34:26,530 >> Na prvý iterácie, dom bude Cabot dom. 701 00:34:26,530 --> 00:34:30,370 Na druhej iterácie, dom bude byť Courier dom a tak ďalej. 702 00:34:30,370 --> 00:34:34,370 Takže pre každú štvoricu ako dom, sme len ísť do tlače - 703 00:34:34,370 --> 00:34:37,250 ste tiež mohli ozvenou - 704 00:34:37,250 --> 00:34:42,199 položku zoznamu a potom názov domu je a zatvorte položku zoznamu. 705 00:34:42,199 --> 00:34:45,210 Zložené zátvorky sú tu voliteľná. 706 00:34:45,210 --> 00:34:49,480 >> A potom sme tiež povedal v otázke sama o sebe, nezabudnite zavrieť 707 00:34:49,480 --> 00:34:50,770 Jednoduchý zoznam zobrazí značka. 708 00:34:50,770 --> 00:34:53,949 Takže musíme opustiť režim PHP aby sa to urobiť. 709 00:34:53,949 --> 00:35:00,280 Alebo by sme mohli ozvenou zavrieť neusporiadaný zoznam tag. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. Malan: Tiež tu by pokuta boli použiť starú školu 711 00:35:02,380 --> 00:35:07,340 slučka s $ i = 0 0 a použitím sa počíta na zistiť dĺžku lúča. 712 00:35:07,340 --> 00:35:09,240 Taky úplne v pohode, len trochu wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> DIVÁKOV: Takže ak ste sa chystali [Nepočuteľné], by vy - 715 00:35:14,742 --> 00:35:16,734 Ja zabudol, čo slučka [nepočuteľné] je. 716 00:35:16,734 --> 00:35:21,380 Chceli by ste $ quad držiak aj? 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. Malan: Presne tak. 718 00:35:21,850 --> 00:35:23,100 Jo, presne tak. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: Ešte niečo? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. Malan: Dobre. 723 00:35:32,010 --> 00:35:32,300 Trade-off. 724 00:35:32,300 --> 00:35:38,290 Takže tam boli hrozno odpovedí možné, pre každú z nich. 725 00:35:38,290 --> 00:35:40,510 Boli sme naozaj len hľadáte niečo presvedčivé pre nahor a 726 00:35:40,510 --> 00:35:41,100 nevýhoda. 727 00:35:41,100 --> 00:35:44,830 A číslo 16 spýtal, overovanie používateľov " Vstup na strane klienta, ako u JavaScriptu, 728 00:35:44,830 --> 00:35:47,280 miesto na strane servera, ako u PHP. 729 00:35:47,280 --> 00:35:49,450 Takže to, čo je hore z robí na strane klienta? 730 00:35:49,450 --> 00:35:53,780 >> No, jedna z vecí, ktoré sme navrhli, je že znížiť latenciu, pretože vám 731 00:35:53,780 --> 00:35:56,750 Nemusíte sa obťažovať kontaktovanie Server, ktorý môže trvať niekoľko 732 00:35:56,750 --> 00:36:00,390 milisekúnd alebo dokonca pár sekúnd vylúčením, že aj len 733 00:36:00,390 --> 00:36:04,670 overovanie vstupu na strane klienta používateľov tým, spustenie obslužné rutiny on-predložiť a 734 00:36:04,670 --> 00:36:06,650 len kontrolovať, sa im napíšte niečo pre meno? 735 00:36:06,650 --> 00:36:08,080 Páčilo sa im niečo písať in pre e-mailovú adresu? 736 00:36:08,080 --> 00:36:10,950 Páčilo sa vybrať koľaj z Výberová ponuka? 737 00:36:10,950 --> 00:36:14,360 >> Môžete im dať okamžitú spätnú väzbu pomocou počítača gigahertz 738 00:36:14,360 --> 00:36:16,770 alebo čo majú, že je vlastne na svojom stole. 739 00:36:16,770 --> 00:36:19,310 Takže je to len lepšie užívateľské zažiť zvyčajne. 740 00:36:19,310 --> 00:36:24,460 Ale Nevýhodou robí na strane klienta overenie, ak si to bez toho, 741 00:36:24,460 --> 00:36:29,860 robí server-side validáciu je, že Najviac niekto prichádza z CS50 vie 742 00:36:29,860 --> 00:36:33,980 že môžete len odosielať dáta, ktoré chcete na serveri ľubovoľný počet spôsobov. 743 00:36:33,980 --> 00:36:37,030 Úprimne povedané, vo väčšine ľubovoľnom prehliadači, môžete kliknite okolo v nastavení a len 744 00:36:37,030 --> 00:36:40,110 vypnúť JavaScript, ktorá by preto, zakázať akúkoľvek formu 745 00:36:40,110 --> 00:36:41,080 validácia. 746 00:36:41,080 --> 00:36:44,460 >> Ale vy ste tiež mohli pripomenúť, že aj ja robil nejaké tajomné veci v triede pomocou 747 00:36:44,460 --> 00:36:47,790 telnet a dokonca predstiera, že bude prehliadač zaslaním get 748 00:36:47,790 --> 00:36:49,240 požiadavky na server. 749 00:36:49,240 --> 00:36:51,030 A to rozhodne nie je pomocou ľubovoľného JavaScript. 750 00:36:51,030 --> 00:36:53,290 To je len môj zadaním príkazov na klávesnici. 751 00:36:53,290 --> 00:36:57,410 Takže naozaj, každý programátor v dostatočne komfort s webom a HTTP 752 00:36:57,410 --> 00:37:01,690 mohol poslať čo dát on alebo ona chce k serveru bez overenia. 753 00:37:01,690 --> 00:37:05,470 A ak váš server nie je tiež kontrola, to sa mi dať meno, je 754 00:37:05,470 --> 00:37:08,930 to vlastne platnú e-mailovú adresu, robil si vyberú koľaji, môžete skončiť 755 00:37:08,930 --> 00:37:12,800 hore vkladanie falošné, alebo len prázdne údaje do databázy, čo pravdepodobne 756 00:37:12,800 --> 00:37:15,450 sa nebude dobrá vec, ak ste za predpokladu, že tam bol. 757 00:37:15,450 --> 00:37:16,770 >> Tak to je nepríjemné reality. 758 00:37:16,770 --> 00:37:19,890 Ale všeobecne, na strane klienta validácia je skvelá. 759 00:37:19,890 --> 00:37:21,810 Ale to znamená, že dvakrát toľko práce. 760 00:37:21,810 --> 00:37:25,970 Hoci tam predsa existujú rôzne knižnice, JavaScript knižnice pre 761 00:37:25,970 --> 00:37:28,830 inštancie, ktoré tvoria toľko, oveľa menšie bolesti hlavy. 762 00:37:28,830 --> 00:37:31,940 A môžete znova použiť niektoré z kódu server-side, na strane klienta. 763 00:37:31,940 --> 00:37:35,980 Ale uvedomiť, že to je typicky ďalšie práce. 764 00:37:35,980 --> 00:37:36,415 Jo. 765 00:37:36,415 --> 00:37:37,792 >> DIVÁKOV: Takže keby sme povedal menej bezpečné - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. Malan: [smeje sa] 767 00:37:39,205 --> 00:37:39,680 Fuj. 768 00:37:39,680 --> 00:37:43,105 Tí sú vždy ťažšie tie sa rozhodnúť. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN: To by boli prijaté. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. Malan: Čo? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: Vytvoril som tento problém. 772 00:37:45,810 --> 00:37:46,735 To by boli prijaté. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. Malan: Jo. 774 00:37:47,220 --> 00:37:47,830 >> DIVÁKOV: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: Ale my sme neprijali pre prvý - 776 00:37:51,770 --> 00:37:53,630 dobre, to, čo sme hľadali, je niečo ako vy nemusíte 777 00:37:53,630 --> 00:37:55,270 komunikáciu so serverom. 778 00:37:55,270 --> 00:37:58,355 Neprijali sme jednoducho rýchlejší. 779 00:37:58,355 --> 00:38:00,080 >> DIVÁKOV: Čo nie znova načítať stránku? 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Áno. 781 00:38:00,430 --> 00:38:03,000 To bola prijatá odpoveď. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. Malan: Čokoľvek, kde sme cítili, to bolo viac pravdepodobné ako nepravdepodobné, 783 00:38:06,300 --> 00:38:09,780 že ste vedel, že to, čo bolo hovorí, čo je ťažké 784 00:38:09,780 --> 00:38:13,500 vedenie k tomu niekedy. 785 00:38:13,500 --> 00:38:16,000 Miesto pomocou prepojeného zoznamu z poľa k udržaniu 786 00:38:16,000 --> 00:38:17,590 radené zoznam celých čísel. 787 00:38:17,590 --> 00:38:21,000 Takže hor sa často citujú sa spojené zoznamy, ktoré motivovali ich celok 788 00:38:21,000 --> 00:38:22,370 úvod bol dostanete dynamiku. 789 00:38:22,370 --> 00:38:23,030 Môžu dorásť. 790 00:38:23,030 --> 00:38:23,950 Môžu zmenšiť. 791 00:38:23,950 --> 00:38:27,370 Takže nemusíte sa preskočiť obručou skutočne vytvoriť viac pamäte 792 00:38:27,370 --> 00:38:28,140 s radom. 793 00:38:28,140 --> 00:38:30,310 Alebo nemusíte len povedať, je mi ľúto, užívateľ. 794 00:38:30,310 --> 00:38:31,410 Pole je vyplnené. 795 00:38:31,410 --> 00:38:35,850 Takže dynamický rast zoznamu. 796 00:38:35,850 --> 00:38:37,210 Nevýhodou však spojových zoznamov? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> DIVÁKOV: Je to lineárna. 799 00:38:43,356 --> 00:38:45,800 Vyhľadávanie na Google zozname je lineárna namiesto toho, čo sa prihlásite 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. Malan: Presne tak. 801 00:38:46,360 --> 00:38:50,160 Vyhľadávanie na Google zozname je lineárna, aj keď je to ďalej, pretože môžete 802 00:38:50,160 --> 00:38:53,170 len postupujte podľa nasledujúcich strúhanky, tieto ukazovatele, od začiatku zoznamu 803 00:38:53,170 --> 00:38:53,570 až do konca. 804 00:38:53,570 --> 00:38:57,970 Nemôžete využiť náhodný prístup a, tak, binárne vyhľadávanie, aj keď je to 805 00:38:57,970 --> 00:39:00,740 ďalej, že by ste mohli čo robiť s maticu. 806 00:39:00,740 --> 00:39:02,390 A je tu aj ďalšie náklady. 807 00:39:02,390 --> 00:39:02,966 Jo. 808 00:39:02,966 --> 00:39:03,800 >> DIVÁKOV: Memory neefektívne? 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. Malan: Jo. 810 00:39:04,130 --> 00:39:06,940 No, ja by som to nutne hovoria neefektívne. 811 00:39:06,940 --> 00:39:10,110 Ale to stáť viac pamäte, pretože budete potrebovať 32 bitov pre každý 812 00:39:10,110 --> 00:39:13,400 uzol pre ďalšie ukazovatele, na aspoň pre jednotlivo prepojeného zoznamu. 813 00:39:13,400 --> 00:39:16,660 Teraz, keď ste len ukladanie celých čísel a pridávate ukazovateľ, ktorý je 814 00:39:16,660 --> 00:39:17,830 v skutočnosti druh non-triviálne. 815 00:39:17,830 --> 00:39:19,340 Je to zdvojnásobenie množstva pamäte. 816 00:39:19,340 --> 00:39:22,330 Ale v skutočnosti, ak ste ukladanie spájať zoznam štruktúr, ktoré by mohli mať 817 00:39:22,330 --> 00:39:25,540 8 bajtov, 16 bajtov, ešte ako to, že je to možno menej 818 00:39:25,540 --> 00:39:26,500 z medzné náklady. 819 00:39:26,500 --> 00:39:28,320 Ale je to nákladovo však. 820 00:39:28,320 --> 00:39:31,880 Takže jeden z tých by si Bol v poriadku, tienisté stránky. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Použitie PHP namiesto C písať príkazového riadku programu. 823 00:39:36,100 --> 00:39:41,890 Tak tu je to často rýchlejší použiť jazyk, ako je PHP alebo Ruby alebo Python. 824 00:39:41,890 --> 00:39:43,700 Jednoducho rýchlo otvoriť do textového editora. 825 00:39:43,700 --> 00:39:45,900 Máte mnoho ďalších funkcií Vám k dispozícii. 826 00:39:45,900 --> 00:39:49,325 PHP má kuchynský drez funkcií, zatiaľ čo v C, je 827 00:39:49,325 --> 00:39:50,420 majú veľmi, veľmi málo. 828 00:39:50,420 --> 00:39:53,820 V skutočnosti, chlapci vedia tvrdo že nemáte hash tabuľky. 829 00:39:53,820 --> 00:39:55,000 Nemáte spojené zoznamy. 830 00:39:55,000 --> 00:39:57,470 Ak chcete tí, musíte im realizovať sami. 831 00:39:57,470 --> 00:40:00,950 >> Takže jeden hore PHP alebo naozaj nejaký interpretovaný jazyk je rýchlosť 832 00:40:00,950 --> 00:40:02,920 pomocou ktorého môžete písať kód. 833 00:40:02,920 --> 00:40:06,660 Ale nevýhoda, videl sme sa, keď som rýchlo sa šľahačkou a misspeller 834 00:40:06,660 --> 00:40:11,780 implementácia v prednáške pomocou PHP, je že použitie interpretovaný jazyk 835 00:40:11,780 --> 00:40:13,570 je zvyčajne pomalší. 836 00:40:13,570 --> 00:40:18,420 A my sme videli, že preukázateľne sa zvýšenie v čase od 0,3 sekúnd až 3 837 00:40:18,420 --> 00:40:24,440 sekúnd, a to z dôvodu výkladu že v skutočnosti deje. 838 00:40:24,440 --> 00:40:27,060 >> Ďalším dňom bolo to, že vám nemusíte kompilovať. 839 00:40:27,060 --> 00:40:30,130 Tak to tiež urýchľuje vývoj mimochodom, pretože nemáte 840 00:40:30,130 --> 00:40:31,360 dva kroky k behu programu. 841 00:40:31,360 --> 00:40:32,140 Stačí mať jeden. 842 00:40:32,140 --> 00:40:35,260 A tak to je celkom presvedčivé rovnako. 843 00:40:35,260 --> 00:40:38,450 Namiesto použitia SQL databázy CSV súbor pre ukladanie dát. 844 00:40:38,450 --> 00:40:40,230 Tak SQL databázy sa používa pre pset7. 845 00:40:40,230 --> 00:40:42,060 Súbory CSV ste nepoužili moc. 846 00:40:42,060 --> 00:40:45,960 Ale vy ste ju použil nepriamo pset7 ako aj tým, že hovorí do Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Ale CSV je, rovnako ako súbor programu Excel, ale super jednoduché, kde stĺpce sú 848 00:40:49,330 --> 00:40:54,010 len demarked čiarkami vnútri z inak textového súboru. 849 00:40:54,010 --> 00:40:56,740 A pomocou SQL databázy je trochu viac presvedčivé. 850 00:40:56,740 --> 00:41:00,060 Je to obrátene, pretože sa veci ako vybrať a vložiť a odstrániť. 851 00:41:00,060 --> 00:41:03,790 A vám, podľa všetkého indexy, ktoré MySQL a ďalšie databázy, ako je 852 00:41:03,790 --> 00:41:07,510 Oracle, vybudovať pre vás v pamäti, ktoré znamená, že váš výber je pravdepodobne 853 00:41:07,510 --> 00:41:09,000 bude lineárny zhora nadol. 854 00:41:09,000 --> 00:41:11,300 Je to naozaj bude niečo ako binárne vyhľadávanie alebo niečo 855 00:41:11,300 --> 00:41:12,520 podobne v duchu. 856 00:41:12,520 --> 00:41:13,930 Takže sú všeobecne rýchlejšie. 857 00:41:13,930 --> 00:41:16,040 >> Ale nevýhodou je, že je to len viac práce. 858 00:41:16,040 --> 00:41:16,730 Je to viac úsilia. 859 00:41:16,730 --> 00:41:18,140 Musíte pochopiť databáz. 860 00:41:18,140 --> 00:41:18,940 Musíte nastaviť. 861 00:41:18,940 --> 00:41:20,840 Musíte server spustiť že databáza. 862 00:41:20,840 --> 00:41:22,750 Musíte pochopiť, ako ju nakonfigurovať. 863 00:41:22,750 --> 00:41:24,930 Takže to sú len tie druhy kompromisov. 864 00:41:24,930 --> 00:41:27,860 Vzhľadom k tomu, CSV, môžete vytvoriť s gedit. 865 00:41:27,860 --> 00:41:28,770 A máte dobré ísť. 866 00:41:28,770 --> 00:41:31,550 Neexistuje žiadny zložitosti ďalej. 867 00:41:31,550 --> 00:41:34,870 >> Použitie trie miesto hash tabuľky s oddelenou reťazenie pre uloženie 868 00:41:34,870 --> 00:41:37,490 slovník slov pripomínajúcich z pset5. 869 00:41:37,490 --> 00:41:42,480 Preto sa snaží nahor, teoreticky najmenej, je to, čo? 870 00:41:42,480 --> 00:41:46,380 Konštantný čas, aspoň pokiaľ ste hash na každom jednotlivcovi 871 00:41:46,380 --> 00:41:48,990 písmená v slovách, ako ste vy, môže mať pre pset5. 872 00:41:48,990 --> 00:41:52,720 To by mohlo byť päť hash, šesť hash v prípade, že je päť alebo šesť 873 00:41:52,720 --> 00:41:53,900 písmen v slove. 874 00:41:53,900 --> 00:41:54,580 A to je celkom dobré. 875 00:41:54,580 --> 00:41:56,910 A v prípade, že je horná hranica na tom, ako dlho vaše slová môžu byť, to je 876 00:41:56,910 --> 00:41:59,320 naozaj asymptoticky konštantný čas. 877 00:41:59,320 --> 00:42:05,180 >> Vzhľadom k tomu, hash tabuľka s oddeleným reťazenie, problém tam s tým 878 00:42:05,180 --> 00:42:09,070 druh dátové štruktúry je to, že výkon svojich algoritmov zvyčajne 879 00:42:09,070 --> 00:42:12,700 závisí na mnohých faktoroch už v dátovej štruktúre. 880 00:42:12,700 --> 00:42:15,660 A to je určite prípad reťaze, pričom viac vecí si dať 881 00:42:15,660 --> 00:42:18,800 do hash tabuľky, už ti reťaze ísť, čo znamená, že v najhoršom 882 00:42:18,800 --> 00:42:21,960 prípad, vec, ktorú by mohol mať záujem o je úplne na konci jedného 883 00:42:21,960 --> 00:42:26,000 z týchto reťazcov, ktoré účinne prejde do niečoho lineárne. 884 00:42:26,000 --> 00:42:29,450 >> Teraz, v praxi by sa úplne byť v prípade, že hash tabuľky s 885 00:42:29,450 --> 00:42:32,820 reťazca je rýchlejší ako zodpovedajúca Implementácia trie. 886 00:42:32,820 --> 00:42:35,570 Ale to z rôznych dôvodov, medzi , Ktoré sa snažia využiť celý rad 887 00:42:35,570 --> 00:42:39,240 pamäti, že môže v skutočnosti pomalé veci dole, pretože nemusíte dostať pekný 888 00:42:39,240 --> 00:42:42,410 Výhody niečo, čo nazýva ukladanie do vyrovnávacej pamäte, kde veci, ktoré sú blízko pri sebe 889 00:42:42,410 --> 00:42:45,420 v pamäti možno pristupovať často rýchlejšie. 890 00:42:45,420 --> 00:42:48,180 A niekedy môžete prísť s naozaj dobrý hašovacej funkcie. 891 00:42:48,180 --> 00:42:51,060 I keď budete musieť strácať trochu pamäť, môžete skutočne byť schopný 892 00:42:51,060 --> 00:42:54,430 nájsť veci rýchlo, a nie rovnako zlý ako lineárne. 893 00:42:54,430 --> 00:42:58,410 >> Takže v skratke, nebolo nutne s niektorou z týchto jedného alebo aj dva 894 00:42:58,410 --> 00:43:00,050 konkrétne veci, ktoré sme hľadali. 895 00:43:00,050 --> 00:43:03,080 Naozaj nič presvedčivý ako inflačné a protiinflačnej 896 00:43:03,080 --> 00:43:04,800 všeobecne zachytil našu pozornosť. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: Tak na druhú stranu, my sme neprijíma sama o sebe "rýchlejšie." Vy 898 00:43:11,840 --> 00:43:14,540 musel hovoriť niečo o tom. 899 00:43:14,540 --> 00:43:17,910 Dokonca aj keď ste povedal teoreticky rýchlejší, vedeli sme, že tak nejako pochopil, 900 00:43:17,910 --> 00:43:19,470 že je to 0 z 1.. 901 00:43:19,470 --> 00:43:22,820 A hash tabuľka, v teórii, nie je 0 1.. 902 00:43:22,820 --> 00:43:26,550 Za zmienku niečo o behu všeobecne Máš body. 903 00:43:26,550 --> 00:43:32,640 Ale "rýchlejšie", väčšina riešení na veľká doska, ktorá sa snaží boli 904 00:43:32,640 --> 00:43:34,990 objektívne pomalší ako riešenie ktoré boli hash tabuľky. 905 00:43:34,990 --> 00:43:37,250 Tak rýchlejšie a sama o sebe Nie je to pravda. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> DAVID J. Malan: Dom de dom dom. 908 00:43:44,380 --> 00:43:46,686 Som asi jediný, kto si uvedomuje, to je, ako to má 909 00:43:46,686 --> 00:43:47,500 sa vyhlásil, že jo? 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: Mal som vlastne ani poňatia. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. Malan: Je vyrobená pocit v mojej hlave. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: Robím túto. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Takže to je ten, kde ste museli čerpať diagram podobný by ste mohli 916 00:44:04,243 --> 00:44:06,040 videli na posledných skúškach. 917 00:44:06,040 --> 00:44:12,200 Takže poďme sa len pozrieť na to. 918 00:44:12,200 --> 00:44:18,170 Takže z uzla HTML, máme dve deti, hlava a telo. 919 00:44:18,170 --> 00:44:20,570 Tak sme sa rozdeliť - hlavu a telo. 920 00:44:20,570 --> 00:44:22,280 Hlava má názov značky. 921 00:44:22,280 --> 00:44:23,710 Takže máme titul. 922 00:44:23,710 --> 00:44:28,450 >> Teraz, jedna vec, ktorú mnoho ľudí zabudol je, že tieto textové uzly 923 00:44:28,450 --> 00:44:30,430 prvky v rámci tohto stromu. 924 00:44:30,430 --> 00:44:36,260 Tak sme tu náhodou je nakresliť ako ovály odlíšiť ich od nich 925 00:44:36,260 --> 00:44:37,380 druhy uzlov. 926 00:44:37,380 --> 00:44:41,450 Ale Oznámenie tiež tu máme vrchol, strednej a dolnej skončí na 927 00:44:41,450 --> 00:44:42,560 textové uzly. 928 00:44:42,560 --> 00:44:46,250 Tak zabúdam ktoré bolo trochu spoločného chyby. 929 00:44:46,250 --> 00:44:48,770 >> Telo má tri deti - Tieto tri divs. 930 00:44:48,770 --> 00:44:53,340 Takže div, div, div a potom text uzol deti týchto divs. 931 00:44:53,340 --> 00:44:55,900 To je docela veľa to na tom, že otázky. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. Malan: A je potrebné poznamenať, aj keď nebýva na týchto 933 00:44:57,860 --> 00:45:01,040 Podrobnosti v čase, keď sme strávili na JavaScript, ktorý príkaz robí, v 934 00:45:01,040 --> 00:45:02,290 Skutočnosť, záležitosť technicky. 935 00:45:02,290 --> 00:45:06,330 Takže ak hlava je pred telom v HTML, potom by sa mala objaviť na 936 00:45:06,330 --> 00:45:08,860 vľavo tela v skutočnom DOM. 937 00:45:08,860 --> 00:45:12,265 To mu je, všeobecne, len FYI, niečo, čo nazýva aby dokument, kde 938 00:45:12,265 --> 00:45:13,260 to záleží. 939 00:45:13,260 --> 00:45:17,470 A ak ste boli sa vykonáva analyzátor, program, ktorý číta HTML v budove 940 00:45:17,470 --> 00:45:20,960 do stromu v pamäti, aby som bol úprimný, to je intuitívne pravdepodobne to, čo ste 941 00:45:20,960 --> 00:45:24,720 robiť tak ako tak - zhora nadol, zľava doprava. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Otázky na to? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Mám urobiť ďalší? 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. Malan: Iste. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Tak toto je pretečeniu vyrovnávacej pamäti Útok otázka. 948 00:45:39,320 --> 00:45:43,740 Hlavná vec, ktorú si uvedomiť, tu je, dobre, ako by mohol protivník trik 949 00:45:43,740 --> 00:45:46,170 tento program do realizácie ľubovoľný kód? 950 00:45:46,170 --> 00:45:51,860 Takže argv1, prvý príkazového riadku argument tohto programu, ktoré môže byť 951 00:45:51,860 --> 00:45:53,920 ľubovoľne dlho. 952 00:45:53,920 --> 00:45:59,160 Ale tu sme pomocou memcpy kopírovať argv1, ktorý je tu bar. 953 00:45:59,160 --> 00:46:00,165 Sme odovzdaním ako argument. 954 00:46:00,165 --> 00:46:02,050 A tak je to s na meno bare. 955 00:46:02,050 --> 00:46:08,040 >> Takže sme memcpying bar do tejto vyrovnávacej pamäti c 956 00:46:08,040 --> 00:46:09,400 Koľko bajtov sme kopírovanie? 957 00:46:09,400 --> 00:46:14,040 No však veľa bytov bar sa stane používať, dĺžku tohto argumentu. 958 00:46:14,040 --> 00:46:17,930 Ale c je iba 12 bajtov široký. 959 00:46:17,930 --> 00:46:22,280 Takže ak by sme zadajte argument príkazového riadku to je dlhšie ako 12 bajtov, sme 960 00:46:22,280 --> 00:46:25,470 bude pretekať to najmä vyrovnávacej pamäti. 961 00:46:25,470 --> 00:46:31,000 Teraz, ako by protivník trik naprogramovať do vykonania ľubovoľného kódu? 962 00:46:31,000 --> 00:46:34,910 >> Takže nezabudnite, že tu Hlavné volá foo. 963 00:46:34,910 --> 00:46:37,340 A tak teda hlavné výzvy foo. 964 00:46:37,340 --> 00:46:40,408 Poďme nakresliť to. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Takže máme stack. 967 00:46:46,990 --> 00:46:49,090 A hlavné je rámik zásobníka v spodnej časti. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Na nejakom mieste, hlavné výzvy foo. 970 00:46:53,250 --> 00:46:55,390 No, okamžite, hlavné výzvy foo. 971 00:46:55,390 --> 00:46:57,130 A tak foo dostane svoj vlastný rámik zásobníka. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Teraz, v určitom okamihu, foo sa chystá na návrat. 974 00:47:02,220 --> 00:47:06,810 A šiel foo vráti, musíme vedieť, na čo riadok kódu vnútri hlavné my 975 00:47:06,810 --> 00:47:10,610 bolo, aby vedeli, kde by sme mali pokračovať v main. 976 00:47:10,610 --> 00:47:13,100 Môžeme volať foo z celku veľa rôznych miestach. 977 00:47:13,100 --> 00:47:14,620 Ako môžeme vedieť, kam sa vrátiť? 978 00:47:14,620 --> 00:47:16,460 No, musíme uložiť, že niekde. 979 00:47:16,460 --> 00:47:23,010 >> Takže niekde priamo tu, uložíme kde by sme sa mali vrátiť k raz 980 00:47:23,010 --> 00:47:24,070 foo vracia. 981 00:47:24,070 --> 00:47:26,350 A to je spiatočná adresa. 982 00:47:26,350 --> 00:47:30,490 Tak ako by mohol protivník využiť to je skutočnosť, že 983 00:47:30,490 --> 00:47:37,550 Táto vyrovnávacia pamäť c je uložená, poďme povedať, tu je cca. 984 00:47:37,550 --> 00:47:39,690 Takže máme 12 bajtov pre C. 985 00:47:39,690 --> 00:47:40,540 To je cca. 986 00:47:40,540 --> 00:47:43,030 A to je Foo stack krúžok. 987 00:47:43,030 --> 00:47:49,970 Takže v prípade, že používateľ sa zlými úmyslami zadá viac bajtov, ako 12 rokov alebo je zadajte príkaz 988 00:47:49,970 --> 00:47:54,570 linka argument, že je dlhší ako 12 znaky, potom budeme 989 00:47:54,570 --> 00:47:57,540 pretečeniu tejto vyrovnávacej pamäti. 990 00:47:57,540 --> 00:47:59,910 >> Môžeme ísť ďalej. 991 00:47:59,910 --> 00:48:02,220 A v určitom okamihu, môžeme ísť ďaleko natoľko, že začneme 992 00:48:02,220 --> 00:48:05,120 prepísanie tejto spiatočnú adresu. 993 00:48:05,120 --> 00:48:08,310 Takže akonáhle sme sa prepísať návratovú adresu, to znamená, že pri foo 994 00:48:08,310 --> 00:48:14,220 sa vracia, vraciame sa tam, kde užívateľ sa zlými úmyslami sa hovorí, to by 995 00:48:14,220 --> 00:48:19,490 bez ohľadu na hodnotu vstúpila, bez ohľadu na znaky užívateľ zadal. 996 00:48:19,490 --> 00:48:24,320 A tak v prípade, že používateľ sa zlými úmyslami je, že obzvlášť šikovný, môže mať táto 997 00:48:24,320 --> 00:48:29,255 návrat niekam do printDef funkcie alebo niekde v malloc 998 00:48:29,255 --> 00:48:31,830 funkcie, proste kdekoľvek ľubovoľný. 999 00:48:31,830 --> 00:48:38,420 >> Ale aj ďalšie chytré je to, čo v prípade, že má užívateľ vrátiť k práve tu. 1000 00:48:38,420 --> 00:48:41,920 A potom začnete vykonávanie to ako riadky kódu. 1001 00:48:41,920 --> 00:48:46,610 Takže v tomto bode, môže užívateľ zadať čo chce v tejto oblasti. 1002 00:48:46,610 --> 00:48:52,210 A on má úplnú kontrolu na programe. 1003 00:48:52,210 --> 00:48:53,460 Otázky na to? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Takže ďalšia otázka je kompletný reimplementáciu foo takým spôsobom, 1006 00:49:00,970 --> 00:49:02,620 že už to nie je zraniteľná. 1007 00:49:02,620 --> 00:49:03,870 >> Takže tam je niekoľko spôsobov, ako si to mohol urobiť. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Máme stále c iba sú dĺžky 12. 1010 00:49:13,330 --> 00:49:16,480 Dalo by sa zmenili v tomto ako súčasť vášho riešenia. 1011 00:49:16,480 --> 00:49:18,930 Tiež sme pridali kontrolu, aby sa , Že bar nie je null. 1012 00:49:18,930 --> 00:49:24,460 Aj keď nepotreboval že pre plnú úveru. 1013 00:49:24,460 --> 00:49:27,690 Takže sme kontrolu prvej dĺžka reťazca baru. 1014 00:49:27,690 --> 00:49:31,650 Ak je väčší ako 12, potom nie sú v skutočnosti robiť kópie. 1015 00:49:31,650 --> 00:49:33,010 Takže to je jeden zo spôsobov, ktorým sa to. 1016 00:49:33,010 --> 00:49:36,750 >> Ďalší spôsob, ktorým sa to je miesto s c sa len v dĺžke 12, má to 1017 00:49:36,750 --> 00:49:39,310 byť dĺžka strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Ďalší spôsob, ktorým sa to je skutočne len vrátiť. 1019 00:49:43,370 --> 00:49:46,690 Takže ak ste sa práve zbavili všetkých to, ak ste práve odstránené všetky 1020 00:49:46,690 --> 00:49:51,830 riadkov kódu, by ste sa dostali plné uznanie, pretože túto funkciu 1021 00:49:51,830 --> 00:49:54,150 nie je v skutočnosti dosiahnuť nič. 1022 00:49:54,150 --> 00:49:57,650 Je to kopírovanie príkazového riadku Argument do nejakého poľa v 1023 00:49:57,650 --> 00:49:59,960 jej miestna stack frame. 1024 00:49:59,960 --> 00:50:01,310 A potom, čo sa vracia. 1025 00:50:01,310 --> 00:50:04,020 A čo to dokonalý, je preč. 1026 00:50:04,020 --> 00:50:09,740 Takže návrat bol tiež dostatočné spôsob, ako dostať všetky zásluhy. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. Malan: Nie tak celkom duch otázka, ale prijateľné za 1028 00:50:13,425 --> 00:50:15,580 spec však. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Otázky týkajúce sa niečo z toho? 1030 00:50:18,260 --> 00:50:22,270 Jedna vec, ktorá vám aspoň potrebné na zostavenie kódu. 1031 00:50:22,270 --> 00:50:24,810 Takže aj keď technicky nie ste zraniteľná, ak váš kód nie je 1032 00:50:24,810 --> 00:50:29,130 zostaviť, sme nemali prijať. 1033 00:50:29,130 --> 00:50:31,350 Žiadne otázky? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. Malan: Chcete povedať, tento titul? 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: Nie 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. Malan: Tak v tomto, to bol buď dobrá správa alebo zlá správa. 1038 00:50:40,470 --> 00:50:43,870 To je doslova rovnaký problém ako prvý kvíz. 1039 00:50:43,870 --> 00:50:46,140 A to je skoro rovnaký problém, pset1. 1040 00:50:46,140 --> 00:50:49,980 Ale to bolo zámerne zjednodušený, aby sa jednoduchšie pyramída, ktorý môže byť 1041 00:50:49,980 --> 00:50:52,330 riešená s mierne jednoduchšie iterácie. 1042 00:50:52,330 --> 00:50:55,680 A naozaj, čo sme sa dostať na tu nebolo toľko logiky, 1043 00:50:55,680 --> 00:50:58,100 pretože pravdepodobne v tomto okamihu, že ste oveľa pohodlnejšie, než ste boli 1044 00:50:58,100 --> 00:51:01,850 v týždni jednej s pre slučky alebo prečo slučiek, ale naozaj dráždiť seba, že 1045 00:51:01,850 --> 00:51:04,790 ste trochu pohodlnejšie s Predstava, že PHP nie je len o tom, čo 1046 00:51:04,790 --> 00:51:05,290 programovania. 1047 00:51:05,290 --> 00:51:07,820 To môže v skutočnosti byť použitý ako jazyk písať programy príkazového riadku. 1048 00:51:07,820 --> 00:51:10,060 >> A vskutku, to je to, čo sa snažíme upozorniť na. 1049 00:51:10,060 --> 00:51:12,060 To je PHP programu pre príkazový riadok. 1050 00:51:12,060 --> 00:51:16,690 Takže C kód tu, zatiaľ čo správna v C, nie je správne pre PHP. 1051 00:51:16,690 --> 00:51:17,940 Ale kód je v skutočnosti rovnaké. 1052 00:51:17,940 --> 00:51:21,720 Ak porovnáte riešenie pre Quiz 0 proti Quiz 1, zistíte, že 1053 00:51:21,720 --> 00:51:25,630 je to takmer totožné, s výnimkou Niektoré dolára a pre 1054 00:51:25,630 --> 00:51:27,250 absencia dátového typu. 1055 00:51:27,250 --> 00:51:31,720 Najmä, ak sa pozrieme tu, uvidíte, že sme iterácii, v tomto 1056 00:51:31,720 --> 00:51:33,730 prípad od 1 do až 7. 1057 00:51:33,730 --> 00:51:34,910 >> Mohli sme to urobil 0 index. 1058 00:51:34,910 --> 00:51:37,320 Ale niekedy si myslím, že je to len mentálne jednoduchšie premýšľať o veciach, 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 Ak chcete jeden blok, a potom dva bloky, potom tri, potom 1061 00:51:40,300 --> 00:51:41,770 bodka, bodka, bodka sedem. 1062 00:51:41,770 --> 00:51:45,960 Máme j je inicializovaný na hodnotu 1 a potom sa počíta až na i. 1063 00:51:45,960 --> 00:51:48,150 A všetko je tu inak identické. 1064 00:51:48,150 --> 00:51:49,790 Ale stojí za zmienku, sú pár vecí. 1065 00:51:49,790 --> 00:51:53,230 Dáme vám tieto dva riadky, to prvé jeden, goofily pomenovaný ako shebang 1066 00:51:53,230 --> 00:51:54,560 pre ostrú ranou. 1067 00:51:54,560 --> 00:51:58,770 A to práve určuje cestu, zložka, v ktorej môže byť program 1068 00:51:58,770 --> 00:52:02,160 zistili, že chcete použiť interpretovať tento súbor. 1069 00:52:02,160 --> 00:52:04,710 >> A potom vedenie po tom, o Samozrejme, že znamená, že vstup do režimu PHP. 1070 00:52:04,710 --> 00:52:07,740 A linka na samom dne znamená, že režim exit PHP. 1071 00:52:07,740 --> 00:52:09,740 A to funguje všeobecne, s interpretovať jazykov. 1072 00:52:09,740 --> 00:52:14,370 Je to docela nepríjemné, ak píšete Program v súbore s názvom foo.php. 1073 00:52:14,370 --> 00:52:17,320 A potom užívatelia majú len pamätajte, OK, pre spustenie tohto programu, som 1074 00:52:17,320 --> 00:52:22,320 musieť zadať "php priestor foo.php." Druh nepríjemné keď už nič iné. 1075 00:52:22,320 --> 00:52:25,270 A to tiež ukazuje, že váš program je napísaný v PHP, ktorý nie je všetko 1076 00:52:25,270 --> 00:52:27,060 že osvetlenie pre užívateľa. 1077 00:52:27,060 --> 00:52:30,100 >> Takže môžete odstrániť. Php úplne pamätáte z prednášky. 1078 00:52:30,100 --> 00:52:35,690 A môžete skutočne urobiť. / Foo, ak ste chmodded to tým, že to 1079 00:52:35,690 --> 00:52:36,500 spustiteľný súbor. 1080 00:52:36,500 --> 00:52:39,630 Takže chmod + x foo by urobil to. 1081 00:52:39,630 --> 00:52:41,460 A ak ste tiež pridať cirkus tu. 1082 00:52:41,460 --> 00:52:45,320 Ale v skutočnosti, problém bol dostať na vytlačiť niečo také. 1083 00:52:45,320 --> 00:52:51,100 No HTML, nie C-kódu iste, len niektoré PHP. 1084 00:52:51,100 --> 00:52:54,100 Takže Milo potom sa vrátil do problému 25. 1085 00:52:54,100 --> 00:52:58,050 A v roku 25, ste dostali z nasledujúcich kostra kód, ktorý bol 1086 00:52:58,050 --> 00:52:59,730 celkom jednoduché webové stránky. 1087 00:52:59,730 --> 00:53:04,230 A šťavnaté časť HTML-múdry bol dole tu, kde máme vo vnútri tela 1088 00:53:04,230 --> 00:53:09,160 forma, ktorá má unikátne ID vstupov vnútri ktorej je dva vstupy, jeden 1089 00:53:09,160 --> 00:53:11,950 s myšlienkou meno, jeden s myšlienkou tlačidla. 1090 00:53:11,950 --> 00:53:14,240 >> Prvý bol typ textu, Druhá typu predložiť. 1091 00:53:14,240 --> 00:53:16,930 A tak sme vám dali, v skutočnosti, viac zložky, než ste potrebovali, len tak 1092 00:53:16,930 --> 00:53:19,230 vy ste mali možnosti, s ktorými k vyriešeniu tohto problému. 1093 00:53:19,230 --> 00:53:21,130 Nemusíte nevyhnutne potrebujú všetky tieto ID. 1094 00:53:21,130 --> 00:53:23,580 Ale to vám umožní riešiť to rôznymi spôsobmi. 1095 00:53:23,580 --> 00:53:27,050 A až na vrchol, všimnite si, že Cieľom bolo vyvolať 1096 00:53:27,050 --> 00:53:27,960 Okno takhle - 1097 00:53:27,960 --> 00:53:28,780 Dobrý deň, Milo! - 1098 00:53:28,780 --> 00:53:31,270 vyskočí v prehliadači pomocou super jednoduché, ak 1099 00:53:31,270 --> 00:53:33,190 Nie je škaredá, funkcia upozornenia. 1100 00:53:33,190 --> 00:53:37,480 A tak nakoniec, to sa scvrkáva koncepčne nejako počúvať 1101 00:53:37,480 --> 00:53:41,290 podanie formulára na strane klienta , Nie na strane servera, tak nejako 1102 00:53:41,290 --> 00:53:45,640 odpovede na toto podanie podľa chytil hodnotu, ktorá používateľ zadaný 1103 00:53:45,640 --> 00:53:50,120 do poľa Názov a potom jeho zobrazenie v tele výstrahy. 1104 00:53:50,120 --> 00:53:53,460 >> Takže jeden spôsob, ako to môžete urobiť, je sa jQuery, ktorá vyzerá trochu 1105 00:53:53,460 --> 00:53:56,880 syntakticky mätúce na prvý pohľad. 1106 00:53:56,880 --> 00:54:00,760 Môžete to urobiť s čistým DOM kódu - document.getelement podľa ID. 1107 00:54:00,760 --> 00:54:02,530 Ale poďme sa pozrieť na túto verziu. 1108 00:54:02,530 --> 00:54:05,110 Mám pár dôležitých prvej línie. 1109 00:54:05,110 --> 00:54:09,460 Takže jeden, máme tento riadok, ktorý je totožný s tým, čo ste mohli vidieť 1110 00:54:09,460 --> 00:54:13,830 v, verím, form2.html z triedy v týždni 9. 1111 00:54:13,830 --> 00:54:16,960 A to je len hovorím, vykonať Nasledujúci kód pri 1112 00:54:16,960 --> 00:54:18,430 Dokument je teraz pripravený. 1113 00:54:18,430 --> 00:54:21,770 To je dôležité nielen preto, HTML stránky sa čítajú zhora 1114 00:54:21,770 --> 00:54:23,280 dole, zľava doprava. 1115 00:54:23,280 --> 00:54:27,910 >> A preto, ak sa pokúsite urobiť niečo v kóde, až tu na nejakú DOM 1116 00:54:27,910 --> 00:54:31,560 prvok, niektoré značky HTML, ktorá je dole tu, že ste to robíte príliš skoro, 1117 00:54:31,560 --> 00:54:34,220 , Pretože to nemá ani boli načítané do pamäte. 1118 00:54:34,220 --> 00:54:37,740 Takže tým, že hovorí toto document.ready linka, hovoríme, 1119 00:54:37,740 --> 00:54:39,040 tu je nejaký kód, prehliadač. 1120 00:54:39,040 --> 00:54:42,440 Ale nie spustiť, kým celý Dokument je teraz pripravený, že je DOM 1121 00:54:42,440 --> 00:54:44,320 strom existuje v pamäti. 1122 00:54:44,320 --> 00:54:47,110 To je trochu viac jednoduché, ak syntakticky 1123 00:54:47,110 --> 00:54:51,890 trochu iná, kde hovorím, grab prvok HTML, ktorého jedinečný 1124 00:54:51,890 --> 00:54:53,560 identifikátor vstupy. 1125 00:54:53,560 --> 00:54:56,220 To je to, čo značka hash označuje, jedinečný identifikátor. 1126 00:54:56,220 --> 00:54:58,070 A potom volám. Odoslať. 1127 00:54:58,070 --> 00:55:01,660 >> Tak. Predloží tu je funkcia, inak známy ako metóda, ktorá je 1128 00:55:01,660 --> 00:55:05,850 vnútri objektu na ľavej strane strane tam, že som nemal zvýrazniť. 1129 00:55:05,850 --> 00:55:08,990 Takže ak si myslíte, vstupov ako objekt v pamäti - a naozaj to je. 1130 00:55:08,990 --> 00:55:10,440 Je to uzol na strome - 1131 00:55:10,440 --> 00:55:16,580 . Predloží znamená, že keď je táto forma sa toto číslo je predložený, vykonať 1132 00:55:16,580 --> 00:55:17,700 Nasledujúci kód. 1133 00:55:17,700 --> 00:55:20,290 Nezaujíma ma, čo názov Funkcia je mi vykonávania. 1134 00:55:20,290 --> 00:55:23,760 Tak tu som pomocou, rovnako ako predtým, to, čo je tzv. funkcia lambda alebo 1135 00:55:23,760 --> 00:55:24,720 anonymné funkcie. 1136 00:55:24,720 --> 00:55:27,640 Je to vôbec intelektuálne zaujímavé, iné, než je to nemá meno, 1137 00:55:27,640 --> 00:55:30,220 čo je v poriadku, ak ste len kedy bude raz zavolať. 1138 00:55:30,220 --> 00:55:34,490 A vnútri som tam vlastne zvládnuť predloženie formulára. 1139 00:55:34,490 --> 00:55:36,810 Prvýkrát som deklarovať premennú tzv hodnota. 1140 00:55:36,810 --> 00:55:40,610 A čo potom je účinok tohto zvýraznená časť tu? 1141 00:55:40,610 --> 00:55:44,755 Čo to urobiť na na vysokej úrovni pre mňa? 1142 00:55:44,755 --> 00:55:48,539 >> DIVÁKOV: Dostane hodnotu, ktorá užívateľ nemal v nasledujúcej HTML. 1143 00:55:48,539 --> 00:55:50,920 Dostane to ID a potom nájde hodnotu neho. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. Malan: Presne tak. 1145 00:55:51,590 --> 00:55:54,300 Je to chytí uzol, ktorého jedinečný Identifikátor je názov. 1146 00:55:54,300 --> 00:55:56,900 To dostane hodnotu v ňom, ktoré je pravdepodobne to, čo používateľ 1147 00:55:56,900 --> 00:55:58,190 napísal ho alebo seba. 1148 00:55:58,190 --> 00:56:01,020 A potom sa ukladá, aby do premennej s názvom hodnotu. 1149 00:56:01,020 --> 00:56:03,720 Ako stranou, mohli by ste mať tiež urobiť to trochu inak. 1150 00:56:03,720 --> 00:56:09,250 Úplne prijateľné tým, že robí niečo, čo lož var hodnota dostane 1151 00:56:09,250 --> 00:56:10,500 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 A to je dôvod, prečo je to trochu zdĺhavý, že nebude používať jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Meno". Hodnota. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Takže úplne prijateľné. 1157 00:56:19,620 --> 00:56:22,770 Rôzne spôsoby, ako to urobiť. jQuery len má tendenciu byť trochu stručnejší a 1158 00:56:22,770 --> 00:56:25,230 určite viac populárne medzi programátormi. 1159 00:56:25,230 --> 00:56:27,590 >> Teraz robím trochu zdravého rozumu skontrolovať, pretože v probléme 1160 00:56:27,590 --> 00:56:30,820 vyhlásenie sme výslovne povedal, ak užívateľ ešte napísaný jeho alebo jej 1161 00:56:30,820 --> 00:56:32,580 meno, nevykazujú upozornenia. 1162 00:56:32,580 --> 00:56:35,390 Ale môžete skontrolovať tým, že práve kontrolu na prázdny reťazec pre 1163 00:56:35,390 --> 00:56:37,850 quote-koniec citátu v prípade, že je nič v skutočnosti neexistuje. 1164 00:56:37,850 --> 00:56:40,880 Ale ak to nie je rovná citátom-koniec citátu, Chcem volať upozornenia. 1165 00:56:40,880 --> 00:56:45,610 A zaujímavá časť je, že sme pomocou operátora navyše, ktoré 1166 00:56:45,610 --> 00:56:48,130 čo robí v JavaScripte? 1167 00:56:48,130 --> 00:56:48,740 Zřetězit. 1168 00:56:48,740 --> 00:56:50,690 Takže je to ako Phps operátor bodka. 1169 00:56:50,690 --> 00:56:52,820 Rovnaký nápad, mierne odlišná syntaxe. 1170 00:56:52,820 --> 00:56:55,280 A ja som len vytvoriť reťazec, ktorý ste videli na snímke obrazovky - 1171 00:56:55,280 --> 00:56:57,750 Ahoj, tak a tak. 1172 00:56:57,750 --> 00:56:59,200 >> A potom posledný detail je to. 1173 00:56:59,200 --> 00:57:04,970 Prečo by som sa vrátiť false vnútro tejto anonymné funkcie? 1174 00:57:04,970 --> 00:57:07,420 >> DIVÁKOV: Nie je hodnotu. 1175 00:57:07,420 --> 00:57:09,380 Môžete dať vo forme. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Je to len hovorí, ak hodnota nie je rovná prázdne, potom to urobiť. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Tam bola prázdna v tomto podaní. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. Malan: OK. 1181 00:57:21,170 --> 00:57:21,640 Opatrní. 1182 00:57:21,640 --> 00:57:22,830 K dispozícii je tu nikto iný. 1183 00:57:22,830 --> 00:57:25,510 A to return false je mimo ze ak podmienky. 1184 00:57:25,510 --> 00:57:29,470 Tak toto zvýrazní líniu, vráti false, vykonáva bez ohľadu na to, kedy 1185 00:57:29,470 --> 00:57:32,310 Formulár je predkladaný. 1186 00:57:32,310 --> 00:57:36,810 Čo vracia false vnútri tohto Obslužná rutina udalosti, ako sa tomu hovorí, 1187 00:57:36,810 --> 00:57:38,450 udalosť v otázke že podanie? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> DIVÁKOV: Vzhľadom k tomu, stane len raz. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. Malan: stane len raz. 1191 00:57:45,320 --> 00:57:46,821 Nie tak celkom. 1192 00:57:46,821 --> 00:57:47,292 Jo? 1193 00:57:47,292 --> 00:57:50,589 >> DIVÁKOV: Zabraňuje formulár od predloženie predvolené správanie, 1194 00:57:50,589 --> 00:57:52,480 ktoré by na stránku znova načítať. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. Malan: Presne tak. 1196 00:57:53,110 --> 00:57:56,490 Takže som preťaženiu termín predloženia tu, pretože ja hovorím, forma je 1197 00:57:56,490 --> 00:57:57,670 bol predložený. 1198 00:57:57,670 --> 00:58:02,240 Ale ako si navrhnúť, že to v skutočnosti nie je bola predložená v pravom spôsobom HTTP. 1199 00:58:02,240 --> 00:58:06,870 Po kliknutí na tlačidlo Odoslať, pretože naše onSubmit handler, budeme zastavovať 1200 00:58:06,870 --> 00:58:09,040 že podacie formulár, aby som tak povedal. 1201 00:58:09,040 --> 00:58:11,290 Sme potom robí naša vec s kódom JavaScript. 1202 00:58:11,290 --> 00:58:14,070 Ale ja som zámerne vracia false, pretože to, čo nechcem, aby sa to stalo 1203 00:58:14,070 --> 00:58:18,430 zlomok sekundy neskôr, je pre celý formulár sama o sebe, ktorá bude predložená na webe 1204 00:58:18,430 --> 00:58:22,800 server s kľúče a hodnoty, zmenou URL musí byť niečo ako 1205 00:58:22,800 --> 00:58:26,180 q = mačky alebo čo sme urobili, Napríklad, v triede. 1206 00:58:26,180 --> 00:58:29,640 Nechcem, aby sa to stalo, pretože nie je server načúvanie na to 1207 00:58:29,640 --> 00:58:30,690 vytvoriť podanie. 1208 00:58:30,690 --> 00:58:32,320 Je to čisto vykonané v kóde JavaScript. 1209 00:58:32,320 --> 00:58:35,760 A to je dôvod, prečo som nemal ani akcie atribút na mojej forme, pretože som 1210 00:58:35,760 --> 00:58:38,870 nemajú v úmysle, aby to niekedy ísť na server. 1211 00:58:38,870 --> 00:58:40,780 >> Takže je to byť predložené. 1212 00:58:40,780 --> 00:58:44,340 Ale my zachytenie tohto formulára podanie a prevenciu predvolené 1213 00:58:44,340 --> 00:58:47,477 správanie, čo je v skutočnosti ísť celú cestu k serveru. 1214 00:58:47,477 --> 00:58:48,730 >> DIVÁKOV: Takže udržať to na strane klienta. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. Malan: Vedenie je na strane klienta. 1216 00:58:49,780 --> 00:58:51,030 Presne tak. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Ďalší na rade bol môj oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB BOWDEN: OK. 1221 00:59:00,430 --> 00:59:04,990 Takže táto prvá otázka bola všeobecne hrubý k ľuďom. 1222 00:59:04,990 --> 00:59:07,270 Aj keď tie neskôr išiel lepšie. 1223 00:59:07,270 --> 00:59:12,260 Takže ste mali vybrať správnu údaje typy na oboch týchto stĺpcov. 1224 00:59:12,260 --> 00:59:17,750 A ako z nich majú niektoré veci o nich, že 1225 00:59:17,750 --> 00:59:20,620 aby voľba ťažké. 1226 00:59:20,620 --> 00:59:24,430 Takže int nebol platný typ pre čísla. 1227 00:59:24,430 --> 00:59:29,410 Dôvodom je 12-miestne číslo účtu číslo, int nie je dostatočne veľká, aby 1228 00:59:29,410 --> 00:59:31,070 uloženie celkom číslic. 1229 00:59:31,070 --> 00:59:36,570 Takže voľba je možná by bol veľký int, ak ste náhodou viete, že. 1230 00:59:36,570 --> 00:59:42,090 Ďalšou možnosťou by mohlo byť char pole o dĺžke 12. 1231 00:59:42,090 --> 00:59:44,560 Takže jeden z tých by to fungovalo. 1232 00:59:44,560 --> 00:59:46,100 Int, že nie. 1233 00:59:46,100 --> 00:59:50,170 >> Teraz, rovnováha, si spomeniem na pset7. 1234 00:59:50,170 --> 00:59:59,540 Tak sme sa špeciálne používa desatinné číslo na uložiť hodnotu akcií, alebo - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID J. Malan: Cash. 1236 01:00:00,550 --> 01:00:01,060 >> ROB BOWDEN: Cash. 1237 01:00:01,060 --> 01:00:05,710 Použili sme desiatkovej uložiť čiastku hotovosti, ktoré má v súčasnej dobe užívateľ. 1238 01:00:05,710 --> 01:00:10,950 Takže dôvod, prečo to robíme, je pretože, pamätajte, že pláva. 1239 01:00:10,950 --> 01:00:12,480 K dispozícii je s plávajúcou desatinnou čiarkou v presnosti. 1240 01:00:12,480 --> 01:00:18,200 Nemožno presne uložiť hotovosť hodnoty, ako ich chceme tu. 1241 01:00:18,200 --> 01:00:23,630 Takže desiatkovej je schopný presne sklad niečo, povedzme, dve desatinné miesta. 1242 01:00:23,630 --> 01:00:27,630 To je dôvod, prečo bilancia, chceme ho byť desatinné, a nie plávať. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. Malan: A taky, taky, aj keď to by mohlo byť šikovný v iných 1244 01:00:30,230 --> 01:00:32,760 súvislostiach premýšľať, možno to Je to šanca pre int. 1245 01:00:32,760 --> 01:00:34,420 Budem len sledovať veci haliere. 1246 01:00:34,420 --> 01:00:38,670 Pretože sme explicitne ukázal predvolené hodnota je 100,00, že 1247 01:00:38,670 --> 01:00:40,380 znamená, že to môže byť len int. 1248 01:00:40,380 --> 01:00:45,310 A ďalšie jemnosť tiež s radom bolo, že to nebolo myslené 1249 01:00:45,310 --> 01:00:46,180 byť chyták. 1250 01:00:46,180 --> 01:00:49,860 Ale spomínam, že int v MySQL, rovnako ako v C, aspoň v 1251 01:00:49,860 --> 01:00:51,440 zariadenie, je 32-bit. 1252 01:00:51,440 --> 01:00:53,960 A aj keď neočakávame, že vám presne vedieť, koľko číslic, ktoré 1253 01:00:53,960 --> 01:00:56,910 prostriedky, si pripomenúť, že najväčší počet môžete predstavovať potenciálne 1254 01:00:56,910 --> 01:01:00,710 32-bitové číslo je zhruba to, čo? 1255 01:01:00,710 --> 01:01:02,760 >> Aké číslo si vždy povedať? 1256 01:01:02,760 --> 01:01:04,530 2 až 32, čo je to, čo zhruba? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Nemusíte presne vedieť. 1259 01:01:08,780 --> 01:01:10,580 Ale asi je užitočné v živote. 1260 01:01:10,580 --> 01:01:12,200 Je to zhruba 4 miliardy. 1261 01:01:12,200 --> 01:01:14,430 Tak sme povedali, že za niekoľko minút. 1262 01:01:14,430 --> 01:01:16,360 Viem, že som povedal, že za niekoľko minút. 1263 01:01:16,360 --> 01:01:17,670 A to je zhruba 4 miliardy. 1264 01:01:17,670 --> 01:01:19,710 A to je dobré pravidlo palca vedieť. 1265 01:01:19,710 --> 01:01:21,880 Ak máte 8 bitov, 256 je magické číslo. 1266 01:01:21,880 --> 01:01:24,160 Ak máte 32 bitov, 4 miliárd dávať alebo brať. 1267 01:01:24,160 --> 01:01:27,140 Takže ak ste práve napísať 4000000000, uvidíte, že je to menej číslic ako 1268 01:01:27,140 --> 01:01:30,970 12, čo znamená, že je zjavne dosť expresivita zachytiť 1269 01:01:30,970 --> 01:01:34,220 Číslo účtu 12-miestne. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 Takže tie ostatné šlo lepšie. 1272 01:01:38,520 --> 01:01:40,900 Takže predpokladám, že banka ukladá 20 dolárov mesačne 1273 01:01:40,900 --> 01:01:42,400 udržiavací poplatok na všetkých účtoch. 1274 01:01:42,400 --> 01:01:45,506 S tým, čo SQL dotazu by banka odpočítať 20 dolárov z každého počtu, a to aj v prípade, 1275 01:01:45,506 --> 01:01:47,520 to má za následok niektoré negatívne bilanciou? 1276 01:01:47,520 --> 01:01:50,380 Takže v podstate existujú štyri Hlavnými typmi otázok - 1277 01:01:50,380 --> 01:01:52,840 vložiť, vyberte, aktualizovať a mazať. 1278 01:01:52,840 --> 01:01:56,080 Takže to, čo si myslíme, že sme bude tu používať? 1279 01:01:56,080 --> 01:01:57,000 Aktualizovať. 1280 01:01:57,000 --> 01:01:58,260 >> Takže poďme sa pozrieť. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Tak tu sme aktualizáciu. 1283 01:02:05,870 --> 01:02:09,900 Čo tabuľke sme aktualizáciu účtov? 1284 01:02:09,900 --> 01:02:11,670 Tak aktualizácie účtov. 1285 01:02:11,670 --> 01:02:15,390 A potom syntaxe hovorí, čo v účtoch sme aktualizáciu? 1286 01:02:15,390 --> 01:02:19,520 No, my sme nastavenie vyváženia rovnajúcu sa aktuálna hodnota zostatku mínus 20. 1287 01:02:19,520 --> 01:02:22,860 Takže to bude aktualizovať všetky riadky účtov, odpočítaním 1288 01:02:22,860 --> 01:02:26,250 20 dolárov z rovnováhy. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. Malan: Častou chybou tu, aj keď sme niekedy odpustil to, 1290 01:02:29,260 --> 01:02:32,990 bolo skutočne PHP kód tu volanie funkcie dotazu alebo uvedenie 1291 01:02:32,990 --> 01:02:35,460 úvodzovky okolo všetkého, čo Nepotreboval, aby sa tam. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Nezabudnite, že MySQL je oddelený jazyk od PHP. 1293 01:02:39,780 --> 01:02:42,410 Sme stalo, že sa písanie MySQL v PHP. 1294 01:02:42,410 --> 01:02:46,180 A PHP sa to potom posiela sa k MySQL serveru. 1295 01:02:46,180 --> 01:02:51,120 Ale nemusíte PHP, aby sa komunikovať so serverom MySQL. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. Malan: Presne tak. 1297 01:02:51,730 --> 01:02:54,240 Takže žiadne premenné sa znaky dolára by mala byť v tomto kontexte. 1298 01:02:54,240 --> 01:02:59,550 To môže len robiť všetko z matematiky v databáze samotné. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Takže ten budúci. 1301 01:03:01,300 --> 01:03:02,731 Je to ďalší? 1302 01:03:02,731 --> 01:03:03,210 Jo. 1303 01:03:03,210 --> 01:03:06,570 Takže s tým, čo SQL dotazu by banka načítanie čísla účtov svojich 1304 01:03:06,570 --> 01:03:09,300 Najbohatší zákazníci, ktoré sa zostatky väčšie ako 1000? 1305 01:03:09,300 --> 01:03:13,280 Tak ktorý z týchto štyroch hlavných typov budeme chcieť tú? 1306 01:03:13,280 --> 01:03:14,430 Vyberte. 1307 01:03:14,430 --> 01:03:16,650 Takže chceme vybrať. 1308 01:03:16,650 --> 01:03:17,610 Čo chceme vybrať? 1309 01:03:17,610 --> 01:03:19,380 Čo stĺpec chceme vybrať? 1310 01:03:19,380 --> 01:03:20,970 Budeme sa konkrétne chcete vyberte číslo. 1311 01:03:20,970 --> 01:03:23,910 Ale ak ste povedal, hviezda, sme Tiež pripustil, že. 1312 01:03:23,910 --> 01:03:25,820 >> Takže zvoľte číslo z akého stola? 1313 01:03:25,820 --> 01:03:26,640 Účty. 1314 01:03:26,640 --> 01:03:28,370 A potom stav chceme? 1315 01:03:28,370 --> 01:03:30,140 Kde zostatok väčší ako 1000. 1316 01:03:30,140 --> 01:03:31,720 Sme tiež prijala väčšie alebo rovné. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Posledná. 1319 01:03:36,190 --> 01:03:42,940 S tým, čo SQL dotazu by banka zavrieť, tj odstrániť každý účet, ktorý 1320 01:03:42,940 --> 01:03:44,480 má bilanciu 0 dolárov? 1321 01:03:44,480 --> 01:03:47,620 Tak ktorý z tých štyroch sme chcieť používať? 1322 01:03:47,620 --> 01:03:48,320 Odstrániť. 1323 01:03:48,320 --> 01:03:50,180 Takže syntaxe, že? 1324 01:03:50,180 --> 01:03:51,890 Odstrániť z akého stola? 1325 01:03:51,890 --> 01:03:53,550 Účty. 1326 01:03:53,550 --> 01:03:55,790 A potom sa podmienka, ktorá chceme odstrániť - 1327 01:03:55,790 --> 01:03:57,280 kde zostatok sa rovná nule. 1328 01:03:57,280 --> 01:04:03,050 Takže odstrániť všetky riadky z účtov vtedy, je nulová. 1329 01:04:03,050 --> 01:04:04,300 Otázky týkajúce sa niektorého z nich? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Chcete fronty? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. Malan: sprievodca fronty. 1333 01:04:11,200 --> 01:04:17,110 Takže v tomto jednom, vám dal nám trochu zoznámiť štruktúra, ktorá sme skúmali A 1334 01:04:17,110 --> 01:04:20,450 bit v triede vedľa of štruktúr, ktorý bol údaje 1335 01:04:20,450 --> 01:04:21,910 Štruktúra príbuzný v duchu. 1336 01:04:21,910 --> 01:04:24,670 Rozdiel však s fronte že sme museli nejako spomenúť, kto 1337 01:04:24,670 --> 01:04:27,900 bol v prednej časti fronty, vo veľkých časť tak, aby sme mohli urobiť viac 1338 01:04:27,900 --> 01:04:30,530 efektívne využitie pamäte, aspoň ak sme pomocou poľa. 1339 01:04:30,530 --> 01:04:35,460 >> Vzhľadom k tomu, odvolanie, ak máme pole, ak Napríklad, to je predná časť 1340 01:04:35,460 --> 01:04:38,470 front, keď som si do fronty tu, a potom niekto dostane v súlade 1341 01:04:38,470 --> 01:04:42,710 za mnou, za mnou, za mnou, a jeden človek vystúpi z radu, si 1342 01:04:42,710 --> 01:04:45,930 mohli, ako sme videli niektoré z našich človeka dobrovoľníci v triede, majú všetci 1343 01:04:45,930 --> 01:04:47,100 posunúť týmto spôsobom. 1344 01:04:47,100 --> 01:04:50,880 Ale všeobecne, keď všetci robiť niečo, čo nie je najlepšie využitie času 1345 01:04:50,880 --> 01:04:54,600 v programe, pretože to znamená, že vaše algoritmus beží v tom, čo 1346 01:04:54,600 --> 01:04:56,520 Asymptotická doba chodu? 1347 01:04:56,520 --> 01:04:57,420 Je to lineárne. 1348 01:04:57,420 --> 01:04:59,600 >> A mám pocit, že je trochu hlúpe. 1349 01:04:59,600 --> 01:05:02,890 Ak je ďalší človek v rade je ďalší človek, ktorý má ísť do 1350 01:05:02,890 --> 01:05:04,660 obchod, nemajú všetci majú sa pohybujú spoločne. 1351 01:05:04,660 --> 01:05:08,200 Len nech ten človek sa trhal až príde čas, napríklad. 1352 01:05:08,200 --> 01:05:09,870 Takže môžeme si trochu času ušetriť tam. 1353 01:05:09,870 --> 01:05:14,840 A tak k tomu, že aj keď to znamená, že že hlava fronty alebo 1354 01:05:14,840 --> 01:05:18,060 predné fronty sa chystá postupne pohybovať hlbšie a hlbšie 1355 01:05:18,060 --> 01:05:23,340 do poľa a prípadne by mohli v skutočnosti sa zalomia okolo, ak sme pomocou 1356 01:05:23,340 --> 01:05:25,790 pole pre uloženie ľudí v tejto fronte. 1357 01:05:25,790 --> 01:05:28,390 Takže môžete takmer myslieť pole ako kruhová údaje 1358 01:05:28,390 --> 01:05:29,880 štruktúra v tomto zmysle. 1359 01:05:29,880 --> 01:05:33,970 >> Takže si nejako musieť sledovať veľkosť, alebo naozaj koniec to 1360 01:05:33,970 --> 01:05:36,250 a potom, kde je počiatok toho je. 1361 01:05:36,250 --> 01:05:39,490 Takže navrhujeme, že deklarujete jedna taká fronta, volanie 1362 01:05:39,490 --> 01:05:41,330 to q, len jedno písmeno. 1363 01:05:41,330 --> 01:05:44,570 Potom navrhujeme, aby predné byť inicializovaný na nulu, a to, že veľkosť 1364 01:05:44,570 --> 01:05:45,470 byť inicializovaný na nulu. 1365 01:05:45,470 --> 01:05:47,770 >> Takže teraz, nič vnútri tejto fronty. 1366 01:05:47,770 --> 01:05:50,910 A žiadame vás, aby ste dokončiť vykonávanie Zaradí nižšie 1367 01:05:50,910 --> 01:05:55,250 takým spôsobom, že funkcia pridá n na Koniec q a potom vráti hodnotu true. 1368 01:05:55,250 --> 01:05:58,690 Ale ak q je plná, alebo negatívne, Funkcia by mala radšej vrátiť false. 1369 01:05:58,690 --> 01:06:01,060 A ti dal nám pár predpokladov. 1370 01:06:01,060 --> 01:06:04,320 Ale to nie je naozaj funkčne relevantné, len to bool existuje, 1371 01:06:04,320 --> 01:06:06,690 pretože, technicky, bool nie je existujú v C, ak obsahujú 1372 01:06:06,690 --> 01:06:07,310 isté hlavičkový súbor. 1373 01:06:07,310 --> 01:06:09,350 Takže to bola len sa tam, že boli nie je to len trik 1374 01:06:09,350 --> 01:06:10,940 Otázka také veci. 1375 01:06:10,940 --> 01:06:16,280 >> Tak enqueue, sme navrhli vo vzorke riešenie, realizovať nasledujúcim spôsobom. 1376 01:06:16,280 --> 01:06:20,420 Raz sme najprv skontrolujte jednoduchosť, na nízko visiace ovocie. 1377 01:06:20,420 --> 01:06:23,820 Ak je fronta plná alebo číslo, ktoré sa snažíte vložiť je menej 1378 01:06:23,820 --> 01:06:26,380 ako nula, ktoré sme si povedali v Špecifikácie problému by 1379 01:06:26,380 --> 01:06:30,320 nemalo byť dovolené, pretože chceme len non-záporné hodnoty, potom by ste mali 1380 01:06:30,320 --> 01:06:31,640 len vrátiť okamžite false. 1381 01:06:31,640 --> 01:06:33,820 Takže niektoré pomerne jednoduché Kontrola chýb. 1382 01:06:33,820 --> 01:06:38,720 Ak však budete chcieť pridať, že skutočná číslo, čo musel urobiť trochu 1383 01:06:38,720 --> 01:06:39,440 na mysli. 1384 01:06:39,440 --> 01:06:41,330 A to je miesto, kde je to trochu nepríjemné psychicky, pretože budete musieť 1385 01:06:41,330 --> 01:06:43,000 prísť na to, ako zaobchádzať s wraparound. 1386 01:06:43,000 --> 01:06:46,870 >> Ale zárodok myšlienky tu, že je na záujem pre nás je, že ovinovacie 1387 01:06:46,870 --> 01:06:51,480 často znamená, modulárny aritmetika a mod operátor, percento strane, 1388 01:06:51,480 --> 01:06:55,140 kde môžete ísť z väčšej hodnoty späť na nulu, a potom jeden a dva a 1389 01:06:55,140 --> 01:06:58,650 tri a potom späť okolo nuly, jedna a dve a tri a tak ďalej 1390 01:06:58,650 --> 01:06:59,380 znova a znova. 1391 01:06:59,380 --> 01:07:02,880 Takže spôsob, ako navrhujeme robiť to je že my chceme, aby index do 1392 01:07:02,880 --> 01:07:05,850 Pole s názvom čísla, kde naše celé čísla klamať. 1393 01:07:05,850 --> 01:07:10,740 Ale tam dostať, najprv chcem urobiť bez ohľadu na veľkosť frontu, ale je 1394 01:07:10,740 --> 01:07:14,080 pridajte sa, že bez ohľadu na Predná časť zoznamu je. 1395 01:07:14,080 --> 01:07:17,880 A efekt, ktorý je nám dať na pravá pozície vo fronte a 1396 01:07:17,880 --> 01:07:20,970 Predpokladajte, že prvá osoba v súlade je na začiatku, ktorému 1397 01:07:20,970 --> 01:07:24,130 ona absolútne mohlo byť, ak by sme bol tiež posun každého. 1398 01:07:24,130 --> 01:07:26,710 Ale my sme len vytvoriť prácu pre seba, keby sme sa 1399 01:07:26,710 --> 01:07:27,800 že konkrétna cesta. 1400 01:07:27,800 --> 01:07:29,330 >> Takže môžeme udržať relatívne jednoduché. 1401 01:07:29,330 --> 01:07:32,180 Nechceme mať na pamäti, že sme len pridal int do fronty. 1402 01:07:32,180 --> 01:07:35,850 A potom sme sa len vrátiť true. 1403 01:07:35,850 --> 01:07:38,560 Medzitým, v dequeue, sme sa opýtali môžete vykonať nasledujúce kroky. 1404 01:07:38,560 --> 01:07:42,260 Vykonať to takým spôsobom, že dequeues, že sa odstraňuje a vráti, 1405 01:07:42,260 --> 01:07:44,190 int na prednej strane frontu. 1406 01:07:44,190 --> 01:07:46,410 Ak chcete odstrániť int, postačí na to zabudnúť. 1407 01:07:46,410 --> 01:07:47,650 Nemusíte prepísať svojím dielom. 1408 01:07:47,650 --> 01:07:48,820 Takže je to stále vlastne tam. 1409 01:07:48,820 --> 01:07:51,930 Rovnako ako dát na pevnom disku, sme jednoducho ignorovať skutočnosť, 1410 01:07:51,930 --> 01:07:52,970 že je to teraz. 1411 01:07:52,970 --> 01:07:55,520 A ak q je prázdna, mali by sme namiesto toho vráti negatívny 1. 1412 01:07:55,520 --> 01:07:56,750 Tak to cíti ľubovoľný. 1413 01:07:56,750 --> 01:08:01,640 Prečo návrat Negatívny 1 miesto falošný? 1414 01:08:01,640 --> 01:08:02,620 Jo. 1415 01:08:02,620 --> 01:08:05,070 >> DIVÁKOV: Q je ukladanie kladné hodnoty. 1416 01:08:05,070 --> 01:08:10,950 Vzhľadom k tomu, uložiť len kladné hodnoty v q, negatívne je chyba. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. Malan: OK, to je pravda. 1418 01:08:11,510 --> 01:08:14,850 Takže pretože sme len ukladanie pozitívne hodnoty alebo nula, potom je to v poriadku, aby 1419 01:08:14,850 --> 01:08:18,050 vráti zápornú hodnotu ako strážca hodnota, špeciálny symbol. 1420 01:08:18,050 --> 01:08:21,630 Ale vy ste prepisovanie histórie tam, pretože dôvod, prečo sme len 1421 01:08:21,630 --> 01:08:25,890 vracia non-záporné hodnoty je preto, že chceme, aby 1422 01:08:25,890 --> 01:08:27,670 mať hodnotu sentinel. 1423 01:08:27,670 --> 01:08:32,617 Takže konkrétne, prečo nie len return false v prípade chyby? 1424 01:08:32,617 --> 01:08:33,099 Jo. 1425 01:08:33,099 --> 01:08:35,510 >> DIVÁKOV: si zlyhal vráti celočíselnú hodnotu. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. Malan: Presne tak. 1427 01:08:36,630 --> 01:08:38,569 A to je miesto, kde C dostane docela obmedzujúce. 1428 01:08:38,569 --> 01:08:40,590 Ak hovoríte, že idete vrátiť int, máte 1429 01:08:40,590 --> 01:08:41,279 vrátiť int. 1430 01:08:41,279 --> 01:08:43,689 Nemôžete dostať fantázie a začať vracať bool alebo float alebo 1431 01:08:43,689 --> 01:08:45,040 string alebo niečo také. 1432 01:08:45,040 --> 01:08:49,370 Teraz, medzitým, JavaScript a PHP, a niektoré iné jazyky môžu, v skutočnosti, 1433 01:08:49,370 --> 01:08:51,310 ste sa vrátil iný typy hodnôt. 1434 01:08:51,310 --> 01:08:54,819 A to môže v skutočnosti byť užitočné, ak môžete vrátiť pozitívny INT, nuly, 1435 01:08:54,819 --> 01:08:59,439 negatívne ints, alebo false alebo null ešte znamenať chybu. 1436 01:08:59,439 --> 01:09:01,890 Ale my nemáme, že Všestrannosť v C. 1437 01:09:01,890 --> 01:09:04,569 >> Takže s dequeue, čo sme navrhnúť, aby urobiť, je - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Môžete sa vrátiť false. 1440 01:09:09,830 --> 01:09:13,189 Je to len, že falošná je hash definovať false na nulu. 1441 01:09:13,189 --> 01:09:16,000 Takže ak ste sa vrátiť false, budete vracať nulu. 1442 01:09:16,000 --> 01:09:25,470 A nula je platný vec v našej fronte, vzhľadom k tomu, negatívne 1 ak nie je 1443 01:09:25,470 --> 01:09:27,000 false stalo negatívny 1. 1444 01:09:27,000 --> 01:09:29,972 Ale nemali by ste ani potrebujú vedieť, že. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. Malan: To je prečo som to nepovedal. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: Ale to nie je pravda že sa nemôžete vrátiť false. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. Malan: Iste. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Takže dequeue, všimnite si, prijímame stratu ako svoj argument. 1450 01:09:44,240 --> 01:09:45,479 A to preto, že nie sme okolo nič palcov 1451 01:09:45,479 --> 01:09:48,359 Chceme len odstrániť prvok na prednej strane frontu. 1452 01:09:48,359 --> 01:09:49,819 Takže, ako môžeme ísť asi robí? 1453 01:09:49,819 --> 01:09:51,290 No, za prvé, poďme na to Rýchla kontrola zdravý rozum. 1454 01:09:51,290 --> 01:09:53,350 Ak je veľkosť frontu je 0, je tu žiadna práce je potrebné urobiť. 1455 01:09:53,350 --> 01:09:54,210 Návrat negatívny 1. 1456 01:09:54,210 --> 01:09:54,800 Hotovo. 1457 01:09:54,800 --> 01:09:56,340 Tak to je pár riadkov o mojom programe. 1458 01:09:56,340 --> 01:09:58,180 Takže len štyri riadky zostanú. 1459 01:09:58,180 --> 01:10:01,310 >> Tak tu som sa rozhodol decrement veľkosti. 1460 01:10:01,310 --> 01:10:04,620 A účinne znižujúce veľkosť Znamená to, že som zabudol 1461 01:10:04,620 --> 01:10:06,010 niečo, čo je tam. 1462 01:10:06,010 --> 01:10:09,910 Ale ja som tiež aktualizovať, ak predné čísla sú. 1463 01:10:09,910 --> 01:10:11,620 Takže na to, že musím urobiť dve veci. 1464 01:10:11,620 --> 01:10:16,390 Najprv musím mať na pamäti, aké číslo je na prednej strane frontu, 1465 01:10:16,390 --> 01:10:17,860 pretože musím vrátiť tú vec. 1466 01:10:17,860 --> 01:10:20,910 Takže nechcem, aby náhodou zabudol o tom a potom ho prepísať. 1467 01:10:20,910 --> 01:10:22,840 Idem si spomenúť na int. 1468 01:10:22,840 --> 01:10:27,310 >> A teraz, chcem aktualizovať q.front byť q.front +1. 1469 01:10:27,310 --> 01:10:30,070 Takže či to bol prvá osoba v linka, teraz chcem urobiť, plus 1 na 1470 01:10:30,070 --> 01:10:31,930 poukazujú na ďalšie osoby v súlade. 1471 01:10:31,930 --> 01:10:33,420 Ale musím zvládnuť, že wraparound. 1472 01:10:33,420 --> 01:10:37,270 A ak kapacita je globálna konštanta, že to bude mi dovoľte, aby som sa uistil, 1473 01:10:37,270 --> 01:10:41,140 ako som sa poukázať na poslednú osobou v linka, operácia modulo prinesie 1474 01:10:41,140 --> 01:10:43,840 ma späť na nulu predné fronty. 1475 01:10:43,840 --> 01:10:46,050 A to spracováva wraparound tu. 1476 01:10:46,050 --> 01:10:48,950 A potom som sa pristúpiť k návratu n 1477 01:10:48,950 --> 01:10:51,530 >> Teraz, presnejšie povedané, ja nie musí vyhlásiť n 1478 01:10:51,530 --> 01:10:53,880 Nemusel som sa chytiť ju a uložte ho dočasne, pretože hodnota je 1479 01:10:53,880 --> 01:10:54,740 ešte tam. 1480 01:10:54,740 --> 01:10:57,490 Takže som mohol len urobiť správnu aritmetické pre návrat bývalého šéfa 1481 01:10:57,490 --> 01:10:58,450 fronty. 1482 01:10:58,450 --> 01:11:01,850 Ale ja jednoducho cítil, že to bolo viac zrejmé, skutočne chytiť int, dať 1483 01:11:01,850 --> 01:11:04,320 v roku n, a potom sa vrátiť, že z dôvodov prehľadnosti, ale 1484 01:11:04,320 --> 01:11:05,735 nie je nevyhnutne nutné. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psst. 1487 01:11:12,130 --> 01:11:13,410 Sú to všetko vysloviteľné v mojej hlave. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: Takže prvá otázka je binárny strom problém. 1490 01:11:19,110 --> 01:11:22,140 Takže prvá otázka je, že sme vzhľadom tieto čísla. 1491 01:11:22,140 --> 01:11:27,160 A my chceme, aby nejako vložiť do Tieto uzly tak, že je 1492 01:11:27,160 --> 01:11:30,110 platí binárny vyhľadávací strom. 1493 01:11:30,110 --> 01:11:36,260 Takže jedna vec na zapamätanie binárne vyhľadávacie stromy, je, že to nie je 1494 01:11:36,260 --> 01:11:39,800 len to, čo na ľavej strane je menšie, a to na 1495 01:11:39,800 --> 01:11:41,120 právo je väčšie. 1496 01:11:41,120 --> 01:11:44,580 Je potrebné, aby sa stať, že celý strom vľavo je menšia, a celý strom 1497 01:11:44,580 --> 01:11:45,740 na pravej strane je väčšia. 1498 01:11:45,740 --> 01:11:55,260 >> Takže keď som dal 34 tu hore, a potom Dal som 20 tu, tak to platí, aby 1499 01:11:55,260 --> 01:11:56,970 ďaleko, pretože 34 až tu. 1500 01:11:56,970 --> 01:11:57,920 20 bude na ľavej strane. 1501 01:11:57,920 --> 01:11:58,950 Tak to je menej. 1502 01:11:58,950 --> 01:12:03,640 Ale nemôžem potom dal 59 tu, pretože 59, aj keď je na pravej strane 20, 1503 01:12:03,640 --> 01:12:06,140 je to stále na ľavej strane 34. 1504 01:12:06,140 --> 01:12:10,760 Tak s týmto obmedzením na mysli, Najjednoduchší spôsob, ako zrejme riešenie tohto 1505 01:12:10,760 --> 01:12:14,330 Problém je len trochu z týchto čísel - 1506 01:12:14,330 --> 01:12:18,720 tak 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 A potom vložíte zľava doprava. 1508 01:12:21,640 --> 01:12:23,390 >> Takže 20 ide tu. 1509 01:12:23,390 --> 01:12:24,630 34 ide tu. 1510 01:12:24,630 --> 01:12:25,830 36 ide tu. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 A tiež by prišiel na to, s niektoré pripojením a realizáciu, 1513 01:12:34,730 --> 01:12:38,830 oh, počkaj, ja nemám dosť čísel vyplniť to vo viac ako tu. 1514 01:12:38,830 --> 01:12:42,170 Takže musím reshift, čo môj trasa poznámka bude. 1515 01:12:42,170 --> 01:12:47,490 Ale všimnite si, že v posledných troch, ak budete čítať zľava doprava, je v 1516 01:12:47,490 --> 01:12:48,740 zvyšuje objednávky. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Takže teraz, chceme deklarovať, čo struct bude pre 1519 01:12:56,540 --> 01:12:58,300 Uzly tohto stromu. 1520 01:12:58,300 --> 01:13:02,720 Takže to, čo potrebujeme v binárnom stromu? 1521 01:13:02,720 --> 01:13:05,830 Takže máme hodnotu typu int, takže niektoré int hodnota. 1522 01:13:05,830 --> 01:13:07,220 Ja neviem, čo sme nazvali sa v roztoku - 1523 01:13:07,220 --> 01:13:08,500 int n 1524 01:13:08,500 --> 01:13:13,570 Potrebujeme ukazovateľ na ľavej strane dieťaťa a ukazovateľ na pravej dieťa. 1525 01:13:13,570 --> 01:13:17,540 Takže to bude vyzerať takto. 1526 01:13:17,540 --> 01:13:20,510 A to bude v skutočnosti vyzerať pred keď sa dvakrát viazaná 1527 01:13:20,510 --> 01:13:25,090 Zoznam vecí, tak Oznámenie - 1528 01:13:25,090 --> 01:13:27,860 Budem musieť prechádzať všetky Cesta späť dole do problému 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Takže všimnete, že vyzerá rovnako ako to, okrem nás len tak zavolať týchto 1531 01:13:36,390 --> 01:13:38,590 rôzne mená. 1532 01:13:38,590 --> 01:13:41,440 Stále máme celé číslo hodnota a dva ukazovatele. 1533 01:13:41,440 --> 01:13:44,850 Je to len, že miesto liečenia ukazovatele ako smerujúca k ďalšej veci 1534 01:13:44,850 --> 01:13:47,955 a predchádzajúca vec, my liečbe ukazovatele poukázať na ľavej dieťa 1535 01:13:47,955 --> 01:13:49,205 a právo dieťa. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 Tak to je naša struct uzol. 1539 01:13:59,650 --> 01:14:03,920 A teraz, jediná funkcia je potrebné realizovať, je to traverza, ktorá 1540 01:14:03,920 --> 01:14:08,320 Chceme ísť cez strom, tlač z hodnôt stromu v poradí. 1541 01:14:08,320 --> 01:14:15,241 >> Takže hľadáte tu, by sme chceli vytlačiť z 20, 34, 36, 52, 59, a 106. 1542 01:14:15,241 --> 01:14:17,970 Ako sme to dosiahli? 1543 01:14:17,970 --> 01:14:18,890 Takže je to dosť podobné. 1544 01:14:18,890 --> 01:14:22,910 Ak ste videli v minulom skúšku problém že ste chceli vytlačiť 1545 01:14:22,910 --> 01:14:25,940 Celý strom s čiarkami medzi všetko, to bolo vlastne ešte 1546 01:14:25,940 --> 01:14:27,320 jednoduchšie, než to. 1547 01:14:27,320 --> 01:14:30,950 Takže tu je riešenie. 1548 01:14:30,950 --> 01:14:33,110 To bolo výrazne jednoduchšie ak ste to urobil rekurzívne. 1549 01:14:33,110 --> 01:14:36,650 Neviem, či niekto pokúsil na to iteratívne. 1550 01:14:36,650 --> 01:14:38,340 >> Ale najprv, máme základný prípad. 1551 01:14:38,340 --> 01:14:39,660 Čo v prípade, že koreň je null? 1552 01:14:39,660 --> 01:14:40,610 Potom sme len tak vrátiť. 1553 01:14:40,610 --> 01:14:42,300 Nechceme tlačiť čokoľvek. 1554 01:14:42,300 --> 01:14:45,940 Inak budeme prechádzať rekurzívne dole. 1555 01:14:45,940 --> 01:14:48,140 Vytlačiť celý ľavý podstrom. 1556 01:14:48,140 --> 01:14:51,440 Takže tlačiť všetko menej ako mojej súčasnej hodnoty. 1557 01:14:51,440 --> 01:14:53,930 A potom budem tlačiť sám. 1558 01:14:53,930 --> 01:14:57,310 A potom budem recurse sa my Celá pravá podstrom, takže všetko 1559 01:14:57,310 --> 01:14:58,810 väčšie ako moje hodnoty. 1560 01:14:58,810 --> 01:15:03,870 A to sa bude tlačiť sa všetko v poriadku. 1561 01:15:03,870 --> 01:15:05,860 Otázky o tom, ako to v skutočnosti dosiahne, že? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> DIVÁKOV: Mám otázku na [nepočuteľné]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: Takže jeden spôsob, ako sa blíži každá rekurzívne problém je len, že 1566 01:15:23,550 --> 01:15:26,275 o to, ako by si mal myslieť o všetkých prípadoch rohu. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Takže za to, že chceme, aby vytlačiť celý tento strom. 1569 01:15:38,110 --> 01:15:42,030 Takže všetko, čo sa zameriame na Je to zvláštne uzol - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 V rekurzívne volanie, predstierame tie jednoducho fungovať. 1572 01:15:47,420 --> 01:15:54,000 Tak tu to rekurzívne volanie traverza, my bez premýšľania 1573 01:15:54,000 --> 01:15:58,640 o tom, len posuvné ľavej tri, predstavte si, že už sa vytlačí 20 1574 01:15:58,640 --> 01:16:00,730 a 34 pre nás. 1575 01:16:00,730 --> 01:16:03,350 A potom, keď sme sa nakoniec rekurzívne volajte posuv na 1576 01:16:03,350 --> 01:16:07,890 pravdu, že bude správne tlačiť 52, 59, a 106 pre nás. 1577 01:16:07,890 --> 01:16:13,620 >> Takže za predpokladu, že to môže tlačiť 20, 34, a ostatné je možné tlačiť 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 všetci musíme byť schopní urobiť, je vytlačiť sami v stredu, ktorá. 1579 01:16:17,180 --> 01:16:21,250 Takže vytlačiť všetko, čo pred nami. 1580 01:16:21,250 --> 01:16:27,710 Vytlačiť sami, takže aktuálny uzol pre tlač 36, pravidelné printf, a potom 1581 01:16:27,710 --> 01:16:31,170 tlačiť všetko, čo po nás. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. Malan: To je miesto, kde rekurzia dostane naozaj krásne. 1583 01:16:32,730 --> 01:16:36,270 Je to úžasný skok viery, kde budete robiť najmenší kúsok práce. 1584 01:16:36,270 --> 01:16:38,460 A potom sa nechať niekoho iný sa postará o zvyšok. 1585 01:16:38,460 --> 01:16:40,180 A že niekto iný Je iróniou osudu, môžete. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Takže pre závažné body za snaživosť, ak stlačte navigačné tlačidlo nahor na otázky - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: Na otázky? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. Malan: A trochu dole na čísla, neviete niekto, kde 1590 01:16:53,490 --> 01:16:55,190 Tieto čísla pochádzajú z? 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: Mám doslova tušenie. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. Malan: Objavujú celé kvíz. 1593 01:16:59,794 --> 01:17:01,150 >> DIVÁKOV: Sú rovnaké čísla? 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. Malan: Tieto čísla. 1595 01:17:01,910 --> 01:17:03,260 Trochu veľkonočné vajíčko. 1596 01:17:03,260 --> 01:17:08,100 Takže pre tých z vás, sledovať on-line na domov, ak nám môžete povedať, prostredníctvom e-mailu na 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net čo význam na tieto opakované šesť čísel sú 1598 01:17:12,680 --> 01:17:18,560 celé Quiz 1, budeme sprchovať vás s úžasnou pozornosť na finále 1599 01:17:18,560 --> 01:17:21,610 prednáška a stres loptičku. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Pekné, jemné. 1602 01:17:27,790 --> 01:17:29,570 >> ROB Bowden: Nejaké posledné otázky o niečo na ten kvíz? 1603 01:17:29,570 --> 01:17:32,608