1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. Malan: Në rregull. 3 00:00:12,900 --> 00:00:16,790 Pra, të mirëpritur të parë ndonjëherë Postmortem CS50 për një quiz. 4 00:00:16,790 --> 00:00:18,340 Ne menduam se do të inaugurojmë kjo traditë këtë vit. 5 00:00:18,340 --> 00:00:20,960 Dhe kjo do të jetë një mundësi të ecin nëpër 6 00:00:20,960 --> 00:00:22,220 zgjidhje për quiz. 7 00:00:22,220 --> 00:00:26,160 Dhe ne do të shpejtuar ose ngadalësuar bazuar në interes të atyre këtu. 8 00:00:26,160 --> 00:00:29,730 >> Pra, ju jeni me siguri këtu për shkak se ju jeni të interesuar në atë se si ju mund të ketë ose 9 00:00:29,730 --> 00:00:31,170 duhet të janë përgjigjur disa nga këto probleme. 10 00:00:31,170 --> 00:00:33,300 Pra, pse nuk kemi marrë një sy në këtë pjesë të parë? 11 00:00:33,300 --> 00:00:34,450 Pra, duke marrë vlerat. 12 00:00:34,450 --> 00:00:37,600 Kjo ju dha tri versione të ndryshme i një programi që ishte, në fund të fundit, 13 00:00:37,600 --> 00:00:39,650 do të thotë për të marrë një varg nga një përdorues. 14 00:00:39,650 --> 00:00:42,530 Nëse janë apo jo ajo e bëri që ishte e lënë për ju për të përcaktuar. 15 00:00:42,530 --> 00:00:45,150 >> Dhe ne i kërkuam në pyetjen 0, mendoj se versioni 1 është 16 00:00:45,150 --> 00:00:46,400 hartuar dhe ekzekutuar. 17 00:00:46,400 --> 00:00:48,860 Pse mund segfault programi? 18 00:00:48,860 --> 00:00:51,150 Në pamje të parë, çdo sugjerim se pse? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Po. 21 00:00:54,489 --> 00:00:59,260 >> Audienca: Kështu që unë mend duke parë këtë në një shembull i mëparshëm i kërkuar në 22 00:00:59,260 --> 00:01:05,506 char * s dhe duke parë scan e s dhe duke parë sepse është një tregues, se si 23 00:01:05,506 --> 00:01:07,971 e bëri atë të ndikojë në atë që ju skanuar në? 24 00:01:07,971 --> 00:01:10,940 A është ajo s ose adresa e s? 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. Malan: OK. 26 00:01:11,180 --> 00:01:11,480 Mirë. 27 00:01:11,480 --> 00:01:14,830 Pra në fund të fundit, burimi i çdo problemi është me sa duket duke shkuar për të reduktuar 28 00:01:14,830 --> 00:01:16,210 në atë të ndryshueshme s. 29 00:01:16,210 --> 00:01:17,280 Dhe kjo është me të vërtetë një variabël. 30 00:01:17,280 --> 00:01:19,900 Lloji dhënat e asaj variabël është char *, që do të thotë se do të 31 00:01:19,900 --> 00:01:22,570 përmbajnë një adresë të një karakter. 32 00:01:22,570 --> 00:01:23,850 Dhe aty qëndron pasqyrë. 33 00:01:23,850 --> 00:01:28,330 Ajo do të përmbajë adresën e një karakter ose, më në përgjithësi, 34 00:01:28,330 --> 00:01:32,110 adresa e karakterit të parë në një bllok të tërë të karaktereve. 35 00:01:32,110 --> 00:01:36,680 >> Por kapur është se scan s, qëllimi në jeta, është dhënë një adresë dhe duke pasur parasysh 36 00:01:36,680 --> 00:01:40,960 një kod format, si% s, të lexuar një varg në copë të 37 00:01:40,960 --> 00:01:42,330 memorie në atë adresë. 38 00:01:42,330 --> 00:01:46,040 Por për shkak se nuk ka asnjë shenjë të barabartë para se pikëpresje më parë 39 00:01:46,040 --> 00:01:49,310 linjë e kodit, sepse ne nuk e bëjmë në të vërtetë ndajë çdo memorie me 40 00:01:49,310 --> 00:01:53,020 malloc, sepse ajo nuk ka të vërtetë akordojë një rrjet të disa madhësisë, të gjitha 41 00:01:53,020 --> 00:01:57,620 ju jeni duke bërë është lexuar e shfrytëzuesit input keyboard në disa plotë 42 00:01:57,620 --> 00:02:00,490 Vlera e mbeturinave, të cilat është në s by default. 43 00:02:00,490 --> 00:02:04,480 Pra, shanset janë që ju jeni do të segfault nëse se adresa nuk ndodh vetëm në mënyrë të 44 00:02:04,480 --> 00:02:08,009 të jetë një vlerë që ju mund, në fakt, shkruaj për të. 45 00:02:08,009 --> 00:02:10,889 Aq i keq të mos shpërndajë kujtesën tuaj atje. 46 00:02:10,889 --> 00:02:13,150 >> Pra, në pyetjen 1, kemi pyetur, mendoj se versioni 2 është 47 00:02:13,150 --> 00:02:14,230 hartuar dhe ekzekutuar. 48 00:02:14,230 --> 00:02:15,900 Pse mund segfault ky program? 49 00:02:15,900 --> 00:02:17,990 Pra, kjo është më pak buggy. 50 00:02:17,990 --> 00:02:21,470 Dhe nuk ka të vërtetë vetëm një Mënyra më e qartë ku ju mund të 51 00:02:21,470 --> 00:02:22,810 shkaktojë një segfault këtu. 52 00:02:22,810 --> 00:02:23,730 Dhe kjo është tematike. 53 00:02:23,730 --> 00:02:28,180 Çdo herë që ne jemi duke përdorur c në kujtesë, çfarë mund të bëni për të shkaktoj një segfault 54 00:02:28,180 --> 00:02:30,718 me versionin 2? 55 00:02:30,718 --> 00:02:35,560 >> Audienca: Në qoftë se ju përdorni këtë input në një varg që është më shumë se 49 56 00:02:35,560 --> 00:02:35,975 karaktere. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. Malan: Pikërisht. 58 00:02:37,260 --> 00:02:41,420 Çdo herë që të shihni diçka të caktuar gjatësinë kur është fjala për një grup, juaj 59 00:02:41,420 --> 00:02:44,650 radar duhet të shkoni jashtë se kjo mund të jetë problematike në qoftë se ju nuk jeni duke kontrolluar 60 00:02:44,650 --> 00:02:45,810 Kufijtë e një grup. 61 00:02:45,810 --> 00:02:46,650 Dhe ky është problemi këtu. 62 00:02:46,650 --> 00:02:47,910 Ne jemi ende duke përdorur scanf. 63 00:02:47,910 --> 00:02:52,200 Ne jemi ende duke përdorur% s, që do të thotë të përpiqemi për të lexuar një varg nga përdoruesit. 64 00:02:52,200 --> 00:02:56,300 Kjo do të të lexohet në s, e cila, në këtë pikë, është efektive 65 00:02:56,300 --> 00:02:58,570 adresa e një copë e kujtesës ose kjo është ekuivalente. 66 00:02:58,570 --> 00:03:02,080 Është emri i një grup e karaktereve të kujtesës. 67 00:03:02,080 --> 00:03:07,610 >> Por pikërisht këtë, në qoftë se ju lexoni një varg kjo është më shumë se 49 karaktere, 49 68 00:03:07,610 --> 00:03:10,440 sepse ju keni nevojë për hapësirë ​​për backslash 0, ju jeni do të del nga shtrati 69 00:03:10,440 --> 00:03:11,390 që tampon. 70 00:03:11,390 --> 00:03:16,410 Dhe ju mund të merrni me fat dhe të jenë në gjendje të shkruar një karakter 51-të, e 52, e 53. 71 00:03:16,410 --> 00:03:18,560 Por në një pikë, OS do të thotë, nuk ka. 72 00:03:18,560 --> 00:03:21,270 Kjo definitivisht nuk është e kujtesës ju jeni i lejuar për të prekur. 73 00:03:21,270 --> 00:03:23,380 Dhe programi do të segfault. 74 00:03:23,380 --> 00:03:26,650 >> Pra atje, heuristics duhet të jetë ndonjë herë ju keni marrë gjatësi të caktuar, ju keni 75 00:03:26,650 --> 00:03:30,150 për t'u siguruar që ju jeni duke kontrolluar kohëzgjatjen i çfarëdo qoftë ajo është që ju jeni duke u përpjekur 76 00:03:30,150 --> 00:03:31,090 për të lexuar në të. 77 00:03:31,090 --> 00:03:35,110 >> Audienca: Pra, për të zgjidhur atë, ju mund të kanë pasur një deklaratë të kontrolluar në të vërtetë 78 00:03:35,110 --> 00:03:37,140 është më e madhe Length se, ose më pak se? 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. Malan: Absolutisht. 80 00:03:37,730 --> 00:03:41,706 Ju vetëm duhet një kusht thotë që, nëse - 81 00:03:41,706 --> 00:03:46,080 ose më mirë ju nuk domosdoshmërisht e di paraprakisht se sa karaktere 82 00:03:46,080 --> 00:03:49,060 përdoruesit do të shkruani, sepse ju keni pule dhe vezë. 83 00:03:49,060 --> 00:03:51,860 Jo deri sa ju keni lexuar atë në me scanf mund të ju kuptoj se sa kohë ajo është. 84 00:03:51,860 --> 00:03:54,500 Por në atë pikë, është tepër vonë, sepse e keni lexuar tashmë atë në 85 00:03:54,500 --> 00:03:55,710 disa bllok i kujtesës. 86 00:03:55,710 --> 00:03:59,590 Pra, si një mënjanë, shmang biblioteka CS50 kjo çështje krejt, risjell 87 00:03:59,590 --> 00:04:01,060 duke përdorur fgetc. 88 00:04:01,060 --> 00:04:05,390 Dhe ai lexon një karakter në një kohë, tip-toeing së bashku, duke e ditur se ju 89 00:04:05,390 --> 00:04:08,060 nuk mund të del nga shtrati një karakter nëse ju lexoni një në një kohë. 90 00:04:08,060 --> 00:04:11,580 >> Kapur është me getString risjell është se ne duhet të vazhdimisht ri-madhësi 91 00:04:11,580 --> 00:04:13,590 se copë e kujtesës, e cila është vetëm një dhimbje. 92 00:04:13,590 --> 00:04:15,310 Kjo është një shumë e linjave të Kodi për të bërë këtë. 93 00:04:15,310 --> 00:04:18,779 Pra, një tjetër përqasje do të ishte të në fakt përdorin një kushëri, kështu 94 00:04:18,779 --> 00:04:19,790 për të folur, të scanf. 95 00:04:19,790 --> 00:04:22,820 Ka variante të një shumë të këtyre Funksionet që në të vërtetë kontrolloni 96 00:04:22,820 --> 00:04:25,870 Gjatësia e sa karaktere ju mund të lexoni maksimalisht. 97 00:04:25,870 --> 00:04:29,430 Dhe ju mund të specifikojë, mos lexoni më shumë se 50 karaktere. 98 00:04:29,430 --> 00:04:34,110 Kështu që do të jetë një tjetër qasje, por më pak qejf e inputeve të mëdha. 99 00:04:34,110 --> 00:04:37,040 >> Pra pyetje 2 pyet, mendoj se versioni 3 është hartuar dhe ekzekutuar. 100 00:04:37,040 --> 00:04:39,960 Pse mund segfault se programi? 101 00:04:39,960 --> 00:04:42,650 Pra, kjo është në të vërtetë e njëjta përgjigje, edhe pse 102 00:04:42,650 --> 00:04:43,590 duket pak njohës. 103 00:04:43,590 --> 00:04:46,440 Ne jemi duke përdorur malloc, e cila ndjehet si ne jemi duke i dhënë vetes më shumë opsione. 104 00:04:46,440 --> 00:04:48,030 Dhe pastaj ne jemi liruar që kujtese në fund. 105 00:04:48,030 --> 00:04:49,580 Është ende vetëm 50 bytes të memories. 106 00:04:49,580 --> 00:04:53,620 Pra, ne mund të ende të përpiqet për të lexuar në 51, 52, 1000 bytes. 107 00:04:53,620 --> 00:04:55,830 Ajo do të segfault për pikërisht të njëjtën arsye. 108 00:04:55,830 --> 00:04:57,530 >> Por ka edhe një arsye tjetër shumë. 109 00:04:57,530 --> 00:05:03,890 Çfarë tjetër mund të malloc kthimin përveç adresa e një copë të kujtesës? 110 00:05:03,890 --> 00:05:04,920 Kjo do të mund të kthehen null. 111 00:05:04,920 --> 00:05:07,560 Dhe për shkak se ne nuk jemi duke kontrolluar për se, ne mund të bëjmë diçka 112 00:05:07,560 --> 00:05:11,350 budalla për një arsye tjetër, e cila është se ne të thënë scanf, lexoni 113 00:05:11,350 --> 00:05:16,050 input të përdoruesit nga tastiera 0 në vend, AKA null. 114 00:05:16,050 --> 00:05:18,890 Dhe kjo, gjithashtu, do patjetër të shkaktojë një segfault. 115 00:05:18,890 --> 00:05:21,590 Kështu që për qëllim quiz-së, ne do të kanë pranuar as nga ata si një 116 00:05:21,590 --> 00:05:22,740 arsye të vlefshme. 117 00:05:22,740 --> 00:05:23,420 Njëra është identike. 118 00:05:23,420 --> 00:05:25,720 Njëra është pak më shumë nuanca. 119 00:05:25,720 --> 00:05:28,975 >> Së fundi, në lidhje me programin e Përdorimi i kujtesës, se si bëjnë version 2 dhe 120 00:05:28,975 --> 00:05:30,350 version 3 ndryshojnë? 121 00:05:30,350 --> 00:05:35,070 Pra, për atë që është me vlerë, ne pamë një Furnizimi me dukje të pafund të jetë e mundur 122 00:05:35,070 --> 00:05:35,770 përgjigje për këtë. 123 00:05:35,770 --> 00:05:39,300 Dhe në mesin e përgjigjeve të njerëzve, ajo që ne ishim duke shpresuar për të, por pranoi të tjera 124 00:05:39,300 --> 00:05:42,250 gjëra, ishte një përmendja e fakti se ky version 2 është duke përdorur 125 00:05:42,250 --> 00:05:44,560 e ashtuquajtura rafte. 126 00:05:44,560 --> 00:05:46,710 Version 3 është duke përdorur grumbull. 127 00:05:46,710 --> 00:05:50,060 Dhe funksionalisht, kjo nuk ka të vërtetë të bëjë të gjitha që shumë për një ndryshim. 128 00:05:50,060 --> 00:05:54,040 Në fund të ditës, ne jemi ende vetëm duke marrë 50 byte memorje. 129 00:05:54,040 --> 00:05:56,640 >> Por kjo ishte një nga përgjigjet e mundshme se ne kemi qenë duke kërkuar në. 130 00:05:56,640 --> 00:05:59,730 Por ju do të shihni, si ju merrni kuize tuaj prapa nga TFS, që ne e bëmë 131 00:05:59,730 --> 00:06:04,330 pranojnë diskutime të tjera të tyre Përdorime të ndryshëm të kujtesës si. 132 00:06:04,330 --> 00:06:08,600 Por rafte dhe tog do të kishte qenë një përgjigje e lehtë për të shkuar me të. 133 00:06:08,600 --> 00:06:11,150 Ndonjë pyetje? 134 00:06:11,150 --> 00:06:12,400 Unë ju jap Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> Rob Bowden: Pra problemi 4. 137 00:06:20,210 --> 00:06:21,985 Kjo është ajo ku ju duhet të plotësoni në numrin e bytes nga të gjitha 138 00:06:21,985 --> 00:06:23,460 këto lloje të ndryshme të përdorura. 139 00:06:23,460 --> 00:06:24,830 Pra gjëja e parë që ne shohim. 140 00:06:24,830 --> 00:06:27,930 Supozojmë një arkitekturë të 32-bit, si ky aplikim CS50. 141 00:06:27,930 --> 00:06:33,530 Pra, një nga gjërat themelore për 32-bit arkitektura, që na tregon 142 00:06:33,530 --> 00:06:37,490 saktësisht se sa i madh një akrep po shkon të jetë në arkitekturën. 143 00:06:37,490 --> 00:06:43,020 >> Pra menjëherë, ne e dimë se çdo akrep lloj është 32-bit ose 4 bytes. 144 00:06:43,020 --> 00:06:46,010 Pra, duke kërkuar në këtë tryezë, një nyje * është një lloj i akrep. 145 00:06:46,010 --> 00:06:47,250 Kjo do të jetë 4 bytes. 146 00:06:47,250 --> 00:06:51,640 Nyje struct *, kjo është fjalë për fjalë identike me yll node. 147 00:06:51,640 --> 00:06:53,590 Dhe kështu që do të jetë 4 bytes. 148 00:06:53,590 --> 00:06:58,270 String, kështu që nuk duket si një treguesin, por typedef, një 149 00:06:58,270 --> 00:07:01,590 varg është vetëm një * char, e cila është një lloj i akrep. 150 00:07:01,590 --> 00:07:03,550 Kështu që do të jetë 4 bytes. 151 00:07:03,550 --> 00:07:06,150 >> Pra, këta të tre janë të gjitha 4 bytes. 152 00:07:06,150 --> 00:07:09,350 Tani, nyje dhe nxënës janë pak më e komplikuar. 153 00:07:09,350 --> 00:07:15,160 Pra, duke kërkuar në nyje dhe student, ne shohim nyjë si një numër të plotë dhe një tregues. 154 00:07:15,160 --> 00:07:18,050 Dhe studenti është dy pointers në brendësi të saj. 155 00:07:18,050 --> 00:07:23,340 Pra, të paktën për rastin tonë këtu, mënyra se ne fund deri të llogaritet madhësia e 156 00:07:23,340 --> 00:07:27,020 kjo struct është vetëm të shtoni deri çdo gjë kjo është brenda struct. 157 00:07:27,020 --> 00:07:30,690 >> Pra për nyje, ne kemi një numër të plotë, cili është 4 bytes. 158 00:07:30,690 --> 00:07:32,830 Ne kanë një tregues i cili është 4 bytes. 159 00:07:32,830 --> 00:07:35,820 Dhe kështu një nyjë është duke shkuar për të marrë 8 bytes. 160 00:07:35,820 --> 00:07:39,490 Dhe në mënyrë të ngjashme për student, ne kemi një akrep kjo është 4 bytes dhe një tjetër 161 00:07:39,490 --> 00:07:40,770 akrep kjo është 4 bytes. 162 00:07:40,770 --> 00:07:43,180 Kështu që do të përfundojë duke qenë 8 bytes. 163 00:07:43,180 --> 00:07:45,480 Pra, nyje dhe të studentëve janë 8 bytes. 164 00:07:45,480 --> 00:07:48,950 Dhe këta të tre janë të gjitha 4 bytes. 165 00:07:48,950 --> 00:07:50,240 Pyetjet për se? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Po. 168 00:07:54,990 --> 00:07:58,413 >> Audienca: A është e ishte një 64-bit arkitekturës, që do të 169 00:07:58,413 --> 00:07:59,880 dyfishtë të gjithë ata? 170 00:07:59,880 --> 00:08:01,790 >> Rob Bowden: Nuk do dyfishtë të gjithë ata. 171 00:08:01,790 --> 00:08:05,830 Pra arkitekturës 64-bit, ai, përsëri, Ndryshimet që gjëja themelore që një 172 00:08:05,830 --> 00:08:08,910 akrep është tani 64 bit. 173 00:08:08,910 --> 00:08:09,290 Po. 174 00:08:09,290 --> 00:08:10,930 Pra, një tregues është 8 bytes. 175 00:08:10,930 --> 00:08:15,420 Pra, këto që ishin 4 byte do të jetë 8 bytes. 176 00:08:15,420 --> 00:08:18,617 Një student, i cili ishte dy pointers, mirë, tani ajo do të 177 00:08:18,617 --> 00:08:19,800 të jetë 8 bytes, 8 bytes. 178 00:08:19,800 --> 00:08:21,980 Ajo do të bëjë 16 bytes. 179 00:08:21,980 --> 00:08:25,710 >> Por një nyje është ende 4 bytes. 180 00:08:25,710 --> 00:08:27,800 Pra, ky tregues është duke shkuar të jetë 8 bytes. 181 00:08:27,800 --> 00:08:28,930 Kjo është 4 bytes. 182 00:08:28,930 --> 00:08:30,870 Pra, një nyje është vetëm do të jetë 12 bytes. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Çdo pyetje të tjera në se një? 185 00:08:39,280 --> 00:08:44,500 Kështu që një tjetër, këto janë kodet e statusit HTTP. 186 00:08:44,500 --> 00:08:48,000 Dhe keni pasur për të përshkruar rrethanat sipas të cilave këto mund të 187 00:08:48,000 --> 00:08:49,810 të kthehet tek ju. 188 00:08:49,810 --> 00:08:56,730 një problem që kam dëgjuar disa studentë kanë është se ata u përpoqën për të bërë 189 00:08:56,730 --> 00:08:58,950 Gabime të jetë në fund të klientit. 190 00:08:58,950 --> 00:09:02,320 Pra, kur ne përpiqemi për të bërë kërkesën në server, diçka shkon 191 00:09:02,320 --> 00:09:03,820 gabuar në fund tonë. 192 00:09:03,820 --> 00:09:07,660 Por në përgjithësi, këto kode janë të duke u kthyer nga serveri. 193 00:09:07,660 --> 00:09:11,720 Pra, ne duam të kuptoj se çfarë po ndodh gabuar ose të drejtë në server që 194 00:09:11,720 --> 00:09:14,280 shkakton këto gjëra që të kthehen. 195 00:09:14,280 --> 00:09:18,670 Pra, pse mund a kthimit server Kodi status 200? 196 00:09:18,670 --> 00:09:19,920 Çdo mendime? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Po. 199 00:09:23,730 --> 00:09:27,850 Pra, diçka në lidhje me sukses kërkesa shkuan përmes. 200 00:09:27,850 --> 00:09:30,260 Dhe ata janë në gjendje të kthehen çdo gjë që keni kërkuar. 201 00:09:30,260 --> 00:09:32,240 Kështu që çdo gjë ishte në rregull. 202 00:09:32,240 --> 00:09:35,662 Çfarë rreth 302 gjetur? 203 00:09:35,662 --> 00:09:36,618 Po. 204 00:09:36,618 --> 00:09:39,008 >> Audienca: server është në kërkim për atë që ju kërkohet. 205 00:09:39,008 --> 00:09:40,442 Por kjo nuk mund të gjeni atë. 206 00:09:40,442 --> 00:09:42,850 Pra, ka një gabim. 207 00:09:42,850 --> 00:09:47,720 >> Rob Bowden: Pra server ishte duke kërkuar për atë që ju kërkohet. 208 00:09:47,720 --> 00:09:51,682 Pra, vetëm në kërkim këtu, 302 gjetur, ajo ishte në gjendje për të gjetur atë. 209 00:09:51,682 --> 00:09:53,035 >> Audienca: Më vjen keq. 210 00:09:53,035 --> 00:09:54,388 Gjetur do të thotë se ata kanë gjetur atë. 211 00:09:54,388 --> 00:09:55,638 Më vjen keq. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> Rob Bowden: Pra 302 gjetur. 214 00:10:00,160 --> 00:10:02,350 Server është në gjendje për të gjetur atë që ju kërkohet. 215 00:10:02,350 --> 00:10:04,640 >> Audienca: Por kjo nuk është shfaqur atë? 216 00:10:04,640 --> 00:10:08,180 >> Rob Bowden: Dallimi në mes ky 302 dhe 200 është se ajo 217 00:10:08,180 --> 00:10:09,280 e di atë që ju dëshironi. 218 00:10:09,280 --> 00:10:12,000 Por nuk është saktësisht ku ju kërkuar për të pyetur. 219 00:10:12,000 --> 00:10:14,580 Pra, 302 është një përcjellim tipike. 220 00:10:14,580 --> 00:10:16,510 Kështu që ju kërkuar një faqe. 221 00:10:16,510 --> 00:10:19,590 Ai e di, oh, unë dua për të ju kthyer këtë. 222 00:10:19,590 --> 00:10:21,070 Por kjo është në një URL ndryshme. 223 00:10:21,070 --> 00:10:23,534 Pra, hej, ju në të vërtetë duan këtë. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. Malan: Kjo është një pjesë që ka thënë që kemi dhënë ju djema një përcjellim 225 00:10:26,950 --> 00:10:30,830 Funksioni që përdoret header funksionit që, nga ana tjetër, të shtypura nga lokacioni, 226 00:10:30,830 --> 00:10:34,110 zorrës së trashë, dhe pastaj URL në të cilën ju doni të refuzojë përdorues. 227 00:10:34,110 --> 00:10:37,480 Edhe pse ju nuk e shihni 302 në mënyrë eksplicite ka, kjo është ajo PHP 228 00:10:37,480 --> 00:10:41,550 magjike do të futur si kokë duke thënë se pikërisht ajo Rob tha se ka - 229 00:10:41,550 --> 00:10:41,930 gjetur. 230 00:10:41,930 --> 00:10:43,180 Por shkoni këtu në vend. 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 Pra, ajo që për 403 e ndaluar? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Audienca: Unë mendoj se është se server është në thelb duke thënë se klienti 236 00:10:57,120 --> 00:10:59,970 nuk mund të hyni në faqen kryesore. 237 00:10:59,970 --> 00:11:03,260 >> Rob Bowden: Pra, po. 238 00:11:03,260 --> 00:11:07,670 Well, përgjigja tipike ne ishim presim është diçka si, dosjet 239 00:11:07,670 --> 00:11:08,920 nuk janë chmodded në mënyrë të përshtatshme. 240 00:11:08,920 --> 00:11:11,590 Kjo është ndoshta në çfarë rrethanash ju pa ato. 241 00:11:11,590 --> 00:11:18,920 Por ka një arsye që klienti mund të jetë në faj këtu. 242 00:11:18,920 --> 00:11:20,440 Ka në fakt një tjetër kod statusi - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Pra, këto janë shumë të ngjashme. 245 00:11:22,820 --> 00:11:24,590 >> 401 është e paautorizuar. 246 00:11:24,590 --> 00:11:26,130 Dhe 403 është e ndaluar. 247 00:11:26,130 --> 00:11:31,890 Dhe kështu paautorizuar ju ekskluzivisht të marrë në qoftë se ju nuk jeni futur me emrin tuaj 248 00:11:31,890 --> 00:11:34,520 Por logging in mund të thotë që ju të jeni të autorizuar. 249 00:11:34,520 --> 00:11:37,930 Por në qoftë se ju jeni tashmë i identifikuar dhe ju ende nuk kanë leje, atëherë 250 00:11:37,930 --> 00:11:40,140 ju gjithashtu mund të merrni ndaluar. 251 00:11:40,140 --> 00:11:45,320 Pra, nëse ju jeni regjistruar dhe nuk kanë leje, e ndaluar është edhe 252 00:11:45,320 --> 00:11:47,164 diçka që ju mund të merrni. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. Malan: Dhe mekanizmi nga të cilat këto probleme janë zakonisht të 254 00:11:48,900 --> 00:11:53,100 zgjidhen në server është nëpërmjet çfarë komandë? 255 00:11:53,100 --> 00:11:57,700 Chmod, në qoftë se ajo është në të vërtetë, një lejet nxjerrë në file apo directory. 256 00:11:57,700 --> 00:11:59,220 >> Rob Bowden: Pastaj 404 nuk u gjet. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Po. 259 00:12:03,470 --> 00:12:10,150 Pra, ndryshe nga 302 ku ajo nuk ishte pikërisht ku ju jeni duke kërkuar, por ajo e di se çfarë 260 00:12:10,150 --> 00:12:12,710 ju dëshironi, këtë, ajo vetëm ka nuk ka ide se çfarë doni. 261 00:12:12,710 --> 00:12:15,648 Dhe ju nuk jeni duke kërkuar diçka të vlefshme. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Unë jam një ibrik çaji dhe pastaj 500 server të brendshme. 264 00:12:22,310 --> 00:12:24,870 Pra, pse mund të merrni atë? 265 00:12:24,870 --> 00:12:26,120 >> Pra segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Unë në fakt nuk e di kategorizimin standard për këtë. 268 00:12:30,640 --> 00:12:34,850 Por në qoftë se kodi juaj PHP kishte diçka gabuar në të, në teori, ajo mund të 269 00:12:34,850 --> 00:12:39,650 në të vërtetë segfault, në të cilin rast, kjo 500 gabim i brendshëm server, diçka 270 00:12:39,650 --> 00:12:41,400 është e gabuar me server-së tuaj konfigurimit. 271 00:12:41,400 --> 00:12:44,320 Apo ka ndonjë gabim sintakse në kodin tuaj PHP. 272 00:12:44,320 --> 00:12:46,095 Apo diçka e keqe po ndodh. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. Malan: Ne e shohim segfault në mesin e përgjigjeve s pak njerëz. 274 00:12:48,320 --> 00:12:49,490 Dhe teknikisht, kjo mund të ndodhë. 275 00:12:49,490 --> 00:12:53,820 Por kjo do të ishte një PHP, programi shkruar nga njerëzit e tjerë, në të vërtetë 276 00:12:53,820 --> 00:12:57,790 segfaulted, i cili vetëm nëse ata njerëz dehur dhe shkroi kodin buggy në 277 00:12:57,790 --> 00:13:00,680 përkthyesi i tyre do të Vetë PHP segfault. 278 00:13:00,680 --> 00:13:06,460 Pra, edhe pse 500 është si një segfault në frymë, është pothuajse gjithmonë 279 00:13:06,460 --> 00:13:10,490 rezultat i një çështje e file e konfigurimit me web serverin tuaj, ose, siç tha Rob, 280 00:13:10,490 --> 00:13:13,200 një gabim sintakse, si ju nuk e mbylli një kuotë. 281 00:13:13,200 --> 00:13:16,180 Ose ju ka humbur një pikëpresje diku. 282 00:13:16,180 --> 00:13:23,677 >> Audienca: Pra, për pset Shuttle, unë mendoj se kur unë e bëri atë një herë unë klikuar 283 00:13:23,677 --> 00:13:26,300 shfletuesi, por asgjë nuk doli, atë që e quajtën faqe të bardhë. 284 00:13:26,300 --> 00:13:28,056 Por kjo ishte për shkak të kodit. 285 00:13:28,056 --> 00:13:29,440 Unë mendoj se ishte e JavaScript, e drejtë? 286 00:13:29,440 --> 00:13:29,770 >> Rob Bowden: Po. 287 00:13:29,770 --> 00:13:31,180 >> Audienca: A do që error ende të dalë? 288 00:13:31,180 --> 00:13:34,290 >> Rob Bowden: Pra, ju nuk do të kishte marrë ky gabim për shkak se çdo gjë 289 00:13:34,290 --> 00:13:36,930 nga perspektiva e web serverit ishte krejtësisht në rregull. 290 00:13:36,930 --> 00:13:39,090 Por ju kërkohet index.html. 291 00:13:39,090 --> 00:13:42,000 Ju kërkohet shuttle.js dhe service.js. 292 00:13:42,000 --> 00:13:44,580 Dhe kjo ishte në gjendje të kthehen me sukses për ju të gjithë nga ato gjëra - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Kjo është vetëm kur shfletuesi juaj përpoq të interpretojnë kodin JavaScript që 296 00:13:49,330 --> 00:13:51,370 kjo është si, prisni, kjo nuk është error vlefshme JavaScript. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Çdo pyetje të tjera? 299 00:13:58,210 --> 00:14:00,750 Dakord. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. Malan: Pra ardhshëm up ishte numri 11. 301 00:14:04,120 --> 00:14:07,610 Dhe 11 ishte scariest për shumë njerëz. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Pra, gjëja më e rëndësishme të theksohet këtu ishte se kjo ishte, në të vërtetë, në lidhje me 304 00:14:18,570 --> 00:14:19,840 një listë e lidhur dyfish. 305 00:14:19,840 --> 00:14:23,160 Por kjo nuk ishte e njëjtë si vitin e kaluar Problemi listë e lidhur dyfish, 306 00:14:23,160 --> 00:14:27,170 të cilat nuk ju japin caveat që lista do të mund, në fakt, të jetë unsorted. 307 00:14:27,170 --> 00:14:29,640 >> Pra, fakti se lista ishte unsorted dhe fakti se ajo fjalë ishte 308 00:14:29,640 --> 00:14:32,930 nënvizoi nuk kishte për qëllim të përcjellë se kjo është në fakt një thjeshtësim 309 00:14:32,930 --> 00:14:35,430 të asaj që përndryshe do të kishte qenë një problem më sfiduese 310 00:14:35,430 --> 00:14:36,600 dhe a më një. 311 00:14:36,600 --> 00:14:40,760 Pra, një gabim i përbashkët këtu ishte që të kanë vënë Zgjidhja e vitit të kaluar në një tuaj 312 00:14:40,760 --> 00:14:45,580 pager dhe pastaj vetëm verbërisht kopje që poshtë si përgjigje, që është e drejta 313 00:14:45,580 --> 00:14:48,520 përgjigje të një pyetje të ndryshme të ngjashme në frymë. 314 00:14:48,520 --> 00:14:51,340 Por hollësitë këtu ishin si më poshtë. 315 00:14:51,340 --> 00:14:55,200 >> Pra një, ne kemi një nyje deklaruar dhe përcaktuar në mënyrë të zakonshme këtu. 316 00:14:55,200 --> 00:14:59,230 Pastaj ne përcaktohet lista e të jetë një globale tregues të initialized null. 317 00:14:59,230 --> 00:15:02,150 Pastaj me sa duket, ka dy funksione ne kemi prototipa për këtu, insert 318 00:15:02,150 --> 00:15:03,240 dhe për të hequr. 319 00:15:03,240 --> 00:15:06,600 Dhe pastaj ne kemi një kod mostër këtu për të bërë një bandë e insertions. 320 00:15:06,600 --> 00:15:09,930 Dhe pastaj ne ju kërkojmë të përfunduar Zbatimi i futur poshtë në të tilla 321 00:15:09,930 --> 00:15:14,380 një mënyrë që ajo fut n në lista në kohë të vazhdueshme, theksoi gjithashtu, 322 00:15:14,380 --> 00:15:15,730 edhe në qoftë se tashmë i pranishëm. 323 00:15:15,730 --> 00:15:20,600 >> Pra, bukuria e të qenit në gjendje për të futur në kohë të vazhdueshme është se ai nënkupton 324 00:15:20,600 --> 00:15:23,060 që ju duhet për të futur nyja e re ku? 325 00:15:23,060 --> 00:15:23,690 Në pjesën e përparme. 326 00:15:23,690 --> 00:15:27,760 Pra, ajo eliminon, fatmirësisht, të paktën një nga raste që përdoren në nevojë 327 00:15:27,760 --> 00:15:30,520 edhe më shumë rreshta të kodit, si ajo e bëri vitin e kaluar dhe madje edhe në klasë kur ne 328 00:15:30,520 --> 00:15:34,040 biseduar me këtë lloj gjë me njerëzit dhe me disa 329 00:15:34,040 --> 00:15:35,250 verbal kod pseudo. 330 00:15:35,250 --> 00:15:39,190 Pra, në zgjidhjen këtu, le të kaloni mbi të që vetëm të ketë një në Visual 331 00:15:39,190 --> 00:15:40,480 ekran. 332 00:15:40,480 --> 00:15:42,230 >> Vini re që ne jemi duke bërë në vijim. 333 00:15:42,230 --> 00:15:45,140 Dhe gjithashtu të vini re thjeshtësim të tjera ishte se edhe nëse është e 334 00:15:45,140 --> 00:15:48,280 tashmë i pranishëm, kështu që kjo do të thotë edhe në qoftë se numri është tashmë atje, ju mund të 335 00:15:48,280 --> 00:15:50,280 vetëm verbërisht futur një tjetër kopje e saj. 336 00:15:50,280 --> 00:15:52,560 Dhe kjo, gjithashtu, kishte për qëllim të jetë një thjeshtim, në mënyrë që ju mund të 337 00:15:52,560 --> 00:15:54,940 të përqëndrohet në, me të vërtetë, disa nga më të Pjesa intelektualisht interesante dhe 338 00:15:54,940 --> 00:15:58,090 jo vetëm disa gabim shtesë kontrolluar duke pasur parasysh kohën e kufizuar. 339 00:15:58,090 --> 00:16:02,880 >> Pra, në këtë zgjidhje mostër, ne ndajë një tregues të dorës së majtë 340 00:16:02,880 --> 00:16:04,510 tjetrën këtu për një nyje. 341 00:16:04,510 --> 00:16:07,190 Tani, të kuptojë se treguesin, si Rob tha, është vetëm 32 bit. 342 00:16:07,190 --> 00:16:09,060 Dhe kjo nuk ka të vërtetë përmbajnë një adresë deri sa ju 343 00:16:09,060 --> 00:16:09,970 caktojë atë adresë. 344 00:16:09,970 --> 00:16:13,220 Dhe ne bëjmë këtë në të djathtë Ana nëpërmjet malloc. 345 00:16:13,220 --> 00:16:16,550 Ashtu si një qytetar i mirë, ne kontrolloni se malloc nuk është, në fakt, null, në mënyrë që 346 00:16:16,550 --> 00:16:18,690 ne nuk aksidentalisht të krijojë një segfault këtu. 347 00:16:18,690 --> 00:16:22,840 Dhe çdo herë që përdorin malloc në jetë, ju duhet të jenë të kontrolluar për null, që të mos 348 00:16:22,840 --> 00:16:24,090 ju keni një bug delikate. 349 00:16:24,090 --> 00:16:28,460 >> Pastaj ne nisja atë null duke caktimin n dhe i mëparshëm dhe të ardhshëm. 350 00:16:28,460 --> 00:16:32,450 Dhe në këtë rast këtu, unë initialized mëparshme të null, sepse ky i ri 351 00:16:32,450 --> 00:16:34,780 nyje do të jetë e re në fillim të listës sime. 352 00:16:34,780 --> 00:16:37,050 Pra, nuk do të jetë asgjë para saj. 353 00:16:37,050 --> 00:16:42,010 Dhe unë dua të thelb append listë ekzistuese me nyje të ri nga 354 00:16:42,010 --> 00:16:44,700 vendosjen e ardhshme të barabartë tek lista veten. 355 00:16:44,700 --> 00:16:47,120 Por unë nuk jam bërë vetëm ende. 356 00:16:47,120 --> 00:16:51,780 Pra, nëse lista vetë tashmë ekzistonte, dhe nuk kishte të paktën një nyje 357 00:16:51,780 --> 00:16:57,070 tashmë në vend, në qoftë se kjo është lista këtu dhe unë futur një nyje të re këtu, unë 358 00:16:57,070 --> 00:17:01,840 duhet të bëni të sigurtë që ish nyje im vë prapa për nyje tim të ri, 359 00:17:01,840 --> 00:17:04,260 sepse kjo është, përsëri, një listë e lidhur dyfish. 360 00:17:04,260 --> 00:17:05,460 >> Pra, ne bëjmë një kontroll mendje e shëndoshë. 361 00:17:05,460 --> 00:17:10,109 Nëse lista nuk është i pavlefshëm, në qoftë se ka tashmë një ose më shumë nyje atje, pastaj 362 00:17:10,109 --> 00:17:12,470 shtoj se përsëri referencë mënyrë që të flasin. 363 00:17:12,470 --> 00:17:15,420 Dhe pastaj shumë e fundit gjë që duhet për të bërë është në të vërtetë Përditëso globale 364 00:17:15,420 --> 00:17:20,329 Lista ndryshueshme vetë për pikë në atë nyje të re. 365 00:17:20,329 --> 00:17:21,790 Po. 366 00:17:21,790 --> 00:17:26,579 >> Audienca: Në akrep shigjeta [Padëgjueshme] është e barabartë me null, bën që 367 00:17:26,579 --> 00:17:30,420 merren me lista sepse Lista është e pavlefshme? 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. Malan: Jo. 369 00:17:30,596 --> 00:17:34,500 Kjo është thjesht mua po në mënyrë proaktive kujdesshëm, në se në qoftë se ky është im 370 00:17:34,500 --> 00:17:38,730 Lista origjinale me ndoshta disa nyjet më shumë mbi këtu dhe unë jam futur tim 371 00:17:38,730 --> 00:17:42,380 nyja e re mbi këtu, nuk do të jetë asgjë mbi këtu. 372 00:17:42,380 --> 00:17:44,720 Dhe unë dua të kapur këtë ide duke vendosur mëparshme të 373 00:17:44,720 --> 00:17:47,740 null mbi nyjen e ri. 374 00:17:47,740 --> 00:17:51,410 Dhe me sa duket, në qoftë se kodi im është i saktë dhe nuk ka mënyrë tjetër për të futur 375 00:17:51,410 --> 00:17:54,970 nyjet e tjera përveç këtij funksioni, me sa duket, edhe në qoftë se lista tashmë ka 376 00:17:54,970 --> 00:18:00,090 një ose më shumë nyje në të, me sa duket lista, nyja e parë, do të ketë një 377 00:18:00,090 --> 00:18:02,750 tregues i mëparshëm i vetë null. 378 00:18:02,750 --> 00:18:03,550 >> Audienca: Dhe vetëm një vazhdim. 379 00:18:03,550 --> 00:18:08,139 Arsyeja keni vënë akrep barabartë ardhshme Lista është që ju jeni duke e bërë në treguesin 380 00:18:08,139 --> 00:18:13,579 para në listë që është e vënë në për të ardhshëm, unë mendoj - 381 00:18:13,579 --> 00:18:14,980 I don 't - 382 00:18:14,980 --> 00:18:15,450 vetëm listat? 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. Malan: Pikërisht. 384 00:18:16,400 --> 00:18:19,400 Dhe kështu që le të konsiderojmë në të vërtetë dy raste këtu me të vërtetë, edhe pse 385 00:18:19,400 --> 00:18:22,070 mënyrë ne do t'i shqyrtojmë nuk është krejt e njëjtë me kodin. 386 00:18:22,070 --> 00:18:26,250 Por në një nivel të lartë, në qoftë se kjo paraqet lista dhe kjo është një 32-bit 387 00:18:26,250 --> 00:18:29,560 akrep, skenari më e thjeshtë është se kjo është null by default. 388 00:18:29,560 --> 00:18:33,010 Dhe mendoj unë dua të futur numri 50 ishte numri i parë. 389 00:18:33,010 --> 00:18:37,640 Kështu që unë jam duke shkuar për të shkuar përpara dhe të ndajë një nyje, e cila do të përmbajë 390 00:18:37,640 --> 00:18:38,770 tri fusha - 391 00:18:38,770 --> 00:18:42,070 n, mëparshme, dhe të ardhshëm. 392 00:18:42,070 --> 00:18:44,580 >> Unë jam duke shkuar për të vënë numrin 50 këtu, sepse kjo do të jetë n. 393 00:18:44,580 --> 00:18:46,130 Kjo do të jetë e ardhshme. 394 00:18:46,130 --> 00:18:48,530 Dhe kjo do të jetë të mëparshme. 395 00:18:48,530 --> 00:18:50,910 Dhe kështu që çfarë të bëj në këtë rast? 396 00:18:50,910 --> 00:18:53,900 E pra, unë e kam bërë vetëm 1 vijë këtu. 397 00:18:53,900 --> 00:18:55,400 Pointer n merr n. 398 00:18:55,400 --> 00:18:57,740 Unë jam pra duke thënë: paraardhëse duhet të merrni null. 399 00:18:57,740 --> 00:18:59,470 Pra, kjo do të jetë e pavlefshme. 400 00:18:59,470 --> 00:19:01,365 Atëherë unë jam do të thonë tjetër do të merrni listë. 401 00:19:01,365 --> 00:19:05,150 >> Dhe kjo vetëm punon jashtë mirë. 402 00:19:05,150 --> 00:19:06,500 Kjo është null. 403 00:19:06,500 --> 00:19:10,620 Dhe kështu që unë jam duke thënë, nyja e re e ardhshme fushë duhet të marrë çdo gjë që kjo është. 404 00:19:10,620 --> 00:19:12,570 Kështu që i vë një tjetër null atje. 405 00:19:12,570 --> 00:19:14,510 Dhe pastaj gjëja e fundit Unë po të shikoni këtu. 406 00:19:14,510 --> 00:19:17,870 Nëse lista nuk është e barabartë me null, por ajo është e barabartë me null, kështu që ne kaloni 407 00:19:17,870 --> 00:19:18,470 krejt. 408 00:19:18,470 --> 00:19:23,520 Dhe kështu të gjitha unë bëjë tjetër është lista e merr akrep, e cila në pikturë rezulton në 409 00:19:23,520 --> 00:19:25,570 një foto si kjo. 410 00:19:25,570 --> 00:19:26,620 Pra, kjo është një skenar. 411 00:19:26,620 --> 00:19:30,490 >> Dhe ai që ju kanë pyetur për në mënyrë të veçantë është një situatë si kjo, 412 00:19:30,490 --> 00:19:33,190 ku ne tashmë kemi një listë të një-nyje. 413 00:19:33,190 --> 00:19:36,240 Dhe kur të shkoj përsëri në origjinal Deklarata problem, e ardhshëm ne do të 414 00:19:36,240 --> 00:19:39,320 insert të themi është 34, vetëm për hir të diskutimit. 415 00:19:39,320 --> 00:19:46,210 Kështu që unë jam duke shkuar për të vetëm të përshtatshme nxjerrë se mbi këtu. 416 00:19:46,210 --> 00:19:47,540 Unë e kam malloced vetëm. 417 00:19:47,540 --> 00:19:49,310 Le të supozojmë Unë jam duke kontrolluar për null. 418 00:19:49,310 --> 00:19:51,870 >> Tani, unë jam duke shkuar për të nisja n të jenë 34. 419 00:19:51,870 --> 00:19:53,040 Dhe kjo do të jetë n. 420 00:19:53,040 --> 00:19:54,670 Kjo do të jetë e ardhshme. 421 00:19:54,670 --> 00:19:57,100 Dhe kjo do të jetë të mëparshme. 422 00:19:57,100 --> 00:19:59,370 Le t'u siguruar që unë nuk e kam merrni këtë prapa. 423 00:19:59,370 --> 00:20:01,110 Kthehu vjen e para në përkufizimin. 424 00:20:01,110 --> 00:20:03,070 Më lejoni të rregullojmë këtë. 425 00:20:03,070 --> 00:20:04,410 Kjo është mëparshme. 426 00:20:04,410 --> 00:20:05,780 Kjo është tjetër. 427 00:20:05,780 --> 00:20:08,620 Edhe pse këto janë identike, le të mbani atë të qëndrueshme. 428 00:20:08,620 --> 00:20:09,450 >> Kthehu. 429 00:20:09,450 --> 00:20:11,030 Kjo është tjetër. 430 00:20:11,030 --> 00:20:16,310 Kështu që unë kam malloced vetëm shënim time, kontrolluar për null, caktuar 34 në nyje. 431 00:20:16,310 --> 00:20:17,570 Kthehu merr null. 432 00:20:17,570 --> 00:20:19,480 Kështu që më jep atë. 433 00:20:19,480 --> 00:20:21,010 Next merr listë. 434 00:20:21,010 --> 00:20:22,370 Pra, lista është ky. 435 00:20:22,370 --> 00:20:26,520 Pra, kjo është e njëjtë si tani duke tërhequr këtë shigjete, në mënyrë që ata të tregojnë një 436 00:20:26,520 --> 00:20:27,940 në të njëjtën. 437 00:20:27,940 --> 00:20:30,400 Dhe atëherë unë jam duke kontrolluar nëse lista nuk është e barabartë me null. 438 00:20:30,400 --> 00:20:31,740 Dhe kjo nuk është këtë herë. 439 00:20:31,740 --> 00:20:35,580 Atëherë unë jam duke shkuar për të bërë lista mëparshme merr treguesin. 440 00:20:35,580 --> 00:20:39,700 >> Pra, lista e mëparshme merr PTR. 441 00:20:39,700 --> 00:20:44,300 Pra, kjo ka efektin e vendosjes së një shigjetë grafike këtu. 442 00:20:44,300 --> 00:20:46,930 Dhe kjo është duke marrë një pak me onde, linjat. 443 00:20:46,930 --> 00:20:50,780 Dhe pastaj, së fundi, unë të rinovuar listë të tregojnë për treguesin. 444 00:20:50,780 --> 00:20:55,560 Deri tani kjo tregon për këtë djalë. 445 00:20:55,560 --> 00:20:57,170 Dhe tani, le të bëjë një të shpejtë kontrolloni mendje e shëndoshë. 446 00:20:57,170 --> 00:20:59,470 >> Ja lista, e cila është ndryshorja globale. 447 00:20:59,470 --> 00:21:02,850 Nyja e parë është, me të vërtetë, 34, për shkak se Unë jam duke ndjekur këtë shigjetë. 448 00:21:02,850 --> 00:21:05,210 Dhe kjo është e saktë, sepse unë dua të futur në fillim të lista 449 00:21:05,210 --> 00:21:06,070 të gjitha nyjet e reja. 450 00:21:06,070 --> 00:21:08,860 Fusha e tij e ardhshme më çon në këtë djalë. 451 00:21:08,860 --> 00:21:10,710 Nëse unë do të mbajë, i goditi tjetër është null. 452 00:21:10,710 --> 00:21:11,760 Pra, nuk ka më shumë listë. 453 00:21:11,760 --> 00:21:14,460 Nëse unë goditi mëparshme, të shkoj mbështesë ku unë pres. 454 00:21:14,460 --> 00:21:16,435 >> Pra, ka ende disa pointers, qartë, për të manipuluar. 455 00:21:16,435 --> 00:21:19,870 Por fakti që ju u tha për të bërë këtë në kohë të vazhdueshme ju do të thotë vetëm 456 00:21:19,870 --> 00:21:22,910 kanë një numër i caktuar i gjërave ju jeni i lejuar për të bërë. 457 00:21:22,910 --> 00:21:24,290 Dhe çfarë është ky numër? 458 00:21:24,290 --> 00:21:25,185 Kjo mund të jetë një hap. 459 00:21:25,185 --> 00:21:25,700 Ajo mund të jetë dy. 460 00:21:25,700 --> 00:21:26,820 Ajo mund të jetë 1.000 hapa. 461 00:21:26,820 --> 00:21:30,500 Por është e fundme, që do të thotë që ju nuk mund të kanë çdo lloj looping ndodh 462 00:21:30,500 --> 00:21:32,010 këtu, nuk ka recursion, nuk ka sythe. 463 00:21:32,010 --> 00:21:37,390 Ajo ka vetëm të jenë në linjat e vështirë-koduar i kodit si ne kemi në këtë mostër. 464 00:21:37,390 --> 00:21:42,330 >> Pra, problemi tjetër 12 na kërkoi që të përfundimin e zbatimit të hequr 465 00:21:42,330 --> 00:21:46,740 më poshtë në mënyrë të tillë që ai heq n nga lista në kohë lineare. 466 00:21:46,740 --> 00:21:48,740 Pra, ju keni një pak më shumë dhomë luaj tani. 467 00:21:48,740 --> 00:21:52,380 Ju mund të supozojmë se n, nëse është i pranishëm në listë, do të jetë i pranishëm 468 00:21:52,380 --> 00:21:53,340 jo më shumë se një herë. 469 00:21:53,340 --> 00:21:56,770 Dhe se shumë është menduar të jetë një quiz me bazë thjeshtimi supozim, kështu 470 00:21:56,770 --> 00:21:59,780 se në qoftë se ju të gjeni numrin 50 diku në listë, ju nuk e bëni edhe 471 00:21:59,780 --> 00:22:02,890 duhet të shqetësohen për të vazhduar për të iterate, duke kërkuar për çdo të jetë e mundur 472 00:22:02,890 --> 00:22:06,990 kopje e 50, e cila vetëm do të zhvilloheshin në disa minutia në kohë të kufizuar. 473 00:22:06,990 --> 00:22:10,460 >> Pra me hequr, kjo ishte patjetër më sfiduese dhe më shumë 474 00:22:10,460 --> 00:22:11,640 Kodi për të shkruar. 475 00:22:11,640 --> 00:22:14,990 Por në shikim të parë, sinqerisht, ajo mund shikoni diçka të madhe dhe si 476 00:22:14,990 --> 00:22:17,060 nuk ka asnjë mënyrë ju mund të ketë të dalë me në një quiz. 477 00:22:17,060 --> 00:22:22,450 Por në qoftë se ne të fokusohemi në hapat individualë, me shpresë, ajo do të papritur 478 00:22:22,450 --> 00:22:26,060 rreh se secili prej këtyre individëve Hapat e ka kuptim të dukshëm 479 00:22:26,060 --> 00:22:27,080 në retrospektivë. 480 00:22:27,080 --> 00:22:28,200 Pra, le të marrin një sy. 481 00:22:28,200 --> 00:22:32,570 >> Pra, së pari, ne nisja treguesin të jetë lista veten. 482 00:22:32,570 --> 00:22:36,040 Sepse unë dua kohë lineare, që do të thotë Unë do të ketë disa lak. 483 00:22:36,040 --> 00:22:39,730 Dhe një mënyrë e përbashkët për të iterate mbi nyjet në një strukturë listë apo çdo lloj 484 00:22:39,730 --> 00:22:43,860 e strukturës iteratively është për të marrë nje tregues të para të dhëna 485 00:22:43,860 --> 00:22:46,990 Struktura dhe pastaj vetëm të fillojë përditësimin atë dhe ecin në rrugën tuaj 486 00:22:46,990 --> 00:22:48,650 nëpërmjet strukturës dhënave. 487 00:22:48,650 --> 00:22:50,040 Kështu që unë jam duke shkuar për të bërë pikërisht këtë. 488 00:22:50,040 --> 00:22:54,260 >> Ndërsa akrep, e ndryshueshme im i përkohshëm, nuk është e barabartë me null, le të 489 00:22:54,260 --> 00:22:55,660 të shkojnë përpara dhe të kontrolloni. 490 00:22:55,660 --> 00:22:56,910 A e kam të merrni me fat? 491 00:22:56,910 --> 00:23:01,740 A është fusha n në nyjen unë jam duke kërkuar në barabartë tek 492 00:23:01,740 --> 00:23:03,380 Numri Unë jam duke kërkuar për? 493 00:23:03,380 --> 00:23:05,410 Dhe nëse është kështu, le të bëjë diçka. 494 00:23:05,410 --> 00:23:10,020 Tani, këtë njoftim nëse gjendja rrethon gjithë 495 00:23:10,020 --> 00:23:11,520 linjat e mëposhtme të kodit. 496 00:23:11,520 --> 00:23:14,610 Kjo është e vetmja gjë që më intereson - gjetjen e një numri në fjalë. 497 00:23:14,610 --> 00:23:18,010 Kështu që nuk ka asnjë tjetër, e cila thjeshton gjëra konceptualisht pak. 498 00:23:18,010 --> 00:23:22,040 >> Por tani, e kam kuptuar, dhe ju mund të keni vetëm e kuptoi këtë pasi duke menduar 499 00:23:22,040 --> 00:23:24,720 ajo me pak, ka në fakt dy raste këtu. 500 00:23:24,720 --> 00:23:28,060 Njëra është nyja ku është në fillimi i lista, e cila është një 501 00:23:28,060 --> 00:23:31,040 pak i bezdisshëm, sepse kjo është një rast i veçantë, për shkak se ju duhet të merren 502 00:23:31,040 --> 00:23:33,340 me këtë gjë, e cila është e vetmja anomali. 503 00:23:33,340 --> 00:23:35,720 Kudo tjetër në listë, është e njëjta gjë. 504 00:23:35,720 --> 00:23:38,050 Ka një nyje e mëparshme dhe një tjetër nyje, nyje e mëparshme, nyje e ardhshme. 505 00:23:38,050 --> 00:23:40,940 Por ky djalë është një e veçantë pak në qoftë se ai është në fillim. 506 00:23:40,940 --> 00:23:48,710 >> Pra, nëse treguesi është e barabartë me listën në vetvete, kështu që në qoftë se unë jam në fillim të 507 00:23:48,710 --> 00:23:53,960 lista dhe unë kam gjetur n, kam nevojë për të bërë disa gjëra. 508 00:23:53,960 --> 00:23:59,230 Një, Unë kam nevojë për të ndryshuar listën e të pikë në fushën e ardhshme, 50. 509 00:23:59,230 --> 00:24:01,270 Kështu që mendoj se unë jam duke u përpjekur për të hequr 34. 510 00:24:01,270 --> 00:24:03,560 Pra, ky djalë e mori për të shkuar larg në vetëm një moment. 511 00:24:03,560 --> 00:24:07,210 >> Kështu që unë jam duke shkuar për të thënë, lista merr treguesin e ardhshme. 512 00:24:07,210 --> 00:24:08,570 E pra, kjo është akrep. 513 00:24:08,570 --> 00:24:10,360 Tjetra është vënë mbi këtu. 514 00:24:10,360 --> 00:24:17,470 Pra, kjo po ndryshon këtë të drejtë shigjetë tani për pikë në këtë djalë këtu. 515 00:24:17,470 --> 00:24:19,580 Tani, mos harroni, ne kemi një variabël e përkohshme. 516 00:24:19,580 --> 00:24:23,520 Pra, ne nuk kemi jetimë ndonjë nyje, sepse edhe unë kam këtë djalë në tim 517 00:24:23,520 --> 00:24:25,010 zbatimin e hequr. 518 00:24:25,010 --> 00:24:29,600 Deri tani, në qoftë se lista vetvete nuk është null, Unë kam nevojë për të rregulluar një diçka të vogël. 519 00:24:29,600 --> 00:24:32,690 >> Unë kam nevojë për të tani të siguruar që kjo shigjetë, cila është parë duke 520 00:24:32,690 --> 00:24:36,830 50-34, kjo ka marrë për të shkuar larg, sepse në qoftë se unë jam duke u përpjekur të heqin qafe 521 00:24:36,830 --> 00:24:41,910 e 34, 50 kishin më mirë të mos mbajë asnjë lloj përsëri referencë për atë si 522 00:24:41,910 --> 00:24:42,820 shigjetë sugjeruar. 523 00:24:42,820 --> 00:24:44,820 Kështu që unë vetëm e bëri këtë linjë. 524 00:24:44,820 --> 00:24:46,520 Pra, atëherë unë jam bërë. 525 00:24:46,520 --> 00:24:48,040 Ky rast është në të vërtetë shumë e lehtë. 526 00:24:48,040 --> 00:24:51,010 Kishte prerë kokën e listës është relativisht i drejtpërdrejtë. 527 00:24:51,010 --> 00:24:52,980 >> Për fat të keq, nuk ka kjo bllok i bezdisshëm tjetër. 528 00:24:52,980 --> 00:24:56,170 Deri tani, unë duhet të marrin në konsideratë rastin ku ka diçka në mes. 529 00:24:56,170 --> 00:24:59,880 Por nuk është shumë e tmerrshme, me përjashtim të për sintaksë si kjo. 530 00:24:59,880 --> 00:25:03,080 Pra, në qoftë se unë nuk jam në fillim të listë, unë jam diku në mes. 531 00:25:03,080 --> 00:25:08,160 Dhe kjo vijë këtu është duke thënë, start në çfarëdo nyje ju jeni në të. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Shko në fushën e ardhshëm nyjen kaluar dhe pika që në kursorit. 534 00:25:18,550 --> 00:25:20,390 >> Le të bëjmë këtë në pikturë. 535 00:25:20,390 --> 00:25:21,640 Që ishte duke u komplikuar. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Pra, nëse unë kam një fushat të mëparshme këtu - le ta bëjmë këtë - fusha e ardhshme këtu. 538 00:25:37,990 --> 00:25:41,200 Unë jam duke shkuar për të lehtësuar e mia pointers në vend se të nxjerrë një bandë e tërë e 539 00:25:41,200 --> 00:25:45,710 gjëra mbrapa dhe me radhë crisscrossing njëri tjetrin. 540 00:25:45,710 --> 00:25:50,870 Dhe tani, le të vetëm të thonë se kjo është 1, 2, 3 për hir të diskutimit, madje edhe 541 00:25:50,870 --> 00:25:53,410 edhe pse kjo nuk do të vijë deri me problemi në fjalë. 542 00:25:53,410 --> 00:25:55,900 >> Kështu që këtu është lista ime e lidhur. 543 00:25:55,900 --> 00:25:59,300 Unë jam duke u përpjekur për të hequr dy në këtë version të veçantë të historisë. 544 00:25:59,300 --> 00:26:01,960 Kështu që unë kam updated tregues për të treguar për këtë djalë. 545 00:26:01,960 --> 00:26:03,315 Pra, kjo është PTR. 546 00:26:03,315 --> 00:26:04,530 Ai është treguar këtu. 547 00:26:04,530 --> 00:26:07,170 Kjo është lista, e cila ekziston globalisht si më parë. 548 00:26:07,170 --> 00:26:09,200 Dhe ai duke vënë këtu pa marrë parasysh çfarë. 549 00:26:09,200 --> 00:26:10,800 Dhe tani, unë jam duke u përpjekur për të hequr dy. 550 00:26:10,800 --> 00:26:13,850 >> Pra, nëse treguesi është duke treguar këtu, unë jam i duke shkuar për të ndjekur, me sa duket, 551 00:26:13,850 --> 00:26:17,110 akrep i mëparshëm, i cili e vë më në 1. 552 00:26:17,110 --> 00:26:22,290 Unë jam duke shkuar për të thënë më pas se tjetër fushë, e cila sjell në dorë të kësaj 553 00:26:22,290 --> 00:26:25,410 kuti këtu, do të akrep barabartë ardhshëm. 554 00:26:25,410 --> 00:26:28,400 Pra, nëse ky akrep, kjo është tjetër. 555 00:26:28,400 --> 00:26:31,840 Kjo do të thotë se kjo shigjetë nevojat të tregojnë për këtë djalë. 556 00:26:31,840 --> 00:26:35,140 >> Pra, çfarë linjë e kodit që ka vetëm bërë është pak për këtë. 557 00:26:35,140 --> 00:26:37,500 Dhe tani, kjo është në kërkim si një hap në drejtimin e duhur. 558 00:26:37,500 --> 00:26:41,390 Ne thelb duam të prerje me 2 nga , në mes të 1 dhe 3. 559 00:26:41,390 --> 00:26:44,400 Kështu që ka kuptim që ne duam të Rruga këtë tregues rreth tij. 560 00:26:44,400 --> 00:26:50,400 Pra, kjo linjë tjetër është kontrolluar nëse akrep tjetër nuk është null, ka 561 00:26:50,400 --> 00:26:54,200 dikush me të vërtetë për të drejtën e 2, që do të thotë që ne gjithashtu kemi të bëjmë 562 00:26:54,200 --> 00:26:55,850 pak prerje këtu. 563 00:26:55,850 --> 00:27:00,590 >> Kështu që unë tani duhet të ndjekin këtë treguesin dhe update treguesin e mëparshme mbi 564 00:27:00,590 --> 00:27:05,410 ky djalë për të bërë pak a workaround këtu pikë këtu. 565 00:27:05,410 --> 00:27:07,100 Dhe tani, kjo është e bukur me sy. 566 00:27:07,100 --> 00:27:11,930 Është pak e çrregullt në se ka askush nuk e vënë në 2 më. 567 00:27:11,930 --> 00:27:13,600 2 është duke treguar në të majtë. 568 00:27:13,600 --> 00:27:14,980 Dhe 2 është duke treguar në të djathtë. 569 00:27:14,980 --> 00:27:17,480 Por ai mund të bëjë çfarëdo që ai dëshiron, sepse ai është gati për të marrë të lirë. 570 00:27:17,480 --> 00:27:19,480 Dhe kjo nuk ka rëndësi se çfarë ato vlera janë më. 571 00:27:19,480 --> 00:27:23,040 >> Ajo që është e rëndësishme është se mbetur djemtë janë kurs më lart 572 00:27:23,040 --> 00:27:24,280 dhe poshtë tij tani. 573 00:27:24,280 --> 00:27:25,810 Dhe me të vërtetë, kjo është ajo që ne bëjmë tjetër. 574 00:27:25,810 --> 00:27:29,360 Ne akrep të lirë, që do të thotë që ne të treguar sistemit operativ, ju jeni të mirëpritur 575 00:27:29,360 --> 00:27:30,906 për të kërkuar këtë. 576 00:27:30,906 --> 00:27:34,900 Dhe pastaj në fund, do të kthehemi. 577 00:27:34,900 --> 00:27:37,220 Tjetër implicite, në qoftë se ne nuk janë kthyer ende, 578 00:27:37,220 --> 00:27:38,290 ne kemi marrë për të mbajtur në kërkim. 579 00:27:38,290 --> 00:27:41,485 Pra, është e barabartë me akrep akrep tjetër vetëm do të thotë të lëvizur këtë djalë këtu. 580 00:27:41,485 --> 00:27:42,600 Leviz këtë djalë këtu. 581 00:27:42,600 --> 00:27:45,400 Leviz këtë djalë këtu në qoftë se, në fakt, ne nuk e gjeni numrin 582 00:27:45,400 --> 00:27:46,960 ne jemi në kërkim të ende. 583 00:27:46,960 --> 00:27:49,630 >> Pra sinqerisht, duket krejtësisht madhe, unë mendoj se, në fillim 584 00:27:49,630 --> 00:27:52,180 shikim, veçanërisht nëse ju luftuar me këtë gjatë quiz pastaj shohim 585 00:27:52,180 --> 00:27:52,850 diçka e tillë. 586 00:27:52,850 --> 00:27:55,050 Dhe ju pat veten në anën e pasme. 587 00:27:55,050 --> 00:27:57,080 E pra, nuk ka asnjë mënyrë unë mund të ketë dalë me që në quiz. 588 00:27:57,080 --> 00:28:00,470 Por unë do të argumentojnë, ju mund të qoftë se ju pushim ajo poshtë në këto individuale 589 00:28:00,470 --> 00:28:04,400 raste dhe vetëm ecin nëpër atë me kujdes, edhe pse, pa dyshim, në bazë të 590 00:28:04,400 --> 00:28:06,300 rrethana të vështira. 591 00:28:06,300 --> 00:28:09,470 >> Fatmirësisht, foto bërë çdo gjë më të lumtur. 592 00:28:09,470 --> 00:28:11,050 Ju mund të tërheqë këtë në ndonjë numër të mënyra. 593 00:28:11,050 --> 00:28:12,760 Ju nuk keni për të bërë crisscrossing gjë këtu. 594 00:28:12,760 --> 00:28:14,520 Ju mund të bëjë atë me të drejtë Linjat e pëlqejnë këtë. 595 00:28:14,520 --> 00:28:18,790 Por në esencë e këtij problemi, në përgjithësi, ishte që të kuptojnë se 596 00:28:18,790 --> 00:28:22,060 fotografia në fund duhet të shikoni pak diçka si kjo, sepse 597 00:28:22,060 --> 00:28:25,030 Koha konstante la të kuptohet se ju mbani zhurma dhe zhurma dhe zhurma 598 00:28:25,030 --> 00:28:29,900 nyjet e reja në fillim lista. 599 00:28:29,900 --> 00:28:31,960 Ndonjë pyetje? 600 00:28:31,960 --> 00:28:34,565 Ndoshta më sfiduese e sigurisht pyetjet kodim. 601 00:28:34,565 --> 00:28:37,690 >> Audienca: Pra, është lista e ngjashme me kokë në shembujt e mëparshëm. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. Malan: Pikërisht, saktësisht. 603 00:28:39,640 --> 00:28:43,130 Vetëm një emër të ndryshëm për një ndryshore globale. 604 00:28:43,130 --> 00:28:44,380 Botërore të gjerë çfarë? 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 Pra, kjo është ajo ku ju kishte për të shkruar paragrafin. 608 00:28:52,020 --> 00:28:56,060 Disa njerëz shkruajtur ese për këtë pyetje. 609 00:28:56,060 --> 00:29:00,230 Por ju vetëm duhet të përdorni këto gjashtë kushte për të përshkruar se çfarë ndodh kur 610 00:29:00,230 --> 00:29:02,440 ju përpiqeni të kontaktoni facebook.com. 611 00:29:02,440 --> 00:29:07,930 Kështu që unë vetëm do të flasim përmes procesit të duke përdorur të gjitha këto terma. 612 00:29:07,930 --> 00:29:11,290 Pra në shfletuesin tonë, ne shkruani facebook.com dhe hit Enter. 613 00:29:11,290 --> 00:29:17,280 Pra shfletuesin tonë do të ndërtojë një HTTP kërkojë që ajo do të dërgojë 614 00:29:17,280 --> 00:29:22,220 nëpërmjet një procesi në Facebook për Facebook për t'iu përgjigjur ne me 615 00:29:22,220 --> 00:29:24,450 HTML i faqes së saj. 616 00:29:24,450 --> 00:29:28,800 >> Pra, çfarë është proces me të të cilat HTTP kërkesa 617 00:29:28,800 --> 00:29:30,730 në fakt merr në Facebook? 618 00:29:30,730 --> 00:29:32,790 Pra, së pari, ne kemi nevojë për të përkthyer Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Pra, vetëm duke pasur parasysh emrin Facebook.com, ku në fakt nuk kerkesen HTTP 620 00:29:38,780 --> 00:29:39,940 duhet të shkoni? 621 00:29:39,940 --> 00:29:44,120 Pra, ne kemi nevojë për të përkthyer Facebook.com në një adresë IP, e cila në mënyrë unike 622 00:29:44,120 --> 00:29:47,620 identifikon çfarë makine ne fakt dëshironi të dërgoni këtë kërkesë për të. 623 00:29:47,620 --> 00:29:49,310 Laptop juaj ka një adresë IP. 624 00:29:49,310 --> 00:29:52,240 Çfarëdo e lidhur me internetit ka një adresë IP. 625 00:29:52,240 --> 00:29:59,030 >> Pra DNS, Domain Name Sistemit, që është çfarë do të merret me përkthimin e 626 00:29:59,030 --> 00:30:03,750 nga facebook.com në një adresë IP që ju në të vërtetë dëshironi të kontaktoni. 627 00:30:03,750 --> 00:30:08,075 Pra, ne të kontaktoni serverat DNS dhe të themi, çfarë është facebook.com? 628 00:30:08,075 --> 00:30:16,560 Ai thotë, oh, kjo është adresa IP 190,212 diçka, diçka, diçka. 629 00:30:16,560 --> 00:30:16,900 Dakord. 630 00:30:16,900 --> 00:30:18,850 Tani, unë e di se çfarë makine Unë dua të kontaktoni. 631 00:30:18,850 --> 00:30:22,360 >> Pra, atëherë ju dërgoni HTTP kërkesën tuaj mbi të atë makinë. 632 00:30:22,360 --> 00:30:24,140 Pra, si e bën atë të shkoj në atë makinë? 633 00:30:24,140 --> 00:30:27,200 E pra, kërkesa shkon nga router për kërcim router. 634 00:30:27,200 --> 00:30:32,630 Mos harroni shembullin në klasë, ku ne fakt e pa rrugë që 635 00:30:32,630 --> 00:30:35,340 pako e mori kur ne u përpoqëm për të komunikuar. 636 00:30:35,340 --> 00:30:38,460 Ne e pamë atë hidhen mbi Atlantik Oqeani në një moment apo çfarëdo. 637 00:30:38,460 --> 00:30:42,820 >> Pra, port termi fundit. 638 00:30:42,820 --> 00:30:46,520 Pra, kjo është tashmë në kompjuterin tuaj. 639 00:30:46,520 --> 00:30:49,970 Ju mund të keni gjëra të shumta aktualisht komunikimit me internet. 640 00:30:49,970 --> 00:30:53,730 Kështu që unë mund të konkurrojnë, të themi, Skype. 641 00:30:53,730 --> 00:30:55,670 Unë mund të ketë një shfletues të hapur. 642 00:30:55,670 --> 00:30:59,010 Unë mund të ketë diçka që torrenting fotografi. 643 00:30:59,010 --> 00:31:00,880 Pra, të gjitha këto gjëra janë të komunikimit me 644 00:31:00,880 --> 00:31:02,600 internet në një farë mënyre. 645 00:31:02,600 --> 00:31:08,070 >> Pra, kur kompjuteri juaj merr disa të dhëna nga interneti, si e bën ai 646 00:31:08,070 --> 00:31:10,130 e di se çfarë e aplikimit në të vërtetë do që të dhënat? 647 00:31:10,130 --> 00:31:12,610 Si e di nëse këtë të veçantë të dhënave është menduar për 648 00:31:12,610 --> 00:31:16,070 torrenting aplikimin krahasim me shfletuesin web? 649 00:31:16,070 --> 00:31:20,980 Pra, ky është qëllimi i portet në të cilat të gjitha këto aplikime kanë 650 00:31:20,980 --> 00:31:22,720 pohoi një port në kompjuterin tuaj. 651 00:31:22,720 --> 00:31:27,580 Pra shfletuesin tuaj web thotë, hej, Unë jam duke dëgjuar në portin 1000. 652 00:31:27,580 --> 00:31:32,240 Dhe programi juaj torrenting është duke thënë, Unë jam duke dëgjuar në portin 3000. 653 00:31:32,240 --> 00:31:34,770 Dhe Skype thotë, unë jam duke përdorur portin 4000. 654 00:31:34,770 --> 00:31:41,950 >> Pra, kur ju të merrni disa të dhëna që i takon njërit prej këtyre aplikimeve, të dhënat 655 00:31:41,950 --> 00:31:45,510 është shënuar me të cilat portin ai në fakt duhet të dërgohen së bashku për të. 656 00:31:45,510 --> 00:31:47,950 Pra, kjo thotë, oh, i perkas në portin 1000. 657 00:31:47,950 --> 00:31:50,950 Unë e di se kam nevojë për të përpara këtë së bashku me shfletuesin tim web. 658 00:31:50,950 --> 00:31:56,440 Pra, arsyeja është e rëndësishme këtu është se web servers kanë tendencë të 659 00:31:56,440 --> 00:31:58,240 të dëgjuar në portin 80. 660 00:31:58,240 --> 00:32:02,420 Kështu që kur të kontaktoj Facebook.com, unë jam i komunikuar me një makinë. 661 00:32:02,420 --> 00:32:06,390 Por unë duhet të them se cili portin e që makinë Dua të komunikojnë me të. 662 00:32:06,390 --> 00:32:09,160 Dhe serverat e web priren të jenë të dëgjuar në portin 80. 663 00:32:09,160 --> 00:32:14,010 >> Në qoftë se ata donin, ata mund të vendosur atë up kështu që listat si në portin 7000. 664 00:32:14,010 --> 00:32:19,090 Dhe pastaj në një shfletues web, unë mund me dorë të tipit Facebook.com: 7000 të 665 00:32:19,090 --> 00:32:24,600 dërgoni kërkesën në portin 7000 i web server Facebook. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. Malan: Dhe në këtë rast, edhe edhe pse ne nuk kërkonte që njerëzit 667 00:32:26,820 --> 00:32:30,000 përmend këtë, në këtë rast, atë port do kërkesa të vërtetë të shkojnë për të? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Provoni përsëri. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Pikërisht. 672 00:32:44,300 --> 00:32:47,960 Jo duke kërkuar për atë, por një finesë kjo është nuk ka asnjë fundit. 673 00:32:47,960 --> 00:32:51,770 >> Rob Bowden: Pra HTTPS, që nga ajo e dëgjuar në mënyrë specifike për 674 00:32:51,770 --> 00:32:55,180 i mbyllur, kjo është në portin 4430. 675 00:32:55,180 --> 00:32:57,680 >> Audienca: Dhe email janë 25, apo jo? 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. Malan: Jashtë email, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> Rob Bowden: Unë nuk e di edhe shumica e - gjitha nga ato ulta priren të jenë 678 00:33:03,760 --> 00:33:06,310 të rezervuara për gjëra. 679 00:33:06,310 --> 00:33:09,260 Unë mendoj se çdo gjë nën 1024 është e rezervuar. 680 00:33:09,260 --> 00:33:13,450 >> Audienca: Pse më the: 3 ishte numri i gabuar? 681 00:33:13,450 --> 00:33:18,820 >> Rob Bowden: Sepse në një adresë IP, ka katër grupimet e shifra. 682 00:33:18,820 --> 00:33:21,090 Dhe ata janë prej 0 deri 255. 683 00:33:21,090 --> 00:33:28,060 Pra 192.168.2.1 është një e zakonshme rrjetit lokal adresë IP. 684 00:33:28,060 --> 00:33:30,840 Njoftim të gjithë ata janë më pak se 255. 685 00:33:30,840 --> 00:33:33,570 Kështu që kur kam filluar me 300, që ndoshta nuk mund të ketë 686 00:33:33,570 --> 00:33:35,210 qenë një nga numrat. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. Malan: Por kjo clip pa kuptim nga - ishte ajo CSI, ku ata kishin një 688 00:33:38,170 --> 00:33:39,970 numër i cili ishte shumë i madh për adresën IP. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> Rob Bowden: Çdo pyetje në këtë? 691 00:33:46,110 --> 00:33:51,710 Një tjetër, ndryshimi në mënyrë të plotë në temë, por ne e kemi këtë rrjet të PHP për 692 00:33:51,710 --> 00:33:53,270 shtëpitë në kuadrat. 693 00:33:53,270 --> 00:33:56,360 Dhe ne kemi një listë të parenditur. 694 00:33:56,360 --> 00:33:59,550 Dhe ne duam të shtypura nga çdo zëri të listës vetëm që përmban emrin shtëpi. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Pra, ne kemi një lak foreach. 697 00:34:11,870 --> 00:34:17,540 Pra mbani mend, sintaksa është foreach array si pika në rrjet. 698 00:34:17,540 --> 00:34:22,360 Pra, me anë të çdo ripërsëritje të lak, shtëpi do të marrë në një nga 699 00:34:22,360 --> 00:34:24,060 Vlerat brenda e array. 700 00:34:24,060 --> 00:34:26,530 >> Në e parë përsëritje, shtëpi do të jetë Cabot House. 701 00:34:26,530 --> 00:34:30,370 Në një përsëritje të dytë, shtëpia do të jetë Courier House dhe kështu me radhë. 702 00:34:30,370 --> 00:34:34,370 Pra, për çdo kuadrat si shtëpi, ne jemi vetëm do të shtypura - 703 00:34:34,370 --> 00:34:37,250 ju gjithashtu mund të ketë jehonë - 704 00:34:37,250 --> 00:34:42,199 pika lista dhe më pas emri të shtëpisë dhe pastaj të ngushtë zëri të listës. 705 00:34:42,199 --> 00:34:45,210 Formatimin e teksteve kaçurrel janë fakultative këtu. 706 00:34:45,210 --> 00:34:49,480 >> Dhe pastaj kemi thënë edhe në pyetjen vetë, mos harroni të mbyllur 707 00:34:49,480 --> 00:34:50,770 tag renditura lista. 708 00:34:50,770 --> 00:34:53,949 Pra, ne kemi nevojë për të dalë mënyrën PHP në mënyrë që të bëjë këtë. 709 00:34:53,949 --> 00:35:00,280 Ose ne mund të kemi bëri jehonë mbyllur tag listë të parenditur. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. Malan: Gjithashtu gjobë këtu do të kanë qenë për të përdorur një shkollë të vjetër për 711 00:35:02,380 --> 00:35:07,340 lak me një $ i = 0 0 dhe duke përdorur akuza të kuptoj se gjatësinë e rreze. 712 00:35:07,340 --> 00:35:09,240 Shumë Krejtësisht gjobë, vetëm një wordier pak. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> Audienca: Pra, nëse ju u do të [Padëgjueshme], do të bëni - 715 00:35:14,742 --> 00:35:16,734 I harroj atë lak [padëgjueshme] është. 716 00:35:16,734 --> 00:35:21,380 A do të $ kllapa kuadrat ï? 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. Malan: Pikërisht. 718 00:35:21,850 --> 00:35:23,100 Po, pikërisht. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> Rob Bowden: Çdo gjë tjetër? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. Malan: Në rregull. 723 00:35:32,010 --> 00:35:32,300 Tregtisë të humbura. 724 00:35:32,300 --> 00:35:38,290 Pra, ka pasur vile rrushi të përgjigjeve mundshme për secilin prej tyre. 725 00:35:38,290 --> 00:35:40,510 Ne ishim me të vërtetë vetëm në kërkim të diçka bindëse për një kokë dhe 726 00:35:40,510 --> 00:35:41,100 një dobësitë. 727 00:35:41,100 --> 00:35:44,830 Dhe numrin 16 e pyeti, Vleresimin përdoruesit ' input klient-side, si me JavaScript, 728 00:35:44,830 --> 00:35:47,280 në vend të server-krah, si me PHP. 729 00:35:47,280 --> 00:35:49,450 Pra, çfarë është një kokë e duke bërë klient-side? 730 00:35:49,450 --> 00:35:53,780 >> E pra, një nga gjërat që ne të propozuara është që ju të zvogëlojë latente, sepse ju 731 00:35:53,780 --> 00:35:56,750 nuk duhet të shqetësojë kontaktuar server, e cila mund të marrë disa 732 00:35:56,750 --> 00:36:00,390 milliseconds apo edhe disa sekonda duke shmangur këtë dhe vetëm 733 00:36:00,390 --> 00:36:04,670 Vleresimin e përdoruesve të dhëna klient-krah për shkaktuar një mbi-dorëzojë mbajtës dhe 734 00:36:04,670 --> 00:36:06,650 vetëm kontrolluar, e ata shkruani diçka në emrin? 735 00:36:06,650 --> 00:36:08,080 A ato të tipit diçka në për adresë e-mail? 736 00:36:08,080 --> 00:36:10,950 A ata zgjedhin një konvikt nga menu drop-down? 737 00:36:10,950 --> 00:36:14,360 >> Ju mund të jepni atyre reagime të menjëhershëm duke përdorur kompjuterin gigahertz 738 00:36:14,360 --> 00:36:16,770 ose çdo gjë që ata kanë se është në të vërtetë në tavolinën e tyre. 739 00:36:16,770 --> 00:36:19,310 Pra, kjo është vetëm një përdorues të mirë përjetojnë në mënyrë tipike. 740 00:36:19,310 --> 00:36:24,460 Por një downside për të bërë klientit-side validation, nëse ju bëni atë pa edhe 741 00:36:24,460 --> 00:36:29,860 duke bërë validimin server-side është se më dikush që vjen nga CS50 di 742 00:36:29,860 --> 00:36:33,980 që vetëm ju mund të dërgoni çdo të dhënat që ju dëshironi me një server në çdo numër mënyrash. 743 00:36:33,980 --> 00:36:37,030 Sinqerisht, në më të çdo shfletues, ju mund të klikoni rreth në rregullimet dhe vetëm 744 00:36:37,030 --> 00:36:40,110 fikni JavaScript, i cili do të, Prandaj, çaktivizoni çdo formë të 745 00:36:40,110 --> 00:36:41,080 validation. 746 00:36:41,080 --> 00:36:44,460 >> Por ju gjithashtu mund të kujtohet se edhe unë bëri disa gjëra misterioze në klasë duke përdorur 747 00:36:44,460 --> 00:36:47,790 Telnet dhe në fakt pretenduar të të jetë një shfletues të kihet duke dërguar get 748 00:36:47,790 --> 00:36:49,240 kërkesa për një server. 749 00:36:49,240 --> 00:36:51,030 Dhe kjo sigurisht nuk është e duke përdorur ndonjë JavaScript. 750 00:36:51,030 --> 00:36:53,290 Kjo është vetëm mua shtypni komandat e në një tastierë. 751 00:36:53,290 --> 00:36:57,410 Pra, me të vërtetë, çdo programues në kuadër të mjaftueshme rehati me web dhe HTTP 752 00:36:57,410 --> 00:37:01,690 mund të dërgojë çfarëdo të dhënave që ai apo ajo dëshiron me një server pa validation. 753 00:37:01,690 --> 00:37:05,470 Dhe në qoftë se serveri juaj nuk është gjithashtu e kontrolluar, bëri ata të më jepni një emër, është 754 00:37:05,470 --> 00:37:08,930 kjo në fakt një adresë e vlefshme email, bëri ata të zgjedhin një konvikt, ju mund të përfundojnë 755 00:37:08,930 --> 00:37:12,800 up futur fals apo vetëm të dhënat bosh në bazën e të dhënave tuaja, të cilat ndoshta 756 00:37:12,800 --> 00:37:15,450 nuk do të jetë një gjë e mirë nëse ju jeni duke supozuar se ishte atje. 757 00:37:15,450 --> 00:37:16,770 >> Pra, ky është një realitet i bezdisshëm. 758 00:37:16,770 --> 00:37:19,890 Por në përgjithësi, klient-ana validation është e madhe. 759 00:37:19,890 --> 00:37:21,810 Por kjo do të thotë dy herë më shumë punë. 760 00:37:21,810 --> 00:37:25,970 Edhe pse nuk ekzistojnë të ndryshme biblioteka, biblioteka JavaScript për 761 00:37:25,970 --> 00:37:28,830 shkallës, që e bëjnë këtë shumë, shumë më pak e një dhimbje koke. 762 00:37:28,830 --> 00:37:31,940 Dhe ju mund të ripërdorimin disa të kodit server-side, klient-side. 763 00:37:31,940 --> 00:37:35,980 Por e kuptojnë se kjo është në mënyrë tipike punë shtesë. 764 00:37:35,980 --> 00:37:36,415 Po. 765 00:37:36,415 --> 00:37:37,792 >> Audienca: Pra, nëse ne vetëm tha më pak të sigurta - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. Malan: [qesh] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Ata janë gjithmonë të vështirë ato të gjykojnë. 769 00:37:43,105 --> 00:37:44,480 >> Rob Bowden: Kjo do të janë pranuar. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. Malan: Çfarë? 771 00:37:44,810 --> 00:37:45,810 >> Rob Bowden: I krijuar këtë problem. 772 00:37:45,810 --> 00:37:46,735 Që do të kishte pranuar. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. Malan: Po. 774 00:37:47,220 --> 00:37:47,830 >> Audienca: Best. 775 00:37:47,830 --> 00:37:51,770 >> Rob Bowden: Por ne nuk e pranojmë për një të parë - 776 00:37:51,770 --> 00:37:53,630 mirë, ajo që ne po kërkoni është diçka si ju nuk keni për të 777 00:37:53,630 --> 00:37:55,270 komunikuar me server. 778 00:37:55,270 --> 00:37:58,355 Ne nuk e pranojmë vetëm më të shpejtë. 779 00:37:58,355 --> 00:38:00,080 >> Audienca: Po në lidhje me mos ringarkoni faqen? 780 00:38:00,080 --> 00:38:00,430 >> Rob Bowden: Po. 781 00:38:00,430 --> 00:38:03,000 Kjo ishte një përgjigje e pranuar. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. Malan: Çdo gjë ku kemi ndjerë ajo ishte më shumë gjasa se nuk ka gjasa 783 00:38:06,300 --> 00:38:09,780 se ju e dinte se çfarë keni qenë thënë, e cila është një ashpër 784 00:38:09,780 --> 00:38:13,500 linjë për të nxjerrë ndonjëherë. 785 00:38:13,500 --> 00:38:16,000 Duke përdorur një listë e lidhur në vend nga një grup për të mbajtur një 786 00:38:16,000 --> 00:38:17,590 renditura listën e numrave të plotë. 787 00:38:17,590 --> 00:38:21,000 Pra, një kokë ne shpesh përmendin me i lidhur Listat që motivuar tërë e tyre 788 00:38:21,000 --> 00:38:22,370 hyrje ishte që ju të merrni dinamizëm. 789 00:38:22,370 --> 00:38:23,030 Ata mund të rritet. 790 00:38:23,030 --> 00:38:23,950 Ata mund të tkurret. 791 00:38:23,950 --> 00:38:27,370 Pra, ju nuk keni për të kërcejnë përmes hoops që në fakt krijojnë më shumë memorie 792 00:38:27,370 --> 00:38:28,140 me një grup. 793 00:38:28,140 --> 00:38:30,310 Ose ju nuk keni të drejtë të thonë, vjen keq, përdoruesi. 794 00:38:30,310 --> 00:38:31,410 Array është e mbushur. 795 00:38:31,410 --> 00:38:35,850 Rritja në mënyrë dinamike të listës. 796 00:38:35,850 --> 00:38:37,210 Një dobësitë pse e listave të lidhura? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> AUDIENCA: Kjo është linear. 799 00:38:43,356 --> 00:38:45,800 Duke kërkuar në listën e lidhur është linear në vend të asaj që ju log in 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. Malan: Pikërisht. 801 00:38:46,360 --> 00:38:50,160 Duke kërkuar në listën e lidhur është linear, edhe nëse është e renditura, sepse ju mund të 802 00:38:50,160 --> 00:38:53,170 vetëm ndiqni këto crumbs bukë, këto pointers, që në fillim të listës 803 00:38:53,170 --> 00:38:53,570 në fund. 804 00:38:53,570 --> 00:38:57,970 Ju nuk mund të levave qasje të rastit dhe, në këtë mënyrë, kërko binar, edhe nëse është e 805 00:38:57,970 --> 00:39:00,740 të renditura, që ju të mund të bëjë me një grup. 806 00:39:00,740 --> 00:39:02,390 Dhe ka edhe një kosto. 807 00:39:02,390 --> 00:39:02,966 Po. 808 00:39:02,966 --> 00:39:03,800 >> Audienca: Memory joefikase? 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. Malan: Po. 810 00:39:04,130 --> 00:39:06,940 E pra, unë nuk do domosdoshmërisht thonë joefikase. 811 00:39:06,940 --> 00:39:10,110 Por kjo ju kushton më shumë memorie, sepse ju keni nevojë për 32 bit për çdo 812 00:39:10,110 --> 00:39:13,400 nyje për treguesin shtesë, në paktën për një listë e lidhur në formë individuale. 813 00:39:13,400 --> 00:39:16,660 Tani, në qoftë se ju jeni vetëm ruajtjen integers dhe ju jeni duke shtuar treguesin, kjo është 814 00:39:16,660 --> 00:39:17,830 në fakt lloj i jo-parëndësishëm. 815 00:39:17,830 --> 00:39:19,340 Është dyfishuar sasinë e kujtesës. 816 00:39:19,340 --> 00:39:22,330 Por në realitet, në qoftë se ju jeni magazinimin e një listë e lidhur e structs që mund të kenë 817 00:39:22,330 --> 00:39:25,540 8 bytes, 16 bytes, edhe më shumë se kaq, ndoshta është më pak 818 00:39:25,540 --> 00:39:26,500 i një kosto margjinale. 819 00:39:26,500 --> 00:39:28,320 Por kjo është një kosto megjithatë. 820 00:39:28,320 --> 00:39:31,880 Pra, ose të atyre që do të kemi qenë gjobë si dobësi. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Duke përdorur PHP në vend të C për të shkruar një program command-line. 823 00:39:36,100 --> 00:39:41,890 Pra këtu, është shpesh më të shpejtë të përdorë Gjuha si PHP ose Ruby ose Python. 824 00:39:41,890 --> 00:39:43,700 Ju vetëm të shpejt të hapur deri një editor teksti. 825 00:39:43,700 --> 00:39:45,900 Ju keni shumë funksione më shumë në dispozicion për ju. 826 00:39:45,900 --> 00:39:49,325 PHP ka lavaman kuzhine e funksioneve, ndërsa në C, ju 827 00:39:49,325 --> 00:39:50,420 kanë shumë, shumë pak. 828 00:39:50,420 --> 00:39:53,820 Në fakt, djema e di rrugën e vështirë që ju nuk keni tavolina hash. 829 00:39:53,820 --> 00:39:55,000 Ju nuk keni të lidhura listat. 830 00:39:55,000 --> 00:39:57,470 Nëse ju doni ata, ju duhet të zbatojë vetë. 831 00:39:57,470 --> 00:40:00,950 >> Pra, një me kokë nga PHP apo me të vërtetë ndonjë gjuha interpretohet është shpejtësia 832 00:40:00,950 --> 00:40:02,920 me të cilat ju mund të shkruani kodin. 833 00:40:02,920 --> 00:40:06,660 Por një dobësitë, e pamë këtë kur kam whipped shpejt një misspeller 834 00:40:06,660 --> 00:40:11,780 Zbatimi në leksion duke përdorur PHP, është se duke përdorur një gjuhë të interpretohet 835 00:40:11,780 --> 00:40:13,570 zakonisht është më i ngadalshëm. 836 00:40:13,570 --> 00:40:18,420 Dhe ne pamë se dukshëm me një rritet në kohë nga 0.3 në 3 sekonda 837 00:40:18,420 --> 00:40:24,440 sekonda më, për shkak të interpretimit që në fakt ndodh. 838 00:40:24,440 --> 00:40:27,060 >> Një tjetër me kokë ishte se ju nuk kanë për të hartuar. 839 00:40:27,060 --> 00:40:30,130 Pra, ajo gjithashtu përshpejton zhvillimin ra fjala, sepse ju nuk keni 840 00:40:30,130 --> 00:40:31,360 Dy hapa për drejtimin e një program. 841 00:40:31,360 --> 00:40:32,140 Ju vetëm duhet një të tillë. 842 00:40:32,140 --> 00:40:35,260 Dhe kështu kjo është shumë e imponues si. 843 00:40:35,260 --> 00:40:38,450 Duke përdorur një bazë të dhënash SQL në vend të një fotografi CSV për të ruajtur të dhënat. 844 00:40:38,450 --> 00:40:40,230 Pra SQL database është përdorur për pset7. 845 00:40:40,230 --> 00:40:42,060 Fotografi CSV ju nuk e përdorni shumë. 846 00:40:42,060 --> 00:40:45,960 Por ju e përdorur atë në mënyrë të tërthortë në pset7 si edhe duke biseduar me Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Por CSV është vetëm si një file Excel por super e thjeshtë, ku shtyllat janë 848 00:40:49,330 --> 00:40:54,010 demarked vetëm me presje brenda i një mënyrë tjetër skedar teksti. 849 00:40:54,010 --> 00:40:56,740 Dhe duke përdorur një bazë të dhënash SQL është pak më shumë bindëse. 850 00:40:56,740 --> 00:41:00,060 Është një kokë, për shkak se ju të merrni gjërat si të zgjedhur dhe futur dhe fshini. 851 00:41:00,060 --> 00:41:03,790 Dhe ju merrni, me sa duket, indekseve që MySQL dhe bazat e të dhënave të tjera, si 852 00:41:03,790 --> 00:41:07,510 Oracle, të ndërtuar për ju në kujtesë, të cilat do të thotë zgjidhni juaj ndoshta nuk është 853 00:41:07,510 --> 00:41:09,000 do të jetë e lartë lineare e deri në fund. 854 00:41:09,000 --> 00:41:11,300 Është e vërtetë do të jetë diçka si kërkim binar apo diçka 855 00:41:11,300 --> 00:41:12,520 të ngjashme në frymë. 856 00:41:12,520 --> 00:41:13,930 Pra, ata janë në përgjithësi më të shpejtë. 857 00:41:13,930 --> 00:41:16,040 >> Por një downside është se kjo është vetëm punë më shumë. 858 00:41:16,040 --> 00:41:16,730 Është më shumë përpjekje. 859 00:41:16,730 --> 00:41:18,140 Ju duhet të kuptoni bazave të të dhënave. 860 00:41:18,140 --> 00:41:18,940 Ju duhet për të vendosur atë. 861 00:41:18,940 --> 00:41:20,840 Ju duhet një server për të drejtuar që baza e të dhënave në. 862 00:41:20,840 --> 00:41:22,750 Ju duhet të kuptoni se si ta konfiguroni atë. 863 00:41:22,750 --> 00:41:24,930 Pra, këto janë vetëm këto llojet e tregtisë të humbura. 864 00:41:24,930 --> 00:41:27,860 Ndërsa një fotografi CSV, ju mund të të krijojë atë me gedit. 865 00:41:27,860 --> 00:41:28,770 Dhe ju jeni të mirë për të shkuar. 866 00:41:28,770 --> 00:41:31,550 Nuk ka kompleksiteti përtej kësaj. 867 00:41:31,550 --> 00:41:34,870 >> Duke përdorur një Trie në vend të një tabelë hash me chaining të veçantë për të ruajtur një 868 00:41:34,870 --> 00:41:37,490 fjalor i fjalëve të kujton i pset5. 869 00:41:37,490 --> 00:41:42,480 Pra, një përpiqet me kokë, në teori të paktën, është ajo? 870 00:41:42,480 --> 00:41:46,380 Koha konstante, të paktën nëse ju jeni hashing on secili i individit 871 00:41:46,380 --> 00:41:48,990 letra në një fjalë, si ju mund të ketë për pset5. 872 00:41:48,990 --> 00:41:52,720 Kjo mund të jetë pesë hashes, gjashtë hashes në qoftë se ka pesë ose gjashtë 873 00:41:52,720 --> 00:41:53,900 letra në fjalë. 874 00:41:53,900 --> 00:41:54,580 Dhe kjo është shumë e mirë. 875 00:41:54,580 --> 00:41:56,910 Dhe në qoftë se ka një kufi i sipërm se si gjatë fjalët e tua mund të jetë, kjo është 876 00:41:56,910 --> 00:41:59,320 Ora vërtetë asymptotically konstante. 877 00:41:59,320 --> 00:42:05,180 >> Ndërsa një tabelë hash me i veçantë chaining, problemin atje me atë 878 00:42:05,180 --> 00:42:09,070 lloj i strukturës së të dhënave është se Ecuria e algoritme tuaj zakonisht 879 00:42:09,070 --> 00:42:12,700 varet nga numri i gjërave tashmë në strukturën dhënave. 880 00:42:12,700 --> 00:42:15,660 Dhe kjo është padyshim rasti me zinxhirët, ku më shumë sende të vendosni 881 00:42:15,660 --> 00:42:18,800 në një tryezë të hash, më të gjatë ata zinxhirët shkoni, që do të thotë në më të keq 882 00:42:18,800 --> 00:42:21,960 rast, gjë që ju mund të kërkoni për është gjithë mënyrë në fund të një 883 00:42:21,960 --> 00:42:26,000 nga ato zinxhirët, i cili në mënyrë efektive bie në diçka lineare. 884 00:42:26,000 --> 00:42:29,450 >> Tani, në praktikë, ajo mund të absolutisht të jetë rast që një tabelë hash me 885 00:42:29,450 --> 00:42:32,820 zinxhirët është më e shpejtë se sa një që korrespondon Zbatimi Trie. 886 00:42:32,820 --> 00:42:35,570 Por kjo është për arsye të ndryshme, në mesin e të cilat mundohet të përdorë një të tërë shumë 887 00:42:35,570 --> 00:42:39,240 që mund, në fakt, gjërat ngadalshëm memorie poshtë, sepse ju nuk e merrni e bukur 888 00:42:39,240 --> 00:42:42,410 Përfitimet e diçka të quajtur caching, ku gjërat që janë të ngushtë së bashku 889 00:42:42,410 --> 00:42:45,420 në kujtim mund të arrihen shpesh më shpejt. 890 00:42:45,420 --> 00:42:48,180 Dhe ndonjëherë ju mund të dalë me një funksion të vërtetë të mirë hash. 891 00:42:48,180 --> 00:42:51,060 Edhe në qoftë se ju keni për të humbur një grimë kujtesës, ju mund të, me të vërtetë, të drejtë të 892 00:42:51,060 --> 00:42:54,430 të gjeni gjëra të shpejtë dhe nuk e si e keqe si linear. 893 00:42:54,430 --> 00:42:58,410 >> Pra me pak fjalë, nuk kishte domosdoshmërisht me ndonjë nga këto një ose edhe dy 894 00:42:58,410 --> 00:43:00,050 gjëra të veçanta ne kemi qenë në kërkim të. 895 00:43:00,050 --> 00:43:03,080 Me të vërtetë ndonjë gjë bindëse si një kokë dhe dobësitë 896 00:43:03,080 --> 00:43:04,800 përgjithësi zënë sytë tonë. 897 00:43:04,800 --> 00:43:11,840 >> Rob Bowden: Pra, për të përmbysur, ne e bëmë nuk e pranojnë më vete "më të shpejtë." Ju 898 00:43:11,840 --> 00:43:14,540 kishte për të thënë diçka për të. 899 00:43:14,540 --> 00:43:17,910 Edhe nëse ju tha teorikisht më të shpejtë, ne e dinim se ju lloj i kuptuar 900 00:43:17,910 --> 00:43:19,470 se kjo është 0 i 1. 901 00:43:19,470 --> 00:43:22,820 Dhe tabela hash, në teori, nuk eshte 0 nga 1. 902 00:43:22,820 --> 00:43:26,550 Duke përmendur asgjë rreth duhur në përgjithësi të marrë ju pikë. 903 00:43:26,550 --> 00:43:32,640 Por "të shpejtë," shumica e zgjidhjeve për Bordi i madh që po mundohet ishin 904 00:43:32,640 --> 00:43:34,990 objektivisht më e ngadaltë se zgjidhjet që ishin tavolina hash. 905 00:43:34,990 --> 00:43:37,250 Pra, më të shpejtë në vetvete nuk është me të vërtetë e vërtetë. 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 Unë jam ndoshta i vetmi që realizon kjo është se si ajo është menduar për të 909 00:43:46,686 --> 00:43:47,500 shqiptohet, apo jo? 910 00:43:47,500 --> 00:43:50,400 >> Rob Bowden: kam pasur në fakt asnjë ide. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. Malan: Është bërë kuptim në kokën time. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> Rob Bowden: Unë jam duke bërë këtë një të tillë. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Pra, kjo është ajo ku keni pasur për të nxjerrë Diagrami i ngjashëm me ty mund 916 00:44:04,243 --> 00:44:06,040 kanë parë në provimet e kaluara. 917 00:44:06,040 --> 00:44:12,200 Pra, le të vetëm të shikoni në këtë. 918 00:44:12,200 --> 00:44:18,170 Pra, nga nyjen HTML, ne kemi dy fëmijët, kreu dhe trupi. 919 00:44:18,170 --> 00:44:20,570 Pra, ne të zgjerohet - kokën dhe trupin. 920 00:44:20,570 --> 00:44:22,280 Kreu ka një tag titullin. 921 00:44:22,280 --> 00:44:23,710 Pra, ne kemi një titull. 922 00:44:23,710 --> 00:44:28,450 >> Tani, një gjë shumë njerëz harruar është se këto nyje tekst janë 923 00:44:28,450 --> 00:44:30,430 elementet brenda kësaj peme. 924 00:44:30,430 --> 00:44:36,260 Pra, këtu ne të ndodhë për të nxjerrë ato si ovals të dallojnë ata nga këto 925 00:44:36,260 --> 00:44:37,380 lloje të nyje. 926 00:44:37,380 --> 00:44:41,450 Por vini re edhe këtu kemi të lartë, mesme, dhe në fund do të përfundojë si 927 00:44:41,450 --> 00:44:42,560 nyjet tekst. 928 00:44:42,560 --> 00:44:46,250 Pra, duke harruar ato ishte disi një gabim të përbashkët. 929 00:44:46,250 --> 00:44:48,770 >> Trupi ka tre fëmijë - këto tre divs. 930 00:44:48,770 --> 00:44:53,340 Pra div, div, div dhe pastaj teksti Fëmijët nyje të atyre divs. 931 00:44:53,340 --> 00:44:55,900 Kjo është shumë e shumë të për atë pyetje. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. Malan: Dhe kjo vlen të përmendet, edhe pse ne nuk e ndalem në këto 933 00:44:57,860 --> 00:45:01,040 Detajet në kohë kemi shpenzuar në JavaScript, që urdhri ka, në 934 00:45:01,040 --> 00:45:02,290 fakt, çështje teknikisht. 935 00:45:02,290 --> 00:45:06,330 Pra, nëse kreu vjen para trupit në HTML, atëherë ajo duhet të paraqitet për 936 00:45:06,330 --> 00:45:08,860 majtë të trupit në DOM aktuale. 937 00:45:08,860 --> 00:45:12,265 Kjo tij është, në përgjithësi, vetëm FYI, diçka që quhet mënyrë dokument, ku 938 00:45:12,265 --> 00:45:13,260 kjo ka rëndësi. 939 00:45:13,260 --> 00:45:17,470 Dhe në qoftë se keni qenë zbatimit të një parser, një program që lexon HTML në ndërtimin e 940 00:45:17,470 --> 00:45:20,960 deri pemë në kujtesën, të jetë i sinqertë, kjo është intuitive ndoshta ajo që ju 941 00:45:20,960 --> 00:45:24,720 të bëjë gjithsesi - lart poshtë, majta në të djathtë. 942 00:45:24,720 --> 00:45:26,116 >> Rob Bowden: Pyetjet për këtë? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 A duhet të bëjë një tjetër? 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. Malan: Sigurisht. 946 00:45:32,380 --> 00:45:33,810 >> Rob Bowden: OK. 947 00:45:33,810 --> 00:45:39,320 Pra, kjo është tampon muar Pyetja sulm. 948 00:45:39,320 --> 00:45:43,740 Gjëja kryesore për të njohur këtu është, mirë, se si mund një mashtrim kundërshtar 949 00:45:43,740 --> 00:45:46,170 ky program në ekzekutimin e Kodi arbitrare? 950 00:45:46,170 --> 00:45:51,860 Pra argv1, linja e parë e komandës Argumenti për këtë program, që mund të jetë 951 00:45:51,860 --> 00:45:53,920 në mënyrë arbitrare të gjatë. 952 00:45:53,920 --> 00:45:59,160 Por këtu ne jemi duke përdorur memcpy të kopje argv1, e cila këtu është bar. 953 00:45:59,160 --> 00:46:00,165 Ne jemi duke kaluar atë si argument. 954 00:46:00,165 --> 00:46:02,050 Dhe kështu që është duke marrë në emrin bar. 955 00:46:02,050 --> 00:46:08,040 >> Pra, ne jemi duke memcpying bar në këtë tampon c. 956 00:46:08,040 --> 00:46:09,400 Sa bytes jemi ne kopjuar? 957 00:46:09,400 --> 00:46:14,040 E pra megjithatë shumë bytes bar ndodh të të përdorur, gjatësinë e këtij argumenti. 958 00:46:14,040 --> 00:46:17,930 Por c është vetëm 12 bytes të gjerë. 959 00:46:17,930 --> 00:46:22,280 Pra, në qoftë se ne të shkruani një argument të command line kjo është më e gjatë se 12 bytes, ne jemi 960 00:46:22,280 --> 00:46:25,470 do të del nga shtrati këtë tampon të veçantë. 961 00:46:25,470 --> 00:46:31,000 Tani, si mund të gënjejnë një kundërshtari programit në ekzekutimin kodin arbitrare? 962 00:46:31,000 --> 00:46:34,910 >> Pra, mos harroni se këtu kryesor është duke bërë thirrje foo. 963 00:46:34,910 --> 00:46:37,340 Dhe kështu pastaj thirrjet kryesore Foo. 964 00:46:37,340 --> 00:46:40,408 Le të nxjerrë këtë. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Pra, ne kemi turrë tonë. 967 00:46:46,990 --> 00:46:49,090 Dhe kryesor ka një kornizë rafte në fund. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Në disa pika, thirrjet kryesore Foo. 970 00:46:53,250 --> 00:46:55,390 E pra, menjëherë, thirrjet kryesore Foo. 971 00:46:55,390 --> 00:46:57,130 Dhe kështu foo merr kuadrin e vet të rafte. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Tani, në disa pika, foo do të kthehen. 974 00:47:02,220 --> 00:47:06,810 Dhe shkoi kthimit foo, ne kemi nevojë të dimë në çfarë linjë e kodit brenda ne kryesore 975 00:47:06,810 --> 00:47:10,610 ishin në mënyrë që të dini se ku ne duhet të rifillojë në kryesore. 976 00:47:10,610 --> 00:47:13,100 Ne mund të telefononi foo nga një i tërë bandë e vende të ndryshme. 977 00:47:13,100 --> 00:47:14,620 Si e dimë se ku të kthehen? 978 00:47:14,620 --> 00:47:16,460 E pra, ne kemi nevojë për të ruajtur atë diku. 979 00:47:16,460 --> 00:47:23,010 >> Pra, diku të drejtë rreth këtu, ne dyqan ku ne duhet të kthehet në një herë 980 00:47:23,010 --> 00:47:24,070 kthimit foo. 981 00:47:24,070 --> 00:47:26,350 Dhe kjo është adresa e kthimit. 982 00:47:26,350 --> 00:47:30,490 Pra, si një kundërshtar mund të përfitojnë e ky është fakti se 983 00:47:30,490 --> 00:47:37,550 kjo tampon c është ruajtur, le të thonë, këtu është c. 984 00:47:37,550 --> 00:47:39,690 Pra, ne kemi marrë 12 bytes për të c. 985 00:47:39,690 --> 00:47:40,540 Kjo është c. 986 00:47:40,540 --> 00:47:43,030 Dhe kjo është unaza e rafte Foo-së. 987 00:47:43,030 --> 00:47:49,970 Pra, në qoftë se përdoruesi hyn me qëllim të keq më shumë bytes se 12 ose ata hyjnë në një komandë 988 00:47:49,970 --> 00:47:54,570 Argumenti linjë kjo është më shumë se 12 karaktere, atëherë ne do të 989 00:47:54,570 --> 00:47:57,540 del nga shtrati këtë tampon. 990 00:47:57,540 --> 00:47:59,910 >> Ne mund të mbajë. 991 00:47:59,910 --> 00:48:02,220 Dhe në një pikë, ne do të shkojmë larg mjaftueshme që të fillojmë 992 00:48:02,220 --> 00:48:05,120 overwriting këtë adresë e kthimit. 993 00:48:05,120 --> 00:48:08,310 Pra, një herë ne prishësh adresë e kthimit, kjo do të thotë se kur foo 994 00:48:08,310 --> 00:48:14,220 kthimit, ne jemi duke u kthyer në kudo përdoruesit me qëllim të keq është e thënë atë nga 995 00:48:14,220 --> 00:48:19,490 çfarëdo vlerë ajo hyri, me çfarëdo karaktere përdoruesit hyri. 996 00:48:19,490 --> 00:48:24,320 Dhe kështu në qoftë se përdoruesi qëllim të keq është duke u veçanërisht i zgjuar, ai mund të ketë këtë 997 00:48:24,320 --> 00:48:29,255 kthehet diku në printDef funksioni ose diku në malloc 998 00:48:29,255 --> 00:48:31,830 funksion, vetëm kudo arbitrare. 999 00:48:31,830 --> 00:48:38,420 >> Por edhe më e zgjuar është ajo nëse ai ka përdoruesit të kthehet në të drejtë këtu. 1000 00:48:38,420 --> 00:48:41,920 Dhe pastaj ju filloni ekzekutimin këto si rreshta të kodit. 1001 00:48:41,920 --> 00:48:46,610 Pra, në këtë pikë, përdoruesi mund të hyjë çdo gjë që ai dëshiron në këtë rajon. 1002 00:48:46,610 --> 00:48:52,210 Dhe ai ka kontroll të plotë mbi programin tuaj. 1003 00:48:52,210 --> 00:48:53,460 Pyetjet për se? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Pra, pyetja tjetër është i plotë reimplementation i foo në një mënyrë të tillë 1006 00:49:00,970 --> 00:49:02,620 se kjo nuk është më e ndjeshme. 1007 00:49:02,620 --> 00:49:03,870 >> Pra, ka disa mënyra ju mund të ketë bërë këtë. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Ne ende kemi c vetëm duke qenë i gjatësisë 12. 1010 00:49:13,330 --> 00:49:16,480 Ju mund të ketë ndryshuar këtë si pjesë solucion tuaj. 1011 00:49:16,480 --> 00:49:18,930 Ne gjithashtu shtoi një kontroll për të bërë sigurt bar nuk ishte null. 1012 00:49:18,930 --> 00:49:24,460 Edhe pse ju nuk duhet që për kredi të plotë. 1013 00:49:24,460 --> 00:49:27,690 Pra, ne jemi duke kontrolluar parë Gjatësia varg bar. 1014 00:49:27,690 --> 00:49:31,650 Në qoftë se kjo është më e madhe se 12, atëherë në fakt nuk bëjnë kopje. 1015 00:49:31,650 --> 00:49:33,010 Pra, kjo është një mënyrë e fiksimin e tij. 1016 00:49:33,010 --> 00:49:36,750 >> Një mënyrë tjetër e fiksimin e tij është në vend të që ka c jetë vetëm i gjatësi 12, e kanë atë 1017 00:49:36,750 --> 00:49:39,310 të jetë i gjatësi strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Një mënyrë tjetër e fiksimin e tij është që në fakt vetëm të kthehen. 1019 00:49:43,370 --> 00:49:46,690 Pra, nëse ju kishte vetëm gotten shpëtoj të gjithë këtë, në qoftë se ju kishte vetëm të fshirë të gjitha 1020 00:49:46,690 --> 00:49:51,830 rreshta të kodit, ju do të keni marrë kredi të plotë, pasi këtë funksion 1021 00:49:51,830 --> 00:49:54,150 nuk në të vërtetë nuk arrijnë asgjë. 1022 00:49:54,150 --> 00:49:57,650 Është kopjimi command line Argumenti në një grup në 1023 00:49:57,650 --> 00:49:59,960 kornizë e saj lokale rafte. 1024 00:49:59,960 --> 00:50:01,310 Dhe pastaj gjë po kthehet. 1025 00:50:01,310 --> 00:50:04,020 Dhe çfarëdo qoftë ajo realizohet është zhdukur. 1026 00:50:04,020 --> 00:50:09,740 Kështu që kthimi ishte gjithashtu një e mjaftueshme mënyrë për të marrë kredi të plotë. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. Malan: Jo mjaft fryma e pyetje por e pranueshme për 1028 00:50:13,425 --> 00:50:15,580 spekulim megjithatë. 1029 00:50:15,580 --> 00:50:18,260 >> Rob Bowden: Pyetjet për ndonjë nga kjo? 1030 00:50:18,260 --> 00:50:22,270 Një gjë që ju të paktën nevojshme për hartimin e kanë kodin. 1031 00:50:22,270 --> 00:50:24,810 Pra, edhe pse teknikisht nuk jeni e ndjeshme nëse kodi juaj nuk ka 1032 00:50:24,810 --> 00:50:29,130 përpilojnë, ne nuk e pranojmë këtë. 1033 00:50:29,130 --> 00:50:31,350 Nuk ka pyetje? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. Malan: A doni për të thënë këtë titull? 1036 00:50:34,580 --> 00:50:37,230 >> Rob Bowden: Jo. 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. Malan: Pra, në këtë, kjo ishte ose një lajm i mirë apo lajm i keq. 1038 00:50:40,470 --> 00:50:43,870 Kjo është fjalë për fjalë të njëjtin problem si quiz e parë. 1039 00:50:43,870 --> 00:50:46,140 Dhe kjo është pothuajse e njëjtë Problemi si pset1. 1040 00:50:46,140 --> 00:50:49,980 Por kjo është thjeshtëzuar me qëllim që të jetë i një piramidë të thjeshtë, e që mund të jenë të 1041 00:50:49,980 --> 00:50:52,330 zgjidhet me një pak më të përsëritje të thjeshtë. 1042 00:50:52,330 --> 00:50:55,680 Dhe me të vërtetë, ajo që ne po merrnin në këtu nuk ishte aq shumë logjika, 1043 00:50:55,680 --> 00:50:58,100 sepse ndoshta, në këtë pikë, ju jeni më të rehatshme se keni qenë 1044 00:50:58,100 --> 00:51:01,850 në javë me një për sythe apo pse sythe, por me të vërtetë të vë në lojë përveç se 1045 00:51:01,850 --> 00:51:04,790 ju jeni pak të kënaqur me Nocioni që PHP nuk është vetëm për atë 1046 00:51:04,790 --> 00:51:05,290 programimit. 1047 00:51:05,290 --> 00:51:07,820 Ajo në fakt mund të përdoret si gjuhë e për të shkruar programet e shkruar e komandave. 1048 00:51:07,820 --> 00:51:10,060 >> Dhe me të vërtetë, kjo është ajo që ne ishim duke u përpjekur të tërheq vëmendjen tuaj për të. 1049 00:51:10,060 --> 00:51:12,060 Ky është një program PHP command line. 1050 00:51:12,060 --> 00:51:16,690 Pra C kodin këtu, ndërsa i saktë në C, nuk e korrigjuar për PHP. 1051 00:51:16,690 --> 00:51:17,940 Por kodi në të vërtetë është e njëjtë. 1052 00:51:17,940 --> 00:51:21,720 Nëse ju krahasoni zgjidhje për Quiz 0 kundër Quiz 1, ju do të gjeni se 1053 00:51:21,720 --> 00:51:25,630 kjo është pothuajse identike, përveç disa shenja të dollarit dhe për 1054 00:51:25,630 --> 00:51:27,250 Mungesa e një lloji të dhënave. 1055 00:51:27,250 --> 00:51:31,720 Në veçanti, në qoftë se ne të marrë një sy këtu, ju do të shihni se ne iterate, në këtë 1056 00:51:31,720 --> 00:51:33,730 rast, nga 1 deri me 7. 1057 00:51:33,730 --> 00:51:34,910 >> Ne mund të ketë bërë atë indeks 0. 1058 00:51:34,910 --> 00:51:37,320 Por ndonjëherë, unë mendoj se është vetëm mendërisht më të lehtë për të menduar për gjëra të 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 Nëse doni një bllok, atëherë dy blloqe, pastaj tre, pastaj 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot shtatë. 1062 00:51:41,770 --> 00:51:45,960 Ne kemi j duke u nisur në 1 dhe pastaj llogarit deri të i. 1063 00:51:45,960 --> 00:51:48,150 Dhe çdo gjë këtu është identike. 1064 00:51:48,150 --> 00:51:49,790 Por, vlen të përmendet janë disa gjëra. 1065 00:51:49,790 --> 00:51:53,230 Ne ju japim këto dy rreshta, kjo e parë një, i quajtur goofily si një mesele 1066 00:51:53,230 --> 00:51:54,560 për zhurmë të mprehtë. 1067 00:51:54,560 --> 00:51:58,770 Dhe kjo vetëm përcakton rrugën, folder, në të cilin një program mund të jetë 1068 00:51:58,770 --> 00:52:02,160 gjetur se ju doni të përdorni për të interpretuar këtë fotografi. 1069 00:52:02,160 --> 00:52:04,710 >> Dhe pastaj vija e pas kësaj, të Sigurisht, do të thotë të hyjë mënyrën e PHP. 1070 00:52:04,710 --> 00:52:07,740 Dhe vija në fund shumë nënkupton mënyrën dalje PHP. 1071 00:52:07,740 --> 00:52:09,740 Dhe kjo punon, në përgjithësi, me interpretuar gjuhë. 1072 00:52:09,740 --> 00:52:14,370 Kjo është lloj i bezdisshëm, nëse ju shkruani një program në një skedar të quajtur foo.php. 1073 00:52:14,370 --> 00:52:17,320 Dhe pastaj përdoruesit tuaj keni të drejtë të mos harroni, OK, për të drejtuar këtë program, unë 1074 00:52:17,320 --> 00:52:22,320 duhet të tipit "foo.php hapësirë ​​php." Lloj i bezdisshëm, nëse asgjë tjetër. 1075 00:52:22,320 --> 00:52:25,270 Dhe ajo gjithashtu tregon se programi juaj është shkruar në PHP, e cila nuk është e gjitha 1076 00:52:25,270 --> 00:52:27,060 që ndriçues për përdoruesit. 1077 00:52:27,060 --> 00:52:30,100 >> Kështu që ju mund të hiqni. Php krejt kujtohet nga leksioni. 1078 00:52:30,100 --> 00:52:35,690 Dhe në të vërtetë ju mund të bëni. / Foo nëse ju keni chmodded atë duke e bërë atë 1079 00:52:35,690 --> 00:52:36,500 ekzekutueshëm. 1080 00:52:36,500 --> 00:52:39,630 Pra chmod a + x foo do të kishte bërë atë. 1081 00:52:39,630 --> 00:52:41,460 Dhe në qoftë se ju të shtoni mesele këtu. 1082 00:52:41,460 --> 00:52:45,320 Por me të vërtetë, problemi ishte duke u në shtypjen nga diçka si kjo. 1083 00:52:45,320 --> 00:52:51,100 Jo HTML, jo C-kod me siguri, vetëm disa PHP. 1084 00:52:51,100 --> 00:52:54,100 Pra, Milo pastaj u kthye në problem të 25. 1085 00:52:54,100 --> 00:52:58,050 Dhe në 25, ju janë dhënë në vijim Kodi skelet, i cili ishte një 1086 00:52:58,050 --> 00:52:59,730 faqe shumë e thjeshtë web. 1087 00:52:59,730 --> 00:53:04,230 Dhe pjesa me lëng HTML-i mençur ishte poshtë ketu, ku ne kemi brenda trupit 1088 00:53:04,230 --> 00:53:09,160 një formë që ka ID unike e inputeve brenda të cilave ishte dy inputet, një 1089 00:53:09,160 --> 00:53:11,950 me një ide të emrit, një me një ide të button. 1090 00:53:11,950 --> 00:53:14,240 >> I pari ishte teksti lloji, dytë të tipit të paraqesë. 1091 00:53:14,240 --> 00:53:16,930 Dhe kështu që ju lamë, në të vërtetë, më shumë përbërësit se ju e nevojshme, vetëm në mënyrë të 1092 00:53:16,930 --> 00:53:19,230 ju djema pasur mundësitë me të cilat për të zgjidhur këtë problem. 1093 00:53:19,230 --> 00:53:21,130 Ju nuk keni nevojë në mënyrë rigoroze të gjitha këto kartat e identitetit. 1094 00:53:21,130 --> 00:53:23,580 Por kjo ju mundëson për të zgjidhur ajo në mënyra të ndryshme. 1095 00:53:23,580 --> 00:53:27,050 Dhe deri në krye, vëreni se Qëllimi ishte për të shkaktuar 1096 00:53:27,050 --> 00:53:27,960 një dritare si kjo - 1097 00:53:27,960 --> 00:53:28,780 Përshëndetje, Milo! - 1098 00:53:28,780 --> 00:53:31,270 për të pop në shfletuesin duke përdorur super e thjeshtë, nëse 1099 00:53:31,270 --> 00:53:33,190 nuk i shëmtuar, funksion alarm. 1100 00:53:33,190 --> 00:53:37,480 Dhe kështu, në fund të fundit, kjo boils poshtë konceptualisht të disi dëgjuar për 1101 00:53:37,480 --> 00:53:41,290 parashtresat e klientit-anën formë , Jo-server side, disi 1102 00:53:41,290 --> 00:53:45,640 përgjigjur kësaj dorëzimit nga grabbing vlerën që përdoruesi shtypur 1103 00:53:45,640 --> 00:53:50,120 në të fushës emrit, dhe pastaj shfaqur atë në trupin e nje alarm. 1104 00:53:50,120 --> 00:53:53,460 >> Pra, një mënyrë ju mund ta bëni këtë është me jQuery, e cila duket pak 1105 00:53:53,460 --> 00:53:56,880 syntactically hutues në fillim. 1106 00:53:56,880 --> 00:54:00,760 Ju mund ta bëni këtë me kod të pastër DOM - document.getelement nga ID. 1107 00:54:00,760 --> 00:54:02,530 Por le të marrë një sy në këtë version. 1108 00:54:02,530 --> 00:54:05,110 Unë kam një çift të rëndësishme linja e parë. 1109 00:54:05,110 --> 00:54:09,460 Pra një, ne kemi këtë linjë, e cila është identike me atë që ju mund të keni parë 1110 00:54:09,460 --> 00:54:13,830 në, unë besoj, form2.html nga klasa në javën e 9. 1111 00:54:13,830 --> 00:54:16,960 Dhe kjo është vetëm duke thënë, ekzekutuar kodi në vazhdim, kur 1112 00:54:16,960 --> 00:54:18,430 dokumenti është gati. 1113 00:54:18,430 --> 00:54:21,770 Duke qenë e rëndësishme vetëm për shkak Faqet HTML lexohen lartë të 1114 00:54:21,770 --> 00:54:23,280 fund, e majta në të djathtë. 1115 00:54:23,280 --> 00:54:27,910 >> Dhe për këtë arsye, në qoftë se ju të përpiqet të bëjë diçka në kodin e deri këtu në disa DOM 1116 00:54:27,910 --> 00:54:31,560 element, disa HTML tag, që është poshtë këtu, ju jeni duke bërë atë shumë shpejt, 1117 00:54:31,560 --> 00:54:34,220 sepse kjo ka as edhe janë lexuar në kujtesë. 1118 00:54:34,220 --> 00:54:37,740 Pra, duke thënë se këtë document.ready linjë, ne jemi duke thënë, 1119 00:54:37,740 --> 00:54:39,040 këtu e disa kodi, shfletues. 1120 00:54:39,040 --> 00:54:42,440 Por nuk do të ekzekutojë këtë deri sa të gjithë dokumenti është gati, se është DOM 1121 00:54:42,440 --> 00:54:44,320 pemë ekziston në kujtesën. 1122 00:54:44,320 --> 00:54:47,110 Kjo është pak më drejtpërdrejtë, në qoftë se një syntactically 1123 00:54:47,110 --> 00:54:51,890 pak e ndryshme, ku unë jam duke thënë, grab element HTML unik i të cilit 1124 00:54:51,890 --> 00:54:53,560 Identifikuesi është inputeve. 1125 00:54:53,560 --> 00:54:56,220 Kjo është ajo që tag hash tregon, ID unike. 1126 00:54:56,220 --> 00:54:58,070 Dhe atëherë unë jam duke e quajtur. Paraqesë. 1127 00:54:58,070 --> 00:55:01,660 >> Pra. Paraqesë këtu është një funksion, përndryshe i njohur si një metodë, kjo është 1128 00:55:01,660 --> 00:55:05,850 në brendësi të objektit në të dorës së majtë Ana atje që unë nuk e theksoj. 1129 00:55:05,850 --> 00:55:08,990 Pra, nëse ju mendoni se e inputeve si një objekt në kujtim - dhe në të vërtetë është. 1130 00:55:08,990 --> 00:55:10,440 Kjo është një nyje në një pemë - 1131 00:55:10,440 --> 00:55:16,580 . Paraqesë mjete kur kjo formë me ky ID është dorëzuar, ekzekutuar 1132 00:55:16,580 --> 00:55:17,700 kodi në vazhdim. 1133 00:55:17,700 --> 00:55:20,290 Unë nuk e kujdesit çfarë emri i funksion është unë jam ekzekutimin. 1134 00:55:20,290 --> 00:55:23,760 Kështu që këtu unë jam duke përdorur, si më parë, ajo që është quajtur funksioni lambda ose një 1135 00:55:23,760 --> 00:55:24,720 funksion anonim. 1136 00:55:24,720 --> 00:55:27,640 Kjo nuk është aspak intelektualisht interesante të tjera se ajo nuk ka emër, 1137 00:55:27,640 --> 00:55:30,220 e cila është e mirë në qoftë se ju jeni vetëm ndonjëherë do të thërrasë atë një herë. 1138 00:55:30,220 --> 00:55:34,490 Dhe brenda atje unë në fakt të trajtuar dorëzimin e formularit. 1139 00:55:34,490 --> 00:55:36,810 I pari deklaroj një ndryshore quajtur vlera. 1140 00:55:36,810 --> 00:55:40,610 Dhe pastaj çfarë është efekti i kësaj theksoi pjesë këtu tani? 1141 00:55:40,610 --> 00:55:44,755 Çfarë do të bëni në një Niveli i lartë për mua? 1142 00:55:44,755 --> 00:55:48,539 >> Audienca: Ajo merr vlerën që Përdoruesi nuk ka në HTML më poshtë. 1143 00:55:48,539 --> 00:55:50,920 Ajo merr atë ID dhe pastaj gjen vlerën e saj. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. Malan: Pikërisht. 1145 00:55:51,590 --> 00:55:54,300 Ai grabs nyjen, të cilit unik Identifikuesi është emri. 1146 00:55:54,300 --> 00:55:56,900 Ajo merr vlera në të, e cila është, me sa duket, ajo që përdoruesi 1147 00:55:56,900 --> 00:55:58,190 shtypur atë ose veten. 1148 00:55:58,190 --> 00:56:01,020 Dhe atëherë ajo ruan se në ndryshore të quajtur vlera. 1149 00:56:01,020 --> 00:56:03,720 Si një mënjanë, ju mund të ketë edhe bërë këtë pak ndryshe. 1150 00:56:03,720 --> 00:56:09,250 Krejtësisht e pranueshme duke bërë diçka Vlera gënjeshtër var merr 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 Dhe kjo është arsyeja pse ajo është pak lodhshme për të mos përdorin jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Emër". Vlerë. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Pra krejtësisht e pranueshme. 1157 00:56:19,620 --> 00:56:22,770 Mënyra të ndryshme për të bërë këtë. jQuery vetëm ka tendencë të jetë pak më të ngjeshur dhe 1158 00:56:22,770 --> 00:56:25,230 patjetër më popullore në mesin e programuesit. 1159 00:56:25,230 --> 00:56:27,590 >> Tani, unë jam duke bërë një grimë e një mendje e shëndoshë kontrolloni, sepse në problem 1160 00:56:27,590 --> 00:56:30,820 Deklarata e kemi thënë në mënyrë të qartë, në qoftë se përdorues nuk e ka shtypur ende tij ose të saj 1161 00:56:30,820 --> 00:56:32,580 emrin, nuk tregojnë një alarme. 1162 00:56:32,580 --> 00:56:35,390 Por ju mund të kontrolloni për këtë, vetëm me kontrolluar për vargun e zbrazët për një 1163 00:56:35,390 --> 00:56:37,850 quote-mbyll thonjëzat në qoftë se ka asgjë në të vërtetë atje. 1164 00:56:37,850 --> 00:56:40,880 Por nëse kjo nuk është e barabartë me kuotë-mbyll thonjëzat, Unë dua të telefononi alarme. 1165 00:56:40,880 --> 00:56:45,610 Dhe pjesa më interesante këtu është se ne jemi duke përdorur operatorin plus, e cila 1166 00:56:45,610 --> 00:56:48,130 bën çfarë në JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Lidh. 1168 00:56:48,740 --> 00:56:50,690 Pra, kjo është si PHPs dot operatorit. 1169 00:56:50,690 --> 00:56:52,820 E njëjta ide, sintaksa pak të ndryshme. 1170 00:56:52,820 --> 00:56:55,280 Dhe unë jam vetëm duke krijuar vargun që ju keni parë në ekran shtënë - 1171 00:56:55,280 --> 00:56:57,750 Përshëndetje, kështu dhe kështu. 1172 00:56:57,750 --> 00:56:59,200 >> Dhe pastaj detaj i fundit është ky. 1173 00:56:59,200 --> 00:57:04,970 Pse kthehen brenda të rreme e këtij funksioni anonim? 1174 00:57:04,970 --> 00:57:07,420 >> Audienca: Nuk ka vlerë. 1175 00:57:07,420 --> 00:57:09,380 Ju vënë atë në formë. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Ai vetëm thotë, në qoftë se vlera nuk është barabartë me bosh, pastaj të bëjë atë. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Nuk ishte një bosh në atë nënshtrim. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. Malan: OK. 1181 00:57:21,170 --> 00:57:21,640 Kujdes pse. 1182 00:57:21,640 --> 00:57:22,830 Nuk ka askush tjetër këtu. 1183 00:57:22,830 --> 00:57:25,510 Dhe se kthimi i rremë është jashtë e nëse kushtet. 1184 00:57:25,510 --> 00:57:29,470 Pra, kjo linjë të theksuar, kthimit të rreme, ekzekuton pa marrë parasysh çfarë, kur 1185 00:57:29,470 --> 00:57:32,310 formë është dorëzuar. 1186 00:57:32,310 --> 00:57:36,810 Çfarë do të kthehej brenda të rreme të kësaj Mbajtësi i ngjarjeve, siç është quajtur, 1187 00:57:36,810 --> 00:57:38,450 ngjarja në fjalë duke qenë nënshtrim? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> Audienca: Për shkak se ndodh vetëm një herë. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. Malan: Vetëm ndodh një herë. 1191 00:57:45,320 --> 00:57:46,821 Jo fare. 1192 00:57:46,821 --> 00:57:47,292 Po? 1193 00:57:47,292 --> 00:57:50,589 >> Audienca: Ajo parandalon formularin nga dorëzimin në sjelljen e parazgjedhur, 1194 00:57:50,589 --> 00:57:52,480 e cila do ta bënte të rifreskoni faqe. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. Malan: Pikërisht. 1196 00:57:53,110 --> 00:57:56,490 Kështu që unë jam mbingarkesat termi paraqesë këtu, sepse unë jam duke thënë, formë është 1197 00:57:56,490 --> 00:57:57,670 duke u dorëzuar. 1198 00:57:57,670 --> 00:58:02,240 Por si ju sugjeroj, nuk është në të vërtetë është dorëzuar në mënyrë të vërtetë HTTP. 1199 00:58:02,240 --> 00:58:06,870 Kur ju klikoni Submit, për shkak të ynë mbajtës onsubmit, ne jemi duke intercepting 1200 00:58:06,870 --> 00:58:09,040 se paraqitja formë mënyrë që të flasin. 1201 00:58:09,040 --> 00:58:11,290 Ne jemi duke pastaj duke bërë gjë tonë me kodin JavaScript. 1202 00:58:11,290 --> 00:58:14,070 Por unë jam kthyer qëllimisht i rremë, sepse ajo që unë nuk dua të ndodhë një 1203 00:58:14,070 --> 00:58:18,430 ndarje të dytë më vonë është për të gjithë formën vetë që do të paraqitet në web 1204 00:58:18,430 --> 00:58:22,800 server me çifte kyçe vlerë duke ndryshuar URL të jetë diçka si 1205 00:58:22,800 --> 00:58:26,180 q = macet apo çfarëdo që kemi bërë, për shembull, në klasë. 1206 00:58:26,180 --> 00:58:29,640 Unë nuk dua që kjo të ndodhë, sepse nuk ka dëgjuar për këtë server 1207 00:58:29,640 --> 00:58:30,690 formë nënshtrim. 1208 00:58:30,690 --> 00:58:32,320 Kjo është bërë thjesht në kodin JavaScript. 1209 00:58:32,320 --> 00:58:35,760 Dhe kjo është arsyeja pse unë nuk kanë edhe një veprim atribut në formularin tim, sepse unë 1210 00:58:35,760 --> 00:58:38,870 nuk kanë ndërmend që kjo të ndonjëherë shkojnë në server. 1211 00:58:38,870 --> 00:58:40,780 >> Pra, është duke u dorëzuar. 1212 00:58:40,780 --> 00:58:44,340 Por ne jemi të ndërprejnë atë formë Dorëzimi dhe parandalimin default 1213 00:58:44,340 --> 00:58:47,477 sjellje, e cila është të vërtetë të shkojnë të gjithë rrugën në server. 1214 00:58:47,477 --> 00:58:48,730 >> Audienca: Pra, duke e mbajtur atë të klientit-side. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. Malan: Mbajtja ajo klient-side. 1216 00:58:49,780 --> 00:58:51,030 Saktësisht e drejtë. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Next up ishte tim 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 Pra, kjo pyetja e parë ishte në përgjithësi përafërt për njerëzit. 1222 00:59:04,990 --> 00:59:07,270 Edhe pse ato më vonë shkoi mirë. 1223 00:59:07,270 --> 00:59:12,260 Kështu që ju duhet të zgjidhni të dhënat e saktë Llojet për të dyja këto kolona. 1224 00:59:12,260 --> 00:59:17,750 Dhe të dyja këto kanë disa gjëra për ata që 1225 00:59:17,750 --> 00:59:20,620 të bëjë zgjedhje të vështira. 1226 00:59:20,620 --> 00:59:24,430 Pra, int nuk ishte e vlefshme shkruani për numrin. 1227 00:59:24,430 --> 00:59:29,410 Arsyeja është një llogari me 12 shifra Numri, një int nuk është mjaft e madhe për të 1228 00:59:29,410 --> 00:59:31,070 dyqan shifra totale. 1229 00:59:31,070 --> 00:59:36,570 Pra, një zgjedhje e vlefshme do të ishte një i madh int nëse ju ndodh që të dini se. 1230 00:59:36,570 --> 00:59:42,090 Një tjetër zgjedhje mund të ketë qenë një fushë char e gjatësi 12. 1231 00:59:42,090 --> 00:59:44,560 Pra, ose të atyre që do të kishte punuar. 1232 00:59:44,560 --> 00:59:46,100 Int nuk do. 1233 00:59:46,100 --> 00:59:50,170 >> Tani, bilanci, mendoj se përsëri në pset7. 1234 00:59:50,170 --> 00:59:59,540 Pra, ne në mënyrë specifike të përdorura decimal të të ruajtur vlerën e aksioneve ose - 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 Ne kemi përdorur decimal të ruajtur sasinë e të holla që përdoruesi aktualisht ka. 1238 01:00:05,710 --> 01:00:10,950 Pra arsyeja që ne të bërë këtë është sepse, mos harroni, gjithandej. 1239 01:00:10,950 --> 01:00:12,480 Nuk ka pikë lundrues në saktësi. 1240 01:00:12,480 --> 01:00:18,200 Ajo nuk mund saktësisht të ruajtur të holla Vlerat si ne duam këtu. 1241 01:00:18,200 --> 01:00:23,630 Pra dhjetor është në gjendje për të pikërisht dyqan diçka për të, të themi, dy vende dhjetore. 1242 01:00:23,630 --> 01:00:27,630 Kjo është arsyeja pse bilanc, ne duam atë të jetë decimal dhe nuk noton. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. Malan: Dhe gjithashtu, shumë, edhe pse ajo mund të ketë qenë i zgjuar në të tjera 1244 01:00:30,230 --> 01:00:32,760 kontekste të menduar, ndoshta kjo është një shans për një int. 1245 01:00:32,760 --> 01:00:34,420 Unë vetëm do të mbajnë gjurmët e gjërat në pennies. 1246 01:00:34,420 --> 01:00:38,670 Sepse ne në mënyrë të qartë treguan default vlera të qenë 100.00, që 1247 01:00:38,670 --> 01:00:40,380 do të thotë se mund të jetë vetëm një int. 1248 01:00:40,380 --> 01:00:45,310 Dhe një tjetër finesë shumë me numër ishte se ajo nuk kishte për qëllim 1249 01:00:45,310 --> 01:00:46,180 të jetë një pyetje mashtrim. 1250 01:00:46,180 --> 01:00:49,860 Por kujtojmë se një int në MySQL, si në C, të paktën në 1251 01:00:49,860 --> 01:00:51,440 aplikim, është 32-bit. 1252 01:00:51,440 --> 01:00:53,960 Dhe, edhe pse ne nuk presim nga ju që të e di saktësisht se sa shifrat që 1253 01:00:53,960 --> 01:00:56,910 do të thotë, më kujtohet se numri më i madh ju mund të përfaqësojnë potencialisht 1254 01:00:56,910 --> 01:01:00,710 me një numër të 32-bit është afërsisht ajo? 1255 01:01:00,710 --> 01:01:02,760 >> E sa nuk kemi gjithmonë të themi? 1256 01:01:02,760 --> 01:01:04,530 2 deri 32, e cila është ajo afërsisht? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Ju nuk duhet të dinë saktësisht. 1259 01:01:08,780 --> 01:01:10,580 Por përafërsisht është e dobishme në jetë. 1260 01:01:10,580 --> 01:01:12,200 Kjo është afërsisht 4 miliard. 1261 01:01:12,200 --> 01:01:14,430 Pra, ne kemi thënë se disa herë. 1262 01:01:14,430 --> 01:01:16,360 Unë e di unë kam thënë se disa herë. 1263 01:01:16,360 --> 01:01:17,670 Dhe kjo është afërsisht 4 miliard. 1264 01:01:17,670 --> 01:01:19,710 Dhe kjo është një rregull të mirë i gishtit të dini. 1265 01:01:19,710 --> 01:01:21,880 Nëse ju keni 8 bit, 256 është numri magjik. 1266 01:01:21,880 --> 01:01:24,160 Nëse keni 32 bit, 4 miliardë japë ose të marrë. 1267 01:01:24,160 --> 01:01:27,140 Pra, nëse ju vetëm shkruani 4 miliardë, ju do të shihni se ajo është më pak se shifra 1268 01:01:27,140 --> 01:01:30,970 12, që do të thotë se nuk është e qartë shprehurit të mjaftueshme për të kapur një 1269 01:01:30,970 --> 01:01:34,220 Numri i llogarisë 12-shifror. 1270 01:01:34,220 --> 01:01:34,940 >> Rob Bowden: OK. 1271 01:01:34,940 --> 01:01:38,520 Pra, ato të tjera shkuan mirë. 1272 01:01:38,520 --> 01:01:40,900 Pra, mendoj se banka imponon një $ 20 mujore 1273 01:01:40,900 --> 01:01:42,400 Tarifa e mirëmbajtjes për të gjitha llogaritë. 1274 01:01:42,400 --> 01:01:45,506 Me çfarë query SQL mund banka zbres 20 $ nga çdo akuzë, edhe nëse 1275 01:01:45,506 --> 01:01:47,520 rezulton në disa bilancet negative? 1276 01:01:47,520 --> 01:01:50,380 Pra, në thelb, ka katër Llojet kryesore të pyetjeve - 1277 01:01:50,380 --> 01:01:52,840 insert, zgjidhni, update, dhe fshini. 1278 01:01:52,840 --> 01:01:56,080 Pra, çfarë bëjmë ne mendoj se ne jemi do të përdorni këtu? 1279 01:01:56,080 --> 01:01:57,000 Update. 1280 01:01:57,000 --> 01:01:58,260 >> Pra, le të marrin një sy. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Pra, këtu ne jemi përditësimin. 1283 01:02:05,870 --> 01:02:09,900 Ajo që table jemi ne përditësimin llogari? 1284 01:02:09,900 --> 01:02:11,670 Pra përditësimin llogari. 1285 01:02:11,670 --> 01:02:15,390 Dhe pastaj sintaksa thotë, çfarë në llogaritë jemi përditësimin? 1286 01:02:15,390 --> 01:02:19,520 E pra, ne jemi vendosjen e bilancit të barabartë me Vlera aktuale e bilancit minus 20. 1287 01:02:19,520 --> 01:02:22,860 Pra, kjo do update të gjitha rreshtave e llogarive, zbritur 1288 01:02:22,860 --> 01:02:26,250 20 $ nga bilanci. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. Malan: Një gabim i përbashkët këtu, edhe pse ne nganjëherë e fali atë, 1290 01:02:29,260 --> 01:02:32,990 ishte që në fakt kanë kodin PHP këtu duke e quajtur funksionin query ose duke 1291 01:02:32,990 --> 01:02:35,460 Kuotat e rreth çdo gjëje që nuk duhet të jetë atje. 1292 01:02:35,460 --> 01:02:39,780 >> Rob Bowden: Mos harroni se MySQL është një gjuhë e ndarë nga PHP. 1293 01:02:39,780 --> 01:02:42,410 Ne të ndodhë që të jetë me shkrim MySQL në PHP. 1294 01:02:42,410 --> 01:02:46,180 Dhe PHP është pastaj e dërguar atë gjatë në server MySQL. 1295 01:02:46,180 --> 01:02:51,120 Por ju nuk keni nevojë PHP në mënyrë që të të komunikuar me një server MySQL. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. Malan: Pikërisht. 1297 01:02:51,730 --> 01:02:54,240 Kështu që nuk ka variabla me shenja të dollarit duhet të jetë në këtë kontekst. 1298 01:02:54,240 --> 01:02:59,550 Ajo vetëm mund të bëjë të gjitha të math në bazën e të dhënave vetë. 1299 01:02:59,550 --> 01:03:00,080 >> Rob Bowden: OK. 1300 01:03:00,080 --> 01:03:01,300 Kështu që një tjetër. 1301 01:03:01,300 --> 01:03:02,731 A është kjo një tjetër? 1302 01:03:02,731 --> 01:03:03,210 Po. 1303 01:03:03,210 --> 01:03:06,570 Pra, me çfarë query SQL mund banka rifitoj numrat e llogarive të të saj 1304 01:03:06,570 --> 01:03:09,300 Klientët më të pasura, ata me Bilancet e madhe se 1000? 1305 01:03:09,300 --> 01:03:13,280 Pra, cila nga katër llojet kryesore po ne do të duan këtu? 1306 01:03:13,280 --> 01:03:14,430 Zgjidhni. 1307 01:03:14,430 --> 01:03:16,650 Pra, ne duam të zgjidhni. 1308 01:03:16,650 --> 01:03:17,610 Çfarë duam të zgjidhni? 1309 01:03:17,610 --> 01:03:19,380 Ajo që kolona duam të zgjidhni? 1310 01:03:19,380 --> 01:03:20,970 Ne do të duan në mënyrë specifike për të zgjedhur numrin. 1311 01:03:20,970 --> 01:03:23,910 Por nëse ju tha yll, ne gjithashtu pranoi se. 1312 01:03:23,910 --> 01:03:25,820 >> Pra, zgjidhni numrin nga çfarë tryezë? 1313 01:03:25,820 --> 01:03:26,640 Llogaritë. 1314 01:03:26,640 --> 01:03:28,370 Dhe pastaj kusht që duam? 1315 01:03:28,370 --> 01:03:30,140 Ku bilanci më i madh se 1000. 1316 01:03:30,140 --> 01:03:31,720 Ne gjithashtu pranuar më e madhe se ose e barabartë. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 E fundit. 1319 01:03:36,190 --> 01:03:42,940 Me çfarë query SQL mund banka ngushtë, dmth, fshini çdo llogari që 1320 01:03:42,940 --> 01:03:44,480 ka një bilanc prej $ 0? 1321 01:03:44,480 --> 01:03:47,620 Pra, cila nga katër jemi ne do të dëshironi të përdorni? 1322 01:03:47,620 --> 01:03:48,320 Fshij. 1323 01:03:48,320 --> 01:03:50,180 Pra, sintaksa për këtë? 1324 01:03:50,180 --> 01:03:51,890 Fshij nga çfarë tryezë? 1325 01:03:51,890 --> 01:03:53,550 Llogaritë. 1326 01:03:53,550 --> 01:03:55,790 Dhe pastaj gjendja në të cilën ne duam të fshini - 1327 01:03:55,790 --> 01:03:57,280 ku bilanci është e barabartë me zero. 1328 01:03:57,280 --> 01:04:03,050 Pra fshini të gjitha rreshtave nga llogaritë ku bilanci është zero. 1329 01:04:03,050 --> 01:04:04,300 Pyetjet për ndonjë nga këto? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Dëshironi të radhë? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. Malan: udhëzues Queue. 1333 01:04:11,200 --> 01:04:17,110 Pra, në këtë, ne ju dha një disi Struktura e njohur se ne hulumtohen a 1334 01:04:17,110 --> 01:04:20,450 bit në klasë së bashku me të structs, e cila ishte një e të dhënave 1335 01:04:20,450 --> 01:04:21,910 Struktura e lidhur në shpirt. 1336 01:04:21,910 --> 01:04:24,670 Dallimi edhe pse me një radhë është që ne kishim për të disi të kujtuar që 1337 01:04:24,670 --> 01:04:27,900 është në pjesën e përparme të radhë, në të mëdha pjesë në mënyrë që ne mund të bëjë më shumë 1338 01:04:27,900 --> 01:04:30,530 përdorimin efikas të kujtesës, të paktën në qoftë se ne kemi qenë duke përdorur një rrjet. 1339 01:04:30,530 --> 01:04:35,460 >> Sepse kujtojnë, në qoftë se ne kemi një rrjet, nëse, për shembull, kjo është fronti i 1340 01:04:35,460 --> 01:04:38,470 radhë, në qoftë se unë të marrë në radhë këtu, dhe pastaj dikush merr në linjë 1341 01:04:38,470 --> 01:04:42,710 pas meje, pas meje, pas meje, dhe një person del nga linjës, ju 1342 01:04:42,710 --> 01:04:45,930 mund, siç e pamë disa të njeriut tonë vullnetarët në klasë, kanë të gjithë 1343 01:04:45,930 --> 01:04:47,100 ndryshim në këtë mënyrë. 1344 01:04:47,100 --> 01:04:50,880 Por në përgjithësi, pasi të gjithë e bëjnë diçka nuk është përdorimi më i mirë i kohës 1345 01:04:50,880 --> 01:04:54,600 në një program, sepse kjo do të thotë tuaj algorithm po kandidon në atë 1346 01:04:54,600 --> 01:04:56,520 asymptotic kohë running? 1347 01:04:56,520 --> 01:04:57,420 Kjo është linear. 1348 01:04:57,420 --> 01:04:59,600 >> Dhe unë ndjehem si kjo është lloj i trashë. 1349 01:04:59,600 --> 01:05:02,890 Nëse personi tjetër në linjë është tjetër person që është menduar për të shkuar në 1350 01:05:02,890 --> 01:05:04,660 dyqan, ata nuk e kanë të gjithë për të lëvizur së bashku. 1351 01:05:04,660 --> 01:05:08,200 Vetëm le ky person të këputur, të njomë kur të vijë koha, për shembull. 1352 01:05:08,200 --> 01:05:09,870 Pra, ne mund të ruaj një pak kohë atje. 1353 01:05:09,870 --> 01:05:14,840 Dhe në mënyrë për të bërë këtë edhe pse, që do të thotë se kreu i radhë ose 1354 01:05:14,840 --> 01:05:18,060 front i radhë do të progresive lëvizin thellë e më thellë 1355 01:05:18,060 --> 01:05:23,340 në grup dhe në fund mund në të vërtetë të përfundojë rreth në qoftë se ne jemi duke përdorur një 1356 01:05:23,340 --> 01:05:25,790 array për të ruajtur popullin në këtë radhë. 1357 01:05:25,790 --> 01:05:28,390 Kështu që ju mund të pothuajse të mendoj për array si të dhëna rrethore 1358 01:05:28,390 --> 01:05:29,880 Struktura në këtë kuptim. 1359 01:05:29,880 --> 01:05:33,970 >> Kështu që ju disi duhet të mbajnë gjurmët e Madhësia e tij ose me të vërtetë fundi i saj 1360 01:05:33,970 --> 01:05:36,250 dhe pastaj ku fillimi i saj është. 1361 01:05:36,250 --> 01:05:39,490 Pra, ne propozojmë që të deklarojë një radhë e tillë, duke e quajtur 1362 01:05:39,490 --> 01:05:41,330 ajo q, vetëm një letër. 1363 01:05:41,330 --> 01:05:44,570 Pastaj ne propozojmë që të jetë e para nisur zero dhe se madhesia 1364 01:05:44,570 --> 01:05:45,470 të niset në zero. 1365 01:05:45,470 --> 01:05:47,770 >> Deri tani, nuk ka asgjë brenda kësaj radhë. 1366 01:05:47,770 --> 01:05:50,910 Dhe ne ju kërkojmë të përfunduar Zbatimi i enqueue më poshtë në 1367 01:05:50,910 --> 01:05:55,250 një mënyrë të tillë që shton funksioni N tek fundi i q dhe pastaj kthehet e vërtetë. 1368 01:05:55,250 --> 01:05:58,690 Por në qoftë se q është e plotë ose negative, Funksioni duhet në vend të kësaj kthimit të rreme. 1369 01:05:58,690 --> 01:06:01,060 Dhe ne ju dha një çift e supozimeve. 1370 01:06:01,060 --> 01:06:04,320 Por ata nuk janë me të vërtetë funksionale relevante, vetëm se bool ekziston, 1371 01:06:04,320 --> 01:06:06,690 për shkak se, teknikisht, bool nuk ekzistojnë në C nëse nuk përfshijnë një 1372 01:06:06,690 --> 01:06:07,310 sigurt header fotografi. 1373 01:06:07,310 --> 01:06:09,350 Kështu që ishte vetëm sigurohuni që nuk nuk u është ky një mashtrim 1374 01:06:09,350 --> 01:06:10,940 lloj pyetje gjë. 1375 01:06:10,940 --> 01:06:16,280 >> Pra enqueue, kemi propozuar në mostër zgjidhje për të zbatuar si më poshtë. 1376 01:06:16,280 --> 01:06:20,420 Një, ne së pari kontrolloni lehtësuar, frytet ulët varur. 1377 01:06:20,420 --> 01:06:23,820 Nëse radhë është e plotë ose numri që jeni duke u përpjekur për të futur është më pak 1378 01:06:23,820 --> 01:06:26,380 se zero, të cilat ne tha në specifikimin e problemit duhet të 1379 01:06:26,380 --> 01:06:30,320 nuk lejohet, sepse ne duam vetëm vlerat jo-negative, atëherë ju duhet 1380 01:06:30,320 --> 01:06:31,640 vetëm të kthimit të rreme menjëherë. 1381 01:06:31,640 --> 01:06:33,820 Pra disa relativisht e lehtë error checking. 1382 01:06:33,820 --> 01:06:38,720 Nëse pse ju doni të shtoni atë aktuale numrin, ju kishte për të bërë një grimë 1383 01:06:38,720 --> 01:06:39,440 duke menduar këtu. 1384 01:06:39,440 --> 01:06:41,330 Dhe ky është vendi ku është pak i bezdisshëm mendërisht, sepse ju duhet të 1385 01:06:41,330 --> 01:06:43,000 kuptoj se si për të trajtuar wraparound. 1386 01:06:43,000 --> 01:06:46,870 >> Por embrion i idesë këtu kjo është e interes për ne është se wraparound 1387 01:06:46,870 --> 01:06:51,480 shpesh nënkupton aritmetikë modulare dhe operatori mod, pala qind, 1388 01:06:51,480 --> 01:06:55,140 ku ju mund të shkoni nga një vlerë më të madhe përsëri në zero dhe më pas një dhe dy dhe 1389 01:06:55,140 --> 01:06:58,650 tre dhe pastaj kthehet rreth në zero, një dhe dy dhe tre e kështu me radhë 1390 01:06:58,650 --> 01:06:59,380 përsëri dhe përsëri. 1391 01:06:59,380 --> 01:07:02,880 Pra, mënyra propozojmë bërë këtë është që ne duam të indeksit në 1392 01:07:02,880 --> 01:07:05,850 array quajtur numra ku integers tona qëndrojnë. 1393 01:07:05,850 --> 01:07:10,740 Por për të arritur atje, ne së pari duam të bëjmë pavarësisht nga madhësia e radhë është, por 1394 01:07:10,740 --> 01:07:14,080 pastaj shtoni të se çdo gjë që front i listës është. 1395 01:07:14,080 --> 01:07:17,880 Dhe efektin e që është për të na vënë në pozita e drejtë në radhë dhe 1396 01:07:17,880 --> 01:07:20,970 nuk supozojmë se personi i parë në linjë është në fillim të cilën ai ose 1397 01:07:20,970 --> 01:07:24,130 ajo absolutisht mund të jetë në qoftë se ne gjithashtu ishin të zhvendosur të gjithë. 1398 01:07:24,130 --> 01:07:26,710 Por ne jemi vetëm duke krijuar punë për veten tonë nëse ne e mori 1399 01:07:26,710 --> 01:07:27,800 se rruga e veçantë. 1400 01:07:27,800 --> 01:07:29,330 >> Pra, ne mund të mbani atë relativisht e thjeshtë. 1401 01:07:29,330 --> 01:07:32,180 Ne duhet të mbani mend se ne vetëm shtoi një int me radhë. 1402 01:07:32,180 --> 01:07:35,850 Dhe atëherë ne vetëm kthim i vërtetë. 1403 01:07:35,850 --> 01:07:38,560 Ndërkohë, në dequeue, kërkuam ju të bëjë të mëposhtme. 1404 01:07:38,560 --> 01:07:42,260 Zbatuar atë në një mënyrë të tillë që dequeues, që është heq dhe kthimet, 1405 01:07:42,260 --> 01:07:44,190 int në frontin e radhë. 1406 01:07:44,190 --> 01:07:46,410 Për të hequr int, mjafton për të harruar atë. 1407 01:07:46,410 --> 01:07:47,650 Ju nuk keni nevojë për të shkelur pak e saj. 1408 01:07:47,650 --> 01:07:48,820 Pra, është ende në të vërtetë atje. 1409 01:07:48,820 --> 01:07:51,930 Ashtu si të dhënave në një hard drive, ne jemi vetëm duke injoruar faktin 1410 01:07:51,930 --> 01:07:52,970 se kjo është tani aty. 1411 01:07:52,970 --> 01:07:55,520 Dhe në qoftë se q është bosh, ne duhet në vend që të kthehen negative 1. 1412 01:07:55,520 --> 01:07:56,750 Pra, kjo ndihet arbitrare. 1413 01:07:56,750 --> 01:08:01,640 Pse kthehen Negativ 1 në vend të rreme? 1414 01:08:01,640 --> 01:08:02,620 Po. 1415 01:08:02,620 --> 01:08:05,070 >> Audienca: Q është magazinimin e vlerat pozitive. 1416 01:08:05,070 --> 01:08:10,950 Që ju vetëm të ruajë vlerat pozitive në q, negative është një gabim. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. Malan: OK, e vërtetë. 1418 01:08:11,510 --> 01:08:14,850 Pra, për shkak se ne jemi vetëm ruajtjen pozitiv Vlerat ose zero, atëherë kjo është në rregull për të 1419 01:08:14,850 --> 01:08:18,050 të kthehen një vlerë negative si Sentinel vlerë, një simbol të veçantë. 1420 01:08:18,050 --> 01:08:21,630 Por ju jeni duke rishkruar historinë atje, sepse arsyeja që ne jemi vetëm 1421 01:08:21,630 --> 01:08:25,890 kthyer vlerat jo-negative është për shkak se ne duam të 1422 01:08:25,890 --> 01:08:27,670 kanë një vlerë Sentinel. 1423 01:08:27,670 --> 01:08:32,617 Pra, më konkretisht, pse jo vetëm kthimit të rreme në rastet e gabimeve? 1424 01:08:32,617 --> 01:08:33,099 Po. 1425 01:08:33,099 --> 01:08:35,510 >> Audienca: Ju keni dështuar për të kthyer një numër të plotë. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. Malan: Pikërisht. 1427 01:08:36,630 --> 01:08:38,569 Dhe ky është vendi ku merr C kufizuar mjaft. 1428 01:08:38,569 --> 01:08:40,590 Nëse ju jeni duke thënë se ju do të jeni të kthehen një int, ju keni marrë 1429 01:08:40,590 --> 01:08:41,279 të kthehet një int. 1430 01:08:41,279 --> 01:08:43,689 Ju nuk mund të merrni dashuroj dhe të fillojnë të kthehen a bool ose një pluskues ose një 1431 01:08:43,689 --> 01:08:45,040 string ose diçka të tillë. 1432 01:08:45,040 --> 01:08:49,370 Tani, ndërkohë, JavaScript dhe PHP dhe disa gjuhë të tjera mund, në fakt, 1433 01:08:49,370 --> 01:08:51,310 a keni kthyer ndryshme lloje të vlerave. 1434 01:08:51,310 --> 01:08:54,819 Dhe që në fakt mund të jenë të dobishme, ku ju mund të kthehet Ints pozitive, zero, 1435 01:08:54,819 --> 01:08:59,439 Ints negative, ose të rreme apo null edhe për të ditur gabim. 1436 01:08:59,439 --> 01:09:01,890 Por ne nuk kemi se shkathtësi në C. 1437 01:09:01,890 --> 01:09:04,569 >> Pra me dequeue, ajo që ne propozojë të bëni është - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> Rob Bowden: Ju mund të kthimit të rreme. 1440 01:09:09,830 --> 01:09:13,189 Është vetëm se i rremë është hash përcaktojnë false në zero. 1441 01:09:13,189 --> 01:09:16,000 Pra, nëse ju kthimit të rreme, ju jeni kthyer zero. 1442 01:09:16,000 --> 01:09:25,470 Dhe zero është një gjë e vlefshme në radhë tonë, ndërsa negative 1 nuk është në qoftë se 1443 01:09:25,470 --> 01:09:27,000 false ndodhur të jetë negative 1. 1444 01:09:27,000 --> 01:09:29,972 Por ju nuk duhet edhe duhet të dini se. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. Malan: Kjo është pse unë nuk them atë. 1446 01:09:32,399 --> 01:09:36,450 >> Rob Bowden: Por kjo nuk ishte e vërtetë që ju nuk mund të kthimit të rreme. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. Malan: Sigurisht. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Pra dequeue, njoftim ne e pranojmë të pavlefshme si argument të saj. 1450 01:09:44,240 --> 01:09:45,479 Dhe kjo është për shkak se ne nuk jemi duke kaluar asgjë in 1451 01:09:45,479 --> 01:09:48,359 Ne vetëm duam të hequr elementin në pjesën e përparme të radhë. 1452 01:09:48,359 --> 01:09:49,819 Pra, si mund të shkojmë për të bërë këtë? 1453 01:09:49,819 --> 01:09:51,290 E pra, së pari, le të bëjë këtë kontroll i shpejtë mendje e shëndoshë. 1454 01:09:51,290 --> 01:09:53,350 Nëse madhësia radhë është 0, nuk ka nuk ka punë për të bërë. 1455 01:09:53,350 --> 01:09:54,210 Kthehu negative 1. 1456 01:09:54,210 --> 01:09:54,800 Done. 1457 01:09:54,800 --> 01:09:56,340 Pra, kjo është disa rreshta të programit tim. 1458 01:09:56,340 --> 01:09:58,180 Pra, vetëm katër linja të mbetet. 1459 01:09:58,180 --> 01:10:01,310 >> Kështu që këtu unë të vendosë për pakësim madhësia. 1460 01:10:01,310 --> 01:10:04,620 Dhe decrementing madhësinë në mënyrë efektive do të thotë se unë jam i harruar 1461 01:10:04,620 --> 01:10:06,010 diçka është në atje. 1462 01:10:06,010 --> 01:10:09,910 Por unë gjithashtu kanë për të rinovuar, ku para të numrave janë. 1463 01:10:09,910 --> 01:10:11,620 Pra, për të bërë këtë, kam nevojë për të bërë dy gjëra. 1464 01:10:11,620 --> 01:10:16,390 Për herë të parë duhet të mbani mend se çfarë numrin është në pjesën e përparme të radhë, 1465 01:10:16,390 --> 01:10:17,860 sepse kam nevojë për të kthyer atë gjë. 1466 01:10:17,860 --> 01:10:20,910 Kështu që unë nuk dua të harroj aksidentalisht lidhje me të dhe më pas prishësh atë. 1467 01:10:20,910 --> 01:10:22,840 Unë jam vetëm duke shkuar për të kujtuar në një int. 1468 01:10:22,840 --> 01:10:27,310 >> Dhe tani, unë dua të rinovuar q.front që do q.front +1. 1469 01:10:27,310 --> 01:10:30,070 Pra, nëse ky ishte personi i parë në line, tani, unë dua të bëj plus 1 të 1470 01:10:30,070 --> 01:10:31,930 pikë në personi tjetër në linjë. 1471 01:10:31,930 --> 01:10:33,420 Por unë kam për të trajtuar atë wraparound. 1472 01:10:33,420 --> 01:10:37,270 Dhe në qoftë se kapaciteti është një konstante globale, që do të më lejoni të bëni të sigurtë 1473 01:10:37,270 --> 01:10:41,140 si unë pikë në person shumë i fundit në line, operacioni modulo do të sjellë 1474 01:10:41,140 --> 01:10:43,840 mua mbrapa në zero në përparme e radhë. 1475 01:10:43,840 --> 01:10:46,050 Dhe që merret me wraparound këtu. 1476 01:10:46,050 --> 01:10:48,950 Dhe pastaj unë të vazhdojë të kthehen n. 1477 01:10:48,950 --> 01:10:51,530 >> Tani, të thuash të drejtën, nuk e kam duhet të deklarojnë n. 1478 01:10:51,530 --> 01:10:53,880 Unë nuk kam për të rrëmbyer atë dhe ruajtur atë përkohësisht, sepse vlera është 1479 01:10:53,880 --> 01:10:54,740 ende atje. 1480 01:10:54,740 --> 01:10:57,490 Kështu që unë mund vetëm të bëjë aritmetike e duhur për të kthyer kokën ish 1481 01:10:57,490 --> 01:10:58,450 e radhë. 1482 01:10:58,450 --> 01:11:01,850 Por unë thjesht mendonin se kjo ishte më e qartë që në fakt kap int, e vënë atë 1483 01:11:01,850 --> 01:11:04,320 në n, dhe pastaj të kthehen që për hir të qartësisë, por 1484 01:11:04,320 --> 01:11:05,735 jo shumë e nevojshme. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psst. 1487 01:11:12,130 --> 01:11:13,410 Ata janë të gjithë shqiptueshëm në kokën time. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> Rob Bowden: Pyetja Pra, së pari është problemi binar pemë. 1490 01:11:19,110 --> 01:11:22,140 Pyetja e parë është kështu, ne jemi duke pasur parasysh këto shifra. 1491 01:11:22,140 --> 01:11:27,160 Dhe ne duam të futur ato në një farë mënyre këto nyje e tillë që është një 1492 01:11:27,160 --> 01:11:30,110 pemë të vlefshme kërko binar. 1493 01:11:30,110 --> 01:11:36,260 Pra, një gjë që të kujtohet për pemë binare e kërkimit është se ajo nuk është 1494 01:11:36,260 --> 01:11:39,800 vetëm se gjëja në të majtë është më pak dhe gjëja për të 1495 01:11:39,800 --> 01:11:41,120 e drejta është më i madh. 1496 01:11:41,120 --> 01:11:44,580 Ajo duhet të jetë se e gjithë pema për të majtë është më pak, dhe tërë pema 1497 01:11:44,580 --> 01:11:45,740 në të djathtë është më i madh. 1498 01:11:45,740 --> 01:11:55,260 >> Pra, nëse unë vendos 34 këtu në krye, dhe pastaj I vënë 20 këtu, kështu që kjo është e vlefshme aq 1499 01:11:55,260 --> 01:11:56,970 më tani, sepse 34 deri këtu. 1500 01:11:56,970 --> 01:11:57,920 20 do të majtë. 1501 01:11:57,920 --> 01:11:58,950 Pra, kjo është më pak. 1502 01:11:58,950 --> 01:12:03,640 Por unë nuk mund të pastaj të vënë 59 këtu, sepse edhe pse 59 është në të drejtën e 20, 1503 01:12:03,640 --> 01:12:06,140 është ende në të majtë të 34. 1504 01:12:06,140 --> 01:12:10,760 Pra, me këtë detyrim në mendje, Mënyra më e lehtë e ndoshta zgjidhjen e kësaj 1505 01:12:10,760 --> 01:12:14,330 Problemi është që vetëm lloj këto numra - 1506 01:12:14,330 --> 01:12:18,720 kështu 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Dhe pastaj futur ato nga e majta në të djathtë. 1508 01:12:21,640 --> 01:12:23,390 >> Pra 20 shkon këtu. 1509 01:12:23,390 --> 01:12:24,630 34 shkon këtu. 1510 01:12:24,630 --> 01:12:25,830 36 shkon këtu. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 Dhe ju gjithashtu mund të ketë motive nga me disa mbylljen në dhe realizimin, 1513 01:12:34,730 --> 01:12:38,830 oh, prisni, unë nuk kam numra të mjaftueshme për të mbushur këtë në mbi këtu. 1514 01:12:38,830 --> 01:12:42,170 Kështu që unë duhet të reshift çfarë tim Shënimi rrugë do të jetë. 1515 01:12:42,170 --> 01:12:47,490 Por vini re se në tre të fundit, në qoftë se ju lexohet nga e majta në të djathtë, është në 1516 01:12:47,490 --> 01:12:48,740 rritjen e rendit. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Deri tani, ne duam të deklarojnë se çfarë struct do të jetë për 1519 01:12:56,540 --> 01:12:58,300 nyjet në këtë pemë. 1520 01:12:58,300 --> 01:13:02,720 Pra, çfarë nuk kemi nevojë në një pemë binare? 1521 01:13:02,720 --> 01:13:05,830 Pra, ne kemi një vlerë prej llojit int, kështu që disa vlera int. 1522 01:13:05,830 --> 01:13:07,220 Unë nuk e di atë që e quajti ajo në zgjidhjen - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Ne kemi nevojë për një tregues për fëmijën e majtë dhe një tregues për fëmijën e duhur. 1525 01:13:13,570 --> 01:13:17,540 Pra, kjo do të duket si ky. 1526 01:13:17,540 --> 01:13:20,510 Dhe kjo në fakt do të shikojmë përpara kur e ka dy herë më i lidhur 1527 01:13:20,510 --> 01:13:25,090 Lista stuff, kështu njoftim - 1528 01:13:25,090 --> 01:13:27,860 Unë do të duhet të lëviz të gjitha mënyrë përsëri poshtë për të problemit 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Pra njoftim duket identike me këtë, veç se po të ndodhë vetëm për të thirrur këto 1531 01:13:36,390 --> 01:13:38,590 emra të ndryshëm. 1532 01:13:38,590 --> 01:13:41,440 Ne ende kemi një numër të plotë Vlera dhe dy pointers. 1533 01:13:41,440 --> 01:13:44,850 Është vetëm se në vend të trajtimit të pointers si duke treguar gjë tjetër 1534 01:13:44,850 --> 01:13:47,955 dhe gjëja e mëparshme, ne jemi duke e trajtuar pointers të tregojnë për një fëmijë të majtë 1535 01:13:47,955 --> 01:13:49,205 dhe fëmija e drejtë. 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 Pra, kjo është nyja jonë struct. 1539 01:13:59,650 --> 01:14:03,920 Dhe tani, i vetmi funksion ne kemi nevojë për të zbatuar për këtë është kundërvënie, i cili 1540 01:14:03,920 --> 01:14:08,320 ne duam të shkojnë mbi pemë, shtypjen nga vlerat e pemës me qëllim. 1541 01:14:08,320 --> 01:14:15,241 >> Pra, duke kërkuar këtu, ne do të duan të shtypura nga 20, 34, 36, 52, 59, dhe 106. 1542 01:14:15,241 --> 01:14:17,970 Si nuk kemi arritur këtë? 1543 01:14:17,970 --> 01:14:18,890 Pra, është shumë e ngjashme. 1544 01:14:18,890 --> 01:14:22,910 Nëse ju pa në provim të kaluar problemi që ju të kërkuar për të shtypura nga 1545 01:14:22,910 --> 01:14:25,940 tërë pemë me presje në mes çdo gjë, ai ishte në fakt edhe 1546 01:14:25,940 --> 01:14:27,320 më e lehtë se kaq. 1547 01:14:27,320 --> 01:14:30,950 Kështu që këtu është zgjidhje. 1548 01:14:30,950 --> 01:14:33,110 Kjo ishte në mënyrë të konsiderueshme më e lehtë në qoftë se ju e bëri atë Recursively. 1549 01:14:33,110 --> 01:14:36,650 Unë nuk e di nëse dikush ka tentuar për të bërë atë iteratively. 1550 01:14:36,650 --> 01:14:38,340 >> Por së pari, ne kemi rastin tonë bazë. 1551 01:14:38,340 --> 01:14:39,660 Çka po të jetë rrënja është i pavlefshëm? 1552 01:14:39,660 --> 01:14:40,610 Pastaj ne jemi vetëm do të kthehen. 1553 01:14:40,610 --> 01:14:42,300 Ne nuk duam të shtypura asgjë. 1554 01:14:42,300 --> 01:14:45,940 Tjetër ne do të kaloj nëpër Recursively poshtë. 1555 01:14:45,940 --> 01:14:48,140 Print gjithë subtree majtë. 1556 01:14:48,140 --> 01:14:51,440 Pra, të shtypur çdo gjë më pak se vlera time aktuale. 1557 01:14:51,440 --> 01:14:53,930 Dhe atëherë unë jam duke shkuar për të shtypur veten. 1558 01:14:53,930 --> 01:14:57,310 Dhe atëherë unë jam duke shkuar për recurse poshtë mia tërë subtree e drejtë, kështu që çdo gjë 1559 01:14:57,310 --> 01:14:58,810 më e madhe se vlera e mia. 1560 01:14:58,810 --> 01:15:03,870 Dhe kjo do të shtypura jashtë çdo gjë në rregull. 1561 01:15:03,870 --> 01:15:05,860 Pyetjet se si kjo në të vërtetë realizon këtë? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Audienca: Unë kam një pyetje më [e padëgjueshme]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> Rob Bowden: Pra, një mënyrë për të afruar ndonjë problem gjithkund rekursive është që vetëm të mendojnë 1566 01:15:23,550 --> 01:15:26,275 në lidhje me të doja që ju duhet të mendoni për të gjitha rastet qoshe. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Kështu që e konsiderojnë se ne duam të print tërë këtë pemë. 1569 01:15:38,110 --> 01:15:42,030 Pra, të gjithë ne do të përqëndrohet në është kjo nyje të veçantë - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Thirrjet e gjithkund rekursive, ne pretendojmë ata vetëm punë. 1572 01:15:47,420 --> 01:15:54,000 Kështu që këtu, kjo thirrje rekursive për të Kundërvënie, ne edhe pa menduar 1573 01:15:54,000 --> 01:15:58,640 për këtë, vetëm traversing majtë tre, imagjinoni se tashmë shtyp 20 1574 01:15:58,640 --> 01:16:00,730 dhe 34 për ne. 1575 01:16:00,730 --> 01:16:03,350 Dhe atëherë kur ne përfundimisht Recursively telefononi kundërvënie në 1576 01:16:03,350 --> 01:16:07,890 drejtë, që do të shtypura si duhet 52, 59, dhe 106 për ne. 1577 01:16:07,890 --> 01:16:13,620 >> Pra, duke pasur parasysh se kjo mund të shtypura 20, 34, dhe tjetër mund të shtypura 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 të gjithë ne duhet të jetë në gjendje të bëni është të shtypura ourself në mes të se. 1579 01:16:17,180 --> 01:16:21,250 Pra, të shtypura nga çdo gjë para nesh. 1580 01:16:21,250 --> 01:16:27,710 Print ourself, kështu print aktuale nyjen 36, printf rregullt, dhe pastaj 1581 01:16:27,710 --> 01:16:31,170 të shtypur çdo gjë pas nesh. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. Malan: Kjo është ajo ku recursion merr me të vërtetë e bukur. 1583 01:16:32,730 --> 01:16:36,270 Është ky hap mahnitshme e besimit ku ju bëni pak vogël të punës. 1584 01:16:36,270 --> 01:16:38,460 Dhe pastaj ju lënë dikë tjetër të bëjë pjesën tjetër. 1585 01:16:38,460 --> 01:16:40,180 Dhe se dikush tjetër është, për ironi, ju. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Kështu që për pikë serioze brownie, nëse ju të shkoni deri në pyetjet - 1588 01:16:48,360 --> 01:16:50,530 >> Rob Bowden: Në pyetjet? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. Malan: Dhe poshtë pak për të numrat, nuk e di ndokush se ku 1590 01:16:53,490 --> 01:16:55,190 këto shifra vijnë nga? 1591 01:16:55,190 --> 01:16:56,610 >> Rob Bowden: Unë fjalë për fjalë kanë asnjë ide. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. Malan: Ata duket të gjithë quiz. 1593 01:16:59,794 --> 01:17:01,150 >> Audienca: A janë ata të njëjtat numra? 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. Malan: Këto numra. 1595 01:17:01,910 --> 01:17:03,260 Një vezë pak Pashkëve. 1596 01:17:03,260 --> 01:17:08,100 Kështu që për ato prej jush shikuar në internet në në shtëpi, në qoftë se ju mund të na tregoni me email për të 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net çfarë rëndësia e këto të përsëritura gjashtë numra janë 1598 01:17:12,680 --> 01:17:18,560 të gjithë Quiz 1, ne do të të dush me vëmendje të mahnitshme në finale 1599 01:17:18,560 --> 01:17:21,610 leksion dhe një top stresi. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 E bukur, delikate. 1602 01:17:27,790 --> 01:17:29,570 >> Rob Bowden: Çdo pyetje e fundit për ndonjë gjë në quiz? 1603 01:17:29,570 --> 01:17:32,608