1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> David J. MALAN: Rendben. 3 00:00:12,900 --> 00:00:16,790 Ezért örvendetes, hogy az első CS50 halál utáni egy kvíz. 4 00:00:16,790 --> 00:00:18,340 Azt hittük, leleplez ezt a hagyományt ebben az évben. 5 00:00:18,340 --> 00:00:20,960 És ez lesz lehetőség séta a 6 00:00:20,960 --> 00:00:22,220 megoldások a teszt. 7 00:00:22,220 --> 00:00:26,160 És mi gyorsítani vagy lassítani alapú kamat azok itt. 8 00:00:26,160 --> 00:00:29,730 >> Szóval valószínűleg itt, mert te érdekel, hogyan lehet, vagy 9 00:00:29,730 --> 00:00:31,170 kellett volna válaszolt néhány ezeket a problémákat. 10 00:00:31,170 --> 00:00:33,300 Akkor miért nem nézzük az ebben a szakaszban az első? 11 00:00:33,300 --> 00:00:34,450 Így egyre szálakat. 12 00:00:34,450 --> 00:00:37,600 Ez adta meg a három különböző változatban program volt, végül, 13 00:00:37,600 --> 00:00:39,650 azt jelentette, hogy egy stringet a felhasználó. 14 00:00:39,650 --> 00:00:42,530 Függetlenül attól, hogy nem volt balra, hogy meghatározza. 15 00:00:42,530 --> 00:00:45,150 >> És kérdezte Kérdés 0, Tegyük fel, hogy az 1-es verzió van 16 00:00:45,150 --> 00:00:46,400 össze és kivégezték. 17 00:00:46,400 --> 00:00:48,860 Miért lehet, hogy a program segfault? 18 00:00:48,860 --> 00:00:51,150 Első pillantásra, olyan javaslatokat , hogy miért? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Igen. 21 00:00:54,489 --> 00:00:59,260 >> Közönség: Így emlékszem, hogy láttam ezt korábbi példája nézi a 22 00:00:59,260 --> 00:01:05,506 char * s, és látta, a vizsgálat az s és látta, mert ez egy mutató, hogyan 23 00:01:05,506 --> 00:01:07,971 hatott, amit beszkennelt? 24 00:01:07,971 --> 00:01:10,940 Ez s vagy címét s? 25 00:01:10,940 --> 00:01:11,180 >> David J. MALAN: OK. 26 00:01:11,180 --> 00:01:11,480 Jó. 27 00:01:11,480 --> 00:01:14,830 Így végül a forrása minden probléma feltehetőleg fog csökkenteni 28 00:01:14,830 --> 00:01:16,210 hogy a változó s. 29 00:01:16,210 --> 00:01:17,280 És ez valóban egy változó. 30 00:01:17,280 --> 00:01:19,900 Az adatok a fajta, amely változó char *, ami azt jelenti, hogy fog 31 00:01:19,900 --> 00:01:22,570 tartalmazza a címét egy karaktert. 32 00:01:22,570 --> 00:01:23,850 És ebben rejlik a betekintést. 33 00:01:23,850 --> 00:01:28,330 Ez lesz, hogy tartalmazza a címét egy karakter, vagy általánosabban, a 34 00:01:28,330 --> 00:01:32,110 címe az első karakter egy egész blokk karaktereket. 35 00:01:32,110 --> 00:01:36,680 >> De a fogást, hogy vizsgálat s, célja az élet, kap egy címet, és mivel 36 00:01:36,680 --> 00:01:40,960 formátumban kódot, mint% s, olvassa el a szöveget a darab 37 00:01:40,960 --> 00:01:42,330 memóriát a címet. 38 00:01:42,330 --> 00:01:46,040 De mivel nincs egyenlőségjel előtt hogy pontosvessző az első 39 00:01:46,040 --> 00:01:49,310 kódsor, mert valójában nem kiosztani olyan memória 40 00:01:49,310 --> 00:01:53,020 malloc, mert valójában nem osztja egy sor bizonyos méret, mind 41 00:01:53,020 --> 00:01:57,620 csinálsz olvas a felhasználó billentyűzet a néhány teljes 42 00:01:57,620 --> 00:02:00,490 szemét értéket, amely van, s alapból. 43 00:02:00,490 --> 00:02:04,480 Így esély fogsz segfault ha hogy a cím nem csak azért történik, 44 00:02:04,480 --> 00:02:08,009 hogy egy értéket, hogy lehet, valójában írni. 45 00:02:08,009 --> 00:02:10,889 Olyan rossz, hogy nem osztja a memória is. 46 00:02:10,889 --> 00:02:13,150 >> Így a szóban forgó 1, megkérdeztük, tegyük fel, hogy a 2-es verziója is 47 00:02:13,150 --> 00:02:14,230 össze és kivégezték. 48 00:02:14,230 --> 00:02:15,900 Miért lehet, hogy ez a program segfault? 49 00:02:15,900 --> 00:02:17,990 Tehát ez egy kevésbé hibás. 50 00:02:17,990 --> 00:02:21,470 És tényleg csak egy Nyilvánvaló módon, ahol lehet 51 00:02:21,470 --> 00:02:22,810 kiváltó segfault itt. 52 00:02:22,810 --> 00:02:23,730 És ez a tematikus. 53 00:02:23,730 --> 00:02:28,180 Bármikor mi ac a memóriában, milyen tudna tenni, hogy rábírja a segfault 54 00:02:28,180 --> 00:02:30,718 a 2-es verziója? 55 00:02:30,718 --> 00:02:35,560 >> Közönség: Ha ezt a bemenet egy string, ami hosszabb, mint 49 56 00:02:35,560 --> 00:02:35,975 karaktereket. 57 00:02:35,975 --> 00:02:37,260 >> David J. MALAN: Pontosan. 58 00:02:37,260 --> 00:02:41,420 Minden alkalommal, amikor valami fix hosszúságú amikor egy sor, a 59 00:02:41,420 --> 00:02:44,650 radar ki kell aludnia, hogy ez lehet problémás, ha nem ellenőrzi a 60 00:02:44,650 --> 00:02:45,810 határait tömb. 61 00:02:45,810 --> 00:02:46,650 És ez itt a probléma. 62 00:02:46,650 --> 00:02:47,910 Még mindig a scanf. 63 00:02:47,910 --> 00:02:52,200 Még mindig a% s, ami azt jelenti, próbálkozzon olvasni egy string a felhasználó. 64 00:02:52,200 --> 00:02:56,300 Ez lesz olvasható a s, ami ezen a ponton, a ténylegesen 65 00:02:56,300 --> 00:02:58,570 címét egy darab memória vagy ez egyenértékű. 66 00:02:58,570 --> 00:03:02,080 Ez a neve egy tömb karakterek memória. 67 00:03:02,080 --> 00:03:07,610 >> De pontosan, hogy, ha elolvassa a szöveg ami hosszabb, mint 49 karakter, 49 68 00:03:07,610 --> 00:03:10,440 mert szükség van hely a backslash 0, fogsz túlcsordulás 69 00:03:10,440 --> 00:03:11,390 hogy a puffer. 70 00:03:11,390 --> 00:03:16,410 És lehet, hogy szerencsés és képes levelet 51st karakter, 52., 53.. 71 00:03:16,410 --> 00:03:18,560 De egy bizonyos ponton, az operációs rendszer fog mondani, nem. 72 00:03:18,560 --> 00:03:21,270 Ez biztosan nem a memória akkor szabad hozzányúlni. 73 00:03:21,270 --> 00:03:23,380 És a program fog segfault. 74 00:03:23,380 --> 00:03:26,650 >> Tehát, a heurisztikus legyen bármilyen idő megvan fix hosszúságú, akkor 75 00:03:26,650 --> 00:03:30,150 hogy győződjön meg róla, ellenőrzi a hosszát bármit is akarsz 76 00:03:30,150 --> 00:03:31,090 olvasni bele. 77 00:03:31,090 --> 00:03:35,110 >> Közönség: Tehát megoldani, hogy, akkor volt egy nyilatkozatot ellenőrzése valóban 78 00:03:35,110 --> 00:03:37,140 a hossza nagyobb, kisebb vagy kisebb, mint? 79 00:03:37,140 --> 00:03:37,730 >> David J. MALAN: Abszolút. 80 00:03:37,730 --> 00:03:41,706 Csak egy állapot , amely azt mondja, ha az - 81 00:03:41,706 --> 00:03:46,080 vagy inkább nem feltétlenül tudja előre, hogy hány karakter a 82 00:03:46,080 --> 00:03:49,060 felhasználó fog gépelni, mert a van tyúk és a tojás. 83 00:03:49,060 --> 00:03:51,860 Nem, amíg nem olvastam azt a scanf lehet kitalálni, hogy mennyi ideig van. 84 00:03:51,860 --> 00:03:54,500 De ezen a ponton, már túl késő, mert már elolvasta a 85 00:03:54,500 --> 00:03:55,710 néhány blokk memória. 86 00:03:55,710 --> 00:03:59,590 Tehát, mint egy félre, a CS50 könyvtár meghiúsítja ezt a kérdést teljesen, visszahívás 87 00:03:59,590 --> 00:04:01,060 használatával fgetc. 88 00:04:01,060 --> 00:04:05,390 És így szól az egyik karakter egy időben, tip-toeing mellett, tudva, hogy 89 00:04:05,390 --> 00:04:08,060 nem overflow egy karaktert, ha olvassa egyesével. 90 00:04:08,060 --> 00:04:11,580 >> A fogás a getstring visszahívás hogy van, hogy állandóan újra méret 91 00:04:11,580 --> 00:04:13,590 hogy a darab memória, amely csak a fájdalom. 92 00:04:13,590 --> 00:04:15,310 Ez egy nagy vonalak kódot csinálni. 93 00:04:15,310 --> 00:04:18,779 Így egy másik megközelítés az lenne, hogy valójában egy unokatestvére, így 94 00:04:18,779 --> 00:04:19,790 beszélni, a scanf. 95 00:04:19,790 --> 00:04:22,820 Vannak változatai egy csomó ilyen funkciók valóban ellenőrizni a 96 00:04:22,820 --> 00:04:25,870 hosszát, hogy hány karakter lehet, hogy olvassa el maximálisan. 97 00:04:25,870 --> 00:04:29,430 És akkor adja meg, nem olvassa el több mint 50 karakter. 98 00:04:29,430 --> 00:04:34,110 Szóval ez lenne a másik megközelítés, de kevésbé alkalmazkodó nagyobb bemenet. 99 00:04:34,110 --> 00:04:37,040 >> Így a 2. kérdésre kéri, tegyük fel, hogy a változat 3. össze és kivégezték. 100 00:04:37,040 --> 00:04:39,960 Miért lehet, hogy a program segfault? 101 00:04:39,960 --> 00:04:42,650 Tehát ez tulajdonképpen ugyanaz válaszolni, még akkor is, 102 00:04:42,650 --> 00:04:43,590 úgy néz ki, egy kicsit cifrább. 103 00:04:43,590 --> 00:04:46,440 Mi a malloc, amely olyan, mint mi így magunknak több lehetőséget. 104 00:04:46,440 --> 00:04:48,030 És akkor mi szabaddá, hogy memória a végén. 105 00:04:48,030 --> 00:04:49,580 Ez még mindig csak 50 bájt memóriát. 106 00:04:49,580 --> 00:04:53,620 Tehát még mindig próbálja olvasni 51, 52, 1000 bájt. 107 00:04:53,620 --> 00:04:55,830 Meg fog segfault a pontosan ugyanezen okból. 108 00:04:55,830 --> 00:04:57,530 >> De van egy másik oka is. 109 00:04:57,530 --> 00:05:03,890 Mi mást malloc visszatérés mellett címét egy darab memória? 110 00:05:03,890 --> 00:05:04,920 Lehet vissza null. 111 00:05:04,920 --> 00:05:07,560 És mivel nem vagyunk ellenőrzése hogy mi lehet csinál valamit 112 00:05:07,560 --> 00:05:11,350 hülye egy másik ok, ami az, hogy mi lehet mondani scanf olvassa 113 00:05:11,350 --> 00:05:16,050 a felhasználó bemenet a billentyűzet a 0 helyen, AKA null. 114 00:05:16,050 --> 00:05:18,890 És ez is biztosan kiváltó segfault. 115 00:05:18,890 --> 00:05:21,590 Tehát a teszt célját, mi lenne elfogadták, vagy azok egy 116 00:05:21,590 --> 00:05:22,740 indok. 117 00:05:22,740 --> 00:05:23,420 Egy azonos. 118 00:05:23,420 --> 00:05:25,720 Az egyik egy kicsit árnyaltabb. 119 00:05:25,720 --> 00:05:28,975 >> Végül, tekintettel a program memória használatára, hogyan version 2 és 120 00:05:28,975 --> 00:05:30,350 3-as verzió különböznek? 121 00:05:30,350 --> 00:05:35,070 Tehát, amit érdemes, láttunk egy látszólag végtelen mennyiségű lehetséges 122 00:05:35,070 --> 00:05:35,770 választ erre. 123 00:05:35,770 --> 00:05:39,300 És az emberek választ, mi volt remélve, de elfogadta a többi 124 00:05:39,300 --> 00:05:42,250 a dolgok, volt néhány említést a tény, hogy a 2-es verzióját használó 125 00:05:42,250 --> 00:05:44,560 az úgynevezett stack. 126 00:05:44,560 --> 00:05:46,710 3. verzió a kupac. 127 00:05:46,710 --> 00:05:50,060 És funkcionálisan, ez nem igazán hogy minden, hogy sok a különbség. 128 00:05:50,060 --> 00:05:54,040 Végén a nap, mi még mindig csak arra, hogy 50 byte memóriát. 129 00:05:54,040 --> 00:05:56,640 >> De ez volt az egyik lehetséges válasz hogy kerestünk. 130 00:05:56,640 --> 00:05:59,730 De látni fogod, ahogy kapsz vetélkedők vissza a TF, hogy mi 131 00:05:59,730 --> 00:06:04,330 elfogadják egyéb viták a eltérő felhasználási memória is. 132 00:06:04,330 --> 00:06:08,600 De a verem és a kupac lett volna egy egyszerű válasz, hogy menjen el. 133 00:06:08,600 --> 00:06:11,150 Bármilyen kérdése? 134 00:06:11,150 --> 00:06:12,400 Adok Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: Tehát a probléma 4.. 137 00:06:20,210 --> 00:06:21,985 Ez az, ahol meg kellett kitölteni a bájtok számát az összes 138 00:06:21,985 --> 00:06:23,460 ezek a különböző típusú használt. 139 00:06:23,460 --> 00:06:24,830 Tehát az első dolog, amit látni. 140 00:06:24,830 --> 00:06:27,930 Tegyük fel, hogy egy 32-bites architektúrát, így CS50 készülék. 141 00:06:27,930 --> 00:06:33,530 Tehát az egyik alapvető dolog 32-bites gépeken, hogy elmondja, 142 00:06:33,530 --> 00:06:37,490 hogy pontosan mekkora a mutató megy hogy az építészet. 143 00:06:37,490 --> 00:06:43,020 >> Így azonnal, mi tudjuk, hogy minden mutató típusú 32 bites vagy 4 bájt. 144 00:06:43,020 --> 00:06:46,010 Így nézett az asztalnál, a node * egy mutató típusú. 145 00:06:46,010 --> 00:06:47,250 Ez lesz a 4. bájt. 146 00:06:47,250 --> 00:06:51,640 Struct node *, ez a szó szoros értelmében azonos node csillag. 147 00:06:51,640 --> 00:06:53,590 És így lesz 4 bájt. 148 00:06:53,590 --> 00:06:58,270 String, így nem néz ki, mint a pointer még, de a typedef, a 149 00:06:58,270 --> 00:07:01,590 szöveg csak egy char *, amely egy mutató típusú. 150 00:07:01,590 --> 00:07:03,550 Szóval ez lesz a 4. bájt. 151 00:07:03,550 --> 00:07:06,150 >> Tehát ez a három mind a 4 bájt. 152 00:07:06,150 --> 00:07:09,350 Most, csomópont és hallgatói is egy kicsit bonyolultabb. 153 00:07:09,350 --> 00:07:15,160 Így nézett csomópont és hallgatói, látjuk csomópont, mint egy egész, és a mutatót. 154 00:07:15,160 --> 00:07:18,050 És a diák két mutató belsejébe. 155 00:07:18,050 --> 00:07:23,340 Így legalább a mi esetünkben itt, ahogy , hogy a végén a méret kiszámításához 156 00:07:23,340 --> 00:07:27,020 A struktúra csak add fel mindent hogy van benne a struct. 157 00:07:27,020 --> 00:07:30,690 >> Így a csomópont, van egy egész szám, amely 4 bájt. 158 00:07:30,690 --> 00:07:32,830 Van egy mutató, amely 4 bájt. 159 00:07:32,830 --> 00:07:35,820 És így egy csomópont lesz hogy akár 8 bájt. 160 00:07:35,820 --> 00:07:39,490 És hasonlóképpen a hallgatói, van egy mutató, ami 4 byte és egy másik 161 00:07:39,490 --> 00:07:40,770 mutató, hogy a 4 bájt. 162 00:07:40,770 --> 00:07:43,180 Szóval ez lesz a vége fel, hogy 8 bájt. 163 00:07:43,180 --> 00:07:45,480 Így csomópont és hallgatói 8 bájt. 164 00:07:45,480 --> 00:07:48,950 És ez a három mind a 4 bájt. 165 00:07:48,950 --> 00:07:50,240 Kérdések az, hogy? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Igen. 168 00:07:54,990 --> 00:07:58,413 >> Közönség: Van-e egy 64 bites építészet, azt, hogy 169 00:07:58,413 --> 00:07:59,880 dupla mindet? 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: Nem lenne megkétszereződik mindet. 171 00:08:01,790 --> 00:08:05,830 Így a 64-bites architektúrát, akkor ismét, változás, hogy az alapvető dolog, hogy egy 172 00:08:05,830 --> 00:08:08,910 mutató már 64 bit. 173 00:08:08,910 --> 00:08:09,290 Igen. 174 00:08:09,290 --> 00:08:10,930 Így a mutató 8 bájt. 175 00:08:10,930 --> 00:08:15,420 Tehát ezek voltak 4 byte lesz 8 bájt. 176 00:08:15,420 --> 00:08:18,617 Egy diák, ami két mutató, Nos, most ez fog 177 00:08:18,617 --> 00:08:19,800 8 bájt 8 bájt. 178 00:08:19,800 --> 00:08:21,980 Úgy megy, hogy 16 bájt. 179 00:08:21,980 --> 00:08:25,710 >> De egy csomópont még mindig 4 bájt. 180 00:08:25,710 --> 00:08:27,800 Tehát ez a mutató lesz hogy 8 bájt. 181 00:08:27,800 --> 00:08:28,930 Ez a 4 bájt. 182 00:08:28,930 --> 00:08:30,870 Így a csomópont csak akkor fog hogy 12 bájt. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Más kérdés, hogy az egyik? 185 00:08:39,280 --> 00:08:44,500 Így a következő, ezek A HTTP státusz kódok. 186 00:08:44,500 --> 00:08:48,000 És meg kellett leírni körülmények amely szerint ezek lehetnek 187 00:08:48,000 --> 00:08:49,810 vissza az Ön számára. 188 00:08:49,810 --> 00:08:56,730 az egyik probléma, hogy hallottam néhány diák van az, hogy megpróbálta a 189 00:08:56,730 --> 00:08:58,950 hiba, hogy az ügyfél végén. 190 00:08:58,950 --> 00:09:02,320 Tehát, amikor megpróbáljuk, hogy a kérelem a szerver, valami megy 191 00:09:02,320 --> 00:09:03,820 rossz a mi oldalunkon. 192 00:09:03,820 --> 00:09:07,660 De általában ezek a kódok hogy a kiszolgáló által visszaadott. 193 00:09:07,660 --> 00:09:11,720 Tehát szeretné, hogy kitaláljuk, mi folyik rossz vagy jó a szerver 194 00:09:11,720 --> 00:09:14,280 okozza ezeket a dolgokat vissza. 195 00:09:14,280 --> 00:09:18,670 Miért lehet, hogy a kiszolgáló az status kód: 200? 196 00:09:18,670 --> 00:09:19,920 Minden gondolat? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Igen. 199 00:09:23,730 --> 00:09:27,850 Tehát valami a sikeres kérésére ment keresztül. 200 00:09:27,850 --> 00:09:30,260 És ők tudják, hogy visszatérjen amit kért. 201 00:09:30,260 --> 00:09:32,240 Szóval, minden rendben volt. 202 00:09:32,240 --> 00:09:35,662 Mi a helyzet a 302 található? 203 00:09:35,662 --> 00:09:36,618 Igen. 204 00:09:36,618 --> 00:09:39,008 >> Közönség: A szerver keresett , amit kért. 205 00:09:39,008 --> 00:09:40,442 De nem tudta megtalálni. 206 00:09:40,442 --> 00:09:42,850 Tehát van egy hiba. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: Tehát a kiszolgáló keres, amit akart. 208 00:09:47,720 --> 00:09:51,682 Tehát csak keres itt, 302 találta, képes volt megtalálni. 209 00:09:51,682 --> 00:09:53,035 >> Közönség: Sajnálom. 210 00:09:53,035 --> 00:09:54,388 Talált azt jelenti, hogy nem találják. 211 00:09:54,388 --> 00:09:55,638 Bocsánat. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: Tehát a 302 ellenőrzés során talált. 214 00:10:00,160 --> 00:10:02,350 A szerver képes megtalálni amit akart. 215 00:10:02,350 --> 00:10:04,640 >> Közönség: De ez nem jeleníti meg? 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: A különbség ezt a 302, illetve 200, hogy 217 00:10:08,180 --> 00:10:09,280 tudja, mit akar. 218 00:10:09,280 --> 00:10:12,000 De ez nem pontosan hol meg akartam kérdezni. 219 00:10:12,000 --> 00:10:14,580 Tehát 302 egy tipikus átirányítás. 220 00:10:14,580 --> 00:10:16,510 Szóval kért oldalt. 221 00:10:16,510 --> 00:10:19,590 Tudja, ó, azt akarom, vissza ezt. 222 00:10:19,590 --> 00:10:21,070 De ez egy másik URL-t. 223 00:10:21,070 --> 00:10:23,534 Tehát hé, hogy tényleg ezt akarod. 224 00:10:23,534 --> 00:10:26,950 >> David J. MALAN: Ez egy darabot, hogy azt mondta hogy adott nektek egy átirányítás 225 00:10:26,950 --> 00:10:30,830 funkció, amely használta a header függvényt ez viszont, kinyomtathatók helyszín, 226 00:10:30,830 --> 00:10:34,110 vastagbél, majd az URL-t, amelyre azt szeretné, hogy utasítsák el a felhasználó. 227 00:10:34,110 --> 00:10:37,480 Annak ellenére, hogy nem látta a 302 kifejezetten ott van, ez az, amit a PHP 228 00:10:37,480 --> 00:10:41,550 varázslatos módon helyezze be a fejléc mondván, hogy pontosan mi Rob azt mondta, hogy - 229 00:10:41,550 --> 00:10:41,930 található. 230 00:10:41,930 --> 00:10:43,180 De megy itt helyette. 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 Szóval mi a 403 tiltott? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Közönség: Azt hiszem, hogy a szerver alapvetően azt mondja, hogy az ügyfél 236 00:10:57,120 --> 00:10:59,970 nem fér hozzá a honlap. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: Szóval igen. 238 00:11:03,260 --> 00:11:07,670 Nos, a tipikus válasz voltunk vár olyasmi, mint a fájlok 239 00:11:07,670 --> 00:11:08,920 nem chmodded megfelelően. 240 00:11:08,920 --> 00:11:11,590 Ez valószínűleg milyen körülmények között látta őket. 241 00:11:11,590 --> 00:11:18,920 De van egy oka annak, hogy az ügyfél lehet vétkes itt. 242 00:11:18,920 --> 00:11:20,440 Itt tulajdonképpen egy státusz kód - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Tehát ezek nagyon hasonlóak. 245 00:11:22,820 --> 00:11:24,590 >> 401 engedélyezett. 246 00:11:24,590 --> 00:11:26,130 És 403 tilos. 247 00:11:26,130 --> 00:11:31,890 És így illetéktelen te kizárólag hogy ha nem vagy bejelentkezve, 248 00:11:31,890 --> 00:11:34,520 De bejelentkezés jelenthet hogy Ön jogosult. 249 00:11:34,520 --> 00:11:37,930 De ha már bejelentkezett, és még nincs engedélye, akkor 250 00:11:37,930 --> 00:11:40,140 akkor is kap tiltott. 251 00:11:40,140 --> 00:11:45,320 Tehát, ha be van jelentkezve, és nem engedélyt, tilos is 252 00:11:45,320 --> 00:11:47,164 amit lehet kapni. 253 00:11:47,164 --> 00:11:48,900 >> David J. MALAN: És az a mechanizmus, amelyek ezeket a problémákat általában 254 00:11:48,900 --> 00:11:53,100 megoldani a szerver keresztül mi a parancs? 255 00:11:53,100 --> 00:11:57,700 Chmod, ha ez valóban, a jogosultságok kérdés a fájl vagy könyvtár. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: Akkor 404 nem található. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Igen. 259 00:12:03,470 --> 00:12:10,150 Szóval, ellentétben a 302, ahol nem volt éppen ahol azt kérdezi, de tudja, hogy mit 260 00:12:10,150 --> 00:12:12,710 akarod, ezt, csak éppen nem tudja, mit akar. 261 00:12:12,710 --> 00:12:15,648 És te nem kér valami érvényes. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 vagyok teáskanna, majd 500 belső szerver. 264 00:12:22,310 --> 00:12:24,870 Szóval, miért is van ez? 265 00:12:24,870 --> 00:12:26,120 >> Tehát segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Igazából nem tudom, az osztályozás szabvány erre. 268 00:12:30,640 --> 00:12:34,850 De ha a PHP kód volt valami rossz benne, elméletileg lehetett 269 00:12:34,850 --> 00:12:39,650 ténylegesen segfault, amely esetben ez a 500 belső szerver hiba, amit 270 00:12:39,650 --> 00:12:41,400 a hiba a szerver konfigurációt. 271 00:12:41,400 --> 00:12:44,320 Vagy van egy szintaktikai hiba a PHP kódot. 272 00:12:44,320 --> 00:12:46,095 Vagy valami rossz történik. 273 00:12:46,095 --> 00:12:48,320 >> David J. MALAN: Mi nem látni segfault között, egy-két ember a válaszokat. 274 00:12:48,320 --> 00:12:49,490 És technikailag, ez megtörténhet. 275 00:12:49,490 --> 00:12:53,820 De ez lenne a PHP-t, a program írta más emberek, valójában 276 00:12:53,820 --> 00:12:57,790 segfaulted, amely csak akkor, ha azok az emberek elrontottam és írt hibás kód 277 00:12:57,790 --> 00:13:00,680 a tolmács lenne PHP maga segfault. 278 00:13:00,680 --> 00:13:06,460 Így, bár a 500, mint a segfault lélekben, akkor szinte mindig a 279 00:13:06,460 --> 00:13:10,490 eredmény egy konfigurációs fájl kérdés a web szerver vagy, mint Rob azt mondta, 280 00:13:10,490 --> 00:13:13,200 szintaktikai hiba, mint te nem zárta be árajánlatot. 281 00:13:13,200 --> 00:13:16,180 Vagy elvesztette a pontosvessző valahol. 282 00:13:16,180 --> 00:13:23,677 >> Közönség: Tehát a Shuttle Pset, azt hiszem, ha én egyszer rákattintottam a 283 00:13:23,677 --> 00:13:26,300 a böngésző, de semmi nem jött fel, amit az úgynevezett fehér oldal. 284 00:13:26,300 --> 00:13:28,056 De ez azért volt, mert a kódot. 285 00:13:28,056 --> 00:13:29,440 Azt hiszem, ez volt JavaScript, igaz? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Igen. 287 00:13:29,770 --> 00:13:31,180 >> Közönség: Vajon ez a hiba Még mindig jön? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Szóval nem ütött ezt a hibát, mert mindent 289 00:13:34,290 --> 00:13:36,930 a webszerver szemszögéből teljesen rendben van. 290 00:13:36,930 --> 00:13:39,090 De kért index.html. 291 00:13:39,090 --> 00:13:42,000 Azt kérte shuttle.js és service.js. 292 00:13:42,000 --> 00:13:44,580 És képes volt sikeresen vissza Önnek minden olyan dolog - 293 00:13:44,580 --> 00:13:44,980 200-at. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Ez csak akkor, ha a böngésző megpróbált értelmezni a JavaScript kód, amely 296 00:13:49,330 --> 00:13:51,370 ez olyan, mint, várj, ez nem érvényes JavaScript hiba. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Van még kérdés? 299 00:13:58,210 --> 00:14:00,750 Rendben van. 300 00:14:00,750 --> 00:14:04,120 >> David J. MALAN: Így a következő up volt 11-es. 301 00:14:04,120 --> 00:14:07,610 És a 11. volt a legijesztőbb egy csomó ember. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Tehát a legfontosabb dolog megjegyezni volt, hogy ez volt, sőt, körülbelül 304 00:14:18,570 --> 00:14:19,840 kétszeresen láncolt lista. 305 00:14:19,840 --> 00:14:23,160 De ez nem ugyanaz, mint a tavalyi kétszeresen láncolt lista a problémát, 306 00:14:23,160 --> 00:14:27,170 amely nem adja meg a fenntartással, hogy A lista is, sőt, a rendezetlen. 307 00:14:27,170 --> 00:14:29,640 >> Tehát az a tény, hogy a lista volt rendezetlen és az a tény, hogy ez a szó volt 308 00:14:29,640 --> 00:14:32,930 kiemelte ott volt a célja, hogy közvetítse hogy ez valójában egy egyszerűsítés 309 00:14:32,930 --> 00:14:35,430 egyébként, hogy mi volna egy nagyobb kihívást jelentő probléma 310 00:14:35,430 --> 00:14:36,600 és egy hosszabb. 311 00:14:36,600 --> 00:14:40,760 Tehát a leggyakoribb hiba az volt, hogy már fel tavalyi megoldást az egyik 312 00:14:40,760 --> 00:14:45,580 lapozó és aztán csak vakon vettem le, mint a válasz, amely a jobb oldali 313 00:14:45,580 --> 00:14:48,520 választ egy másik kérdés hasonló szellemben. 314 00:14:48,520 --> 00:14:51,340 De a finomságok itt a következők voltak. 315 00:14:51,340 --> 00:14:55,200 >> Tehát az egyik, van egy csomópont bejelentett és meghatározása a szokásos módon itt. 316 00:14:55,200 --> 00:14:59,230 Aztán definiált lista egy globális mutató kezdeti értéke null. 317 00:14:59,230 --> 00:15:02,150 Aztán úgy tűnik, van két funkció mi prototípusok itt, betét 318 00:15:02,150 --> 00:15:03,240 és távolítsa el. 319 00:15:03,240 --> 00:15:06,600 Aztán van néhány minta kódját itt csinál egy csomó betoldások. 320 00:15:06,600 --> 00:15:09,930 És akkor kérjük, hogy töltse ki a végrehajtása betét alatt az ilyen 321 00:15:09,930 --> 00:15:14,380 olyan módon, hogy az n beszúrja a listába állandó időben is hangsúlyozta, 322 00:15:14,380 --> 00:15:15,730 még akkor is, ha már jelen van. 323 00:15:15,730 --> 00:15:20,600 >> Tehát a szépség, hogy képes beszúrni állandó az idő, hogy ez azt jelenti, 324 00:15:20,600 --> 00:15:23,060 hogy van, hogy be Az új csomópont, ahol? 325 00:15:23,060 --> 00:15:23,690 Into az első. 326 00:15:23,690 --> 00:15:27,760 Így megszünteti, szerencsére, legalábbis az egyik eset, hogy a használt igénylő 327 00:15:27,760 --> 00:15:30,520 még több sornyi kódot, mint tette az elmúlt évben, és még az osztályban, amikor 328 00:15:30,520 --> 00:15:34,040 Beszéltem keresztül ez a fajta dolog emberekkel és némi 329 00:15:34,040 --> 00:15:35,250 verbális pszeudo kódot. 330 00:15:35,250 --> 00:15:39,190 Tehát itt a megoldás, ugorjunk át az, hogy csak, hogy egy vizuális on 331 00:15:39,190 --> 00:15:40,480 a képernyőn. 332 00:15:40,480 --> 00:15:42,230 >> Figyeljük meg, hogy csinálunk a következő. 333 00:15:42,230 --> 00:15:45,140 És azt is észre más egyszerűsítési az volt, hogy még akkor is, ha ez 334 00:15:45,140 --> 00:15:48,280 már jelen van, így ez azt jelenti, akkor is, ha A szám már ott van, akkor 335 00:15:48,280 --> 00:15:50,280 vakon be egy másik másolatát. 336 00:15:50,280 --> 00:15:52,560 És ez is volt a célja, hogy egy egyszerűsítés, így lehet 337 00:15:52,560 --> 00:15:54,940 összpontosít, tényleg, néhány a intellektuálisan érdekes rész és 338 00:15:54,940 --> 00:15:58,090 nem csak néhány további hiba ellenőrzése tekintettel a korlátozott ideig. 339 00:15:58,090 --> 00:16:02,880 >> Tehát ez a minta megoldás, kiosztani A mutató a bal oldali 340 00:16:02,880 --> 00:16:04,510 másikra itt egy csomópont. 341 00:16:04,510 --> 00:16:07,190 Most, rájönnek, hogy a mutató, mint Rob azt mondta, csak 32 bites. 342 00:16:07,190 --> 00:16:09,060 És ez valójában nem tartalmaz egy címet, amíg meg nem 343 00:16:09,060 --> 00:16:09,970 hozzá, hogy a címet. 344 00:16:09,970 --> 00:16:13,220 És mi, hogy a jobb oldali oldalon keresztül malloc. 345 00:16:13,220 --> 00:16:16,550 Mint egy jó állampolgár, akkor ellenőrizze, hogy malloc nem, sőt, null, úgy, hogy 346 00:16:16,550 --> 00:16:18,690 nem véletlenül hoz létre a segfault itt. 347 00:16:18,690 --> 00:16:22,840 És minden alkalommal, amikor a malloc az életben, akkor kell megnézni a null, nehogy 348 00:16:22,840 --> 00:16:24,090 van egy bug. 349 00:16:24,090 --> 00:16:28,460 >> Aztán inicializálni, hogy null által hozzárendelése n és az előző és a következő. 350 00:16:28,460 --> 00:16:32,450 És ebben az esetben itt, inicializált megelőző null, mert ez az új 351 00:16:32,450 --> 00:16:34,780 csomópont lesz az új elején a listámon. 352 00:16:34,780 --> 00:16:37,050 Tehát ott lesz sem előtte. 353 00:16:37,050 --> 00:16:42,010 És azt akarom, hogy alapvetően hozzáfűzni a meglévő listát az új csomópontot 354 00:16:42,010 --> 00:16:44,700 beállítás mellett egyenlő a listára is. 355 00:16:44,700 --> 00:16:47,120 De én nem vagyok kész csak még. 356 00:16:47,120 --> 00:16:51,780 Tehát, ha maga a lista már létezett, és volt legalább egy csomópontot 357 00:16:51,780 --> 00:16:57,070 már a helyén, ha ez a lista Itt és helyezzen be egy új csomópontot itt, 358 00:16:57,070 --> 00:17:01,840 kell győződnie arról, hogy a korábbi csomópont rámutat hátra az új csomópontot, 359 00:17:01,840 --> 00:17:04,260 mert ez megint kétszeresen láncolt lista. 360 00:17:04,260 --> 00:17:05,460 >> Tehát mi a józan eszét csekket. 361 00:17:05,460 --> 00:17:10,109 Ha a lista nem üres, ha nincs már egy vagy több csomópont van, akkor 362 00:17:10,109 --> 00:17:12,470 Hozzáteszem, hogy vissza hivatkozás úgy mondjam. 363 00:17:12,470 --> 00:17:15,420 És akkor az utolsó dolog, amire szükségünk tennie, hogy valóban frissíti a globális 364 00:17:15,420 --> 00:17:20,329 változó lista maga pont az, hogy az új csomópontot. 365 00:17:20,329 --> 00:17:21,790 Igen. 366 00:17:21,790 --> 00:17:26,579 >> Közönség: A mutató nyíl [Hallhatatlan] egyenlő null, ez azt 367 00:17:26,579 --> 00:17:30,420 foglalkozik a listán, mert a lista null? 368 00:17:30,420 --> 00:17:30,596 >> David J. MALAN: Nem. 369 00:17:30,596 --> 00:17:34,500 Ez egyszerűen nekem, hogy proaktív óvatos, az, hogy ha ez az én 370 00:17:34,500 --> 00:17:38,730 eredeti listát és talán még néhány csomópont itt és én behelyezése a 371 00:17:38,730 --> 00:17:42,380 Új csomópont ide, oda megy hogy semmi itt. 372 00:17:42,380 --> 00:17:44,720 És szeretném megragadni, hogy az ötlet beállításával megelőző 373 00:17:44,720 --> 00:17:47,740 null az új csomópontot. 374 00:17:47,740 --> 00:17:51,410 És feltehetően, ha a kód helyes és nincs más módja annak, hogy be 375 00:17:51,410 --> 00:17:54,970 csomópontok más, mint ez a funkció, Feltételezhető, hogy még akkor is ha a lista már 376 00:17:54,970 --> 00:18:00,090 egy vagy több csomópont benne, feltehetően a listát, az első csomópont, volna egy 377 00:18:00,090 --> 00:18:02,750 előző mutató null is. 378 00:18:02,750 --> 00:18:03,550 >> Közönség: És csak a nyomon követést. 379 00:18:03,550 --> 00:18:08,139 Az ok teszel mutató mellett egyenlő lista még van a mutató 380 00:18:08,139 --> 00:18:13,579 előtt lista, hogy ez mutat a következő, azt hiszem - 381 00:18:13,579 --> 00:18:14,980 Én nem - 382 00:18:14,980 --> 00:18:15,450 csak listák? 383 00:18:15,450 --> 00:18:16,400 >> David J. MALAN: Pontosan. 384 00:18:16,400 --> 00:18:19,400 És így nézzük valóban úgy két esetben Itt tényleg, bár a 385 00:18:19,400 --> 00:18:22,070 érdekében fogjuk tekintik őket, nem teljesen ugyanaz, mint a kódot. 386 00:18:22,070 --> 00:18:26,250 De egy magas szinten, ha ez jelenti listát, és ez egy 32 bites 387 00:18:26,250 --> 00:18:29,560 mutató, a legegyszerűbb forgatókönyv hogy ez null alapértelmezés szerint. 388 00:18:29,560 --> 00:18:33,010 És tegyük fel, azt akarom, hogy helyezze be a szám 50 volt az első szám. 389 00:18:33,010 --> 00:18:37,640 Szóval megyek előre, és osztja egy csomópont, ami megy, hogy tartalmazza 390 00:18:37,640 --> 00:18:38,770 három területen - 391 00:18:38,770 --> 00:18:42,070 n, az előző és a következő. 392 00:18:42,070 --> 00:18:44,580 >> Megyek fel a számot 50 itt, mert ez lesz az n. 393 00:18:44,580 --> 00:18:46,130 Ez lesz a következő. 394 00:18:46,130 --> 00:18:48,530 És ez lesz az előző. 395 00:18:48,530 --> 00:18:50,910 És mit tegyek ebben az esetben? 396 00:18:50,910 --> 00:18:53,900 Nos, én már csak kész 1. sor itt. 397 00:18:53,900 --> 00:18:55,400 Pointer n lesz n. 398 00:18:55,400 --> 00:18:57,740 Én akkor azt mondja, a korábbi kéne null. 399 00:18:57,740 --> 00:18:59,470 Tehát ez lesz null. 400 00:18:59,470 --> 00:19:01,365 Majd fogok mondani legközelebb fog kapni listát. 401 00:19:01,365 --> 00:19:05,150 >> És ez csak működik jól. 402 00:19:05,150 --> 00:19:06,500 Ez null. 403 00:19:06,500 --> 00:19:10,620 És azt mondom, az új csomópont következő mező kéne bármi is ez. 404 00:19:10,620 --> 00:19:12,570 Tehát, hogy hozza egy null oda. 405 00:19:12,570 --> 00:19:14,510 És akkor az utolsó dolog, Azt is ellenőrizze itt. 406 00:19:14,510 --> 00:19:17,870 Ha a lista nem egyenlő a nulla, de a egyenlő nulla, ezért hagyja, hogy a 407 00:19:17,870 --> 00:19:18,470 összesen. 408 00:19:18,470 --> 00:19:23,520 És így minden, amit csinálni, lista lesz mutató, amely képileg eredményez 409 00:19:23,520 --> 00:19:25,570 egy kép, mint ezt. 410 00:19:25,570 --> 00:19:26,620 Tehát ez az egyik forgatókönyv. 411 00:19:26,620 --> 00:19:30,490 >> És az egyik, hogy te kérdezett konkrétan az a helyzet, mint ez, 412 00:19:30,490 --> 00:19:33,190 ahol már van egy node lista. 413 00:19:33,190 --> 00:19:36,240 És ha megyek vissza az eredeti probléma megfogalmazását, a következő fogunk 414 00:19:36,240 --> 00:19:39,320 be mondjuk 34, csak a A vita kedvéért. 415 00:19:39,320 --> 00:19:46,210 Ezért fogok csak kényelmesen felhívni, hogy több mint itt. 416 00:19:46,210 --> 00:19:47,540 Most malloced. 417 00:19:47,540 --> 00:19:49,310 Tegyük fel, hogy én vagyok ellenőrzése null. 418 00:19:49,310 --> 00:19:51,870 >> Most megyek inicializálása n, hogy 34.. 419 00:19:51,870 --> 00:19:53,040 És ez lesz az n. 420 00:19:53,040 --> 00:19:54,670 Ez lesz a következő. 421 00:19:54,670 --> 00:19:57,100 És ez lesz az előző. 422 00:19:57,100 --> 00:19:59,370 Nézzük hogy biztos, hogy nem hogy ez visszafelé. 423 00:19:59,370 --> 00:20:01,110 Előző előbb meghatározása. 424 00:20:01,110 --> 00:20:03,070 Hadd erősít ez. 425 00:20:03,070 --> 00:20:04,410 Ez a korábbi. 426 00:20:04,410 --> 00:20:05,780 Ez a következő. 427 00:20:05,780 --> 00:20:08,620 Annak ellenére, hogy ezek azonosak, maradjon is következetes. 428 00:20:08,620 --> 00:20:09,450 >> Előző. 429 00:20:09,450 --> 00:20:11,030 Ez a következő. 430 00:20:11,030 --> 00:20:16,310 Szóval már csak malloced levelemet, ellenőrzött A null, célhoz kötött 34 a csomópontot. 431 00:20:16,310 --> 00:20:17,570 Előző lesz null. 432 00:20:17,570 --> 00:20:19,480 Annak érdekében, hogy ad nekem. 433 00:20:19,480 --> 00:20:21,010 Következő lesz lista. 434 00:20:21,010 --> 00:20:22,370 Tehát lista ez. 435 00:20:22,370 --> 00:20:26,520 Tehát ez ugyanaz most is, mint ez a rajz nyíl, úgy, hogy pont egy 436 00:20:26,520 --> 00:20:27,940 az azonos. 437 00:20:27,940 --> 00:20:30,400 Aztán nézem ha a lista nem egyenlő null. 438 00:20:30,400 --> 00:20:31,740 És ez most nem. 439 00:20:31,740 --> 00:20:35,580 Majd fogok teendők előző kap mutató. 440 00:20:35,580 --> 00:20:39,700 >> Tehát listára Előző lesz PTR. 441 00:20:39,700 --> 00:20:44,300 Tehát ez az a hatása, hogy grafikus nyíl itt. 442 00:20:44,300 --> 00:20:46,930 És ez kezd egy kicsit hullámos, a vonalak. 443 00:20:46,930 --> 00:20:50,780 És akkor végül, azt frissíteni listát, hogy pont a mutató. 444 00:20:50,780 --> 00:20:55,560 Tehát most ez arra mutat, hogy ez a fickó. 445 00:20:55,560 --> 00:20:57,170 És most nézzük egy gyors józanság csekket. 446 00:20:57,170 --> 00:20:59,470 >> Itt a lista, amely az a globális változót. 447 00:20:59,470 --> 00:21:02,850 Az első csomópont, sőt, 34, mivel Én követő nyíl. 448 00:21:02,850 --> 00:21:05,210 És ez helyes, mert azt akarom, hogy helyezze elején a lista 449 00:21:05,210 --> 00:21:06,070 minden új csomópont. 450 00:21:06,070 --> 00:21:08,860 A következő mezőben arra késztet, hogy ez a fickó. 451 00:21:08,860 --> 00:21:10,710 Ha folyamatosan megy, elütöttem a következő null. 452 00:21:10,710 --> 00:21:11,760 Tehát nincs több lista. 453 00:21:11,760 --> 00:21:14,460 Ha hit korábbi, kapok vissza, ahol várják. 454 00:21:14,460 --> 00:21:16,435 >> Tehát van még néhány mutató, Nyilvánvaló, hogy manipulálni. 455 00:21:16,435 --> 00:21:19,870 De az a tény, hogy azt mondták, hogy nem ez az állandó idő azt jelenti, hogy csak 456 00:21:19,870 --> 00:21:22,910 van egy véges számú dolog akkor tehetnek meg. 457 00:21:22,910 --> 00:21:24,290 És mi ez a szám? 458 00:21:24,290 --> 00:21:25,185 Lehet, hogy egy lépéssel. 459 00:21:25,185 --> 00:21:25,700 Lehet, hogy kettő. 460 00:21:25,700 --> 00:21:26,820 Lehet, hogy 1000 a lépéseket. 461 00:21:26,820 --> 00:21:30,500 De ez véges, ami azt jelenti, hogy nem Van-e valamilyen loop folyik 462 00:21:30,500 --> 00:21:32,010 itt, nem rekurzió, nincs hurok. 463 00:21:32,010 --> 00:21:37,390 Ez csak most, hogy kódolt vonalak A kód, mint mi ebben a mintában. 464 00:21:37,390 --> 00:21:42,330 >> Így a következő probléma 12 megkért minket, hogy teljes körű végrehajtása a Remove 465 00:21:42,330 --> 00:21:46,740 alább oly módon, hogy eltávolítja n a listából lineáris időben. 466 00:21:46,740 --> 00:21:48,740 Szóval van egy kicsit több kígyózik szobában most. 467 00:21:48,740 --> 00:21:52,380 Lehet, hogy azt feltételezik, hogy n, ha van a listán, jelen lesz 468 00:21:52,380 --> 00:21:53,340 nem több, mint egyszer. 469 00:21:53,340 --> 00:21:56,770 És ez is azt jelentette, hogy a teszt-alapú egyszerűsítő feltételezéssel élünk, így 470 00:21:56,770 --> 00:21:59,780 hogy ha megtalálja a 50-valahol szerepel a listán, akkor nem is 471 00:21:59,780 --> 00:22:02,890 kell aggódnia, továbbra is ismételget, akik minden lehetséges 472 00:22:02,890 --> 00:22:06,990 másolata 50, ami csak száll a néhány minutia korlátozott ideig. 473 00:22:06,990 --> 00:22:10,460 >> Tehát remove, ez határozottan nagyobb kihívást jelent, és több 474 00:22:10,460 --> 00:22:11,640 kódot írni. 475 00:22:11,640 --> 00:22:14,990 De első pillantásra, őszintén szólva, ez talán néz elsöprő és mint valami 476 00:22:14,990 --> 00:22:17,060 nincs mód, akkor lehetett volna felér egy kvíz. 477 00:22:17,060 --> 00:22:22,450 De ha arra összpontosítunk, hogy az egyes lépések, remélem, hogy lesz hirtelen 478 00:22:22,450 --> 00:22:26,060 sztrájk van, hogy minden ilyen egyéni lépéseket tesz nyilvánvaló értelme 479 00:22:26,060 --> 00:22:27,080 visszatekintve. 480 00:22:27,080 --> 00:22:28,200 Szóval vessünk egy pillantást. 481 00:22:28,200 --> 00:22:32,570 >> Tehát először is inicializálni pointer hogy felsorolni is. 482 00:22:32,570 --> 00:22:36,040 Mert azt akarom, lineáris idő, azt jelenti, Megyek egy kis hurok. 483 00:22:36,040 --> 00:22:39,730 És egy közös utat végighaladni a csomópontok listáját szerkezet vagy bármilyen 484 00:22:39,730 --> 00:22:43,860 a szerkezet is, hogy iteratív a mutató az első adatok 485 00:22:43,860 --> 00:22:46,990 szerkezete és aztán csak elkezd frissítése , és járni az utat 486 00:22:46,990 --> 00:22:48,650 az adatstruktúra révén. 487 00:22:48,650 --> 00:22:50,040 Így fogok tenni, hogy pontosan. 488 00:22:50,040 --> 00:22:54,260 >> Bár a mutató, az ideiglenes változó, nem egyenlő nulla, nézzük 489 00:22:54,260 --> 00:22:55,660 megy előre, és ellenőrizze. 490 00:22:55,660 --> 00:22:56,910 Volt szerencsém? 491 00:22:56,910 --> 00:23:01,740 Az n mező a csomópont vagyok jelenleg néztem egyenlő a 492 00:23:01,740 --> 00:23:03,380 szám, amit keresek? 493 00:23:03,380 --> 00:23:05,410 És ha igen, csináljunk valamit. 494 00:23:05,410 --> 00:23:10,020 Nos, észre ezt, ha a feltétel körülveszi az egész 495 00:23:10,020 --> 00:23:11,520 következő sornyi kódot. 496 00:23:11,520 --> 00:23:14,610 Ez az egyetlen dolog, amit érdekel - találni egy számot adott. 497 00:23:14,610 --> 00:23:18,010 Szóval nincs más, ami egyszerűsíti dolgok fogalmilag egy kicsit. 498 00:23:18,010 --> 00:23:22,040 >> De most rájöttem, és lehet, hogy csak rájött erre gondolkodás után 499 00:23:22,040 --> 00:23:24,720 ez egy kicsit, ott van valójában két eset van. 500 00:23:24,720 --> 00:23:28,060 Az egyik az, ahol a csomópont a kezdve a lista, amely a 501 00:23:28,060 --> 00:23:31,040 kicsit bosszantó, mert ez a speciális eset, mert meg kell foglalkozni 502 00:23:31,040 --> 00:23:33,340 ezt a dolgot, ami az egyetlen anomália. 503 00:23:33,340 --> 00:23:35,720 Mindenütt a listán, ez ugyanaz a dolog. 504 00:23:35,720 --> 00:23:38,050 Van egy korábbi csomópont és a következő csomópont, az előző csomópont, a következő csomópont. 505 00:23:38,050 --> 00:23:40,940 De ez a fickó egy kicsit különleges ha ő az elején. 506 00:23:40,940 --> 00:23:48,710 >> Tehát, ha a mutató megegyezik a lista is, így ha én vagyok az elején 507 00:23:48,710 --> 00:23:53,960 a listát, és azt találtam n, meg kell hogy csinál egy pár dolgot. 508 00:23:53,960 --> 00:23:59,230 Az egyik, hogy meg kell változtatni lista pont a következő mezőre, 50.. 509 00:23:59,230 --> 00:24:01,270 Tehát tegyük fel, hogy próbálom eltávolítani 34.. 510 00:24:01,270 --> 00:24:03,560 Szóval ez a srác kell mennie el csak egy pillanatra. 511 00:24:03,560 --> 00:24:07,210 >> Így fogok mondani, lista lesz melletti mutatóra. 512 00:24:07,210 --> 00:24:08,570 Nos, ez a mutató. 513 00:24:08,570 --> 00:24:10,360 Következő mutat itt. 514 00:24:10,360 --> 00:24:17,470 Tehát ez megváltoztatja ezt a nyílra Most, hogy pont ez a fickó itt. 515 00:24:17,470 --> 00:24:19,580 Ne feledd, mi átmeneti változót. 516 00:24:19,580 --> 00:24:23,520 Tehát mi nem árva olyan csomópontok, mert én is ezt a fickót én 517 00:24:23,520 --> 00:24:25,010 végrehajtása remove. 518 00:24:25,010 --> 00:24:29,600 Tehát most, ha a lista önmagában nem null, Azt kell rögzíteni egy kis valamit. 519 00:24:29,600 --> 00:24:32,690 >> Meg kell bizonyosodni arról, hogy ezt a nyilat, amelyet korábban mutat 520 00:24:32,690 --> 00:24:36,830 50-34, ez van, hogy menjen el, mert ha próbálok megszabadulni 521 00:24:36,830 --> 00:24:41,910 34, 50, jobb nem tarthatnak fenn olyan fajta vissza hivatkozik rá, mint a 522 00:24:41,910 --> 00:24:42,820 nyíl javasolta. 523 00:24:42,820 --> 00:24:44,820 Szóval én csak tettem ezt a sort. 524 00:24:44,820 --> 00:24:46,520 Így aztán kész vagyok. 525 00:24:46,520 --> 00:24:48,040 Ez az ügy valójában nagyon egyszerű. 526 00:24:48,040 --> 00:24:51,010 Szeletelés le a fejét a lista viszonylag egyszerű. 527 00:24:51,010 --> 00:24:52,980 >> Sajnos, ez zavaró más blokk. 528 00:24:52,980 --> 00:24:56,170 Tehát most, meg kell vizsgálni az ügyet ahol van valami a közepén. 529 00:24:56,170 --> 00:24:59,880 De ez nem túl szörnyű, kivéve szintaxis, mint ez. 530 00:24:59,880 --> 00:25:03,080 Tehát, ha én nem vagyok az elején a lista, én vagyok valahol a közepén. 531 00:25:03,080 --> 00:25:08,160 És ez a vonal itt azt mondja, a Start Bármilyen node te meg. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Ugrás az előző csomópont következő mezőre és pont, hogy a mutató. 534 00:25:18,550 --> 00:25:20,390 >> Csináljuk ezt képileg. 535 00:25:20,390 --> 00:25:21,640 Az egyre bonyolultabb. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Tehát, ha van egy korábbi mezők itt - csináljuk - következő mezők itt. 538 00:25:37,990 --> 00:25:41,200 Megyek, hogy egyszerűsítse a mutatók inkább mint felhívni egy csomó 539 00:25:41,200 --> 00:25:45,710 dolog oda-vissza crisscrossing egymást. 540 00:25:45,710 --> 00:25:50,870 És most, mondjuk, hogy ez 1, 2, 3. a vita kedvéért, még 541 00:25:50,870 --> 00:25:53,410 bár ez nem sorakoznak a A szóban forgó probléma. 542 00:25:53,410 --> 00:25:55,900 >> Tehát itt az én láncolt lista. 543 00:25:55,900 --> 00:25:59,300 Próbálom, hogy távolítsa el a két jelen adott változata a történetnek. 544 00:25:59,300 --> 00:26:01,960 Úgyhogy frissítve mutató mutatva ezzel a fickóval. 545 00:26:01,960 --> 00:26:03,315 Szóval ez a PTR. 546 00:26:03,315 --> 00:26:04,530 Ő mutat itt. 547 00:26:04,530 --> 00:26:07,170 Ez a lista, amely létezik világszerte, mint korábban. 548 00:26:07,170 --> 00:26:09,200 És ő mutat itt nem számít, mit. 549 00:26:09,200 --> 00:26:10,800 És most, próbálom eltávolítani kettő. 550 00:26:10,800 --> 00:26:13,850 >> Tehát, ha a mutató mutat itt vagyok fogja követni, úgy tűnik, a 551 00:26:13,850 --> 00:26:17,110 előző mutató, amely helyére teszi meg 1. 552 00:26:17,110 --> 00:26:22,290 Én akkor akartam mondani, hogy a következő mező, amely elvezet át ezt a 553 00:26:22,290 --> 00:26:25,410 doboz itt fog egyenlő mutató a következő. 554 00:26:25,410 --> 00:26:28,400 Szóval, ha ez a mutató, ez a következő. 555 00:26:28,400 --> 00:26:31,840 Ez azt jelenti, hogy a nyíl igények hogy pont ez a fickó. 556 00:26:31,840 --> 00:26:35,140 >> Tehát mi ezt a vonalat a kódot csak tett egy kicsit ezt. 557 00:26:35,140 --> 00:26:37,500 És most, ez néz ki, mint egy lépés a helyes irányba. 558 00:26:37,500 --> 00:26:41,390 Mi alapvetően szeretnénk nyissz 2 out A középső 1 és 3. 559 00:26:41,390 --> 00:26:44,400 Így van értelme, hogy azt akarjuk, hogy út ez a mutató körül. 560 00:26:44,400 --> 00:26:50,400 Tehát ez a következő sor annak ellenőrzése, hogy a mutató következő nem nulla, ott 561 00:26:50,400 --> 00:26:54,200 Valóban valaki jobbra, 2, azt jelenti, hogy mi is a teendő 562 00:26:54,200 --> 00:26:55,850 Egy kis nyissz itt. 563 00:26:55,850 --> 00:27:00,590 >> Szóval most kell, hogy kövesse ezt a mutatót és frissíti a korábbi mutatót 564 00:27:00,590 --> 00:27:05,410 ez a fickó, hogy csinál egy kicsit a Kerülő itt a lényeg itt. 565 00:27:05,410 --> 00:27:07,100 És most, vizuálisan ez szép. 566 00:27:07,100 --> 00:27:11,930 Ez egy kicsit zavaros, hogy van senki sem mutatott a 2. már. 567 00:27:11,930 --> 00:27:13,600 2. mutat a bal oldalon. 568 00:27:13,600 --> 00:27:14,980 És 2. jobbra mutató. 569 00:27:14,980 --> 00:27:17,480 De ő tehet, amit akar, mert a úgy szól, hogy felszabadult. 570 00:27:17,480 --> 00:27:19,480 És nem számít, milyen ezek az értékek már. 571 00:27:19,480 --> 00:27:23,040 >> Mi a fontos az, hogy a többi fiúk routing felett 572 00:27:23,040 --> 00:27:24,280 és alatta most. 573 00:27:24,280 --> 00:27:25,810 És valóban, ez az, amit csinálni. 574 00:27:25,810 --> 00:27:29,360 Mi ingyenes mutató, ami azt jelenti, hogy megmondja a operációs rendszer, akkor várjuk 575 00:27:29,360 --> 00:27:30,906 vissza ezt. 576 00:27:30,906 --> 00:27:34,900 És akkor végül visszatérünk. 577 00:27:34,900 --> 00:27:37,220 Else implicit, ha nem tért vissza még, 578 00:27:37,220 --> 00:27:38,290 megvan, hogy keresd. 579 00:27:38,290 --> 00:27:41,485 Tehát mutató értéke mutató mellett csak azt jelenti, mozog ez a fickó. 580 00:27:41,485 --> 00:27:42,600 Mozgás ez a fickó itt. 581 00:27:42,600 --> 00:27:45,400 Mozgás ez a fickó itt, ha, sőt, mi nem találja a számot 582 00:27:45,400 --> 00:27:46,960 keresünk még. 583 00:27:46,960 --> 00:27:49,630 >> Tehát őszintén szólva, úgy néz ki, teljesen elsöprő, azt hiszem, az első 584 00:27:49,630 --> 00:27:52,180 Dióhéjban, különösen akkor, ha küszködött ezzel az kvízt aztán majd meglátjuk, 585 00:27:52,180 --> 00:27:52,850 valami ilyesmi. 586 00:27:52,850 --> 00:27:55,050 És pat magad a hátán. 587 00:27:55,050 --> 00:27:57,080 Nos, nincs mód arra, hogy van jön ki, hogy a kvíz. 588 00:27:57,080 --> 00:28:00,470 De én azt állítják, akkor ha törik le ezekbe az egyéni 589 00:28:00,470 --> 00:28:04,400 esetekben és csak gyalog rajta óvatosan, bár, igaz, alatt 590 00:28:04,400 --> 00:28:06,300 stresszes körülmények között. 591 00:28:06,300 --> 00:28:09,470 >> Szerencsére a kép készült Mindent boldogabb. 592 00:28:09,470 --> 00:28:11,050 Lehet rajzolni ezt tetszőleges számú módon. 593 00:28:11,050 --> 00:28:12,760 Önnek nem kell tennie a crisscrossing dolog itt. 594 00:28:12,760 --> 00:28:14,520 Lehet csinálni egyenes hasonló sor. 595 00:28:14,520 --> 00:28:18,790 De a lényege ezt a problémát, Általában az volt, hogy észre, hogy a 596 00:28:18,790 --> 00:28:22,060 képet a végén kell meg egy kicsit valami ilyesmi, mert a 597 00:28:22,060 --> 00:28:25,030 állandó alkalommal azt sugallta, hogy tartsa a zavarás és zavarás és zavarás a 598 00:28:25,030 --> 00:28:29,900 új csomópontokat az elején a listán. 599 00:28:29,900 --> 00:28:31,960 Bármilyen kérdése? 600 00:28:31,960 --> 00:28:34,565 Talán a legnagyobb kihívást a minden bizonnyal a kódolás kérdésekre. 601 00:28:34,565 --> 00:28:37,690 >> Közönség: Szóval lista hasonló fej az előző példákban. 602 00:28:37,690 --> 00:28:39,640 >> David J. MALAN: Pontosan, pontosan. 603 00:28:39,640 --> 00:28:43,130 Csak egy másik nevet egy globális változót. 604 00:28:43,130 --> 00:28:44,380 Világszerte mi? 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 Tehát ez az egyik, ahol kellett írni a bekezdést. 608 00:28:52,020 --> 00:28:56,060 Vannak, akik azt írta esszék ezt a kérdést. 609 00:28:56,060 --> 00:29:00,230 De akkor csak meg kell használni ezeket a kifejezéseket a hat arra, hogy mi történik, ha 610 00:29:00,230 --> 00:29:02,440 megpróbál kapcsolatba lépni facebook.com. 611 00:29:02,440 --> 00:29:07,930 Szóval, én csak beszélek a folyamat használja ezeket a kifejezéseket. 612 00:29:07,930 --> 00:29:11,290 Tehát mi a böngésző, akkor írja facebook.com és nyomja meg az Entert. 613 00:29:11,290 --> 00:29:17,280 Így a böngészőt fog építeni egy HTTP kérés, hogy ez fog küldeni 614 00:29:17,280 --> 00:29:22,220 valamilyen folyamat Facebook Facebook, hogy válaszoljon nekünk a 615 00:29:22,220 --> 00:29:24,450 HTML az oldalon. 616 00:29:24,450 --> 00:29:28,800 >> Tehát mi az a folyamat, amely a HTTP kérés 617 00:29:28,800 --> 00:29:30,730 valóban kap a Facebook? 618 00:29:30,730 --> 00:29:32,790 Tehát először meg kell fordítani Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Tehát most adott nevet Facebook.com, ahol valójában nem a HTTP kérés 620 00:29:38,780 --> 00:29:39,940 kell menni? 621 00:29:39,940 --> 00:29:44,120 Tehát meg kell fordítani Facebook.com hogy az IP-cím, amely egyedülállóan 622 00:29:44,120 --> 00:29:47,620 megállapítja, hogy milyen gép valójában szeretné küldeni ezt a kérést. 623 00:29:47,620 --> 00:29:49,310 A laptop van IP-címe. 624 00:29:49,310 --> 00:29:52,240 Bármi, ami csatlakozik az internethez van IP-címe. 625 00:29:52,240 --> 00:29:59,030 >> Tehát DNS, Domain Name System, azaz mi fog kezelni a fordítás 626 00:29:59,030 --> 00:30:03,750 A facebook.com az IP címet, ha valóban szeretne kapcsolatba lépni. 627 00:30:03,750 --> 00:30:08,075 Tehát mi a kapcsolatot a DNS-kiszolgálók és mondjuk, mi facebook.com? 628 00:30:08,075 --> 00:30:16,560 Azt mondja, ó, ez az IP-címet 190,212 valami, valami, valami. 629 00:30:16,560 --> 00:30:16,900 Rendben van. 630 00:30:16,900 --> 00:30:18,850 Most már tudom, mi a gép Szeretném felvenni a kapcsolatot. 631 00:30:18,850 --> 00:30:22,360 >> Szóval, akkor küldje el a HTTP-kérelem át, hogy az a gép. 632 00:30:22,360 --> 00:30:24,140 Szóval, hogyan jut el, hogy a gép? 633 00:30:24,140 --> 00:30:27,200 Nos, a kérést megy router a router Pattogó. 634 00:30:27,200 --> 00:30:32,630 Ne feledje, a példában az osztályban, ahol a mi valóban látta az út, hogy a 635 00:30:32,630 --> 00:30:35,340 csomagokat vett, amikor megpróbáltuk kommunikálni. 636 00:30:35,340 --> 00:30:38,460 Láttuk, hogy átugorjuk az Atlanti-óceán Ocean egy ponton, vagy bármi. 637 00:30:38,460 --> 00:30:42,820 >> Így az utolsó kifejezés port. 638 00:30:42,820 --> 00:30:46,520 Szóval ez már a számítógépen. 639 00:30:46,520 --> 00:30:49,970 Egyszerre több dolgok jelenlegi kommunikál az interneten. 640 00:30:49,970 --> 00:30:53,730 Szóval lehet futás, mondjuk, a Skype. 641 00:30:53,730 --> 00:30:55,670 Én lehet, hogy a böngésző nyitva. 642 00:30:55,670 --> 00:30:59,010 Talán van valami, ami torrenting fájlokat. 643 00:30:59,010 --> 00:31:00,880 Szóval ezek a dolgok kommunikál a 644 00:31:00,880 --> 00:31:02,600 internet valamilyen módon. 645 00:31:02,600 --> 00:31:08,070 >> Tehát, ha a számítógép kap néhány adatot az interneten, hogy hogyan csinálja 646 00:31:08,070 --> 00:31:10,130 tudom, mi alkalmazás valójában szeretné, ha az adatokat? 647 00:31:10,130 --> 00:31:12,610 Honnan tudja, hogy az adott adatok célja a 648 00:31:12,610 --> 00:31:16,070 torrenting alkalmazás szemben A böngésző? 649 00:31:16,070 --> 00:31:20,980 Tehát ez a célja a portokat, hogy az összes ilyen alkalmazások 650 00:31:20,980 --> 00:31:22,720 azt állította, a port a számítógépen. 651 00:31:22,720 --> 00:31:27,580 Tehát a böngésző azt mondja, hé, Hallgatom porton 1000. 652 00:31:27,580 --> 00:31:32,240 És a torrenting program azt mondja, Hallgatom porton 3000. 653 00:31:32,240 --> 00:31:34,770 És a Skype azt mondja, én vagyok a port 4000. 654 00:31:34,770 --> 00:31:41,950 >> Tehát, ha egy kis tartozó adatokat hogy egy ilyen alkalmazás, az adatok 655 00:31:41,950 --> 00:31:45,510 van ellátva, amely port valójában kell küldeni mentén. 656 00:31:45,510 --> 00:31:47,950 Tehát ez azt mondja, jaj, tartozom a port 1000. 657 00:31:47,950 --> 00:31:50,950 Tudom, hogy akkor kell, hogy továbbítsa ezt az mentén a böngésző. 658 00:31:50,950 --> 00:31:56,440 Tehát az oka, hogy fontos itt az, hogy a webszerverek általában 659 00:31:56,440 --> 00:31:58,240 hallgatni 80-as porton. 660 00:31:58,240 --> 00:32:02,420 Tehát, amikor kapcsolatba Facebook.com vagyok kommunikál néhány gépen. 661 00:32:02,420 --> 00:32:06,390 De azt kell mondanom, melyik port, hogy a gépet akarok kommunikálni. 662 00:32:06,390 --> 00:32:09,160 És webszerverek általában hallgat 80-as porton. 663 00:32:09,160 --> 00:32:14,010 >> Ha azt akarták, tudták beállítani fel, így felsorolja, mint a 7000-es port. 664 00:32:14,010 --> 00:32:19,090 És aztán egy web böngésző, tudtam manuálisan Facebook.com: 7000 665 00:32:19,090 --> 00:32:24,600 elküldi a kérelmet, hogy 7000-es port Facebook webszervert. 666 00:32:24,600 --> 00:32:26,820 >> David J. MALAN: És ebben az esetben is, bár mi nem követeli meg, hogy az emberek 667 00:32:26,820 --> 00:32:30,000 említem ezt, ebben az esetben, milyen port azt a kérést valóban megy? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Próbálja újra. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Pontosan. 672 00:32:44,300 --> 00:32:47,960 Nem keres, de a finomság hogy ott van, sem az utolsó. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: Tehát a HTTPS, mivel ez hallgatta kifejezetten a 674 00:32:51,770 --> 00:32:55,180 titkosított, akkor a port 4430. 675 00:32:55,180 --> 00:32:57,680 >> Közönség: és e-mailek 25, nem igaz? 676 00:32:57,680 --> 00:33:00,670 >> David J. MALAN: kiutazó e-mailek, 25, igen. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Én nem is tudom, a legtöbb a - mind az alsó is általában 678 00:33:03,760 --> 00:33:06,310 fenntartva dolgokat. 679 00:33:06,310 --> 00:33:09,260 Azt hiszem, minden alatt 1024 fenntartva. 680 00:33:09,260 --> 00:33:13,450 >> Közönség: Miért mondod 3 volt a rossz számot? 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Mivel egy IP-címet, van négy csoportok számjegy. 682 00:33:18,820 --> 00:33:21,090 És ők 0 és 255 között. 683 00:33:21,090 --> 00:33:28,060 Tehát egy közös 192.168.2.1 helyi hálózati IP-címet. 684 00:33:28,060 --> 00:33:30,840 Figyeljük meg az összes ilyen kevesebb, mint 255.. 685 00:33:30,840 --> 00:33:33,570 Tehát, amikor elkezdtem, 300, hogy a nem lehetett volna 686 00:33:33,570 --> 00:33:35,210 volt az egyik számot. 687 00:33:35,210 --> 00:33:38,170 >> David J. MALAN: De buta klip a - volt CSI, ahol volt egy 688 00:33:38,170 --> 00:33:39,970 szám, amely túl nagy volt az IP-cím. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: bármilyen kérdése van ez? 691 00:33:46,110 --> 00:33:51,710 A következő, tehát a teljes változás topic, de itt van ez a PHP tömb 692 00:33:51,710 --> 00:33:53,270 A házak a quad. 693 00:33:53,270 --> 00:33:56,360 És van egy rendezetlen listát. 694 00:33:56,360 --> 00:33:59,550 És szeretnénk kinyomtatni lista elemeit csak tartalmazza a ház nevét. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Tehát van egy foreach ciklus. 697 00:34:11,870 --> 00:34:17,540 Úgy emlékszem, a szintaxis foreach tömb elem a tömbben. 698 00:34:17,540 --> 00:34:22,360 Így az egyes iteráció a hurok ház lesz, hogy az egyik 699 00:34:22,360 --> 00:34:24,060 értékek a tömb belsejébe. 700 00:34:24,060 --> 00:34:26,530 >> Az első iteráció, house lesz Cabot House. 701 00:34:26,530 --> 00:34:30,370 Egy második iteráció, ház legyen Courier Ház és így tovább. 702 00:34:30,370 --> 00:34:34,370 Tehát minden quad, mint a ház, mi csak fog nyomtatni - 703 00:34:34,370 --> 00:34:37,250 akkor is lehetett volna visszhangozta - 704 00:34:37,250 --> 00:34:42,199 A lista elemet, majd a ház nevét majd zárja be a lista elemet. 705 00:34:42,199 --> 00:34:45,210 A kapcsos zárójelek opcionális itt. 706 00:34:45,210 --> 00:34:49,480 >> És akkor azt is elmondta, a kérdés magát, ne feledje, hogy zárja be a 707 00:34:49,480 --> 00:34:50,770 rendezetlen lista tag. 708 00:34:50,770 --> 00:34:53,949 Tehát szükségünk van a kilépéshez a PHP módba annak érdekében, hogy erre a célra. 709 00:34:53,949 --> 00:35:00,280 Vagy volna visszhangzott a zárja rendezetlen lista tag. 710 00:35:00,280 --> 00:35:02,380 >> David J. MALAN: Szintén jó itt lenne volna, hogy egy régi iskola 711 00:35:02,380 --> 00:35:07,340 loop egy $ i = 0 0. és a számít a kitaláljuk, a hossza a sugár. 712 00:35:07,340 --> 00:35:09,240 Teljesen finom is, csak Egy kicsit wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> Közönség: Tehát, ha akartál [Hallhatatlan] tennél - 715 00:35:14,742 --> 00:35:16,734 Nem emlékszem, mi a hurok [hallható] is. 716 00:35:16,734 --> 00:35:21,380 Szeretne $ quad konzol i? 717 00:35:21,380 --> 00:35:21,850 >> David J. MALAN: Pontosan. 718 00:35:21,850 --> 00:35:23,100 Igen, pontosan. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: Van még valami? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> David J. MALAN: Rendben. 723 00:35:32,010 --> 00:35:32,300 Kompromisszumokat. 724 00:35:32,300 --> 00:35:38,290 Tehát voltak fürtök válaszok lehetséges minden egyes ilyen. 725 00:35:38,290 --> 00:35:40,510 Mi tényleg csak keres valami ellenállhatatlan egy fejjel és 726 00:35:40,510 --> 00:35:41,100 a hátránya. 727 00:35:41,100 --> 00:35:44,830 És a 16-kérdezte érvényesítése felhasználók input kliens-oldali, mint a JavaScript, 728 00:35:44,830 --> 00:35:47,280 helyett a szerver oldali, mint a PHP. 729 00:35:47,280 --> 00:35:49,450 Tehát mi egy fejjel Ennek kliens-oldali? 730 00:35:49,450 --> 00:35:53,780 >> Nos, az egyik dolog, amit javasolt hogy csökkentse késleltetést, mert 731 00:35:53,780 --> 00:35:56,750 nem kell bajlódnia a kapcsolatot a szerver, amely eltarthat néhány 732 00:35:56,750 --> 00:36:00,390 ezredmásodperc, vagy akár egy pár másodpercig elkerülve azt, és csak a 733 00:36:00,390 --> 00:36:04,670 érvényesítése a felhasználók hozzájárulása kliensoldali by kiváltó egy on-be felvezető és 734 00:36:04,670 --> 00:36:06,650 Csak ellenőrzöm, ugye írja valamit a név? 735 00:36:06,650 --> 00:36:08,080 Vajon be valami az e-mail cím? 736 00:36:08,080 --> 00:36:10,950 Vajon válasszon egy kollégiumi a A legördülő menüből? 737 00:36:10,950 --> 00:36:14,360 >> Adhat nekik azonnali visszajelzést a gigahertz számítógép 738 00:36:14,360 --> 00:36:16,770 vagy bármi más van, ami valójában az asztalon. 739 00:36:16,770 --> 00:36:19,310 Szóval, ez csak a jobb felhasználói tapasztal általában. 740 00:36:19,310 --> 00:36:24,460 De egy hátránya ennek kliensoldali érvényesítése, ha ez nem is 741 00:36:24,460 --> 00:36:29,860 Ennek szerver oldali érvényesítésre, legtöbb valaki jön ki a CS50 tudja 742 00:36:29,860 --> 00:36:33,980 hogy ha csak küldeni kívánt adatokat a szerveren tetszőleges számú módon. 743 00:36:33,980 --> 00:36:37,030 Őszintén szólva, a legtöbb minden böngésző, akkor kattintson körül a beállításokat, és csak 744 00:36:37,030 --> 00:36:40,110 kapcsolja ki a JavaScript, amely, ezért ki minden formáját 745 00:36:40,110 --> 00:36:41,080 érvényesítés. 746 00:36:41,080 --> 00:36:44,460 >> De azt is lehet, hogy emlékeztetnek arra, hogy még én is volt néhány misztikus dolgok az osztályban a 747 00:36:44,460 --> 00:36:47,790 telnet és valóban úgy tesz, mintha egy böngészőt küldött get 748 00:36:47,790 --> 00:36:49,240 kéri, hogy a szerveren. 749 00:36:49,240 --> 00:36:51,030 És ez természetesen nem tetszőleges JavaScript. 750 00:36:51,030 --> 00:36:53,290 Ez csak nekem parancsokat gépelünk egy billentyűzet. 751 00:36:53,290 --> 00:36:57,410 Szóval tényleg, minden programozó belül elég kényelem az interneten, és HTTP 752 00:36:57,410 --> 00:37:01,690 lehet küldeni bármilyen adatot akar venni a szerveren ellenőrzés nélkül. 753 00:37:01,690 --> 00:37:05,470 És ha a szerver nem is ellenőrzi, nem adnak nekem egy név, 754 00:37:05,470 --> 00:37:08,930 ez valójában egy érvényes e-mail címet nem úgy döntenek, egy kollégiumi, lehet, hogy végül 755 00:37:08,930 --> 00:37:12,800 behelyezése hamis, vagy csak üres adat be az adatbázisba, ami valószínűleg 756 00:37:12,800 --> 00:37:15,450 nem lesz egy jó dolog, ha te feltételezve, hogy ott van. 757 00:37:15,450 --> 00:37:16,770 >> Tehát ez egy bosszantó valóság. 758 00:37:16,770 --> 00:37:19,890 De általában, a kliens-oldali érvényesítés nagyszerű. 759 00:37:19,890 --> 00:37:21,810 De ez azt jelenti, kétszer annyi munkát. 760 00:37:21,810 --> 00:37:25,970 Annak ellenére, hogy léteznek különböző könyvtárak, JavaScript könyvtárak 761 00:37:25,970 --> 00:37:28,830 Például, hogy ezt sok, sokkal kevesebb a fejfájás. 762 00:37:28,830 --> 00:37:31,940 És akkor újra néhány kód szerver-oldali, kliens-oldalon. 763 00:37:31,940 --> 00:37:35,980 De nem veszik észre, hogy általában további munkát. 764 00:37:35,980 --> 00:37:36,415 Igen. 765 00:37:36,415 --> 00:37:37,792 >> Közönség: Tehát, ha mi csak szerint kevésbé biztonságos - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. MALAN: [nevet] 767 00:37:39,205 --> 00:37:39,680 Huh. 768 00:37:39,680 --> 00:37:43,105 Ezek mindig a nehezebb is határozni. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN: Ez lenne elfogadták. 770 00:37:44,480 --> 00:37:44,810 >> David J. MALAN: Mi? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: hoztam létre ezt a problémát. 772 00:37:45,810 --> 00:37:46,735 Ez azt elfogadták. 773 00:37:46,735 --> 00:37:47,220 >> David J. MALAN: Igen. 774 00:37:47,220 --> 00:37:47,830 >> Közönség: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: De nem fogadta el Az első - 776 00:37:51,770 --> 00:37:53,630 Nos, mi kerestünk egy valami olyasmit, hogy nem kell 777 00:37:53,630 --> 00:37:55,270 kommunikálni a szerverrel. 778 00:37:55,270 --> 00:37:58,355 Nem fogadja el, csak gyorsabb. 779 00:37:58,355 --> 00:38:00,080 >> Közönség: Mi a helyzet nem újratölti az oldalt? 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Igen. 781 00:38:00,430 --> 00:38:03,000 Ez egy elfogadott válasz. 782 00:38:03,000 --> 00:38:06,300 >> David J. MALAN: bármi, ahol úgy éreztük, volt valószínűbb, mint nem valószínű 783 00:38:06,300 --> 00:38:09,780 hogy tudja, mit mondván, amely egy kemény 784 00:38:09,780 --> 00:38:13,500 sorban felhívni néha. 785 00:38:13,500 --> 00:38:16,000 Egy láncolt lista helyett egy tömb, hogy fenntartsák a 786 00:38:16,000 --> 00:38:17,590 rendezett lista az egész. 787 00:38:17,590 --> 00:38:21,000 Így egy fejjel gyakran idézik a kapcsolt listák motivált az egész 788 00:38:21,000 --> 00:38:22,370 bevezetése volt, kapsz dinamizmus. 789 00:38:22,370 --> 00:38:23,030 Ezek nőhet. 790 00:38:23,030 --> 00:38:23,950 Ők is csökken. 791 00:38:23,950 --> 00:38:27,370 Szóval nem kell ugrik át karika hogy valóban létre több memóriát 792 00:38:27,370 --> 00:38:28,140 egy tömb. 793 00:38:28,140 --> 00:38:30,310 Vagy nem kell, hogy csak azt mondják, bocs, a felhasználó. 794 00:38:30,310 --> 00:38:31,410 A tömb tele van. 795 00:38:31,410 --> 00:38:35,850 Tehát dinamikus növekedése a listán. 796 00:38:35,850 --> 00:38:37,210 A hátránya, bár a kapcsolt listák? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> Közönség: Ez lineáris. 799 00:38:43,356 --> 00:38:45,800 Keresés a láncolt lista lineáris ahelyett, hogy mit jelentkezzen be 800 00:38:45,800 --> 00:38:46,360 >> David J. MALAN: Pontosan. 801 00:38:46,360 --> 00:38:50,160 Keresés a láncolt lista lineáris, még akkor is, ha ez sorrendje, mert akkor 802 00:38:50,160 --> 00:38:53,170 csak az alábbi zsemlemorzsa, ezek mutatók, a kezdetektől a lista 803 00:38:53,170 --> 00:38:53,570 a végére. 804 00:38:53,570 --> 00:38:57,970 Nem lehet kihasználhatják véletlenszerű hozzáférés, és Így, bináris keresés, akkor is, ha ez 805 00:38:57,970 --> 00:39:00,740 sorrendje, amit lehetett köze egy tömb. 806 00:39:00,740 --> 00:39:02,390 És van még egy költség. 807 00:39:02,390 --> 00:39:02,966 Igen. 808 00:39:02,966 --> 00:39:03,800 >> Közönség: Memória hatékony? 809 00:39:03,800 --> 00:39:04,130 >> David J. MALAN: Igen. 810 00:39:04,130 --> 00:39:06,940 Nos, én nem feltétlenül mondjuk nem hatékony. 811 00:39:06,940 --> 00:39:10,110 De ez nem költsége is több memóriát, mert szükség van 32 bit minden 812 00:39:10,110 --> 00:39:13,400 node a további mutató, a legalábbis egy egyszeresen láncolt lista. 813 00:39:13,400 --> 00:39:16,660 Nos, ha csak a tárolás egész számok és te hozzá a mutatót, ami 814 00:39:16,660 --> 00:39:17,830 valójában milyen nem triviális. 815 00:39:17,830 --> 00:39:19,340 Ez megduplázza a memória. 816 00:39:19,340 --> 00:39:22,330 De a valóságban, ha tárolása láncolt lista a struktúrákat, amelyek rendelkeznek 817 00:39:22,330 --> 00:39:25,540 8 bájt, 16 byte, még mint, hogy talán kevésbé 818 00:39:25,540 --> 00:39:26,500 A marginális költség. 819 00:39:26,500 --> 00:39:28,320 De ez a költség mégis. 820 00:39:28,320 --> 00:39:31,880 Tehát bármelyik ezek volna volt, finom, mint a hátrányai. 821 00:39:31,880 --> 00:39:32,110 >> 18.. 822 00:39:32,110 --> 00:39:36,100 PHP helyett C írni parancssori programot. 823 00:39:36,100 --> 00:39:41,890 Tehát itt, ez gyakran gyorsabb használni a nyelv, mint a PHP vagy Ruby és Python. 824 00:39:41,890 --> 00:39:43,700 Csak gyors megnyitásához egy szövegszerkesztő. 825 00:39:43,700 --> 00:39:45,900 Van még sok más funkciót áll az Ön rendelkezésére. 826 00:39:45,900 --> 00:39:49,325 A PHP a konyhai mosogató funkciók, míg a C, akkor 827 00:39:49,325 --> 00:39:50,420 nagyon, nagyon kevés. 828 00:39:50,420 --> 00:39:53,820 Tény, hogy a srácok az tudja, a nehezebb utat hogy nincs hash táblákat. 829 00:39:53,820 --> 00:39:55,000 Nem is kapcsolódik listákat. 830 00:39:55,000 --> 00:39:57,470 Ha azt szeretné azokat, akkor a végre rájuk. 831 00:39:57,470 --> 00:40:00,950 >> Tehát az egyik fejjel PHP vagy tényleg olyan értelmezett nyelv a gyorsaság 832 00:40:00,950 --> 00:40:02,920 , amivel lehet írni a kódot. 833 00:40:02,920 --> 00:40:06,660 De egy hátránya, láttuk ezt, amikor hamar felkorbácsolta a misspeller 834 00:40:06,660 --> 00:40:11,780 végrehajtás előadás a PHP, az , hogy használ egy értelmezett nyelv 835 00:40:11,780 --> 00:40:13,570 általában lassabb. 836 00:40:13,570 --> 00:40:18,420 És láttuk, hogy bizonyíthatóan egy növekedése idő 0,3 másodperc és 3 837 00:40:18,420 --> 00:40:24,440 másodperc, mert az értelmezés hogy valóban megtörténik. 838 00:40:24,440 --> 00:40:27,060 >> A másik fejjel volt, hogy nem kell lefordítani. 839 00:40:27,060 --> 00:40:30,130 Tehát ez is gyorsítja a fejlődést egyébként, mert nem kell 840 00:40:30,130 --> 00:40:31,360 két lépést, hogy egy program futtatása. 841 00:40:31,360 --> 00:40:32,140 Csak egy. 842 00:40:32,140 --> 00:40:35,260 És ez elég lenyűgöző is. 843 00:40:35,260 --> 00:40:38,450 Egy SQL adatbázis helyett CSV fájl az adatok tárolására. 844 00:40:38,450 --> 00:40:40,230 Tehát SQL adatbázist használják pset7. 845 00:40:40,230 --> 00:40:42,060 CSV fájlokat, nem használt sokat. 846 00:40:42,060 --> 00:40:45,960 De használta közvetett módon pset7 mint jól beszél a Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> De CSV olyan, mint egy Excel-fájlt, de szuper egyszerű, ahol az oszlopok 848 00:40:49,330 --> 00:40:54,010 csak demarked vesszővel belül az egyébként szöveges fájl. 849 00:40:54,010 --> 00:40:56,740 És egy SQL adatbázis egy kicsit vonzóbb. 850 00:40:56,740 --> 00:41:00,060 Ez egy fordított, mert a dolgokat mint kiválasztani és beszúrni és törölni. 851 00:41:00,060 --> 00:41:03,790 És kapsz, feltehetően indexek MySQL és más adatbázisok, mint például 852 00:41:03,790 --> 00:41:07,510 Oracle, épít az Ön számára a memóriában, ami azt jelenti, hogy válassza valószínűleg nem 853 00:41:07,510 --> 00:41:09,000 lesz lineáris fentről lefelé. 854 00:41:09,000 --> 00:41:11,300 Ez tényleg lesz valami mint a bináris keresés, vagy valami 855 00:41:11,300 --> 00:41:12,520 hasonló szellemben. 856 00:41:12,520 --> 00:41:13,930 Így ők általában gyorsabb. 857 00:41:13,930 --> 00:41:16,040 >> De egy hátránya, hogy ez csak több munkát. 858 00:41:16,040 --> 00:41:16,730 Ez több erőfeszítést. 859 00:41:16,730 --> 00:41:18,140 Meg kell értenie adatbázisok. 860 00:41:18,140 --> 00:41:18,940 Meg kell beállítani. 861 00:41:18,940 --> 00:41:20,840 Szüksége van egy szerver fut hogy az adatbázis. 862 00:41:20,840 --> 00:41:22,750 Meg kell értened, hogyan kell beállítani azt. 863 00:41:22,750 --> 00:41:24,930 Tehát ezek csak ezek a féle kompromisszumokat. 864 00:41:24,930 --> 00:41:27,860 Mivel a CSV fájlt, akkor hozza létre a gedit. 865 00:41:27,860 --> 00:41:28,770 És te jó menni. 866 00:41:28,770 --> 00:41:31,550 Nincs komplexitás túl. 867 00:41:31,550 --> 00:41:34,870 >> Egy trie helyett hash tábla külön láncolási tárolni a 868 00:41:34,870 --> 00:41:37,490 szótár szavak emlékeztető A pset5. 869 00:41:37,490 --> 00:41:42,480 Tehát egy megpróbál fejjel, elméletben legalábbis az, ami? 870 00:41:42,480 --> 00:41:46,380 Állandó idő, legalábbis ha hashelés az egyes egyéni 871 00:41:46,380 --> 00:41:48,990 betűk egy szó, mint te Lehet, hogy a pset5. 872 00:41:48,990 --> 00:41:52,720 Ez lehet öt hash, hat hash kódok ha van öt vagy hat 873 00:41:52,720 --> 00:41:53,900 betűk a szó. 874 00:41:53,900 --> 00:41:54,580 És ez nagyon jó. 875 00:41:54,580 --> 00:41:56,910 És ha van egy felső határa, hogyan Hosszú a szavaidat lehet, hogy ez 876 00:41:56,910 --> 00:41:59,320 Valóban aszimptotikusan konstans id. 877 00:41:59,320 --> 00:42:05,180 >> Mivel hash tábla külön láncolás, a probléma az, hogy az ott 878 00:42:05,180 --> 00:42:09,070 fajta adatstruktúra az, hogy a teljesítményét algoritmusok általában 879 00:42:09,070 --> 00:42:12,700 számától függ a dolog már az adatszerkezet. 880 00:42:12,700 --> 00:42:15,660 És ez minden bizonnyal a helyzet láncok, ahol a több dolgot tesz 881 00:42:15,660 --> 00:42:18,800 egy hash tábla, a hosszabb azok láncok megy, ami azt jelenti, a legrosszabb 882 00:42:18,800 --> 00:42:21,960 esetben a dolog, lehet, hogy keres ez egészen a végén egy 883 00:42:21,960 --> 00:42:26,000 azoknak a láncok, amely hatékonyan hárul valami lineáris. 884 00:42:26,000 --> 00:42:29,450 >> Most a gyakorlatban lehetett teljesen a helyzet, hogy a hash tábla 885 00:42:29,450 --> 00:42:32,820 láncok gyorsabb, mint a megfelelő trie végrehajtását. 886 00:42:32,820 --> 00:42:35,570 De ez különböző okok miatt, többek között amelyek a próbálkozás egy csomó 887 00:42:35,570 --> 00:42:39,240 memória is, sőt, lassan a dolgok le, mert akkor nem kap szép 888 00:42:39,240 --> 00:42:42,410 előnyei úgynevezett caching, ahol a dolgokat, amelyek közel vannak egymáshoz 889 00:42:42,410 --> 00:42:45,420 memóriában lehet elérni gyakran gyorsabban. 890 00:42:45,420 --> 00:42:48,180 És néha akkor is elér Egy igazán jó hash függvényt. 891 00:42:48,180 --> 00:42:51,060 Akkor is, ha a hulladék egy kicsit memória, lehet, hogy valóban képes lesz 892 00:42:51,060 --> 00:42:54,430 a dolgok gyors, és nem olyan rossz, mint lineárisan. 893 00:42:54,430 --> 00:42:58,410 >> Tehát röviden, nem volt feltétlenül ezekkel egy vagy akár két 894 00:42:58,410 --> 00:43:00,050 konkrét dolgokat kerestünk. 895 00:43:00,050 --> 00:43:03,080 Tényleg valami meggyőző mint inflációt növelő és csökkentő 896 00:43:03,080 --> 00:43:04,800 általában elkapta a szemét. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: Tehát a fejjel, mi nem fogadja el a saját "gyorsabb". Ön 898 00:43:11,840 --> 00:43:14,540 kellett mondani valamit róla. 899 00:43:14,540 --> 00:43:17,910 Akkor is, ha azt mondta elméletileg gyorsabb, tudtuk, hogy ilyen ismert 900 00:43:17,910 --> 00:43:19,470 hogy ez 0 1. 901 00:43:19,470 --> 00:43:22,820 És hash tábla, elméletben, nem 0 1. 902 00:43:22,820 --> 00:43:26,550 Említése semmit runtime általában neked a pontokat. 903 00:43:26,550 --> 00:43:32,640 De a "gyorsabb", a legtöbb megoldások a nagy fórumon, hogy volt próbálkozás volt 904 00:43:32,640 --> 00:43:34,990 objektíven lassabb megoldások amelyek hash táblákat. 905 00:43:34,990 --> 00:43:37,250 Így gyorsabban és önmagában nem igazán igaz. 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 Valószínűleg én vagyok az egyetlen, aki rájön, ez az, hogy hogyan kéne 909 00:43:46,686 --> 00:43:47,500 kell kiejteni, nem igaz? 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: Én valóban nem tudom. 911 00:43:50,400 --> 00:43:51,650 >> David J. MALAN: Ez történt értelme a fejemben. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: csinálom ezt. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Tehát ez az, ahol meg kellett rajzolni A diagram hasonló lehet, hogy 916 00:44:04,243 --> 00:44:06,040 láttam a korábbi vizsgák. 917 00:44:06,040 --> 00:44:12,200 Tehát nézzük csak nézd meg ezt. 918 00:44:12,200 --> 00:44:18,170 Tehát a HTML csomópont, van két a gyermekek, a fej és a test. 919 00:44:18,170 --> 00:44:20,570 Tehát ág - fej és a test. 920 00:44:20,570 --> 00:44:22,280 A fej egy címet tag. 921 00:44:22,280 --> 00:44:23,710 Tehát van egy címet. 922 00:44:23,710 --> 00:44:28,450 >> Most, az egyetlen dolog, amit egy csomó ember elfelejtettem, hogy ezeket a szöveges csomópontok 923 00:44:28,450 --> 00:44:30,430 elemei ezt a fát. 924 00:44:30,430 --> 00:44:36,260 Tehát itt történni felhívni őket ovális hogy megkülönböztessék őket a következő 925 00:44:36,260 --> 00:44:37,380 csomópontok. 926 00:44:37,380 --> 00:44:41,450 De figyeljük meg itt is van felső, középső és alsó, majd a végén, hogy 927 00:44:41,450 --> 00:44:42,560 Szöveg csomópontok. 928 00:44:42,560 --> 00:44:46,250 Tehát megfeledkezve azokról kissé Egy gyakori hiba. 929 00:44:46,250 --> 00:44:48,770 >> A test három gyermek - a három divs. 930 00:44:48,770 --> 00:44:53,340 Tehát div, div, div, majd a szöveget csomópont gyermekei azok divs. 931 00:44:53,340 --> 00:44:55,900 Ez nagyjából azt az, hogy a kérdések. 932 00:44:55,900 --> 00:44:57,860 >> David J. MALAN És érdemes megjegyezni, még akkor is, ha nem laknak ezeken a 933 00:44:57,860 --> 00:45:01,040 részleteket az időt töltünk a JavaScript, hogy a sorrend nem, a 934 00:45:01,040 --> 00:45:02,290 Sőt, az anyag technikailag. 935 00:45:02,290 --> 00:45:06,330 Tehát, ha a fej megelőzi test a HTML, akkor meg kell jelennie a 936 00:45:06,330 --> 00:45:08,860 maradt a test az aktuális DOM. 937 00:45:08,860 --> 00:45:12,265 Ez az övé, általában, csak hogy tudd, úgynevezett dokumentum annak érdekében, ahol a 938 00:45:12,265 --> 00:45:13,260 nem mindegy. 939 00:45:13,260 --> 00:45:17,470 És ha te megvalósítása elemző, egy programot, amely beolvassa HTML épületben 940 00:45:17,470 --> 00:45:20,960 fel a fa a memóriában, hogy őszinte legyek, ez az, ösztönösen talán, amit 941 00:45:20,960 --> 00:45:24,720 ezt egyébként - fentről lefelé, balról jobbra. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Kérdések, hogy? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Ha én a következő? 945 00:45:30,000 --> 00:45:32,380 >> David J. MALAN: Persze. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Tehát ez a puffertúlcsordulást támadás kérdés. 948 00:45:39,320 --> 00:45:43,740 A legfontosabb dolog, hogy ismerje itt, Nos, hogy lehet, hogy egy támadó trükk 949 00:45:43,740 --> 00:45:46,170 a program futtatását tetszőleges kódot? 950 00:45:46,170 --> 00:45:51,860 Tehát argv1, az első parancssor érv, hogy ezt a programot, amely lehet 951 00:45:51,860 --> 00:45:53,920 tetszőlegesen hosszú. 952 00:45:53,920 --> 00:45:59,160 De itt mi használ memcpy másolni argv1, ami itt található. 953 00:45:59,160 --> 00:46:00,165 Mi halad, mint az érvelés. 954 00:46:00,165 --> 00:46:02,050 És ez így tart a nevet bárban. 955 00:46:02,050 --> 00:46:08,040 >> Szóval memcpying bar ebbe a puffer c. 956 00:46:08,040 --> 00:46:09,400 Hány bájt vagyunk másol? 957 00:46:09,400 --> 00:46:14,040 Hát de sok bájt sáv történik használja, a hossza az érvet. 958 00:46:14,040 --> 00:46:17,930 De c mindössze 12 bájt széles. 959 00:46:17,930 --> 00:46:22,280 Tehát, ha azt írja be a parancssori argumentum , ami hosszabb, mint 12 bájt, vagyunk 960 00:46:22,280 --> 00:46:25,470 fog túlcsordulás ezt különös puffer. 961 00:46:25,470 --> 00:46:31,000 Most, hogy lehet, hogy egy támadó becsapni a beprogramozni végrehajtása tetszőleges kód? 962 00:46:31,000 --> 00:46:34,910 >> Úgy emlékszem, hogy itt Fő hívja foo. 963 00:46:34,910 --> 00:46:37,340 És így aztán fő meghívja ize. 964 00:46:37,340 --> 00:46:40,408 Nézzük felhívni a. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Tehát a verem. 967 00:46:46,990 --> 00:46:49,090 És a legfontosabb egy verem keret az alján. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Egy bizonyos ponton, fő meghívja ize. 970 00:46:53,250 --> 00:46:55,390 Nos, azonnal, fő meghívja ize. 971 00:46:55,390 --> 00:46:57,130 És így foo kap saját verem keret. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Nos, egy bizonyos ponton, ize megy vissza. 974 00:47:02,220 --> 00:47:06,810 És elment foo visszatér, tudnunk kell, hogy a milyen kódsor belsejében fő is 975 00:47:06,810 --> 00:47:10,610 volt ahhoz, hogy tudja, hol kellene folytatódik fő. 976 00:47:10,610 --> 00:47:13,100 Nevezhetjük foo egy egész csomó különböző helyeken. 977 00:47:13,100 --> 00:47:14,620 Honnan tudjuk, hogy hol, hogy visszatérjen? 978 00:47:14,620 --> 00:47:16,460 Nos, meg kell tárolni valahol. 979 00:47:16,460 --> 00:47:23,010 >> Tehát valahol jobb itt, tárolunk ahol vissza kell egyszer 980 00:47:23,010 --> 00:47:24,070 foo visszatér. 981 00:47:24,070 --> 00:47:26,350 És ez a feladó címét. 982 00:47:26,350 --> 00:47:30,490 Szóval, hogy ellenfele lehet kihasználni erre az a tény, hogy a 983 00:47:30,490 --> 00:47:37,550 ez a puffer c tároljuk, nézzük azt mondják, itt van c. 984 00:47:37,550 --> 00:47:39,690 Tehát van 12 bájt c. 985 00:47:39,690 --> 00:47:40,540 Ez kb. 986 00:47:40,540 --> 00:47:43,030 És ez az izé a stack gyűrűt. 987 00:47:43,030 --> 00:47:49,970 Tehát, ha a rosszindulatú felhasználó belép több bájt, mint 12, vagy írjon be egy parancsot 988 00:47:49,970 --> 00:47:54,570 argumentum, ami hosszabb, mint 12 karaktert, majd megyünk 989 00:47:54,570 --> 00:47:57,540 túlcsordul a puffert. 990 00:47:57,540 --> 00:47:59,910 >> Tudjuk tartani fog. 991 00:47:59,910 --> 00:48:02,220 És egy bizonyos ponton, megyünk messzire elég, hogy kezdjük 992 00:48:02,220 --> 00:48:05,120 felülírja ezt a feladó címét. 993 00:48:05,120 --> 00:48:08,310 Tehát, ha azt írja felül a feladó címét, ez azt jelenti, hogy amikor az ize 994 00:48:08,310 --> 00:48:14,220 vissza, most visszatér, ahol a rosszindulatú felhasználó mondja azt, hogy az 995 00:48:14,220 --> 00:48:19,490 milyen értéket lépett, bármilyen karakter a felhasználó által megadott. 996 00:48:19,490 --> 00:48:24,320 És így, ha a rosszindulatú felhasználó, hogy különösen okos, tudja, hogy ez a 997 00:48:24,320 --> 00:48:29,255 vissza a valahol a printDef funkciót, vagy valahol a malloc 998 00:48:29,255 --> 00:48:31,830 funkció, akárhonnan önkényes. 999 00:48:31,830 --> 00:48:38,420 >> De még ennél is ügyes az, mi van, ha ő a felhasználó visszatér ide. 1000 00:48:38,420 --> 00:48:41,920 És akkor elkezd végrehajtása ezeket sornyi kódot. 1001 00:48:41,920 --> 00:48:46,610 Tehát ezen a ponton, a felhasználó megadhatja amit akar ebbe a régióba. 1002 00:48:46,610 --> 00:48:52,210 És teljes ellenőrzése át a programot. 1003 00:48:52,210 --> 00:48:53,460 Kérdések az, hogy? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Így a következő kérdés befejeződött a újraírását foo oly módon, 1006 00:49:00,970 --> 00:49:02,620 , hogy ez már nem sebezhető. 1007 00:49:02,620 --> 00:49:03,870 >> Szóval van egy pár módon Ön képes lett volna erre. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Még mindig csak c- hogy a hossz 12. 1010 00:49:13,330 --> 00:49:16,480 Ön megváltoztatná az részeként a megoldás. 1011 00:49:16,480 --> 00:49:18,930 Azt is hozzátette, egy csekket, hogy a biztos, bár nem null. 1012 00:49:18,930 --> 00:49:24,460 Bár akkor nem kell hogy teljes hitelt. 1013 00:49:24,460 --> 00:49:27,690 Szóval először ellenőrzi a karakterlánc hossza bar. 1014 00:49:27,690 --> 00:49:31,650 Ha ez nagyobb, mint 12, akkor valójában nem ezt a példányt. 1015 00:49:31,650 --> 00:49:33,010 Tehát ez az egyik módja a rögzítés is. 1016 00:49:33,010 --> 00:49:36,750 >> Egy másik módja a rögzítés ez helyett miután c csak a hossz 12, megvan 1017 00:49:36,750 --> 00:49:39,310 lehetnek hosszú strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Egy másik módja a rögzítés van hogy valójában csak vissza. 1019 00:49:43,370 --> 00:49:46,690 Tehát, ha épp most ütött megszabadulni az összes ezt, ha éppen törölte az összes 1020 00:49:46,690 --> 00:49:51,830 sornyi kódot, akkor ütött a teljes hitelt, mivel ezt a funkciót 1021 00:49:51,830 --> 00:49:54,150 valójában nem elérni semmit. 1022 00:49:54,150 --> 00:49:57,650 Ez másolása a parancssorba érvelést néhány tömb 1023 00:49:57,650 --> 00:49:59,960 helyi verem keret. 1024 00:49:59,960 --> 00:50:01,310 És akkor a dolog visszatér. 1025 00:50:01,310 --> 00:50:04,020 És bármi is megvalósult elment. 1026 00:50:04,020 --> 00:50:09,740 Így vissza is elegendő módja a teljes hitelt. 1027 00:50:09,740 --> 00:50:13,425 >> David J. MALAN: Nem egészen jegyében a kérdés, de elfogadható a per 1028 00:50:13,425 --> 00:50:15,580 spec mégis. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Kérdések sem, hogy? 1030 00:50:18,260 --> 00:50:22,270 Az egyetlen dolog, amit legalább szükséges, hogy összeállítása kódot. 1031 00:50:22,270 --> 00:50:24,810 Tehát annak ellenére, hogy technikailag meg nem veszélyeztetett, ha a kódot nem 1032 00:50:24,810 --> 00:50:29,130 össze, azt nem fogadja el, hogy. 1033 00:50:29,130 --> 00:50:31,350 Nem kérdés? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> David J. MALAN: Akarsz mondani ezt a címet? 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: Nem. 1037 00:50:37,230 --> 00:50:40,470 >> David J. MALAN: Tehát ez, ez volt, vagy jó hír, vagy rossz hír. 1038 00:50:40,470 --> 00:50:43,870 Ez szó szerint ugyanaz a probléma mint az első teszt. 1039 00:50:43,870 --> 00:50:46,140 És ez szinte azonos problémát pset1. 1040 00:50:46,140 --> 00:50:49,980 De szándékosan egyszerűsített, hogy egyszerűbb piramis, az egyik, hogy lehet 1041 00:50:49,980 --> 00:50:52,330 megoldható egy kissé egyszerűbb iteráció. 1042 00:50:52,330 --> 00:50:55,680 És tényleg, mi voltunk kilyukadni itt nem annyira a logika, 1043 00:50:55,680 --> 00:50:58,100 mert valószínűleg, ez a pont, akkor kényelmesebb, mint te 1044 00:50:58,100 --> 00:51:01,850 A héten az egyik a hurkok vagy miért hurkok, de tényleg ugratni egymástól, hogy 1045 00:51:01,850 --> 00:51:04,790 te egy kicsit kényelmes a elképzelést, hogy a PHP nem csak arról, hogy mi 1046 00:51:04,790 --> 00:51:05,290 programozás. 1047 00:51:05,290 --> 00:51:07,820 Azt is lehet használni, mint egy nyelv írni parancssori programokat. 1048 00:51:07,820 --> 00:51:10,060 >> És valóban, ez az, amit akartunk felhívni a figyelmet. 1049 00:51:10,060 --> 00:51:12,060 Ez egy parancssori PHP program. 1050 00:51:12,060 --> 00:51:16,690 Tehát C kód van, míg a helyes C-ben nem javítja a PHP. 1051 00:51:16,690 --> 00:51:17,940 De a kód valóban ugyanaz. 1052 00:51:17,940 --> 00:51:21,720 Ha összehasonlítjuk a megoldásokat Quiz 0 ellen kvíz 1., rájössz, hogy 1053 00:51:21,720 --> 00:51:25,630 ez csaknem azonos, kivéve Néhány dollár jeleket, és a 1054 00:51:25,630 --> 00:51:27,250 nincs adat típusát. 1055 00:51:27,250 --> 00:51:31,720 Különösen, ha veszünk egy pillantást ide, látni fogod, hogy mi léptetjük, ebben a 1056 00:51:31,720 --> 00:51:33,730 esetben az 1-től egészen 7. 1057 00:51:33,730 --> 00:51:34,910 >> Tudtuk volna, hogy 0. index. 1058 00:51:34,910 --> 00:51:37,320 De néha, azt hiszem, ez csak mentálisan könnyebb gondolni a dolgokat 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 Ha szeretne egy blokk, akkor két blokkok, aztán három, majd 1061 00:51:40,300 --> 00:51:41,770 pont, pont, pont hét. 1062 00:51:41,770 --> 00:51:45,960 Mi j inicializálása 1 majd számítok fel i. 1063 00:51:45,960 --> 00:51:48,150 És itt minden egyébként azonos. 1064 00:51:48,150 --> 00:51:49,790 De figyelemre méltó a egy-két dolgot. 1065 00:51:49,790 --> 00:51:53,230 Adunk a két vonal, az első Egy, goofily nevezték a kocsma 1066 00:51:53,230 --> 00:51:54,560 éles bumm. 1067 00:51:54,560 --> 00:51:58,770 És ez csak megadja az elérési utat, a mappát, amelyben a program lehet 1068 00:51:58,770 --> 00:52:02,160 úgy találta, hogy a használni kívánt értelmezni ezt a fájlt. 1069 00:52:02,160 --> 00:52:04,710 >> És akkor a vonal után, hogy a Persze, azt be PHP módba. 1070 00:52:04,710 --> 00:52:07,740 És a sort a legalján azt jelenti, exit PHP módot. 1071 00:52:07,740 --> 00:52:09,740 És ez működik, az általános, a értelmezett nyelvekhez. 1072 00:52:09,740 --> 00:52:14,370 Elég bosszantó, ha levelet program nevű fájlt foo.php. 1073 00:52:14,370 --> 00:52:17,320 És akkor a felhasználóknak, hogy csak emlékszem, OK, futtatni ezt a programot, azt 1074 00:52:17,320 --> 00:52:22,320 kell beírni: "php tér foo.php." Kedves A bosszantó, ha semmi mást. 1075 00:52:22,320 --> 00:52:25,270 És az is kiderül, hogy a programban PHP-ben íródott, ami nem minden 1076 00:52:25,270 --> 00:52:27,060 Világítási, hogy a felhasználó számára. 1077 00:52:27,060 --> 00:52:30,100 >> Szóval lehet eltávolítani a. Php összesen emlékszem az előadás. 1078 00:52:30,100 --> 00:52:35,690 És tudod valójában csinál. / Foo ha már chmodded meg azáltal, hogy 1079 00:52:35,690 --> 00:52:36,500 futtatható. 1080 00:52:36,500 --> 00:52:39,630 Tehát chmod a + x ize volna ezt. 1081 00:52:39,630 --> 00:52:41,460 És ha még hozzá a kocsma itt. 1082 00:52:41,460 --> 00:52:45,320 De tényleg, a probléma kilyukadni kinyomtatásával valami ilyesmi. 1083 00:52:45,320 --> 00:52:51,100 HTML, nem C-kód természetesen, csak néhány PHP. 1084 00:52:51,100 --> 00:52:54,100 Így Milo majd visszatért a probléma 25. 1085 00:52:54,100 --> 00:52:58,050 És 25, akkor kaptak a következő csontváz-kód, ami egy 1086 00:52:58,050 --> 00:52:59,730 nagyon egyszerű weboldal. 1087 00:52:59,730 --> 00:53:04,230 És a szaftos rész HTML-bölcs volt, meg itt, ahol van a test belsejébe 1088 00:53:04,230 --> 00:53:09,160 olyan formában, amely egyedi azonosítója bemenet amelynek belsejében két bemenet volt, az egyik 1089 00:53:09,160 --> 00:53:11,950 egy ötlet a név, egy egy ötlet gombot. 1090 00:53:11,950 --> 00:53:14,240 >> Az első típus a szöveget, a második típusú be. 1091 00:53:14,240 --> 00:53:16,930 És így adtam neked, valójában több összetevőket, mint szükséges, csak így 1092 00:53:16,930 --> 00:53:19,230 nektek volt lehetőség, amellyel megoldani ezt a problémát. 1093 00:53:19,230 --> 00:53:21,130 Nem feltétlenül kell, az összes ilyen azonosítók. 1094 00:53:21,130 --> 00:53:23,580 De ez lehetővé teszi, hogy megoldani azt különböző módokon. 1095 00:53:23,580 --> 00:53:27,050 És fel a csúcsra, észreveszi, hogy A cél az volt, hogy kiváltó 1096 00:53:27,050 --> 00:53:27,960 ablak, mint ez - 1097 00:53:27,960 --> 00:53:28,780 Helló, Milo! - 1098 00:53:28,780 --> 00:53:31,270 felbukkan a böngésző segítségével A szuper egyszerű, ha a 1099 00:53:31,270 --> 00:53:33,190 nem csúnya, riasztási funkciót. 1100 00:53:33,190 --> 00:53:37,480 És így, végül is ez a lényeg, fogalmilag valahogy hallgatta 1101 00:53:37,480 --> 00:53:41,290 beadványok az űrlap kliensoldali , És nem a szerver oldali, valahogy 1102 00:53:41,290 --> 00:53:45,640 válaszol, hogy a beadvány megragadta az érték, amit a felhasználó beírt 1103 00:53:45,640 --> 00:53:50,120 az, hogy a név mezőben, majd jeleníti meg a szervezetben a riasztás. 1104 00:53:50,120 --> 00:53:53,460 >> Tehát az egyik mód, akkor ezt a jQuery, ami úgy néz ki, egy kicsit 1105 00:53:53,460 --> 00:53:56,880 szintaktikailag zavarba ejtő az elején. 1106 00:53:56,880 --> 00:54:00,760 Ezt megteheti a tiszta DOM kód - document.getelement ID. 1107 00:54:00,760 --> 00:54:02,530 De vessünk egy pillantást a verzió. 1108 00:54:02,530 --> 00:54:05,110 Nekem van egy pár fontos vonalak először. 1109 00:54:05,110 --> 00:54:09,460 Tehát az egyik, hogy van ez a vonal, ami megegyezik azzal, amit látott 1110 00:54:09,460 --> 00:54:13,830 ben, azt hiszem, form2.html az osztály 9. hét. 1111 00:54:13,830 --> 00:54:16,960 És ez is csak azt mondom, végre az alábbi kódot, amikor 1112 00:54:16,960 --> 00:54:18,430 A dokumentum készen áll. 1113 00:54:18,430 --> 00:54:21,770 Mivel ez fontos, csak azért, mert HTML oldalak olvas felülről 1114 00:54:21,770 --> 00:54:23,280 lefelé, balról jobbra. 1115 00:54:23,280 --> 00:54:27,910 >> És ezért, ha megpróbál tenni valami kódot itt néhány DOM 1116 00:54:27,910 --> 00:54:31,560 elem, néhány HTML tag, ami le Itt csinálod túl hamar, 1117 00:54:31,560 --> 00:54:34,220 mert ez már nem is beolvasott a memóriába. 1118 00:54:34,220 --> 00:54:37,740 Tehát ezt mondta document.ready vonal, azt mondjuk, 1119 00:54:37,740 --> 00:54:39,040 itt van egy kis kódot, a böngésző. 1120 00:54:39,040 --> 00:54:42,440 De ne hajtsa végre ezt, amíg az egész dokumentum készen áll, azaz a DOM 1121 00:54:42,440 --> 00:54:44,320 fa létezik a memóriában. 1122 00:54:44,320 --> 00:54:47,110 Ez egy kicsit több, egyszerű, ha szintaktikailag a 1123 00:54:47,110 --> 00:54:51,890 kicsit más, amikor azt mondom, fogd A HTML elem, amelynek egyedi 1124 00:54:51,890 --> 00:54:53,560 azonosító bemenet. 1125 00:54:53,560 --> 00:54:56,220 Ez az, amit a hash tag jelöli, az egyedi azonosító. 1126 00:54:56,220 --> 00:54:58,070 És akkor hívlak. Be. 1127 00:54:58,070 --> 00:55:01,660 >> Tehát. Be itt van egy függvény, egyébként ismert módszer, ami 1128 00:55:01,660 --> 00:55:05,850 belsejében a tárgyat a bal oldali oldalon van, hogy nem kiemelni. 1129 00:55:05,850 --> 00:55:08,990 Tehát, ha úgy gondolja, a bemenetek, mint egy tárgy a memóriában -, és valóban az is. 1130 00:55:08,990 --> 00:55:10,440 Ez egy csomópont egy fa - 1131 00:55:10,440 --> 00:55:16,580 . Be eszközöket, amikor ez a forma az azonosító benyújtják, végre 1132 00:55:16,580 --> 00:55:17,700 a következő kódot. 1133 00:55:17,700 --> 00:55:20,290 Nem érdekel, hogy mi a neve a függvény Én végrehajtása. 1134 00:55:20,290 --> 00:55:23,760 Tehát itt vagyok használ, mint korábban, mi úgynevezett lambda funkcióból, vagy olyan 1135 00:55:23,760 --> 00:55:24,720 névtelen funkciót. 1136 00:55:24,720 --> 00:55:27,640 Ez egyáltalán nem intellektuálisan érdekes, azon kívül, hogy nincs neve, 1137 00:55:27,640 --> 00:55:30,220 ami rendben van, ha te csak valaha is hívni egyszer. 1138 00:55:30,220 --> 00:55:34,490 És belül ott valóban kezelni benyújtása az űrlapot. 1139 00:55:34,490 --> 00:55:36,810 Először, hogy egy változót nevű értéket. 1140 00:55:36,810 --> 00:55:40,610 És akkor mi a hatása ennek a kiemelt része, most itt? 1141 00:55:40,610 --> 00:55:44,755 Mit jelent, amelyek egy magas nekem? 1142 00:55:44,755 --> 00:55:48,539 >> Közönség: Ez lesz az érték, amit a a felhasználó nem a HTML alább. 1143 00:55:48,539 --> 00:55:50,920 Ez lesz, hogy az ID, majd megállapítja az értékét. 1144 00:55:50,920 --> 00:55:51,590 >> David J. MALAN: Pontosan. 1145 00:55:51,590 --> 00:55:54,300 Ez megragadja a csomópont, melynek egyedi azonosító nevet. 1146 00:55:54,300 --> 00:55:56,900 Ez az érték lesz benne, amely van, feltehetően, hogy a felhasználó mit 1147 00:55:56,900 --> 00:55:58,190 gépelt saját maga. 1148 00:55:58,190 --> 00:56:01,020 És akkor tárolja, hogy a nevű változó értékét. 1149 00:56:01,020 --> 00:56:03,720 Mellesleg, akkor is előfordulhat, hogy tette ezt egy kicsit másképp. 1150 00:56:03,720 --> 00:56:09,250 Teljesen elfogadható csinál valamit hazugság var értékét kapja 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 És ez az oka annak, hogy ez egy kicsit unalmas, hogy nem használja jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Name". Értéket. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Így teljesen elfogadható. 1157 00:56:19,620 --> 00:56:22,770 Különböző módon teheti meg. jQuery csak inkább egy kicsit tömör és 1158 00:56:22,770 --> 00:56:25,230 határozottan népszerűbb programozók körében. 1159 00:56:25,230 --> 00:56:27,590 >> Most csinálok egy kis józanság ellenőrizni, mert a probléma 1160 00:56:27,590 --> 00:56:30,820 adatok azt egyértelműen azt mondta, ha a a felhasználó még nem írt ő 1161 00:56:30,820 --> 00:56:32,580 név, nem mutatnak figyelmeztetéseket. 1162 00:56:32,580 --> 00:56:35,390 De lehet ellenőrizni, hogy az csak a ellenőrzi az üres karakterlánc a 1163 00:56:35,390 --> 00:56:37,850 idézet, idézet vége, ha van semmi valójában van. 1164 00:56:37,850 --> 00:56:40,880 De ha ez nem egyenlő az idézet, idézet vége, Szeretném felhívni figyelmeztetéseket. 1165 00:56:40,880 --> 00:56:45,610 És az érdekes része az, hogy mi a Plusz operátor, amely 1166 00:56:45,610 --> 00:56:48,130 mit JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Összefűzni. 1168 00:56:48,740 --> 00:56:50,690 Szóval, ez olyan, mint phps dot operátor. 1169 00:56:50,690 --> 00:56:52,820 Ugyanez a gondolat, kicsit más szintaxist. 1170 00:56:52,820 --> 00:56:55,280 És én csak létre a húr, amely láttad a képernyőn lövés - 1171 00:56:55,280 --> 00:56:57,750 Helló, így és így. 1172 00:56:57,750 --> 00:56:59,200 >> És akkor az utolsó részlet is ezt. 1173 00:56:59,200 --> 00:57:04,970 Miért return false belül Ennek névtelen funkciót? 1174 00:57:04,970 --> 00:57:07,420 >> Közönség: Nincs értéket. 1175 00:57:07,420 --> 00:57:09,380 Te tedd formában. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Csak azt mondja, ha az érték nem egyenlő üres, akkor csináld. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Volt egy üres előterjesztés. 1180 00:57:20,940 --> 00:57:21,170 >> David J. MALAN: OK. 1181 00:57:21,170 --> 00:57:21,640 Óvatosan mégis. 1182 00:57:21,640 --> 00:57:22,830 Nincs itt senki más. 1183 00:57:22,830 --> 00:57:25,510 És return false kívül A ha a körülmények. 1184 00:57:25,510 --> 00:57:29,470 Szóval ez a kiemelt sor, return false, végrehajtja nem számít, milyen, amikor 1185 00:57:29,470 --> 00:57:32,310 Az űrlap elküldése. 1186 00:57:32,310 --> 00:57:36,810 Mit jelent a visszatérő téves belsejében ennek eseménykezelő, ahogy hívják, 1187 00:57:36,810 --> 00:57:38,450 a szóban forgó esemény lenni benyújtás? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> Közönség: Mert csak egyszer. 1190 00:57:44,470 --> 00:57:45,320 >> David J. MALAN: csak egyszer. 1191 00:57:45,320 --> 00:57:46,821 Nem egészen. 1192 00:57:46,821 --> 00:57:47,292 Igen? 1193 00:57:47,292 --> 00:57:50,589 >> Közönség: Megakadályozza az űrlap benyújtása az alapértelmezett viselkedés, 1194 00:57:50,589 --> 00:57:52,480 ami, hogy az oldal újratöltése. 1195 00:57:52,480 --> 00:57:53,110 >> David J. MALAN: Pontosan. 1196 00:57:53,110 --> 00:57:56,490 Szóval túlterhelése a kifejezést be itt, mert én csak azt mondom, a forma 1197 00:57:56,490 --> 00:57:57,670 benyújtják. 1198 00:57:57,670 --> 00:58:02,240 De ahogy azt sugallják, hogy ez valójában nem nyújtottak be az igaz HTTP utat. 1199 00:58:02,240 --> 00:58:06,870 Amikor a Küldés gombra kattint, mert a mi onSubmit handler, mi elfogó 1200 00:58:06,870 --> 00:58:09,040 hogy űrlapküldés hogy úgy mondjam. 1201 00:58:09,040 --> 00:58:11,290 Mi akkor tesszük a dolgunkat JavaScript kódot. 1202 00:58:11,290 --> 00:58:14,070 De én szándékosan vissza hamis, mert amit nem akarok, hogy megtörténjen a 1203 00:58:14,070 --> 00:58:18,430 pillanattal később is az egész űrlap magát, be kell nyújtani a weben 1204 00:58:18,430 --> 00:58:22,800 szerver kulcs-érték párból változtatásával az URL-t, hogy valami hasonló 1205 00:58:22,800 --> 00:58:26,180 q = a macskák, vagy bármi mi, például, az osztályban. 1206 00:58:26,180 --> 00:58:29,640 Nem akarom, hogy ez megtörténjen, mert a nincs szerver hallgat erre a 1207 00:58:29,640 --> 00:58:30,690 formában benyújtott. 1208 00:58:30,690 --> 00:58:32,320 Ez tisztán történik JavaScript kódot. 1209 00:58:32,320 --> 00:58:35,760 És ezért én nem is egy akció attribútumot formám, mert 1210 00:58:35,760 --> 00:58:38,870 nem kívánják, hogy ez mindig megy a szerver. 1211 00:58:38,870 --> 00:58:40,780 >> Szóval ez benyújtják. 1212 00:58:40,780 --> 00:58:44,340 De elfognak a formában benyújtása és megakadályozza az alapértelmezett 1213 00:58:44,340 --> 00:58:47,477 viselkedés, amely a ténylegesen menj végig a szerver. 1214 00:58:47,477 --> 00:58:48,730 >> Közönség: Tehát tartása kliens oldali. 1215 00:58:48,730 --> 00:58:49,780 >> David J. MALAN: Keeping ez kliens oldali. 1216 00:58:49,780 --> 00:58:51,030 Pontosan így van. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Következik az én 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 Tehát ez az első kérdés az volt, általában durva az emberek. 1222 00:59:04,990 --> 00:59:07,270 Bár a későbbiekben is jobban ment. 1223 00:59:07,270 --> 00:59:12,260 Szóval kellett választani a helyes adatokat típusok mindkét oszlop. 1224 00:59:12,260 --> 00:59:17,750 És mindkét van némi dolgokat róluk, hogy 1225 00:59:17,750 --> 00:59:20,620 hogy a választás nehéz. 1226 00:59:20,620 --> 00:59:24,430 Tehát int nem érvényes írja be a számot. 1227 00:59:24,430 --> 00:59:29,410 Ennek az az oka, hogy egy 12 számjegyű számla szám, egy int nem elég nagy, hogy 1228 00:59:29,410 --> 00:59:31,070 tárolja a teljes szám. 1229 00:59:31,070 --> 00:59:36,570 Tehát egy érvényes választás lett volna a nagy int, ha történetesen tudja. 1230 00:59:36,570 --> 00:59:42,090 Egy másik választás lehetett volna a char területen hossz 12. 1231 00:59:42,090 --> 00:59:44,560 Tehát bármelyik ezek működött volna. 1232 00:59:44,560 --> 00:59:46,100 Int. nem. 1233 00:59:46,100 --> 00:59:50,170 >> Nos, az egyensúly, gondoljon vissza pset7. 1234 00:59:50,170 --> 00:59:59,540 Tehát kimondottan tízes tárolja a részvények értéke, vagy - 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 Szoktuk decimális tárolására összegének készpénz, hogy a felhasználó jelenleg. 1238 01:00:05,710 --> 01:00:10,950 Tehát az ok, hogy van Mert ne feledjük, úszók. 1239 01:00:10,950 --> 01:00:12,480 Van lebegőpontos precíziós. 1240 01:00:12,480 --> 01:00:18,200 Nem pontosan tárolja a készpénz értékek, mint szeretnénk itt. 1241 01:00:18,200 --> 01:00:23,630 Tehát decimális pontosan képes tárolni valamit, mondjuk, két tizedesjegy pontossággal. 1242 01:00:23,630 --> 01:00:27,630 Ezért egyensúlyt, azt akarjuk, hogy decimális, és nem lebegnek. 1243 01:00:27,630 --> 01:00:30,230 >> David J. MALAN: És azt is, is, bár lehetett volna okos más 1244 01:00:30,230 --> 01:00:32,760 összefüggésekben gondolkodni, lehet, hogy ez az esélye egy int. 1245 01:00:32,760 --> 01:00:34,420 Én csak nyomon követni dolgokat fillérekért. 1246 01:00:34,420 --> 01:00:38,670 Mivel kifejezetten megmutatta az alapértelmezett értékét, hogy 100.00, hogy 1247 01:00:38,670 --> 01:00:40,380 azt jelenti, hogy lehet, hogy csak egy int. 1248 01:00:40,380 --> 01:00:45,310 És egy másik finomság is számmal az volt, hogy ez nem azt jelentette, 1249 01:00:45,310 --> 01:00:46,180 hogy egy trükkös kérdés. 1250 01:00:46,180 --> 01:00:49,860 De emlékeztetni arra, hogy egy int a MySQL, , mint a C-ben, legalábbis a 1251 01:00:49,860 --> 01:00:51,440 készülék, 32-bit. 1252 01:00:51,440 --> 01:00:53,960 És bár mi nem várom el, hogy pontosan tudja, hány számjegy 1253 01:00:53,960 --> 01:00:56,910 azt jelenti, nem emlékszem, hogy a legnagyobb számban Ön képviseli potenciálisan 1254 01:00:56,910 --> 01:01:00,710 egy 32 bites szám nagyjából mi? 1255 01:01:00,710 --> 01:01:02,760 >> Mi több nem mindig azt mondják? 1256 01:01:02,760 --> 01:01:04,530 2 A 32, amely a mi durván? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Nem tudni pontosan. 1259 01:01:08,780 --> 01:01:10,580 De nagyjából hasznos az életben. 1260 01:01:10,580 --> 01:01:12,200 Ez nagyjából 4 milliárd. 1261 01:01:12,200 --> 01:01:14,430 Így már azt mondta, hogy egy párszor. 1262 01:01:14,430 --> 01:01:16,360 Tudom, hogy azt mondta, hogy egy párszor. 1263 01:01:16,360 --> 01:01:17,670 És ez nagyjából 4 milliárd. 1264 01:01:17,670 --> 01:01:19,710 És ez egy jó szabály A hüvelykujj tudni. 1265 01:01:19,710 --> 01:01:21,880 Ha 8 bites, 256 a mágikus szám. 1266 01:01:21,880 --> 01:01:24,160 Ha van 32 bit, 4 milliárd ide vagy oda. 1267 01:01:24,160 --> 01:01:27,140 Tehát, ha csak annyit írj le 4 milliárd, látni fogod, hogy ez kevesebb számjegyet tartalmaz, mint 1268 01:01:27,140 --> 01:01:30,970 12, ami azt jelenti, hogy ez nyilvánvalóan nem elég kifejező, hogy rögzítse egy 1269 01:01:30,970 --> 01:01:34,220 12 jegyű számlaszám. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 Tehát a másik is jobban ment. 1272 01:01:38,520 --> 01:01:40,900 Tehát tegyük fel, hogy a bank ró egy $ 20 havonta 1273 01:01:40,900 --> 01:01:42,400 díj minden tekintetben. 1274 01:01:42,400 --> 01:01:45,506 Milyen SQL lekérdezést tudott a bank levonni 20 $ minden számít, akkor is, ha 1275 01:01:45,506 --> 01:01:47,520 eredményez némi negatív egyenleg? 1276 01:01:47,520 --> 01:01:50,380 Tehát alapvetően négy főbb kérdések - 1277 01:01:50,380 --> 01:01:52,840 be, válassza ki, frissítés és törlés. 1278 01:01:52,840 --> 01:01:56,080 Szóval, mit gondolunk mi vagyunk fogja használni itt? 1279 01:01:56,080 --> 01:01:57,000 Frissítése. 1280 01:01:57,000 --> 01:01:58,260 >> Szóval vessünk egy pillantást. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Tehát itt vagyunk frissítjük. 1283 01:02:05,870 --> 01:02:09,900 Mit táblázat vagyunk frissítése számlákat? 1284 01:02:09,900 --> 01:02:11,670 Tehát frissítése számlák. 1285 01:02:11,670 --> 01:02:15,390 És akkor a szintaxis azt mondja, hogy mi A számlák vagyunk frissítése? 1286 01:02:15,390 --> 01:02:19,520 Nos, mi beállítást egyenlege megegyezik a aktuális értékét mérleg mínusz 20. 1287 01:02:19,520 --> 01:02:22,860 Szóval ez frissíteni fogja az összes sort számlák, kivonva 1288 01:02:22,860 --> 01:02:26,250 20 $ az egyensúlyt. 1289 01:02:26,250 --> 01:02:29,260 >> David J. MALAN: Az egyik leggyakoribb hiba itt, bár néha megbocsátotta, 1290 01:02:29,260 --> 01:02:32,990 az volt, hogy valóban van egy php kódot hívja a lekérdezés funkciót vagy üzembe 1291 01:02:32,990 --> 01:02:35,460 idézőjelbe mindent, ami nem kell ott lenni. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Ne feledje, hogy a MySQL egy külön nyelvet a PHP. 1293 01:02:39,780 --> 01:02:42,410 Azt történetesen írásban MySQL PHP. 1294 01:02:42,410 --> 01:02:46,180 És PHP majd kiküldi át a MySQL szerver. 1295 01:02:46,180 --> 01:02:51,120 De nem kell a PHP-ben annak érdekében, hogy kommunikál a MySQL szerver. 1296 01:02:51,120 --> 01:02:51,730 >> David J. MALAN: Pontosan. 1297 01:02:51,730 --> 01:02:54,240 Tehát nem változók dollár jeleket kell lennie ebben az összefüggésben. 1298 01:02:54,240 --> 01:02:59,550 Ez csak nem az összes matematikai az adatbázisban is. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Így a következő alkalommal. 1301 01:03:01,300 --> 01:03:02,731 Ez a következő? 1302 01:03:02,731 --> 01:03:03,210 Igen. 1303 01:03:03,210 --> 01:03:06,570 Tehát mi SQL query tudott a bank letölteni a számlaszámok a 1304 01:03:06,570 --> 01:03:09,300 leggazdagabb ügyfelek, akiknek egyenlegek nagyobb, mint 1000? 1305 01:03:09,300 --> 01:03:13,280 Tehát, hogy a négy fő típusa megyünk akar itt? 1306 01:03:13,280 --> 01:03:14,430 Válassza ki a. 1307 01:03:14,430 --> 01:03:16,650 Tehát szeretnénk kiválasztani. 1308 01:03:16,650 --> 01:03:17,610 Mit akar választani? 1309 01:03:17,610 --> 01:03:19,380 Mit oszlopot akarunk kiválasztani? 1310 01:03:19,380 --> 01:03:20,970 Fogunk kifejezetten akarja kiválasztásához szám. 1311 01:03:20,970 --> 01:03:23,910 De ha azt mondta csillag, mi azt is elfogadta, hogy. 1312 01:03:23,910 --> 01:03:25,820 >> Tehát válasszon számot, amit asztalra? 1313 01:03:25,820 --> 01:03:26,640 Fiókok. 1314 01:03:26,640 --> 01:03:28,370 És akkor a feltétel akarunk? 1315 01:03:28,370 --> 01:03:30,140 Ahol egyenlege nagyobb, mint 1000. 1316 01:03:30,140 --> 01:03:31,720 Azt is elfogadták a nagyobb kisebb vagy azzal egyenlő. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Az utolsó. 1319 01:03:36,190 --> 01:03:42,940 Milyen SQL lekérdezést tudott a bank szoros, azaz törölje minden fiók 1320 01:03:42,940 --> 01:03:44,480 az egyensúlyt a $ 0? 1321 01:03:44,480 --> 01:03:47,620 Tehát, hogy a négy vagyunk szeretne majd használni? 1322 01:03:47,620 --> 01:03:48,320 Törlése. 1323 01:03:48,320 --> 01:03:50,180 Így a szintaxis ez? 1324 01:03:50,180 --> 01:03:51,890 Törlés mi asztalra? 1325 01:03:51,890 --> 01:03:53,550 Fiókok. 1326 01:03:53,550 --> 01:03:55,790 És akkor az a feltétel, amely szeretnénk törölni - 1327 01:03:55,790 --> 01:03:57,280 ahol az egyensúlyt egyenlő nulla. 1328 01:03:57,280 --> 01:04:03,050 Így törli az összes sort számla ahol az egyenleg nulla. 1329 01:04:03,050 --> 01:04:04,300 Kérdések ezek közül bármelyik? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Szeretné sorba? 1332 01:04:10,260 --> 01:04:11,200 >> David J. MALAN: Sor útmutatót. 1333 01:04:11,200 --> 01:04:17,110 Tehát ez az egy, amit kaptál egy kissé ismerős szerkezet, feltártuk a 1334 01:04:17,110 --> 01:04:20,450 bit osztály mellett a struktúrákat, amely egy adat 1335 01:04:20,450 --> 01:04:21,910 struktúra kapcsolódó lélekben. 1336 01:04:21,910 --> 01:04:24,670 A különbség, bár a sorban hogy mi volt, hogy valahogy emlékszik, hogy ki 1337 01:04:24,670 --> 01:04:27,900 volt az első a sorban, nagy rész, hogy mi is, hogy több 1338 01:04:27,900 --> 01:04:30,530 hatékony felhasználása a memóriát, legalább ha mi is használ egy tömböt. 1339 01:04:30,530 --> 01:04:35,460 >> Mivel a visszahívás, ha van egy sor, ha Például, ez az elülső 1340 01:04:35,460 --> 01:04:38,470 a sor, ha kapok a sorban van, majd valaki kap a sorban 1341 01:04:38,470 --> 01:04:42,710 mögöttem, a hátam mögött, a hátam mögött, és a egy ember kilép a sorból, akkor 1342 01:04:42,710 --> 01:04:45,930 lehetne, mint láttuk néhány emberi önkéntesek az osztályban, mindenkit 1343 01:04:45,930 --> 01:04:47,100 elmozdulás ezen a módon. 1344 01:04:47,100 --> 01:04:50,880 De általában, miután mindenki do valami nem a legjobb idő 1345 01:04:50,880 --> 01:04:54,600 a programban, mert ez azt jelenti, hogy algoritmus fut, amit 1346 01:04:54,600 --> 01:04:56,520 aszimptotikus futási ideje? 1347 01:04:56,520 --> 01:04:57,420 Ez lineáris. 1348 01:04:57,420 --> 01:04:59,600 >> És úgy érzem, hogy hülyeség. 1349 01:04:59,600 --> 01:05:02,890 Ha a következő személyt a sorban a következő aki állítólag bemegy a 1350 01:05:02,890 --> 01:05:04,660 tárolni, nem mind együtt mozogni. 1351 01:05:04,660 --> 01:05:08,200 Csak hagyd, hogy a személyt leszakasztott ha eljön az ideje, például. 1352 01:05:08,200 --> 01:05:09,870 Így tudjuk menteni egy kis időt ott. 1353 01:05:09,870 --> 01:05:14,840 És így kell csinálni, hogy mégis, azt jelenti, hogy a feje a sor, illetve a 1354 01:05:14,840 --> 01:05:18,060 első a sorban fog fokozatosan egyre mélyebbre és mélyebbre 1355 01:05:18,060 --> 01:05:23,340 a tömb, és végül esetleg tulajdonképpen a kerületi ha mi használ 1356 01:05:23,340 --> 01:05:25,790 tömb tárolja az embereket ezen a sorban. 1357 01:05:25,790 --> 01:05:28,390 Így szinte gondolni a array, mint egy körkörös adat 1358 01:05:28,390 --> 01:05:29,880 struktúrát ebben az értelemben. 1359 01:05:29,880 --> 01:05:33,970 >> Szóval valahogy meg kell nyomon követni a mérete, vagy tényleg a vége 1360 01:05:33,970 --> 01:05:36,250 és akkor, ahol az elején van. 1361 01:05:36,250 --> 01:05:39,490 Ezért azt javasoljuk, hogy a deklarált egy ilyen sor, amelyben 1362 01:05:39,490 --> 01:05:41,330 q, csak egy levelet. 1363 01:05:41,330 --> 01:05:44,570 Ezután azt javasoljuk, hogy az első legyen nullára inicializálunk, és hogy a méret 1364 01:05:44,570 --> 01:05:45,470 inicializálni nullára. 1365 01:05:45,470 --> 01:05:47,770 >> Tehát most, nincs semmi belül, hogy a sorban. 1366 01:05:47,770 --> 01:05:50,910 És szeretnénk, ha a teljes végrehajtása Enqueue alábbi 1367 01:05:50,910 --> 01:05:55,250 oly módon, hogy a funkció még n végén q, majd igazat ad vissza. 1368 01:05:55,250 --> 01:05:58,690 De ha q tele vagy negatív, a függvény helyett return false. 1369 01:05:58,690 --> 01:06:01,060 És adott neked egy pár A feltételezések. 1370 01:06:01,060 --> 01:06:04,320 De ők nem igazán funkcionálisan lényeges, csak, hogy bool létezik, 1371 01:06:04,320 --> 01:06:06,690 mert technikailag bool nem léteznek C, ha tartalmazza a 1372 01:06:06,690 --> 01:06:07,310 bizonyos header fájlt. 1373 01:06:07,310 --> 01:06:09,350 Tehát csak győződjön meg róla, nem volt ez egy trükk 1374 01:06:09,350 --> 01:06:10,940 kérdése a fajta dolog. 1375 01:06:10,940 --> 01:06:16,280 >> Tehát Enqueue javasoltuk a mintában megoldások megvalósítása az alábbiak szerint. 1376 01:06:16,280 --> 01:06:20,420 Egy, először ellenőrzi a könnyű, Az alacsonyan lógó gyümölcsöket. 1377 01:06:20,420 --> 01:06:23,820 Ha a sor nem teljes, vagy a szám, akarsz beszúrni kevésbé 1378 01:06:23,820 --> 01:06:26,380 mint nulla, ami azt mondta, a meghatározása a problémát meg 1379 01:06:26,380 --> 01:06:30,320 nem szabad megengedni, mert csak szeretnénk nem negatív értéket, akkor kell 1380 01:06:30,320 --> 01:06:31,640 csak vissza hamis azonnal. 1381 01:06:31,640 --> 01:06:33,820 Szóval néhány viszonylag egyszerű hibaellenőrzéshez. 1382 01:06:33,820 --> 01:06:38,720 Ha mégis szeretne hozzáadni, hogy a tényleges szám, meg kellett csinálni egy kis 1383 01:06:38,720 --> 01:06:39,440 gondolok itt. 1384 01:06:39,440 --> 01:06:41,330 És ez az, ahol ez egy kicsit idegesítő szellemileg, mert meg kell 1385 01:06:41,330 --> 01:06:43,000 kitalálni, hogyan kell kezelni a körbefutó. 1386 01:06:43,000 --> 01:06:46,870 >> De a csíra, a gondolat, hogy itt ez a érdekes számunkra, hogy a körbefutó 1387 01:06:46,870 --> 01:06:51,480 gyakran azzal jár, moduláris aritmetika és A mod operátor, a százalék oldalon, 1388 01:06:51,480 --> 01:06:55,140 ahol lehet menni egy nagyobb értéket vissza nullára, majd egy és két és 1389 01:06:55,140 --> 01:06:58,650 három, majd visszafordult nullára, egy és kettő és három és így tovább 1390 01:06:58,650 --> 01:06:59,380 újra és újra. 1391 01:06:59,380 --> 01:07:02,880 Így, ahogyan azt javasoljuk, ezt a hogy mi szeretnénk index a 1392 01:07:02,880 --> 01:07:05,850 array hívott számok, ahol az egész hazugság. 1393 01:07:05,850 --> 01:07:10,740 De oda, először akarok függetlenül a méret a sorban van, de 1394 01:07:10,740 --> 01:07:14,080 majd hozzá, hogy bármilyen előtt a lista. 1395 01:07:14,080 --> 01:07:17,880 És a hatása, hogy az, hogy nekünk a megfelelő helyzetben a sorban, és 1396 01:07:17,880 --> 01:07:20,970 Nem feltételezhetjük, hogy az első ember a sorban van az elején, amelyet ő vagy 1397 01:07:20,970 --> 01:07:24,130 ő egyáltalán lehet, ha is változó mindenkinek. 1398 01:07:24,130 --> 01:07:26,710 De mi csak létre a munka magunknak, ha volt 1399 01:07:26,710 --> 01:07:27,800 az adott utat. 1400 01:07:27,800 --> 01:07:29,330 >> Így tudjuk tartani, hogy viszonylag egyszerű. 1401 01:07:29,330 --> 01:07:32,180 Mi kell emlékezni, hogy mi csak hozzá egy int a sorban. 1402 01:07:32,180 --> 01:07:35,850 És akkor most vissza igaz. 1403 01:07:35,850 --> 01:07:38,560 Eközben dequeue, megkérdeztük hogy tegye a következőket. 1404 01:07:38,560 --> 01:07:42,260 Végrehajtása, azt oly módon, hogy dequeues, hogy eltávolítja, és visszatér, 1405 01:07:42,260 --> 01:07:44,190 az int elejénél sorban. 1406 01:07:44,190 --> 01:07:46,410 Eltávolításához int, elegendő elfelejteni. 1407 01:07:46,410 --> 01:07:47,650 Nem kell, hogy felülírja a kicsit. 1408 01:07:47,650 --> 01:07:48,820 Tehát még mindig valóban ott van. 1409 01:07:48,820 --> 01:07:51,930 Csakúgy, mint az adatok a merevlemezen, mi csak figyelmen kívül hagyja azt a tényt, 1410 01:07:51,930 --> 01:07:52,970 hogy ez most van. 1411 01:07:52,970 --> 01:07:55,520 És ha q üres, mi kell helyett vissza a negatív 1. 1412 01:07:55,520 --> 01:07:56,750 Tehát ez úgy érzi, önkényes. 1413 01:07:56,750 --> 01:08:01,640 Miért vissza negatív 1 ahelyett, hogy hamis? 1414 01:08:01,640 --> 01:08:02,620 Igen. 1415 01:08:02,620 --> 01:08:05,070 >> Közönség: Q tárolja pozitív értékeket. 1416 01:08:05,070 --> 01:08:10,950 Mivel csak tárolni pozitív értékeket A q, negatív hiba. 1417 01:08:10,950 --> 01:08:11,510 >> David J. MALAN: OK, igaz. 1418 01:08:11,510 --> 01:08:14,850 Tehát azért, mert mi csak tárolja a pozitív értékek vagy nulla, akkor ez rendben van, hogy 1419 01:08:14,850 --> 01:08:18,050 vissza a negatív érték a sentinel érték, egy speciális szimbólum. 1420 01:08:18,050 --> 01:08:21,630 De te újraírása történelem ott, mert az ok, mi csak 1421 01:08:21,630 --> 01:08:25,890 vissza nem negatív értékeket azért van, mert azt akarjuk, hogy 1422 01:08:25,890 --> 01:08:27,670 egy őrszem értéket. 1423 01:08:27,670 --> 01:08:32,617 Így pontosabban, miért nem return false hiba esetén? 1424 01:08:32,617 --> 01:08:33,099 Igen. 1425 01:08:33,099 --> 01:08:35,510 >> Közönség: Már nem vissza az egész. 1426 01:08:35,510 --> 01:08:36,630 >> David J. MALAN: Pontosan. 1427 01:08:36,630 --> 01:08:38,569 És ez az, ahol C kap nagyon korlátozó. 1428 01:08:38,569 --> 01:08:40,590 Ha azt mondod, hogy mész vissza int, megvan 1429 01:08:40,590 --> 01:08:41,279 vissza az int. 1430 01:08:41,279 --> 01:08:43,689 Nem lehet kapni divatos és indítsa visszatérő a bool vagy úszó vagy a 1431 01:08:43,689 --> 01:08:45,040 szöveg, vagy valami ilyesmi. 1432 01:08:45,040 --> 01:08:49,370 Nos, eközben, JavaScript és a PHP és a Néhány más nyelvvel is, sőt, 1433 01:08:49,370 --> 01:08:51,310 voltál visszatérő más típusú értékeket. 1434 01:08:51,310 --> 01:08:54,819 És az is lehet hasznos, ahol a akkor visszatérhet a pozitív ints, nulla, 1435 01:08:54,819 --> 01:08:59,439 negatív ints, vagy hamis vagy null még jelent hibát. 1436 01:08:59,439 --> 01:09:01,890 De nem kell, hogy sokoldalúság C. 1437 01:09:01,890 --> 01:09:04,569 >> Tehát dequeue, amit javaslatot tennie, hogy - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Visszatérhet hamis. 1440 01:09:09,830 --> 01:09:13,189 Csak annyi, hogy hamis hash határozza meg hamis nullára. 1441 01:09:13,189 --> 01:09:16,000 Tehát, ha return false, akkor vissza nullára. 1442 01:09:16,000 --> 01:09:25,470 És nulla érvényes dolog a sorban, míg a negatív 1 nem, ha 1443 01:09:25,470 --> 01:09:27,000 hamis történetesen negatív 1.. 1444 01:09:27,000 --> 01:09:29,972 De ne is tudniuk kell, hogy az. 1445 01:09:29,972 --> 01:09:32,399 >> David J. MALAN: Ez miért nem mondtam el. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: De ez nem volt igaz hogy nem tud visszatérni hamis. 1447 01:09:36,450 --> 01:09:37,700 >> David J. MALAN: Persze. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Tehát dequeue, észre elfogadjuk semmisnek érvelését. 1450 01:09:44,240 --> 01:09:45,479 És ez azért van, mert nem vagyunk múló valami be 1451 01:09:45,479 --> 01:09:48,359 Csak azt akarjuk, hogy távolítsa el az elemet az első a sorban. 1452 01:09:48,359 --> 01:09:49,819 Tehát hogyan tudnánk járni ezt? 1453 01:09:49,819 --> 01:09:51,290 Nos, először is, nézzük ezt gyors józanság ellenőrzés. 1454 01:09:51,290 --> 01:09:53,350 Ha a sor mérete 0, van nincs tennivaló. 1455 01:09:53,350 --> 01:09:54,210 Vissza negatív 1.. 1456 01:09:54,210 --> 01:09:54,800 Kész. 1457 01:09:54,800 --> 01:09:56,340 Szóval ez a néhány sor a programom. 1458 01:09:56,340 --> 01:09:58,180 Tehát csak négy sor marad. 1459 01:09:58,180 --> 01:10:01,310 >> Tehát itt úgy döntök, hogy csökkentse a méret. 1460 01:10:01,310 --> 01:10:04,620 És a csökkentés méretét hatékonyan azt jelenti, hogy én vagyok elfelejtve 1461 01:10:04,620 --> 01:10:06,010 valami van ott. 1462 01:10:06,010 --> 01:10:09,910 De azt is meg kell frissíteni, ahol a az első a számok. 1463 01:10:09,910 --> 01:10:11,620 Tehát erre, szükségem két dolgot. 1464 01:10:11,620 --> 01:10:16,390 Először meg kell emlékezni, amit a számot van az első a sorban, 1465 01:10:16,390 --> 01:10:17,860 mert vissza kell azt a dolgot. 1466 01:10:17,860 --> 01:10:20,910 Szóval nem akarom, hogy véletlenül elfelejt róla, és aztán írja felül azt. 1467 01:10:20,910 --> 01:10:22,840 Én csak fog emlékezni egy int. 1468 01:10:22,840 --> 01:10:27,310 >> És most, azt akarom, hogy frissíteni q.front kell q.front +1. 1469 01:10:27,310 --> 01:10:30,070 Tehát, ha ez volt az első, aki vonal, most azt akarom, plusz 1 1470 01:10:30,070 --> 01:10:31,930 pont a következő személyt a sorban. 1471 01:10:31,930 --> 01:10:33,420 De azt kell kezelni, hogy a körbefutó. 1472 01:10:33,420 --> 01:10:37,270 És ha a kapacitás globális állandó, hogy fog, hogy engedje meg, hogy megbizonyosodjon arról, 1473 01:10:37,270 --> 01:10:41,140 én pont az utolsó ember vonal, a modulo művelet hozni 1474 01:10:41,140 --> 01:10:43,840 vissza nullára a első a sorban. 1475 01:10:43,840 --> 01:10:46,050 És, hogy kezeli a wraparound itt. 1476 01:10:46,050 --> 01:10:48,950 És akkor én jár vissza n. 1477 01:10:48,950 --> 01:10:51,530 >> Nos, szigorúan véve, én nem kell jelenteniük n. 1478 01:10:51,530 --> 01:10:53,880 Nem kell megragadni, és tárolja azt ideiglenesen, mert az érték 1479 01:10:53,880 --> 01:10:54,740 még mindig ott van. 1480 01:10:54,740 --> 01:10:57,490 Így is csak a helyes számtani vissza a korábbi vezetője 1481 01:10:57,490 --> 01:10:58,450 a sor. 1482 01:10:58,450 --> 01:11:01,850 De én csak úgy éreztem, hogy ez több volt, tiszta hogy valóban megragad a int, tedd 1483 01:11:01,850 --> 01:11:04,320 n, majd vissza, hogy az egyértelműség kedvéért, hanem 1484 01:11:04,320 --> 01:11:05,735 nem feltétlenül szükséges. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psszt. 1487 01:11:12,130 --> 01:11:13,410 Mind kiejthető a fejemben. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: Tehát az első kérdés a bináris fa problémát. 1490 01:11:19,110 --> 01:11:22,140 Tehát az első kérdés az, hogy mi mivel ezeket a számokat. 1491 01:11:22,140 --> 01:11:27,160 És azt akarjuk, hogy valahogy be őket ezek a csomópontok oly módon, hogy ez egy 1492 01:11:27,160 --> 01:11:30,110 érvényes bináris kereső fa. 1493 01:11:30,110 --> 01:11:36,260 Tehát az egy dolog, hogy emlékezzen a bináris kereső fák, hogy nem 1494 01:11:36,260 --> 01:11:39,800 csak, hogy a dolog, hogy a bal oldali kevésbé, és a dolog, hogy 1495 01:11:39,800 --> 01:11:41,120 A jobb oldali nagyobb. 1496 01:11:41,120 --> 01:11:44,580 Meg kell, hogy az egész fa a bal oldalon van kevesebb, és az egész fát 1497 01:11:44,580 --> 01:11:45,740 a jobb nagyobb. 1498 01:11:45,740 --> 01:11:55,260 >> Tehát, ha tettem 34 itt a tetején, majd a Tettem 20 van, így ez érvényes olyan 1499 01:11:55,260 --> 01:11:56,970 messze, mert a 34 itt. 1500 01:11:56,970 --> 01:11:57,920 20 megy a bal oldalon. 1501 01:11:57,920 --> 01:11:58,950 Szóval ez kevesebb. 1502 01:11:58,950 --> 01:12:03,640 De nem tudom, majd tegye 59 itt, mert 59 bár a jobb oldalon a 20, 1503 01:12:03,640 --> 01:12:06,140 ez még mindig a bal oldalon a 34. 1504 01:12:06,140 --> 01:12:10,760 Tehát az, hogy kényszer szem előtt tartva, a legegyszerűbb módja talán megoldásában 1505 01:12:10,760 --> 01:12:14,330 a probléma az, hogy csak egyfajta Az ezeket a számokat - 1506 01:12:14,330 --> 01:12:18,720 így 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Majd helyezze azokat balról jobbra. 1508 01:12:21,640 --> 01:12:23,390 >> Tehát 20 megy itt. 1509 01:12:23,390 --> 01:12:24,630 34. megy itt. 1510 01:12:24,630 --> 01:12:25,830 36. megy itt. 1511 01:12:25,830 --> 01:12:29,360 52., 59., 106.. 1512 01:12:29,360 --> 01:12:34,730 És azt is lehetett volna alakított ki néhány dugulás és megvalósítása, 1513 01:12:34,730 --> 01:12:38,830 Ó, várj, nincs elég számok hogy töltse ki ezt itt. 1514 01:12:38,830 --> 01:12:42,170 Szóval kell reshift mi a útvonal megjegyzés lesz. 1515 01:12:42,170 --> 01:12:47,490 De észre, hogy az utolsó három, ha olvassa el balról jobbra, akkor a 1516 01:12:47,490 --> 01:12:48,740 növekvő sorrendben. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Tehát most, szeretnénk, hogy állapítsa meg, mi a struct lesz a 1519 01:12:56,540 --> 01:12:58,300 csomópontok a fán. 1520 01:12:58,300 --> 01:13:02,720 Szóval, mi kell egy bináris fa? 1521 01:13:02,720 --> 01:13:05,830 Tehát van egy érték típusú int, így néhány int értéket. 1522 01:13:05,830 --> 01:13:07,220 Nem tudom, mi az úgynevezett ez a megoldás - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Szükségünk van egy mutatót a bal fia és egy hivatkozást a jobb fia. 1525 01:13:13,570 --> 01:13:17,540 Így fog kinézni. 1526 01:13:17,540 --> 01:13:20,510 És azt fogja nézni, mielőtt mikor a kétszeresen kapcsolt 1527 01:13:20,510 --> 01:13:25,090 lista cucc, így felhívás - 1528 01:13:25,090 --> 01:13:27,860 Megyek kell görgetni a út vissza a probléma 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Így észre, hogy ugyanúgy néz ki, hogy ezt, kivéve, mi egyszerűen csak hívja ezeket a 1531 01:13:36,390 --> 01:13:38,590 különböző nevek alatt. 1532 01:13:38,590 --> 01:13:41,440 Még mindig van egy egész érték és a két mutató. 1533 01:13:41,440 --> 01:13:44,850 Csak, hogy ahelyett, kezelése mutatók, mint rámutatva, hogy a következő dolog 1534 01:13:44,850 --> 01:13:47,955 és a korábbi dolog, mi kezeljük a mutatókat, hogy pont a bal fia 1535 01:13:47,955 --> 01:13:49,205 és a jobb gyerek. 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 Szóval ez a mi struct csomópontot. 1539 01:13:59,650 --> 01:14:03,920 És most, az egyetlen funkciója meg kell végrehajtani ezt Traverse, amely 1540 01:14:03,920 --> 01:14:08,320 azt akarjuk, hogy menjen át a fa, a nyomtatás ki az értékeket a fa a sorrendben. 1541 01:14:08,320 --> 01:14:15,241 >> Így keresnek itt, mi szeretne nyomtatni ki 20, 34, 36, 52, 59 és 106. 1542 01:14:15,241 --> 01:14:17,970 Hogyan elérni ezt? 1543 01:14:17,970 --> 01:14:18,890 Tehát ez elég hasonló. 1544 01:14:18,890 --> 01:14:22,910 Ha látta a múltban vizsga a probléma , amit akart, hogy nyomtassa ki 1545 01:14:22,910 --> 01:14:25,940 az egész fa vesszővel között Minden volt, valójában még 1546 01:14:25,940 --> 01:14:27,320 könnyebb, mint ezt. 1547 01:14:27,320 --> 01:14:30,950 Tehát itt a megoldás. 1548 01:14:30,950 --> 01:14:33,110 Ez jelentősen megkönnyíti ha nem is rekurzívan. 1549 01:14:33,110 --> 01:14:36,650 Nem tudom, ha valaki kísérletet csinálni iteratív. 1550 01:14:36,650 --> 01:14:38,340 >> De először is, mi az alapeset. 1551 01:14:38,340 --> 01:14:39,660 Mi van, ha a gyökér null? 1552 01:14:39,660 --> 01:14:40,610 Majd mi csak úgy vissza. 1553 01:14:40,610 --> 01:14:42,300 Nem akarunk nyomtatni semmit. 1554 01:14:42,300 --> 01:14:45,940 Else megyünk áthalad rekurzívan lefelé. 1555 01:14:45,940 --> 01:14:48,140 Nyomtassa ki az egész bal részfa. 1556 01:14:48,140 --> 01:14:51,440 Tehát bármit kinyomtathat kevesebb mint az aktuális érték. 1557 01:14:51,440 --> 01:14:53,930 És akkor fogom nyomtatni magamnak. 1558 01:14:53,930 --> 01:14:57,310 És akkor fogom recurse le a teljes jobb részfa, így minden 1559 01:14:57,310 --> 01:14:58,810 nagyobb, mint az érték. 1560 01:14:58,810 --> 01:15:03,870 És ez fog nyomtatni meg mindent annak érdekében. 1561 01:15:03,870 --> 01:15:05,860 Kérdések az, hogy ez a valóban véghez, hogy az? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Közönség: Van egy kérdésem A [hallható]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: Tehát az egyik módja a közeledő minden rekurzív probléma az, hogy csak azt gondolom, 1566 01:15:23,550 --> 01:15:26,275 róla, mint meg kell gondolni, az összes sarokba esetben. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Ezért úgy vélik, hogy szeretnénk nyomtassa ki ezt az egész fát. 1569 01:15:38,110 --> 01:15:42,030 Szóval fogunk összpontosítani ez a különleges csomópont - 1570 01:15:42,030 --> 01:15:43,740 36.. 1571 01:15:43,740 --> 01:15:47,420 A rekurzív hívások, úgy teszünk, mintha azokat csak a munka. 1572 01:15:47,420 --> 01:15:54,000 Tehát itt ez a rekurzív hívás Traverse, akkor gondolkodás nélkül 1573 01:15:54,000 --> 01:15:58,640 róla, csak vándorol a bal három, képzeljük el, hogy már kiírja 20 1574 01:15:58,640 --> 01:16:00,730 és 34. számunkra. 1575 01:16:00,730 --> 01:16:03,350 És amikor végül rekurzívan hívja áthalad a 1576 01:16:03,350 --> 01:16:07,890 van, hogy helyesen nyomtatni 52., 59., és 106. számunkra. 1577 01:16:07,890 --> 01:16:13,620 >> Tehát, mivel ez lehet nyomtatni 20, 34 és a másik lehet nyomtatni 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 Csak azt kell tudni tennie, hogy a nyomtatási magunkat a közepén, hogy a. 1579 01:16:17,180 --> 01:16:21,250 Tehát nyomtassa ki mindent elénk. 1580 01:16:21,250 --> 01:16:27,710 Print magunkat, így a jelenlegi csomópont nyomtatási 36., a rendszeres printf, majd 1581 01:16:27,710 --> 01:16:31,170 nyomtat mindent utánunk. 1582 01:16:31,170 --> 01:16:32,730 >> David J. MALAN: Ez az a pont, ahol a rekurzió lesz igazán szép. 1583 01:16:32,730 --> 01:16:36,270 Ez a csodálatos ugrás a hit, ahol a te a legapróbb kis munka. 1584 01:16:36,270 --> 01:16:38,460 És akkor legyen valaki mást a többit. 1585 01:16:38,460 --> 01:16:40,180 És az a valaki az, ironikusan, te. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Tehát komoly brownie pont, ha görgeti fel a kérdést - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: A kérdés? 1589 01:16:50,530 --> 01:16:53,490 >> David J. MALAN És le egy kicsit, hogy A számok, Tudja valaki, hol 1590 01:16:53,490 --> 01:16:55,190 ezek a számok érkeznek? 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: Én szó szerint fogalmam sincs. 1592 01:16:56,610 --> 01:16:59,794 >> David J. MALAN: Úgy tűnik, az egész teszt. 1593 01:16:59,794 --> 01:17:01,150 >> Közönség: Vajon ugyanazokat a számokat? 1594 01:17:01,150 --> 01:17:01,910 >> David J. MALAN: Azok a számok. 1595 01:17:01,910 --> 01:17:03,260 Egy kis húsvéti tojás. 1596 01:17:03,260 --> 01:17:08,100 Tehát azoknak, néz online otthon, ha meg tudod mondani nekünk e-mailben, hogy 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net mi a jelentősége Ezeknek a visszatérő hat a számok 1598 01:17:12,680 --> 01:17:18,560 egész Quiz 1, akkor zuhanyzó Önnek csodálatos figyelmet a végső 1599 01:17:18,560 --> 01:17:21,610 előadás és a stressz labdát. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Szép, finom. 1602 01:17:27,790 --> 01:17:29,570 >> ROB BOWDEN: Minden utolsó kérdése semmit a kvíz? 1603 01:17:29,570 --> 01:17:32,608