1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. Malan V redu. 3 00:00:12,900 --> 00:00:16,790 Torej, dobrodošli na prvi CS50 Obdukcija za kviz. 4 00:00:16,790 --> 00:00:18,340 Mislili smo slovesno ta tradicija letos. 5 00:00:18,340 --> 00:00:20,960 In to bo priložnost prehoditi 6 00:00:20,960 --> 00:00:22,220 rešitve za kviz. 7 00:00:22,220 --> 00:00:26,160 In bomo pospešiti ali upočasniti temeljijo v interesu tistih, ki tukaj. 8 00:00:26,160 --> 00:00:29,730 >> Torej, ste verjetno tu, ker ste zanima, kako bi lahko imela ali 9 00:00:29,730 --> 00:00:31,170 bi morali odgovorili na nekaj teh problemov. 10 00:00:31,170 --> 00:00:33,300 Torej, zakaj ne bi pogledali V tem poglavju najprej? 11 00:00:33,300 --> 00:00:34,450 Tako dobili strune. 12 00:00:34,450 --> 00:00:37,600 To ti je dal tri različne verzije programa, ki je bil na koncu 13 00:00:37,600 --> 00:00:39,650 pomenilo, da bi dobili niz od uporabnika. 14 00:00:39,650 --> 00:00:42,530 Ali ne, je to storil, da je bilo prepuščena vam določiti. 15 00:00:42,530 --> 00:00:45,150 >> In smo spraševali v vprašanju 0, Predvidevam, da je verzija 1 16 00:00:45,150 --> 00:00:46,400 zbrati in usmrtili. 17 00:00:46,400 --> 00:00:48,860 Zato bi lahko program segfault? 18 00:00:48,860 --> 00:00:51,150 Na prvi pogled je vse predloge , zakaj? 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 >> PUBLIKA: Torej Spomnim videnje to Prejšnji primer gledanja na 22 00:00:59,260 --> 00:01:05,506 char * s in videnje skeniranje S in vidim, ker je kazalec, kako 23 00:01:05,506 --> 00:01:07,971 ni vplivala, kaj skenirate? 24 00:01:07,971 --> 00:01:10,940 Je S ali naslov s? 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. Malan: OK. 26 00:01:11,180 --> 00:01:11,480 Dobro. 27 00:01:11,480 --> 00:01:14,830 Torej v končni fazi, vir kakršnih koli težav verjetno je šlo za zmanjšanje 28 00:01:14,830 --> 00:01:16,210 na to spremenljivo s. 29 00:01:16,210 --> 00:01:17,280 In to je res spremenljivka. 30 00:01:17,280 --> 00:01:19,900 Podatkovni tip te spremenljivke char *, kar pomeni, da se bo 31 00:01:19,900 --> 00:01:22,570 vsebuje naslov značaja. 32 00:01:22,570 --> 00:01:23,850 In v tem leži vpogled. 33 00:01:23,850 --> 00:01:28,330 To se dogaja, da vsebuje naslov znak ali, bolj splošno, 34 00:01:28,330 --> 00:01:32,110 naslov prvega znaka v cel niz znakov. 35 00:01:32,110 --> 00:01:36,680 >> Vendar ulov je, da skeniranje s, namen v življenje, je dal naslov in dana 36 00:01:36,680 --> 00:01:40,960 koda format, kot% s, preberite niz v kos 37 00:01:40,960 --> 00:01:42,330 spomin na ta naslov. 38 00:01:42,330 --> 00:01:46,040 Ampak zato, ker ni enačaj pred da podpičjem na prvi 39 00:01:46,040 --> 00:01:49,310 vrstica kode, saj smo dejansko ne Dodeljevanje pomnilnika z 40 00:01:49,310 --> 00:01:53,020 malloc, saj dejansko ni dodeliti niz neke velikosti, vse 41 00:01:53,020 --> 00:01:57,620 delaš bere uporabnikov Tipkovnica vhod v nekatere popolna 42 00:01:57,620 --> 00:02:00,490 Smetarsko vrednost, ki je s privzeto. 43 00:02:00,490 --> 00:02:04,480 Torej so možnosti, da boš, če segfault da naslov ne samo zato, da se zgodi 44 00:02:04,480 --> 00:02:08,009 biti vrednost, ki jo lahko, v resnici, pišejo. 45 00:02:08,009 --> 00:02:10,889 Tako slabo, da ne dodeli vaš spomin tam. 46 00:02:10,889 --> 00:02:13,150 >> Torej v vprašanju 1, smo vprašali, Predvidevam, da je verzija 2 47 00:02:13,150 --> 00:02:14,230 zbrati in usmrtili. 48 00:02:14,230 --> 00:02:15,900 Zakaj bi ta program segfault? 49 00:02:15,900 --> 00:02:17,990 Torej, to je eden manj buggy. 50 00:02:17,990 --> 00:02:21,470 In tam je res samo ena očiten način, kjer lahko 51 00:02:21,470 --> 00:02:22,810 sproži segfault tukaj. 52 00:02:22,810 --> 00:02:23,730 In to je tematski. 53 00:02:23,730 --> 00:02:28,180 Vsak čas bomo z uporabo C v spomin, kaj bi lahko naredil za sprožanje segfault 54 00:02:28,180 --> 00:02:30,718 z verzijo 2? 55 00:02:30,718 --> 00:02:35,560 >> PUBLIKA: Če uporabljate ta prispevek v niz, ki je daljši od 49 56 00:02:35,560 --> 00:02:35,975 znake. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. Malan: Točno tako. 58 00:02:37,260 --> 00:02:41,420 Vsak čas boste videli nekaj fiksne dolžine ko gre za matriko, vaš 59 00:02:41,420 --> 00:02:44,650 radar bi moral iti dol, da bi to lahko bilo problematično, če ne boš preverjanje 60 00:02:44,650 --> 00:02:45,810 Meje matriko. 61 00:02:45,810 --> 00:02:46,650 In to je problem tukaj. 62 00:02:46,650 --> 00:02:47,910 Mi še vedno uporabljate scanf. 63 00:02:47,910 --> 00:02:52,200 Mi še vedno uporabljate% s, kar pomeni, da poskusite brati niz od uporabnika. 64 00:02:52,200 --> 00:02:56,300 To se dogaja, da je treba brati v sekundah, ki je na tej točki, ki je dejansko 65 00:02:56,300 --> 00:02:58,570 naslov kos pomnilnika ali je to enakovredno. 66 00:02:58,570 --> 00:03:02,080 To je ime array znakov pomnilnika. 67 00:03:02,080 --> 00:03:07,610 >> Ampak točno to, če si prebral niz , ki je daljše od 49 znakov, 49 68 00:03:07,610 --> 00:03:10,440 saj boste morali prostor za poševnica nazaj 0, boš overflow 69 00:03:10,440 --> 00:03:11,390 da buffer. 70 00:03:11,390 --> 00:03:16,410 In boste morda dobili srečo in biti sposoben napisati 51. značaj, 52., 53.. 71 00:03:16,410 --> 00:03:18,560 Toda na neki točki, OS je reči, ne. 72 00:03:18,560 --> 00:03:21,270 To definitivno ni spomin boste smeli dotakniti. 73 00:03:21,270 --> 00:03:23,380 In program se bo segfault. 74 00:03:23,380 --> 00:03:26,650 >> Tako da bi bilo treba tolči biti vsak Čas imaš fiksno dolžino, imate 75 00:03:26,650 --> 00:03:30,150 se prepričajte, da ocenjujete dolžino ne glede na to je, da poskušate 76 00:03:30,150 --> 00:03:31,090 prebrati vanjo. 77 00:03:31,090 --> 00:03:35,110 >> PUBLIKA: Torej rešiti, da bi lahko so imeli izjavo preverjanje dejansko 78 00:03:35,110 --> 00:03:37,140 je dolžina večja ali manjša od? 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. Malan: Absolutno. 80 00:03:37,730 --> 00:03:41,706 Moraš stanje , ki pravi, če - 81 00:03:41,706 --> 00:03:46,080 oziroma vam ni nujno vedeti vnaprej, koliko znakov 82 00:03:46,080 --> 00:03:49,060 Uporabnik se dogaja na vrsto, saj imate piščanca in jajca. 83 00:03:49,060 --> 00:03:51,860 Ne, dokler ste prebrali se s scanf lahko ugotovimo, kako dolgo je. 84 00:03:51,860 --> 00:03:54,500 Toda na tej točki, da je prepozno, ker ste že prebrali v 85 00:03:54,500 --> 00:03:55,710 nekatere blok pomnilnika. 86 00:03:55,710 --> 00:03:59,590 Tako kot prahi, so CS50 knjižnica izogiba to vprašanje v celoti, odpoklic 87 00:03:59,590 --> 00:04:01,060 z uporabo fgetc. 88 00:04:01,060 --> 00:04:05,390 In to prebere en znak naenkrat, -tip toeing skupaj, vedoč, da vam 89 00:04:05,390 --> 00:04:08,060 ne morejo overflow znak, če si prebral eno naenkrat. 90 00:04:08,060 --> 00:04:11,580 >> Ulov je z getstring odpoklic je da imamo nenehno ponovno velikosti 91 00:04:11,580 --> 00:04:13,590 da je kos pomnilnika, ki je le bolečina. 92 00:04:13,590 --> 00:04:15,310 To je veliko vrstic koda za to. 93 00:04:15,310 --> 00:04:18,779 Tako drugačen pristop bi bilo, da dejansko uporabo bratranca, tako da 94 00:04:18,779 --> 00:04:19,790 rekoc scanf. 95 00:04:19,790 --> 00:04:22,820 Obstajajo variante veliko teh Funkcije, ki dejansko preverjajo 96 00:04:22,820 --> 00:04:25,870 dolžina, koliko znakov boste lahko prebrali maksimalno. 97 00:04:25,870 --> 00:04:29,430 In lahko podate, ne berejo več kot 50 znakov. 98 00:04:29,430 --> 00:04:34,110 Zato, da bi bil še en pristop, vendar manj ustrežljivi večjih vložkov. 99 00:04:34,110 --> 00:04:37,040 >> Torej, vprašanje 2 prosi, domnevam, da je različica 3 se zbirajo in usmrtili. 100 00:04:37,040 --> 00:04:39,960 Zato bi lahko ta program segfault? 101 00:04:39,960 --> 00:04:42,650 Potemtakem se to dejansko enaka odgovori, čeprav 102 00:04:42,650 --> 00:04:43,590 Izgleda malo Ljubitelj. 103 00:04:43,590 --> 00:04:46,440 Mi smo z uporabo malloc, ki se počuti kot smo kar sami več možnosti. 104 00:04:46,440 --> 00:04:48,030 In potem smo se sprostilo, da pomnilnika na koncu. 105 00:04:48,030 --> 00:04:49,580 To je še vedno le 50 bajtov pomnilnika. 106 00:04:49,580 --> 00:04:53,620 Tako da bomo lahko še vedno poskusite prebrati v 51, 52, 1000 bajtov. 107 00:04:53,620 --> 00:04:55,830 To se dogaja, segfault za točno istega razloga. 108 00:04:55,830 --> 00:04:57,530 >> Vendar obstaja še en razlog preveč. 109 00:04:57,530 --> 00:05:03,890 Kaj drugega bi lahko malloc donos poleg naslov kos spomina? 110 00:05:03,890 --> 00:05:04,920 To lahko vrne null. 111 00:05:04,920 --> 00:05:07,560 In ker nismo preverjanje da smo lahko delaš nekaj 112 00:05:07,560 --> 00:05:11,350 neumen, zaradi drugega razloga, ki je, da bomo lahko povedali scanf, preberite 113 00:05:11,350 --> 00:05:16,050 uporabnikov vnosna v 0 lokaciji, AKA null. 114 00:05:16,050 --> 00:05:18,890 In tudi to bo zagotovo sproži segfault. 115 00:05:18,890 --> 00:05:21,590 Torej za namen kviza je, da bomo so sprejeli eno od teh, kot je 116 00:05:21,590 --> 00:05:22,740 tehten razlog. 117 00:05:22,740 --> 00:05:23,420 Ena je identična. 118 00:05:23,420 --> 00:05:25,720 Ena je malo bolj prefinjen. 119 00:05:25,720 --> 00:05:28,975 >> Nazadnje, glede na program, je Uporaba spomina, kako verzija 2 120 00:05:28,975 --> 00:05:30,350 različica 3 razlikujeta? 121 00:05:30,350 --> 00:05:35,070 Torej, za kaj je vredno, bomo videli videz neskončno dobavo mogoče 122 00:05:35,070 --> 00:05:35,770 odgovori na to. 123 00:05:35,770 --> 00:05:39,300 In med odgovori ljudi, kar smo bili v upanju, vendar smo sprejeli drugo 124 00:05:39,300 --> 00:05:42,250 stvari, je nekaj omembe Dejstvo, da je verzija 2 z uporabo 125 00:05:42,250 --> 00:05:44,560 ti dimnika. 126 00:05:44,560 --> 00:05:46,710 Različica 3 je s pomočjo kopice. 127 00:05:46,710 --> 00:05:50,060 In funkcionalno, to sploh ni bi vse, da veliko razliko. 128 00:05:50,060 --> 00:05:54,040 Ob koncu dneva, smo vedno samo še 50 bajtov pomnilnika. 129 00:05:54,040 --> 00:05:56,640 >> Toda to je bil eden od možnih odgovorov da smo gledaš. 130 00:05:56,640 --> 00:05:59,730 Vendar pa boste videli, kakor vam vaš kvizi nazaj na TF, da smo 131 00:05:59,730 --> 00:06:04,330 sprejme druge razprave o njihovih različni načini uporabe spomina, kot tudi. 132 00:06:04,330 --> 00:06:08,600 Ampak kup in kup bi bilo preprost odgovor, da gredo s. 133 00:06:08,600 --> 00:06:11,150 Vsa vprašanja? 134 00:06:11,150 --> 00:06:12,400 Dal ti bom Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB Bowden: Torej, problem 4. 137 00:06:20,210 --> 00:06:21,985 To je tista, v kateri ste morali izpolniti število bajtov iz vseh 138 00:06:21,985 --> 00:06:23,460 te različne vrste, ki se uporabljajo. 139 00:06:23,460 --> 00:06:24,830 Torej prva stvar, ki jo vidim. 140 00:06:24,830 --> 00:06:27,930 Predvidevam, 32-bitno arhitekturo, kot je ta CS50 aparata. 141 00:06:27,930 --> 00:06:33,530 Tako je eden od temeljnih stvari o 32-bitne arhitekture, ki nam pove, 142 00:06:33,530 --> 00:06:37,490 točno, kako velik kazalec se dogaja da je v strukturi. 143 00:06:37,490 --> 00:06:43,020 >> Tako takoj vemo, da vsak kazalec Tip je 32-bitov ali 4 bajte. 144 00:06:43,020 --> 00:06:46,010 Tako je videti na tej mizi, vozlišče * je kazalcem. 145 00:06:46,010 --> 00:06:47,250 To se dogaja, da je 4 bajte. 146 00:06:47,250 --> 00:06:51,640 Struct node *, ki je dobesedno identična vozlišča zvezdico. 147 00:06:51,640 --> 00:06:53,590 In tako, da bo še 4 bajte. 148 00:06:53,590 --> 00:06:58,270 String, tako da ne izgleda kot kazalec še, vendar typedef, 149 00:06:58,270 --> 00:07:01,590 Niz je samo char *, ki je kazalcem. 150 00:07:01,590 --> 00:07:03,550 Tako da bo še 4 bajte. 151 00:07:03,550 --> 00:07:06,150 >> Torej, ti trije so vsi 4 bajte. 152 00:07:06,150 --> 00:07:09,350 Zdaj vozlišče in študenti pa so na malo bolj zapletena. 153 00:07:09,350 --> 00:07:15,160 Tako je videti na vozlišču in študent, bomo videli vozlišče kot celo število in kazalcem. 154 00:07:15,160 --> 00:07:18,050 In študent dva kazalca v njem. 155 00:07:18,050 --> 00:07:23,340 Tako vsaj našem primeru tukaj, način da smo na koncu izračunavanju 156 00:07:23,340 --> 00:07:27,020 to struct je samo sešteti vse da je znotraj struct. 157 00:07:27,020 --> 00:07:30,690 >> Torej za vozlišče, imamo celo število, ki je 4 bajte. 158 00:07:30,690 --> 00:07:32,830 Imamo kazalec, ki je 4 bajte. 159 00:07:32,830 --> 00:07:35,820 In tako eno vozlišče se dogaja da prevzamejo 8 bajtov. 160 00:07:35,820 --> 00:07:39,490 Podobno velja tudi za študenta, imamo kazalec, da je 4 bajte in drugo 161 00:07:39,490 --> 00:07:40,770 kazalec, da je 4 bajte. 162 00:07:40,770 --> 00:07:43,180 Tako da bo do konca je do 8 bajtov. 163 00:07:43,180 --> 00:07:45,480 Torej vozlišče in študenti pa so na 8 bajtov. 164 00:07:45,480 --> 00:07:48,950 In ti trije so vse 4 bajte. 165 00:07:48,950 --> 00:07:50,240 Vprašanja o tem? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Da. 168 00:07:54,990 --> 00:07:58,413 >> PUBLIKA: Ali je bila 64-bitni arhitekture, ki bi 169 00:07:58,413 --> 00:07:59,880 podvojila vse od njih? 170 00:07:59,880 --> 00:08:01,790 >> ROB Bowden: To ne bi podvojila vse. 171 00:08:01,790 --> 00:08:05,830 Tako 64-bitni arhitekturi, je, še enkrat, Spremembe, ki temeljna stvar, ki 172 00:08:05,830 --> 00:08:08,910 kazalec je zdaj 64 bitov. 173 00:08:08,910 --> 00:08:09,290 Ja. 174 00:08:09,290 --> 00:08:10,930 Torej kazalec je 8 bajtov. 175 00:08:10,930 --> 00:08:15,420 To je torej, da so 4 bajti se bo 8 bajtov. 176 00:08:15,420 --> 00:08:18,617 Študent, ki je bil dva kazalca, dobro, zdaj pa se dogaja, da 177 00:08:18,617 --> 00:08:19,800 biti 8 bajtov, 8 bajtov. 178 00:08:19,800 --> 00:08:21,980 To se dogaja, da 16 bitov. 179 00:08:21,980 --> 00:08:25,710 >> Ampak vozlišče je še vedno 4 bajte. 180 00:08:25,710 --> 00:08:27,800 Tako da je ta kazalec se dogaja kot 8 bitov. 181 00:08:27,800 --> 00:08:28,930 To je 4 bajte. 182 00:08:28,930 --> 00:08:30,870 Torej vozlišče je samo še na 12 bajtov. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Vsa druga vprašanja, na tista? 185 00:08:39,280 --> 00:08:44,500 Torej, naslednjič, to so kode stanja HTTP. 186 00:08:44,500 --> 00:08:48,000 In si moral opisati okoliščine v skladu s katerimi bi se ti lahko 187 00:08:48,000 --> 00:08:49,810 se vrnil v vas. 188 00:08:49,810 --> 00:08:56,730 en problem, da sem slišal nekaj študente , je, da sta se trudila, da bi 189 00:08:56,730 --> 00:08:58,950 napake, se na koncu stranke. 190 00:08:58,950 --> 00:09:02,320 Torej, ko smo poskušali, da bi zahtevo na strežnik, kar gre 191 00:09:02,320 --> 00:09:03,820 narobe na našem koncu. 192 00:09:03,820 --> 00:09:07,660 Ampak na splošno, te oznake so se vrne strežnik. 193 00:09:07,660 --> 00:09:11,720 Zato želimo, da ugotovimo, kaj se dogaja narobe ali prav na strežniku, ki 194 00:09:11,720 --> 00:09:14,280 povzroča te stvari je treba vrniti. 195 00:09:14,280 --> 00:09:18,670 Torej, zakaj bi lahko strežnik vrne Statusna koda 200? 196 00:09:18,670 --> 00:09:19,920 Vsak misli? 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 Torej nekaj o uspešno prošnja šla skozi. 200 00:09:27,850 --> 00:09:30,260 In oni lahko vrnejo karkoli zahteval. 201 00:09:30,260 --> 00:09:32,240 Torej je vse v redu. 202 00:09:32,240 --> 00:09:35,662 Kaj pa 302 našel? 203 00:09:35,662 --> 00:09:36,618 Ja. 204 00:09:36,618 --> 00:09:39,008 >> PUBLIKA: Strežnik je iskal za to, kar ste zahtevali. 205 00:09:39,008 --> 00:09:40,442 Ampak to ni mogel najti. 206 00:09:40,442 --> 00:09:42,850 Torej je napaka. 207 00:09:42,850 --> 00:09:47,720 >> ROB Bowden: Torej strežnik je išče tisto, kar si hotel. 208 00:09:47,720 --> 00:09:51,682 Torej samo gledaš tukaj, 302 je pokazala, je bilo mogoče najti. 209 00:09:51,682 --> 00:09:53,035 >> PUBLIKA: Žal mi je. 210 00:09:53,035 --> 00:09:54,388 Najdeno pomeni, da so to storili našli. 211 00:09:54,388 --> 00:09:55,638 Žal mi je. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB Bowden: Do 302 našel. 214 00:10:00,160 --> 00:10:02,350 Strežnik je uspelo najti kaj si hotel. 215 00:10:02,350 --> 00:10:04,640 >> PUBLIKA: Ampak to ne prikazuje? 216 00:10:04,640 --> 00:10:08,180 >> ROB Bowden: Razlika med Ta 302 in 200 je, da 217 00:10:08,180 --> 00:10:09,280 ve, kaj hočeš. 218 00:10:09,280 --> 00:10:12,000 Ampak to ni točno tam, kjer si hotel vprašati. 219 00:10:12,000 --> 00:10:14,580 Torej 302 je tipično preusmeritev. 220 00:10:14,580 --> 00:10:16,510 Torej ste zahtevali strani. 221 00:10:16,510 --> 00:10:19,590 To ve, oh, hočem vam vrne to. 222 00:10:19,590 --> 00:10:21,070 Ampak to je na različnih URL. 223 00:10:21,070 --> 00:10:23,534 Torej, hej, si dejansko želijo to. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. Malan: To je del, ki je dejal, da smo dali vidva preusmeritev 225 00:10:26,950 --> 00:10:30,830 funkcija, ki uporablja funkcijo header , ki po vrsti, natisne lokacijo 226 00:10:30,830 --> 00:10:34,110 debelega črevesa in nato URL na katerega želite zavrniti uporabnika. 227 00:10:34,110 --> 00:10:37,480 Čeprav nisi videl 302 eksplicitno, da je tisto, kar PHP 228 00:10:37,480 --> 00:10:41,550 bi čudežno vstaviti kot glava kaj natančno je tam dejal Rob - 229 00:10:41,550 --> 00:10:41,930 najti. 230 00:10:41,930 --> 00:10:43,180 Ampak gre tu namesto tega. 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 Kaj pa 403 tako prepovedano? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> PUBLIKA: Mislim, da je to strežnik je v bistvu pravi, da stranka 236 00:10:57,120 --> 00:10:59,970 ne morejo dostopati do domače strani. 237 00:10:59,970 --> 00:11:03,260 >> ROB Bowden: Torej, ja. 238 00:11:03,260 --> 00:11:07,670 No, tipičen odgovor smo Pričakujemo, je nekaj takega, kot so datoteke 239 00:11:07,670 --> 00:11:08,920 ustrezno ne chmodded. 240 00:11:08,920 --> 00:11:11,590 To je verjetno v kakšnih okoliščinah ste jih videli. 241 00:11:11,590 --> 00:11:18,920 Vendar pa obstaja razlog, da stranka bi lahko bila kriva tukaj. 242 00:11:18,920 --> 00:11:20,440 Tam je pravzaprav ena koda stanja - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 To so zelo podobni. 245 00:11:22,820 --> 00:11:24,590 >> 401 je nedovoljena. 246 00:11:24,590 --> 00:11:26,130 In 403 je prepovedana. 247 00:11:26,130 --> 00:11:31,890 In tako nepooblaščeno ste izključno dobili, če niste prijavljeni 248 00:11:31,890 --> 00:11:34,520 Ampak prijavi lahko pomeni da ste pooblaščeni. 249 00:11:34,520 --> 00:11:37,930 Ampak, če ste že prijavljeni in vam še vedno nimajo dovoljenja, nato pa 250 00:11:37,930 --> 00:11:40,140 lahko dobite tudi prepovedano. 251 00:11:40,140 --> 00:11:45,320 Torej, če ste prijavljeni in nimate dovoljenje, prepovedana je tudi 252 00:11:45,320 --> 00:11:47,164 nekaj, kar lahko dobiš. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. Malan: In mehanizem, ki ga ki ti problemi so ponavadi 254 00:11:48,900 --> 00:11:53,100 rešiti na strežniku je po katerih ukaz? 255 00:11:53,100 --> 00:11:57,700 Chmod, če je to res, a dovoljenja izda na datoteko ali imenik. 256 00:11:57,700 --> 00:11:59,220 >> ROB Bowden: Potem pa 404 ni bilo mogoče najti. 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 Torej, za razliko od 302, če ni bil ravno kje ste asking, vendar pa ne ve, kaj 260 00:12:10,150 --> 00:12:12,710 hočeš, to, da ima samo ne vem, kaj hočeš. 261 00:12:12,710 --> 00:12:15,648 In ti se ne zahteva Nekaj ​​veljavna. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 sem čajnik in nato 500 notranji strežnik. 264 00:12:22,310 --> 00:12:24,870 Torej, zakaj bi si ga dobil? 265 00:12:24,870 --> 00:12:26,120 >> Torej segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Pravzaprav ne vem, razvrščanje standard za to. 268 00:12:30,640 --> 00:12:34,850 Toda, če je vaš PHP code imel nekaj narobe v njej, v teoriji, bi lahko 269 00:12:34,850 --> 00:12:39,650 dejansko segfault, v tem primeru je to 500 Notranja napaka strežnika, nekaj 270 00:12:39,650 --> 00:12:41,400 je narobe s vaš strežnik je konfiguracija. 271 00:12:41,400 --> 00:12:44,320 Ali pa je napaka skladnje v vašem PHP kodo. 272 00:12:44,320 --> 00:12:46,095 Ali nekaj slabega se dogaja. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. Malan: Nismo videli segfault Med odgovori nekaj ljudi. 274 00:12:48,320 --> 00:12:49,490 In tehnično, bi se lahko zgodilo. 275 00:12:49,490 --> 00:12:53,820 Toda, da bi PHP, program z drugimi ljudmi napisal, dejansko 276 00:12:53,820 --> 00:12:57,790 segfaulted, ki le, če ti ljudje zasral in napisal hroščat kodo 277 00:12:57,790 --> 00:13:00,680 njihov tolmač bi PHP sama segfault. 278 00:13:00,680 --> 00:13:06,460 Torej, čeprav 500 je kot segfault v duhu, to je skoraj vedno 279 00:13:06,460 --> 00:13:10,490 posledica izdaje konfiguracijo datoteke z vašega spletnega strežnika ali, kot je dejal Rob, 280 00:13:10,490 --> 00:13:13,200 napaka skladnje, kot si ti ni zaprl ponudbo. 281 00:13:13,200 --> 00:13:16,180 Ali ste izgubili podpičjem nekje. 282 00:13:16,180 --> 00:13:23,677 >> PUBLIKA: Torej, za Shuttle pset sem mislim, ko sem to naredil, ko sem kliknil 283 00:13:23,677 --> 00:13:26,300 brskalnik, vendar ni bilo nič gor, tisto, kar se imenuje bela stran. 284 00:13:26,300 --> 00:13:28,056 Vendar je bilo zaradi kode. 285 00:13:28,056 --> 00:13:29,440 Mislim, da je JavaScript, kajne? 286 00:13:29,440 --> 00:13:29,770 >> ROB Bowden: Ja. 287 00:13:29,770 --> 00:13:31,180 >> PUBLIKA: Bi to napako Še vedno prišel gor? 288 00:13:31,180 --> 00:13:34,290 >> ROB Bowden: Torej ti ne bi dobila ta napaka, ker je vse 289 00:13:34,290 --> 00:13:36,930 z vidika spletnega strežnika je popolnoma v redu. 290 00:13:36,930 --> 00:13:39,090 Ampak ste zahtevali index.html. 291 00:13:39,090 --> 00:13:42,000 Zahtevali ste shuttle.js in service.js. 292 00:13:42,000 --> 00:13:44,580 In je bilo uspešno vrnitev da vas vse te stvari - 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 To je samo takrat, ko vaš brskalnik skušal razlagajo JavaScript kodo, ki 296 00:13:49,330 --> 00:13:51,370 To je kot, čakaj, to ni veljavna napaka JavaScript. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Še kakšno vprašanje? 299 00:13:58,210 --> 00:14:00,750 Vse je v redu. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. Malan: Torej, naslednjič se je število 11. 301 00:14:04,120 --> 00:14:07,610 In 11 je bil najstrašnejši Za veliko ljudi. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Torej, najbolj pomembna stvar, ki sem seznanjen je, da je to res, o 304 00:14:18,570 --> 00:14:19,840 dvojno povezani seznam. 305 00:14:19,840 --> 00:14:23,160 Vendar to ni bila ista kot lani je dvojno povezani seznam problem, 306 00:14:23,160 --> 00:14:27,170 ki vam ni dal opozorilo, da Seznam bi lahko, v resnici, lahko razvrščeni. 307 00:14:27,170 --> 00:14:29,640 >> Torej dejstvo, da je bil seznam unsorted in dejstvo, da je bila ta beseda 308 00:14:29,640 --> 00:14:32,930 poudarili smo tam mišljeno, da gre da je to pravzaprav poenostavitev 309 00:14:32,930 --> 00:14:35,430 kaj bi bilo drugače bolj zahtevna problem 310 00:14:35,430 --> 00:14:36,600 in več po enega. 311 00:14:36,600 --> 00:14:40,760 Tako je bila pogosta napaka tukaj, da bi dal lanska rešitev na vašem enega 312 00:14:40,760 --> 00:14:45,580 pager in nato le slepo kopijo, ki Kot odgovor, ki je prav 313 00:14:45,580 --> 00:14:48,520 odgovoriti na drugo vprašanje pisane v duhu. 314 00:14:48,520 --> 00:14:51,340 Vendar razlik tukaj so bili naslednji. 315 00:14:51,340 --> 00:14:55,200 >> Torej ena, smo vozlišče prijavljeni in definirana v običajnem tukaj. 316 00:14:55,200 --> 00:14:59,230 Potem smo določili seznam je globalna kazalec inicializiran na null. 317 00:14:59,230 --> 00:15:02,150 Potem je očitno, da je obe funkciji imamo prototipov tukaj, vložek 318 00:15:02,150 --> 00:15:03,240 in odstranite. 319 00:15:03,240 --> 00:15:06,600 In potem imamo nekaj vzorčno kodo tukaj delaš kup vstavki. 320 00:15:06,600 --> 00:15:09,930 In potem vas prosimo, da izpolnite izvedba vložka spodaj v kot 321 00:15:09,930 --> 00:15:14,380 tako da vstavlja n v seznamu V enakem času, je tudi poudaril, 322 00:15:14,380 --> 00:15:15,730 tudi če je že prisotna. 323 00:15:15,730 --> 00:15:20,600 >> Tako lepoto, da lahko vstavite V enakem času, je, da to pomeni 324 00:15:20,600 --> 00:15:23,060 da boste morali vstaviti novo vozlišče, kjer? 325 00:15:23,060 --> 00:15:23,690 V sprednji. 326 00:15:23,690 --> 00:15:27,760 Tako da odpravlja na srečo, vsaj eden od primerov, ki se uporabljajo, da zahtevajo 327 00:15:27,760 --> 00:15:30,520 še več vrstic kode, kot je to storila lani in celo v razredu, ko smo 328 00:15:30,520 --> 00:15:34,040 govoril skozi te stvari z ljudmi in z nekaterimi 329 00:15:34,040 --> 00:15:35,250 verbalno pseudo kodo. 330 00:15:35,250 --> 00:15:39,190 Torej, v raztopini tukaj, kaj je preskočil da se da samo, da imajo vizualni 331 00:15:39,190 --> 00:15:40,480 zaslon. 332 00:15:40,480 --> 00:15:42,230 >> Opazimo, da delamo naslednje. 333 00:15:42,230 --> 00:15:45,140 In opazili tudi druge poenostavitve je bil, da tudi če je 334 00:15:45,140 --> 00:15:48,280 že prisoten, tako da to pomeni, čeprav Številka je že tam, si lahko 335 00:15:48,280 --> 00:15:50,280 le slepo vstavite drugo kopija. 336 00:15:50,280 --> 00:15:52,560 In tudi to je bilo mišljeno, da bo poenostavitev, tako da si lahko 337 00:15:52,560 --> 00:15:54,940 osredotočiti, res, nekateri bolj intelektualno zanimiv del in 338 00:15:54,940 --> 00:15:58,090 Ne samo nekatere dodatne preverjanje napak glede na omejen čas. 339 00:15:58,090 --> 00:16:02,880 >> Torej, v tej raztopini vzorca, smo dodeli kazalec na levem 340 00:16:02,880 --> 00:16:04,510 drugo stran tukaj vozlišče. 341 00:16:04,510 --> 00:16:07,190 Zdaj, zavedati, da kazalec, saj Rob je dejal, je le 32 bitov. 342 00:16:07,190 --> 00:16:09,060 In dejansko ne vsebujejo Naslov dokler vas 343 00:16:09,060 --> 00:16:09,970 mu dodelite naslov. 344 00:16:09,970 --> 00:16:13,220 In mi, ki na desni strani strani preko malloc. 345 00:16:13,220 --> 00:16:16,550 Kot dober državljan, da preverimo, da malloc ni v bistvu nič, tako da 346 00:16:16,550 --> 00:16:18,690 ne bomo slučajno ustvariti segfault tukaj. 347 00:16:18,690 --> 00:16:22,840 In kadarkoli boste uporabili malloc v življenju, vam bi bilo treba preverjanje null, da ne 348 00:16:22,840 --> 00:16:24,090 imate subtilno napako. 349 00:16:24,090 --> 00:16:28,460 >> Potem smo inicializacijo to null jih dodeljevanje n in prejšnje in naslednje. 350 00:16:28,460 --> 00:16:32,450 In v tem primeru sem, inicializirana Predhodna za nično, ker ta nova 351 00:16:32,450 --> 00:16:34,780 vozlišče se bo nova začetek mojega seznama. 352 00:16:34,780 --> 00:16:37,050 Tako da se bo nič pred njim. 353 00:16:37,050 --> 00:16:42,010 In hočem, da v bistvu priložila Obstoječi seznam na novo vozlišče, ki ga 354 00:16:42,010 --> 00:16:44,700 Naslednja nastavitev je enaka, da se seznam. 355 00:16:44,700 --> 00:16:47,120 Ampak ne bom naredil samo še. 356 00:16:47,120 --> 00:16:51,780 Torej, če Seznam sama že obstajala, in je bil vsaj eno vozlišče 357 00:16:51,780 --> 00:16:57,070 že v veljavi, če je ta seznam sem in vstavite novo vozlišče sem, 358 00:16:57,070 --> 00:17:01,840 morali zagotoviti, da je moj nekdanji vozlišče poudarja nazaj na mojo novo vozlišče 359 00:17:01,840 --> 00:17:04,260 ker je to spet dvojno povezani seznam. 360 00:17:04,260 --> 00:17:05,460 >> Torej, naredimo pregled razumnosti. 361 00:17:05,460 --> 00:17:10,109 Če seznam ni nična, če pa je že enega ali več vozlišč tam, potem 362 00:17:10,109 --> 00:17:12,470 Dodajajo, da nazaj sklicujejo tako rekoč. 363 00:17:12,470 --> 00:17:15,420 In potem zelo zadnja stvar, ki jo potrebujemo storiti, je dejansko posodabljati univerzalen 364 00:17:15,420 --> 00:17:20,329 spremenljivka Seznam sama s točko do tega novega vozlišča. 365 00:17:20,329 --> 00:17:21,790 Ja. 366 00:17:21,790 --> 00:17:26,579 >> PUBLIKA: V kazalca puščice [Neslišno] enaka nič, ne da 367 00:17:26,579 --> 00:17:30,420 Ukvarjamo se s seznama, ker Seznam je nična? 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. Malan: Nope. 369 00:17:30,596 --> 00:17:34,500 To je preprosto zato ker sem proaktivno previdni, ker če je to my 370 00:17:34,500 --> 00:17:38,730 Prvotni seznam z morda nekaj več vozlišč tukaj in sem vstavljanje my 371 00:17:38,730 --> 00:17:42,380 novo vozlišče tukaj, tam se dogaja da ni nič tukaj. 372 00:17:42,380 --> 00:17:44,720 In želim, da zajame to idejo z določitvijo prejšnja k 373 00:17:44,720 --> 00:17:47,740 nično na novo vozlišče. 374 00:17:47,740 --> 00:17:51,410 In verjetno, če je moja koda pravilna in ni druge poti, da vstavite 375 00:17:51,410 --> 00:17:54,970 razen te funkcije vozlišča, verjetno, čeprav seznam že 376 00:17:54,970 --> 00:18:00,090 enega ali več vozlišč v njem, verjetno Seznam, prvo vozlišče, bi morali 377 00:18:00,090 --> 00:18:02,750 Predhodna kazalec null sama. 378 00:18:02,750 --> 00:18:03,550 >> PUBLIKA: In samo nadaljevanje. 379 00:18:03,550 --> 00:18:08,139 Razlog si dal kazalec naslednjih Rezult Seznam se delaš kazalec 380 00:18:08,139 --> 00:18:13,579 Pred Seznam v tem, da je obrnjena za naslednjo, mislim - 381 00:18:13,579 --> 00:18:14,980 Ne vem - 382 00:18:14,980 --> 00:18:15,450 samo našteva? 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. Malan: Točno tako. 384 00:18:16,400 --> 00:18:19,400 In tako da je dejansko menijo, dva primera Tukaj res, čeprav 385 00:18:19,400 --> 00:18:22,070 Da jih bomo upoštevati ne povsem enako kot koda. 386 00:18:22,070 --> 00:18:26,250 Toda na visoki ravni, če to predstavlja seznam in to je 32-bitni 387 00:18:26,250 --> 00:18:29,560 kazalec, najenostavnejši scenarij da je ta nična privzeto. 388 00:18:29,560 --> 00:18:33,010 In domnevam, da želite vstaviti Številka 50 je bila prva številka. 389 00:18:33,010 --> 00:18:37,640 Torej, jaz grem naprej in dodeliti vozlišče, ki bo vsebovala 390 00:18:37,640 --> 00:18:38,770 tri področja - 391 00:18:38,770 --> 00:18:42,070 n, prejšnje in naslednje. 392 00:18:42,070 --> 00:18:44,580 >> Bom dal številko 50 tu, saj bo to n. 393 00:18:44,580 --> 00:18:46,130 To bo naslednji. 394 00:18:46,130 --> 00:18:48,530 In to bo prejšnja. 395 00:18:48,530 --> 00:18:50,910 Pa kaj naj storim v tem primeru? 396 00:18:50,910 --> 00:18:53,900 No, pravkar sem naredil linijo 1 tukaj. 397 00:18:53,900 --> 00:18:55,400 Pointer n postane n. 398 00:18:55,400 --> 00:18:57,740 Jaz pa pravim, prejšnja naj bi dobili nič. 399 00:18:57,740 --> 00:18:59,470 Torej, to se dogaja, da je nična. 400 00:18:59,470 --> 00:19:01,365 Potem bom rekel next bo dobil seznam. 401 00:19:01,365 --> 00:19:05,150 >> In to preprosto deluje dobro izteklo. 402 00:19:05,150 --> 00:19:06,500 To je nična. 403 00:19:06,500 --> 00:19:10,620 In zato pravim, novo vozlišče je naslednja Polje naj bi se ne glede na to. 404 00:19:10,620 --> 00:19:12,570 Tako da se postavlja drugo null tam. 405 00:19:12,570 --> 00:19:14,510 In potem zadnja stvar Jaz se preveri tukaj. 406 00:19:14,510 --> 00:19:17,870 Če seznam ni enaka NULL, vendar je enaka null, zato smo preskočili, da 407 00:19:17,870 --> 00:19:18,470 celoti. 408 00:19:18,470 --> 00:19:23,520 In tako vse, kar sem naredil, je naslednji seznam dobi kazalec, ki slikovno posledico 409 00:19:23,520 --> 00:19:25,570 sliko, kot je ta. 410 00:19:25,570 --> 00:19:26,620 Tako da je en scenarij. 411 00:19:26,620 --> 00:19:30,490 >> In tisti, ki ste bili sprašuje o posebej je situacija, kot je ta, 412 00:19:30,490 --> 00:19:33,190 kjer že imamo seznam na enem vozlišča. 413 00:19:33,190 --> 00:19:36,240 In če se vrnem v izvirniku Problem izjavo, zraven bova 414 00:19:36,240 --> 00:19:39,320 vstaviti recimo je 34, samo za Zaradi razprave. 415 00:19:39,320 --> 00:19:46,210 Torej bom samo priročno pripraviti, da sem. 416 00:19:46,210 --> 00:19:47,540 Pravkar sem malloced. 417 00:19:47,540 --> 00:19:49,310 Denimo sem preverjanje za nično. 418 00:19:49,310 --> 00:19:51,870 >> Zdaj bom za inicializacijo n biti 34. 419 00:19:51,870 --> 00:19:53,040 In to bo n. 420 00:19:53,040 --> 00:19:54,670 To bo naslednji. 421 00:19:54,670 --> 00:19:57,100 In to bo prejšnja. 422 00:19:57,100 --> 00:19:59,370 Naj bo prepričan, da ni storil to dobil nazaj. 423 00:19:59,370 --> 00:20:01,110 Prejšnja na prvem mestu v definiciji. 424 00:20:01,110 --> 00:20:03,070 Dovolite mi, da to popravimo. 425 00:20:03,070 --> 00:20:04,410 To je od prejšnje. 426 00:20:04,410 --> 00:20:05,780 To je naslednji. 427 00:20:05,780 --> 00:20:08,620 Čeprav sta enaka, Igrajno dosledni. 428 00:20:08,620 --> 00:20:09,450 >> Prejšnja. 429 00:20:09,450 --> 00:20:11,030 To je naslednji. 430 00:20:11,030 --> 00:20:16,310 Tako da sem samo malloced moje sporočilo, preveri za nično, dodeljena 34 v vozlišče. 431 00:20:16,310 --> 00:20:17,570 Prejšnja postane nična. 432 00:20:17,570 --> 00:20:19,480 Tako, da mi daje to. 433 00:20:19,480 --> 00:20:21,010 Naslednja dobi seznam. 434 00:20:21,010 --> 00:20:22,370 Torej seznam je to. 435 00:20:22,370 --> 00:20:26,520 Torej je to enako, kot je zdaj risanje to s puščico, tako da se točka enem 436 00:20:26,520 --> 00:20:27,940 v enaki. 437 00:20:27,940 --> 00:20:30,400 In potem sem samo preverjam, če seznam ni enaka null. 438 00:20:30,400 --> 00:20:31,740 In to ne tokrat. 439 00:20:31,740 --> 00:20:35,580 Potem bom naredil seznam Predhodna postane kazalec. 440 00:20:35,580 --> 00:20:39,700 >> Torej seznam Prejšnji dobi PTR. 441 00:20:39,700 --> 00:20:44,300 Torej, to ima za posledico dajanje grafični arrow tukaj. 442 00:20:44,300 --> 00:20:46,930 In to je že malo valovita, črte. 443 00:20:46,930 --> 00:20:50,780 In potem, končno, sem posodobiti Seznam opozoriti na kazalec. 444 00:20:50,780 --> 00:20:55,560 Torej, zdaj to kaže s tem tipom. 445 00:20:55,560 --> 00:20:57,170 In zdaj, kaj je naredil hitro Preverjanje sanity. 446 00:20:57,170 --> 00:20:59,470 >> Tukaj je seznam, ki je Globalna spremenljivka. 447 00:20:59,470 --> 00:21:02,850 Prvo vozlišče je res, 34, ker Sledim to puščico. 448 00:21:02,850 --> 00:21:05,210 In to je res, ker želim vstaviti na začetku seznama 449 00:21:05,210 --> 00:21:06,070 vsa nova vozlišča. 450 00:21:06,070 --> 00:21:08,860 Njegov naslednji polje me pripelje do tega tipa. 451 00:21:08,860 --> 00:21:10,710 Če jaz nadaljujem, sem udaril naslednji je nična. 452 00:21:10,710 --> 00:21:11,760 Torej ni več seznama. 453 00:21:11,760 --> 00:21:14,460 Če sem udaril prejšnje, dobim nazaj, kjer sem pričakoval. 454 00:21:14,460 --> 00:21:16,435 >> Torej, še vedno je nekaj nasvetov, očitno je, da manipulira. 455 00:21:16,435 --> 00:21:19,870 Toda dejstvo, da si povedal, da ne ta v enakem času vam pomeni le, 456 00:21:19,870 --> 00:21:22,910 imajo končno število stvari ste dovoljeno storiti. 457 00:21:22,910 --> 00:21:24,290 In kaj je ta številka? 458 00:21:24,290 --> 00:21:25,185 Morda bi bilo za en korak. 459 00:21:25,185 --> 00:21:25,700 Morda bi bilo dva. 460 00:21:25,700 --> 00:21:26,820 Morda bi bilo 1000 korakov. 461 00:21:26,820 --> 00:21:30,500 Ampak to je neskončna, kar pomeni, da ne more so vse vrste petlji dogaja 462 00:21:30,500 --> 00:21:32,010 tukaj, brez rekurzije, brez zank. 463 00:21:32,010 --> 00:21:37,390 To je pravkar dobil, da je težko kodirane-linije kode, kot jo imamo v tem vzorcu. 464 00:21:37,390 --> 00:21:42,330 >> Torej nam Naslednji problem 12 zahteva, da zaključi izvajanje nedosegljive 465 00:21:42,330 --> 00:21:46,740 spodaj na tak način, da so odstranjeni n s seznama v linearnem času. 466 00:21:46,740 --> 00:21:48,740 Tako da boste imeli malo več Vrckanje sobo. 467 00:21:48,740 --> 00:21:52,380 Lahko pa sklepamo, da n, če je prisoten na seznamu, bo prisoten 468 00:21:52,380 --> 00:21:53,340 ne več kot enkrat. 469 00:21:53,340 --> 00:21:56,770 In da je tudi mišljeno, da se na osnovi kviz- poenostavitev predpostavka, da 470 00:21:56,770 --> 00:21:59,780 da če dobiš številko 50 nekje na seznamu, vam ni prav 471 00:21:59,780 --> 00:22:02,890 skrbeti še naprej Ponovil, ki išče vse mogoče 472 00:22:02,890 --> 00:22:06,990 Kopijo 50, ki naj bi bili samo prenesejo v nekaterih minucijo v omejenem času. 473 00:22:06,990 --> 00:22:10,460 >> Torej s nedosegljive, tale je definitivno bolj zahtevna in bolj 474 00:22:10,460 --> 00:22:11,640 Koda za pisanje. 475 00:22:11,640 --> 00:22:14,990 Toda na prvi pogled, odkrito povedano, bi bilo poglej prepričljivo in kot nekaj 476 00:22:14,990 --> 00:22:17,060 ni načina, da bi lahko imeli pripravi na kviz. 477 00:22:17,060 --> 00:22:22,450 Če pa se osredotočimo na posamezne korake, Upajmo, da bo to nenadoma 478 00:22:22,450 --> 00:22:26,060 gane, da je vsak od teh posameznih korakov naredi očitno smisel 479 00:22:26,060 --> 00:22:27,080 V retrospektivi. 480 00:22:27,080 --> 00:22:28,200 Torej, kaj si poglejmo. 481 00:22:28,200 --> 00:22:32,570 >> Torej, najprej smo inicializacijo kazalec da bi se seznam. 482 00:22:32,570 --> 00:22:36,040 Ker želim linearni čas, da se sredstva Bom nekaj zanko. 483 00:22:36,040 --> 00:22:39,730 In skupno pot za ponovitev čez vozlišča v strukturi seznama ali kakršnokoli 484 00:22:39,730 --> 00:22:43,860 konstrukcije je iterativno sprejeti kazalec na sprednji strani podatkov 485 00:22:43,860 --> 00:22:46,990 Struktura nato pa šele začetek posodabljanje je in hodi svojo pot 486 00:22:46,990 --> 00:22:48,650 s podatkovno strukturo. 487 00:22:48,650 --> 00:22:50,040 Tako bom naredil točno to. 488 00:22:50,040 --> 00:22:54,260 >> Medtem ko je kazalec, moja začasna spremenljivka, ni enaka null, dajmo 489 00:22:54,260 --> 00:22:55,660 pojdi naprej in preverite. 490 00:22:55,660 --> 00:22:56,910 Sem imel srečo? 491 00:22:56,910 --> 00:23:01,740 Je polje n v vozlišču sem trenutno gledamo na enak 492 00:23:01,740 --> 00:23:03,380 Številka iščem? 493 00:23:03,380 --> 00:23:05,410 In če je tako, dajmo nekaj narediti. 494 00:23:05,410 --> 00:23:10,020 Zdaj, to opazila pogoj obdaja celoten 495 00:23:10,020 --> 00:23:11,520 Naslednje vrstice kode. 496 00:23:11,520 --> 00:23:14,610 To je edina stvar, ki me skrbi - poiskati številko v vprašanju. 497 00:23:14,610 --> 00:23:18,010 Torej ni nobenega drugega, ki poenostavlja Stvari konceptualno malo. 498 00:23:18,010 --> 00:23:22,040 >> Ampak zdaj sem spoznal, in boste morda morali samo to spoznal po tem, ko razmišljate 499 00:23:22,040 --> 00:23:24,720 je skozi nekaj, tam je pravzaprav dva primera tukaj. 500 00:23:24,720 --> 00:23:28,060 Eno je, če je vozlišče na začetku seznama, ki je 501 00:23:28,060 --> 00:23:31,040 malo siten, ker je to poseben primer, saj imate za reševanje 502 00:23:31,040 --> 00:23:33,340 s to stvarjo, ki je samo anomalija. 503 00:23:33,340 --> 00:23:35,720 Povsod drugje v seznamu, to je ista stvar. 504 00:23:35,720 --> 00:23:38,050 Tam je prejšnje vozlišče in naslednja vozlišče, prejšnje vozlišče, poleg vozlišče. 505 00:23:38,050 --> 00:23:40,940 Ampak ta tip je malo posebna če je on na začetku. 506 00:23:40,940 --> 00:23:48,710 >> Torej, če kazalec enak seznam sam, tako da če sem na začetku 507 00:23:48,710 --> 00:23:53,960 seznam in sem ugotovila, n, moram narediti nekaj stvari. 508 00:23:53,960 --> 00:23:59,230 Ena, moram spremeniti seznam opozarjajo na naslednje polje, 50. 509 00:23:59,230 --> 00:24:01,270 Torej predvidevam, da sem poskušal odstraniti 34. 510 00:24:01,270 --> 00:24:03,560 Torej, ta fant mora iti stran čez nekaj trenutkov. 511 00:24:03,560 --> 00:24:07,210 >> Tako bom rekel, seznam postane kazalec naslednji. 512 00:24:07,210 --> 00:24:08,570 No, to je kazalec. 513 00:24:08,570 --> 00:24:10,360 Naslednja kaže tukaj. 514 00:24:10,360 --> 00:24:17,470 Torej se to spreminja to puščico pravice Zdaj kaže na ta fant tukaj. 515 00:24:17,470 --> 00:24:19,580 Zdaj se spomnite, smo začasna spremenljivka. 516 00:24:19,580 --> 00:24:23,520 Torej nismo izgubili starše nobenih vozlišč, ker imam tudi tega tipa v moji 517 00:24:23,520 --> 00:24:25,010 Izvajanje nedosegljive. 518 00:24:25,010 --> 00:24:29,600 Torej, zdaj, če seznam sama po sebi ni nič, Moram popraviti nekaj malega. 519 00:24:29,600 --> 00:24:32,690 >> Moram zdaj prepričati, da je to puščica, ki je prej obrnjena 520 00:24:32,690 --> 00:24:36,830 50-34, ima to oditi, ker če sem poskušal znebiti 521 00:24:36,830 --> 00:24:41,910 od 34, 50 je bolje ne ohranijo vse nekako nazaj sklic nanjo kot 522 00:24:41,910 --> 00:24:42,820 arrow predlagal. 523 00:24:42,820 --> 00:24:44,820 Tako da sem naredil to linijo. 524 00:24:44,820 --> 00:24:46,520 Torej sem naredil. 525 00:24:46,520 --> 00:24:48,040 Ta zadeva je pravzaprav zelo enostavna. 526 00:24:48,040 --> 00:24:51,010 Sekal glave seznama je dokaj preprosta. 527 00:24:51,010 --> 00:24:52,980 >> Na žalost pa je to nadležno drugega bloka. 528 00:24:52,980 --> 00:24:56,170 Torej, zdaj imam, da bo zadevo kjer je nekaj v sredini. 529 00:24:56,170 --> 00:24:59,880 Ampak to ni preveč grozno, razen za sintakso, kot je ta. 530 00:24:59,880 --> 00:25:03,080 Torej, če nisem na začetku Seznam, jaz sem nekje na sredini. 531 00:25:03,080 --> 00:25:08,160 In ta tukaj je rekel, start na kateri koli vozlišče ste na. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Pojdi na prejšnjega vozlišča naslednje polje in poudarjajo, da je na kazalec. 534 00:25:18,550 --> 00:25:20,390 >> Naredimo to slikovno. 535 00:25:20,390 --> 00:25:21,640 To je že zapleteno. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Torej, če imam prejšnjo polja tukaj - dajmo - Naslednja polja tukaj. 538 00:25:37,990 --> 00:25:41,200 Bom poenostaviti svoje kazalce in ne kot pripravi cel kup 539 00:25:41,200 --> 00:25:45,710 stvari naprej in nazaj križanje seboj. 540 00:25:45,710 --> 00:25:50,870 In zdaj, recimo, to je 1, 2, 3 zaradi razpravo, čeprav 541 00:25:50,870 --> 00:25:53,410 čeprav to ne poravnajo z problem v vprašanju. 542 00:25:53,410 --> 00:25:55,900 >> Torej, tukaj je moj povezani seznam. 543 00:25:55,900 --> 00:25:59,300 Jaz sem poskušal odstraniti dva, v tem Zlasti različica zgodbe. 544 00:25:59,300 --> 00:26:01,960 Tako sem posodobljena kazalec se kaže s tem tipom. 545 00:26:01,960 --> 00:26:03,315 Torej, to je PTR. 546 00:26:03,315 --> 00:26:04,530 On je obrnjena tukaj. 547 00:26:04,530 --> 00:26:07,170 To je seznam, ki obstaja na svetovni ravni kot prej. 548 00:26:07,170 --> 00:26:09,200 In on je poudaril tukaj ni važno kaj. 549 00:26:09,200 --> 00:26:10,800 In zdaj, bom poskušal odstraniti dva. 550 00:26:10,800 --> 00:26:13,850 >> Torej, če je kazalec kaže sem, da sem bodo sledili, očitno, 551 00:26:13,850 --> 00:26:17,110 Predhodna kazalec, ki me postavlja na 1. 552 00:26:17,110 --> 00:26:22,290 Jaz pa bom rekel, da je naslednja področje, ki me pripelje čez to 553 00:26:22,290 --> 00:26:25,410 škatla tukaj, se bo enako kazalec naslednji. 554 00:26:25,410 --> 00:26:28,400 Torej, če je ta kazalec, to je naslednji. 555 00:26:28,400 --> 00:26:31,840 To pomeni, da je ta puščica potrebe poudariti, da tega tipa. 556 00:26:31,840 --> 00:26:35,140 >> Torej, kaj ima ta vrstica kode pravkar storjeno je malo tega. 557 00:26:35,140 --> 00:26:37,500 In zdaj, to je videti kot korak v pravo smer. 558 00:26:37,500 --> 00:26:41,390 Mi v bistvu želite snip 2 out od sredine 1 in 3. 559 00:26:41,390 --> 00:26:44,400 Zato je smiselno, da želimo Pot tega kazalca okoli njega. 560 00:26:44,400 --> 00:26:50,400 Torej je to naslednja vrstica preverjanje, če kazalec Naslednja ni nič, pa je 561 00:26:50,400 --> 00:26:54,200 res nekdo s pravico do 2, to pomeni, da moramo tudi storiti 562 00:26:54,200 --> 00:26:55,850 mulo tu. 563 00:26:55,850 --> 00:27:00,590 >> Tako da sem zdaj treba upoštevati ta kazalec in posodobiti prejšnje kazalec na 564 00:27:00,590 --> 00:27:05,410 ta človek narediti malo obidite tukaj točko tukaj. 565 00:27:05,410 --> 00:27:07,100 In zdaj, vizualno je to lepo. 566 00:27:07,100 --> 00:27:11,930 To je grdo, da obstaja nihče ne kaže na 2. anymore. 567 00:27:11,930 --> 00:27:13,600 2 kaže v levo. 568 00:27:13,600 --> 00:27:14,980 In 2 se kaže v desno. 569 00:27:14,980 --> 00:27:17,480 Vendar pa lahko počne kar hoče, saj on je na tem, da se osvobojeni. 570 00:27:17,480 --> 00:27:19,480 In ni važno, kaj te vrednosti so anymore. 571 00:27:19,480 --> 00:27:23,040 >> Kar je pomembno, je, da preostali Fantje so usmerjanje zgoraj 572 00:27:23,040 --> 00:27:24,280 in pod njim. 573 00:27:24,280 --> 00:27:25,810 In res, da je tisto, kar počnemo zraven. 574 00:27:25,810 --> 00:27:29,360 Mi brezplačno kazalec, kar pomeni, da povemo operacijski sistem, ste dobrodošli 575 00:27:29,360 --> 00:27:30,906 za povrnitev tega. 576 00:27:30,906 --> 00:27:34,900 In potem na koncu vrnemo. 577 00:27:34,900 --> 00:27:37,220 Sicer implicitno, če bomo še niso vrnili, 578 00:27:37,220 --> 00:27:38,290 moramo, da je videti. 579 00:27:38,290 --> 00:27:41,485 Torej kazalec znaša kazalec zraven samo pomeni premik tega tipa tukaj. 580 00:27:41,485 --> 00:27:42,600 Premakniti tega tipa tukaj. 581 00:27:42,600 --> 00:27:45,400 Premakniti tega tipa tukaj, če v resnici, nismo našli številko 582 00:27:45,400 --> 00:27:46,960 iščemo še za. 583 00:27:46,960 --> 00:27:49,630 >> Torej odkrito, je popolnoma zgleda velika, mislim, sprva 584 00:27:49,630 --> 00:27:52,180 pogled, še posebej, če si prizadevale s tem v kvizu potem videli 585 00:27:52,180 --> 00:27:52,850 kaj takega. 586 00:27:52,850 --> 00:27:55,050 In ti pat sebe na hrbtni strani. 587 00:27:55,050 --> 00:27:57,080 No, ni načina, da bi lahko imela prišli do, da je na kvizu. 588 00:27:57,080 --> 00:28:00,470 Ampak jaz bi trdijo, da lahko, če ste odmor pa dol v teh posameznih 589 00:28:00,470 --> 00:28:04,400 primerih in le sprehod skozi to previdno, čeprav, priznam, pod 590 00:28:04,400 --> 00:28:06,300 stresne okoliščine. 591 00:28:06,300 --> 00:28:09,470 >> K sreči, slika je vse srečnejši. 592 00:28:09,470 --> 00:28:11,050 Lahko bi to pripraviti v poljubno število načinov. 593 00:28:11,050 --> 00:28:12,760 Vam ni treba storiti križanje stvar tukaj. 594 00:28:12,760 --> 00:28:14,520 Lahko bi to naredil z ravnimi linije je to všeč. 595 00:28:14,520 --> 00:28:18,790 Ampak bistvo tega problema, v splošno je zavedati, da 596 00:28:18,790 --> 00:28:22,060 Slika na koncu je treba pogledati malo kaj takega, saj 597 00:28:22,060 --> 00:28:25,030 konstantna čas je pomenilo, da boste obdržali motenje in motenje in motenje 598 00:28:25,030 --> 00:28:29,900 nova vozlišča na začetku seznama. 599 00:28:29,900 --> 00:28:31,960 Vsa vprašanja? 600 00:28:31,960 --> 00:28:34,565 Verjetno najbolj izzivalne zagotovo kodiranje vprašanja. 601 00:28:34,565 --> 00:28:37,690 >> PUBLIKA: Torej je seznam podobna glavo v prejšnjih primerih. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. Malan: Točno, točno. 603 00:28:39,640 --> 00:28:43,130 Samo drugačno ime za Globalna spremenljivka. 604 00:28:43,130 --> 00:28:44,380 Po vsem svetu, kaj? 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 Torej, to je tista, v kateri ste moral napisati odstavek. 608 00:28:52,020 --> 00:28:56,060 Nekateri ljudje pisal eseje za to vprašanje. 609 00:28:56,060 --> 00:29:00,230 Vendar si morate za uporabo teh šest izraze opisati, kaj se zgodi, ko 610 00:29:00,230 --> 00:29:02,440 poskusite, da se obrnete facebook.com. 611 00:29:02,440 --> 00:29:07,930 Tako da bom samo govoriti skozi proces uporabo vseh teh izrazov. 612 00:29:07,930 --> 00:29:11,290 Torej v našem brskalniku vpišemo facebook.com in pritisnite tipko Enter. 613 00:29:11,290 --> 00:29:17,280 Torej naš brskalnik bo za izgradnjo HTTP zahteva, da se dogaja, da pošljete 614 00:29:17,280 --> 00:29:22,220 skozi neki proces na Facebook za Facebook, da se odzove na nas s 615 00:29:22,220 --> 00:29:24,450 HTML njegove strani. 616 00:29:24,450 --> 00:29:28,800 >> Torej, kaj je proces, ki ga ki zahteva HTTP 617 00:29:28,800 --> 00:29:30,730 dejansko dobi na Facebooku? 618 00:29:30,730 --> 00:29:32,790 Torej, najprej moramo prevesti Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Torej samo zaradi imena Facebook.com, kjer v resnici počne zahtevka za HTTP 620 00:29:38,780 --> 00:29:39,940 morali iti? 621 00:29:39,940 --> 00:29:44,120 Zato moramo prevesti Facebook.com na IP naslov, ki enolično 622 00:29:44,120 --> 00:29:47,620 opredeljuje, kaj stroj smo dejansko želite poslati to zahtevo. 623 00:29:47,620 --> 00:29:49,310 Vaš laptop je IP naslov. 624 00:29:49,310 --> 00:29:52,240 Kaj povezan z internetom ima naslov IP. 625 00:29:52,240 --> 00:29:59,030 >> Torej DNS, Domain Name System, ki je kaj se dogaja za ravnanje prevod 626 00:29:59,030 --> 00:30:03,750 iz facebook.com na IP naslov, ki si dejansko želijo stopiti v stik. 627 00:30:03,750 --> 00:30:08,075 Tako smo v stik DNS strežnikov in recimo, kaj je facebook.com? 628 00:30:08,075 --> 00:30:16,560 Piše, oh, to je IP naslov 190,212 Nekaj, nekaj, nekaj. 629 00:30:16,560 --> 00:30:16,900 Vse je v redu. 630 00:30:16,900 --> 00:30:18,850 Vem, kaj stroj Želim, da se obrnete. 631 00:30:18,850 --> 00:30:22,360 >> Torej, potem pošljite vašo zahtevo HTTP več na tem računalniku. 632 00:30:22,360 --> 00:30:24,140 Torej, kako priti do tega stroja? 633 00:30:24,140 --> 00:30:27,200 No, prošnja gre od usmerjevalnikih odbijal. 634 00:30:27,200 --> 00:30:32,630 Spomnimo se primera v razredu, kjer smo dejansko videli pot, ki 635 00:30:32,630 --> 00:30:35,340 paketov je, ko smo poskušali za komuniciranje. 636 00:30:35,340 --> 00:30:38,460 Videli smo, da skok čez Atlantik Ocean na eni točki ali karkoli. 637 00:30:38,460 --> 00:30:42,820 >> Torej zadnji izraz pristanišče. 638 00:30:42,820 --> 00:30:46,520 Torej, to je zdaj na vašem računalniku. 639 00:30:46,520 --> 00:30:49,970 Lahko imaš več stvari, ki so trenutno komunikacijo z internetom. 640 00:30:49,970 --> 00:30:53,730 Tako da se bom lahko teče, recimo, Skype. 641 00:30:53,730 --> 00:30:55,670 Morda imam spletnega brskalnika odprto. 642 00:30:55,670 --> 00:30:59,010 Morda imam nekaj, torrenting datotek. 643 00:30:59,010 --> 00:31:00,880 Torej, vse te stvari so komuniciranje z 644 00:31:00,880 --> 00:31:02,600 internet na nek način. 645 00:31:02,600 --> 00:31:08,070 >> Torej, ko računalnik prejme nekaj podatkov iz interneta, kako se to počne 646 00:31:08,070 --> 00:31:10,130 vem, kaj aplikacija dejansko želi podatke? 647 00:31:10,130 --> 00:31:12,610 Kako to vem, ali je to predvsem Podatki so namenjene 648 00:31:12,610 --> 00:31:16,070 torrenting vloge, v nasprotju je spletni brskalnik? 649 00:31:16,070 --> 00:31:20,980 Torej je to namen pristanišč v tem, da vse od teh vlog imajo 650 00:31:20,980 --> 00:31:22,720 trdila, da so vrata na vašem računalniku. 651 00:31:22,720 --> 00:31:27,580 Torej, vaš spletni brskalnik pravi, hej, Jaz sem posluša na vratih 1000. 652 00:31:27,580 --> 00:31:32,240 In tvoj torrenting Program je rekel, Jaz sem posluša na vratih 3000. 653 00:31:32,240 --> 00:31:34,770 Skype in pravi, sem z vrati 4000. 654 00:31:34,770 --> 00:31:41,950 >> Torej, ko boste dobili nekaj podatkov, ki pripada na eno od teh vlog, podatke 655 00:31:41,950 --> 00:31:45,510 je označena s katerimi pristanišča je dejansko je treba poslati skupaj s. 656 00:31:45,510 --> 00:31:47,950 Torej, ta pravi, oh, spadam v pristanišče 1000. 657 00:31:47,950 --> 00:31:50,950 Vem pa moram, naj to skupaj z mojo pomočjo spletnega brskalnika. 658 00:31:50,950 --> 00:31:56,440 Torej razlog, da je tukaj pomembno je, da spletni strežniki ponavadi 659 00:31:56,440 --> 00:31:58,240 poslušate na vrata 80. 660 00:31:58,240 --> 00:32:02,420 Torej, ko se obrnem, Facebook.com, sem komunikaciji z nekaterimi stroju. 661 00:32:02,420 --> 00:32:06,390 Ampak moram reči, katera vrata, ki Stroj Želim komunicirati s. 662 00:32:06,390 --> 00:32:09,160 In spletnih strežnikov so ponavadi posluša na vratih 80. 663 00:32:09,160 --> 00:32:14,010 >> Če bi hoteli, bi ga lahko nastavite navzgor, tako da našteva kot na vratih 7000. 664 00:32:14,010 --> 00:32:19,090 In nato v spletnem brskalniku, bi lahko ročno vnesite Facebook.com: 7000 k 665 00:32:19,090 --> 00:32:24,600 poslati zahtevo za vrata 7000 spletnega strežnika na Facebooku. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. Malan: In v tem primeru, tudi čeprav mi ni zahtevala, da se ljudje 667 00:32:26,820 --> 00:32:30,000 omenjam, v tem primeru, kaj port bi zahteva dejansko šel za? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Poskusite znova. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Točno tako. 672 00:32:44,300 --> 00:32:47,960 Ne išče, ampak subtilnost da je tam nihče zadnja. 673 00:32:47,960 --> 00:32:51,770 >> ROB Bowden: Torej HTTPS, saj je poslušanje posebej za 674 00:32:51,770 --> 00:32:55,180 šifrirani, je na vratih 4430. 675 00:32:55,180 --> 00:32:57,680 >> Ciljna publika: in e-pošte so 25, kajne? 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. Malan: Outbound elektronske pošte, 25, ja. 677 00:33:00,670 --> 00:33:03,760 >> ROB Bowden: Sploh ne vem, večina - vse nižjih ponavadi 678 00:33:03,760 --> 00:33:06,310 rezervirano za stvari. 679 00:33:06,310 --> 00:33:09,260 Mislim, da je vse pod 1024 je rezervirano. 680 00:33:09,260 --> 00:33:13,450 >> PUBLIKA: Zakaj si rekla 3 je bila napačna številka? 681 00:33:13,450 --> 00:33:18,820 >> ROB Bowden: Ker v IP naslova, tam je štiri skupine številk. 682 00:33:18,820 --> 00:33:21,090 In oni so od 0 do 255.. 683 00:33:21,090 --> 00:33:28,060 Torej 192.168.2.1 je skupni lokalnega omrežja IP naslov. 684 00:33:28,060 --> 00:33:30,840 Opazili vse tiste, manj kot 255.. 685 00:33:30,840 --> 00:33:33,570 Torej, ko sem začel z 300, ki verjetno ne bi imela 686 00:33:33,570 --> 00:33:35,210 bil eden izmed številk. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. Malan: Ampak to neumno clip od - je to CSI, kjer so imeli 688 00:33:38,170 --> 00:33:39,970 številko, ki je bila prevelika IP-naslova. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB Bowden: kakršna koli vprašanja o tem? 691 00:33:46,110 --> 00:33:51,710 Naslednjič, tako popolna sprememba topic, ampak imamo to PHP array za 692 00:33:51,710 --> 00:33:53,270 hiše v quad. 693 00:33:53,270 --> 00:33:56,360 In imamo neurejen seznam. 694 00:33:56,360 --> 00:33:59,550 In želimo natisniti vsak element seznama Pravkar vsebuje ime hišo. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Torej imamo foreach zanke. 697 00:34:11,870 --> 00:34:17,540 Torej, ne pozabite, sintaksa je foreach matrika kot elementa v matriki. 698 00:34:17,540 --> 00:34:22,360 Torej prek vsaki ponovitvi zanke, Hiša se dogaja, da na eni od 699 00:34:22,360 --> 00:34:24,060 Vrednosti znotraj matrike. 700 00:34:24,060 --> 00:34:26,530 >> Na prvi ponovitvi hiše bo Cabot House. 701 00:34:26,530 --> 00:34:30,370 Na drugi ponovitvi, hiša bo biti Courier House in tako naprej. 702 00:34:30,370 --> 00:34:34,370 Torej za vsak quad kot doma, smo le, da bo tiskanje - 703 00:34:34,370 --> 00:34:37,250 lahko bi tudi ponovil - 704 00:34:37,250 --> 00:34:42,199 element seznama in nato ime hišo je in zaprite element seznama. 705 00:34:42,199 --> 00:34:45,210 Zaviti oklepaji so neobvezne tukaj. 706 00:34:45,210 --> 00:34:49,480 >> In potem smo rekli tudi v vprašanju sama po sebi, ne pozabite, da zaprete 707 00:34:49,480 --> 00:34:50,770 Neurejen seznam tag. 708 00:34:50,770 --> 00:34:53,949 Zato moramo za izhod PHP način da bi to naredili. 709 00:34:53,949 --> 00:35:00,280 Ali smo lahko odmevalo zapri neurejen seznam tag. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. Malan fino Tudi tukaj bi so bili uporabiti staro šolo 711 00:35:02,380 --> 00:35:07,340 zanka z $ i = 0 0 in uporabo knezov do ugotovimo dolžino žarka. 712 00:35:07,340 --> 00:35:09,240 Tudi povsem v redu, samo Malo wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> PUBLIKA: Torej, če ste bili, da bo [Neslišno], bi naredil - 715 00:35:14,742 --> 00:35:16,734 Sem pozabil, kaj zanka [neslišno] je. 716 00:35:16,734 --> 00:35:21,380 Bi $ quad nosilec i? 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. Malan: Točno tako. 718 00:35:21,850 --> 00:35:23,100 Ja, točno. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB Bowden: Še kaj drugega? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. Malan V redu. 723 00:35:32,010 --> 00:35:32,300 Kompromisi. 724 00:35:32,300 --> 00:35:38,290 Tako je bilo grozde odgovorov je lahko vsaka od teh. 725 00:35:38,290 --> 00:35:40,510 Mi smo res samo iščejo nekaj prepričljivih za navzgor in 726 00:35:40,510 --> 00:35:41,100 negativna. 727 00:35:41,100 --> 00:35:44,830 In številka 16 vprašal, potrjevanje uporabnikov strani odjemalca vhod, tako kot pri JavaScript, 728 00:35:44,830 --> 00:35:47,280 namesto na strani strežnika, tako kot pri PHP. 729 00:35:47,280 --> 00:35:49,450 Torej, kaj je narobe z početje client-side? 730 00:35:49,450 --> 00:35:53,780 >> No, ena od stvari, ki smo jih predlagali, je da boste zmanjšali latence, ker vam 731 00:35:53,780 --> 00:35:56,750 ne bi bilo treba ukvarjati stik strežnik, ki lahko traja nekaj 732 00:35:56,750 --> 00:36:00,390 milisekund ali celo nekaj sekund, ob izogibanju in samo 733 00:36:00,390 --> 00:36:04,670 potrjevanje vhodni strani odjemalca uporabnikov s proženje trener na oddajo in je 734 00:36:04,670 --> 00:36:06,650 Samo preverjam, ali pa vnesite nekaj v za ime? 735 00:36:06,650 --> 00:36:08,080 Ali so kaj vpisali v za e-poštni naslov? 736 00:36:08,080 --> 00:36:10,950 Ali pa izberite domu od spustnem meniju? 737 00:36:10,950 --> 00:36:14,360 >> Lahko jim trenutne povratne informacije uporabo GHz računalnik 738 00:36:14,360 --> 00:36:16,770 ali karkoli so, da je dejansko na njihovi mizi. 739 00:36:16,770 --> 00:36:19,310 Torej je to samo bolje uporabnik doživite tipično. 740 00:36:19,310 --> 00:36:24,460 Ampak slaba stran početje odjemalsko validacija, če to storite, ne da bi tudi 741 00:36:24,460 --> 00:36:29,860 početje preverjanje s strani strežnika je, da Najbolj kdo prihaja iz CS50 ve 742 00:36:29,860 --> 00:36:33,980 da lahko samo pošlje vse podatke, ki jih želite s strežnikom poljubno število načinov. 743 00:36:33,980 --> 00:36:37,030 Odkrito povedano, v večini kateremkoli brskalniku, lahko kliknite okrog v nastavitvah in samo 744 00:36:37,030 --> 00:36:40,110 izklopite JavaScript, ki bi Zato, onemogočiti vsakršno obliko 745 00:36:40,110 --> 00:36:41,080 potrjevanje. 746 00:36:41,080 --> 00:36:44,460 >> Ampak tudi vi se verjetno spomnite, da sem celo naredil nekaj Skrivnosten stvari v razredu z uporabo 747 00:36:44,460 --> 00:36:47,790 telnet in dejansko se pretvarja, da se brskalnik s pošiljanjem get 748 00:36:47,790 --> 00:36:49,240 Zahteva za strežnik. 749 00:36:49,240 --> 00:36:51,030 In to zagotovo ni uporabo katere koli JavaScript. 750 00:36:51,030 --> 00:36:53,290 To je samo jaz tipkanje ukazov na tipkovnici. 751 00:36:53,290 --> 00:36:57,410 Torej res, vsak programer v dovolj udobje s spleta in HTTP 752 00:36:57,410 --> 00:37:01,690 lahko pošljete karkoli podatki on ali ona želi na strežnik brez potrditve. 753 00:37:01,690 --> 00:37:05,470 In če vaš strežnik ne tudi preverjanje, pa se mi je ime, je 754 00:37:05,470 --> 00:37:08,930 to dejansko veljaven e-poštni naslov, kajne jih izberejo domu, boste morda na koncu 755 00:37:08,930 --> 00:37:12,800 up vstavljanje lažne ali pa samo prazen podatki v zbirki podatkov, kar je verjetno 756 00:37:12,800 --> 00:37:15,450 se ne bo dobro, če ste bili ob predpostavki, da je tam. 757 00:37:15,450 --> 00:37:16,770 >> Torej je to nadležno realnost. 758 00:37:16,770 --> 00:37:19,890 Ampak na splošno, na strani odjemalca Validacija je super. 759 00:37:19,890 --> 00:37:21,810 Ampak to pomeni dvakrat toliko dela. 760 00:37:21,810 --> 00:37:25,970 Čeprav je naredil obstajajo različne knjižnice, Javascript knjižnice za 761 00:37:25,970 --> 00:37:28,830 na primer, da bi to veliko, mnogo manj glavobolov. 762 00:37:28,830 --> 00:37:31,940 In lahko ponovno nekaj kode na strani strežnika, na strani odjemalca. 763 00:37:31,940 --> 00:37:35,980 Vendar se zavedajo, da je to običajno dodatno delo. 764 00:37:35,980 --> 00:37:36,415 Ja. 765 00:37:36,415 --> 00:37:37,792 >> PUBLIKA: Torej, če smo pravkar je dejal, manj varen - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. Malan: [smeh] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Tisti, ki so vedno težje tisti, odločati. 769 00:37:43,105 --> 00:37:44,480 >> ROB Bowden: To bi bilo so bile sprejete. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. Malan: Kaj? 771 00:37:44,810 --> 00:37:45,810 >> ROB Bowden: Ustvaril sem ta problem. 772 00:37:45,810 --> 00:37:46,735 Da bi bili sprejeti. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. Malan: Ja. 774 00:37:47,220 --> 00:37:47,830 >> PUBLIKA: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB Bowden: Ampak nismo sprejeli za prvo - 776 00:37:51,770 --> 00:37:53,630 dobro, kar smo iskali, je nekaj podobnega tebi ne bi bilo treba 777 00:37:53,630 --> 00:37:55,270 komunicira s strežnikom. 778 00:37:55,270 --> 00:37:58,355 Nismo sprejeli samo hitrejši. 779 00:37:58,355 --> 00:38:00,080 >> PUBLIKA: Kaj pa ne osvežite stran? 780 00:38:00,080 --> 00:38:00,430 >> ROB Bowden: Da. 781 00:38:00,430 --> 00:38:03,000 To je bil sprejet odgovor. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. Malan: Karkoli, kjer smo menili, da je bolj verjetno, kot verjetno ne bo 783 00:38:06,300 --> 00:38:09,780 da boste vedeli, kaj ste bili rekel, kar je težko 784 00:38:09,780 --> 00:38:13,500 linija za izdelavo včasih. 785 00:38:13,500 --> 00:38:16,000 Namesto z uporabo povezani seznam z matriko za ohranitev 786 00:38:16,000 --> 00:38:17,590 razporejene seznam števil. 787 00:38:17,590 --> 00:38:21,000 Torej glavo pogosto navajajo s povezano sezname, ki so spodbudili njihovo celotno 788 00:38:21,000 --> 00:38:22,370 Uvedba je bila dobiš dinamičnost. 789 00:38:22,370 --> 00:38:23,030 Lahko zrastejo. 790 00:38:23,030 --> 00:38:23,950 Ti lahko skrči. 791 00:38:23,950 --> 00:38:27,370 Torej vam ni treba, da skoči skozi obroče dejansko ustvarjajo več pomnilnika 792 00:38:27,370 --> 00:38:28,140 s paleto. 793 00:38:28,140 --> 00:38:30,310 Ali pa nimajo samo pravijo, žal, uporabnik. 794 00:38:30,310 --> 00:38:31,410 Niz se napolni. 795 00:38:31,410 --> 00:38:35,850 Torej, dinamična rast seznama. 796 00:38:35,850 --> 00:38:37,210 Negativna, čeprav povezanih seznamov? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> PUBLIKA: To je linearna. 799 00:38:43,356 --> 00:38:45,800 Iskanjem na povezanem seznamu je linearna namesto da bi tisto, kar se prijavite 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. Malan: Točno tako. 801 00:38:46,360 --> 00:38:50,160 Iščejo na povezanem seznamu je linearna, tudi če je to urejeno, saj lahko 802 00:38:50,160 --> 00:38:53,170 Samo sledite tem krušne drobtine, ti kazalci, od začetka seznama 803 00:38:53,170 --> 00:38:53,570 do konca. 804 00:38:53,570 --> 00:38:57,970 Ne, ne moreš vzvod bralno in, Tako, binarno iskanje, tudi če je 805 00:38:57,970 --> 00:39:00,740 razporejene, da si lahko storite s paleto. 806 00:39:00,740 --> 00:39:02,390 In tam je tudi dodaten strošek. 807 00:39:02,390 --> 00:39:02,966 Ja. 808 00:39:02,966 --> 00:39:03,800 >> PUBLIKA: Memory neučinkoviti? 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. Malan: Ja. 810 00:39:04,130 --> 00:39:06,940 No, jaz ne bi nujno pravijo neučinkovito. 811 00:39:06,940 --> 00:39:10,110 Ampak to vas bo stalo več pomnilnika, ker morate 32 bitov za vsak 812 00:39:10,110 --> 00:39:13,400 vozlišče za dodatno kazalca, na vsaj za posamezno povezani seznam. 813 00:39:13,400 --> 00:39:16,660 Zdaj, če ste shranjevanje le cela števila in dodajate kazalec, da je 814 00:39:16,660 --> 00:39:17,830 pravzaprav nekako nepomembno. 815 00:39:17,830 --> 00:39:19,340 To je podvojila količino pomnilnika. 816 00:39:19,340 --> 00:39:22,330 Toda v resnici, če ste shranjevanje povezani seznam konstruktov, ki imajo lahko 817 00:39:22,330 --> 00:39:25,540 8 bajtov, 16 bajtov, še bolj kot to, morda je manj 818 00:39:25,540 --> 00:39:26,500 v zelo nizki ceni. 819 00:39:26,500 --> 00:39:28,320 Ampak to je strošek vseeno. 820 00:39:28,320 --> 00:39:31,880 Torej, eden od tistih, ki bi si bil lep, kot slabosti. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Uporaba PHP namesto C, da napišete Program ukazni vrstici. 823 00:39:36,100 --> 00:39:41,890 Torej tukaj, je pogosto hitrejši za uporabo jezik kot PHP ali Ruby ali Python. 824 00:39:41,890 --> 00:39:43,700 Ti samo hitro odpreti up urejevalniku besedil. 825 00:39:43,700 --> 00:39:45,900 Imate veliko več funkcij so vam na voljo. 826 00:39:45,900 --> 00:39:49,325 PHP ima pomivalno korito funkcij, ker je v C, ga 827 00:39:49,325 --> 00:39:50,420 imajo zelo, zelo malo. 828 00:39:50,420 --> 00:39:53,820 Dejstvo je, fantje vedo, na težji način da nimate hash tabel. 829 00:39:53,820 --> 00:39:55,000 Niste mi povezane sezname. 830 00:39:55,000 --> 00:39:57,470 Če želite, da tiste, ki jih imajo na jih izvajajo sami. 831 00:39:57,470 --> 00:40:00,950 >> Tako je eden glavo PHP ali res vse razlagati jezik je hitrost 832 00:40:00,950 --> 00:40:02,920 , s katerim lahko pišete kodo. 833 00:40:02,920 --> 00:40:06,660 Ampak slaba, bomo to videli, ko sem hitro podžigal misspeller 834 00:40:06,660 --> 00:40:11,780 Izvajanje v predavanju z uporabo PHP, je da je uporaba razlagati jezik 835 00:40:11,780 --> 00:40:13,570 navadno počasnejši. 836 00:40:13,570 --> 00:40:18,420 In videli smo, da je dokazljivo z povečanje v času od 0,3 sekunde do 3 837 00:40:18,420 --> 00:40:24,440 sekund, zaradi razlage da se dejansko dogaja. 838 00:40:24,440 --> 00:40:27,060 >> Druga glavo je bil, da vam ne bi bilo treba prevesti. 839 00:40:27,060 --> 00:40:30,130 Tako je tudi pospeši razvoj mimogrede, ker nimate 840 00:40:30,130 --> 00:40:31,360 dva koraka za vodenje programa. 841 00:40:31,360 --> 00:40:32,140 Moraš eno. 842 00:40:32,140 --> 00:40:35,260 In tako, da je precej prepričljiv, kot dobro. 843 00:40:35,260 --> 00:40:38,450 Uporaba SQL baze podatkov, namesto CSV datoteko za shranjevanje podatkov. 844 00:40:38,450 --> 00:40:40,230 Torej SQL baza podatkov za pset7. 845 00:40:40,230 --> 00:40:42,060 CSV niste uporabili veliko. 846 00:40:42,060 --> 00:40:45,960 Ampak jo uporabljamo posredno v pset7 kot tudi s pogovori z Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Vendar CSV je tako kot Excelove datoteke, vendar super enostavna, kjer so stebri 848 00:40:49,330 --> 00:40:54,010 Samo demarked z vejicami znotraj ki je sicer besedilno datoteko. 849 00:40:54,010 --> 00:40:56,740 In z uporabo baze podatkov SQL je malo bolj prepričljivi. 850 00:40:56,740 --> 00:41:00,060 To je narobe, ker ste dobili stvari kot izbiro in vstavljanje in brisanje. 851 00:41:00,060 --> 00:41:03,790 In dobiš, domnevno indekse, ki MySQL in drugih zbirk podatkov, kot so 852 00:41:03,790 --> 00:41:07,510 Oracle, graditi za vas v spomin, ki pomeni, da vaša izberite verjetno ni 853 00:41:07,510 --> 00:41:09,000 bo linearna zgoraj navzdol. 854 00:41:09,000 --> 00:41:11,300 To se dejansko dogaja, je nekaj kot binarni iskanju ali kaj podobnega 855 00:41:11,300 --> 00:41:12,520 pisane v duhu. 856 00:41:12,520 --> 00:41:13,930 Torej, oni so običajno hitreje. 857 00:41:13,930 --> 00:41:16,040 >> Ampak slaba stran je, da to je samo več dela. 858 00:41:16,040 --> 00:41:16,730 To je več truda. 859 00:41:16,730 --> 00:41:18,140 Morate razumeti podatkovnih baz. 860 00:41:18,140 --> 00:41:18,940 Moraš ga je ustanovil. 861 00:41:18,940 --> 00:41:20,840 Strežnik potrebujete za vožnjo da je baza podatkov o. 862 00:41:20,840 --> 00:41:22,750 Morate razumeti, kako ga nastaviti. 863 00:41:22,750 --> 00:41:24,930 Torej, to so le ti vrste kompromisov. 864 00:41:24,930 --> 00:41:27,860 Ker je datoteka CSV, lahko ga ustvarili z gedit. 865 00:41:27,860 --> 00:41:28,770 In ste na dobri poti. 866 00:41:28,770 --> 00:41:31,550 Ni kompleksnost dlje. 867 00:41:31,550 --> 00:41:34,870 >> Uporaba Trie namesto razpršene tabele z Veriženje za shranjevanje 868 00:41:34,870 --> 00:41:37,490 slovar besed, ki spominjajo od pset5. 869 00:41:37,490 --> 00:41:42,480 Tako poskuša z glavo, v teoriji vsaj, je kaj? 870 00:41:42,480 --> 00:41:46,380 Constant čas, vsaj če ste razpršitev na vsako posamezno 871 00:41:46,380 --> 00:41:48,990 črke v besedi, kot ste vi morda za pset5. 872 00:41:48,990 --> 00:41:52,720 Da bi bilo pet, šest znakov # hashes če obstaja pet ali šest 873 00:41:52,720 --> 00:41:53,900 črke v besedi. 874 00:41:53,900 --> 00:41:54,580 In to je zelo dobro. 875 00:41:54,580 --> 00:41:56,910 In če obstaja zgornja meja o tem, kako Dokler lahko vaše besede lahko, da je 876 00:41:56,910 --> 00:41:59,320 res asimptotično konstantna čas. 877 00:41:59,320 --> 00:42:05,180 >> Ker je razpršena tabela z ločeno veriženje, problem je s tem 878 00:42:05,180 --> 00:42:09,070 vrsta podatkovne strukture je, da uspešnost vaših algoritmov običajno 879 00:42:09,070 --> 00:42:12,700 odvisno od števila stvari že v strukture podatkov. 880 00:42:12,700 --> 00:42:15,660 In to je vsekakor velja verige, pri čemer več stvari si dal 881 00:42:15,660 --> 00:42:18,800 v hash tabelo, več tistih, Verige iti, kar pomeni, da v najslabšem 882 00:42:18,800 --> 00:42:21,960 primera, kar vas bo morda iščete je vse tako na koncu ene 883 00:42:21,960 --> 00:42:26,000 od teh verig, ki učinkovito je naloga v nekaj linearno. 884 00:42:26,000 --> 00:42:29,450 >> Zdaj, v praksi, bi bilo popolnoma se zgodi, da hash tabela z 885 00:42:29,450 --> 00:42:32,820 verige je hitrejši kot ustreza Izvajanje Trie. 886 00:42:32,820 --> 00:42:35,570 Ampak to je zaradi različnih razlogov, med ki se poskuša uporabiti cel kup 887 00:42:35,570 --> 00:42:39,240 pomnilnika, ki se v resnici, počasi stvari dol, ker ne boste dobili lepo 888 00:42:39,240 --> 00:42:42,410 Koristi nekaj, kar ti predpomnjenje, kjer se stvari, ki so blizu skupaj 889 00:42:42,410 --> 00:42:45,420 v pomnilnik lahko dostopen pogosto hitreje. 890 00:42:45,420 --> 00:42:48,180 In včasih lahko prišli do res dober hash funkcijo. 891 00:42:48,180 --> 00:42:51,060 Tudi če imate zapravljati malo pomnilnika, boste morda dejansko lahko 892 00:42:51,060 --> 00:42:54,430 našli stvari hitro in ne tako slabo, kot linearno. 893 00:42:54,430 --> 00:42:58,410 >> Torej na kratko, ni bilo nujno, s katero koli od teh eno ali celo dve 894 00:42:58,410 --> 00:43:00,050 posebne stvari, ki smo jih iskali. 895 00:43:00,050 --> 00:43:03,080 Res nič prepričljiva kot pozitivni in negativni 896 00:43:03,080 --> 00:43:04,800 splošno ujete naše oči. 897 00:43:04,800 --> 00:43:11,840 >> ROB Bowden: Torej, za pozitivni, smo ne sprejme sama "hitreje". You 898 00:43:11,840 --> 00:43:14,540 imel za povedati nekaj o tem. 899 00:43:14,540 --> 00:43:17,910 Tudi če ste teoretično hitreje dejal, smo vedeli, da ste nekako razumel 900 00:43:17,910 --> 00:43:19,470 , da je 0 od 1. 901 00:43:19,470 --> 00:43:22,820 In hash tabelo, v teoriji, ni 0 od 1. 902 00:43:22,820 --> 00:43:26,550 Omenjajo ničesar o času izvajanja na splošno imaš točke. 903 00:43:26,550 --> 00:43:32,640 Toda "hitreje", večina rešitev na velika plošča, ki so bili poskuša 904 00:43:32,640 --> 00:43:34,990 objektivno počasneje kot rešitev da so bile razpršene tabele. 905 00:43:34,990 --> 00:43:37,250 Tako hitreje in sama po sebi v resnici ni res. 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 Verjetno sem edini, ki se spozna to je, kako naj bi to 909 00:43:46,686 --> 00:43:47,500 se izgovarja, kajne? 910 00:43:47,500 --> 00:43:50,400 >> ROB Bowden: Imel sem pravzaprav nima pojma. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. Malan: To je Občutek v moji glavi. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB Bowden: delam tega. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Torej, to je tista, v kateri ste morali pripraviti diagram podoben tebi morda 916 00:44:04,243 --> 00:44:06,040 videl na zadnjih izpitih. 917 00:44:06,040 --> 00:44:12,200 Torej, kaj je samo pogled na to. 918 00:44:12,200 --> 00:44:18,170 Torej iz HTML vozlišča, imamo dva otroci, glava in telo. 919 00:44:18,170 --> 00:44:20,570 Zato smo se osamosvojiti - glava in telo. 920 00:44:20,570 --> 00:44:22,280 Glava je naslov tag. 921 00:44:22,280 --> 00:44:23,710 Torej imamo naslov. 922 00:44:23,710 --> 00:44:28,450 >> Zdaj pa ena stvar, veliko ljudi Pozabil je, da te besedilne vozlišča 923 00:44:28,450 --> 00:44:30,430 elementi znotraj tega drevesa. 924 00:44:30,430 --> 00:44:36,260 Torej, tukaj se zgodi, da jih pripravijo, kot elipsi za njihovo razlikovanje od teh 925 00:44:36,260 --> 00:44:37,380 Vrste vozlišč. 926 00:44:37,380 --> 00:44:41,450 Ampak obvestilo tudi tu imamo vrh, srednji in spodnji del na koncu pa 927 00:44:41,450 --> 00:44:42,560 besedilo vozlišča. 928 00:44:42,560 --> 00:44:46,250 Torej smemo pozabiti tistih, ki je bila nekoliko skupne napake. 929 00:44:46,250 --> 00:44:48,770 >> Telo ima tri otroke - ti trije divs. 930 00:44:48,770 --> 00:44:53,340 Torej div, div, div in nato besedilo vozlišče otroci teh divs. 931 00:44:53,340 --> 00:44:55,900 To je v bistvu vse v ta vprašanja. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. Malan: In to je treba omeniti, čeprav ne živijo na teh 933 00:44:57,860 --> 00:45:01,040 podrobnosti v času, ki ga preživimo na JavaScript, da sklep ne, v 934 00:45:01,040 --> 00:45:02,290 Dejstvo, glede na tehnično. 935 00:45:02,290 --> 00:45:06,330 Torej, če glava pride pred telesom v HTML, nato pa bi se izkazalo, da 936 00:45:06,330 --> 00:45:08,860 levo od telesa, v dejanski DOM. 937 00:45:08,860 --> 00:45:12,265 Da njegova je, na splošno, samo v vednost, nekaj, kar se imenuje dokument, da bi, kadar je to 938 00:45:12,265 --> 00:45:13,260 to ne zadeva. 939 00:45:13,260 --> 00:45:17,470 In če ste bili izvedbeni parser, program, ki bere HTML v stavbi 940 00:45:17,470 --> 00:45:20,960 do drevesa v spomin, če sem iskren, to je intuitivno verjetno tisto, kar 941 00:45:20,960 --> 00:45:24,720 narediti vseeno - od zgoraj navzdol, od leve proti desni. 942 00:45:24,720 --> 00:45:26,116 >> ROB Bowden: Vprašanja o tem? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Naj storim naslednjič? 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. Malan: Seveda. 946 00:45:32,380 --> 00:45:33,810 >> ROB Bowden: OK. 947 00:45:33,810 --> 00:45:39,320 Torej je to medpomnilnika napad vprašanje. 948 00:45:39,320 --> 00:45:43,740 Glavna stvar, ki sem prepozna, je, tudi, kako bi lahko nasprotnik trik 949 00:45:43,740 --> 00:45:46,170 ta program v izvršilni naključne kode? 950 00:45:46,170 --> 00:45:51,860 Torej argv1, prvi ukazni vrstici Argument za ta program, ki se lahko 951 00:45:51,860 --> 00:45:53,920 poljubno dolgo. 952 00:45:53,920 --> 00:45:59,160 Ampak tukaj smo, da uporabljate memcpy kopirati argv1, ki je tu bar. 953 00:45:59,160 --> 00:46:00,165 Mi smo to poteka kot argument. 954 00:46:00,165 --> 00:46:02,050 In tako se je pokazal na imenski vrstici. 955 00:46:02,050 --> 00:46:08,040 >> Torej smo memcpying bar v tem pufru C. 956 00:46:08,040 --> 00:46:09,400 Koliko zlogov smo kopiranje? 957 00:46:09,400 --> 00:46:14,040 Pa vendar mnogi bajti bar zgodi, da uporabljali, dolžino te trditve. 958 00:46:14,040 --> 00:46:17,930 Vendar pa c je le 12 bajtov širok. 959 00:46:17,930 --> 00:46:22,280 Torej, če vpišemo argument v ukazni vrstici , ki je daljša od 12 bajtov, smo 960 00:46:22,280 --> 00:46:25,470 bo overflow to Posamezen pufer. 961 00:46:25,470 --> 00:46:31,000 Zdaj, kako bi nasprotnik trik programiranje v izvršilni poljubno kodo? 962 00:46:31,000 --> 00:46:34,910 >> Torej, ne pozabite, da je tu Glavni kliče foo. 963 00:46:34,910 --> 00:46:37,340 In tako je glavna zahteva foo. 964 00:46:37,340 --> 00:46:40,408 Narišimo to. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Torej imamo kup. 967 00:46:46,990 --> 00:46:49,090 In glavna ima sveženj okvir na dnu. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Na neki točki, glavni klici foo. 970 00:46:53,250 --> 00:46:55,390 No, takoj, glavni klici foo. 971 00:46:55,390 --> 00:46:57,130 In tako foo dobi svoj sveženj okvir. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Zdaj, na neki točki, foo se bo vrnil. 974 00:47:02,220 --> 00:47:06,810 In je šel foo donose, moramo vedeti, na kakšna vrstica kode znotraj glavnega smo 975 00:47:06,810 --> 00:47:10,610 je bilo, da bi vedeli, kam bi morali nadaljevati v glavnem. 976 00:47:10,610 --> 00:47:13,100 Mi lahko pokličete foo od celote kup različnih krajih. 977 00:47:13,100 --> 00:47:14,620 Kako vemo, kje se vrnete? 978 00:47:14,620 --> 00:47:16,460 No, moramo hraniti, da nekje. 979 00:47:16,460 --> 00:47:23,010 >> Torej nekje tu nekje hranimo , kjer bi se morali vrniti na enkrat 980 00:47:23,010 --> 00:47:24,070 foo vrne. 981 00:47:24,070 --> 00:47:26,350 In to je naslov povratka. 982 00:47:26,350 --> 00:47:30,490 Torej, kako lahko nasprotnik izkoristi to je dejstvo, da 983 00:47:30,490 --> 00:47:37,550 ta buffer c hrani, dajmo pravijo, tukaj je c. 984 00:47:37,550 --> 00:47:39,690 Torej imamo 12 bytov za c. 985 00:47:39,690 --> 00:47:40,540 To je c. 986 00:47:40,540 --> 00:47:43,030 In to je Foo je kup prstan. 987 00:47:43,030 --> 00:47:49,970 Torej, če zlonamerni uporabnik vnese več bajti od 12 ali pa vnesete ukaz 988 00:47:49,970 --> 00:47:54,570 Argument linija, ki je daljša od 12 znaki, nato pa se bomo 989 00:47:54,570 --> 00:47:57,540 preliva te rezerve. 990 00:47:57,540 --> 00:47:59,910 >> Mi lahko nadaljujem. 991 00:47:59,910 --> 00:48:02,220 In na neki točki, gremo daleč Dovolj je, da začnemo 992 00:48:02,220 --> 00:48:05,120 prepisovanju to povratnega naslova. 993 00:48:05,120 --> 00:48:08,310 Torej, ko smo prepisali naslov pošiljatelja, To pomeni, da kadar foo 994 00:48:08,310 --> 00:48:14,220 donosi, smo se vračajo tja, kjer Zlonamerni uporabnik je tako povedal, da ga 995 00:48:14,220 --> 00:48:19,490 ne glede na vrednost, ki jo je začel, ne glede na znaki uporabnik vnese. 996 00:48:19,490 --> 00:48:24,320 In tako, če je zlonamerni uporabnik bi posebej pameten, da lahko imajo ta 997 00:48:24,320 --> 00:48:29,255 vrnitev na nekje v printDef funkcija ali nekje v malloc 998 00:48:29,255 --> 00:48:31,830 Funkcija, samo kjerkoli samovoljno. 999 00:48:31,830 --> 00:48:38,420 >> Še bolj pameten, kaj če ima uporabnik vrne na tukaj. 1000 00:48:38,420 --> 00:48:41,920 In potem začneš izvršitve ti kot vrstic kode. 1001 00:48:41,920 --> 00:48:46,610 Torej, na tej točki lahko uporabnik vnese karkoli hoče v tej regiji. 1002 00:48:46,610 --> 00:48:52,210 In ima popoln nadzor preko svojega programa. 1003 00:48:52,210 --> 00:48:53,460 Vprašanja o tem? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Torej naslednje vprašanje je končano ponovno izvajanje Foo tako 1006 00:49:00,970 --> 00:49:02,620 da to ni več ogrožena. 1007 00:49:02,620 --> 00:49:03,870 >> Torej je nekaj načinov lahko bi to naredil. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Še vedno imamo samo c počutje dolžine 12. 1010 00:49:13,330 --> 00:49:16,480 Lahko bi se to spremenilo kot del vaše rešitve. 1011 00:49:16,480 --> 00:49:18,930 Dodali smo tudi preverjanje, da bi Prepričajte bar ni bilo nič. 1012 00:49:18,930 --> 00:49:24,460 Čeprav vam ni treba da je za popolno kredit. 1013 00:49:24,460 --> 00:49:27,690 Tako da smo se prej posvetovali niz dolžine droga. 1014 00:49:27,690 --> 00:49:31,650 Če je večja od 12, potem dejansko ne naredite kopijo. 1015 00:49:31,650 --> 00:49:33,010 Tako da je eden od načinov za to določitev. 1016 00:49:33,010 --> 00:49:36,750 >> Drug način za to določitev je namesto ob c samo dolžine 12, ima 1017 00:49:36,750 --> 00:49:39,310 biti dolžina strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Drug način za pritrjevanje je dejansko samo vrnitev. 1019 00:49:43,370 --> 00:49:46,690 Torej, če si se rešil vse to, če bi si izbriše vse 1020 00:49:46,690 --> 00:49:51,830 vrstic kode, bi gotten polno kreditno, ker te funkcije 1021 00:49:51,830 --> 00:49:54,150 dejansko ne uspe karkoli. 1022 00:49:54,150 --> 00:49:57,650 To je kopiranje ukazno vrstico argument v neki niz v 1023 00:49:57,650 --> 00:49:59,960 njegova lokalna kup okvir. 1024 00:49:59,960 --> 00:50:01,310 In potem stvar, ki se vrača. 1025 00:50:01,310 --> 00:50:04,020 In ne glede na to doseči, je več. 1026 00:50:04,020 --> 00:50:09,740 Torej donos je bil tudi zadostna način za pridobivanje vse zasluge. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. Malan: Ni čisto duh Vprašanje, ampak sprejemljivo na 1028 00:50:13,425 --> 00:50:15,580 spec vseeno. 1029 00:50:15,580 --> 00:50:18,260 >> ROB Bowden: Vprašanja o nič od tega? 1030 00:50:18,260 --> 00:50:22,270 Ena stvar, ki jo vsaj potrebno, da se sestavljanje kodo. 1031 00:50:22,270 --> 00:50:24,810 Torej, čeprav tehnično niste ranljiva, če je vaša koda ne 1032 00:50:24,810 --> 00:50:29,130 zbiranje, nismo sprejeti. 1033 00:50:29,130 --> 00:50:31,350 Brez vprašanj? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. Malan: Želiš torej ta naziv? 1036 00:50:34,580 --> 00:50:37,230 >> ROB Bowden: Ne 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. Malan: Torej, v tem enem, to je bodisi dobra novica ali slaba novica. 1038 00:50:40,470 --> 00:50:43,870 To je dobesedno isti problem kot prvi kviz. 1039 00:50:43,870 --> 00:50:46,140 In to je skoraj enako problem kot pset1. 1040 00:50:46,140 --> 00:50:49,980 Vendar je namenoma poenostavljena biti enostavnejši piramide, tista, ki je lahko 1041 00:50:49,980 --> 00:50:52,330 rešen z rahlo enostavnejši ponovitev. 1042 00:50:52,330 --> 00:50:55,680 In res, kaj smo dobili na Tu ni bilo toliko logike, 1043 00:50:55,680 --> 00:50:58,100 ker je verjetno, s tem, da si bolj udobno kot ste bili 1044 00:50:58,100 --> 00:51:01,850 V enem tednu z for zanke ali zakaj zank, ampak res, da draži narazen, da 1045 00:51:01,850 --> 00:51:04,790 ste malo všeč Ideja, da je PHP ne le o tem, kaj 1046 00:51:04,790 --> 00:51:05,290 programiranje. 1047 00:51:05,290 --> 00:51:07,820 To je dejansko lahko uporablja kot jezik pisati programe ukazni vrstici. 1048 00:51:07,820 --> 00:51:10,060 >> In res, da je tisto, kar smo poskušali opozoriti, da. 1049 00:51:10,060 --> 00:51:12,060 To je PHP program za ukazno vrstico. 1050 00:51:12,060 --> 00:51:16,690 Torej C koda tod pa pravilna v C, ni pravilen za PHP. 1051 00:51:16,690 --> 00:51:17,940 Toda koda res enaka. 1052 00:51:17,940 --> 00:51:21,720 Če primerjate rešitve za kviz 0 proti Quiz 1, boste ugotovili, da 1053 00:51:21,720 --> 00:51:25,630 to je skoraj identična, razen za nekateri dolar znaki in za 1054 00:51:25,630 --> 00:51:27,250 odsotnost vrste podatkov. 1055 00:51:27,250 --> 00:51:31,720 Še posebej, če pogledamo tukaj, boste videli, da smo Ponovil je v tem 1056 00:51:31,720 --> 00:51:33,730 primer, od 1 do 7 s. 1057 00:51:33,730 --> 00:51:34,910 >> Mi bi to lahko storil 0 indeks. 1058 00:51:34,910 --> 00:51:37,320 Ampak včasih, mislim, da je samo psihično lažje razmišljati o stvareh, 1059 00:51:37,320 --> 00:51:38,200 od 1 do 7. 1060 00:51:38,200 --> 00:51:40,300 Če želite en blok, nato pa dva bloki, nato tri, nato 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot sedem. 1062 00:51:41,770 --> 00:51:45,960 Imamo pa j inicializiran na 1 in potem računam na največ i. 1063 00:51:45,960 --> 00:51:48,150 In vse, kar je tu drugače identična. 1064 00:51:48,150 --> 00:51:49,790 Vendar je vredno omeniti, so nekaj stvari. 1065 00:51:49,790 --> 00:51:53,230 Mi vam teh dveh linij, to najprej ena, goofily imenovan kot shebang 1066 00:51:53,230 --> 00:51:54,560 za oster pok. 1067 00:51:54,560 --> 00:51:58,770 In to samo določa pot, mapa, v kateri lahko biti program 1068 00:51:58,770 --> 00:52:02,160 je pokazala, da želite uporabiti interpretirati te datoteke. 1069 00:52:02,160 --> 00:52:04,710 >> In potem linija po tem, od Seveda, pomeni vstop PHP način. 1070 00:52:04,710 --> 00:52:07,740 In črta na dnu pomeni izhod PHP način. 1071 00:52:07,740 --> 00:52:09,740 In to deluje, na splošno, z razlagati jezikov. 1072 00:52:09,740 --> 00:52:14,370 To je nekako nadležno, če ste napisali Program v datoteki z imenom foo.php. 1073 00:52:14,370 --> 00:52:17,320 In potem bodo uporabniki morali samo ne pozabite, OK, za zagon tega programa, sem 1074 00:52:17,320 --> 00:52:22,320 morali vnesti "php vesoljske foo.php." Kind siten, če nič drugega. 1075 00:52:22,320 --> 00:52:25,270 In to tudi pokaže, da je vaš program je napisan v PHP, ki ni vse 1076 00:52:25,270 --> 00:52:27,060 da svetleča za uporabnika. 1077 00:52:27,060 --> 00:52:30,100 >> Torej si lahko odstranite. Php skupaj prikličite iz predavanja. 1078 00:52:30,100 --> 00:52:35,690 In lahko dejansko narediti. / Foo, če ste ga chmodded tako, da jo 1079 00:52:35,690 --> 00:52:36,500 izvršljiv. 1080 00:52:36,500 --> 00:52:39,630 Torej bi chmod + x foo storil. 1081 00:52:39,630 --> 00:52:41,460 In če ste tudi dodate shebang tukaj. 1082 00:52:41,460 --> 00:52:45,320 Ampak res, problem je bil že na tiskanje nekaj takega. 1083 00:52:45,320 --> 00:52:51,100 Brez HTML-ja, no C-code gotovo, samo nekaj PHP. 1084 00:52:51,100 --> 00:52:54,100 Torej Milo nato vrnil v problem 25. 1085 00:52:54,100 --> 00:52:58,050 In v 25., dobili ste naslednjih skelet koda, ki je bila 1086 00:52:58,050 --> 00:52:59,730 Precej enostavno spletno stran. 1087 00:52:59,730 --> 00:53:04,230 In sočno del HTML-modrih se je znižal tukaj, če imamo v notranjosti telesa 1088 00:53:04,230 --> 00:53:09,160 obrazec, ki je edinstven ID vložkov znotraj katerega je dva vhoda, enega 1089 00:53:09,160 --> 00:53:11,950 z idejo o imenu, enega z idejo gumb. 1090 00:53:11,950 --> 00:53:14,240 >> Prvi je bil tip besedila, Drugi tipa oddate. 1091 00:53:14,240 --> 00:53:16,930 In tako smo vam dali, pravzaprav več sestavine, kot bi bilo treba, samo zato, 1092 00:53:16,930 --> 00:53:19,230 vidva imela možnosti, s katerimi za rešitev tega problema. 1093 00:53:19,230 --> 00:53:21,130 Vi ne nujno potrebujejo vse te ID-jev. 1094 00:53:21,130 --> 00:53:23,580 Ampak to vam omogoča, da reševanje je na različne načine. 1095 00:53:23,580 --> 00:53:27,050 In na vrhu, opazili, da Namen je bil, da sproži 1096 00:53:27,050 --> 00:53:27,960 okno, kot je ta - 1097 00:53:27,960 --> 00:53:28,780 Pozdravljeni, Milo! - 1098 00:53:28,780 --> 00:53:31,270 pop up v brskalniku uporabo super preprosto, če 1099 00:53:31,270 --> 00:53:33,190 ni grda, funkcija Opozarjanje. 1100 00:53:33,190 --> 00:53:37,480 In tako je na koncu, to izvira konceptualno nekako poslušate 1101 00:53:37,480 --> 00:53:41,290 Trditve strank stranjo obrazca , Ne pa na strani strežnika, nekako 1102 00:53:41,290 --> 00:53:45,640 odziv na te trditve, ki jih oprijemalne vrednost, ki jo uporabnik natipkan 1103 00:53:45,640 --> 00:53:50,120 pa tudi na področje imenom, nato ga prikazuje v telesu opozorila. 1104 00:53:50,120 --> 00:53:53,460 >> Torej en način lahko to storite z jQuery, ki izgleda nekoliko 1105 00:53:53,460 --> 00:53:56,880 skladenjsko Zmešati na prvi. 1106 00:53:56,880 --> 00:54:00,760 To lahko storite s čisto DOM kode - document.getelement po ID. 1107 00:54:00,760 --> 00:54:02,530 Vendar pa si oglejte na tej različici. 1108 00:54:02,530 --> 00:54:05,110 Imam nekaj pomembnih črte prvi. 1109 00:54:05,110 --> 00:54:09,460 Torej ena, imamo to vrstico, ki je identična, kar ste lahko videli 1110 00:54:09,460 --> 00:54:13,830 leta, verjamem, form2.html iz razreda v 9. tednu. 1111 00:54:13,830 --> 00:54:16,960 In to je samo rekel, izvršitev Naslednja koda, ko 1112 00:54:16,960 --> 00:54:18,430 Dokument je pripravljen. 1113 00:54:18,430 --> 00:54:21,770 Ker je to pomembno le zato, ker HTML strani so prebrali na vrh 1114 00:54:21,770 --> 00:54:23,280 spodaj, z leve proti desni. 1115 00:54:23,280 --> 00:54:27,910 >> In zato, če boste poskušali narediti nekaj v kodi sem, da bi nekaj DOM 1116 00:54:27,910 --> 00:54:31,560 element, nekaj HTML tag, ki je navzdol tukaj, ste to počeli prezgodaj, 1117 00:54:31,560 --> 00:54:34,220 ker to sploh ni prebrali v spomin. 1118 00:54:34,220 --> 00:54:37,740 Torej z besedami, to document.ready linije, smo govorili 1119 00:54:37,740 --> 00:54:39,040 Tukaj je del kode, brskalnik. 1120 00:54:39,040 --> 00:54:42,440 Ampak ne izvrši, dokler ta v celoti Dokument je pripravljen, da je DOM 1121 00:54:42,440 --> 00:54:44,320 obstaja drevo v spomin. 1122 00:54:44,320 --> 00:54:47,110 Ta je malo bolj enostavno, če skladenjsko 1123 00:54:47,110 --> 00:54:51,890 malo drugačen, kje sem rekel, grab HTML element, katere edinstvena 1124 00:54:51,890 --> 00:54:53,560 identifikator vhodi. 1125 00:54:53,560 --> 00:54:56,220 To je tisto, kar hash tag označuje, enolični ID. 1126 00:54:56,220 --> 00:54:58,070 In potem bom poklical. Oddajte. 1127 00:54:58,070 --> 00:55:01,660 >> Torej. Submit tukaj je funkcija, drugače znana metoda, ki je 1128 00:55:01,660 --> 00:55:05,850 Notranjost objekta na levem strani pa, da nisem izpostavil. 1129 00:55:05,850 --> 00:55:08,990 Torej, če mislite vhodov kot predmet v spomin - in res je. 1130 00:55:08,990 --> 00:55:10,440 To je vozlišče v drevesu - 1131 00:55:10,440 --> 00:55:16,580 . Submit sredstva, kadar je ta oblika z predloži ta ID, izvršiti 1132 00:55:16,580 --> 00:55:17,700 Naslednja koda. 1133 00:55:17,700 --> 00:55:20,290 Ni mi mar, kaj ime Funkcija bom izvršitve. 1134 00:55:20,290 --> 00:55:23,760 Torej, tukaj sem z uporabo, kot prej, kar je imenovano funkcijo lambda ali 1135 00:55:23,760 --> 00:55:24,720 anonimni funkcija. 1136 00:55:24,720 --> 00:55:27,640 To sploh ni razumsko Zanimivo, razen da nima imena, 1137 00:55:27,640 --> 00:55:30,220 kar je v redu, če ste le kdaj ga pokličete enkrat. 1138 00:55:30,220 --> 00:55:34,490 In tam notri sem dejansko ročaj predložitev obrazca. 1139 00:55:34,490 --> 00:55:36,810 Sem najprej razglasi spremenljivko imenovano vrednost. 1140 00:55:36,810 --> 00:55:40,610 In kaj potem je učinek tega izpostavil del tu? 1141 00:55:40,610 --> 00:55:44,755 Kaj naj bi to storili na visoki ravni za mene? 1142 00:55:44,755 --> 00:55:48,539 >> PUBLIKA: To dobi vrednost, ki Uporabnik ni storil v HTML spodaj. 1143 00:55:48,539 --> 00:55:50,920 To postane ta ID in potem ugotovi vrednost njo. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. Malan: Točno tako. 1145 00:55:51,590 --> 00:55:54,300 To zagrabi vozlišče, katere edinstvena Identifikacijska oznaka je ime. 1146 00:55:54,300 --> 00:55:56,900 Da dobi vrednost v njem, ki je verjetno, kaj uporabnik 1147 00:55:56,900 --> 00:55:58,190 njega ali sebe tipkal. 1148 00:55:58,190 --> 00:56:01,020 In potem ga shrani da v spremenljivka se imenuje vrednost. 1149 00:56:01,020 --> 00:56:03,720 Kot prahi, bi lahko imeli tudi to naredil malo drugače. 1150 00:56:03,720 --> 00:56:09,250 Popolnoma sprejemljiva nečesa laž var vrednost dobi 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 In to je razlog, zakaj je malo dolgočasno, da ne uporabljajo jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Ime". Vrednost. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Torej povsem sprejemljiv. 1157 00:56:19,620 --> 00:56:22,770 Različnih načinov, da to storijo. jQuery samo kaže, da je malo bolj jedrnat in 1158 00:56:22,770 --> 00:56:25,230 vsekakor bolj priljubljena med programerji. 1159 00:56:25,230 --> 00:56:27,590 >> Zdaj delam malo zdrave pameti preveri, ker v problemu 1160 00:56:27,590 --> 00:56:30,820 Izjava smo izrecno rekel, če Uporabnik še ni tipkal njegovo ali njeno 1161 00:56:30,820 --> 00:56:32,580 ime, ne kažejo opozorila. 1162 00:56:32,580 --> 00:56:35,390 Vendar pa lahko preverite, da jih samo preverjanje za prazen niz za 1163 00:56:35,390 --> 00:56:37,850 quote-konec citata, če obstaja nič, dejansko obstaja. 1164 00:56:37,850 --> 00:56:40,880 Ampak, če to ni enako citatom-konec citata, Želim poklicati opozorila. 1165 00:56:40,880 --> 00:56:45,610 In zanimiv del tukaj je, da smo s pomočjo operaterja plus, ki 1166 00:56:45,610 --> 00:56:48,130 za kaj v JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Združevanje. 1168 00:56:48,740 --> 00:56:50,690 Tako da je kot PHPs dot operaterja. 1169 00:56:50,690 --> 00:56:52,820 Isto idejo, nekoliko drugačno sintakso. 1170 00:56:52,820 --> 00:56:55,280 In jaz sem samo ustvarjanje niz, ki ste videli na zaslonu strel - 1171 00:56:55,280 --> 00:56:57,750 Pozdravljeni, tako in tako. 1172 00:56:57,750 --> 00:56:59,200 >> In potem detajl je to. 1173 00:56:59,200 --> 00:57:04,970 Zakaj se vrnem lažno notranjost te anonimno funkcijo? 1174 00:57:04,970 --> 00:57:07,420 >> PUBLIKA: Ni vrednost. 1175 00:57:07,420 --> 00:57:09,380 Si ga v obliki. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 To samo pove, če je vrednost ni enako prazno, potem to storite. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Tam je bil prazen, v tej trditvi. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. Malan: OK. 1181 00:57:21,170 --> 00:57:21,640 Previdno, čeprav. 1182 00:57:21,640 --> 00:57:22,830 Tam je nihče drug tukaj. 1183 00:57:22,830 --> 00:57:25,510 In da vrnitev false je zunaj o, če se razmere. 1184 00:57:25,510 --> 00:57:29,470 Torej je to poudarjeno črto, vrne false, izvaja ne glede na to, kaj, ko 1185 00:57:29,470 --> 00:57:32,310 Obrazec je predloženi. 1186 00:57:32,310 --> 00:57:36,810 Kaj se vračajo napačne notranjosti tega obravnavo dogodkov, kot se temu reče, 1187 00:57:36,810 --> 00:57:38,450 zadevnega dogodka da oddajo? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> PUBLIKA: Ker je Samo se zgodi enkrat. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. Malan: Samo se zgodi enkrat. 1191 00:57:45,320 --> 00:57:46,821 Ne povsem. 1192 00:57:46,821 --> 00:57:47,292 Ja? 1193 00:57:47,292 --> 00:57:50,589 >> PUBLIKA: To preprečuje, da bi v obliki iz predložitev privzeto vedenje, 1194 00:57:50,589 --> 00:57:52,480 ki bi se osvežitvi strani. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. Malan: Točno tako. 1196 00:57:53,110 --> 00:57:56,490 Torej sem preobremenitve izraz predloži tukaj, saj pravim, oblika 1197 00:57:56,490 --> 00:57:57,670 bile predložene. 1198 00:57:57,670 --> 00:58:02,240 Toda, kot vam predlagamo, da je dejansko ni bili predloženi v pravem HTTP način. 1199 00:58:02,240 --> 00:58:06,870 Ko kliknete Pošlji, saj naše onSubmit trener, mi prekriža 1200 00:58:06,870 --> 00:58:09,040 da oddajo obrazec tako rekoč. 1201 00:58:09,040 --> 00:58:11,290 Mi smo potem počne naša stvar s kodo JavaScript. 1202 00:58:11,290 --> 00:58:14,070 Ampak jaz sem namenoma vrača false, ker tisto, kar ne želim, da se zgodi 1203 00:58:14,070 --> 00:58:18,430 Delček sekunde kasneje je za celotno obliko Sam je treba predložiti na spletu 1204 00:58:18,430 --> 00:58:22,800 Strežnik s ključnimi parov vrednosti s spreminjanjem URL, da bo nekaj podobnega 1205 00:58:22,800 --> 00:58:26,180 q = mačke ali karkoli smo storili, na primer, v razredu. 1206 00:58:26,180 --> 00:58:29,640 Ne želim, da se to zgodi, ker ni strežnika poslušanje za to 1207 00:58:29,640 --> 00:58:30,690 Obrazec za oddajo. 1208 00:58:30,690 --> 00:58:32,320 To je povsem storiti v JavaScript kodo. 1209 00:58:32,320 --> 00:58:35,760 In zato nisem imel niti Akcijski atribut na mojem obliki, ker sem 1210 00:58:35,760 --> 00:58:38,870 Ne nameravam za to, da kdaj šel na strežnik. 1211 00:58:38,870 --> 00:58:40,780 >> Torej, to je pa predloženi. 1212 00:58:40,780 --> 00:58:44,340 Ampak mi prekriža ta obrazec predložitev in preprečevanje privzeto 1213 00:58:44,340 --> 00:58:47,477 Vedenje, ki je dejansko iti vse do strežnika. 1214 00:58:47,477 --> 00:58:48,730 >> PUBLIKA: Tako da držimo odjemalsko. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. Malan: Vodenje je client-side. 1216 00:58:49,780 --> 00:58:51,030 Točno tako. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Next up je bil moj oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB Bowden: OK. 1221 00:59:00,430 --> 00:59:04,990 Torej, to Prvo vprašanje je bilo na splošno grobo za ljudi. 1222 00:59:04,990 --> 00:59:07,270 Čeprav kasneje tisti šel bolje. 1223 00:59:07,270 --> 00:59:12,260 Torej bi morali izbrati pravilen podatkov Vrste za oba stolpcev. 1224 00:59:12,260 --> 00:59:17,750 In oboje imajo nekateri stvari o njih, ki 1225 00:59:17,750 --> 00:59:20,620 da izbira depresijo. 1226 00:59:20,620 --> 00:59:24,430 Torej int ni veljavna tip za številko. 1227 00:59:24,430 --> 00:59:29,410 Razlog je 12-mestna račun Številka, int ni dovolj velika, da 1228 00:59:29,410 --> 00:59:31,070 shranjevanje celotnih številk. 1229 00:59:31,070 --> 00:59:36,570 Torej bi veljavna izbira je velika int če se zgodi, da to veš. 1230 00:59:36,570 --> 00:59:42,090 Druga izbira bi lahko bila Polje char dolžine 12. 1231 00:59:42,090 --> 00:59:44,560 Torej bi enega od tistih, ki je delal. 1232 00:59:44,560 --> 00:59:46,100 Int ne bi. 1233 00:59:46,100 --> 00:59:50,170 >> Zdaj, ravnotežje, pomislite na pset7. 1234 00:59:50,170 --> 00:59:59,540 Zato smo se uporabljajo izrecno decimalno za shranjevanje vrednosti delnic ali - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID J. Malan: Gotovina. 1236 01:00:00,550 --> 01:00:01,060 >> ROB Bowden: Gotovina. 1237 01:00:01,060 --> 01:00:05,710 Uporabili smo decimalno za shranjevanje količino denar, ki trenutno ima uporabnik. 1238 01:00:05,710 --> 01:00:10,950 Torej razlog, da smo to, da je ker je, ne pozabite, plava. 1239 01:00:10,950 --> 01:00:12,480 Tam je s plavajočo vejico v natančnosti. 1240 01:00:12,480 --> 01:00:18,200 To ni mogoče natančno shranite denar vrednote, kot smo želeli tukaj. 1241 01:00:18,200 --> 01:00:23,630 Torej decimalno lahko natančno trgovina nekaj, recimo, na dve decimalni mesti. 1242 01:00:23,630 --> 01:00:27,630 Zato ravnovesje, smo ga želeli biti decimalno in ne plavajo. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. Malan: In tudi, preveč, čeprav to bi lahko bil pameten v drugi 1244 01:00:30,230 --> 01:00:32,760 konteksti, da razmišljajo, morda je to je priložnost za notr. 1245 01:00:32,760 --> 01:00:34,420 Jaz bom samo slediti stvari v penijev. 1246 01:00:34,420 --> 01:00:38,670 Ker smo eksplicitno pokazala privzeto vrednost pa 100,00, da 1247 01:00:38,670 --> 01:00:40,380 pomeni, da lahko samo int. 1248 01:00:40,380 --> 01:00:45,310 In še ena subtilnosti tudi s številom je bila, da ni bilo mišljeno 1249 01:00:45,310 --> 01:00:46,180 da je trik vprašanje. 1250 01:00:46,180 --> 01:00:49,860 Vendar pa opozarjajo, da int v MySQL, kot v C, vsaj 1251 01:00:49,860 --> 01:00:51,440 aparat, je 32-bitni. 1252 01:00:51,440 --> 01:00:53,960 In četudi vam ne pričakujejo, da točno vedeli, koliko cifer, da 1253 01:00:53,960 --> 01:00:56,910 sredstvo, se spomnim, da je največje število lahko predstavljajo potencialno 1254 01:00:56,910 --> 01:01:00,710 s 32-bitno število je približno kaj? 1255 01:01:00,710 --> 01:01:02,760 >> Kaj več pa smo vedno rekli? 1256 01:01:02,760 --> 01:01:04,530 2 do 32, kar je tisto, kar v grobem? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Ne boste morali natančno vedeti. 1259 01:01:08,780 --> 01:01:10,580 Ampak v grobem je v pomoč pri življenju. 1260 01:01:10,580 --> 01:01:12,200 To je približno 4 milijarde. 1261 01:01:12,200 --> 01:01:14,430 Zato smo rekli, da nekajkrat. 1262 01:01:14,430 --> 01:01:16,360 Vem, da sem rekel, da so nekajkrat. 1263 01:01:16,360 --> 01:01:17,670 In to je približno 4 milijarde. 1264 01:01:17,670 --> 01:01:19,710 In to je dobro pravilo palca vedeti. 1265 01:01:19,710 --> 01:01:21,880 Če imate 8 bitov, 256 je čarobno število. 1266 01:01:21,880 --> 01:01:24,160 Če imate 32 bitov, 4 milijard gor ali dol. 1267 01:01:24,160 --> 01:01:27,140 Torej, če si zapišite 4000000000, boste videli, da je to manj kot mestno 1268 01:01:27,140 --> 01:01:30,970 12, kar pomeni, da je očitno ni Dovolj izraznost, da zajame 1269 01:01:30,970 --> 01:01:34,220 Številka 12-mestna račun. 1270 01:01:34,220 --> 01:01:34,940 >> ROB Bowden: OK. 1271 01:01:34,940 --> 01:01:38,520 Torej, ostale pa so šli bolje. 1272 01:01:38,520 --> 01:01:40,900 Torej, predvidevam, da je banka nalaga 20 $ Mesečno 1273 01:01:40,900 --> 01:01:42,400 pristojbina za vzdrževanje na vse račune. 1274 01:01:42,400 --> 01:01:45,506 S tem, kar SQL poizvedb lahko banka odšteti 20 $ od vsakega števila, čeprav 1275 01:01:45,506 --> 01:01:47,520 ima za posledico nekaj negativnih bilancah? 1276 01:01:47,520 --> 01:01:50,380 Torej v bistvu, obstajajo štiri Glavne vrste vprašanj - 1277 01:01:50,380 --> 01:01:52,840 vstaviti, izberite, posodabljanje in brisanje. 1278 01:01:52,840 --> 01:01:56,080 Torej, kaj mislimo, da smo bo tu uporabo? 1279 01:01:56,080 --> 01:01:57,000 Posodobiti. 1280 01:01:57,000 --> 01:01:58,260 >> Torej, kaj si poglejmo. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Tako da tukaj smo posodabljanje. 1283 01:02:05,870 --> 01:02:09,900 Kaj namizni smo posodabljanje računov? 1284 01:02:09,900 --> 01:02:11,670 Tako posodabljanje računov. 1285 01:02:11,670 --> 01:02:15,390 In potem sintaksa pove, kaj v računovodskih izkazih smo posodabljanje? 1286 01:02:15,390 --> 01:02:19,520 No, mi smo določanju ravnotežja, ki je enak Sedanja vrednost ravnotežja minus 20. 1287 01:02:19,520 --> 01:02:22,860 Torej bo to posodobi vse vrstice računov, odštevanje 1288 01:02:22,860 --> 01:02:26,250 20 $ iz ravnotežja. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. Malan: pogosta napaka tukaj, čeprav smo včasih ga odpustila, 1290 01:02:29,260 --> 01:02:32,990 je bil dejansko PHP kodo tukaj kliče funkcijo poizvedbe ali dajanje 1291 01:02:32,990 --> 01:02:35,460 narekovaje vse, kar ni treba biti tam. 1292 01:02:35,460 --> 01:02:39,780 >> ROB Bowden: Ne pozabite, da je MySQL samostojen jezik iz PHP. 1293 01:02:39,780 --> 01:02:42,410 Se zgodi, da se pisanje MySQL v PHP. 1294 01:02:42,410 --> 01:02:46,180 In PHP se ga pošilja prenesejo v strežnik MySQL. 1295 01:02:46,180 --> 01:02:51,120 Vendar vam ni treba PHP, da bi komunicirajo s strežnikom MySQL. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. Malan: Točno tako. 1297 01:02:51,730 --> 01:02:54,240 Torej ni spremenljivke z dolarskih znakov bi morala biti v tem kontekstu. 1298 01:02:54,240 --> 01:02:59,550 To lahko samo stori vse za matematiko znotraj same baze podatkov. 1299 01:02:59,550 --> 01:03:00,080 >> ROB Bowden: OK. 1300 01:03:00,080 --> 01:03:01,300 Torej, naslednjič. 1301 01:03:01,300 --> 01:03:02,731 Je to drugo? 1302 01:03:02,731 --> 01:03:03,210 Ja. 1303 01:03:03,210 --> 01:03:06,570 Torej s tem, kar SQL poizvedb lahko banka priklicati številke račun svojih 1304 01:03:06,570 --> 01:03:09,300 Najbogatejši kupci, tisti z tehtnice, večje od 1000? 1305 01:03:09,300 --> 01:03:13,280 Torej, kateri od štirih glavnih vrst bomo želeli tukaj? 1306 01:03:13,280 --> 01:03:14,430 Izberite. 1307 01:03:14,430 --> 01:03:16,650 Zato želimo, da izberete. 1308 01:03:16,650 --> 01:03:17,610 Kaj želimo izbrati? 1309 01:03:17,610 --> 01:03:19,380 Kaj stolpec želimo izbrati? 1310 01:03:19,380 --> 01:03:20,970 Bomo posebej želeli Za izbiro. 1311 01:03:20,970 --> 01:03:23,910 Ampak, če si rekel zvezda, smo prav tako priznala, da. 1312 01:03:23,910 --> 01:03:25,820 >> Torej, izberite številko iz kakšne tabele? 1313 01:03:25,820 --> 01:03:26,640 Računi. 1314 01:03:26,640 --> 01:03:28,370 In potem pogoj želimo? 1315 01:03:28,370 --> 01:03:30,140 Če ravnotežje večja od 1000. 1316 01:03:30,140 --> 01:03:31,720 Prav tako smo sprejeli več ali enako. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Zadnja. 1319 01:03:36,190 --> 01:03:42,940 S tem, kar SQL poizvedb lahko banka blizu, to je zbrisal vse upoštevati, da 1320 01:03:42,940 --> 01:03:44,480 je ravnotežje med 0 $? 1321 01:03:44,480 --> 01:03:47,620 Torej, kateri od štirih smo bodo želeli uporabljati? 1322 01:03:47,620 --> 01:03:48,320 Izbrisati. 1323 01:03:48,320 --> 01:03:50,180 Torej sintaksa za to? 1324 01:03:50,180 --> 01:03:51,890 Izbriši iz kakšne tabele? 1325 01:03:51,890 --> 01:03:53,550 Računi. 1326 01:03:53,550 --> 01:03:55,790 Nato pa pogoj, na katerega želimo izbrisati - 1327 01:03:55,790 --> 01:03:57,280 kadar je bilanca enaka nič. 1328 01:03:57,280 --> 01:04:03,050 Tako da izbrišete vse vrstice iz računov kjer je stanje nič. 1329 01:04:03,050 --> 01:04:04,300 Vprašanja o kateri koli od teh? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Želite na vrsti? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. Malan: Čakalna vrsta navodila. 1333 01:04:11,200 --> 01:04:17,110 Torej, v tem enem, smo vam dali nekoliko poznati strukturo, ki smo raziskali 1334 01:04:17,110 --> 01:04:20,450 bit v razredu skupaj z konstruktov, ki je podatke 1335 01:04:20,450 --> 01:04:21,910 povezane v duhu struktura. 1336 01:04:21,910 --> 01:04:24,670 Razlika čeprav s čakalno vrsto, je da smo morali nekako spomnim se, kdo 1337 01:04:24,670 --> 01:04:27,900 je na sprednji vrsti, v veliki del, tako da sva lahko naredila več 1338 01:04:27,900 --> 01:04:30,530 učinkovita uporaba spomin, vsaj Če smo s pomočjo niz. 1339 01:04:30,530 --> 01:04:35,460 >> Ker odpoklic, če imamo niz, če na primer, to je sprednji del 1340 01:04:35,460 --> 01:04:38,470 čakalne vrste, če dobim v čakalni vrsti tukaj, in potem nekdo dobi v skladu 1341 01:04:38,470 --> 01:04:42,710 Za mano, za mano, za mano, in ena oseba prekorači mejo, si 1342 01:04:42,710 --> 01:04:45,930 lahko, kot smo videli nekaj naših človeških prostovoljci v razredu, imajo vsi 1343 01:04:45,930 --> 01:04:47,100 premik v to smer. 1344 01:04:47,100 --> 01:04:50,880 Ampak na splošno, saj je vsakdo storiti nekaj, kar ni najbolje izkoristiti čas 1345 01:04:50,880 --> 01:04:54,600 v programu, saj to pomeni, da algoritem teče v tisto, kar 1346 01:04:54,600 --> 01:04:56,520 asimptotska čas teče? 1347 01:04:56,520 --> 01:04:57,420 To je linearna. 1348 01:04:57,420 --> 01:04:59,600 >> In jaz se počutim kot, da je nekako neumno. 1349 01:04:59,600 --> 01:05:02,890 Če je naslednja oseba v vrsti je naslednja Oseba, ki bi moral iti v 1350 01:05:02,890 --> 01:05:04,660 trgovina, nimajo vsi ne skupaj premakniti. 1351 01:05:04,660 --> 01:05:08,200 Pusti, da oseba, ki se pulili ko pride čas, na primer. 1352 01:05:08,200 --> 01:05:09,870 Tako bomo lahko prihranili nekaj časa tam. 1353 01:05:09,870 --> 01:05:14,840 In tako za to, da čeprav je, da sredstva da vodja čakalne vrste ali 1354 01:05:14,840 --> 01:05:18,060 Sprednji del vrsti bo postopoma premakniti globlje in globlje 1355 01:05:18,060 --> 01:05:23,340 v niz in na koncu morda dejansko ovijte okoli, če bomo s pomočjo 1356 01:05:23,340 --> 01:05:25,790 matrika za shranjevanje ljudi v tej vrsti. 1357 01:05:25,790 --> 01:05:28,390 Tako da lahko skoraj zamislite matrika kot krožni podatkov 1358 01:05:28,390 --> 01:05:29,880 struktura v tem smislu. 1359 01:05:29,880 --> 01:05:33,970 >> Tako da boste nekako morali slediti velikost njej ali res konec vsega 1360 01:05:33,970 --> 01:05:36,250 in nato, če je začetek tega. 1361 01:05:36,250 --> 01:05:39,490 Zato predlagamo, da ga razglasi ena taka vrsta, kliče 1362 01:05:39,490 --> 01:05:41,330 da q, samo eno črko. 1363 01:05:41,330 --> 01:05:44,570 Potem smo predlagali, da se prednja inicializiran na nič in da je velikost 1364 01:05:44,570 --> 01:05:45,470 inicializirati na nič. 1365 01:05:45,470 --> 01:05:47,770 >> Torej, zdaj, ni nič notranjost navedene vrste. 1366 01:05:47,770 --> 01:05:50,910 In vas prosimo, da izpolnite Izvajanje enqueue spodaj 1367 01:05:50,910 --> 01:05:55,250 tako, da je funkcija dodaja n na Konec q in vrne true. 1368 01:05:55,250 --> 01:05:58,690 Ampak, če q je poln ali negativen, funkcija bi morala namesto tega vrne false. 1369 01:05:58,690 --> 01:06:01,060 In vam dal nekaj predpostavk. 1370 01:06:01,060 --> 01:06:04,320 Ampak oni niso res funkcionalno pomembno, samo da bool obstaja, 1371 01:06:04,320 --> 01:06:06,690 ker je tehnično bool ne obstajajo v C, razen če vsebujejo 1372 01:06:06,690 --> 01:06:07,310 nekatere header datoteke. 1373 01:06:07,310 --> 01:06:09,350 Tako da je bil le poskrbite, da niso bile je to trik 1374 01:06:09,350 --> 01:06:10,940 Vprašanje takšne stvari. 1375 01:06:10,940 --> 01:06:16,280 >> Torej enqueue, smo predlagali v vzorcu rešitev za izvedbo, kot sledi. 1376 01:06:16,280 --> 01:06:20,420 Ena, moramo najprej preveriti, enostavnost, nizko viseče sadje je. 1377 01:06:20,420 --> 01:06:23,820 Če čakalna vrsta je polna ali številka, ki poskušate vstaviti manj 1378 01:06:23,820 --> 01:06:26,380 od nič, kar smo rekli v opredelitev problema smeli 1379 01:06:26,380 --> 01:06:30,320 ni dovoljeno, saj smo le želeli ne-negativne vrednosti, potem morate 1380 01:06:30,320 --> 01:06:31,640 pravkar vrnil false takoj. 1381 01:06:31,640 --> 01:06:33,820 Torej nekaj relativno enostavno Preverjanje napak. 1382 01:06:33,820 --> 01:06:38,720 Če temu želite dodati, da je dejanska številko, boste morali narediti malo 1383 01:06:38,720 --> 01:06:39,440 razmišljal sem. 1384 01:06:39,440 --> 01:06:41,330 In to je, če je malo siten duševno, ker moraš 1385 01:06:41,330 --> 01:06:43,000 ugotovimo, kako ravnati ovijajočega. 1386 01:06:43,000 --> 01:06:46,870 >> Ampak kalčki ideje tukaj, da je v zanimanje za nas je, da obdajajoča 1387 01:06:46,870 --> 01:06:51,480 pogosto pomeni modularna aritmetika in mod operater odstotkov strani, 1388 01:06:51,480 --> 01:06:55,140 kjer lahko greš z višjo vrednostjo nazaj na nič, nato pa ena in dva, in 1389 01:06:55,140 --> 01:06:58,650 tri in nato nazaj okoli ničle, ena in dva in tri in tako naprej 1390 01:06:58,650 --> 01:06:59,380 znova in znova. 1391 01:06:59,380 --> 01:07:02,880 Torej način predlagamo to početje je da nam želijo indeks v 1392 01:07:02,880 --> 01:07:05,850 Niz se imenuje številke, kjer naša cela laž. 1393 01:07:05,850 --> 01:07:10,740 Ampak do tja, smo najprej želeli narediti ne glede na velikost vrsti je vendar 1394 01:07:10,740 --> 01:07:14,080 nato dodamo, da karkoli Sprednji del seznama je. 1395 01:07:14,080 --> 01:07:17,880 In učinek tega je, da nas je na Pravica položaj v čakalni vrsti in 1396 01:07:17,880 --> 01:07:20,970 Ne domnevamo, da je prva oseba, ki je v skladu je na začetku, ki je ali 1397 01:07:20,970 --> 01:07:24,130 ona bi popolnoma lahko, če bomo so bile tudi premik vsakogar. 1398 01:07:24,130 --> 01:07:26,710 Vendar smo šele ustvarja delo za nas, če smo 1399 01:07:26,710 --> 01:07:27,800 da je zlasti pot. 1400 01:07:27,800 --> 01:07:29,330 >> Tako smo lahko, da ostane razmeroma preprost. 1401 01:07:29,330 --> 01:07:32,180 Mi se moramo, da smo pravkar dodal int v čakalno vrsto. 1402 01:07:32,180 --> 01:07:35,850 In potem smo pravkar vrnil res. 1403 01:07:35,850 --> 01:07:38,560 Medtem, v dequeue, smo povprašali da narediš naslednje. 1404 01:07:38,560 --> 01:07:42,260 Jo izvajati na tak način, da dequeues, da se odstranjuje in donosi, 1405 01:07:42,260 --> 01:07:44,190 int na sprednji vrsti. 1406 01:07:44,190 --> 01:07:46,410 Če želite odstraniti int, zadošča da pozabi. 1407 01:07:46,410 --> 01:07:47,650 Vam ni treba, da preglasijo svojo bit. 1408 01:07:47,650 --> 01:07:48,820 Torej je še vedno dejansko tam. 1409 01:07:48,820 --> 01:07:51,930 Tako kot podatkov na trdem disku, smo samo ignorira dejstvo, 1410 01:07:51,930 --> 01:07:52,970 da je zdaj tam. 1411 01:07:52,970 --> 01:07:55,520 In če je q prazna, bi morali namesto da se vrnete negativno 1. 1412 01:07:55,520 --> 01:07:56,750 Torej, to čuti samovoljno. 1413 01:07:56,750 --> 01:08:01,640 Zakaj donosnost negativna 1 namesto false? 1414 01:08:01,640 --> 01:08:02,620 Ja. 1415 01:08:02,620 --> 01:08:05,070 >> PUBLIKA: Q shranjevanje pozitivne vrednosti. 1416 01:08:05,070 --> 01:08:10,950 Ker ste le shraniti pozitivne vrednote V q, negativen je napaka. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. Malan: OK, res. 1418 01:08:11,510 --> 01:08:14,850 Zato, ker smo le shranjevanje pozitiven vrednosti ali nič, potem je to v redu, da 1419 01:08:14,850 --> 01:08:18,050 vrne negativno vrednost kot kontrolnim vrednost, posebno oznako. 1420 01:08:18,050 --> 01:08:21,630 Ampak ste reportaža zgodovine tam, ker je razlog, da smo samo 1421 01:08:21,630 --> 01:08:25,890 vračanje niso negativne vrednosti je zato, ker želimo, da 1422 01:08:25,890 --> 01:08:27,670 imajo Sentinel vrednost. 1423 01:08:27,670 --> 01:08:32,617 Torej, še posebej, zakaj ne samo vrne false v primeru napak? 1424 01:08:32,617 --> 01:08:33,099 Ja. 1425 01:08:33,099 --> 01:08:35,510 >> PUBLIKA: ste ni uspelo vrne celo število. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. Malan: Točno tako. 1427 01:08:36,630 --> 01:08:38,569 In to je, če C dobi zelo omejevalen. 1428 01:08:38,569 --> 01:08:40,590 Če pravite, da boste vrne int, imaš 1429 01:08:40,590 --> 01:08:41,279 , da se vrnete int. 1430 01:08:41,279 --> 01:08:43,689 Ne morete dobiti fancy in začetek vračanja int ali float ali 1431 01:08:43,689 --> 01:08:45,040 niz ali nekaj takega. 1432 01:08:45,040 --> 01:08:49,370 Zdaj, medtem, JavaScript ter PHP in nekatere druge jezike lahko dejansko 1433 01:08:49,370 --> 01:08:51,310 ste se vračajo drugačni Vrste vrednosti. 1434 01:08:51,310 --> 01:08:54,819 In to dejansko lahko koristno, če boste mogli vrniti pozitivne Ints, ničle, 1435 01:08:54,819 --> 01:08:59,439 Negativni ints, ali napačne ali null tudi, da se označi napake. 1436 01:08:59,439 --> 01:09:01,890 Ampak nimamo, da vsestranskost v C. 1437 01:09:01,890 --> 01:09:04,569 >> Torej z dequeue, kar smo Predlagamo, da storiti, je - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB Bowden: Lahko vrne false. 1440 01:09:09,830 --> 01:09:13,189 To je samo, da je lažno hash opredelijo false nič. 1441 01:09:13,189 --> 01:09:16,000 Torej, če ste vrne false, ste se vrača nič. 1442 01:09:16,000 --> 01:09:25,470 In nič je veljavna stvar v naši vrsti, ker so negativni 1 ni, če 1443 01:09:25,470 --> 01:09:27,000 false zgodilo, da se negativna 1. 1444 01:09:27,000 --> 01:09:29,972 Vendar pa ne bi smeli niti Vedeti morajo, da. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. Malan: To je zakaj nisem to rekel. 1446 01:09:32,399 --> 01:09:36,450 >> ROB Bowden: Ampak to ni res ki jih ni mogoče vrniti false. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. Malan: Seveda. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Torej dequeue, opazili smo sprejeli izniči njen argument. 1450 01:09:44,240 --> 01:09:45,479 In to zato, ker nismo gre nič noter 1451 01:09:45,479 --> 01:09:48,359 Pravkar smo želeli odstraniti element na sprednji vrsti. 1452 01:09:48,359 --> 01:09:49,819 Torej, kako bi lahko šel o tem? 1453 01:09:49,819 --> 01:09:51,290 No, najprej, dajmo Hiter pregled sanity. 1454 01:09:51,290 --> 01:09:53,350 Če velikost vrste je 0, obstaja ni treba kaj postoriti. 1455 01:09:53,350 --> 01:09:54,210 Vrni se negativna 1. 1456 01:09:54,210 --> 01:09:54,800 Končano. 1457 01:09:54,800 --> 01:09:56,340 Tako da je nekaj vrstic mojega programa. 1458 01:09:56,340 --> 01:09:58,180 Torej le štiri linije ostajajo. 1459 01:09:58,180 --> 01:10:01,310 >> Torej, tukaj sem se odločil, da pojemanje velikost. 1460 01:10:01,310 --> 01:10:04,620 In učinkovito decrementing velikost pomeni, da sem pozabljam 1461 01:10:04,620 --> 01:10:06,010 kaj je notri. 1462 01:10:06,010 --> 01:10:09,910 Ampak sem tudi posodobiti, kjer prednja številk so. 1463 01:10:09,910 --> 01:10:11,620 Torej za to, moram narediti dve stvari. 1464 01:10:11,620 --> 01:10:16,390 Najprej sem si morajo zapomniti, kaj številke je na sprednji vrsti, 1465 01:10:16,390 --> 01:10:17,860 ker moram vrniti to stvar. 1466 01:10:17,860 --> 01:10:20,910 Torej, ne želim, da pomotoma pozabil o njem in ga nato prepiše. 1467 01:10:20,910 --> 01:10:22,840 Jaz bom samo, da se spomnimo na notr. 1468 01:10:22,840 --> 01:10:27,310 >> In zdaj, hočem posodobiti q.front se q.front 1. 1469 01:10:27,310 --> 01:10:30,070 Torej, če je to prva oseba v linijo, zdaj pa želim narediti plus 1 do 1470 01:10:30,070 --> 01:10:31,930 opozoriti na naslednjo osebo v liniji. 1471 01:10:31,930 --> 01:10:33,420 Ampak moram ravnati, da ovijajočega. 1472 01:10:33,420 --> 01:10:37,270 In če zmogljivost je globalna konstanta, da se dogaja, da mi dovolite, da poskrbite, da 1473 01:10:37,270 --> 01:10:41,140 kot sem že opozarjajo na zelo zadnji osebo v linija, bo operacija modulo prinese 1474 01:10:41,140 --> 01:10:43,840 me nazaj na ničlo na sprednji čakalne vrste. 1475 01:10:43,840 --> 01:10:46,050 In da upravlja z ovitim tukaj. 1476 01:10:46,050 --> 01:10:48,950 In potem se lotim, da se vrnete n. 1477 01:10:48,950 --> 01:10:51,530 >> Zdaj pa, strogo gledano, nisem morali razglasiti n. 1478 01:10:51,530 --> 01:10:53,880 Nisem imel, da ga zgrabi in ga shranite začasno, ker je vrednost 1479 01:10:53,880 --> 01:10:54,740 še vedno tam. 1480 01:10:54,740 --> 01:10:57,490 Torej, jaz bi samo narediti pravo aritmetično za vrnitev nekdanjega voditelja 1481 01:10:57,490 --> 01:10:58,450 čakalne vrste. 1482 01:10:58,450 --> 01:11:01,850 Vendar sem čutil, da je to bolj jasno dejansko zgrabi int, ga 1483 01:11:01,850 --> 01:11:04,320 v N, in se nato vrnite, da zaradi večje preglednosti, ampak 1484 01:11:04,320 --> 01:11:05,735 ni nujno potrebno. 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 Oni so vsi izgovorljivo v moji glavi. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB Bowden: Torej, prvo vprašanje je binarno drevo problem. 1490 01:11:19,110 --> 01:11:22,140 Torej, prvo vprašanje je, da smo saj te številke. 1491 01:11:22,140 --> 01:11:27,160 In želimo, da jih nekako vstavite v ta vozlišča, tako da je 1492 01:11:27,160 --> 01:11:30,110 veljavno binarno iskalno drevo. 1493 01:11:30,110 --> 01:11:36,260 Torej ena stvar, da se spomniš o binarna iskalna drevesa je, da to ni 1494 01:11:36,260 --> 01:11:39,800 le da stvar na levi je manj in stvar 1495 01:11:39,800 --> 01:11:41,120 Pravica je večja. 1496 01:11:41,120 --> 01:11:44,580 To mora biti, da je celotno drevo Levi manj, in drevesne 1497 01:11:44,580 --> 01:11:45,740 na desni je večja. 1498 01:11:45,740 --> 01:11:55,260 >> Torej, če bi dal 34 tukaj na vrhu, in nato Sem dal 20 tukaj, tako da je veljavna, tako 1499 01:11:55,260 --> 01:11:56,970 daleč, saj 34 do tu. 1500 01:11:56,970 --> 01:11:57,920 20 se dogaja na levi strani. 1501 01:11:57,920 --> 01:11:58,950 Tako da je manj. 1502 01:11:58,950 --> 01:12:03,640 Ampak ne morem potem dal 59 tukaj, ker čeprav 59 je na desni strani 20, 1503 01:12:03,640 --> 01:12:06,140 je še vedno na levi strani 34. 1504 01:12:06,140 --> 01:12:10,760 Torej s tem v mislih omejitev, Najlažji način za reševanje tega verjetno 1505 01:12:10,760 --> 01:12:14,330 Problem je, da se nekako od teh številk - 1506 01:12:14,330 --> 01:12:18,720 do 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 In potem vstavite tiste od leve proti desni. 1508 01:12:21,640 --> 01:12:23,390 >> Torej 20 gre tukaj. 1509 01:12:23,390 --> 01:12:24,630 34. gre tukaj. 1510 01:12:24,630 --> 01:12:25,830 36. gre tukaj. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 In tudi vi bi pogruntal z nekateri priklopom in uresničevanju, 1513 01:12:34,730 --> 01:12:38,830 Oh, počakajte, da nimajo dovolj številk to izpolnite tukaj. 1514 01:12:38,830 --> 01:12:42,170 Tako da moram reshift, kaj je moja opomba pot se bo. 1515 01:12:42,170 --> 01:12:47,490 Ampak obvestilo, da je v zadnjih treh, če berete od leve proti desni, da je v 1516 01:12:47,490 --> 01:12:48,740 naraščajočem vrstnem redu. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Torej, zdaj smo želeli opredeliti, kaj struct se bo za 1519 01:12:56,540 --> 01:12:58,300 vozlišča v drevesu. 1520 01:12:58,300 --> 01:13:02,720 Torej, kaj moramo v binarnem drevesu? 1521 01:13:02,720 --> 01:13:05,830 Torej imamo vrednostjo tipa int, tako da nekateri int vrednost. 1522 01:13:05,830 --> 01:13:07,220 Ne vem, kaj smo poklicali je v raztopini - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Moramo kazalec na levi otroka in kazalec na desni otroka. 1525 01:13:13,570 --> 01:13:17,540 Tako da se bo izgledala takole. 1526 01:13:17,540 --> 01:13:20,510 In to bo dejansko videti, preden kdaj dvojno vezan 1527 01:13:20,510 --> 01:13:25,090 Seznam stvari, tako da obvestilo - 1528 01:13:25,090 --> 01:13:27,860 Jaz bom moral, da se pomaknete vse Pot nazaj do problema 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Tako obvestilo je videti identičen temu, razen pravkar zgodilo, da pokličete te 1531 01:13:36,390 --> 01:13:38,590 različnimi imeni. 1532 01:13:38,590 --> 01:13:41,440 Še vedno imamo celo vrednost in dva kazalca. 1533 01:13:41,440 --> 01:13:44,850 To je samo, da namesto zdravila za zdravljenje kazalci, kot kaže na naslednjo stvar 1534 01:13:44,850 --> 01:13:47,955 in prejšnja stvar, smo zdravljenje Kazalci, da kažejo na levi otroka 1535 01:13:47,955 --> 01:13:49,205 in pravico otrok. 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 Tako da je naša struct node. 1539 01:13:59,650 --> 01:14:03,920 In zdaj, deluje le moramo izvajati za to prečno, ki 1540 01:14:03,920 --> 01:14:08,320 želimo iti čez drevesa, tiskanje od vrednosti drevesa v redu. 1541 01:14:08,320 --> 01:14:15,241 >> Tako je videti tukaj, bi želeli natisniti od 20, 34, 36, 52, 59 in 106. 1542 01:14:15,241 --> 01:14:17,970 Kako bomo dosegli, da je? 1543 01:14:17,970 --> 01:14:18,890 Tako da je precej podobna. 1544 01:14:18,890 --> 01:14:22,910 Če ste videli v zadnjem izpitu problem da si je želel, da natisnete 1545 01:14:22,910 --> 01:14:25,940 Celoten drevo z vejicami vmes vse, kar je bilo pravzaprav celo 1546 01:14:25,940 --> 01:14:27,320 lažje kot to. 1547 01:14:27,320 --> 01:14:30,950 Torej, tukaj je rešitev. 1548 01:14:30,950 --> 01:14:33,110 To je bilo bistveno lažje Če si to naredil rekurzivno. 1549 01:14:33,110 --> 01:14:36,650 Ne vem, če je kdo poskušal to storiti iterativno. 1550 01:14:36,650 --> 01:14:38,340 >> Toda najprej imamo osnovno zadevo. 1551 01:14:38,340 --> 01:14:39,660 Kaj pa, če korenina je nična? 1552 01:14:39,660 --> 01:14:40,610 Potem smo le, da bo vrnil. 1553 01:14:40,610 --> 01:14:42,300 Mi ne želimo natisniti ničesar. 1554 01:14:42,300 --> 01:14:45,940 Ostalo bomo za prečkanje rekurzivno navzdol. 1555 01:14:45,940 --> 01:14:48,140 Natisni celotno levo poddrevo. 1556 01:14:48,140 --> 01:14:51,440 Torej natisniti vse manj od moje trenutne vrednosti. 1557 01:14:51,440 --> 01:14:53,930 In potem bom sam natisniti. 1558 01:14:53,930 --> 01:14:57,310 In potem bom recurse navzdol my Celoten desno poddrevo, tako da je vse 1559 01:14:57,310 --> 01:14:58,810 večja od moje vrednosti. 1560 01:14:58,810 --> 01:15:03,870 In to se dogaja za tiskanje ven vse v redu. 1561 01:15:03,870 --> 01:15:05,860 Vprašanja o tem, kako to dejansko dosega to? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> PUBLIKA: Imam vprašanje na [neslišno]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB Bowden: Torej en način približuje vsaka rekurzivna problem je, da samo mislim, 1566 01:15:23,550 --> 01:15:26,275 o tem rad moraš razmišljati o vseh primerih vogalu. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Tako menijo, da želimo natisnete celotno drevo. 1569 01:15:38,110 --> 01:15:42,030 Torej, vsi se bomo osredotočili na je to predvsem vozlišče - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Rekurzivne klice, se pretvarjamo tistih, ki samo delo. 1572 01:15:47,420 --> 01:15:54,000 Torej, tukaj je ta rekurzivni klic, da Prečna, smo celo brez razmišljanja 1573 01:15:54,000 --> 01:15:58,640 o tem, samo prečkajo levo tri, si predstavljajte, da že natisne 20 1574 01:15:58,640 --> 01:16:00,730 in 34 za nas. 1575 01:16:00,730 --> 01:16:03,350 In potem, ko smo na koncu rekurzivno pokličite prečnega nosilca na 1576 01:16:03,350 --> 01:16:07,890 Dobro, da bo lahko pravilno natisnili 52, 59 in 106 za nas. 1577 01:16:07,890 --> 01:16:13,620 >> Zato ker to lahko natisnete 20, 34, in drugi lahko natisne 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 vse, kar potrebujemo, da bi lahko storili, je print Sebe v sredini tega. 1579 01:16:17,180 --> 01:16:21,250 Torej izpisal vse pred nami. 1580 01:16:21,250 --> 01:16:27,710 Natisni Sebe, tako da se natisne trenutni vozel 36, redno printf, nato pa 1581 01:16:27,710 --> 01:16:31,170 natisniti vse nas. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. Malan: To je, če rekurzija postane res lepa. 1583 01:16:32,730 --> 01:16:36,270 To je to neverjetno preskok vere, kjer vam najmanjše nekaj dela. 1584 01:16:36,270 --> 01:16:38,460 In potem naj nekdo ostalo pa ostalo. 1585 01:16:38,460 --> 01:16:40,180 In da je nekdo drug je, ironično, ti. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Torej za resne piškote točk, če pomaknete navzgor na vprašanja - 1588 01:16:48,360 --> 01:16:50,530 >> ROB Bowden: Na vprašanja? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. Malan: In dol malo številke, ali kdo ve, kje 1590 01:16:53,490 --> 01:16:55,190 te številke prišel? 1591 01:16:55,190 --> 01:16:56,610 >> ROB Bowden: Imam dobesedno nima pojma. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. Malan: Pojavljajo v celotnem kvizu. 1593 01:16:59,794 --> 01:17:01,150 >> PUBLIKA: Ali so iste številke? 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. Malan: Te številke. 1595 01:17:01,910 --> 01:17:03,260 Malo Pirh. 1596 01:17:03,260 --> 01:17:08,100 Torej za tiste, ki ste gledal na spletu domov, če nam lahko poveste, prek e-pošte 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net kaj pomen od teh ponavljajočih šest številke 1598 01:17:12,680 --> 01:17:18,560 v celotnem kvizu 1, vas bomo tuš z neverjetno pozornost na končni 1599 01:17:18,560 --> 01:17:21,610 Predavanje in stres žogo. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Lepo, subtilna. 1602 01:17:27,790 --> 01:17:29,570 >> ROB Bowden: Poslednje vprašanja približno nič na kvizu? 1603 01:17:29,570 --> 01:17:32,608