1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> David J. MALAN: Alle reg. 3 00:00:12,900 --> 00:00:16,790 So welkom by die eerste keer ooit CS50 nadoodse vir 'n toets. 4 00:00:16,790 --> 00:00:18,340 Ons het gedink ons ​​sou inlui hierdie tradisie hierdie jaar. 5 00:00:18,340 --> 00:00:20,960 En dit sal 'n geleentheid wees deur die loop 6 00:00:20,960 --> 00:00:22,220 oplossings vir die toets. 7 00:00:22,220 --> 00:00:26,160 En ons sal bespoedig of vertraag gebaseer op rente van diegene hier. 8 00:00:26,160 --> 00:00:29,730 >> So jy is waarskynlik hier omdat jy geïnteresseerd in hoe jy kan hê of 9 00:00:29,730 --> 00:00:31,170 beantwoord moet het 'n paar van hierdie probleme. 10 00:00:31,170 --> 00:00:33,300 So waarom nie ons neem 'n blik op hierdie artikel eerste? 11 00:00:33,300 --> 00:00:34,450 So kry snare. 12 00:00:34,450 --> 00:00:37,600 Dit het jy drie verskillende weergawes van 'n program wat uiteindelik 13 00:00:37,600 --> 00:00:39,650 bedoel om 'n string te kry van 'n gebruiker. 14 00:00:39,650 --> 00:00:42,530 Of dit gedoen het, was links na jou toe te bepaal. 15 00:00:42,530 --> 00:00:45,150 >> En ons in Vraag 0 gevra, veronderstel dat weergawe 1 is 16 00:00:45,150 --> 00:00:46,400 saamgestel en uitgevoer word. 17 00:00:46,400 --> 00:00:48,860 Hoekom kan die program segfault? 18 00:00:48,860 --> 00:00:51,150 Met die eerste oogopslag, enige voorstelle waarom? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Ja. 21 00:00:54,489 --> 00:00:59,260 >> Publiek: Ek onthou dat dit in 'n vorige voorbeeld van kyk na die 22 00:00:59,260 --> 00:01:05,506 kar * s en sien die skandering van die s en sien, want dit is 'n wyser, hoe 23 00:01:05,506 --> 00:01:07,971 het dit invloed wat jy geskandeer? 24 00:01:07,971 --> 00:01:10,940 Is dit is of die adres van s? 25 00:01:10,940 --> 00:01:11,180 >> David J. Malan OK. 26 00:01:11,180 --> 00:01:11,480 Goed. 27 00:01:11,480 --> 00:01:14,830 So uiteindelik, die bron van 'n probleem is vermoedelik gaan te verminder 28 00:01:14,830 --> 00:01:16,210 aan daardie veranderlike s. 29 00:01:16,210 --> 00:01:17,280 En dit is inderdaad 'n veranderlike. 30 00:01:17,280 --> 00:01:19,900 Die data tipe wat veranderlike kar *, wat beteken dit gaan 31 00:01:19,900 --> 00:01:22,570 bevat die adres van 'n karakter. 32 00:01:22,570 --> 00:01:23,850 En daarin lê die insig. 33 00:01:23,850 --> 00:01:28,330 Dit gaan die adres van te bevat 'n karakter of, meer in die algemeen, die 34 00:01:28,330 --> 00:01:32,110 adres van die eerste karakter in 'n hele blok karakters. 35 00:01:32,110 --> 00:01:36,680 >> Maar die catch is dat scan s, doel in lewe, is 'n adres en gegee 36 00:01:36,680 --> 00:01:40,960 'n formaat kode, soos% s lees 'n string in die stuk van 37 00:01:40,960 --> 00:01:42,330 geheue by daardie adres. 38 00:01:42,330 --> 00:01:46,040 Maar, want daar is geen gelyke teken voordat dat kommapunt op die eerste 39 00:01:46,040 --> 00:01:49,310 lyn van kode, omdat ons dit nie doen nie eintlik ken 'n geheue met 40 00:01:49,310 --> 00:01:53,020 malloc, want dit het nie eintlik Ken 'n verskeidenheid van 'n paar groot, al 41 00:01:53,020 --> 00:01:57,620 jy doen is om te lees die gebruiker se sleutelbord insette in sommige volledige 42 00:01:57,620 --> 00:02:00,490 vullis waarde, wat is in s by verstek. 43 00:02:00,490 --> 00:02:04,480 So is die kans jy gaan segfault indien daardie adres is nie net so gebeur 44 00:02:04,480 --> 00:02:08,009 'n waarde wat jy kan wees, in werklikheid, skryf aan. 45 00:02:08,009 --> 00:02:10,889 So sleg nie toe te ken jou geheue is daar. 46 00:02:10,889 --> 00:02:13,150 >> So in vraag 1, het ons gevra, veronderstel dat weergawe 2 is 47 00:02:13,150 --> 00:02:14,230 saamgestel en uitgevoer word. 48 00:02:14,230 --> 00:02:15,900 Hoekom kan hierdie program segfault? 49 00:02:15,900 --> 00:02:17,990 So hierdie een is minder karretjie. 50 00:02:17,990 --> 00:02:21,470 En daar is eintlik net een ooglopende manier waar jy kan 51 00:02:21,470 --> 00:02:22,810 sneller 'n segfault hier. 52 00:02:22,810 --> 00:02:23,730 En dit is tematiese. 53 00:02:23,730 --> 00:02:28,180 Enige tyd wat ons gebruik c in die geheue, wat kan jy 'n segfault te oorreed 54 00:02:28,180 --> 00:02:30,718 met weergawe 2? 55 00:02:30,718 --> 00:02:35,560 >> Publiek: As jy dit gebruik om insette in 'n string wat is langer as 49 56 00:02:35,560 --> 00:02:35,975 karakters. 57 00:02:35,975 --> 00:02:37,260 >> David J. MALAN: Presies. 58 00:02:37,260 --> 00:02:41,420 Enige tyd wat jy iets sien vaste lengte wanneer dit kom by 'n skikking, jou 59 00:02:41,420 --> 00:02:44,650 radar moet gaan af dat dit kan wees problematies as jy nie die beheer van die 60 00:02:44,650 --> 00:02:45,810 grense van 'n skikking. 61 00:02:45,810 --> 00:02:46,650 En dit is die probleem hier. 62 00:02:46,650 --> 00:02:47,910 Ons is nog steeds met behulp scanf. 63 00:02:47,910 --> 00:02:52,200 Ons is nog steeds met behulp van% s, wat beteken probeer 'n string om te lees van die gebruiker. 64 00:02:52,200 --> 00:02:56,300 Dit gaan in s gelees word, wat Op hierdie punt, is effektief die 65 00:02:56,300 --> 00:02:58,570 adres van 'n stuk van die geheue of is dit ekwivalent. 66 00:02:58,570 --> 00:03:02,080 Dit is die naam van 'n skikking van die karakters van die geheue. 67 00:03:02,080 --> 00:03:07,610 >> Maar presies dit, as jy lees 'n string dit is meer as 49 karakters, 49 68 00:03:07,610 --> 00:03:10,440 omdat jy ruimte nodig vir die backslash 0, jy gaan om oor te loop 69 00:03:10,440 --> 00:03:11,390 dat buffer. 70 00:03:11,390 --> 00:03:16,410 En jy kan kry gelukkig en in staat wees om te skryf 'n 51 karakter, 52, 53. 71 00:03:16,410 --> 00:03:18,560 Maar op 'n sekere punt, die bedryfstelsel gaan om te sê, no. 72 00:03:18,560 --> 00:03:21,270 Dit is beslis nie die geheue jy mag aan te raak. 73 00:03:21,270 --> 00:03:23,380 En die program gaan segfault. 74 00:03:23,380 --> 00:03:26,650 >> So is daar, moet die heuristiek enige wees tyd wat jy het 'n vaste lengte, jy het 75 00:03:26,650 --> 00:03:30,150 om seker te maak jy die beheer van die lengte van wat dit ookal is wat jy probeer 76 00:03:30,150 --> 00:03:31,090 om te lees in dit. 77 00:03:31,090 --> 00:03:35,110 >> Publiek: So wat op te los, kan jy het 'n verklaring nagaan eintlik moes 78 00:03:35,110 --> 00:03:37,140 is die lengte groter as of minder as? 79 00:03:37,140 --> 00:03:37,730 >> David J. Malan Beslis. 80 00:03:37,730 --> 00:03:41,706 Jy moet net 'n voorwaarde wat sê, indien die - 81 00:03:41,706 --> 00:03:46,080 of eerder jy nie noodwendig weet nie vooraf hoeveel karakters die 82 00:03:46,080 --> 00:03:49,060 gebruiker gaan tik, want jy het hoender en die eier. 83 00:03:49,060 --> 00:03:51,860 Nie totdat jy lees dit in met scanf kan jy uitvind hoe lank dit is. 84 00:03:51,860 --> 00:03:54,500 Maar op daardie punt, is dit te laat, omdat jy reeds gelees het, in 85 00:03:54,500 --> 00:03:55,710 enige blok van die geheue. 86 00:03:55,710 --> 00:03:59,590 So as 'n eenkant, die CS50 biblioteek vermy hierdie kwessie heeltemal, onthou 87 00:03:59,590 --> 00:04:01,060 deur die gebruik van fgetc. 88 00:04:01,060 --> 00:04:05,390 En dit lui een van die karakters op 'n tyd, wenk saggies saam, met die wete dat jy 89 00:04:05,390 --> 00:04:08,060 kan nie 'n karakter as oorstroom jy lees een op 'n tyd. 90 00:04:08,060 --> 00:04:11,580 >> Die vangs is met getstring herroep is dat ons moet voortdurend weer grootte 91 00:04:11,580 --> 00:04:13,590 wat deel van die geheue, wat is net 'n pyn. 92 00:04:13,590 --> 00:04:15,310 Dit is 'n baie van die reëls van kode wat om te doen. 93 00:04:15,310 --> 00:04:18,779 So 'n benadering sou wees om te eintlik gebruik 'n neef, so 94 00:04:18,779 --> 00:04:19,790 om te praat, van scanf. 95 00:04:19,790 --> 00:04:22,820 Daar is weergawes van 'n groot deel van hierdie funksies wat eintlik gaan die 96 00:04:22,820 --> 00:04:25,870 lengte van hoeveel karakters jy mag maksimaal lees. 97 00:04:25,870 --> 00:04:29,430 En jy kan spesifiseer, lees nie meer as 50 karakters. 98 00:04:29,430 --> 00:04:34,110 So wat sou 'n ander benadering wees, maar minder tegemoetkomend van groter insette. 99 00:04:34,110 --> 00:04:37,040 >> So vraag 2 vra, veronderstel dat weergawe 3 is saamgestel en uitgevoer word. 100 00:04:37,040 --> 00:04:39,960 Hoekom kan die program segfault? 101 00:04:39,960 --> 00:04:42,650 So hierdie een is eintlik dieselfde beantwoord, selfs al is dit 102 00:04:42,650 --> 00:04:43,590 lyk 'n bietjie liefhebber. 103 00:04:43,590 --> 00:04:46,440 Ons gebruik malloc, wat voel soos gee ons onsself meer opsies. 104 00:04:46,440 --> 00:04:48,030 En dan is ons bevry wat geheue aan die einde. 105 00:04:48,030 --> 00:04:49,580 Dit is nog steeds net 50 grepe van die geheue. 106 00:04:49,580 --> 00:04:53,620 Sodat ons kan nog steeds probeer om te lees in 51, 52, 1000 grepe. 107 00:04:53,620 --> 00:04:55,830 Dit gaan segfault vir presies dieselfde rede. 108 00:04:55,830 --> 00:04:57,530 >> Maar daar is nog 'n rede ook. 109 00:04:57,530 --> 00:05:03,890 Wat anders kon terugkeer malloc buiten die adres van 'n stuk van die geheue? 110 00:05:03,890 --> 00:05:04,920 Dit kon terugkeer null. 111 00:05:04,920 --> 00:05:07,560 En omdat ons nie nagaan vir dat, sou ons doen iets 112 00:05:07,560 --> 00:05:11,350 dom vir 'n ander rede, en dit is dat ons kan vertel word scanf, lees 113 00:05:11,350 --> 00:05:16,050 die gebruiker se insette van die sleutelbord in 0 plek, alias null. 114 00:05:16,050 --> 00:05:18,890 En dit sal ook beslis sneller 'n segfault. 115 00:05:18,890 --> 00:05:21,590 So vir die toets se doel, ons sou aanvaar het een van dié as 'n 116 00:05:21,590 --> 00:05:22,740 geldige rede. 117 00:05:22,740 --> 00:05:23,420 Een daarvan is identies. 118 00:05:23,420 --> 00:05:25,720 Een is 'n bietjie meer genuanseerde. 119 00:05:25,720 --> 00:05:28,975 >> Laastens, met betrekking tot die program se gebruik van die geheue, hoe weergawe 2 en 120 00:05:28,975 --> 00:05:30,350 weergawe 3 verskil? 121 00:05:30,350 --> 00:05:35,070 So vir wat dit werd is, het ons 'n skynbaar oneindige toevoer van moontlike 122 00:05:35,070 --> 00:05:35,770 antwoorde op hierdie. 123 00:05:35,770 --> 00:05:39,300 En onder die mense se antwoorde, wat ons was hoop vir, maar ons ander aanvaar 124 00:05:39,300 --> 00:05:42,250 dinge, was 'n paar melding van die feit dat weergawe 2 gebruik 125 00:05:42,250 --> 00:05:44,560 die sogenaamde stapel. 126 00:05:44,560 --> 00:05:46,710 Weergawe 3 is die gebruik van die hoop. 127 00:05:46,710 --> 00:05:50,060 En funksioneel, beteken dit nie regtig alles maak wat veel van 'n verskil maak. 128 00:05:50,060 --> 00:05:54,040 Aan die einde van die dag, ons is nog steeds net om 50 grepe van die geheue. 129 00:05:54,040 --> 00:05:56,640 >> Maar dit was een van die moontlike antwoorde dat ons op soek na. 130 00:05:56,640 --> 00:05:59,730 Maar jy sien, as jy jou vasvrae terug van die TFS, wat ons gedoen het 131 00:05:59,730 --> 00:06:04,330 ander besprekings van aanvaar hul uiteenlopende gebruike van geheue as well. 132 00:06:04,330 --> 00:06:08,600 Maar stapel en hoop sou gewees het 'n maklike antwoord om te gaan met. 133 00:06:08,600 --> 00:06:11,150 Enige vrae? 134 00:06:11,150 --> 00:06:12,400 Ek gee jou Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: So probleem 4. 137 00:06:20,210 --> 00:06:21,985 Dit is die een waar jy het om te vul in die aantal grepe uit al 138 00:06:21,985 --> 00:06:23,460 hierdie verskillende tipes gebruik. 139 00:06:23,460 --> 00:06:24,830 So die eerste ding wat ons sien. 140 00:06:24,830 --> 00:06:27,930 Aanvaar 'n 32-bis argitektuur, soos hierdie CS50 toestel. 141 00:06:27,930 --> 00:06:33,530 So een van die fundamentele dinge oor 32-bit platforms, wat ons vertel 142 00:06:33,530 --> 00:06:37,490 presies hoe groot 'n wyser gaan te wees in die argitektuur. 143 00:06:37,490 --> 00:06:43,020 >> So onmiddellik, weet ons dat 'n wyser tipe is 32-stukkies of 4 grepe. 144 00:06:43,020 --> 00:06:46,010 So kyk na hierdie tafel, 'n knoop * is 'n muis-tipe. 145 00:06:46,010 --> 00:06:47,250 Dit gaan wees 4 grepe. 146 00:06:47,250 --> 00:06:51,640 Struct knoop *, dit is letterlik identies aan knoop ster. 147 00:06:51,640 --> 00:06:53,590 En so wat gaan wees 4 grepe. 148 00:06:53,590 --> 00:06:58,270 String, sodat dit nie soos 'n lyk aanwijzer nie, maar die typedef, 'n 149 00:06:58,270 --> 00:07:01,590 string is net 'n kar *, wat is 'n muis-tipe. 150 00:07:01,590 --> 00:07:03,550 So wat gaan wees 4 grepe. 151 00:07:03,550 --> 00:07:06,150 >> So hierdie drie is al 4 grepe. 152 00:07:06,150 --> 00:07:09,350 Nou, knoop en student is 'n bietjie meer ingewikkeld. 153 00:07:09,350 --> 00:07:15,160 So kyk na knoop en student, sien ons node as 'n heelgetal en 'n wyser. 154 00:07:15,160 --> 00:07:18,050 En student is twee wysers binnekant van dit. 155 00:07:18,050 --> 00:07:23,340 So ten minste vir ons saak hier, die pad dat ons uiteindelik die berekening van die grootte van 156 00:07:23,340 --> 00:07:27,020 hierdie struct is net optel alles dit is binne-in die struct. 157 00:07:27,020 --> 00:07:30,690 >> So vir knoop, ons het 'n heelgetal is, wat 4 grepe. 158 00:07:30,690 --> 00:07:32,830 Ons het 'n wyser, wat 4 grepe. 159 00:07:32,830 --> 00:07:35,820 En so 'n knoop gaan te neem 8 grepe. 160 00:07:35,820 --> 00:07:39,490 En soortgelyk vir student, het ons 'n wyser wat 4 grepe en 'n ander 161 00:07:39,490 --> 00:07:40,770 wyser wat 4 grepe. 162 00:07:40,770 --> 00:07:43,180 So wat gaan aan die einde up om 8 grepe. 163 00:07:43,180 --> 00:07:45,480 So knoop en student is 8 grepe. 164 00:07:45,480 --> 00:07:48,950 En hierdie drie is al 4 grepe. 165 00:07:48,950 --> 00:07:50,240 Vrae oor dit? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Ja. 168 00:07:54,990 --> 00:07:58,413 >> Publiek: Is dit was 'n 64-bietjie argitektuur, sou dit 169 00:07:58,413 --> 00:07:59,880 verdubbel almal van hulle? 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: sou dit nie verdubbel almal van hulle. 171 00:08:01,790 --> 00:08:05,830 So 64-bis argitektuur, is dit weer, veranderinge wat fundamentele ding wat 'n 172 00:08:05,830 --> 00:08:08,910 wyser is nou 64 stukkies. 173 00:08:08,910 --> 00:08:09,290 Ja. 174 00:08:09,290 --> 00:08:10,930 So 'n wyser is 8 grepe. 175 00:08:10,930 --> 00:08:15,420 So het hierdie wat 4 grepe gaan wees 8 grepe. 176 00:08:15,420 --> 00:08:18,617 'N Student, wat twee wysers, Wel, nou is dit gaan 177 00:08:18,617 --> 00:08:19,800 wees 8 grepe, 8 grepe. 178 00:08:19,800 --> 00:08:21,980 Dit gaan 16 grepe te maak. 179 00:08:21,980 --> 00:08:25,710 >> Maar 'n knoop is nog 4 grepe. 180 00:08:25,710 --> 00:08:27,800 So dit wyser gaan om 8 grepe. 181 00:08:27,800 --> 00:08:28,930 Dit is 4 grepe. 182 00:08:28,930 --> 00:08:30,870 So 'n knoop is slegs gaan te wees 12 grepe. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Enige ander vrae oor daardie een? 185 00:08:39,280 --> 00:08:44,500 So die volgende een, dit is die HTTP status kode. 186 00:08:44,500 --> 00:08:48,000 En jy moes omstandighede te beskryf waaronder hierdie mag 187 00:08:48,000 --> 00:08:49,810 word aan u terugbesorg. 188 00:08:49,810 --> 00:08:56,730 een probleem wat ek gehoor het sommige studente het, is dat hulle probeer het om die 189 00:08:56,730 --> 00:08:58,950 foute op die kliënt se einde. 190 00:08:58,950 --> 00:09:02,320 So wanneer ons probeer om die versoek te maak na die bediener, iets gaan 191 00:09:02,320 --> 00:09:03,820 verkeerd aan ons kant. 192 00:09:03,820 --> 00:09:07,660 Maar oor die algemeen, hierdie kodes is van teruggestuur word deur die bediener. 193 00:09:07,660 --> 00:09:11,720 So wil ons om uit te vind wat gaan reg of verkeerd op die bediener wat 194 00:09:11,720 --> 00:09:14,280 veroorsaak hierdie dinge teruggestuur moet word. 195 00:09:14,280 --> 00:09:18,670 So hoekom kan 'n bediener opbrengste status kode 200? 196 00:09:18,670 --> 00:09:19,920 Enige gedagtes? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Ja. 199 00:09:23,730 --> 00:09:27,850 So iets suksesvol versoek het deur. 200 00:09:27,850 --> 00:09:30,260 En hulle is in staat om terug te keer alles wat jy gevra het. 201 00:09:30,260 --> 00:09:32,240 So alles is fine. 202 00:09:32,240 --> 00:09:35,662 Wat van 302 gevind? 203 00:09:35,662 --> 00:09:36,618 Ja. 204 00:09:36,618 --> 00:09:39,008 >> Publiek: Die bediener is op soek na vir wat jy versoek. 205 00:09:39,008 --> 00:09:40,442 Maar dit kan dit nie vind nie. 206 00:09:40,442 --> 00:09:42,850 So daar is 'n fout. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: So het die bediener was soek na wat jy wil hê. 208 00:09:47,720 --> 00:09:51,682 So soek net hier, 302 gevind, dit was in staat om dit te vind. 209 00:09:51,682 --> 00:09:53,035 >> Publiek: Ek is jammer. 210 00:09:53,035 --> 00:09:54,388 Gevind beteken dat hulle het dit vind. 211 00:09:54,388 --> 00:09:55,638 Jammer. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: So 302 gevind. 214 00:10:00,160 --> 00:10:02,350 Die bediener in staat is om te vind wat jy wou hê. 215 00:10:02,350 --> 00:10:04,640 >> Publiek: Maar dit is nie te vertoon? 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: Die verskil tussen hierdie 302 en 200 is dat dit 217 00:10:08,180 --> 00:10:09,280 weet wat jy wil. 218 00:10:09,280 --> 00:10:12,000 Maar dit is nie presies waar wou jy vra. 219 00:10:12,000 --> 00:10:14,580 So 302 is 'n tipiese aanstuur. 220 00:10:14,580 --> 00:10:16,510 So jy het 'n bladsy. 221 00:10:16,510 --> 00:10:19,590 Dit weet, o, ek wil om terug te keer nie. 222 00:10:19,590 --> 00:10:21,070 Maar dit is op 'n ander URL. 223 00:10:21,070 --> 00:10:23,534 So hey, wat jy eintlik wil hê nie. 224 00:10:23,534 --> 00:10:26,950 >> David J. MALAN: Dit is 'n stuk wat gesê dat ons het julle 'n aanstuur 225 00:10:26,950 --> 00:10:30,830 funksie wat gebruik word om die kop funksie wat op sy beurt, uitgedruk plek, 226 00:10:30,830 --> 00:10:34,110 kolon, en dan die URL na wat jy wil die gebruiker te verwerp. 227 00:10:34,110 --> 00:10:37,480 Selfs al is jy nie sien nie 302 het uitdruklik daar, dit is wat PHP 228 00:10:37,480 --> 00:10:41,550 sou mettertyd voeg as die kop sê presies wat Rob daar gesê - 229 00:10:41,550 --> 00:10:41,930 gevind. 230 00:10:41,930 --> 00:10:43,180 Maar gaan hier plaas. 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 So, wat oor 403 verbied? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Publiek: Ek dink dit is dat die bediener is basies sê dat die kliënt 236 00:10:57,120 --> 00:10:59,970 kan nie toegang tot die tuisblad. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: So ja. 238 00:11:03,260 --> 00:11:07,670 Wel, die tipiese antwoord wat ons was verwag is iets soos die lêers 239 00:11:07,670 --> 00:11:08,920 is nie toepaslik chmodded. 240 00:11:08,920 --> 00:11:11,590 Dit is waarskynlik onder watter omstandighede jy hulle sien. 241 00:11:11,590 --> 00:11:18,920 Maar daar is 'n rede dat die kliënt hier kon wees by die skuld. 242 00:11:18,920 --> 00:11:20,440 Daar is eintlik 'n ander status kode - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 So dit is baie soortgelyk. 245 00:11:22,820 --> 00:11:24,590 >> 401 is ongemagtigde. 246 00:11:24,590 --> 00:11:26,130 En 403 is verbode. 247 00:11:26,130 --> 00:11:31,890 En so ongemagtigde jy eksklusief kry as jy nie in geteken 248 00:11:31,890 --> 00:11:34,520 Maar in te teken kan beteken dat jy gemagtig is. 249 00:11:34,520 --> 00:11:37,930 Maar as jy reeds aangemeld en jy nog nie toestemming het nie, dan 250 00:11:37,930 --> 00:11:40,140 jy kan ook verbode. 251 00:11:40,140 --> 00:11:45,320 So as jy aangemeld en het nie toestemming, verbode is ook 252 00:11:45,320 --> 00:11:47,164 iets wat jy kan kry. 253 00:11:47,164 --> 00:11:48,900 >> David J. Malan en die meganisme deur wat hierdie probleme is gewoonlik 254 00:11:48,900 --> 00:11:53,100 opgelos op die bediener is via wat opdrag? 255 00:11:53,100 --> 00:11:57,700 Chmod, as dit is inderdaad 'n regte uitreik op die lêer of gids. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: Toe 404 nie gevind nie. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Ja. 259 00:12:03,470 --> 00:12:10,150 So in teenstelling met 302 waar dit was nie presies waar jy vra, maar dit weet wat 260 00:12:10,150 --> 00:12:12,710 wat jy wil, dit is, is dit net het geen idee wat jy wil. 261 00:12:12,710 --> 00:12:15,648 En jy is nie die versoek iets geldig is. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Ek is 'n teepot en dan 500 interne bediener. 264 00:12:22,310 --> 00:12:24,870 So hoekom sou jy dit? 265 00:12:24,870 --> 00:12:26,120 >> So segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Ek het eintlik nie ken nie die gradering standaard vir hierdie. 268 00:12:30,640 --> 00:12:34,850 Maar as jou PHP-kode het iets verkeerd in dit, in teorie, kan dit 269 00:12:34,850 --> 00:12:39,650 eintlik segfault, in watter geval, hierdie 500 interne bediener fout, iets 270 00:12:39,650 --> 00:12:41,400 is verkeerd met jou bediener se opset. 271 00:12:41,400 --> 00:12:44,320 Of is daar 'n fout in jou PHP-kode. 272 00:12:44,320 --> 00:12:46,095 Of iets wat sleg is aan die gang. 273 00:12:46,095 --> 00:12:48,320 >> David J. Malan Ons het sien segfault onder 'n paar mense se antwoorde. 274 00:12:48,320 --> 00:12:49,490 En tegnies, kan dit gebeur. 275 00:12:49,490 --> 00:12:53,820 Maar dit sou wees om 'n PHP, die program geskryf deur ander mense, eintlik 276 00:12:53,820 --> 00:12:57,790 segfaulted, wat net as die mense verfrommeld en geskryf karretjie kode in 277 00:12:57,790 --> 00:13:00,680 hul tolk sou PHP self segfault. 278 00:13:00,680 --> 00:13:06,460 So selfs al 500 is soos 'n segfault in die gees, dit is byna altyd die 279 00:13:06,460 --> 00:13:10,490 gevolg van 'n konfigurasielêer kwessie met jou web bediener of, as Rob gesê, 280 00:13:10,490 --> 00:13:13,200 'n fout, soos jy het nie 'n kwotasie te sluit. 281 00:13:13,200 --> 00:13:16,180 Of jy 'n kommapunt verloor iewers. 282 00:13:16,180 --> 00:13:23,677 >> Publiek: So vir die taxi pset, ek dink toe ek dit gedoen het toe ek gebruik is die 283 00:13:23,677 --> 00:13:26,300 leser, maar niks gekom, wat hulle genoem wit bladsy. 284 00:13:26,300 --> 00:13:28,056 Maar dit was as gevolg van die kode. 285 00:13:28,056 --> 00:13:29,440 Ek dink dit was JavaScript, reg? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Ja. 287 00:13:29,770 --> 00:13:31,180 >> Publiek: Sou die fout nog kom? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: So sal jy nie gekry het hierdie fout, want alles 289 00:13:34,290 --> 00:13:36,930 uit die web bediener se perspektief was heeltemal fyn. 290 00:13:36,930 --> 00:13:39,090 Maar jy versoek index.html. 291 00:13:39,090 --> 00:13:42,000 Jy versoek shuttle.js en service.js. 292 00:13:42,000 --> 00:13:44,580 En dit was in staat om terug te keer aan jou al hierdie dinge - 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 Dit is eers wanneer die leser probeer die JavaScript-kode interpreteer wat 296 00:13:49,330 --> 00:13:51,370 Dit is soos, wag, dit is nie geldig JavaScript fout. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Enige ander vrae? 299 00:13:58,210 --> 00:14:00,750 Alle regte. 300 00:14:00,750 --> 00:14:04,120 >> David J. Malan So volgende up was nommer 11. 301 00:14:04,120 --> 00:14:07,610 En 11 was die scariest vir 'n klomp mense. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 So is die belangrikste ding om daarop te let was dat dit inderdaad oor 304 00:14:18,570 --> 00:14:19,840 'n dubbel gekoppel lys. 305 00:14:19,840 --> 00:14:23,160 Maar dit was nie die dieselfde as verlede jaar se dubbelgeskakelde lys probleem, 306 00:14:23,160 --> 00:14:27,170 wat nie gee jou die voorbehoud dat Die lys kan, in werklikheid, wees ongesorteerde. 307 00:14:27,170 --> 00:14:29,640 >> So die feit dat die lys was ongesorteerde en die feit dat die woord was 308 00:14:29,640 --> 00:14:32,930 onderstreep daar was bedoel om te dra dat dit eintlik 'n vereenvoudiging 309 00:14:32,930 --> 00:14:35,430 van wat andersins sou gewees het 'n meer uitdagende probleem 310 00:14:35,430 --> 00:14:36,600 en 'n langer een. 311 00:14:36,600 --> 00:14:40,760 So 'n algemene fout hier was om te sit verlede jaar se oplossing op jou een 312 00:14:40,760 --> 00:14:45,580 pager en dan net blindelings kopieer wat af as die antwoord, wat is die regte 313 00:14:45,580 --> 00:14:48,520 antwoord op 'n ander vraag soortgelyke in gees. 314 00:14:48,520 --> 00:14:51,340 Maar die subtiele hier was soos volg. 315 00:14:51,340 --> 00:14:55,200 >> So, het ons dit 'n knoop verklaar en omskryf in die gewone manier hier. 316 00:14:55,200 --> 00:14:59,230 Daarna het ons gedefinieer lys van 'n globale wyser geïnisialiseer te null. 317 00:14:59,230 --> 00:15:02,150 Dan glo, is daar twee funksies ons het prototipes vir hier, vul 318 00:15:02,150 --> 00:15:03,240 en verwyder. 319 00:15:03,240 --> 00:15:06,600 En dan het ons 'n paar voorbeelde kode hier doen 'n klomp van die invoegings. 320 00:15:06,600 --> 00:15:09,930 En dan vra ons u om te voltooi die implementering van insetsel hieronder in sulke 321 00:15:09,930 --> 00:15:14,380 'n manier dat dit voeg n in die lys in konstante tyd, ook onderstreep, 322 00:15:14,380 --> 00:15:15,730 selfs al reeds teenwoordig. 323 00:15:15,730 --> 00:15:20,600 >> So het die skoonheid van die staat om in te voeg in konstante tyd is dat dit impliseer 324 00:15:20,600 --> 00:15:23,060 wat jy hoef te plaas die nuwe knoop waar? 325 00:15:23,060 --> 00:15:23,690 In die voorkant. 326 00:15:23,690 --> 00:15:27,760 So dit elimineer, gelukkig, ten minste een van die gevalle wat gebruik word om te vereis 327 00:15:27,760 --> 00:15:30,520 nog meer reëls van die kode, soos dit gedoen het verlede jaar en selfs in die klas wanneer ons 328 00:15:30,520 --> 00:15:34,040 gepraat deur hierdie soort ding met mense en met 'n paar 329 00:15:34,040 --> 00:15:35,250 verbale pseudokode. 330 00:15:35,250 --> 00:15:39,190 So in die oplossing hier, laat ons spring oor aan dié net 'n visuele op te hê 331 00:15:39,190 --> 00:15:40,480 die skerm. 332 00:15:40,480 --> 00:15:42,230 >> Let daarop dat ons die volgende doen. 333 00:15:42,230 --> 00:15:45,140 En ook kennis van die ander vereenvoudiging was dat selfs al is dit 334 00:15:45,140 --> 00:15:48,280 reeds teenwoordig, so dit beteken selfs al die nommer is reeds daar, jy kan 335 00:15:48,280 --> 00:15:50,280 net blindelings 'n ander een afskrif daarvan. 336 00:15:50,280 --> 00:15:52,560 En dit was ook bedoel om 'n te wees vereenvoudiging, sodat jy kan 337 00:15:52,560 --> 00:15:54,940 fokus op, regtig, sommige van die meer intellektueel interessante deel en 338 00:15:54,940 --> 00:15:58,090 nie net 'n paar ekstra foutkontroles gegewe die beperkte tyd. 339 00:15:58,090 --> 00:16:02,880 >> So in hierdie monster oplossing, ons ken 'n wyser op die linker 340 00:16:02,880 --> 00:16:04,510 kant hier om 'n knoop. 341 00:16:04,510 --> 00:16:07,190 Nou, besef dat wyser, soos Rob sê, is slegs 32 stukkies. 342 00:16:07,190 --> 00:16:09,060 En dit maak nie eintlik bevat 'n adres totdat jy 343 00:16:09,060 --> 00:16:09,970 gee dit die adres. 344 00:16:09,970 --> 00:16:13,220 En ons doen dit op die regterkant kant via malloc. 345 00:16:13,220 --> 00:16:16,550 Soos 'n goeie burger, het ons seker maak dat malloc is nie, in werklikheid, null, sodat 346 00:16:16,550 --> 00:16:18,690 ons nie per ongeluk nie ' 'n segfault hier. 347 00:16:18,690 --> 00:16:22,840 En enige tyd wat jy malloc gebruik in die lewe, het jy moet beheer word for null, sodat 348 00:16:22,840 --> 00:16:24,090 jy het 'n subtiele fout. 349 00:16:24,090 --> 00:16:28,460 >> Dan inisialiseer ons dat null deur toeken N en vorige en die volgende. 350 00:16:28,460 --> 00:16:32,450 En in hierdie geval hier, ek geïnisialiseer vorige te null, want hierdie nuwe 351 00:16:32,450 --> 00:16:34,780 knoop gaan na die nuwe wees die begin van my lys. 352 00:16:34,780 --> 00:16:37,050 So daar gaan wees niks voor dit. 353 00:16:37,050 --> 00:16:42,010 En ek wil in wese voeg die bestaande lys aan die nuwe knoop deur 354 00:16:42,010 --> 00:16:44,700 die opstel van die volgende gelyk om homself te noem. 355 00:16:44,700 --> 00:16:47,120 Maar ek is nie net nog gedoen. 356 00:16:47,120 --> 00:16:51,780 So as die lys self reeds bestaan, en daar was ten minste een knoop 357 00:16:51,780 --> 00:16:57,070 reeds in plek is, al is dit in die lys hier en ek sit 'n nuwe node hier, ek 358 00:16:57,070 --> 00:17:01,840 nodig om seker te maak dat my voormalige knoop agtertoe wys aan my nuwe knoop, 359 00:17:01,840 --> 00:17:04,260 want dit is weer, 'n dubbel gekoppel lys. 360 00:17:04,260 --> 00:17:05,460 >> So doen ons 'n gesonde verstand tjek. 361 00:17:05,460 --> 00:17:10,109 As die lys is nie null, indien daar is reeds een of meer nodes daar is, dan 362 00:17:10,109 --> 00:17:12,470 voeg dit terug verwysing om so te praat. 363 00:17:12,470 --> 00:17:15,420 En dan is die heel laaste ding wat ons nodig om te doen is eintlik werk om die globale 364 00:17:15,420 --> 00:17:20,329 veranderlike lys self te wys daardie nuwe knoop. 365 00:17:20,329 --> 00:17:21,790 Ja. 366 00:17:21,790 --> 00:17:26,579 >> Publiek: In die wyser pyl [Onhoorbaar] is gelyk aan nul, doen dit 367 00:17:26,579 --> 00:17:30,420 gaan met die lys, want die lys is van nul? 368 00:17:30,420 --> 00:17:30,596 >> David J. Malan Nee. 369 00:17:30,596 --> 00:17:34,500 Dit is net vir my om proaktief versigtig, in dat indien dit is my 370 00:17:34,500 --> 00:17:38,730 oorspronklike lys met miskien 'n bietjie meer nodes hier en ek is die inbring van my 371 00:17:38,730 --> 00:17:42,380 nuwe node hier, daar gaan niks meer as om hier te wees. 372 00:17:42,380 --> 00:17:44,720 En ek wil hê dat die idee om te vang deur die oprigting van die vorige aan 373 00:17:44,720 --> 00:17:47,740 nul op die nuwe knoop. 374 00:17:47,740 --> 00:17:51,410 En vermoedelik, as my kode is korrek en daar is geen ander manier te voeg 375 00:17:51,410 --> 00:17:54,970 nodes anders as om hierdie funksie, vermoedelik, selfs al is lys het reeds 376 00:17:54,970 --> 00:18:00,090 een of meer nodes in dit, vermoedelik die lys, die eerste knoop, sal 'n 377 00:18:00,090 --> 00:18:02,750 vorige wyser van nul self. 378 00:18:02,750 --> 00:18:03,550 >> Publiek: En net 'n follow-up. 379 00:18:03,550 --> 00:18:08,139 Die rede waarom jy sit wyser volgende gelykes lys is jy maak die wyser 380 00:18:08,139 --> 00:18:13,579 voordat lys in wat dit is wys na die volgende, ek dink - 381 00:18:13,579 --> 00:18:14,980 Ek moenie - 382 00:18:14,980 --> 00:18:15,450 net noem? 383 00:18:15,450 --> 00:18:16,400 >> David J. MALAN: Presies. 384 00:18:16,400 --> 00:18:19,400 En so laat ons eintlik kyk na twee gevalle hier regtig nie, selfs al is die 385 00:18:19,400 --> 00:18:22,070 Om ons sal hulle oorweeg is nie heeltemal dieselfde as die kode. 386 00:18:22,070 --> 00:18:26,250 Maar op 'n hoë vlak, as dit verteenwoordig lys en dit is 'n 32-bietjie 387 00:18:26,250 --> 00:18:29,560 wyser, die eenvoudigste scenario is dat dit nietig is by verstek. 388 00:18:29,560 --> 00:18:33,010 En dink ek wil voeg die nommer 50 was die eerste getal. 389 00:18:33,010 --> 00:18:37,640 So ek gaan om voort te gaan en ken 'n knoop, wat gaan bevat 390 00:18:37,640 --> 00:18:38,770 drie velde - 391 00:18:38,770 --> 00:18:42,070 n, vorige en volgende. 392 00:18:42,070 --> 00:18:44,580 >> Ek gaan die nommer 50 te sit hier, want dit sal n wees. 393 00:18:44,580 --> 00:18:46,130 Dit sal die volgende wees. 394 00:18:46,130 --> 00:18:48,530 En dit sal wees vorige. 395 00:18:48,530 --> 00:18:50,910 En ja, wat kan ek doen in hierdie geval? 396 00:18:50,910 --> 00:18:53,900 Wel, ek het net gedoen hier reël 1. 397 00:18:53,900 --> 00:18:55,400 Pointer n kry n. 398 00:18:55,400 --> 00:18:57,740 Ek is dan sê, vorige moet kry null. 399 00:18:57,740 --> 00:18:59,470 So dit gaan van nul. 400 00:18:59,470 --> 00:19:01,365 Toe ek gaan om te sê die volgende gaan lys te kry. 401 00:19:01,365 --> 00:19:05,150 >> En dit werk net goed uit. 402 00:19:05,150 --> 00:19:06,500 Dit is nul. 403 00:19:06,500 --> 00:19:10,620 En so ek sê, die nuwe node se volgende gebied moet kry wat dit is. 404 00:19:10,620 --> 00:19:12,570 So wat stel 'n ander null daar. 405 00:19:12,570 --> 00:19:14,510 En dan is die laaste ding wat Ek is hier om te gaan. 406 00:19:14,510 --> 00:19:17,870 As die lys is nie gelyk aan nul nie, maar dit is gelyk aan nul, so ons slaan wat 407 00:19:17,870 --> 00:19:18,470 geheel en al. 408 00:19:18,470 --> 00:19:23,520 En so al wat ek nou doen is lys kry wyser, wat picturaal lei tot 409 00:19:23,520 --> 00:19:25,570 'n foto soos dit. 410 00:19:25,570 --> 00:19:26,620 So dit is een scenario. 411 00:19:26,620 --> 00:19:30,490 >> En die een wat jy is te vra oor spesifiek is 'n situasie soos hierdie, 412 00:19:30,490 --> 00:19:33,190 waar ons reeds 'n een-knoop list. 413 00:19:33,190 --> 00:19:36,240 En as ek gaan terug tot in die oorspronklike probleemstelling, die volgende wat ons sal 414 00:19:36,240 --> 00:19:39,320 voeg sê, is 34, net vir ter wille van die bespreking. 415 00:19:39,320 --> 00:19:46,210 So ek gaan net gerieflik teken dat hier. 416 00:19:46,210 --> 00:19:47,540 Ek het net malloced. 417 00:19:47,540 --> 00:19:49,310 Kom ons neem Ek check for null. 418 00:19:49,310 --> 00:19:51,870 >> Nou, ek gaan inisialiseer n te wees 34. 419 00:19:51,870 --> 00:19:53,040 En dit sal wees n. 420 00:19:53,040 --> 00:19:54,670 Dit sal die volgende wees. 421 00:19:54,670 --> 00:19:57,100 En dit sal wees vorige. 422 00:19:57,100 --> 00:19:59,370 Kom ons maak seker dat ek nie kry dit terug. 423 00:19:59,370 --> 00:20:01,110 Vorige kom eerste in die definisie. 424 00:20:01,110 --> 00:20:03,070 Laat my dit regmaak. 425 00:20:03,070 --> 00:20:04,410 Dit is die vorige. 426 00:20:04,410 --> 00:20:05,780 Dit is die volgende. 427 00:20:05,780 --> 00:20:08,620 Selfs al is dit is identies, laat ons hou dit konsekwent. 428 00:20:08,620 --> 00:20:09,450 >> Vorige. 429 00:20:09,450 --> 00:20:11,030 Dit is die volgende. 430 00:20:11,030 --> 00:20:16,310 So ek het net malloced my kennis, nagegaan for null, wat 34 in die knoop. 431 00:20:16,310 --> 00:20:17,570 Vorige kry null. 432 00:20:17,570 --> 00:20:19,480 So wat gee my dat. 433 00:20:19,480 --> 00:20:21,010 Volgende kry lys. 434 00:20:21,010 --> 00:20:22,370 So lys is nie. 435 00:20:22,370 --> 00:20:26,520 So, dit is nou dieselfde as die opstel van hierdie pyl, sodat hulle na die een 436 00:20:26,520 --> 00:20:27,940 in dieselfde. 437 00:20:27,940 --> 00:20:30,400 En dan is ek seker te maak dat die lys is nie gelyk aan nul. 438 00:20:30,400 --> 00:20:31,740 En dit is nie hierdie tyd. 439 00:20:31,740 --> 00:20:35,580 Dan gaan ek n lys te doen vorige kry wyser. 440 00:20:35,580 --> 00:20:39,700 >> So 'n lys van vorige kry PTR. 441 00:20:39,700 --> 00:20:44,300 So dit het die effek van om 'n grafiese pyl hier. 442 00:20:44,300 --> 00:20:46,930 En dit is 'n bietjie golwende, die lyne. 443 00:20:46,930 --> 00:20:50,780 En dan, laastens, ek werk lys om te wys op Wijzer. 444 00:20:50,780 --> 00:20:55,560 So nou is dit wys om hierdie man. 445 00:20:55,560 --> 00:20:57,170 En nou, laat ons 'n vinnige gesonde verstand tjek. 446 00:20:57,170 --> 00:20:59,470 >> Hier is die lys, wat die globale veranderlike. 447 00:20:59,470 --> 00:21:02,850 Die eerste nodus is inderdaad 34, want Ek volg wat pyl. 448 00:21:02,850 --> 00:21:05,210 En dit is nie korrek nie omdat ek wil voeg aan die begin van die lys 449 00:21:05,210 --> 00:21:06,070 alle nuwe nodes. 450 00:21:06,070 --> 00:21:08,860 Sy volgende veld lei my aan hierdie man. 451 00:21:08,860 --> 00:21:10,710 As ek gaan hou, slaan ek die volgende is leeg. 452 00:21:10,710 --> 00:21:11,760 So daar is nie meer die lys. 453 00:21:11,760 --> 00:21:14,460 As ek getref vorige, ek kry terug na waar ek verwag. 454 00:21:14,460 --> 00:21:16,435 >> So is daar nog 'n paar wenke, natuurlik, te manipuleer. 455 00:21:16,435 --> 00:21:19,870 Maar die feit dat hulle jou vertel het om te doen dit in konstante tyd beteken dat jy net 456 00:21:19,870 --> 00:21:22,910 het 'n beperkte aantal van die dinge jy mag doen nie. 457 00:21:22,910 --> 00:21:24,290 En wat is die getal? 458 00:21:24,290 --> 00:21:25,185 Dit mag dalk 'n stap wees. 459 00:21:25,185 --> 00:21:25,700 Dit mag dalk twee. 460 00:21:25,700 --> 00:21:26,820 Dit kan wees 1000 stappe. 461 00:21:26,820 --> 00:21:30,500 Maar dit is eindig, wat beteken dat jy nie enige soort van herhaling aangaan 462 00:21:30,500 --> 00:21:32,010 hier, geen rekursie, geen loops. 463 00:21:32,010 --> 00:21:37,390 Dit is net gekry het om hard-gekodeerde lyne van die kode soos ons in hierdie voorbeeld. 464 00:21:37,390 --> 00:21:42,330 >> So het die volgende probleem 12 gevra om ons te voltooi die implementering van verwyder 465 00:21:42,330 --> 00:21:46,740 hieronder in so 'n manier dat dit verwyder n uit die lys in lineêre tyd. 466 00:21:46,740 --> 00:21:48,740 So jy het 'n bietjie meer wikkel kamer nou. 467 00:21:48,740 --> 00:21:52,380 Jy kan dat n aanvaar, indien teenwoordig in die lys, sal teenwoordig wees 468 00:21:52,380 --> 00:21:53,340 nie meer as een keer. 469 00:21:53,340 --> 00:21:56,770 En ook dit is bedoel om te wees 'n toets-gebaseerde vereenvoudig aanname, so 470 00:21:56,770 --> 00:21:59,780 dat as jy die nommer 50 iewers in die lys, wat jy doen nie ook 471 00:21:59,780 --> 00:22:02,890 hoef te bekommer oor die voortsetting te Itereer, op soek na elke moontlike 472 00:22:02,890 --> 00:22:06,990 afskrif van 50, wat net sou oorgaan in 'n paar minutia in beperkte tyd. 473 00:22:06,990 --> 00:22:10,460 >> So met verwyder, hierdie een was beslis meer uitdagend en meer 474 00:22:10,460 --> 00:22:11,640 kode te skryf. 475 00:22:11,640 --> 00:22:14,990 Maar met die eerste oogopslag, eerlik, kan dit kyk oorweldigend en soos iets 476 00:22:14,990 --> 00:22:17,060 daar is geen manier wat jy kan hê kom met 'n quiz. 477 00:22:17,060 --> 00:22:22,450 Maar as ons fokus op die individuele stappe, Hopelik sal dit skielik 478 00:22:22,450 --> 00:22:26,060 slaan jy dat elkeen van hierdie individuele stappe maak duidelik sin 479 00:22:26,060 --> 00:22:27,080 in retrospek. 480 00:22:27,080 --> 00:22:28,200 So kom ons neem 'n blik. 481 00:22:28,200 --> 00:22:32,570 >> So die eerste, ons inisialiseer wyser wees lys self. 482 00:22:32,570 --> 00:22:36,040 Want ek wil lineêre tyd, wat beteken dat Ek gaan 'n paar lus te hê. 483 00:22:36,040 --> 00:22:39,730 En 'n gemeenskaplike manier om Itereer oor die nodes in 'n lys struktuur of enige soort 484 00:22:39,730 --> 00:22:43,860 struktuur iteratief is om te neem 'n wyser na die voorkant van die data 485 00:22:43,860 --> 00:22:46,990 struktuur en dan net begin opdatering en dit loop jou pad 486 00:22:46,990 --> 00:22:48,650 deur die data struktuur. 487 00:22:48,650 --> 00:22:50,040 So ek gaan om presies dit te doen. 488 00:22:50,040 --> 00:22:54,260 >> Terwyl wyser, my tydelike veranderlike, is nie gelyk aan nul, laat 489 00:22:54,260 --> 00:22:55,660 gaan voort en kyk. 490 00:22:55,660 --> 00:22:56,910 Het ek gelukkig? 491 00:22:56,910 --> 00:23:01,740 Is die n veld in die knoop Ek is tans kyk na gelykstaande aan die 492 00:23:01,740 --> 00:23:03,380 aantal Ek is op soek na? 493 00:23:03,380 --> 00:23:05,410 En as dit so is, laat ons iets doen. 494 00:23:05,410 --> 00:23:10,020 Nou, dit agterkom indien toestand rondom die hele 495 00:23:10,020 --> 00:23:11,520 volgende reëls van die kode. 496 00:23:11,520 --> 00:23:14,610 Dit is die enigste ding wat ek omgee - vind 'n aantal in die vraag. 497 00:23:14,610 --> 00:23:18,010 So daar is geen ander is, wat dinge konseptueel 'n bietjie. 498 00:23:18,010 --> 00:23:22,040 >> Maar nou, het ek besef, en jy kan net besef dit na te dink 499 00:23:22,040 --> 00:23:24,720 dit deur 'n bietjie, daar is eintlik twee gevalle hier. 500 00:23:24,720 --> 00:23:28,060 Een daarvan is waar die knoop is by die die begin van die lys, wat 'n 501 00:23:28,060 --> 00:23:31,040 klein irriterende, want dit is 'n spesiale geval, want jy het om te gaan 502 00:23:31,040 --> 00:23:33,340 met hierdie ding, wat is die enigste anomalie. 503 00:23:33,340 --> 00:23:35,720 Oral anders in die lys, dit is dieselfde ding. 504 00:23:35,720 --> 00:23:38,050 Daar is 'n vorige knoop en 'n volgende knoop, vorige knoop, knoop volgende. 505 00:23:38,050 --> 00:23:40,940 Maar hierdie man is 'n bietjie spesiale As hy aan die begin. 506 00:23:40,940 --> 00:23:48,710 >> So as die wyser is gelyk aan die lys self, so as ek aan die begin van 507 00:23:48,710 --> 00:23:53,960 die lys en ek het n gevind, wat ek nodig het 'n paar dinge om te doen. 508 00:23:53,960 --> 00:23:59,230 Een, ek moet n lys te verander verwys na die volgende veld, 50. 509 00:23:59,230 --> 00:24:01,270 So dink dat ek probeer te verwyder 34. 510 00:24:01,270 --> 00:24:03,560 So hierdie man se het om te gaan weg in net 'n oomblik. 511 00:24:03,560 --> 00:24:07,210 >> So ek gaan om te sê, 'n lys kry aanwijzer volgende. 512 00:24:07,210 --> 00:24:08,570 Wel, dit is wyser. 513 00:24:08,570 --> 00:24:10,360 Volgende wys hier. 514 00:24:10,360 --> 00:24:17,470 So, dit is die verandering van hierdie pyl reg nou om te wys op hierdie man hier. 515 00:24:17,470 --> 00:24:19,580 Nou, onthou, ons het 'n tydelike veranderlike. 516 00:24:19,580 --> 00:24:23,520 So het ons nie gelaat enige nodes, want Ek het ook hierdie man in my 517 00:24:23,520 --> 00:24:25,010 implementering van verwyder. 518 00:24:25,010 --> 00:24:29,600 Dus, indien lys self is nie null, Ek het 'n bietjie iets op te los. 519 00:24:29,600 --> 00:24:32,690 >> Ek moet nou seker maak dat hierdie pyl, wat voorheen wys 520 00:24:32,690 --> 00:24:36,830 50-34, het dit te weg te gaan, want as ek probeer om ontslae te raak 521 00:24:36,830 --> 00:24:41,910 van 34, 50 beter nie enige handhaaf soort van terug verwysing na dit as die 522 00:24:41,910 --> 00:24:42,820 pyl voorgestel. 523 00:24:42,820 --> 00:24:44,820 So ek het net hierdie lyn. 524 00:24:44,820 --> 00:24:46,520 So dan is ek gedoen het. 525 00:24:46,520 --> 00:24:48,040 Daardie geval is eintlik redelik maklik. 526 00:24:48,040 --> 00:24:51,010 Die afkap van die hoof van die lys is relatief eenvoudig. 527 00:24:51,010 --> 00:24:52,980 >> Ongelukkig is daar hierdie irriterende anders blok. 528 00:24:52,980 --> 00:24:56,170 So nou, ek het die saak te oorweeg waar daar is iets in die middel. 529 00:24:56,170 --> 00:24:59,880 Maar dit is nie te erg nie, behalwe vir sintaksis soos hierdie. 530 00:24:59,880 --> 00:25:03,080 So as ek nie aan die begin van die lys, ek is iewers in die middel. 531 00:25:03,080 --> 00:25:08,160 En hierdie lyn hier sê, begin op watter knoop jy op. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Gaan na die vorige node se volgende gebied en wys dat die wyser. 534 00:25:18,550 --> 00:25:20,390 >> Kom ons doen dit picturaal. 535 00:25:20,390 --> 00:25:21,640 Dit was om te kry ingewikkeld. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 So as ek 'n vorige velde hier - Kom ons doen dit - volgende velde hier. 538 00:25:37,990 --> 00:25:41,200 Ek gaan my verwysings na eerder vereenvoudig as teken 'n hele klomp van die 539 00:25:41,200 --> 00:25:45,710 dinge heen en weer en kruis en dwars mekaar. 540 00:25:45,710 --> 00:25:50,870 En nou, laat ons net sê dit is 1, 2, 3 ter wille van bespreking, selfs 541 00:25:50,870 --> 00:25:53,410 hoewel dit nie in lyn met die probleem in die vraag. 542 00:25:53,410 --> 00:25:55,900 >> So hier is my lys gekoppel. 543 00:25:55,900 --> 00:25:59,300 Ek probeer twee te verwyder in hierdie spesifieke weergawe van die storie. 544 00:25:59,300 --> 00:26:01,960 So ek het wyser opgedateer te word verwys na hierdie man. 545 00:26:01,960 --> 00:26:03,315 So dit is PTR. 546 00:26:03,315 --> 00:26:04,530 Hy is hier wys. 547 00:26:04,530 --> 00:26:07,170 Dit is lys, wat bestaan wêreldwyd as tevore. 548 00:26:07,170 --> 00:26:09,200 En hy is hier wys nie saak wat. 549 00:26:09,200 --> 00:26:10,800 En nou, ek probeer om te verwyder twee. 550 00:26:10,800 --> 00:26:13,850 >> So as wyser hier wys, is ek gaan volg, blykbaar, die 551 00:26:13,850 --> 00:26:17,110 vorige wyser, wat stel my by 1. 552 00:26:17,110 --> 00:26:22,290 Ek is dan gaan om te sê dat die volgende gebied, en dit bring my aan hierdie 553 00:26:22,290 --> 00:26:25,410 boks hier, gaan gelyk wyser volgende. 554 00:26:25,410 --> 00:26:28,400 So as dit wyser, dit is volgende. 555 00:26:28,400 --> 00:26:31,840 Dit beteken dat hierdie pyl behoeftes om te verwys na hierdie man. 556 00:26:31,840 --> 00:26:35,140 >> So, wat die lyn van die kode het net gedoen is om 'n bietjie van hierdie. 557 00:26:35,140 --> 00:26:37,500 En nou, is dit lyk soos 'n stap in die regte rigting. 558 00:26:37,500 --> 00:26:41,390 Ons wil in wese op 2 uit te knip van die middel van 1 en 3. 559 00:26:41,390 --> 00:26:44,400 So maak dit sin dat ons wil roete hierdie wyser rondom dit. 560 00:26:44,400 --> 00:26:50,400 So hierdie volgende lyn te keur indien wyser volgende is nie nul is, is daar 561 00:26:50,400 --> 00:26:54,200 inderdaad iemand aan die regterkant van 2, dit beteken dat ons ook moet doen 562 00:26:54,200 --> 00:26:55,850 'n bietjie knip hier. 563 00:26:55,850 --> 00:27:00,590 >> So ek moet nou hierdie wyser om te volg en werk die vorige wyser op 564 00:27:00,590 --> 00:27:05,410 hierdie man 'n bietjie van 'n om te doen tydelike oplossing hier die punt hier. 565 00:27:05,410 --> 00:27:07,100 En nou, visueel dit is nice. 566 00:27:07,100 --> 00:27:11,930 Dit is 'n bietjie slordig in dat daar niemand wat dui op die 2 nie. 567 00:27:11,930 --> 00:27:13,600 2 dui op die linkerkant. 568 00:27:13,600 --> 00:27:14,980 En 2 dui op die regterkant. 569 00:27:14,980 --> 00:27:17,480 Maar hy kan doen wat hy wil, want hy is oor te bevry te raak. 570 00:27:17,480 --> 00:27:19,480 En dit maak nie saak wat daardie waardes is nie. 571 00:27:19,480 --> 00:27:23,040 >> Wat belangrik is, is dat die oorblywende ouens bo routing 572 00:27:23,040 --> 00:27:24,280 en onder hom nou. 573 00:27:24,280 --> 00:27:25,810 En inderdaad, dit is wat ons nou doen. 574 00:27:25,810 --> 00:27:29,360 Ons gratis wyser, wat beteken dat ons vertel die bedryfstelsel, is jy welkom 575 00:27:29,360 --> 00:27:30,906 om dit te herwin. 576 00:27:30,906 --> 00:27:34,900 En dan laastens, ons terugkeer. 577 00:27:34,900 --> 00:27:37,220 Anders onvoorwaardelik, as ons het nie teruggekeer het nie, 578 00:27:37,220 --> 00:27:38,290 ons het om te hou soek. 579 00:27:38,290 --> 00:27:41,485 So wyser gelyk wyser volgende net beteken skuif hierdie man hier. 580 00:27:41,485 --> 00:27:42,600 Skuif hierdie man hier. 581 00:27:42,600 --> 00:27:45,400 Skuif hierdie man hier indien, in werklikheid, Ons het nie die aantal 582 00:27:45,400 --> 00:27:46,960 ons soek nog. 583 00:27:46,960 --> 00:27:49,630 >> So gesê, dit lyk heeltemal oorweldigend, dink ek, op die eerste 584 00:27:49,630 --> 00:27:52,180 oogopslag, veral as jy sukkel met hierdie Tydens die toets dan sien 585 00:27:52,180 --> 00:27:52,850 iets soos hierdie. 586 00:27:52,850 --> 00:27:55,050 En jy jouself klop op die skouer. 587 00:27:55,050 --> 00:27:57,080 Wel, daar is geen manier wat ek kan hê kom met wat op die quiz. 588 00:27:57,080 --> 00:28:00,470 Maar ek sou argumenteer, jy kan as jy breek dit af in die individuele 589 00:28:00,470 --> 00:28:04,400 gevalle en net loop deur dit versigtig, al is dit weliswaar onder 590 00:28:04,400 --> 00:28:06,300 stresvolle omstandighede. 591 00:28:06,300 --> 00:28:09,470 >> Gelukkig het die prentjie gemaak alles gelukkiger. 592 00:28:09,470 --> 00:28:11,050 Jy kan dit stel in 'n aantal van maniere. 593 00:28:11,050 --> 00:28:12,760 Jy hoef nie die kriskras te doen ding hier. 594 00:28:12,760 --> 00:28:14,520 Jy kan dit doen met reguit lyne soos hierdie. 595 00:28:14,520 --> 00:28:18,790 Maar die kern van die probleem, in algemene, was om te besef dat die 596 00:28:18,790 --> 00:28:22,060 prentjie in die einde moet kyk 'n bietjie iets soos hierdie, want 597 00:28:22,060 --> 00:28:25,030 konstante tyd te kenne gegee dat jy hou storing en storing en storing die 598 00:28:25,030 --> 00:28:29,900 nuwe nodes aan die begin van die lys. 599 00:28:29,900 --> 00:28:31,960 Enige vrae? 600 00:28:31,960 --> 00:28:34,565 Waarskynlik die mees uitdagende van beslis die kodering vrae. 601 00:28:34,565 --> 00:28:37,690 >> Publiek: So is lys soortgelyk aan kop in die vorige voorbeelde. 602 00:28:37,690 --> 00:28:39,640 >> David J. MALAN: Presies, presies. 603 00:28:39,640 --> 00:28:43,130 Net 'n ander naam vir 'n globale veranderlike. 604 00:28:43,130 --> 00:28:44,380 Wêreldwyd wat? 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 So dit is die een waar jy het die paragraaf te skryf. 608 00:28:52,020 --> 00:28:56,060 Sommige mense essays geskryf vir hierdie vraag. 609 00:28:56,060 --> 00:29:00,230 Maar jy hoef net hierdie ses terme te gebruik te beskryf wat gebeur wanneer 610 00:29:00,230 --> 00:29:02,440 jy probeer om te kontak facebook.com. 611 00:29:02,440 --> 00:29:07,930 So ek sal net praat deur middel van die proses met behulp van al hierdie terme. 612 00:29:07,930 --> 00:29:11,290 So in ons leser, tik ons ​​facebook.com en druk Enter. 613 00:29:11,290 --> 00:29:17,280 So ons leser gaan 'n te bou HTTP versoek dat dit gaan om te stuur 614 00:29:17,280 --> 00:29:22,220 deur 'n proses te Facebook vir Facebook om te reageer op ons met die 615 00:29:22,220 --> 00:29:24,450 HTML van sy bladsy. 616 00:29:24,450 --> 00:29:28,800 >> So, wat is die proses wat die HTTP-versoek 617 00:29:28,800 --> 00:29:30,730 eintlik kry om te Facebook? 618 00:29:30,730 --> 00:29:32,790 So die eerste, moet ons te vertaal Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Dus net die naam gegee Facebook.com, waar eintlik nie die HTTP-versoek 620 00:29:38,780 --> 00:29:39,940 nodig het om te gaan? 621 00:29:39,940 --> 00:29:44,120 So het ons nodig het om te vertaal Facebook.com 'n IP-adres, wat uniek 622 00:29:44,120 --> 00:29:47,620 identifiseer wat masjien wat ons eintlik wil hierdie versoek te stuur na. 623 00:29:47,620 --> 00:29:49,310 Jou laptop het 'n IP-adres. 624 00:29:49,310 --> 00:29:52,240 Enigiets verbind tot die internet het 'n IP-adres. 625 00:29:52,240 --> 00:29:59,030 >> So DNS, Domain Name System, wat wat gaan om die vertaling te hanteer 626 00:29:59,030 --> 00:30:03,750 van facebook.com na 'n IP adres wat jy eintlik wil kontak. 627 00:30:03,750 --> 00:30:08,075 So het ons kontak die DNS-bedieners en sê: Wat is facebook.com? 628 00:30:08,075 --> 00:30:16,560 Dit sê, o, dit is IP adres 190,212 iets, iets, iets. 629 00:30:16,560 --> 00:30:16,900 Alle regte. 630 00:30:16,900 --> 00:30:18,850 Nou, ek weet wat die masjien Ek wil te kontak. 631 00:30:18,850 --> 00:30:22,360 >> So dan is jy jou HTTP-versoek stuur oor daardie masjien. 632 00:30:22,360 --> 00:30:24,140 So hoe gaan dit kry om die masjien? 633 00:30:24,140 --> 00:30:27,200 Wel, die versoek gaan uit router te router weerkaats. 634 00:30:27,200 --> 00:30:32,630 Onthou die voorbeeld in die klas, waar ons eintlik die roete sien dat die 635 00:30:32,630 --> 00:30:35,340 pakkies het toe ons probeer te kommunikeer. 636 00:30:35,340 --> 00:30:38,460 Ons het dit spring oor die Atlantiese Oseaan Ocean by een punt of wat ook al. 637 00:30:38,460 --> 00:30:42,820 >> So het die laaste kwartaal hawe. 638 00:30:42,820 --> 00:30:46,520 So, dit is nou op jou rekenaar. 639 00:30:46,520 --> 00:30:49,970 Jy kan verskeie dinge tans kommunikasie met die internet. 640 00:30:49,970 --> 00:30:53,730 So ek kan loop, sê, Skype. 641 00:30:53,730 --> 00:30:55,670 Ek het dalk 'n webblaaier oop. 642 00:30:55,670 --> 00:30:59,010 Ek kan iets het wat torrenting lêers. 643 00:30:59,010 --> 00:31:00,880 So al hierdie dinge is kommunikasie met die 644 00:31:00,880 --> 00:31:02,600 internet in een of ander manier. 645 00:31:02,600 --> 00:31:08,070 >> So wanneer jou rekenaar 'n paar data ontvang van die internet, hoe dit 646 00:31:08,070 --> 00:31:10,130 weet wat aansoek eintlik wil die data? 647 00:31:10,130 --> 00:31:12,610 Hoe werk dit weet of hierdie spesifieke data is bedoel vir die 648 00:31:12,610 --> 00:31:16,070 torrenting aansoek teengestaan aan die web leser? 649 00:31:16,070 --> 00:31:20,980 So, dit is die doel van die hawens in daardie al hierdie programme het 650 00:31:20,980 --> 00:31:22,720 beweer dat 'n poort op jou rekenaar. 651 00:31:22,720 --> 00:31:27,580 So jou webblaaier sê, hey, Ek luister op poort 1000. 652 00:31:27,580 --> 00:31:32,240 En jou torrenting program sê, Ek luister op poort 3000. 653 00:31:32,240 --> 00:31:34,770 En Skype sê, ek gebruik port 4000. 654 00:31:34,770 --> 00:31:41,950 >> So wanneer jy 'n paar data wat behoort aan een van hierdie aansoeke, die data 655 00:31:41,950 --> 00:31:45,510 gemerk is met wat die hawe is dit eintlik moet saam gestuur word. 656 00:31:45,510 --> 00:31:47,950 So dit sê, o, ek behoort na die hawe 1000. 657 00:31:47,950 --> 00:31:50,950 Ek weet dan moet ek dit te stuur saam met my web browser. 658 00:31:50,950 --> 00:31:56,440 So die rede waarom dit is hier ter sprake is dat web bedieners is geneig om te 659 00:31:56,440 --> 00:31:58,240 luister op poort 80. 660 00:31:58,240 --> 00:32:02,420 So toe ek kontak Facebook.com, ek is kommunikeer met 'n paar masjien. 661 00:32:02,420 --> 00:32:06,390 Maar ek moet sê watter hawe van daardie masjien wat ek wil om te kommunikeer met. 662 00:32:06,390 --> 00:32:09,160 En web bedieners is geneig om te wees luister op poort 80. 663 00:32:09,160 --> 00:32:14,010 >> As hulle wou, kon hulle dit stel up so dit sit as op poort 7000. 664 00:32:14,010 --> 00:32:19,090 En dan in 'n webblaaier, ek kon hand te tik Facebook.com: 7000 te 665 00:32:19,090 --> 00:32:24,600 stuur die inligting na die hawe 7000 van Facebook se web bediener. 666 00:32:24,600 --> 00:32:26,820 >> David J. Malan En in hierdie geval, selfs het ons nie nodig dat mense 667 00:32:26,820 --> 00:32:30,000 noem dit, in hierdie geval, wat die hawe sou die versoek eintlik gaan? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Probeer weer. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Presies. 672 00:32:44,300 --> 00:32:47,960 Nie op soek na daardie, maar 'n subtiliteit dit is daar nie een van die laaste. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: So het die HTTPS, want dit is luister spesifiek vir die 674 00:32:51,770 --> 00:32:55,180 geïnkripteer, dit is op poort 4430. 675 00:32:55,180 --> 00:32:57,680 >> Publiek: En e-pos is 25, reg? 676 00:32:57,680 --> 00:33:00,670 >> David J. Malan Outbound e-posse, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Ek het nie eens die meeste van weet die - al die laer kinders is geneig om te wees 678 00:33:03,760 --> 00:33:06,310 voorbehou vir die dinge. 679 00:33:06,310 --> 00:33:09,260 Ek dink alles onder 1024 is voorbehou. 680 00:33:09,260 --> 00:33:13,450 >> Publiek: Waarom het jy gesê 3 was die verkeerde nommer? 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Want in 'n IP-adres, daar is vier groeperings van syfers. 682 00:33:18,820 --> 00:33:21,090 En hulle is 0-255. 683 00:33:21,090 --> 00:33:28,060 So 192.168.2.1 is 'n algemene plaaslike netwerk IP adres. 684 00:33:28,060 --> 00:33:30,840 Let almal is minder as 255. 685 00:33:30,840 --> 00:33:33,570 So toe ek begin met 300, wat kon nie moontlik ' 686 00:33:33,570 --> 00:33:35,210 is een van die getalle. 687 00:33:35,210 --> 00:33:38,170 >> David J. Malan Maar wat dom clip uit - dit was CSI, waar hulle 'n 688 00:33:38,170 --> 00:33:39,970 getal wat was te groot vir die IP-adres. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Enige vrae oor hierdie? 691 00:33:46,110 --> 00:33:51,710 Die volgende een, so volkome verandering in onderwerp, maar ons het hierdie PHP skikking 692 00:33:51,710 --> 00:33:53,270 die huise in die quad. 693 00:33:53,270 --> 00:33:56,360 En ons het 'n On-geordende lys. 694 00:33:56,360 --> 00:33:59,550 En ons wil uit te druk elke lys item net met die huis se naam. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 So het ons 'n foreach lus. 697 00:34:11,870 --> 00:34:17,540 So onthou, die sintaksis is foreach skikking as item in die skikking. 698 00:34:17,540 --> 00:34:22,360 So deur elke iterasie van die lus, huis gaan om te neem op een van die 699 00:34:22,360 --> 00:34:24,060 waardes binnekant van die skikking. 700 00:34:24,060 --> 00:34:26,530 >> Op die eerste iterasie, huis sal wees Cabot House. 701 00:34:26,530 --> 00:34:30,370 Op 'n tweede iterasie, huis sal wees Courier House en so aan. 702 00:34:30,370 --> 00:34:34,370 So vir elke quad as huis, ons is net gaan druk - 703 00:34:34,370 --> 00:34:37,250 jy kan ook weerklank het - 704 00:34:37,250 --> 00:34:42,199 die lys van die huis se naam item en dan en dan sluit die lys item. 705 00:34:42,199 --> 00:34:45,210 Die krulhakies is opsioneel hier. 706 00:34:45,210 --> 00:34:49,480 >> En dan het ons ook in die vraag gesê self, onthou om te sluit die 707 00:34:49,480 --> 00:34:50,770 On-geordende lys tag. 708 00:34:50,770 --> 00:34:53,949 Dus moet ons PHP modus te verlaat Ten einde dit te doen nie. 709 00:34:53,949 --> 00:35:00,280 Of ons kan eggo die sluit On-geordende lys tag. 710 00:35:00,280 --> 00:35:02,380 >> David J. Malan ook fyn sou hier is 'n ou skool vir gebruik 711 00:35:02,380 --> 00:35:07,340 lus met 'n $ i = 0 0 en gebruik tellings uit te vind die lengte van die straal. 712 00:35:07,340 --> 00:35:09,240 Heeltemal fyn te, net 'n bietjie wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> Publiek: So as jy op pad was na [Onhoorbaar], sou jy doen - 715 00:35:14,742 --> 00:35:16,734 Ek vergeet wat die lus [onhoorbaar] is. 716 00:35:16,734 --> 00:35:21,380 Wil jy $ quad bracket ek? 717 00:35:21,380 --> 00:35:21,850 >> David J. MALAN: Presies. 718 00:35:21,850 --> 00:35:23,100 Ja, presies. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: Enigiets anders? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> David J. MALAN: Alle reg. 723 00:35:32,010 --> 00:35:32,300 Trade-offs. 724 00:35:32,300 --> 00:35:38,290 So was daar trosse van antwoorde moontlik vir elk van hierdie. 725 00:35:38,290 --> 00:35:40,510 Ons is regtig net op soek na iets dwingende vir 'n onderstebo en 726 00:35:40,510 --> 00:35:41,100 'n nadeel. 727 00:35:41,100 --> 00:35:44,830 En die getal 16 gevra, geldigmaking gebruikers insette kliënt-kant, soos met JavaScript, 728 00:35:44,830 --> 00:35:47,280 in plaas van bediener-kant, soos met PHP. 729 00:35:47,280 --> 00:35:49,450 So, wat is 'n onderstebo van doen kliënt-kant? 730 00:35:49,450 --> 00:35:53,780 >> Wel, een van die dinge wat ons voorgestel is dat jy verminder latency, want jy 731 00:35:53,780 --> 00:35:56,750 hoef nie te pla kontak met die bediener, wat dalk 'n paar 732 00:35:56,750 --> 00:36:00,390 millisekondes of selfs 'n paar sekondes deur die vermyding van daardie en net 733 00:36:00,390 --> 00:36:04,670 validering van gebruikers se insette kliënt-kant deur verwek 'n op-stuur hanteerder en 734 00:36:04,670 --> 00:36:06,650 kyk net, het hulle tik iets in vir die naam? 735 00:36:06,650 --> 00:36:08,080 Het hulle iets tik in vir e-pos adres? 736 00:36:08,080 --> 00:36:10,950 Het hulle kies om 'n koshuiskamer van die drop-down menu? 737 00:36:10,950 --> 00:36:14,360 >> Jy kan oombliklike terugvoer gee hulle die gebruik van die rekenaar gigahertz 738 00:36:14,360 --> 00:36:16,770 of wat ook al hulle dit is eintlik op hul lessenaar. 739 00:36:16,770 --> 00:36:19,310 So dit is net 'n beter gebruikers ervaar tipies. 740 00:36:19,310 --> 00:36:24,460 Maar 'n nadeel van doen kliënt-kant goedgekeur is, as jy dit doen sonder om ook 741 00:36:24,460 --> 00:36:29,860 doen bediener-kant validering is dat mees iemand uit CS50 kom weet 742 00:36:29,860 --> 00:36:33,980 dat jy net kan stuur data wat jy wil hê aan 'n bediener enige aantal maniere. 743 00:36:33,980 --> 00:36:37,030 Om eerlik te wees, in die meeste enige leser, kan jy Klik om in die instellings en net 744 00:36:37,030 --> 00:36:40,110 afskakel JavaScript, wat, Daarom, skakel enige vorm van 745 00:36:40,110 --> 00:36:41,080 validering. 746 00:36:41,080 --> 00:36:44,460 >> Maar jy moet ook kan onthou dat selfs ek het 'n paar dinge afstandgeveg in die klas gebruik 747 00:36:44,460 --> 00:36:47,790 telnet en eintlik voorgee om 'n leser deur die stuur get 748 00:36:47,790 --> 00:36:49,240 versoeke om 'n bediener. 749 00:36:49,240 --> 00:36:51,030 En dit is beslis nie die gebruik van enige JavaScript. 750 00:36:51,030 --> 00:36:53,290 Dit is net vir my tik opdragte op 'n klavier. 751 00:36:53,290 --> 00:36:57,410 So regtig, enige programmeerder binne genoeg gemak met die web en HTTP 752 00:36:57,410 --> 00:37:01,690 kon stuur wat data wat hy of sy wil aan 'n bediener sonder bevestiging. 753 00:37:01,690 --> 00:37:05,470 En as jou bediener is nie ook nagaan, het hulle vir my 'n naam, is 754 00:37:05,470 --> 00:37:08,930 dit is eintlik 'n geldige e-posadres het, het hulle kies om 'n koshuiskamer, kan jy uiteindelik 755 00:37:08,930 --> 00:37:12,800 up inbring valse of net leeg data in jou databasis, wat waarskynlik 756 00:37:12,800 --> 00:37:15,450 is nie van plan om 'n goeie ding wees as jy is die veronderstelling dat dit daar was. 757 00:37:15,450 --> 00:37:16,770 >> So, dit is 'n irriterende werklikheid. 758 00:37:16,770 --> 00:37:19,890 Maar in die algemeen, kliënt-kant validering is groot. 759 00:37:19,890 --> 00:37:21,810 Maar dit beteken twee keer soveel werk. 760 00:37:21,810 --> 00:37:25,970 Hoewel daar wel bestaan ​​verskeie biblioteke, JavaScript biblioteke 761 00:37:25,970 --> 00:37:28,830 Byvoorbeeld, wat maak dit baie, veel minder van 'n hoofpyn. 762 00:37:28,830 --> 00:37:31,940 En jy kan onthou 'n paar van die kode bediener-kant, kliënt-kant. 763 00:37:31,940 --> 00:37:35,980 Maar nie besef dat dit is tipies addisionele werk. 764 00:37:35,980 --> 00:37:36,415 Ja. 765 00:37:36,415 --> 00:37:37,792 >> Publiek: So as ons net gesê minder veilig - 766 00:37:37,792 --> 00:37:39,205 >> David J. Malan [lag] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Dit is altyd die harder kinders te beoordeel. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN: Dit sou aanvaar is. 770 00:37:44,480 --> 00:37:44,810 >> David J. MALAN: What? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: Ek het hierdie probleem. 772 00:37:45,810 --> 00:37:46,735 Dit sou aanvaar het. 773 00:37:46,735 --> 00:37:47,220 >> David J. Malan Ja. 774 00:37:47,220 --> 00:37:47,830 >> Publiek: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: Maar ons het dit nie aanvaar vir die eerste een - 776 00:37:51,770 --> 00:37:53,630 Wel, wat ons soek, is iets soos wat jy hoef nie te 777 00:37:53,630 --> 00:37:55,270 kommunikeer met die bediener. 778 00:37:55,270 --> 00:37:58,355 Ons het nie net vinniger nie. 779 00:37:58,355 --> 00:38:00,080 >> Publiek: Wat nie herlaai bladsy? 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Ja. 781 00:38:00,430 --> 00:38:03,000 Dit was 'n aanvaarde antwoord. 782 00:38:03,000 --> 00:38:06,300 >> David J. Malan Enigiets waar ons voel dit was meer geneig as nie waarskynlik 783 00:38:06,300 --> 00:38:09,780 dat jy weet wat jy was sê, wat is 'n moeilike 784 00:38:09,780 --> 00:38:13,500 lyn soms trek. 785 00:38:13,500 --> 00:38:16,000 Met behulp van 'n gekoppelde lys plaas van 'n skikking te handhaaf 'n 786 00:38:16,000 --> 00:38:17,590 gesorteer lys van heelgetalle. 787 00:38:17,590 --> 00:38:21,000 So 'n onderstebo ons dikwels noem met gekoppelde lyste wat gemotiveer hul hele 788 00:38:21,000 --> 00:38:22,370 bekendstelling was jy dinamika. 789 00:38:22,370 --> 00:38:23,030 Hulle kan groei. 790 00:38:23,030 --> 00:38:23,950 Hulle kan krimp. 791 00:38:23,950 --> 00:38:27,370 So jy hoef nie te spring deur hoops om werklik te skep meer geheue 792 00:38:27,370 --> 00:38:28,140 met 'n verskeidenheid. 793 00:38:28,140 --> 00:38:30,310 Of jy het nie net sê, jammer, gebruiker. 794 00:38:30,310 --> 00:38:31,410 Die skikking is vol. 795 00:38:31,410 --> 00:38:35,850 So dinamiese groei van die lys. 796 00:38:35,850 --> 00:38:37,210 'N nadeel al van geskakelde lyste? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> Publiek: Dit is lineêr. 799 00:38:43,356 --> 00:38:45,800 Soek op geskakelde lys is lineêre in plaas van wat jy teken in 800 00:38:45,800 --> 00:38:46,360 >> David J. MALAN: Presies. 801 00:38:46,360 --> 00:38:50,160 Soek op 'n geskakelde lys is lineêre, selfs al is dit gesorteer, want jy kan 802 00:38:50,160 --> 00:38:53,170 Volg die volgende broodkrummels, hierdie wysers, vanaf die begin van die lys 803 00:38:53,170 --> 00:38:53,570 aan die einde. 804 00:38:53,570 --> 00:38:57,970 Jy kan nie die invloed van ewekansige toegang en Dus, binêre soek, selfs al is dit 805 00:38:57,970 --> 00:39:00,740 gesorteer, wat jy kan doen met 'n skikking. 806 00:39:00,740 --> 00:39:02,390 En daar is ook 'n ander koste. 807 00:39:02,390 --> 00:39:02,966 Ja. 808 00:39:02,966 --> 00:39:03,800 >> Publiek: Memory ondoeltreffende? 809 00:39:03,800 --> 00:39:04,130 >> David J. Malan Ja. 810 00:39:04,130 --> 00:39:06,940 Wel, ek wil nie noodwendig sê ondoeltreffend. 811 00:39:06,940 --> 00:39:10,110 Maar dit beteken kos meer geheue, want jy moet 32 ​​stukkies vir elke 812 00:39:10,110 --> 00:39:13,400 knoop vir die bykomende wyser, op minste vir 'n enkel gekoppel lys. 813 00:39:13,400 --> 00:39:16,660 Nou, as jy net die berging van heelgetalle en jy die muis wil byvoeg, dis 814 00:39:16,660 --> 00:39:17,830 eintlik soort van nie-triviaal. 815 00:39:17,830 --> 00:39:19,340 Dit is die verdubbeling van die bedrag van die geheue. 816 00:39:19,340 --> 00:39:22,330 Maar in werklikheid, as jy 'n stoor gekoppel lys van structs wat dalk 817 00:39:22,330 --> 00:39:25,540 8 grepe, 16 grepe, selfs meer as dit, dalk is dit minder 818 00:39:25,540 --> 00:39:26,500 van 'n marginale koste. 819 00:39:26,500 --> 00:39:28,320 Maar dit is 'n koste nietemin. 820 00:39:28,320 --> 00:39:31,880 So een van dié sou het is fyn as nadele. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Die gebruik van PHP plaas van C te skryf 'n opdrag-lyn program. 823 00:39:36,100 --> 00:39:41,890 So hier is, is dit dikwels vinniger te gebruik om 'n taal soos PHP of Ruby of Python. 824 00:39:41,890 --> 00:39:43,700 Jy moet net vinnig oop 'n teks editor. 825 00:39:43,700 --> 00:39:45,900 Jy het baie meer funksies aan u beskikbaar. 826 00:39:45,900 --> 00:39:49,325 PHP het die kombuis wasbak van funksies, terwyl dit in C, moet jy 827 00:39:49,325 --> 00:39:50,420 het 'n baie, baie min. 828 00:39:50,420 --> 00:39:53,820 Trouens, ouens die ken op die harde manier dat jy nie hash tabelle. 829 00:39:53,820 --> 00:39:55,000 Jy het geen lyste gekoppel het. 830 00:39:55,000 --> 00:39:57,470 As jy wil hê dat die, wat jy hoef te dit self implementeer. 831 00:39:57,470 --> 00:40:00,950 >> So een onderstebo van PHP of eintlik enige geïnterpreteer taal is die spoed 832 00:40:00,950 --> 00:40:02,920 waarmee jy kode skryf. 833 00:40:02,920 --> 00:40:06,660 Maar 'n nadeel, ons het dit gesien toe ek vinnig opgesweep n misspeller 834 00:40:06,660 --> 00:40:11,780 implementering in lesing met behulp van PHP, is dat die gebruik van 'n geïnterpreteer taal 835 00:40:11,780 --> 00:40:13,570 is gewoonlik stadiger. 836 00:40:13,570 --> 00:40:18,420 En ons sien dat aantoonbaar met 'n verhoog in die tyd van 0,3 sekondes tot 3 837 00:40:18,420 --> 00:40:24,440 sekondes, as gevolg van die interpretasie wat eintlik gebeur. 838 00:40:24,440 --> 00:40:27,060 >> Nog 'n onderstebo was dat jy hoef nie te stel. 839 00:40:27,060 --> 00:40:30,130 So dit versnel ook die ontwikkeling tot Terloops, want jy het nie 840 00:40:30,130 --> 00:40:31,360 twee stappe te loop 'n program. 841 00:40:31,360 --> 00:40:32,140 Jy moet net een. 842 00:40:32,140 --> 00:40:35,260 En so dit is mooi dwingende as well. 843 00:40:35,260 --> 00:40:38,450 Gebruik van 'n SQL databasis in plaas van CSV data te stoor. 844 00:40:38,450 --> 00:40:40,230 So SQL databasis word gebruik vir pset7. 845 00:40:40,230 --> 00:40:42,060 CSV lêers wat jy het nie veel gebruik. 846 00:40:42,060 --> 00:40:45,960 Maar jy kan dit gebruik indirek in pset7 as goed deur te praat met Yahoo Finansies. 847 00:40:45,960 --> 00:40:49,330 >> Maar CSV is net soos 'n Excel lêer, maar super eenvoudige, waar die kolomme is 848 00:40:49,330 --> 00:40:54,010 net demarked deur kommas binnekant van 'n andersins teks lêer. 849 00:40:54,010 --> 00:40:56,740 En die gebruik van 'n SQL databasis 'n bietjie meer aantreklik. 850 00:40:56,740 --> 00:41:00,060 Dit is 'n onderstebo, omdat jy dinge soos kies en voeg en te skrap. 851 00:41:00,060 --> 00:41:03,790 En jy, vermoedelik, indekse wat MySQL en ander databasis, soos 852 00:41:03,790 --> 00:41:07,510 Oracle, bou vir jou in die geheue, wat beteken dat jou kies is waarskynlik nie 853 00:41:07,510 --> 00:41:09,000 gaan lineêre bo tot onder te wees. 854 00:41:09,000 --> 00:41:11,300 Dit is eintlik gaan om iets te wees soos binêre soek of iets 855 00:41:11,300 --> 00:41:12,520 soortgelyke in gees. 856 00:41:12,520 --> 00:41:13,930 So hulle is oor die algemeen vinniger. 857 00:41:13,930 --> 00:41:16,040 >> Maar 'n nadeel is dat Dit is net meer werk. 858 00:41:16,040 --> 00:41:16,730 Dit is meer moeite. 859 00:41:16,730 --> 00:41:18,140 Jy het databasisse te verstaan. 860 00:41:18,140 --> 00:41:18,940 Jy het dit op te rig. 861 00:41:18,940 --> 00:41:20,840 Jy moet 'n bediener uit te voer die databasis op. 862 00:41:20,840 --> 00:41:22,750 Jy moet verstaan hoe om dit te stel. 863 00:41:22,750 --> 00:41:24,930 So dit is net hierdie soorte trade-offs. 864 00:41:24,930 --> 00:41:27,860 Terwyl 'n CSV-lêer, kan jy skep dit met gedit. 865 00:41:27,860 --> 00:41:28,770 En jy is goed om te gaan. 866 00:41:28,770 --> 00:41:31,550 Daar is geen kompleksiteit as dit nie. 867 00:41:31,550 --> 00:41:34,870 >> Gebruik van 'n Trie plaas van 'n hutstabel met aparte aaneenskakeling te slaan 'n 868 00:41:34,870 --> 00:41:37,490 woordeboek van woorde wat herinner van pset5. 869 00:41:37,490 --> 00:41:42,480 So 'n probeer onderstebo, in teorie ten minste, is wat? 870 00:41:42,480 --> 00:41:46,380 Konstante tyd, ten minste as jy hashing op elk van die individuele 871 00:41:46,380 --> 00:41:48,990 letters in 'n woord, soos jy mag hê vir pset5. 872 00:41:48,990 --> 00:41:52,720 Dit kan wees vyf allegaartjies, ses hashes as daar vyf of ses 873 00:41:52,720 --> 00:41:53,900 letters in die woord. 874 00:41:53,900 --> 00:41:54,580 En dit is redelik goed. 875 00:41:54,580 --> 00:41:56,910 En as daar 'n bogrens op hoe lank jou woorde kan wees, dis 876 00:41:56,910 --> 00:41:59,320 inderdaad asymptotically konstante tyd. 877 00:41:59,320 --> 00:42:05,180 >> Terwyl 'n hash tafel met aparte chaining, die probleem is daar met die 878 00:42:05,180 --> 00:42:09,070 soort data struktuur is dat die prestasie van jou algoritmes gewoonlik 879 00:42:09,070 --> 00:42:12,700 hang af van die aantal van die dinge wat reeds in die data struktuur. 880 00:42:12,700 --> 00:42:15,660 En dit is beslis die geval met kettings, waardeur die meer dinge wat jy sit 881 00:42:15,660 --> 00:42:18,800 in 'n gemors tafel, hoe langer die kettings gaan, wat beteken in die ergste 882 00:42:18,800 --> 00:42:21,960 geval, die ding wat jy dalk op soek na is al die pad aan die einde van 'n 883 00:42:21,960 --> 00:42:26,000 van daardie kettings, wat effektief wentel in iets lineêre. 884 00:42:26,000 --> 00:42:29,450 >> Nou, in die praktyk, kan dit absoluut die geval dat 'n hash tafel met 885 00:42:29,450 --> 00:42:32,820 kettings is vinniger as 'n ooreenstemmende Trie implementering. 886 00:42:32,820 --> 00:42:35,570 Maar dit is vir verskeie redes, onder wat drieë gebruik om 'n hele klomp van die 887 00:42:35,570 --> 00:42:39,240 geheue wat kan, in werklikheid, stadige dinge af, omdat jy nie lekker kry nie 888 00:42:39,240 --> 00:42:42,410 voordele van iets genoem kas, waar dinge wat naby aan mekaar 889 00:42:42,410 --> 00:42:45,420 in die geheue kan verkry word dikwels meer vinnig. 890 00:42:45,420 --> 00:42:48,180 En soms kan jy kom met 'n baie goeie hash funksie. 891 00:42:48,180 --> 00:42:51,060 Selfs al het jy 'n bietjie van te mors geheue, jy kan inderdaad in staat wees om te 892 00:42:51,060 --> 00:42:54,430 vind dinge vinnig en nie so erg soos lineêr. 893 00:42:54,430 --> 00:42:58,410 >> Dus, in kort, daar was nie noodwendig met enige van hierdie een of selfs twee 894 00:42:58,410 --> 00:43:00,050 spesifieke dinge wat ons soek. 895 00:43:00,050 --> 00:43:03,080 Werklik iets oortuigend as 'n onderstebo en negatiewe 896 00:43:03,080 --> 00:43:04,800 algemeen ons oog gevang het. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: So vir die onderstebo, ons het nie aanvaar nie op sy eie "vinniger." Jy 898 00:43:11,840 --> 00:43:14,540 het iets daaroor te sê. 899 00:43:14,540 --> 00:43:17,910 Selfs as jy teoreties vinniger gesê, ons het geweet dat jy soort van verstaan 900 00:43:17,910 --> 00:43:19,470 dis 0 van 1. 901 00:43:19,470 --> 00:43:22,820 En hash tafel, in teorie, is nie 0 of 1. 902 00:43:22,820 --> 00:43:26,550 Noem niks oor runtime algemeen het jy die punte. 903 00:43:26,550 --> 00:43:32,640 Maar "vinniger," die meeste van die oplossings op die groot bord wat drieë was 904 00:43:32,640 --> 00:43:34,990 objektief stadiger as oplossings wat hash tabelle. 905 00:43:34,990 --> 00:43:37,250 So vinniger in en van die self is nie regtig waar nie. 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 Ek is waarskynlik die enigste een wat besef dit is hoe dit veronderstel is om te 909 00:43:46,686 --> 00:43:47,500 word uitgespreek, reg? 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: Ek het eintlik geen idee nie. 911 00:43:50,400 --> 00:43:51,650 >> David J. MALAN: Dit het sin in my kop. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: Ek is besig met hierdie een. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 So dit is die een waar jy moes trek die diagram soortgelyk aan jy dalk 916 00:44:04,243 --> 00:44:06,040 gesien het op verlede eksamens. 917 00:44:06,040 --> 00:44:12,200 So laat ons net kyk na hierdie. 918 00:44:12,200 --> 00:44:18,170 So van die HTML-knoop, het ons twee kinders, die kop en die liggaam. 919 00:44:18,170 --> 00:44:20,570 So het ons tak - die kop en lyf. 920 00:44:20,570 --> 00:44:22,280 Die kop het 'n titel merk. 921 00:44:22,280 --> 00:44:23,710 So het ons 'n titel. 922 00:44:23,710 --> 00:44:28,450 >> Nou, die een ding wat 'n klomp mense vergeet is dat hierdie teks nodes 923 00:44:28,450 --> 00:44:30,430 elemente in die boom. 924 00:44:30,430 --> 00:44:36,260 So hier is ons gebeur om hulle te trek as ovale om hulle te onderskei van dié 925 00:44:36,260 --> 00:44:37,380 tipes knope. 926 00:44:37,380 --> 00:44:41,450 Maar kennisgewing ook hier het ons top, middel, en onderste sal uiteindelik 'n 927 00:44:41,450 --> 00:44:42,560 teks knope. 928 00:44:42,560 --> 00:44:46,250 So vergeet die ietwat van 'n gemeenskaplike fout. 929 00:44:46,250 --> 00:44:48,770 >> Die liggaam het drie kinders - hierdie drie divs. 930 00:44:48,770 --> 00:44:53,340 So div, div, div en dan die teks knoop kinders van die divs. 931 00:44:53,340 --> 00:44:55,900 Dit is pretty much dit vir daardie vrae. 932 00:44:55,900 --> 00:44:57,860 >> David J. Malan En dit is die moeite werd om daarop te let, selfs al het ons nie op hierdie woon nie 933 00:44:57,860 --> 00:45:01,040 besonderhede in die tyd wat ons spandeer op JavaScript, dat die einde nie, in 934 00:45:01,040 --> 00:45:02,290 Trouens, saak tegnies. 935 00:45:02,290 --> 00:45:06,330 So as hoof kom voor in die liggaam HTML, dan moet dit lyk asof die 936 00:45:06,330 --> 00:45:08,860 verlaat van die liggaam in die werklike DOM. 937 00:45:08,860 --> 00:45:12,265 Dat sy is, in die algemeen, net FYI, iets genoem dokument einde, waar 938 00:45:12,265 --> 00:45:13,260 dit maak nie saak. 939 00:45:13,260 --> 00:45:17,470 En as jy die uitvoering van 'n ontleder, 'n program wat HTML lees in die bou 940 00:45:17,470 --> 00:45:20,960 in die boom in die geheue, om eerlik te wees, dit is intuïtief waarskynlik wat jy 941 00:45:20,960 --> 00:45:24,720 doen in elk geval - van bo na onder, links na regs. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Vrae oor dit? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Moet ek doen die volgende een? 945 00:45:30,000 --> 00:45:32,380 >> David J. MALAN: Natuurlik. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 So dit is die Bufferschrijding aanval vraag. 948 00:45:39,320 --> 00:45:43,740 Die belangrikste ding om hier te erken, is, Wel, hoe kan 'n teenstander truuk 949 00:45:43,740 --> 00:45:46,170 hierdie program in die uitvoering van arbitrêre kode? 950 00:45:46,170 --> 00:45:51,860 So argv1, die eerste opdrag lyn argument tot hierdie program, kan dit wees 951 00:45:51,860 --> 00:45:53,920 arbitrêr lank. 952 00:45:53,920 --> 00:45:59,160 Maar hier is ons met behulp van memcpy te kopieer argv1, wat hier is bar. 953 00:45:59,160 --> 00:46:00,165 Ons is om dit as die argument. 954 00:46:00,165 --> 00:46:02,050 En so is dit die neem van die naam bar. 955 00:46:02,050 --> 00:46:08,040 >> So ons memcpying bar in hierdie buffer c. 956 00:46:08,040 --> 00:46:09,400 Hoeveel bytes is ons kopieer? 957 00:46:09,400 --> 00:46:14,040 Wel egter baie grepe bar gebeur word met behulp van die lengte van die argument. 958 00:46:14,040 --> 00:46:17,930 Maar c is slegs 12 grepe wyd. 959 00:46:17,930 --> 00:46:22,280 So as ons tik 'n command line argument dit is meer as 12 grepe, ons is 960 00:46:22,280 --> 00:46:25,470 gaan om dit te oorstroom veral buffer. 961 00:46:25,470 --> 00:46:31,000 Nou, hoe kan 'n teenstander mislei die program na die uitvoering van enige kode? 962 00:46:31,000 --> 00:46:34,910 >> So onthou dat hier hoof roep cat. 963 00:46:34,910 --> 00:46:37,340 En so is daar dan hoof oproepe foo. 964 00:46:37,340 --> 00:46:40,408 Kom ons teken nie. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 So het ons ons stapel. 967 00:46:46,990 --> 00:46:49,090 En die belangrikste 'n stapel raam aan die onderkant. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Op 'n sekere punt, hoof oproepe foo. 970 00:46:53,250 --> 00:46:55,390 Wel, onmiddellik, hoof oproepe foo. 971 00:46:55,390 --> 00:46:57,130 En so cat kry sy eie stapel raam. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Nou, op 'n punt, cat gaan om terug te keer. 974 00:47:02,220 --> 00:47:06,810 En toe cat opbrengste, het ons nodig het om te weet op watter lyn van die kode binnekant van die belangrikste ons 975 00:47:06,810 --> 00:47:10,610 was om te weet waar Ons moet weer in die belangrikste. 976 00:47:10,610 --> 00:47:13,100 Ons kan cat bel uit 'n hele klomp van verskillende plekke. 977 00:47:13,100 --> 00:47:14,620 Hoe weet ons waar om terug te keer? 978 00:47:14,620 --> 00:47:16,460 Wel, ons moet dit iewers te stoor. 979 00:47:16,460 --> 00:47:23,010 >> So iewers hier rond, ons slaan waar ons moet terugkeer om weer 980 00:47:23,010 --> 00:47:24,070 cat opbrengste. 981 00:47:24,070 --> 00:47:26,350 En dit is die terugkeer adres. 982 00:47:26,350 --> 00:47:30,490 So, hoe 'n teenstander kan voordeel trek hiervan is die feit dat 983 00:47:30,490 --> 00:47:37,550 hierdie buffer c gestoor word, laat sê, hier is c. 984 00:47:37,550 --> 00:47:39,690 So ons het 12 grepe vir c. 985 00:47:39,690 --> 00:47:40,540 Dit is c. 986 00:47:40,540 --> 00:47:43,030 En dit is cat se stapel ring. 987 00:47:43,030 --> 00:47:49,970 So as die kwaadwillige gebruiker meer grepe as 12 of hulle 'n opdrag 988 00:47:49,970 --> 00:47:54,570 lyn argument wat langer as 12 karakters, dan gaan ons 989 00:47:54,570 --> 00:47:57,540 oorloop hierdie buffer. 990 00:47:57,540 --> 00:47:59,910 >> Ons kan gaan hou. 991 00:47:59,910 --> 00:48:02,220 En op 'n sekere punt, ons gaan ver genoeg dat ons begin 992 00:48:02,220 --> 00:48:05,120 vervang van hierdie terugkeer adres. 993 00:48:05,120 --> 00:48:08,310 So wanneer ons vervang die adres, Dit beteken dat wanneer cat 994 00:48:08,310 --> 00:48:14,220 opbrengste, ons terugkeer na waar die kwaadwillige gebruiker vertel dat dit deur 995 00:48:14,220 --> 00:48:19,490 watter waarde dit het, wat ookal karakters die gebruiker aangegaan is. 996 00:48:19,490 --> 00:48:24,320 En so, as die kwaadwillige gebruiker om veral slim, hy kan dit hê 997 00:48:24,320 --> 00:48:29,255 terug te keer na iewers in die printDef funksie of iewers in die malloc 998 00:48:29,255 --> 00:48:31,830 funksie, net oral arbitrêr. 999 00:48:31,830 --> 00:48:38,420 >> Maar selfs meer slim is wat as hy die gebruiker terug te keer na hier. 1000 00:48:38,420 --> 00:48:41,920 En dan moet jy begin uitvoer dit as reëls van die kode. 1001 00:48:41,920 --> 00:48:46,610 So op daardie stadium, kan die gebruiker tik wat hy wil in hierdie streek. 1002 00:48:46,610 --> 00:48:52,210 En hy het volle beheer oor jou program. 1003 00:48:52,210 --> 00:48:53,460 Vrae oor dit? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 So is die volgende vraag voltooi die herimplementatie van cat in so 'n manier 1006 00:49:00,970 --> 00:49:02,620 dat dit nie meer kwesbaar. 1007 00:49:02,620 --> 00:49:03,870 >> So daar is 'n paar van die maniere jy kon dit gedoen het. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Ons het nog net c synde 'n lengte van 12. 1010 00:49:13,330 --> 00:49:16,480 Jy kan verander hierdie as deel van die oplossing. 1011 00:49:16,480 --> 00:49:18,930 Ons het ook bygevoeg 'n tjek te maak seker bar was nie null. 1012 00:49:18,930 --> 00:49:24,460 Al het jy nie nodig het wat vir volle krediet. 1013 00:49:24,460 --> 00:49:27,690 So ons eerste die beheer van die string lengte van bar. 1014 00:49:27,690 --> 00:49:31,650 As dit is meer as 12, dan nie eintlik doen die kopie. 1015 00:49:31,650 --> 00:49:33,010 So dit is een manier om van die vasstelling van dit. 1016 00:49:33,010 --> 00:49:36,750 >> Nog 'n manier van die vasstelling van dit in plaas van met c net 'n lengte van 12, het dit 1017 00:49:36,750 --> 00:49:39,310 wees van lengte StrLen (bar). 1018 00:49:39,310 --> 00:49:43,370 Nog 'n manier van die vasstelling van dit eintlik net terug te keer. 1019 00:49:43,370 --> 00:49:46,690 So as jy het net ontslae geraak het van al hierdie, as jy het net verwyder al 1020 00:49:46,690 --> 00:49:51,830 reëls van die kode, sou jy gekry het volle krediet, aangesien hierdie funksie 1021 00:49:51,830 --> 00:49:54,150 nie eintlik enigiets te bereik. 1022 00:49:54,150 --> 00:49:57,650 Dit is die kopiëring van die command line argument in 'n paar skikking in 1023 00:49:57,650 --> 00:49:59,960 sy plaaslike stapel raam. 1024 00:49:59,960 --> 00:50:01,310 En dan is die ding terugkeer. 1025 00:50:01,310 --> 00:50:04,020 En wat dit volbring is weg. 1026 00:50:04,020 --> 00:50:09,740 So terugkeer was ook 'n voldoende manier om volle krediet. 1027 00:50:09,740 --> 00:50:13,425 >> David J. Malan nie heeltemal die gees van die vraag, maar aanvaarbaar per die 1028 00:50:13,425 --> 00:50:15,580 spec nietemin. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Vrae oor enige van daardie? 1030 00:50:18,260 --> 00:50:22,270 Die een ding wat jy ten minste nodig het die opstel van kode. 1031 00:50:22,270 --> 00:50:24,810 So selfs al is jy tegnies nie kwesbaar as jou kode doen nie 1032 00:50:24,810 --> 00:50:29,130 stel, het ons nie aanvaar dat. 1033 00:50:29,130 --> 00:50:31,350 Geen vrae? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> David J. Malan Wil jy hierdie titel te sê? 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: No 1037 00:50:37,230 --> 00:50:40,470 >> David J. Malan So in hierdie een, is hierdie was óf goeie nuus of slegte nuus. 1038 00:50:40,470 --> 00:50:43,870 Dit is letterlik dieselfde probleem as die eerste toets. 1039 00:50:43,870 --> 00:50:46,140 En dit is byna dieselfde probleem as pset1. 1040 00:50:46,140 --> 00:50:49,980 Maar dit was doelbewus vereenvoudig te wees 'n eenvoudiger piramide, een wat kan wees 1041 00:50:49,980 --> 00:50:52,330 opgelos met 'n effens eenvoudiger iterasie. 1042 00:50:52,330 --> 00:50:55,680 En regtig, wat ons was om te hier is nie soseer die logika, 1043 00:50:55,680 --> 00:50:58,100 want waarskynlik deur hierdie punt, is jy meer gemaklik as jy was 1044 00:50:58,100 --> 00:51:01,850 in week een met vir sirkelroetes of hoekom loops, maar regtig uitmekaar te terg wat 1045 00:51:01,850 --> 00:51:04,790 jy is 'n bietjie gemaklik met die idee dat PHP is nie net oor wat 1046 00:51:04,790 --> 00:51:05,290 ontwikkeling. 1047 00:51:05,290 --> 00:51:07,820 Dit kan eintlik as 'n taal wat gebruik word command line programme te skryf. 1048 00:51:07,820 --> 00:51:10,060 >> En inderdaad, dit is wat ons probeer jou aandag te vestig op. 1049 00:51:10,060 --> 00:51:12,060 Dit is 'n command line PHP program. 1050 00:51:12,060 --> 00:51:16,690 So C-kode hier, terwyl korrekte in C nie korrek vir PHP. 1051 00:51:16,690 --> 00:51:17,940 Maar die kode is regtig dieselfde. 1052 00:51:17,940 --> 00:51:21,720 As jy die oplossings vir Quiz vergelyk 0 teen Quiz 1, sal jy vind dat 1053 00:51:21,720 --> 00:51:25,630 dit is byna identies, behalwe vir paar dollar tekens en vir die 1054 00:51:25,630 --> 00:51:27,250 afwesigheid van 'n data tipe. 1055 00:51:27,250 --> 00:51:31,720 In die besonder, as ons neem 'n blik hier, Jy sal sien dat ons Itereer, in hierdie 1056 00:51:31,720 --> 00:51:33,730 geval, vanaf 1 tot en met 7. 1057 00:51:33,730 --> 00:51:34,910 >> Ons kon gedoen het om dit 0 indeks. 1058 00:51:34,910 --> 00:51:37,320 Maar soms, ek dink dit is net verstandelik makliker om te dink oor dinge 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 As jy wil 'n blok, dan twee blokke, dan drie, dan 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot sewe. 1062 00:51:41,770 --> 00:51:45,960 Ons het j word geïnisialiseer 1 en dan toe op tot i. 1063 00:51:45,960 --> 00:51:48,150 En alles hier is andersins identiese. 1064 00:51:48,150 --> 00:51:49,790 Maar waardig van die nota is 'n paar dinge. 1065 00:51:49,790 --> 00:51:53,230 Ons gee jou hierdie twee lyne, die eerste een, goofily aangewys as 'n kaboedel 1066 00:51:53,230 --> 00:51:54,560 vir 'n skerp knal. 1067 00:51:54,560 --> 00:51:58,770 En dat net spesifiseer die pad, die gids, waarin 'n program kan 1068 00:51:58,770 --> 00:52:02,160 gevind dat jy wil gebruik hierdie lêer te interpreteer. 1069 00:52:02,160 --> 00:52:04,710 >> En dan is die lyn daarna, van Natuurlik beteken betree PHP af. 1070 00:52:04,710 --> 00:52:07,740 En die lyn aan die heel onderste beteken uitgang PHP af. 1071 00:52:07,740 --> 00:52:09,740 En dit werk, in die algemeen, met tale vertaal. 1072 00:52:09,740 --> 00:52:14,370 Dit is soort van irriterende as jy skryf 'n program in 'n lêer genaamd foo.php. 1073 00:52:14,370 --> 00:52:17,320 En dan jou gebruikers moet net Onthou, OK, hierdie program uit te voer, het ek 1074 00:52:17,320 --> 00:52:22,320 het om te tik "PHP ruimte foo.php." Soort irriterende as niks anders nie. 1075 00:52:22,320 --> 00:52:25,270 En dit het ook onthul dat jou program is in PHP, wat nie alle skriftelike 1076 00:52:25,270 --> 00:52:27,060 dat insiggewend vir die gebruiker. 1077 00:52:27,060 --> 00:52:30,100 >> So kan jy die. PHP heeltemal verwyder onthou uit die lesing. 1078 00:52:30,100 --> 00:52:35,690 En jy kan eintlik doen nie. / Foo as jy chmodded dit deur dit 1079 00:52:35,690 --> 00:52:36,500 uitvoerbaar nie. 1080 00:52:36,500 --> 00:52:39,630 So chmod + x 'n cat sou gedoen het nie. 1081 00:52:39,630 --> 00:52:41,460 En as jy ook voeg die kaboedel hier. 1082 00:52:41,460 --> 00:52:45,320 Maar regtig, is die probleem om te uit te druk iets soos hierdie. 1083 00:52:45,320 --> 00:52:51,100 Geen HTML, geen C-kode beslis, net 'n paar PHP. 1084 00:52:51,100 --> 00:52:54,100 So Milo dan terug in probleem 25. 1085 00:52:54,100 --> 00:52:58,050 En in 25, het jy die volgende gegewe geraamte kode, wat was 'n 1086 00:52:58,050 --> 00:52:59,730 eenvoudig webblad. 1087 00:52:59,730 --> 00:53:04,230 En die sappige deel HTML-wyse was af hier, waar ons binnekant van die liggaam 1088 00:53:04,230 --> 00:53:09,160 'n vorm wat unieke ID van insette binnekant van wat twee insette, een 1089 00:53:09,160 --> 00:53:11,950 met 'n idee van 'n naam, 'n met 'n idee van die knoppie. 1090 00:53:11,950 --> 00:53:14,240 >> Die eerste was die tipe teks, die tweede tipe dien. 1091 00:53:14,240 --> 00:53:16,930 En so het ons julle dit eintlik meer bestanddele as jy nodig het, net so 1092 00:53:16,930 --> 00:53:19,230 julle ouens het opsies waarmee Om hierdie probleem op te los. 1093 00:53:19,230 --> 00:53:21,130 Jy nie streng nodig nie al hierdie name. 1094 00:53:21,130 --> 00:53:23,580 Maar dit kan jy op te los dit in verskillende maniere. 1095 00:53:23,580 --> 00:53:27,050 En tot by die top, sien dat Die doel was om te aktiveer 1096 00:53:27,050 --> 00:53:27,960 'n venster soos hierdie - 1097 00:53:27,960 --> 00:53:28,780 Hallo, Milo! - 1098 00:53:28,780 --> 00:53:31,270 pop up in die leser met behulp van die super eenvoudige, indien 1099 00:53:31,270 --> 00:53:33,190 nie lelik, waarskuwing funksie. 1100 00:53:33,190 --> 00:53:37,480 En so, uiteindelik, kom neer konseptueel een of ander manier te luister vir 1101 00:53:37,480 --> 00:53:41,290 voorleggings van die vorm kliënt-kant , Nie die bediener-kant, een of ander manier 1102 00:53:41,290 --> 00:53:45,640 reageer op dat die indiening deur gryp die waarde wat die gebruiker getik 1103 00:53:45,640 --> 00:53:50,120 in die naam veld, en dan vertoon dit in die liggaam van 'n waarskuwing. 1104 00:53:50,120 --> 00:53:53,460 >> So 'n manier wat jy kan doen, is om met jQuery, wat 'n bietjie lyk 1105 00:53:53,460 --> 00:53:56,880 sintakties verwarrende by die eerste. 1106 00:53:56,880 --> 00:54:00,760 Jy kan dit doen met suiwer DOM-kode - document.getelement deur ID. 1107 00:54:00,760 --> 00:54:02,530 Maar laat ons neem 'n blik op hierdie weergawe. 1108 00:54:02,530 --> 00:54:05,110 Ek het 'n paar van die belangrike lyne eerste. 1109 00:54:05,110 --> 00:54:09,460 So een, ons het hierdie lyn, wat identies aan wat jy dalk gesien het 1110 00:54:09,460 --> 00:54:13,830 in, glo ek, form2.html van die klas in week 9. 1111 00:54:13,830 --> 00:54:16,960 En dit is net te sê, uit te voer die volgende kode toe 1112 00:54:16,960 --> 00:54:18,430 die dokument is gereed. 1113 00:54:18,430 --> 00:54:21,770 Dit wat belangrik is net omdat HTML bladsye is top lees 1114 00:54:21,770 --> 00:54:23,280 onder, links na regs. 1115 00:54:23,280 --> 00:54:27,910 >> En daarom, as jy probeer om te doen iets in die kode hier na 'n paar DOM 1116 00:54:27,910 --> 00:54:31,560 element, sommige HTML tag, dis af hier, jy doen dit te gou, 1117 00:54:31,560 --> 00:54:34,220 want dit het nie eens is in die geheue te lees. 1118 00:54:34,220 --> 00:54:37,740 So sê die document.ready lyn, sê ons, 1119 00:54:37,740 --> 00:54:39,040 hier is 'n paar kode, leser. 1120 00:54:39,040 --> 00:54:42,440 Maar voer nie, totdat die hele dokument gereed is, dit is die DOM 1121 00:54:42,440 --> 00:54:44,320 boom bestaan ​​in die geheue. 1122 00:54:44,320 --> 00:54:47,110 Hierdie een is 'n bietjie meer eenvoudig, as sintakties 'n 1123 00:54:47,110 --> 00:54:51,890 bietjie anders, waar ek sê, gryp die HTML element wie se unieke 1124 00:54:51,890 --> 00:54:53,560 identifiseerder is insette. 1125 00:54:53,560 --> 00:54:56,220 Dit is wat die hash tag dui die unieke ID. 1126 00:54:56,220 --> 00:54:58,070 En dan is ek 'n beroep. Dien. 1127 00:54:58,070 --> 00:55:01,660 >> So. Dien hier is 'n funksie, anders bekend as 'n metode, wat 1128 00:55:01,660 --> 00:55:05,850 binnekant van die voorwerp op die linker kant is daar dat ek nie lig. 1129 00:55:05,850 --> 00:55:08,990 So as jy dink van insette as 'n voorwerp in die geheue - en inderdaad is dit. 1130 00:55:08,990 --> 00:55:10,440 Dit is 'n knoop in 'n boom - 1131 00:55:10,440 --> 00:55:16,580 . Indien middel wanneer hierdie vorm met hierdie ID ingedien is, voer 1132 00:55:16,580 --> 00:55:17,700 die volgende kode. 1133 00:55:17,700 --> 00:55:20,290 Ek gee nie om wat die naam van die funksie is ek die uitvoering. 1134 00:55:20,290 --> 00:55:23,760 So hier Ek gebruik, soos voorheen, wat is genoem die lambda funksie of 'n 1135 00:55:23,760 --> 00:55:24,720 anonieme funksie. 1136 00:55:24,720 --> 00:55:27,640 Dit is glad nie intellektueel interessante anders as dit het nie 'n naam, 1137 00:55:27,640 --> 00:55:30,220 wat is goed as jy net ooit gaan om dit te keer bel. 1138 00:55:30,220 --> 00:55:34,490 En binne-in daar het ek eintlik hanteer die indiening van die vorm. 1139 00:55:34,490 --> 00:55:36,810 Ek het eers verklaar 'n veranderlike genoem waarde. 1140 00:55:36,810 --> 00:55:40,610 En dan wat is die uitwerking van hierdie uitgelig gedeelte hier en nou? 1141 00:55:40,610 --> 00:55:44,755 Wat beteken dat jy doen op 'n hoë vlak vir my? 1142 00:55:44,755 --> 00:55:48,539 >> Publiek: Dit raak die waarde wat die gebruiker het nie in die HTML hieronder. 1143 00:55:48,539 --> 00:55:50,920 Dit raak dat ID en dan bevind dat die waarde van dit. 1144 00:55:50,920 --> 00:55:51,590 >> David J. MALAN: Presies. 1145 00:55:51,590 --> 00:55:54,300 Dit gryp die knoop, wie se unieke identifiseerder is die naam. 1146 00:55:54,300 --> 00:55:56,900 Dit raak die waarde daarin, wat is, vermoedelik, wat die gebruiker 1147 00:55:56,900 --> 00:55:58,190 hom-of haarself getik. 1148 00:55:58,190 --> 00:56:01,020 En dan is dit die winkels wat in die veranderlike genoem waarde. 1149 00:56:01,020 --> 00:56:03,720 As 'n eenkant, kan jy ook 'n gedoen 'n bietjie anders. 1150 00:56:03,720 --> 00:56:09,250 Heeltemal aanvaarbaar om iets te doen leuen var waarde kry 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 En dit is die rede waarom dit is 'n bietjie vervelige om nie jQuery gebruik. 1154 00:56:15,460 --> 00:56:16,710 "Naam". Waarde. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 So heeltemal aanvaarbaar. 1157 00:56:19,620 --> 00:56:22,770 Verskillende maniere om dit te doen. jQuery net geneig is om 'n bietjie meer bondige en 1158 00:56:22,770 --> 00:56:25,230 beslis meer gewild onder programmeerders. 1159 00:56:25,230 --> 00:56:27,590 >> Nou, ek is besig met 'n bietjie van 'n gesonde verstand kyk, want in die probleem 1160 00:56:27,590 --> 00:56:30,820 verklaring ons uitdruklik gesê het, as die gebruiker het nog nie getik sy of haar 1161 00:56:30,820 --> 00:56:32,580 noem, nie 'n waarskuwings wys. 1162 00:56:32,580 --> 00:56:35,390 Maar jy kan kyk vir daardie, met net kontrole vir die leë string vir 'n 1163 00:56:35,390 --> 00:56:37,850 quote-unquote as daar niks werklik daar. 1164 00:56:37,850 --> 00:56:40,880 Maar as dit is nie gelyk aan quote-unquote, Ek wil kennisgewings te noem. 1165 00:56:40,880 --> 00:56:45,610 En die interessante deel hier is dat ons gebruik die plus operateur, wat 1166 00:56:45,610 --> 00:56:48,130 doen wat in JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Koppel. 1168 00:56:48,740 --> 00:56:50,690 So dit is soos PHPs dot operateur. 1169 00:56:50,690 --> 00:56:52,820 Dieselfde idee, effens anders sintaks. 1170 00:56:52,820 --> 00:56:55,280 En ek is net die skep van die string wat jy sien op die skerm geskiet - 1171 00:56:55,280 --> 00:56:57,750 Hallo, so en so. 1172 00:56:57,750 --> 00:56:59,200 >> En dan is die laaste detail is dit. 1173 00:56:59,200 --> 00:57:04,970 Hoekom moet ek terugkeer valse binnekant van hierdie anonieme funksie? 1174 00:57:04,970 --> 00:57:07,420 >> Publiek: Daar is geen waarde nie. 1175 00:57:07,420 --> 00:57:09,380 Jy het dit in die vorm. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Dit sê net, as waarde is nie gelyk aan leë, dan doen dit. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Daar was 'n leë in die voorlegging. 1180 00:57:20,940 --> 00:57:21,170 >> David J. Malan OK. 1181 00:57:21,170 --> 00:57:21,640 Versigtig. 1182 00:57:21,640 --> 00:57:22,830 Daar is niemand anders hier. 1183 00:57:22,830 --> 00:57:25,510 En dat terugkeer valse buite van die indien toestande. 1184 00:57:25,510 --> 00:57:29,470 So dit uitgelig lyn, terug valse, voer nie saak wat toe 1185 00:57:29,470 --> 00:57:32,310 die vorm ingedien word. 1186 00:57:32,310 --> 00:57:36,810 Wat beteken valse binnekant van die terugkeer geval hanteerder, soos dit genoem word, 1187 00:57:36,810 --> 00:57:38,450 die geval in die vraag synde voorlegging? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> Publiek: Omdat dit gebeur net een keer. 1190 00:57:44,470 --> 00:57:45,320 >> David J. Malan gebeur net een keer. 1191 00:57:45,320 --> 00:57:46,821 Nie heeltemal nie. 1192 00:57:46,821 --> 00:57:47,292 Ja? 1193 00:57:47,292 --> 00:57:50,589 >> Publiek: Dit verhoed dat die vorm van indiening van die standaard gedrag, 1194 00:57:50,589 --> 00:57:52,480 wat sou die bladsy herlaai. 1195 00:57:52,480 --> 00:57:53,110 >> David J. MALAN: Presies. 1196 00:57:53,110 --> 00:57:56,490 So ek oorlaai die term lê hier, want ek sê, die vorm is 1197 00:57:56,490 --> 00:57:57,670 ingedien word. 1198 00:57:57,670 --> 00:58:02,240 Maar as jy voor, dit is eintlik nie ingedien in die ware HTTP manier. 1199 00:58:02,240 --> 00:58:06,870 As jy Stuur klik, as gevolg van ons onSubmit hanteerder, ons onderskepping 1200 00:58:06,870 --> 00:58:09,040 wat deel vorm van die voorlegging so te praat. 1201 00:58:09,040 --> 00:58:11,290 Ons is dan doen ons ding met JavaScript-kode. 1202 00:58:11,290 --> 00:58:14,070 Maar ek doelbewus terugkeer valse, want wat ek wil nie om te gebeur 'n 1203 00:58:14,070 --> 00:58:18,430 split sekonde later is vir die hele vorm self aan die web ingedien word 1204 00:58:18,430 --> 00:58:22,800 bediener met sleutel waarde pare deur die verandering die URL iets te wees 1205 00:58:22,800 --> 00:58:26,180 q = katte of wat ook al wat ons gedoen het, byvoorbeeld in die klas. 1206 00:58:26,180 --> 00:58:29,640 Ek wil nie hê dat dit gebeur nie, want Daar is geen bediener luister vir hierdie 1207 00:58:29,640 --> 00:58:30,690 vorm indien. 1208 00:58:30,690 --> 00:58:32,320 Dit is suiwer gedoen in JavaScript-kode. 1209 00:58:32,320 --> 00:58:35,760 En dit is die rede waarom ek het nie eens 'n aksie kenmerk op my vorm, want ek 1210 00:58:35,760 --> 00:58:38,870 nie van plan is om dit te ooit gaan na die bediener. 1211 00:58:38,870 --> 00:58:40,780 >> So dit is wat ingedien is nie. 1212 00:58:40,780 --> 00:58:44,340 Maar ons is onderskepping wat vorm voorlegging en die voorkoming van die standaard 1213 00:58:44,340 --> 00:58:47,477 gedrag, wat eintlik gaan al die pad na die bediener. 1214 00:58:47,477 --> 00:58:48,730 >> Publiek: So hou dit kliënt-kant. 1215 00:58:48,730 --> 00:58:49,780 >> David J. MALAN: Hou dit kliënt-kant. 1216 00:58:49,780 --> 00:58:51,030 Presies reg. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Volgende aan die beurt was my o 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 So die eerste vraag was oor die algemeen rowwe vir mense. 1222 00:59:04,990 --> 00:59:07,270 Hoewel die lateres het beter. 1223 00:59:07,270 --> 00:59:12,260 So jy het die korrekte data te kies tipes vir beide van hierdie kolomme. 1224 00:59:12,260 --> 00:59:17,750 En beide van hulle het 'n paar dinge oor die wat 1225 00:59:17,750 --> 00:59:20,620 die keuse moeilik. 1226 00:59:20,620 --> 00:59:24,430 So int was nie 'n geldige tik vir die nommer. 1227 00:59:24,430 --> 00:59:29,410 Die rede hiervoor is 'n 12-syfer-rekening nommer, 'n int is nie groot genoeg is om te 1228 00:59:29,410 --> 00:59:31,070 stoor totale syfers. 1229 00:59:31,070 --> 00:59:36,570 So 'n geldige keuse 'n groot sou gewees het int as jy gebeur om te weet dat. 1230 00:59:36,570 --> 00:59:42,090 Nog 'n keuse kon gewees het 'n kar gebied van lengte 12. 1231 00:59:42,090 --> 00:59:44,560 So een van dié sou gewerk het. 1232 00:59:44,560 --> 00:59:46,100 Int wou nie. 1233 00:59:46,100 --> 00:59:50,170 >> Nou, balans, dink terug aan pset7. 1234 00:59:50,170 --> 00:59:59,540 So het ons spesifiek gebruik desimale te slaan die waarde van die aandele of - 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 Ons gebruik die bedrag van die desimale te stoor kontant wat die gebruiker op die oomblik het. 1238 01:00:05,710 --> 01:00:10,950 So die rede waarom ons doen wat want, onthou, dryf. 1239 01:00:10,950 --> 01:00:12,480 Daar is swaai punt in presisie. 1240 01:00:12,480 --> 01:00:18,200 Dit kan nie juis die stoor van die kontant waardes soos ons wil hier. 1241 01:00:18,200 --> 01:00:23,630 So desimale presies te stoor om iets te sê, twee desimale plekke. 1242 01:00:23,630 --> 01:00:27,630 Dit is waarom die balans, ons dit wil hê te desimale en nie dryf nie. 1243 01:00:27,630 --> 01:00:30,230 >> David J. Malan En ook, ook, al dit kan slim gewees het in ander 1244 01:00:30,230 --> 01:00:32,760 konteks te dink, miskien is dit is 'n kans vir 'n int. 1245 01:00:32,760 --> 01:00:34,420 Ek sal net track hou van dinge in pennies. 1246 01:00:34,420 --> 01:00:38,670 Omdat ons uitdruklik het die standaard waarde daarvan 100.00, wat 1247 01:00:38,670 --> 01:00:40,380 beteken dit kan net 'n int. 1248 01:00:40,380 --> 01:00:45,310 En 'n ander subtiel te met die getal was dat dit was nie bedoel 1249 01:00:45,310 --> 01:00:46,180 'n truuk vraag te wees. 1250 01:00:46,180 --> 01:00:49,860 Maar onthou dat 'n int in MySQL, soos in C, ten minste in die 1251 01:00:49,860 --> 01:00:51,440 toestel, is 32-bit. 1252 01:00:51,440 --> 01:00:53,960 En selfs al het ons nie verwag nie om jou te weet presies hoeveel syfers wat 1253 01:00:53,960 --> 01:00:56,910 middel, nie onthou dat die grootste aantal jy kan potensieel verteenwoordig 1254 01:00:56,910 --> 01:01:00,710 met 'n 32-bis getal is ongeveer wat? 1255 01:01:00,710 --> 01:01:02,760 >> Watter getal ons altyd sê nie? 1256 01:01:02,760 --> 01:01:04,530 2 aan die 32, wat is wat ongeveer? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Jy hoef nie te weet presies. 1259 01:01:08,780 --> 01:01:10,580 Maar min is nuttig in die lewe. 1260 01:01:10,580 --> 01:01:12,200 Dit is ongeveer 4000000000. 1261 01:01:12,200 --> 01:01:14,430 So ons het gesê dat 'n paar keer. 1262 01:01:14,430 --> 01:01:16,360 Ek weet ek het gesê dat 'n paar keer. 1263 01:01:16,360 --> 01:01:17,670 En dit is ongeveer 4000000000. 1264 01:01:17,670 --> 01:01:19,710 En dit is 'n goeie reël van die duim te leer ken. 1265 01:01:19,710 --> 01:01:21,880 As jy 8 stukkies, 256 is die magie nommer. 1266 01:01:21,880 --> 01:01:24,160 As jy 32 stukkies, 4 miljard gee of neem. 1267 01:01:24,160 --> 01:01:27,140 So as jy skryf net af 4000000000, Jy sal sien dat dit is minder as syfers 1268 01:01:27,140 --> 01:01:30,970 12, wat beteken dit is duidelik nie genoeg uitdrukking te vang 'n 1269 01:01:30,970 --> 01:01:34,220 12-syfer rekening nommer. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 So het die ander kinders het beter. 1272 01:01:38,520 --> 01:01:40,900 So veronderstel dat die bank stel 'n $ 20 maandelikse 1273 01:01:40,900 --> 01:01:42,400 onderhoud fooi op alle rekeninge. 1274 01:01:42,400 --> 01:01:45,506 Met watter SQL navraag kon die bank trek $ 20 uit elke telling, selfs al 1275 01:01:45,506 --> 01:01:47,520 dit lei tot 'n negatiewe saldo? 1276 01:01:47,520 --> 01:01:50,380 So basies, is daar vier hooftipes navrae - 1277 01:01:50,380 --> 01:01:52,840 voeg, kies, te verander en te verwyder. 1278 01:01:52,840 --> 01:01:56,080 So wat doen ons dink ons ​​is gaan hier gebruik? 1279 01:01:56,080 --> 01:01:57,000 Werk. 1280 01:01:57,000 --> 01:01:58,260 >> So kom ons neem 'n blik. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 So hier is ons opdatering. 1283 01:02:05,870 --> 01:02:09,900 Wat tafel is ons opdatering rekeninge? 1284 01:02:09,900 --> 01:02:11,670 So afhangende van rekeninge. 1285 01:02:11,670 --> 01:02:15,390 En dan is die sintaksis sê, wat in rekeninge is ons opdatering? 1286 01:02:15,390 --> 01:02:19,520 Wel, ons die opstel van balans gelyk aan die huidige waarde van minus 20. 1287 01:02:19,520 --> 01:02:22,860 So dit sal werk al die rye van rekeninge, af te trek 1288 01:02:22,860 --> 01:02:26,250 $ 20 uit die balans. 1289 01:02:26,250 --> 01:02:29,260 >> David J. MALAN: 'n algemene fout hier, selfs al het ons soms vergewe nie, 1290 01:02:29,260 --> 01:02:32,990 was eintlik 'PHP-kode hier roep die navraag funksie of om 1291 01:02:32,990 --> 01:02:35,460 aanhalingstekens rondom alles wat het nie nodig om daar te wees. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Onthou dat MySQL is 'n aparte taal van PHP. 1293 01:02:39,780 --> 01:02:42,410 Ons gebeur te word skryf MySQL in PHP. 1294 01:02:42,410 --> 01:02:46,180 En PHP dan stuur oor die MySQL bediener. 1295 01:02:46,180 --> 01:02:51,120 Maar jy hoef nie PHP ten einde te kommunikeer met 'n MySQL bediener. 1296 01:02:51,120 --> 01:02:51,730 >> David J. MALAN: Presies. 1297 01:02:51,730 --> 01:02:54,240 Sodat daar geen veranderlikes met dollar tekens moet in hierdie konteks. 1298 01:02:54,240 --> 01:02:59,550 Dit kan net nie al die wiskunde binne die databasis self. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 So die volgende een. 1301 01:03:01,300 --> 01:03:02,731 Is dit die volgende een? 1302 01:03:02,731 --> 01:03:03,210 Ja. 1303 01:03:03,210 --> 01:03:06,570 So met wat SQL navraag kon die bank haal die rekening nommers van sy 1304 01:03:06,570 --> 01:03:09,300 rykste kliënte, diegene met 's groter as 1000? 1305 01:03:09,300 --> 01:03:13,280 So wat van die vier hooftipes gaan ons hier? 1306 01:03:13,280 --> 01:03:14,430 Kies. 1307 01:03:14,430 --> 01:03:16,650 So wil ons kies. 1308 01:03:16,650 --> 01:03:17,610 Wat wil ons kies? 1309 01:03:17,610 --> 01:03:19,380 Wat kolom wil ons kies? 1310 01:03:19,380 --> 01:03:20,970 Ons sal spesifiek wil nommer te kies. 1311 01:03:20,970 --> 01:03:23,910 Maar as jy sê sterre, ons ook aanvaar dat. 1312 01:03:23,910 --> 01:03:25,820 >> So kies nommer van wat tafel? 1313 01:03:25,820 --> 01:03:26,640 Rekeninge. 1314 01:03:26,640 --> 01:03:28,370 En dan is die toestand wat ons wil hê? 1315 01:03:28,370 --> 01:03:30,140 Waar balans groter as 1000. 1316 01:03:30,140 --> 01:03:31,720 Ons het ook 'n groter aanvaar as of gelyk. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Laaste een. 1319 01:03:36,190 --> 01:03:42,940 Met watter SQL navraag kon die bank naby, maw, elke rekening verwyder wat 1320 01:03:42,940 --> 01:03:44,480 het 'n bedrag van $ 0? 1321 01:03:44,480 --> 01:03:47,620 So wat van die vier is ons gaan wil gebruik? 1322 01:03:47,620 --> 01:03:48,320 Verwyder. 1323 01:03:48,320 --> 01:03:50,180 So het die sintaksis vir daardie? 1324 01:03:50,180 --> 01:03:51,890 Verwyder van wat tafel? 1325 01:03:51,890 --> 01:03:53,550 Rekeninge. 1326 01:03:53,550 --> 01:03:55,790 En dan is die voorwaarde waarop Ons wil verwyder - 1327 01:03:55,790 --> 01:03:57,280 waar balans gelyk is aan nul. 1328 01:03:57,280 --> 01:04:03,050 So verwyder alle rye uit rekeninge waar die balans is nul. 1329 01:04:03,050 --> 01:04:04,300 Vrae oor enige van hierdie? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Wil om te ry? 1332 01:04:10,260 --> 01:04:11,200 >> David J. Malan tou gids. 1333 01:04:11,200 --> 01:04:17,110 So in hierdie een, het ons julle gegee het 'n ietwat bekende struktuur wat ons ondersoek 'n 1334 01:04:17,110 --> 01:04:20,450 bietjie in die klas naas structs, wat 'n data 1335 01:04:20,450 --> 01:04:21,910 struktuur wat verband hou in die gees. 1336 01:04:21,910 --> 01:04:24,670 Die verskil egter met 'n tou is dat ons moes een of ander manier te onthou wat 1337 01:04:24,670 --> 01:04:27,900 was aan die voorkant van die tou, in 'n groot deel sodat ons meer kan maak 1338 01:04:27,900 --> 01:04:30,530 doeltreffende gebruik van die geheue, ten minste As ons gebruik 'n skikking. 1339 01:04:30,530 --> 01:04:35,460 >> Omdat Onthou, as ons 'n skikking, indien byvoorbeeld, is dit die voorkant van 1340 01:04:35,460 --> 01:04:38,470 die tou, as ek in die tou hier, en dan iemand kry in lyn 1341 01:04:38,470 --> 01:04:42,710 agter my, agter my, agter my, en een persoon stappe van die lyn, jy 1342 01:04:42,710 --> 01:04:45,930 kon, soos ons gesien het 'n paar van ons menslike vrywilligers in die klas, het almal 1343 01:04:45,930 --> 01:04:47,100 skuif op hierdie manier. 1344 01:04:47,100 --> 01:04:50,880 Maar in die algemeen, met almal te doen iets is nie die beste gebruik van tyd 1345 01:04:50,880 --> 01:04:54,600 in 'n program, want dit beteken dat jou algoritme loop in watter 1346 01:04:54,600 --> 01:04:56,520 asimptotiese loop tyd? 1347 01:04:56,520 --> 01:04:57,420 Dit is lineêr. 1348 01:04:57,420 --> 01:04:59,600 >> En ek voel soos dit is soort van dom. 1349 01:04:59,600 --> 01:05:02,890 As die volgende persoon in lyn is die volgende persoon wat veronderstel is om te gaan in die 1350 01:05:02,890 --> 01:05:04,660 winkel, het hulle nie almal om saam te beweeg. 1351 01:05:04,660 --> 01:05:08,200 Laat daardie persoon gepluk word wanneer die tyd kom, byvoorbeeld. 1352 01:05:08,200 --> 01:05:09,870 So kan ons 'n bietjie van die tyd te bespaar daar. 1353 01:05:09,870 --> 01:05:14,840 En om dit te doen dat alhoewel, wat beteken dat dat die hoof van die tou of die 1354 01:05:14,840 --> 01:05:18,060 voorkant van die tou gaan progressief dieper en dieper beweeg 1355 01:05:18,060 --> 01:05:23,340 in die skikking en uiteindelik mag eintlik draai om as ons met behulp van 'n 1356 01:05:23,340 --> 01:05:25,790 verskeidenheid mense te slaan in hierdie tou. 1357 01:05:25,790 --> 01:05:28,390 So kan jy amper dink aan die skikking as 'n omsendbrief data 1358 01:05:28,390 --> 01:05:29,880 struktuur in die sin dat. 1359 01:05:29,880 --> 01:05:33,970 >> So jy een of ander manier het die spoor van die te hou grootte van dit of regtig die einde van dit 1360 01:05:33,970 --> 01:05:36,250 en dan waar die begin van dit is. 1361 01:05:36,250 --> 01:05:39,490 So stel ons voor dat jy verklaar een so 'n ry, roeping 1362 01:05:39,490 --> 01:05:41,330 dit Q, net een letter. 1363 01:05:41,330 --> 01:05:44,570 Toe ons voor dat die voorkant geïnisialiseer aan nul is en dat die grootte 1364 01:05:44,570 --> 01:05:45,470 word geïnisialiseer aan nul. 1365 01:05:45,470 --> 01:05:47,770 >> So nou, daar is niks binnekant van die tou. 1366 01:05:47,770 --> 01:05:50,910 En ons vra u om te voltooi die implementering van enqueue hieronder in 1367 01:05:50,910 --> 01:05:55,250 so 'n manier dat die funksie voeg N die einde van Q en dan terug waar. 1368 01:05:55,250 --> 01:05:58,690 Maar as q is vol of negatief is, die funksie moet eerder terugkeer onwaar. 1369 01:05:58,690 --> 01:06:01,060 En ons het vir julle 'n paar aannames. 1370 01:06:01,060 --> 01:06:04,320 Maar hulle is nie regtig funksioneel relevant, net dat Bool bestaan, 1371 01:06:04,320 --> 01:06:06,690 want tegnies, Bool nie bestaan ​​in C nie, tensy jy 'n 1372 01:06:06,690 --> 01:06:07,310 sekere kop lêer. 1373 01:06:07,310 --> 01:06:09,350 So wat maak net seker dat daar is nie, is dit 'n truuk 1374 01:06:09,350 --> 01:06:10,940 vraag soort van ding. 1375 01:06:10,940 --> 01:06:16,280 >> So enqueue ons in die monster voorgestelde oplossings soos volg te implementeer. 1376 01:06:16,280 --> 01:06:20,420 Een, het ons eers die gemak, die lae-hangende vrugte. 1377 01:06:20,420 --> 01:06:23,820 As die tou is vol of die getal wat jy probeer om te voeg, is minder 1378 01:06:23,820 --> 01:06:26,380 as nul, wat ons het in die spesifikasie van die probleem moet 1379 01:06:26,380 --> 01:06:30,320 nie toegelaat word nie, want ons wil net nie-negatiewe waardes, dan moet jy 1380 01:06:30,320 --> 01:06:31,640 net terugkeer onmiddellik onwaar. 1381 01:06:31,640 --> 01:06:33,820 So 'n paar relatief maklik Fouttoetsing. 1382 01:06:33,820 --> 01:06:38,720 As al wat jy wil byvoeg dat die werklike nommer, jy het 'n bietjie te doen 1383 01:06:38,720 --> 01:06:39,440 dink hier. 1384 01:06:39,440 --> 01:06:41,330 En dit is waar dit is 'n bietjie irriterend geestelik, want jy het om te 1385 01:06:41,330 --> 01:06:43,000 uit te vind hoe wraparound te hanteer. 1386 01:06:43,000 --> 01:06:46,870 >> Maar die kiem van die idee hier is dat van belang vir ons is dat wraparound 1387 01:06:46,870 --> 01:06:51,480 dikwels impliseer modulêre rekenkunde en die mod-operateur, die persent kant, 1388 01:06:51,480 --> 01:06:55,140 waar jy kan gaan van 'n groter waarde terug na nul en dan een en twee en 1389 01:06:55,140 --> 01:06:58,650 drie en dan weer terug om te nul, een en twee en drie en so meer 1390 01:06:58,650 --> 01:06:59,380 weer en weer. 1391 01:06:59,380 --> 01:07:02,880 So het die manier waarop ons dit doen, is stel voor dat ons nie wil kruip in die 1392 01:07:02,880 --> 01:07:05,850 skikking met die naam nommers waar ons heelgetalle lê. 1393 01:07:05,850 --> 01:07:10,740 Maar om daar te kom, moet ons eers wil doen ongeag die grootte van die tou is, maar 1394 01:07:10,740 --> 01:07:14,080 dan voeg by dat wat ook al die voorkant van die lys is. 1395 01:07:14,080 --> 01:07:17,880 En die effek van wat ons te sit op die regte posisie in die tou en 1396 01:07:17,880 --> 01:07:20,970 nie aanvaar dat die eerste persoon in lyn is aan die begin, wat hy of 1397 01:07:20,970 --> 01:07:24,130 Sy het absoluut kan wees as ons Daar is ook die verskuiwing van almal. 1398 01:07:24,130 --> 01:07:26,710 Maar ons is maar net die skep van werk vir onsself as ons het 1399 01:07:26,710 --> 01:07:27,800 daardie spesifieke pad. 1400 01:07:27,800 --> 01:07:29,330 >> Sodat ons dit kan hou relatief eenvoudig. 1401 01:07:29,330 --> 01:07:32,180 Ons moet onthou dat ons net bygevoeg 'n int na die tou. 1402 01:07:32,180 --> 01:07:35,850 En dan het ons net terug waar. 1403 01:07:35,850 --> 01:07:38,560 Intussen, in dequeue, het ons gevra jy die volgende te doen. 1404 01:07:38,560 --> 01:07:42,260 Implementeer dit op so 'n manier dat dit dequeues, wat en hef opbrengste, 1405 01:07:42,260 --> 01:07:44,190 die int aan die voorkant van die tou. 1406 01:07:44,190 --> 01:07:46,410 Die int te verwyder, is dit voldoende om dit te vergeet. 1407 01:07:46,410 --> 01:07:47,650 Jy hoef nie sy deel te ignoreer. 1408 01:07:47,650 --> 01:07:48,820 So dit is nog steeds eintlik daar. 1409 01:07:48,820 --> 01:07:51,930 Net soos data op 'n hardeskyf, ons is maar net ignoreer die feit 1410 01:07:51,930 --> 01:07:52,970 dat dit nou daar. 1411 01:07:52,970 --> 01:07:55,520 En as q leeg is, moet ons plaas terug negatiewe 1. 1412 01:07:55,520 --> 01:07:56,750 So dit voel arbitrêre. 1413 01:07:56,750 --> 01:08:01,640 Hoekom terugkeer negatiewe 1 in plaas van vals? 1414 01:08:01,640 --> 01:08:02,620 Ja. 1415 01:08:02,620 --> 01:08:05,070 >> Publiek: Q stoor positiewe waardes. 1416 01:08:05,070 --> 01:08:10,950 Omdat jy net positiewe waardes te stoor in die Q, negatiewe is 'n fout. 1417 01:08:10,950 --> 01:08:11,510 >> David J. MALAN: OK, waar is. 1418 01:08:11,510 --> 01:08:14,850 So, want ons is net te stoor positiewe waardes of nul is, dan is dit goed om te 1419 01:08:14,850 --> 01:08:18,050 terugkeer 'n negatiewe waarde as 'n brandwag waarde, 'n spesiale simbool. 1420 01:08:18,050 --> 01:08:21,630 Maar jy herskryf die geskiedenis is daar, omdat die rede waarom ons is net 1421 01:08:21,630 --> 01:08:25,890 terugkeer nie negatiewe waardes is omdat ons wil 1422 01:08:25,890 --> 01:08:27,670 het 'n brandwag waarde. 1423 01:08:27,670 --> 01:08:32,617 So meer spesifiek, hoekom nie net terugkeer valse in gevalle van foute? 1424 01:08:32,617 --> 01:08:33,099 Ja. 1425 01:08:33,099 --> 01:08:35,510 >> Publiek: Jy het misluk 'n heelgetal terug te keer. 1426 01:08:35,510 --> 01:08:36,630 >> David J. MALAN: Presies. 1427 01:08:36,630 --> 01:08:38,569 En dit is waar C kry mooi beperkende. 1428 01:08:38,569 --> 01:08:40,590 As jy sê jy gaan 'n int om terug te keer, het jy 1429 01:08:40,590 --> 01:08:41,279 'n int om terug te keer. 1430 01:08:41,279 --> 01:08:43,689 Jy kan nie fancy en begin terugkeer 'n Bool of 'n float of 'n 1431 01:08:43,689 --> 01:08:45,040 string of iets soos dit. 1432 01:08:45,040 --> 01:08:49,370 Nou, intussen, JavaScript en PHP en 'n paar ander tale, in werklikheid, 1433 01:08:49,370 --> 01:08:51,310 het jy terugkeer verskillende tipes waardes. 1434 01:08:51,310 --> 01:08:54,819 En dit kan eintlik nuttig wees, waar jy kan positiewe ints, nulle terugkeer, 1435 01:08:54,819 --> 01:08:59,439 negatiewe ints, of valse of null selfs fout aan te dui. 1436 01:08:59,439 --> 01:09:01,890 Maar ons het nie daardie veelsydigheid in C. 1437 01:09:01,890 --> 01:09:04,569 >> So met dequeue, wat ons voor te doen, is om - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Jy kan terugkeer onwaar. 1440 01:09:09,830 --> 01:09:13,189 Dit is net dat valse is hash definieer vals nul. 1441 01:09:13,189 --> 01:09:16,000 So as jy valse terugkeer, jy terugkeer nul. 1442 01:09:16,000 --> 01:09:25,470 En 'n nul is 'n geldige ding in ons ry, terwyl negatiewe 1 is nie, indien 1443 01:09:25,470 --> 01:09:27,000 valse gebeur te wees negatief 1. 1444 01:09:27,000 --> 01:09:29,972 Maar jy moet nie eens nodig om te weet dat. 1445 01:09:29,972 --> 01:09:32,399 >> David J. Malan Dis Daarom het ek nie sê nie. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: Maar dit is nie waar nie dat jy nie vals kan terugkeer. 1447 01:09:36,450 --> 01:09:37,700 >> David J. MALAN: Natuurlik. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 So dequeue, sien ons aanvaar nietig sy argument. 1450 01:09:44,240 --> 01:09:45,479 En dit is omdat ons nie verbygaande enigiets in 1451 01:09:45,479 --> 01:09:48,359 Ons wil net die element te verwyder aan die voorkant van die tou. 1452 01:09:48,359 --> 01:09:49,819 So, hoe kan ons te werk gaan om dit te doen? 1453 01:09:49,819 --> 01:09:51,290 Wel, die eerste, laat ons dit doen vinnige gesonde verstand tjek. 1454 01:09:51,290 --> 01:09:53,350 As die tou grootte is 0, is daar geen werk wat gedoen moet word. 1455 01:09:53,350 --> 01:09:54,210 Terug negatiewe 1. 1456 01:09:54,210 --> 01:09:54,800 Gedoen. 1457 01:09:54,800 --> 01:09:56,340 So dit is 'n paar lyne van my program. 1458 01:09:56,340 --> 01:09:58,180 So net vier lyne te bly. 1459 01:09:58,180 --> 01:10:01,310 >> So hier het ek besluit om te Trek ' die grootte. 1460 01:10:01,310 --> 01:10:04,620 En effektief decrementing die grootte beteken dat ek vergeet 1461 01:10:04,620 --> 01:10:06,010 iets is daar in. 1462 01:10:06,010 --> 01:10:09,910 Maar ek het ook by te werk waar die voorkant van die getalle is. 1463 01:10:09,910 --> 01:10:11,620 So om dit te doen, moet ek twee dinge te doen. 1464 01:10:11,620 --> 01:10:16,390 Ek moet eers onthou wat die aantal is aan die voorkant van die tou, 1465 01:10:16,390 --> 01:10:17,860 want ek moet die ding om terug te keer. 1466 01:10:17,860 --> 01:10:20,910 So ek wil nie per ongeluk vergeet daaroor en dan oorskryf nie. 1467 01:10:20,910 --> 01:10:22,840 Ek gaan net om te onthou in 'n int. 1468 01:10:22,840 --> 01:10:27,310 >> En nou, ek wil om te werk q.front te q.front word 1. 1469 01:10:27,310 --> 01:10:30,070 So as dit was die eerste persoon in lyn, nou, ek wil plus 1 te doen om te 1470 01:10:30,070 --> 01:10:31,930 wys op die volgende persoon in lyn. 1471 01:10:31,930 --> 01:10:33,420 Maar ek het dat wraparound te hanteer. 1472 01:10:33,420 --> 01:10:37,270 En as kapasiteit is 'n globale konstante, wat gaan om my om seker te maak 1473 01:10:37,270 --> 01:10:41,140 as ek verwys na die heel laaste persoon in word, sal die modulo werking te bring 1474 01:10:41,140 --> 01:10:43,840 my terug na nul op die voorkant van die tou. 1475 01:10:43,840 --> 01:10:46,050 En dit hanteer die wraparound hier. 1476 01:10:46,050 --> 01:10:48,950 En dan het ek gaan na n terugkeer. 1477 01:10:48,950 --> 01:10:51,530 >> Nou, streng gesproke, ek het nie het n te verklaar. 1478 01:10:51,530 --> 01:10:53,880 Ek het nie om dit aan te gryp en stoor dit tydelik, want die waarde 1479 01:10:53,880 --> 01:10:54,740 nog steeds daar. 1480 01:10:54,740 --> 01:10:57,490 So ek kon net nie die reg om rekenkundige die voormalige hoof om terug te keer 1481 01:10:57,490 --> 01:10:58,450 van die tou. 1482 01:10:58,450 --> 01:11:01,850 Maar ek het net gevoel dat dit meer duidelik om werklik die int gryp, het dit 1483 01:11:01,850 --> 01:11:04,320 in n, en dan terug te keer dat ter wille van duidelikheid se maar 1484 01:11:04,320 --> 01:11:05,735 nie streng nodig. 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 Hulle is almal uitspreekbare in my kop. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: So eerste vraag is die binêre boom probleem. 1490 01:11:19,110 --> 01:11:22,140 So die eerste vraag is, ons is gegee om hierdie getalle. 1491 01:11:22,140 --> 01:11:27,160 En ons wil een of ander manier plaas dit in Hierdie nodes so dat dit 'n 1492 01:11:27,160 --> 01:11:30,110 geldig binêre soek boom. 1493 01:11:30,110 --> 01:11:36,260 So het die een ding om te onthou oor binêre soek bome is dat dit nie 1494 01:11:36,260 --> 01:11:39,800 net dat die ding aan die linkerkant is minder en die ding te 1495 01:11:39,800 --> 01:11:41,120 die reg is groter. 1496 01:11:41,120 --> 01:11:44,580 Dit moet wees dat die hele boom te links is minder, en die hele boom 1497 01:11:44,580 --> 01:11:45,740 aan die regterkant is groter. 1498 01:11:45,740 --> 01:11:55,260 >> So as ek 34 hier aan die bokant, en dan Ek sit 20 hier, so dit is geldig so 1499 01:11:55,260 --> 01:11:56,970 ver, want 34 tot hier. 1500 01:11:56,970 --> 01:11:57,920 20 gaan aan die linkerkant. 1501 01:11:57,920 --> 01:11:58,950 So dit is minder. 1502 01:11:58,950 --> 01:12:03,640 Maar ek kan nie dan sit 59 hier, want selfs al 59 is op die regte van 20, 1503 01:12:03,640 --> 01:12:06,140 dit is nog steeds aan die linkerkant van 34. 1504 01:12:06,140 --> 01:12:10,760 So met daardie beperking in gedagte, die maklikste manier van waarskynlik die oplossing van hierdie 1505 01:12:10,760 --> 01:12:14,330 probleem is net soort van hierdie getalle - 1506 01:12:14,330 --> 01:12:18,720 so 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 En dan voeg diegene van links na regs. 1508 01:12:21,640 --> 01:12:23,390 >> So 20 gaan hier. 1509 01:12:23,390 --> 01:12:24,630 34 gaan hier. 1510 01:12:24,630 --> 01:12:25,830 36 gaan hier. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 En jy kan ook uitgepluis het met sommige steek in en besef, 1513 01:12:34,730 --> 01:12:38,830 O, wag, ek het nie genoeg getalle om dit te vul hier. 1514 01:12:38,830 --> 01:12:42,170 So ek moet reshift wat my roetenotastelsel gaan wees. 1515 01:12:42,170 --> 01:12:47,490 Maar let dat in die laaste drie, indien jy lees van links na regs, is dit in 1516 01:12:47,490 --> 01:12:48,740 toenemende orde. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> So nou, ons wil om te verklaar wat die struct gaan wees vir die 1519 01:12:56,540 --> 01:12:58,300 nodes in hierdie boom. 1520 01:12:58,300 --> 01:13:02,720 So wat moet ons in 'n binêre boom? 1521 01:13:02,720 --> 01:13:05,830 So ons het 'n waarde van die tipe int, so 'n paar int waarde. 1522 01:13:05,830 --> 01:13:07,220 Ek weet nie wat ons geroep dit in die oplossing - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Ons moet 'n verwysing na die linker-kind en 'n verwysing na die regte kind. 1525 01:13:13,570 --> 01:13:17,540 So dit gaan om te kyk soos hierdie. 1526 01:13:17,540 --> 01:13:20,510 En dit sal eintlik kyk voor wanneer het die dubbel-gekoppelde 1527 01:13:20,510 --> 01:13:25,090 lys dinge, so kennisgewing - 1528 01:13:25,090 --> 01:13:27,860 Ek gaan hê om te blaai om al die pad terug af na die probleem 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> So sien dit lyk identies aan hierdie, Behalwe ons net gebeur om dit te noem 1531 01:13:36,390 --> 01:13:38,590 verskillende name. 1532 01:13:38,590 --> 01:13:41,440 Ons het nog 'n heelgetal waarde en twee wysers. 1533 01:13:41,440 --> 01:13:44,850 Dit is net dat in plaas van die behandeling van die wysers as verwys na die volgende ding 1534 01:13:44,850 --> 01:13:47,955 en die vorige ding, ons behandel die wysers om te wys op 'n links kind 1535 01:13:47,955 --> 01:13:49,205 en regs kind. 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 So dit is ons struct knoop. 1539 01:13:59,650 --> 01:14:03,920 En nou, die enigste funksie wat ons nodig het om te implementeer, want dit is deurkruis, wat 1540 01:14:03,920 --> 01:14:08,320 ons wil om te gaan oor die boom, drukwerk die waardes van die boom in orde is. 1541 01:14:08,320 --> 01:14:15,241 >> So soek hier, sou ons wil druk uit 20, 34, 36, 52, 59, en 106. 1542 01:14:15,241 --> 01:14:17,970 Hoe kan ons bereik wat? 1543 01:14:17,970 --> 01:14:18,890 So dit is redelik soortgelyk. 1544 01:14:18,890 --> 01:14:22,910 As jy in die afgelope eksamen het die probleem wat jy wou om uit te druk 1545 01:14:22,910 --> 01:14:25,940 die hele boom met kommas tussen alles, dit was eintlik selfs 1546 01:14:25,940 --> 01:14:27,320 makliker as dit. 1547 01:14:27,320 --> 01:14:30,950 So hier is die oplossing. 1548 01:14:30,950 --> 01:14:33,110 Dit is aansienlik makliker As jy dit gedoen het rekursief. 1549 01:14:33,110 --> 01:14:36,650 Ek weet nie of iemand probeer om dit te doen iteratief. 1550 01:14:36,650 --> 01:14:38,340 >> Maar eers, moet ons ons basis geval. 1551 01:14:38,340 --> 01:14:39,660 Wat as die wortel van nul? 1552 01:14:39,660 --> 01:14:40,610 Daarna het ons gaan net om terug te keer. 1553 01:14:40,610 --> 01:14:42,300 Ons wil nie iets te druk. 1554 01:14:42,300 --> 01:14:45,940 Anders gaan ons deurkruis rekursief af. 1555 01:14:45,940 --> 01:14:48,140 Druk die hele linker boomstruktuur inskuif nie. 1556 01:14:48,140 --> 01:14:51,440 So druk alles minder as my huidige waarde. 1557 01:14:51,440 --> 01:14:53,930 En dan gaan ek myself te druk. 1558 01:14:53,930 --> 01:14:57,310 En dan gaan ek recursief down my hele reg substructuur, so alles 1559 01:14:57,310 --> 01:14:58,810 groter as my waarde. 1560 01:14:58,810 --> 01:15:03,870 En dit gaan druk uit alles in orde is. 1561 01:15:03,870 --> 01:15:05,860 Vrae oor hoe dit eintlik accomplishes dit? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Publiek: Ek het 'n vraag op die [onhoorbaar]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: So een manier om nader enige rekursiewe probleem is net te dink 1566 01:15:23,550 --> 01:15:26,275 daaroor wil jy hê om te dink oor al die hoek gevalle. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 So is van mening dat ons wil druk die hele boom. 1569 01:15:38,110 --> 01:15:42,030 So al wat ons gaan om te fokus op is hierdie spesifieke knoop - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Die rekursiewe oproepe, ons voorgee dié wat net werk. 1572 01:15:47,420 --> 01:15:54,000 So hier is dit rekursiewe oproep te deurkruis, het ons sonder om selfs te dink 1573 01:15:54,000 --> 01:15:58,640 daaroor, net dwars deur die linker drie, dink dat daar reeds druk 20 1574 01:15:58,640 --> 01:16:00,730 en 34 vir ons. 1575 01:16:00,730 --> 01:16:03,350 En dan wanneer ons uiteindelik rekursief noem deurkruis op die 1576 01:16:03,350 --> 01:16:07,890 reg, dit sal korrek druk 52, 59, en 106 vir ons. 1577 01:16:07,890 --> 01:16:13,620 >> So gegee dat dit kan druk 20, 34, en die ander kan druk 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 Al wat ons moet in staat wees om te doen is om druk onsself in die middel van daardie. 1579 01:16:17,180 --> 01:16:21,250 So druk alles voor ons. 1580 01:16:21,250 --> 01:16:27,710 Druk onsself, sodat die knoop druk 36, gereelde printf, en dan 1581 01:16:27,710 --> 01:16:31,170 druk alles agter ons aan. 1582 01:16:31,170 --> 01:16:32,730 >> David J. Malan Dit is waar rekursie regtig mooi. 1583 01:16:32,730 --> 01:16:36,270 Dit is hierdie wonderlike sprong van geloof waar jy doen die kleinste bietjie van die werk. 1584 01:16:36,270 --> 01:16:38,460 En dan moet jy laat iemand anders doen die res. 1585 01:16:38,460 --> 01:16:40,180 En dat iemand anders is, ironies genoeg, jy. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 So vir ernstige poeding punte, indien jy blaai op die vrae - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: Op die vrae? 1589 01:16:50,530 --> 01:16:53,490 >> David J. Malan en af ​​in 'n bietjie te die nommers, nie almal weet waar 1590 01:16:53,490 --> 01:16:55,190 hierdie getalle kom uit? 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: Ek het letterlik geen idee nie. 1592 01:16:56,610 --> 01:16:59,794 >> David J. Malan Hulle verskyn Regdeur die toets. 1593 01:16:59,794 --> 01:17:01,150 >> Publiek: Is hulle dieselfde getalle? 1594 01:17:01,150 --> 01:17:01,910 >> David J. Malan Diegene nommers. 1595 01:17:01,910 --> 01:17:03,260 'N bietjie Easter eier. 1596 01:17:03,260 --> 01:17:08,100 So vir die van julle kyk aanlyn by huis, as jy kan ons vertel via e-pos aan 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net wat die betekenis van hierdie herhalende ses nommers is 1598 01:17:12,680 --> 01:17:18,560 Dwarsdeur Quiz 1, sal ons u stort met ongelooflike aandag aan die finale 1599 01:17:18,560 --> 01:17:21,610 lesing en 'n stress bal. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Nice, subtiel. 1602 01:17:27,790 --> 01:17:29,570 >> ROB BOWDEN: Enige laaste vrae oor enige iets op die quiz? 1603 01:17:29,570 --> 01:17:32,608