1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> David J. Malan: U redu. 3 00:00:12,900 --> 00:00:16,790 Dakle, dobro došli u prvi CS50 obdukcija za kviz. 4 00:00:16,790 --> 00:00:18,340 Mislili smo da bi inaugurirati ta tradicija i ove godine. 5 00:00:18,340 --> 00:00:20,960 A to će biti prilika šetati 6 00:00:20,960 --> 00:00:22,220 rješenja na kvizu. 7 00:00:22,220 --> 00:00:26,160 I mi ćemo ubrzati ili usporiti temelji o interesu onih koji ovdje. 8 00:00:26,160 --> 00:00:29,730 >> Dakle, vjerojatno ste ovdje jer ste zanima kako ste mogli imati ili 9 00:00:29,730 --> 00:00:31,170 trebao imati odgovore na neka od ovih problema. 10 00:00:31,170 --> 00:00:33,300 Pa zašto ne bismo pogledati u ovom poglavlju prvo? 11 00:00:33,300 --> 00:00:34,450 Dakle sve konce. 12 00:00:34,450 --> 00:00:37,600 To vam je dao tri različite verzije programa koji je, u konačnici, 13 00:00:37,600 --> 00:00:39,650 značilo da se niz od korisnika. 14 00:00:39,650 --> 00:00:42,530 Hoće li ili ne to je da je lijeva na vama je da odredite. 15 00:00:42,530 --> 00:00:45,150 >> I pitali smo u pitanju 0, Pretpostavljam da je verzija 1 je 16 00:00:45,150 --> 00:00:46,400 sastavio i pogubljen. 17 00:00:46,400 --> 00:00:48,860 Zašto bi program SegFault? 18 00:00:48,860 --> 00:00:51,150 Na prvi pogled, bilo koji sugestija zašto? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Da. 21 00:00:54,489 --> 00:00:59,260 >> Ivanković: Pa Sjećam Vidjevši to u natrag primjer gledajući 22 00:00:59,260 --> 00:01:05,506 char * s, a vidim skeniranje S i vide jer je pointer, kako 23 00:01:05,506 --> 00:01:07,971 je to utjecalo na ono što skeniraju u? 24 00:01:07,971 --> 00:01:10,940 Je to je i adresa 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 Dakle, u konačnici, izvor bilo problema je vjerojatno ide na smanjenje 28 00:01:14,830 --> 00:01:16,210 u tu varijablu s.. 29 00:01:16,210 --> 00:01:17,280 I to je doista promjenjiva. 30 00:01:17,280 --> 00:01:19,900 Tip podataka te varijable char *, što znači da će 31 00:01:19,900 --> 00:01:22,570 sadržavati adresu karaktera. 32 00:01:22,570 --> 00:01:23,850 I u tome leži uvid. 33 00:01:23,850 --> 00:01:28,330 To će sadržavati adresu lik ili, općenitije, 34 00:01:28,330 --> 00:01:32,110 adresu prvog znaka u Cijeli blok znakova. 35 00:01:32,110 --> 00:01:36,680 >> No, kvaka je u tome što je skeniranje, svrha u život je dao adresu i dao 36 00:01:36,680 --> 00:01:40,960 format koda, kao što je% s, čitanje string u komad 37 00:01:40,960 --> 00:01:42,330 memorije na toj adresi. 38 00:01:42,330 --> 00:01:46,040 No, budući da ne postoji znak jednakosti pred da zarez na prvi 39 00:01:46,040 --> 00:01:49,310 linija koda, jer mi zapravo ne izdvojiti bilo memoriju s 40 00:01:49,310 --> 00:01:53,020 malloc, jer to zapravo nije dodijeliti niz neke veličine, sve 41 00:01:53,020 --> 00:01:57,620 što radite je čitanje korisnika Tipkovnica ulaz u neke potpuna 42 00:01:57,620 --> 00:02:00,490 Vrijednost smeća, koje je s po defaultu. 43 00:02:00,490 --> 00:02:04,480 Dakle, šanse su da ćete, ako SegFault da adresa ne samo tako dogoditi 44 00:02:04,480 --> 00:02:08,009 da se vrijednost koju možete, u stvari, pišite. 45 00:02:08,009 --> 00:02:10,889 Tako loše da ne dodijeli vaša memorijska postoji. 46 00:02:10,889 --> 00:02:13,150 >> Dakle, u pitanju 1, pitali smo, Pretpostavljam da je verzija 2 je 47 00:02:13,150 --> 00:02:14,230 sastavio i pogubljen. 48 00:02:14,230 --> 00:02:15,900 Zašto bi ovaj program SegFault? 49 00:02:15,900 --> 00:02:17,990 Dakle, ovo je manje kolicima. 50 00:02:17,990 --> 00:02:21,470 I tu je zapravo samo jedan očigledan način gdje možete 51 00:02:21,470 --> 00:02:22,810 izazvati SegFault ovdje. 52 00:02:22,810 --> 00:02:23,730 I ovo je tematska. 53 00:02:23,730 --> 00:02:28,180 Svaki put smo pomoću C u memoriji, što možete učiniti kako bi potaknuli SegFault 54 00:02:28,180 --> 00:02:30,718 s verzijom 2? 55 00:02:30,718 --> 00:02:35,560 >> Ivanković: Ako koristite taj ulaz u niz koji je dulje od 49 godina 56 00:02:35,560 --> 00:02:35,975 likovi. 57 00:02:35,975 --> 00:02:37,260 >> David J. Malan: Točno. 58 00:02:37,260 --> 00:02:41,420 Svaki put kad vidim nešto fiksne duljine kada je u pitanju niz, vaš 59 00:02:41,420 --> 00:02:44,650 radar treba otići da bi to moglo biti problematično ako ne provjeravaš 60 00:02:44,650 --> 00:02:45,810 Granice niz. 61 00:02:45,810 --> 00:02:46,650 I to je problem ovdje. 62 00:02:46,650 --> 00:02:47,910 Mi još uvijek koristite scanf. 63 00:02:47,910 --> 00:02:52,200 Mi još uvijek koristite% s, što znači pokušati čitati niz od korisnika. 64 00:02:52,200 --> 00:02:56,300 To će se pročitati u sekundi, što, u ovom trenutku, je učinkovito 65 00:02:56,300 --> 00:02:58,570 adresa komad memorije ili je to ekvivalent. 66 00:02:58,570 --> 00:03:02,080 To je naziv niza znakova za pamćenje. 67 00:03:02,080 --> 00:03:07,610 >> No, upravo to, ako ste pročitali niz to je više od 49 znakova, 49 68 00:03:07,610 --> 00:03:10,440 jer vam je potrebno prostora za backslash 0, ti ćeš se prelijevati 69 00:03:10,440 --> 00:03:11,390 da tampon. 70 00:03:11,390 --> 00:03:16,410 I da možete dobiti sretan i biti u mogućnosti napisati 51. karakter, 52., 53.. 71 00:03:16,410 --> 00:03:18,560 No, u nekom trenutku, OS će reći, nema. 72 00:03:18,560 --> 00:03:21,270 To definitivno nije memorije ti si dopušteno dirati. 73 00:03:21,270 --> 00:03:23,380 A program će SegFault. 74 00:03:23,380 --> 00:03:26,650 >> Dakle tamo, heuristika trebalo biti Vrijeme imaš fiksnu duljinu, imate 75 00:03:26,650 --> 00:03:30,150 kako bi bili sigurni da ste checking duljinu bez obzira na to je li pokušavate 76 00:03:30,150 --> 00:03:31,090 čitati u nju. 77 00:03:31,090 --> 00:03:35,110 >> Ivanković: Pa kako riješiti taj, što bi moglo imali provjeru zapravo izjavu 78 00:03:35,110 --> 00:03:37,140 je duljina veća od ili ispod? 79 00:03:37,140 --> 00:03:37,730 >> David J. Malan: Apsolutno. 80 00:03:37,730 --> 00:03:41,706 Vi samo imate stanje koji kaže da, ako je - 81 00:03:41,706 --> 00:03:46,080 odnosno ne nužno znati unaprijed koliko znakova 82 00:03:46,080 --> 00:03:49,060 korisnik će se upisati, jer imate kokoši i jajetu. 83 00:03:49,060 --> 00:03:51,860 Ne dok ste ga pročitali u sa scanf Možete li shvatiti koliko je to. 84 00:03:51,860 --> 00:03:54,500 No, u tom trenutku, to je prekasno, jer ste ga već pročitali u 85 00:03:54,500 --> 00:03:55,710 neki blok memorije. 86 00:03:55,710 --> 00:03:59,590 Dakle, kao na stranu, CS50 knjižnica izbjegava ovo pitanje uopce, opoziv 87 00:03:59,590 --> 00:04:01,060 pomoću fgetc. 88 00:04:01,060 --> 00:04:05,390 A on glasi jedan lik u isto vrijeme, savjet-toeing zajedno, znajući da vam 89 00:04:05,390 --> 00:04:08,060 Ne može se preliti lik ako čitate jednu po jednu. 90 00:04:08,060 --> 00:04:11,580 >> Kvaka je u getstring opoziva je da moramo stalno iznova veličinu 91 00:04:11,580 --> 00:04:13,590 koji komad memorije, što je samo bol. 92 00:04:13,590 --> 00:04:15,310 To je puno linija Šifra za to. 93 00:04:15,310 --> 00:04:18,779 Tako Drugi pristup bio bi da se zapravo koristiti rođaka, pa 94 00:04:18,779 --> 00:04:19,790 kažemo, scanf. 95 00:04:19,790 --> 00:04:22,820 Postoje varijante puno njih Funkcije koje zapravo provjeriti 96 00:04:22,820 --> 00:04:25,870 duljina koliko znakova možda pročitati maksimalno. 97 00:04:25,870 --> 00:04:29,430 A ti bi mogao navesti, nemojte čitati više od 50 znakova. 98 00:04:29,430 --> 00:04:34,110 Dakle, da bi se drugi pristup, ali manje susretljivi većih ulaza. 99 00:04:34,110 --> 00:04:37,040 >> Dakle, pitanje 2 pita, pretpostavimo tu verziju 3 je preveden i izveden. 100 00:04:37,040 --> 00:04:39,960 Zašto bi taj program SegFault? 101 00:04:39,960 --> 00:04:42,650 Dakle, ovo je zapravo ista odgovoriti, iako je to 102 00:04:42,650 --> 00:04:43,590 izgleda malo ljubitelj. 103 00:04:43,590 --> 00:04:46,440 Mi smo pomoću malloc, koja se osjeća kao dajemo sebi više opcija. 104 00:04:46,440 --> 00:04:48,030 I onda smo oslobađajući da memorija na kraju. 105 00:04:48,030 --> 00:04:49,580 To je još uvijek samo 50 bajtova memorije. 106 00:04:49,580 --> 00:04:53,620 Tako smo i dalje mogli pokušati pročitati u 51, 52, 1000 bajta. 107 00:04:53,620 --> 00:04:55,830 To će SegFault za isti razlog. 108 00:04:55,830 --> 00:04:57,530 >> Ali postoji još jedan razlog previše. 109 00:04:57,530 --> 00:05:03,890 Što bi drugo moglo malloc povratak osim adresa komad memorije? 110 00:05:03,890 --> 00:05:04,920 To bi mogla vratiti null. 111 00:05:04,920 --> 00:05:07,560 I zato nećemo provjeravati da, mogli bismo nešto raditi 112 00:05:07,560 --> 00:05:11,350 glupo zbog još jednog razloga, a to je da mogli bismo se reći scanf, pročitajte 113 00:05:11,350 --> 00:05:16,050 korisnikov ulaz s tipkovnice u 0 položaj, AKA null. 114 00:05:16,050 --> 00:05:18,890 I to je, također, će definitivno izazvati SegFault. 115 00:05:18,890 --> 00:05:21,590 Tako je za kviz svrhe, što bi prihvatili bilo onih što su 116 00:05:21,590 --> 00:05:22,740 valjani razlog. 117 00:05:22,740 --> 00:05:23,420 Jedan je identičan. 118 00:05:23,420 --> 00:05:25,720 Jedan je malo suptilniji. 119 00:05:25,720 --> 00:05:28,975 >> Na kraju, s obzirom na programu je Korištenje memorije, koliko je to verziju 2 i 120 00:05:28,975 --> 00:05:30,350 Verzija 3 razlikuju? 121 00:05:30,350 --> 00:05:35,070 Dakle, za ono što je vrijedno, što smo vidjeli Naizgled beskrajna opskrba moguće 122 00:05:35,070 --> 00:05:35,770 odgovori na to. 123 00:05:35,770 --> 00:05:39,300 A među odgovorima, što smo bili nadali, ali smo prihvatili druge 124 00:05:39,300 --> 00:05:42,250 stvari, bio je neki spomena Činjenica da je verzija 2 koristi 125 00:05:42,250 --> 00:05:44,560 tzv stog. 126 00:05:44,560 --> 00:05:46,710 Verzija 3 koristi hrpu. 127 00:05:46,710 --> 00:05:50,060 I funkcionalno, to zapravo nije napraviti sve što je mnogo razlika. 128 00:05:50,060 --> 00:05:54,040 Na kraju dana, mi smo još uvijek samo dobivanje 50 bajtova memorije. 129 00:05:54,040 --> 00:05:56,640 >> No, to je bio jedan od mogućih odgovora koje smo gledali. 130 00:05:56,640 --> 00:05:59,730 No, vidjet ćete, kao što ste dobili svoje kvizove vratio iz TFS, da smo učinili 131 00:05:59,730 --> 00:06:04,330 prihvatiti i druge rasprave o njihovom i različita upotreba memorije, kao dobro. 132 00:06:04,330 --> 00:06:08,600 No, stog i hrpa bi bila jednostavan odgovor da ide sa. 133 00:06:08,600 --> 00:06:11,150 Ima li pitanja? 134 00:06:11,150 --> 00:06:12,400 Dajem vam Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB Bowden: Dakle Problem 4. 137 00:06:20,210 --> 00:06:21,985 To je onaj gdje ste morali ispuniti u broju bajtova od svih 138 00:06:21,985 --> 00:06:23,460 te različite vrste koriste. 139 00:06:23,460 --> 00:06:24,830 Dakle, prva stvar koju vidimo. 140 00:06:24,830 --> 00:06:27,930 Pretpostavimo 32-bitnu arhitekturu, ovako CS50 uređaja. 141 00:06:27,930 --> 00:06:33,530 Dakle, jedna od temeljnih stvari o 32-bitne arhitekture, koja nam govori 142 00:06:33,530 --> 00:06:37,490 točno koliko je velika kazaljka ide da se u arhitekturi. 143 00:06:37,490 --> 00:06:43,020 >> Dakle, odmah smo znali da je bilo pokazivač tip je 32-bita ili 4 bajta. 144 00:06:43,020 --> 00:06:46,010 Dakle, u potrazi za ovim stolom, čvora * je pokazivač tipa. 145 00:06:46,010 --> 00:06:47,250 To će biti 4 bajta. 146 00:06:47,250 --> 00:06:51,640 Struct node *, to je doslovno identičan čvor zvijezde. 147 00:06:51,640 --> 00:06:53,590 A kako će biti 4 bajta. 148 00:06:53,590 --> 00:06:58,270 String, tako da ne izgleda kao pokazivač još, ali typedef, 149 00:06:58,270 --> 00:07:01,590 Niz je samo char *, koji je pokazivač tipa. 150 00:07:01,590 --> 00:07:03,550 Tako da će biti 4 bajta. 151 00:07:03,550 --> 00:07:06,150 >> Dakle, ova tri su sve 4 bajta. 152 00:07:06,150 --> 00:07:09,350 Sada, čvor i student su malo složeniji. 153 00:07:09,350 --> 00:07:15,160 Tako gledajući čvor i studenta, vidimo čvora kao cijeli broj i pokazivač. 154 00:07:15,160 --> 00:07:18,050 A student dva pokazivače unutar nje. 155 00:07:18,050 --> 00:07:23,340 Tako barem našem slučaju, način da smo završili izračunavanje veličine 156 00:07:23,340 --> 00:07:27,020 ovaj struct samo zbrojiti sve to je unutar struct. 157 00:07:27,020 --> 00:07:30,690 >> Tako je za čvor, imamo cijeli broj, što je 4 bajta. 158 00:07:30,690 --> 00:07:32,830 Imamo pointer, što je 4 bajta. 159 00:07:32,830 --> 00:07:35,820 I tako jedan čvor ide da se do 8 bajta. 160 00:07:35,820 --> 00:07:39,490 Ai za studenta, imamo pokazivač da je 4 bajta i drugi 161 00:07:39,490 --> 00:07:40,770 pokazivač da je 4 bajta. 162 00:07:40,770 --> 00:07:43,180 Tako da će se to završiti gore bitak 8 bajta. 163 00:07:43,180 --> 00:07:45,480 Dakle čvor i student su 8 bajta. 164 00:07:45,480 --> 00:07:48,950 I to je troje sve 4 bajta. 165 00:07:48,950 --> 00:07:50,240 Pitanja o tome? 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: Je li to bilo 64-bitni arhitektura, bi to 169 00:07:58,413 --> 00:07:59,880 udvostručiti sve od njih? 170 00:07:59,880 --> 00:08:01,790 >> ROB Bowden: To ne bi udvostručiti sve njih. 171 00:08:01,790 --> 00:08:05,830 Dakle, 64-bitna arhitektura, što, opet, Promjene koje temeljna stvar koja 172 00:08:05,830 --> 00:08:08,910 pointer je sada 64 bita. 173 00:08:08,910 --> 00:08:09,290 Da. 174 00:08:09,290 --> 00:08:10,930 Dakle pointer je 8 bajtova. 175 00:08:10,930 --> 00:08:15,420 Dakle, to da su 4 bajta će biti 8 bajtova. 176 00:08:15,420 --> 00:08:18,617 Student, koji je bio dva naputke, dobro, sada će se 177 00:08:18,617 --> 00:08:19,800 biti 8 bajtova, 8 bajta. 178 00:08:19,800 --> 00:08:21,980 To će napraviti 16 bajtova. 179 00:08:21,980 --> 00:08:25,710 >> Ali čvor je još uvijek 4 bajta. 180 00:08:25,710 --> 00:08:27,800 Dakle, ovo pointer ide biti 8 bajtova. 181 00:08:27,800 --> 00:08:28,930 To je 4 bajta. 182 00:08:28,930 --> 00:08:30,870 Dakle čvor ide samo biti 12 bajta. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Bilo koja druga pitanja o toj jednoj? 185 00:08:39,280 --> 00:08:44,500 Dakle, sljedeći, to su su HTTP statusni kodovi. 186 00:08:44,500 --> 00:08:48,000 A što je to opisao okolnosti pod kojima se oni mogu 187 00:08:48,000 --> 00:08:49,810 biti vraćen. 188 00:08:49,810 --> 00:08:56,730 jedan problem koji sam čuo neke studente imam je da su pokušali napraviti 189 00:08:56,730 --> 00:08:58,950 Pogreške se na kraju klijenta. 190 00:08:58,950 --> 00:09:02,320 Dakle, kada smo pokušati napraviti zahtjev na poslužitelj, nešto pođe 191 00:09:02,320 --> 00:09:03,820 krivu na našem kraju. 192 00:09:03,820 --> 00:09:07,660 No, općenito, ovi kodovi se vratio na poslužitelju. 193 00:09:07,660 --> 00:09:11,720 Na taj način želimo shvatiti što se događa krivo ili pravo na poslužitelju koji 194 00:09:11,720 --> 00:09:14,280 uzrokuje da se takve stvari se vratio. 195 00:09:14,280 --> 00:09:18,670 Pa zašto bi poslužitelju vraća status kod 200? 196 00:09:18,670 --> 00:09:19,920 Bilo misli? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Da. 199 00:09:23,730 --> 00:09:27,850 Dakle, nešto o uspješno Zahtjev je prošao. 200 00:09:27,850 --> 00:09:30,260 I oni su u mogućnosti da se vrate što god tražio. 201 00:09:30,260 --> 00:09:32,240 Dakle, sve je bilo u redu. 202 00:09:32,240 --> 00:09:35,662 Što o 302 pronašao? 203 00:09:35,662 --> 00:09:36,618 Da. 204 00:09:36,618 --> 00:09:39,008 >> PUBLIKA: server je u potrazi za ono što ste tražili. 205 00:09:39,008 --> 00:09:40,442 No, to nije mogao pronaći. 206 00:09:40,442 --> 00:09:42,850 Tako postoji greška. 207 00:09:42,850 --> 00:09:47,720 >> ROB Bowden: Dakle server bio u potrazi za ono što ste htjeli. 208 00:09:47,720 --> 00:09:51,682 Dakle, samo gleda ovdje, 302 pronašao, to je bio u mogućnosti da ga pronaći. 209 00:09:51,682 --> 00:09:53,035 >> Ivanković: Žao mi je. 210 00:09:53,035 --> 00:09:54,388 Pronađeno znači da su učinili ga pronaći. 211 00:09:54,388 --> 00:09:55,638 Oprostite. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB Bowden: Dakle 302 pronađena. 214 00:10:00,160 --> 00:10:02,350 Poslužitelj može pronaći ono što ste htjeli. 215 00:10:02,350 --> 00:10:04,640 >> PUBLIKA: Ali to ne prikazuje? 216 00:10:04,640 --> 00:10:08,180 >> ROB Bowden: razlika između to 302 i 200 da se 217 00:10:08,180 --> 00:10:09,280 zna što želite. 218 00:10:09,280 --> 00:10:12,000 No, to nije točno gdje ste htjeli pitati. 219 00:10:12,000 --> 00:10:14,580 Dakle, 302 je tipičan za preusmjeravanje. 220 00:10:14,580 --> 00:10:16,510 Tako da je zatražio stranicu. 221 00:10:16,510 --> 00:10:19,590 Ona zna, ah, želim da ti ovo vratiti. 222 00:10:19,590 --> 00:10:21,070 No, to je na drugi URL. 223 00:10:21,070 --> 00:10:23,534 Pa hej, što zapravo želi. 224 00:10:23,534 --> 00:10:26,950 >> David J. Malan: To je komad koji je rekao da mi je dao vama momci preusmjeravanje 225 00:10:26,950 --> 00:10:30,830 funkcija koja koristi funkciju zaglavlja koji je, pak, isprintati mjesto, 226 00:10:30,830 --> 00:10:34,110 debelog crijeva, a zatim URL na koji Želite li odbaciti korisnika. 227 00:10:34,110 --> 00:10:37,480 Iako niste vidjeli 302 izrijekom postoji, to je ono što PHP 228 00:10:37,480 --> 00:10:41,550 bi magično umetnuti kao zaglavlju govoreći upravo ono što Rob je rekao da - 229 00:10:41,550 --> 00:10:41,930 pronašao. 230 00:10:41,930 --> 00:10:43,180 Ali ide ovdje umjesto. 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 Pa što je s 403 zabranjeno? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Ivanković: Mislim da je to server je u osnovi kaže da klijent 236 00:10:57,120 --> 00:10:59,970 Ne može, internetsku stranicu. 237 00:10:59,970 --> 00:11:03,260 >> ROB Bowden: Pa da. 238 00:11:03,260 --> 00:11:07,670 Pa, tipični odgovor smo bili Očekujemo nešto poput, datoteke 239 00:11:07,670 --> 00:11:08,920 nisu chmodded odgovarajući način. 240 00:11:08,920 --> 00:11:11,590 To je vjerojatno i pod kojim uvjetima ste ih vidjeli. 241 00:11:11,590 --> 00:11:18,920 No, tu je razlog da klijent mogao biti u krivu ovdje. 242 00:11:18,920 --> 00:11:20,440 Tu je zapravo drugi status code - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Dakle, to su vrlo slični. 245 00:11:22,820 --> 00:11:24,590 >> 401 je neovlašteno. 246 00:11:24,590 --> 00:11:26,130 I 403 je zabranjeno. 247 00:11:26,130 --> 00:11:31,890 I tako neovlašteno ste isključivo dobiti ako niste prijavljeni 248 00:11:31,890 --> 00:11:34,520 No, prijavite moglo značiti da ste ovlašteni. 249 00:11:34,520 --> 00:11:37,930 Ali, ako ste već prijavljeni a vi još uvijek nemaju dozvolu, a zatim 250 00:11:37,930 --> 00:11:40,140 također možete dobiti zabranjen. 251 00:11:40,140 --> 00:11:45,320 Dakle, ako ste prijavljeni i nemaju dopuštenja, zabranjeno je i 252 00:11:45,320 --> 00:11:47,164 nešto što možete dobiti. 253 00:11:47,164 --> 00:11:48,900 >> David J. Malan: A mehanizam po koja ti problemi su obično 254 00:11:48,900 --> 00:11:53,100 riješiti na poslužitelju je kroz koju naredbu? 255 00:11:53,100 --> 00:11:57,700 Chmod, ako je, doista, dozvole izdati na datoteku ili mapu. 256 00:11:57,700 --> 00:11:59,220 >> ROB Bowden: Nakon 404 not found. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Da. 259 00:12:03,470 --> 00:12:10,150 Dakle, za razliku od 302, gdje to nije točno gdje ste tražili, ali ga ne zna što 260 00:12:10,150 --> 00:12:12,710 želite, to, to je samo nemam pojma što želiš. 261 00:12:12,710 --> 00:12:15,648 A ti se ne traži nešto vrijedi. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Ja sam čajnik, a zatim 500 unutarnji poslužitelj. 264 00:12:22,310 --> 00:12:24,870 Pa zašto bi ti to? 265 00:12:24,870 --> 00:12:26,120 >> Dakle SegFault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Ja zapravo ne znam ocjenjivanja standard za to. 268 00:12:30,640 --> 00:12:34,850 No, ako je vaš PHP kod imala nešto krivo u tome, u teoriji, to bi moglo 269 00:12:34,850 --> 00:12:39,650 zapravo SegFault, u tom slučaju, ova 500 Interna pogreška poslužitelja, nešto 270 00:12:39,650 --> 00:12:41,400 nije u redu s vašeg poslužitelja konfiguracije. 271 00:12:41,400 --> 00:12:44,320 Ili postoji greška sintakse u PHP kodu. 272 00:12:44,320 --> 00:12:46,095 Ili se nešto loše događa. 273 00:12:46,095 --> 00:12:48,320 >> David J. Malan: Nismo vidjeli SegFault među nekoliko ljudi odgovore. 274 00:12:48,320 --> 00:12:49,490 I tehnički, to bi se moglo dogoditi. 275 00:12:49,490 --> 00:12:53,820 No, da bi se PHP, Program napisana od strane drugih ljudi, zapravo 276 00:12:53,820 --> 00:12:57,790 segfaulted, koja samo ako ti ljudi zeznuo i napisao buggy kod u 277 00:12:57,790 --> 00:13:00,680 njihov tumač bi Sam PHP SegFault. 278 00:13:00,680 --> 00:13:06,460 Pa čak i da 500 je kao SegFault u duhu, to je gotovo uvijek 279 00:13:06,460 --> 00:13:10,490 rezultat problema s konfiguracijom datoteke na web poslužitelju ili, kao što je Rob je rekao, 280 00:13:10,490 --> 00:13:13,200 Pogreška sintakse, kao i ti nisu zatvorili citat. 281 00:13:13,200 --> 00:13:16,180 Ili ste izgubili-zarez negdje. 282 00:13:16,180 --> 00:13:23,677 >> Ivanković: Pa za pset Shuttle, ja mislim kad sam to učinio nakon što sam kliknuo 283 00:13:23,677 --> 00:13:26,300 Preglednik, ali nije bilo ništa gore, ono što oni nazivaju bijela stranica. 284 00:13:26,300 --> 00:13:28,056 Ali, to je bilo zbog koda. 285 00:13:28,056 --> 00:13:29,440 Mislim da je JavaScript, zar ne? 286 00:13:29,440 --> 00:13:29,770 >> ROB Bowden: Da. 287 00:13:29,770 --> 00:13:31,180 >> PUBLIKA: Bi li to pogreška još uvijek dolaze? 288 00:13:31,180 --> 00:13:34,290 >> ROB Bowden: Pa što ne bi dobio ova pogreška, jer je sve 289 00:13:34,290 --> 00:13:36,930 s web poslužitelja perspektive bio je potpuno u redu. 290 00:13:36,930 --> 00:13:39,090 No, što je zatražio index.html. 291 00:13:39,090 --> 00:13:42,000 Tražili ste shuttle.js i service.js. 292 00:13:42,000 --> 00:13:44,580 I to je bio u mogućnosti uspješno vratiti svima vama od tih 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 kada vaš preglednik pokušali interpretirati JavaScript kôd koji 296 00:13:49,330 --> 00:13:51,370 To je kao, čekaj, to nije vrijedi JavaScript pogreška. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Bilo koja druga pitanja? 299 00:13:58,210 --> 00:14:00,750 U redu. 300 00:14:00,750 --> 00:14:04,120 >> David J. Malan: Zato sljedeći gore je broj 11. 301 00:14:04,120 --> 00:14:07,610 A 11 je najstrašnija za puno ljudi. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Dakle, najvažnija stvar je imati na umu ovdje je da je to, zapravo, o 304 00:14:18,570 --> 00:14:19,840 Popis dvostruko povezani. 305 00:14:19,840 --> 00:14:23,160 No, to nije bio isti kao i prošle godine dvostruko povezani popis problema, 306 00:14:23,160 --> 00:14:27,170 koji nije vam dati upozorenje da Popis bi, u stvari, biti nerazvrstani. 307 00:14:27,170 --> 00:14:29,640 >> Dakle, činjenica da je popis bio nerazvrstani i činjenica da je ta riječ bila 308 00:14:29,640 --> 00:14:32,930 podcrtavanje tu je trebao prenijeti da je to zapravo pojednostavljenje 309 00:14:32,930 --> 00:14:35,430 onoga što bi inače bio veći problem 310 00:14:35,430 --> 00:14:36,600 i duži. 311 00:14:36,600 --> 00:14:40,760 Tako česta pogreška je ovdje bila da su stavili prošlogodišnji rješenje na vašem jedan 312 00:14:40,760 --> 00:14:45,580 pager i onda samo slijepo kopirati da dolje kao odgovor, što je u pravu 313 00:14:45,580 --> 00:14:48,520 odgovor na drugo pitanje slični u duhu. 314 00:14:48,520 --> 00:14:51,340 Ali suptilnosti ovdje su kako slijedi. 315 00:14:51,340 --> 00:14:55,200 >> Dakle, mi smo čvor proglasila i definirana na uobičajeni način ovdje. 316 00:14:55,200 --> 00:14:59,230 Onda smo definirali popis biti globalni pokazivač inicijalizira na nulu. 317 00:14:59,230 --> 00:15:02,150 Onda je očito, ima dvije funkcije imamo prototipove ovdje, insert 318 00:15:02,150 --> 00:15:03,240 i ukloniti. 319 00:15:03,240 --> 00:15:06,600 A onda ćemo imati neki uzorak kod ovdje radiš hrpu umecima. 320 00:15:06,600 --> 00:15:09,930 A onda ćemo vas zamoliti da ispunite Provedba umetkom u nastavku, kao 321 00:15:09,930 --> 00:15:14,380 Način na koji on umeće n u popis u stalnom vrijeme, također je naglasio, 322 00:15:14,380 --> 00:15:15,730 čak i ako je već prisutna. 323 00:15:15,730 --> 00:15:20,600 >> Tako je lijepo biti u mogućnosti da biste umetnuli u stalnom vrijeme je da to podrazumijeva 324 00:15:20,600 --> 00:15:23,060 da imate umetnuti novi čvor gdje? 325 00:15:23,060 --> 00:15:23,690 U prednjem. 326 00:15:23,690 --> 00:15:27,760 Tako se eliminira, srećom, barem jedan od predmeta koji su nekada zahtijevaju 327 00:15:27,760 --> 00:15:30,520 čak i više linija koda, kao što je to učinio prošle godine, a čak u razredu, kada smo 328 00:15:30,520 --> 00:15:34,040 Razgovarali kroz ovakve stvari s ljudima i sa nekim 329 00:15:34,040 --> 00:15:35,250 verbalno pseudo code. 330 00:15:35,250 --> 00:15:39,190 Dakle, u otopini ovdje, neka je preskočiti da da samo da imaju vizualni 331 00:15:39,190 --> 00:15:40,480 zaslon. 332 00:15:40,480 --> 00:15:42,230 >> Uočite da radimo sljedeće. 333 00:15:42,230 --> 00:15:45,140 I također primijetiti drugi pojednostavljenje je da čak i ako je to 334 00:15:45,140 --> 00:15:48,280 Već danas, pa to znači da čak i ako broj je već tamo, možete 335 00:15:48,280 --> 00:15:50,280 samo slijepo umetnite drugi prijepis. 336 00:15:50,280 --> 00:15:52,560 I to je, također, je trebao biti pojednostavljenje, tako da bi mogao 337 00:15:52,560 --> 00:15:54,940 usredotočiti na, uistinu, neke više intelektualno zanimljiv dio i 338 00:15:54,940 --> 00:15:58,090 a ne samo neke dodatne provjere pogrešaka s obzirom na ograničeno vrijeme. 339 00:15:58,090 --> 00:16:02,880 >> Dakle, u ovom otopine uzorka, možemo izdvojiti pokazivač na lijevoj ruci 340 00:16:02,880 --> 00:16:04,510 stranu ovdje na čvoru. 341 00:16:04,510 --> 00:16:07,190 Sada, shvatiti da pokazivač, kao Rob je rekao, tek 32 bita. 342 00:16:07,190 --> 00:16:09,060 A to zapravo ne sadrže adresa do vas 343 00:16:09,060 --> 00:16:09,970 dodijeliti adresu. 344 00:16:09,970 --> 00:16:13,220 I mi to učiniti na desnom rukom strana putem malloc. 345 00:16:13,220 --> 00:16:16,550 Poput dobrog građanina, možemo provjeriti da malloc nije, u stvari, nula, tako da 346 00:16:16,550 --> 00:16:18,690 ne slučajno stvoriti SegFault ovdje. 347 00:16:18,690 --> 00:16:22,840 I svaki put kad koristiti malloc u životu, te treba provjera za ništa, da ne bi 348 00:16:22,840 --> 00:16:24,090 imate suptilan bug. 349 00:16:24,090 --> 00:16:28,460 >> Onda smo započeti taj null strane dodjeljivanje n i natrag i naprijed. 350 00:16:28,460 --> 00:16:32,450 I u ovom slučaju ovdje, ja inicijaliziran natrag na nulu, jer je ovaj novi 351 00:16:32,450 --> 00:16:34,780 čvora će biti novi počevši od moje liste. 352 00:16:34,780 --> 00:16:37,050 Dakle, tu će biti ništa prije toga. 353 00:16:37,050 --> 00:16:42,010 I ja želim biti dodati Postojeći popis na novi čvor 354 00:16:42,010 --> 00:16:44,700 postavljanje pored jednak uvrstiti. 355 00:16:44,700 --> 00:16:47,120 Ali nisam učinio samo još. 356 00:16:47,120 --> 00:16:51,780 Dakle, ako sama Popis je već postojala, a je najmanje jedan čvor 357 00:16:51,780 --> 00:16:57,070 već u mjesto, ako je to popis ovdje i ubacim novi čvor ovdje, ja 358 00:16:57,070 --> 00:17:01,840 potrebno kako bi bili sigurni da je moj bivši čvor ukazuje unatrag na moj novi čvor, 359 00:17:01,840 --> 00:17:04,260 zbog toga je, opet, Popis dvostruko povezani. 360 00:17:04,260 --> 00:17:05,460 >> Tako ćemo napraviti ček zdravog razuma. 361 00:17:05,460 --> 00:17:10,109 Ako popis nije null, ako postoji već jedan ili više čvorova tamo, a zatim 362 00:17:10,109 --> 00:17:12,470 dodati da vrati referencu da se tako izrazim. 363 00:17:12,470 --> 00:17:15,420 A onda je posljednje što nam treba učiniti zapravo ažurirati globalni 364 00:17:15,420 --> 00:17:20,329 promjenjiva Popis sama ukazati na taj novi čvor. 365 00:17:20,329 --> 00:17:21,790 Da. 366 00:17:21,790 --> 00:17:26,579 >> Ivanković: U pokazivača strelica [Nečujan] jednako null, ne da 367 00:17:26,579 --> 00:17:30,420 nositi s popisa, jer Popis je null? 368 00:17:30,420 --> 00:17:30,596 >> David J. Malan: Nope. 369 00:17:30,596 --> 00:17:34,500 To je jednostavno mi se proaktivno Pazite, u smislu da, ako je to moja 370 00:17:34,500 --> 00:17:38,730 izvorni popis s možda nekim više čvorova ovamo i ja sam umetanjem mom 371 00:17:38,730 --> 00:17:42,380 novi čvor ovamo, tu se događa da se ništa više ovdje. 372 00:17:42,380 --> 00:17:44,720 I želim snimiti tu ideju postavljanjem prije 373 00:17:44,720 --> 00:17:47,740 null na novi čvor. 374 00:17:47,740 --> 00:17:51,410 A valjda, ako je moj broj je ispravan i ne postoji drugi način za umetanje 375 00:17:51,410 --> 00:17:54,970 čvorovi osim ove funkcije, vjerojatno, čak i ako je popis već ima 376 00:17:54,970 --> 00:18:00,090 jedan ili više čvorova u njemu, vjerojatno Popis, prvi čvor, bi 377 00:18:00,090 --> 00:18:02,750 natrag pokazivač sama null. 378 00:18:02,750 --> 00:18:03,550 >> Ivanković: I samo follow-up. 379 00:18:03,550 --> 00:18:08,139 Razlog stavite pokazivač naprijed jednaki Popis se praviš pokazivač 380 00:18:08,139 --> 00:18:13,579 Prije Popis po tome što je pokazujući do sljedećeg, pretpostavljam - 381 00:18:13,579 --> 00:18:14,980 Ja ne - 382 00:18:14,980 --> 00:18:15,450 samo popis? 383 00:18:15,450 --> 00:18:16,400 >> David J. Malan: Točno. 384 00:18:16,400 --> 00:18:19,400 I tako ćemo zapravo razmislite dva slučaja ovdje stvarno, iako 385 00:18:19,400 --> 00:18:22,070 Kako bi mi ćemo ih uzeti u obzir ne sasvim jednako kao i kod. 386 00:18:22,070 --> 00:18:26,250 No, na visokoj razini, ako to predstavlja popis, a to je 32-bitni 387 00:18:26,250 --> 00:18:29,560 pointer, najjednostavniji scenarij da je to null po defaultu. 388 00:18:29,560 --> 00:18:33,010 I pretpostavljam da želite umetnuti Broj 50 je bio prvi broj. 389 00:18:33,010 --> 00:18:37,640 Dakle, ja ću ići naprijed i dodijeliti čvora, koji će sadržavati 390 00:18:37,640 --> 00:18:38,770 tri područja - 391 00:18:38,770 --> 00:18:42,070 n, natrag i naprijed. 392 00:18:42,070 --> 00:18:44,580 >> Ja ću staviti broj 50 ovdje, jer će to biti n. 393 00:18:44,580 --> 00:18:46,130 To će biti sljedeći. 394 00:18:46,130 --> 00:18:48,530 A to će biti natrag. 395 00:18:48,530 --> 00:18:50,910 I tako što mi je činiti u tom slučaju? 396 00:18:50,910 --> 00:18:53,900 Pa, upravo sam učinio linije 1 ovdje. 397 00:18:53,900 --> 00:18:55,400 Pointer n dobiva n. 398 00:18:55,400 --> 00:18:57,740 Ja sam tada rekao, prethodnu trebao dobiti null. 399 00:18:57,740 --> 00:18:59,470 Dakle, ovo će biti null. 400 00:18:59,470 --> 00:19:01,365 Tada ću reći sljedeće će dobiti popis. 401 00:19:01,365 --> 00:19:05,150 >> I to samo ispadne dobro. 402 00:19:05,150 --> 00:19:06,500 To je null. 403 00:19:06,500 --> 00:19:10,620 I tako sam rekao, novi čvor je sljedeći Polje trebao dobiti bez obzira na to. 404 00:19:10,620 --> 00:19:12,570 Tako da dovede drugog null postoji. 405 00:19:12,570 --> 00:19:14,510 I onda zadnja stvar I nemojte se provjeriti ovdje. 406 00:19:14,510 --> 00:19:17,870 Ako popis nije jednak nuli, ali to je jednak nuli, pa smo preskočiti 407 00:19:17,870 --> 00:19:18,470 uopce. 408 00:19:18,470 --> 00:19:23,520 I tako sve što učiniti je popis dobiva pointer, koji su slikovito rezultira 409 00:19:23,520 --> 00:19:25,570 Slika kao što je to. 410 00:19:25,570 --> 00:19:26,620 Dakle, to je jedan scenarij. 411 00:19:26,620 --> 00:19:30,490 >> A onaj koji ste bili pitate o posebno je situacija kao što je ovaj, 412 00:19:30,490 --> 00:19:33,190 gdje smo već imate popis jedan čvor. 413 00:19:33,190 --> 00:19:36,240 I ako se vratim u izvorniku Problem izjavu, iduće ćemo se 414 00:19:36,240 --> 00:19:39,320 umetnite recimo je 34, samo za radi rasprave. 415 00:19:39,320 --> 00:19:46,210 Zato ću samo povoljno nacrtao ovamo. 416 00:19:46,210 --> 00:19:47,540 Upravo sam malloced. 417 00:19:47,540 --> 00:19:49,310 Pretpostavimo da provjeravam za null. 418 00:19:49,310 --> 00:19:51,870 >> Sada, ja ću započeti n biti 34. 419 00:19:51,870 --> 00:19:53,040 A to će biti n. 420 00:19:53,040 --> 00:19:54,670 To će biti sljedeći. 421 00:19:54,670 --> 00:19:57,100 A to će biti natrag. 422 00:19:57,100 --> 00:19:59,370 Idemo pobrinite nisam ovo unatrag. 423 00:19:59,370 --> 00:20:01,110 Prethodno je na prvom mjestu u definiciji. 424 00:20:01,110 --> 00:20:03,070 Dopustite mi da ovo popraviti. 425 00:20:03,070 --> 00:20:04,410 To je natrag. 426 00:20:04,410 --> 00:20:05,780 To je sljedeći. 427 00:20:05,780 --> 00:20:08,620 Iako su identični, Budimo dosljedni. 428 00:20:08,620 --> 00:20:09,450 >> Prethodni. 429 00:20:09,450 --> 00:20:11,030 To je sljedeći. 430 00:20:11,030 --> 00:20:16,310 Pa upravo sam malloced moje znanje, provjeriti za nulu, dodjeljuje 34 u čvor. 431 00:20:16,310 --> 00:20:17,570 Prethodna dobiva null. 432 00:20:17,570 --> 00:20:19,480 Tako da mi je to. 433 00:20:19,480 --> 00:20:21,010 Sljedeća dobiva popis. 434 00:20:21,010 --> 00:20:22,370 Dakle, popis je to. 435 00:20:22,370 --> 00:20:26,520 Dakle, to je isto sada kao crtanje ovo strelicu, tako da oni ukazuju na jedan 436 00:20:26,520 --> 00:20:27,940 u istom. 437 00:20:27,940 --> 00:20:30,400 A onda sam provjeru ako popis nije jednak nuli. 438 00:20:30,400 --> 00:20:31,740 I to ne ovaj put. 439 00:20:31,740 --> 00:20:35,580 Onda ću napraviti popis natrag dobiva pokazivač. 440 00:20:35,580 --> 00:20:39,700 >> Dakle, popis prethodnih dobiva PTR. 441 00:20:39,700 --> 00:20:44,300 Tako da to ima za posljedicu stavljanjem grafički strelica ovdje. 442 00:20:44,300 --> 00:20:46,930 I to je sve malo valovita, linije. 443 00:20:46,930 --> 00:20:50,780 A onda, na kraju, ja ažurirati popis ukazati na pokazivač. 444 00:20:50,780 --> 00:20:55,560 Pa sad to ukazuje na ovim tipom. 445 00:20:55,560 --> 00:20:57,170 A sada, idemo napraviti brzo duševne ček. 446 00:20:57,170 --> 00:20:59,470 >> Evo popisa, što je Globalna varijabla. 447 00:20:59,470 --> 00:21:02,850 Prvi čvor je, zapravo, 34, jer Ja pratim tu strelicu. 448 00:21:02,850 --> 00:21:05,210 I to je točno, jer želim umetnuti na početku popisa 449 00:21:05,210 --> 00:21:06,070 svi novi čvorovi. 450 00:21:06,070 --> 00:21:08,860 Njegov sljedeći polje vodi me na ovom tipu. 451 00:21:08,860 --> 00:21:10,710 Ako sam zadržati ide, sam pogodio pored null. 452 00:21:10,710 --> 00:21:11,760 Dakle, nema više popisa. 453 00:21:11,760 --> 00:21:14,460 Ako sam pogodio natrag, dobivam tamo gdje ja očekujem. 454 00:21:14,460 --> 00:21:16,435 >> Dakle, još uvijek postoje nekoliko naputke, Očito, za manipulaciju. 455 00:21:16,435 --> 00:21:19,870 No, činjenica da su rekli da ne to je u stalnom vrijeme vam znači samo 456 00:21:19,870 --> 00:21:22,910 imaju ograničen broj stvari ti si to dopušteno. 457 00:21:22,910 --> 00:21:24,290 A što je to broj? 458 00:21:24,290 --> 00:21:25,185 To bi mogao biti jedan korak. 459 00:21:25,185 --> 00:21:25,700 To bi moglo biti dva. 460 00:21:25,700 --> 00:21:26,820 To bi moglo biti 1.000 koraka. 461 00:21:26,820 --> 00:21:30,500 No, to je konačna, što znači da ne mogu su bilo kakve petlje događa 462 00:21:30,500 --> 00:21:32,010 ovdje, ne rekurzija, nema petlje. 463 00:21:32,010 --> 00:21:37,390 To jednostavno mora biti hard-kodirane linije koda kao što smo u ovom uzorku. 464 00:21:37,390 --> 00:21:42,330 >> Dakle, sljedeći problem 12 nas je zamolio da dovršiti provedbu otklanjaju 465 00:21:42,330 --> 00:21:46,740 dolje tako da uklanja n s popisa u linearnom vremenu. 466 00:21:46,740 --> 00:21:48,740 Dakle, imate još malo wiggle room sada. 467 00:21:48,740 --> 00:21:52,380 Možete pretpostaviti da je n, ako je prisutan na popisu, neće biti prisutan 468 00:21:52,380 --> 00:21:53,340 ne više od jednom. 469 00:21:53,340 --> 00:21:56,770 I to je također značilo da se kviz-based pojednostavljenje pretpostavka, pa 470 00:21:56,770 --> 00:21:59,780 da, ako vam je broj 50 negdje na popisu, ne znaš također 471 00:21:59,780 --> 00:22:02,890 morate brinuti o tome i dalje ponoviti, traže sve moguće 472 00:22:02,890 --> 00:22:06,990 Kopija od 50, što bi samo dopasti u neku minutia u ograničenom vremenu. 473 00:22:06,990 --> 00:22:10,460 >> Tako je s ukloniti, ovo je definitivno više izazovan i više 474 00:22:10,460 --> 00:22:11,640 Kod pisati. 475 00:22:11,640 --> 00:22:14,990 No, na prvi pogled, iskreno, to bi moglo izgleda neodoljiv i kao nešto 476 00:22:14,990 --> 00:22:17,060 ne postoji način na koji bi mogao imati smisliti na kvizu. 477 00:22:17,060 --> 00:22:22,450 No, ako se usredotočimo na pojedinim koracima, Nadamo se da će se iznenada 478 00:22:22,450 --> 00:22:26,060 štrajk se da je svaki od tih pojedinačnih koraka čini očiti smisao 479 00:22:26,060 --> 00:22:27,080 u retrospektivi. 480 00:22:27,080 --> 00:22:28,200 Tako ćemo pogledati. 481 00:22:28,200 --> 00:22:32,570 >> Dakle, prvo smo započeti pokazivač da se popis sama. 482 00:22:32,570 --> 00:22:36,040 Zato želim linearno vrijeme, to znači Ja ću imati neku petlju. 483 00:22:36,040 --> 00:22:39,730 I uobičajeni način ponoviti tijekom čvorova u popisu strukture ili bilo koje vrste 484 00:22:39,730 --> 00:22:43,860 strukture iterativno je da se kazaljka na prednjoj podataka 485 00:22:43,860 --> 00:22:46,990 Struktura i onda samo početak ažuriranja to i prošetati svoj put 486 00:22:46,990 --> 00:22:48,650 kroz strukturu podataka. 487 00:22:48,650 --> 00:22:50,040 Tako ću učiniti upravo to. 488 00:22:50,040 --> 00:22:54,260 >> Dok pointer, moja privremena varijabla, nije jednak nuli, neka je 489 00:22:54,260 --> 00:22:55,660 ići naprijed i provjeriti. 490 00:22:55,660 --> 00:22:56,910 Jesam li sretna? 491 00:22:56,910 --> 00:23:01,740 Je n polje u čvoru Ja sam trenutno gleda na jednak 492 00:23:01,740 --> 00:23:03,380 broj tražim? 493 00:23:03,380 --> 00:23:05,410 I ako je tako, neka je učiniti nešto. 494 00:23:05,410 --> 00:23:10,020 Sada, primijetiti ako se stanje okružuje cijeli 495 00:23:10,020 --> 00:23:11,520 Sljedeće linija koda. 496 00:23:11,520 --> 00:23:14,610 To je jedino što mi je stalo - pronalaženje broja u pitanje. 497 00:23:14,610 --> 00:23:18,010 Dakle, ne postoji drugi, što pojednostavljuje stvari konceptualno malo. 498 00:23:18,010 --> 00:23:22,040 >> Ali sada, shvatio sam, i možda ćete morati Samo je to shvatio, nakon razmišljanja 499 00:23:22,040 --> 00:23:24,720 to kroz malo, postoji zapravo dva slučaja ovdje. 500 00:23:24,720 --> 00:23:28,060 Jedno je mjesto gdje čvor je na početku popisa, što je 501 00:23:28,060 --> 00:23:31,040 malo neugodno, jer je to poseban slučaj, jer morate nositi 502 00:23:31,040 --> 00:23:33,340 uz ovu stvar, koja je samo anomalija. 503 00:23:33,340 --> 00:23:35,720 Svugdje drugdje u popisu, to je ista stvar. 504 00:23:35,720 --> 00:23:38,050 Tu je natrag čvor i pored čvora, prethodni čvor, pored čvora. 505 00:23:38,050 --> 00:23:40,940 No, ovaj tip je malo posebna ako je on na početku. 506 00:23:40,940 --> 00:23:48,710 >> Dakle, ako se kazaljka jednaka popis sama, pa ako sam na početku 507 00:23:48,710 --> 00:23:53,960 Popis i sam našao n, trebam učiniti nekoliko stvari. 508 00:23:53,960 --> 00:23:59,230 Jedan, moram promijeniti popis do ukazuju na sljedeće polje, 50 godina. 509 00:23:59,230 --> 00:24:01,270 Dakle, pretpostavimo da ja pokušavam ukloniti 34. 510 00:24:01,270 --> 00:24:03,560 Dakle, ovaj tip mora ići daleko u samo nekoliko trenutaka. 511 00:24:03,560 --> 00:24:07,210 >> Pa ću reći, popis dobiva pokazivač naprijed. 512 00:24:07,210 --> 00:24:08,570 Pa, ovo je kazaljka. 513 00:24:08,570 --> 00:24:10,360 Dalje se ukazuje ovamo. 514 00:24:10,360 --> 00:24:17,470 Dakle, to se mijenja ovaj strelicom pravo Sada se pokazuje na ovom tipu ovdje. 515 00:24:17,470 --> 00:24:19,580 Sada, ne zaboravite, mi smo privremena varijabla. 516 00:24:19,580 --> 00:24:23,520 Dakle, nismo siročad bilo čvorove, jer imam i ovaj tip u mom 517 00:24:23,520 --> 00:24:25,010 Provedba ukloniti. 518 00:24:25,010 --> 00:24:29,600 Pa sad, ako je i sam popis nije null, Moram popraviti nešto. 519 00:24:29,600 --> 00:24:32,690 >> Moram sada bi bili sigurni da je ovo strijela, koji je prethodno pokazuje 520 00:24:32,690 --> 00:24:36,830 50-34, ovo mora da ode, jer ako ja pokušavam riješiti 521 00:24:36,830 --> 00:24:41,910 od 34, 50 je bolje ne zadrži bilo vrsta vratio se spominje kao 522 00:24:41,910 --> 00:24:42,820 strelica predložio. 523 00:24:42,820 --> 00:24:44,820 Pa upravo sam ovu liniju. 524 00:24:44,820 --> 00:24:46,520 Pa onda sam gotov. 525 00:24:46,520 --> 00:24:48,040 Taj slučaj je zapravo prilično jednostavan. 526 00:24:48,040 --> 00:24:51,010 Sjekao glavu popisa je relativno jednostavan. 527 00:24:51,010 --> 00:24:52,980 >> Nažalost, tu je ovo neugodno drugi blok. 528 00:24:52,980 --> 00:24:56,170 Pa sad, moram razmotriti slučaj gdje ima nešto u sredini. 529 00:24:56,170 --> 00:24:59,880 No, to nije previše strašna, osim za sintaksu kao što je ovaj. 530 00:24:59,880 --> 00:25:03,080 Dakle, ako ja nisam na početku Popis, ja sam negdje u sredini. 531 00:25:03,080 --> 00:25:08,160 I ovaj redak ovdje govori, start na bilo čvora ste na. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Idi na prethodnu čvora sljedeće polje i ukazuju da se na pokazivač. 534 00:25:18,550 --> 00:25:20,390 >> Učinimo to slikovito. 535 00:25:20,390 --> 00:25:21,640 To je sve komplicirano. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Dakle, ako ja imam prethodnog polja ovdje - učinimo to - naprijed stavke ovdje. 538 00:25:37,990 --> 00:25:41,200 Idem pojednostaviti moje naputke a nego privući hrpu 539 00:25:41,200 --> 00:25:45,710 stvari natrag i naprijed isprekrižane drugoga. 540 00:25:45,710 --> 00:25:50,870 I sad, recimo samo da je to 1, 2, 3 za dobrobit rasprave, pa čak i 541 00:25:50,870 --> 00:25:53,410 iako to ne u ravnini s Problem je u pitanju. 542 00:25:53,410 --> 00:25:55,900 >> Dakle, ovdje je moj popis povezani. 543 00:25:55,900 --> 00:25:59,300 Ja sam pokušava ukloniti dva u to Posebno verzija priče. 544 00:25:59,300 --> 00:26:01,960 Tako sam izmijenjena pokazivač se upućuju na ovaj tip. 545 00:26:01,960 --> 00:26:03,315 Dakle, ovo je PTR. 546 00:26:03,315 --> 00:26:04,530 On pokazuje ovdje. 547 00:26:04,530 --> 00:26:07,170 Taj je popis, koji postoji na globalnoj razini kao i prije. 548 00:26:07,170 --> 00:26:09,200 I on pokazuje ovdje, bez obzira što. 549 00:26:09,200 --> 00:26:10,800 I sad, ja pokušavam ukloniti dva. 550 00:26:10,800 --> 00:26:13,850 >> Dakle, ako se kazaljka pokazuje ovdje, ja sam će slijediti, očito, 551 00:26:13,850 --> 00:26:17,110 natrag pointer, što me stavlja na 1. 552 00:26:17,110 --> 00:26:22,290 Ja sam tada htio reći da će sljedeći polje, što me dovodi do više od toga 553 00:26:22,290 --> 00:26:25,410 boksati ovdje, ide na jednaka pokazivač naprijed. 554 00:26:25,410 --> 00:26:28,400 Dakle, ako je taj pokazivač, to je sljedeća. 555 00:26:28,400 --> 00:26:31,840 To znači da je ova strelica potrebe ukazati na ovim tipom. 556 00:26:31,840 --> 00:26:35,140 >> Pa što da je linija koda ima samo učinjeno je malo toga. 557 00:26:35,140 --> 00:26:37,500 A sada, to je izgleda kao korak u pravom smjeru. 558 00:26:37,500 --> 00:26:41,390 Mi u biti žele odrezati 2 out od sredine 1 do 3. 559 00:26:41,390 --> 00:26:44,400 Dakle, ima smisla da želimo Ruta ovaj pokazivač oko njega. 560 00:26:44,400 --> 00:26:50,400 Dakle, ovo next linija provjeru ako pokazivač Sljedeći nije NULL, postoji 561 00:26:50,400 --> 00:26:54,200 doista je netko s desne strane 2, to znači da moramo napraviti 562 00:26:54,200 --> 00:26:55,850 malo odrezati ovdje. 563 00:26:55,850 --> 00:27:00,590 >> Tako sam sada morati slijediti taj pokazivač i ažurirati prethodni pokazivač 564 00:27:00,590 --> 00:27:05,410 ovaj momak učiniti malo zaobilazno rješenje ovdje bit ovdje. 565 00:27:05,410 --> 00:27:07,100 I sada, vizualno je to lijepo. 566 00:27:07,100 --> 00:27:11,930 To je malo neuredan u da postoji nitko ne ukazuje na dvije više. 567 00:27:11,930 --> 00:27:13,600 2 pokazuje u lijevo. 568 00:27:13,600 --> 00:27:14,980 A 2 pokazuje udesno. 569 00:27:14,980 --> 00:27:17,480 No, on može učiniti što god želi, jer je On je o tome da se oslobodi. 570 00:27:17,480 --> 00:27:19,480 I nije važno što te vrijednosti su više. 571 00:27:19,480 --> 00:27:23,040 >> Ono što je važno je da se preostali Dečki su usmjeravanje iznad 572 00:27:23,040 --> 00:27:24,280 i ispod njega. 573 00:27:24,280 --> 00:27:25,810 I doista, to je ono što ćemo učiniti. 574 00:27:25,810 --> 00:27:29,360 Mi smo slobodni pointer, što znači da ćemo reći operativnog sustava, vi ste dobrodošli 575 00:27:29,360 --> 00:27:30,906 povratiti to. 576 00:27:30,906 --> 00:27:34,900 I onda na kraju, možemo se vratiti. 577 00:27:34,900 --> 00:27:37,220 Inače implicitno, ako smo još nisu vratili, 578 00:27:37,220 --> 00:27:38,290 Moramo nastaviti tražiti. 579 00:27:38,290 --> 00:27:41,485 Dakle pointer jednako pokazivač naprijed samo znači kretati ovog momka ovdje. 580 00:27:41,485 --> 00:27:42,600 Pomicanje ovog momka ovdje. 581 00:27:42,600 --> 00:27:45,400 Pomicanje ovog momka ovdje ako, u stvari, nismo pronašli broj 582 00:27:45,400 --> 00:27:46,960 tražimo još. 583 00:27:46,960 --> 00:27:49,630 >> Pa iskreno, to izgleda posve neodoljiv, mislim, na prvi 584 00:27:49,630 --> 00:27:52,180 pogled, pogotovo ako ste se borili s tim u kvizu onda vidjeti 585 00:27:52,180 --> 00:27:52,850 nešto kao što je ovaj. 586 00:27:52,850 --> 00:27:55,050 A što se maziti na leđima. 587 00:27:55,050 --> 00:27:57,080 Pa, nema šanse da bih mogao imati smisliti da na kvizu. 588 00:27:57,080 --> 00:28:00,470 No ja bih rekao, možete ako break to dolje u to individualno 589 00:28:00,470 --> 00:28:04,400 slučajevima i samo prošetati kroz nju Pažljivo, iako, doduše, pod 590 00:28:04,400 --> 00:28:06,300 stresnim okolnostima. 591 00:28:06,300 --> 00:28:09,470 >> Srećom, slike izrađene sve sretniji. 592 00:28:09,470 --> 00:28:11,050 Ti bi mogao privući to u bilo koji broj načina. 593 00:28:11,050 --> 00:28:12,760 Vi ne morate učiniti isprekrižane stvar ovdje. 594 00:28:12,760 --> 00:28:14,520 Mogao bi to učiniti s ravno linije kao što je ovaj. 595 00:28:14,520 --> 00:28:18,790 No, suština ovog problema, u Općenito, bila je da shvatite da 596 00:28:18,790 --> 00:28:22,060 slika je na kraju ipak izgleda malo nešto poput ovoga, jer je 597 00:28:22,060 --> 00:28:25,030 konstantno vrijeme podrazumijeva da zadržite ometanje i ometanje i ometanje 598 00:28:25,030 --> 00:28:29,900 novi čvorovi na početku popisa. 599 00:28:29,900 --> 00:28:31,960 Ima li pitanja? 600 00:28:31,960 --> 00:28:34,565 Vjerojatno najzahtjevnija Sigurno pitanja kodiranje. 601 00:28:34,565 --> 00:28:37,690 >> Ivanković: Pa je popis sličan glavu u prethodnim primjerima. 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 drugi naziv Globalna varijabla. 604 00:28:43,130 --> 00:28:44,380 Svjetski što? 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 Dakle, ovo je jedan gdje se morao napisati odlomak. 608 00:28:52,020 --> 00:28:56,060 Neki ljudi pisao eseje za ovo pitanje. 609 00:28:56,060 --> 00:29:00,230 Ali vi samo trebate koristiti tih šest uvjete opisati što se događa kada 610 00:29:00,230 --> 00:29:02,440 pokušate kontaktirati facebook.com. 611 00:29:02,440 --> 00:29:07,930 Dakle, ja ću samo razgovarati kroz proces koristeći sve ove uvjete. 612 00:29:07,930 --> 00:29:11,290 Dakle, u našem pregledniku, mi tip facebook.com i pritisnite Enter. 613 00:29:11,290 --> 00:29:17,280 Dakle, naš preglednik će konstruirati HTTP zatražiti da će poslati 614 00:29:17,280 --> 00:29:22,220 kroz neki proces na Facebooku za Facebook odgovoriti na nas 615 00:29:22,220 --> 00:29:24,450 HTML svoje stranice. 616 00:29:24,450 --> 00:29:28,800 >> Dakle, što je proces koji HTTP zahtjev 617 00:29:28,800 --> 00:29:30,730 zapravo dobiva na Facebook? 618 00:29:30,730 --> 00:29:32,790 Tako je prvi, moramo prevesti Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Tako je samo dao ime Facebook.com, gdje je zapravo HTTP zahtjev 620 00:29:38,780 --> 00:29:39,940 treba ići? 621 00:29:39,940 --> 00:29:44,120 Dakle, moramo prevesti Facebook.com za IP adresu, što je jedinstveno 622 00:29:44,120 --> 00:29:47,620 identificira ono što stroj mi zapravo želite poslati ovaj zahtjev. 623 00:29:47,620 --> 00:29:49,310 Vaše prijenosno računalo ima IP adresu. 624 00:29:49,310 --> 00:29:52,240 Bilo je spojen na internet ima IP adresu. 625 00:29:52,240 --> 00:29:59,030 >> Dakle, DNS, Domain Name System, koji je što će se nositi prijevod 626 00:29:59,030 --> 00:30:03,750 iz facebook.com na IP adresu koja što zapravo želite kontaktirati. 627 00:30:03,750 --> 00:30:08,075 Tako smo kontaktirati DNS servere recimo, ono što je facebook.com? 628 00:30:08,075 --> 00:30:16,560 Ona kaže, oh, to je IP adresa 190,212 nešto, nešto, nešto. 629 00:30:16,560 --> 00:30:16,900 U redu. 630 00:30:16,900 --> 00:30:18,850 Sada, ja znam što je za kavu Želim da se obratite. 631 00:30:18,850 --> 00:30:22,360 >> Pa onda vam poslati svoje HTTP zahtjev više na tom stroju. 632 00:30:22,360 --> 00:30:24,140 Pa kako se to dobiti na tom stroju? 633 00:30:24,140 --> 00:30:27,200 Pa, zahtjev odlazi iz usmjeritelju oscilacija. 634 00:30:27,200 --> 00:30:32,630 Zapamti primjer u razredu, gdje mi zapravo vidio put koji 635 00:30:32,630 --> 00:30:35,340 paketi uzeo kada smo pokušali komunicirati. 636 00:30:35,340 --> 00:30:38,460 Vidjeli smo da skok preko Atlantika Ocean je u jednom trenutku ili bilo što drugo. 637 00:30:38,460 --> 00:30:42,820 >> Tako posljednji termin port. 638 00:30:42,820 --> 00:30:46,520 Dakle, to je sada na vašem računalu. 639 00:30:46,520 --> 00:30:49,970 Možete imati više stvari trenutno komunikaciji s interneta. 640 00:30:49,970 --> 00:30:53,730 Dakle, ja mogu biti pokrenut, recimo, Skype. 641 00:30:53,730 --> 00:30:55,670 Možda ću imati internet preglednik otvoren. 642 00:30:55,670 --> 00:30:59,010 Možda imam nešto što torrenting datoteke. 643 00:30:59,010 --> 00:31:00,880 Dakle, sve ove stvari su komunikaciji s 644 00:31:00,880 --> 00:31:02,600 Internetu na neki način. 645 00:31:02,600 --> 00:31:08,070 >> Dakle, kada se računalo dobiva neke podatke s interneta, kako se to radi 646 00:31:08,070 --> 00:31:10,130 Znam što aplikacija zapravo želi podatke? 647 00:31:10,130 --> 00:31:12,610 Kako to znamo je li to posebno podaci namijenjeni 648 00:31:12,610 --> 00:31:16,070 torrenting primjenu, za razliku na web-preglednik? 649 00:31:16,070 --> 00:31:20,980 Dakle, to je svrha lukama u koje sve ove aplikacije imaju 650 00:31:20,980 --> 00:31:22,720 tvrdio priključka na vašem računalu. 651 00:31:22,720 --> 00:31:27,580 Dakle, vaš web preglednik, kaže, hej, Ja sam sluša na portu 1000. 652 00:31:27,580 --> 00:31:32,240 I vaš torrenting program govoreći, Ja sam sluša na portu 3000. 653 00:31:32,240 --> 00:31:34,770 I Skype kaže, ja sam koristeći port 4000. 654 00:31:34,770 --> 00:31:41,950 >> Dakle, kada ste dobili neke podatke koji pripada na jednu od tih aplikacija, podataka 655 00:31:41,950 --> 00:31:45,510 je obilježena koji port je to zapravo treba poslati zajedno. 656 00:31:45,510 --> 00:31:47,950 Dakle, to, kaže, oh, ja pripadam na port 1000. 657 00:31:47,950 --> 00:31:50,950 Znam onda moram proslijediti ovaj zajedno s mojim web pregledniku. 658 00:31:50,950 --> 00:31:56,440 Dakle, razlog je to relevantno ovdje je da web poslužitelji imaju tendenciju da 659 00:31:56,440 --> 00:31:58,240 slušati na portu 80. 660 00:31:58,240 --> 00:32:02,420 Dakle, kad sam kontaktirati Facebook.com, ja sam komunicira s nekim strojem. 661 00:32:02,420 --> 00:32:06,390 No, moram reći koji port koji Stroj želim komunicirati. 662 00:32:06,390 --> 00:32:09,160 I web poslužitelja imaju tendenciju da se sluša na portu 80. 663 00:32:09,160 --> 00:32:14,010 >> Ako su htjeli, mogli su ga postavili gore tako da se navodi kako je na portu 7000. 664 00:32:14,010 --> 00:32:19,090 A onda u web pregledniku, što sam mogao ručno upisati Facebook.com: 7000 665 00:32:19,090 --> 00:32:24,600 slanje zahtjeva za priključak 7000 Facebook web poslužitelja. 666 00:32:24,600 --> 00:32:26,820 >> David J. Malan: I u ovom slučaju, čak i iako mi nije potrebno da se ljudi 667 00:32:26,820 --> 00:32:30,000 Spominjem to, u ovom slučaju, ono što luka će zahtjev zapravo ići? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Pokušajte ponovno. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Točno. 672 00:32:44,300 --> 00:32:47,960 Ne traži da, ali suptilnost da je tamo nitko posljednja. 673 00:32:47,960 --> 00:32:51,770 >> ROB Bowden: Dakle HTTPS, budući da je slušanje posebno za 674 00:32:51,770 --> 00:32:55,180 kodiran, to je na portu 4430. 675 00:32:55,180 --> 00:32:57,680 >> Publika: i e-mailove su 25, zar ne? 676 00:32:57,680 --> 00:33:00,670 >> David J. Malan: Izlazni e-mailove, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> ROB Bowden: Ja ne znam ni većina - sve donjih imaju tendenciju da se 678 00:33:03,760 --> 00:33:06,310 rezervirana za stvari. 679 00:33:06,310 --> 00:33:09,260 Mislim da je sve pod 1024 je rezerviran. 680 00:33:09,260 --> 00:33:13,450 >> Ivanković: Zašto ste rekli 3 bio pogrešan broj? 681 00:33:13,450 --> 00:33:18,820 >> ROB Bowden: Zato što je u IP adrese, ima četiri grupacije znamenki. 682 00:33:18,820 --> 00:33:21,090 I oni su od 0 do 255.. 683 00:33:21,090 --> 00:33:28,060 Tako da je zajednička 192.168.2.1 lokalna mreža IP adresa. 684 00:33:28,060 --> 00:33:30,840 Obavijest svima su manje od 255.. 685 00:33:30,840 --> 00:33:33,570 Dakle, kada sam počeo sa 300, da nikako ne može imati 686 00:33:33,570 --> 00:33:35,210 bio jedan od brojeva. 687 00:33:35,210 --> 00:33:38,170 >> David J. Malan: Ali to glupo clip od - bio je CSI, gdje su imali 688 00:33:38,170 --> 00:33:39,970 broj koji je bio prevelik za IP adresu. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB Bowden: Bilo kakva pitanja o tome? 691 00:33:46,110 --> 00:33:51,710 Sljedeći, tako potpuna promjena topic, ali mi imamo tu PHP polje za 692 00:33:51,710 --> 00:33:53,270 kuće u quad. 693 00:33:53,270 --> 00:33:56,360 A imamo neuređen popis. 694 00:33:56,360 --> 00:33:59,550 I želimo ispisati svaku stavku popisa Samo sadrži naziv kuću. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Tako imamo foreach petlju. 697 00:34:11,870 --> 00:34:17,540 Tako zapamtite, sintaksa je foreach Niz kao stavku u nizu. 698 00:34:17,540 --> 00:34:22,360 Dakle, kroz svaku iteraciju petlje, Kuća se događa da se na jednom od 699 00:34:22,360 --> 00:34:24,060 Vrijednosti unutrašnjost niza. 700 00:34:24,060 --> 00:34:26,530 >> Na prvoj iteraciji kući će biti Cabot House. 701 00:34:26,530 --> 00:34:30,370 Na drugoj iteraciji, kuća će biti Courier House i tako dalje. 702 00:34:30,370 --> 00:34:34,370 Dakle, za svaki quad kao kuće, mi smo Samo će ispisati - 703 00:34:34,370 --> 00:34:37,250 Također može imati odjek - 704 00:34:37,250 --> 00:34:42,199 stavku popisa, a potom ime doma parlamenta a zatim zatvorite stavku popisa. 705 00:34:42,199 --> 00:34:45,210 U vitičastim zagradama su opcija ovdje. 706 00:34:45,210 --> 00:34:49,480 >> I onda mi je također rekao u pitanje sama, ne zaboravite zatvoriti 707 00:34:49,480 --> 00:34:50,770 Popis bez rednih brojeva tag. 708 00:34:50,770 --> 00:34:53,949 Zato nam je potrebno za izlazak iz PHP modu kako bi to učinili. 709 00:34:53,949 --> 00:35:00,280 Ili smo mogli su odjekivali zatvoriti Popis bez rednih brojeva oznaku. 710 00:35:00,280 --> 00:35:02,380 >> David J. Malan: Isto tako u redu ovdje bi su koristiti staru školu 711 00:35:02,380 --> 00:35:07,340 Petlja s $ i = 0 0 i pomoću broji do shvatiti duljinu zrake. 712 00:35:07,340 --> 00:35:09,240 Totalno redu previše, samo Malo wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> PUBLIKA: Dakle, ako ste bili će se [Nečujan], bi li to - 715 00:35:14,742 --> 00:35:16,734 I zaboraviti ono loop [nečujan] je. 716 00:35:16,734 --> 00:35:21,380 Biste li $ quad nosač sam? 717 00:35:21,380 --> 00:35:21,850 >> David J. Malan: Točno. 718 00:35:21,850 --> 00:35:23,100 Da, točno. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB Bowden: Bilo što drugo? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> David J. Malan: U redu. 723 00:35:32,010 --> 00:35:32,300 Kompromisi. 724 00:35:32,300 --> 00:35:38,290 Tako je bilo trsovi odgovora moguće za svaki od njih. 725 00:35:38,290 --> 00:35:40,510 Mi stvarno su samo u potrazi za nešto uvjerljiviji za naglavce i 726 00:35:40,510 --> 00:35:41,100 downside. 727 00:35:41,100 --> 00:35:44,830 I broj 16 upita potvrđivanju korisnik ' Ulaz na strani klijenta, kao i sa JavaScript, 728 00:35:44,830 --> 00:35:47,280 umjesto na strani poslužitelja, kao što je s PHP. 729 00:35:47,280 --> 00:35:49,450 Dakle, ono što je naopako radi na strani klijenta? 730 00:35:49,450 --> 00:35:53,780 >> Pa, jedna od stvari koje mi se predloženim da se smanji latencije, jer vam 731 00:35:53,780 --> 00:35:56,750 ne morate zamarati kontaktiranja poslužitelja, što bi moglo potrajati nekoliko 732 00:35:56,750 --> 00:36:00,390 milisekundi ili čak par sekundi izbjegavanjem da se i samo 733 00:36:00,390 --> 00:36:04,670 potvrđivanju korisnika ulazni strani klijenta po pokreće on-predati rukovatelj a 734 00:36:04,670 --> 00:36:06,650 samo provjera, jesu li upisati nešto za ime? 735 00:36:06,650 --> 00:36:08,080 Jesu li nešto tipa u za e-mail adresu? 736 00:36:08,080 --> 00:36:10,950 Jesu li odabrati spavaonica s padajućem izborniku? 737 00:36:10,950 --> 00:36:14,360 >> Možete im dati trenutnu povratnu informaciju pomoću gigaherca računalo 738 00:36:14,360 --> 00:36:16,770 ili što su to zapravo na njihovom stolu. 739 00:36:16,770 --> 00:36:19,310 Dakle, to je samo bolje korisničko iskustvo obično. 740 00:36:19,310 --> 00:36:24,460 Ali downside rade na strani klijenta valjanosti, ako to učiniti, a da pritom 741 00:36:24,460 --> 00:36:29,860 radi server-side validacije je da većina svatko tko dolazi iz CS50 zna 742 00:36:29,860 --> 00:36:33,980 koje možete jednostavno poslati sve podatke koje želite na poslužitelj bilo koji broj načina. 743 00:36:33,980 --> 00:36:37,030 Iskreno, u većini bilo pregledniku, možete kliknite okolo u postavkama i samo 744 00:36:37,030 --> 00:36:40,110 isključite JavaScript, koji bi, Stoga, onemogućiti bilo kakav oblik 745 00:36:40,110 --> 00:36:41,080 valjanosti. 746 00:36:41,080 --> 00:36:44,460 >> No, možda ćete se sjetiti da je čak i sam učinio neke tajanstvene stvari u klasi pomoću 747 00:36:44,460 --> 00:36:47,790 telnet i zapravo pretvara da biti u preglednik slanjem get 748 00:36:47,790 --> 00:36:49,240 zahtjeva na poslužitelju. 749 00:36:49,240 --> 00:36:51,030 A to sigurno nije korištenja bilo JavaScript. 750 00:36:51,030 --> 00:36:53,290 To sam samo ja tipkati naredbe na tipkovnici. 751 00:36:53,290 --> 00:36:57,410 Pa stvarno, bilo programer roku dovoljno comfort s weba i HTTP 752 00:36:57,410 --> 00:37:01,690 mogao poslati god data on ili ona ne želi na poslužitelj bez odobrenja. 753 00:37:01,690 --> 00:37:05,470 A ako je vaš poslužitelj ne i pravopisa, jesu li mi dati ime, je 754 00:37:05,470 --> 00:37:08,930 to zapravo valjana email adresa, učinio oni izabrati spavaonica, možda ćete završiti 755 00:37:08,930 --> 00:37:12,800 do umetanja lažna ili samo prazno podataka u bazu podataka, što je vjerojatno 756 00:37:12,800 --> 00:37:15,450 ne će biti dobra stvar ako se što su pod pretpostavkom da je bio tamo. 757 00:37:15,450 --> 00:37:16,770 >> Dakle, ovo je neugodno stvarnost. 758 00:37:16,770 --> 00:37:19,890 No, općenito, na strani klijenta valjanosti je super. 759 00:37:19,890 --> 00:37:21,810 No, to znači dvostruko više posla. 760 00:37:21,810 --> 00:37:25,970 Iako postoje postoje razne biblioteke, JavaScript knjižnice za 761 00:37:25,970 --> 00:37:28,830 Primjerice, da bi to puno, mnogo manje od glavobolje. 762 00:37:28,830 --> 00:37:31,940 I vi možete ponovno neke od koda server-side, na strani klijenta. 763 00:37:31,940 --> 00:37:35,980 No, ne shvaćaju da je to obično dodatni rad. 764 00:37:35,980 --> 00:37:36,415 Da. 765 00:37:36,415 --> 00:37:37,792 >> Ivanković: Pa, ako smo upravo , rekao je manje siguran - 766 00:37:37,792 --> 00:37:39,205 >> David J. Malan: [smijeh] 767 00:37:39,205 --> 00:37:39,680 Uh. 768 00:37:39,680 --> 00:37:43,105 Oni su uvijek teže one da sude. 769 00:37:43,105 --> 00:37:44,480 >> ROB Bowden: To bi su prihvaćeni. 770 00:37:44,480 --> 00:37:44,810 >> David J. Malan: Što? 771 00:37:44,810 --> 00:37:45,810 >> ROB Bowden: Ja sam stvorio ovaj problem. 772 00:37:45,810 --> 00:37:46,735 To bi bio prihvaćen. 773 00:37:46,735 --> 00:37:47,220 >> David J. Malan: Da. 774 00:37:47,220 --> 00:37:47,830 >> PUBLIKA: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB Bowden: Ali mi nije prihvatio za prvi - 776 00:37:51,770 --> 00:37:53,630 dobro, ono što smo tražili je nešto poput tebe ne moram 777 00:37:53,630 --> 00:37:55,270 komunicirati s poslužiteljem. 778 00:37:55,270 --> 00:37:58,355 Nismo prihvatiti samo brže. 779 00:37:58,355 --> 00:38:00,080 >> PUBLIKA: Što je s ne reload stranicu? 780 00:38:00,080 --> 00:38:00,430 >> ROB Bowden: Da. 781 00:38:00,430 --> 00:38:03,000 To je bio prihvaćen odgovor. 782 00:38:03,000 --> 00:38:06,300 >> David J. Malan: Bilo gdje smo se osjećali to je više nego vjerojatno nije vjerojatno 783 00:38:06,300 --> 00:38:09,780 da ste znali što ste bili govoreći, što je teška 784 00:38:09,780 --> 00:38:13,500 linija za crtanje ponekad. 785 00:38:13,500 --> 00:38:16,000 Korištenje popisa povezan umjesto od niza za održavanje 786 00:38:16,000 --> 00:38:17,590 razvrstani popis brojeva. 787 00:38:17,590 --> 00:38:21,000 Dakle upside često citiraju s povezani popisi, koji su motivirani svoju cjelinu 788 00:38:21,000 --> 00:38:22,370 uvod je dobiti dinamičnost. 789 00:38:22,370 --> 00:38:23,030 Oni mogu rasti. 790 00:38:23,030 --> 00:38:23,950 Oni mogu smanjiti. 791 00:38:23,950 --> 00:38:27,370 Dakle, ne morate skočiti kroz obruč to zapravo stvoriti više memorije 792 00:38:27,370 --> 00:38:28,140 s nizom. 793 00:38:28,140 --> 00:38:30,310 Ili ne morate samo kažu, žao, korisnik. 794 00:38:30,310 --> 00:38:31,410 Niz je ispunjen. 795 00:38:31,410 --> 00:38:35,850 Dakle, dinamičan rast na popisu. 796 00:38:35,850 --> 00:38:37,210 Downside iako povezanih popisima? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> Ivanković: To je linearno. 799 00:38:43,356 --> 00:38:45,800 Pretraživanje na povezanom popisu je linearna umjesto što se prijavite u. 800 00:38:45,800 --> 00:38:46,360 >> David J. Malan: Točno. 801 00:38:46,360 --> 00:38:50,160 Pretraživanje na popisu povezan je linearna, čak i ako je to riješeno, jer možete 802 00:38:50,160 --> 00:38:53,170 samo slijedite ove krušne mrvice, te upućuje, od početka popisa 803 00:38:53,170 --> 00:38:53,570 na kraju. 804 00:38:53,570 --> 00:38:57,970 Ne možete utjecati slučajni pristup i, dakle, binarno pretraživanje, čak i ako je 805 00:38:57,970 --> 00:39:00,740 razvrstani, da bi mogao učiniti s nizom. 806 00:39:00,740 --> 00:39:02,390 A tu je i još jedan trošak. 807 00:39:02,390 --> 00:39:02,966 Da. 808 00:39:02,966 --> 00:39:03,800 >> PUBLIKA: Memorija neučinkovita? 809 00:39:03,800 --> 00:39:04,130 >> David J. Malan: Da. 810 00:39:04,130 --> 00:39:06,940 Pa, ja ne bi nužno kažu neučinkovita. 811 00:39:06,940 --> 00:39:10,110 No, to se vas koštati više memorije, jer vam je potrebno 32 bita za svaki 812 00:39:10,110 --> 00:39:13,400 čvor za dodatne pointer, na Barem za popis na pojedinačno povezana. 813 00:39:13,400 --> 00:39:16,660 Sada, ako ste samo spremanje cijele brojeve dodajete pokazivač, koji je 814 00:39:16,660 --> 00:39:17,830 zapravo vrsta ne-beznačajan. 815 00:39:17,830 --> 00:39:19,340 To je udvostručenje količine memorije. 816 00:39:19,340 --> 00:39:22,330 No, u stvarnosti, ako ste spremanje povezani popis tvorevina, koje bi mogle imati 817 00:39:22,330 --> 00:39:25,540 8 bajta, 16 bajtova, čak i više od toga, možda je manje 818 00:39:25,540 --> 00:39:26,500 od graničnog troška. 819 00:39:26,500 --> 00:39:28,320 No, to je ipak trošak. 820 00:39:28,320 --> 00:39:31,880 Dakle, bilo je onih koji bi mi bio u redu kao mane. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Koristeći PHP umjesto C pisati Program naredbenog retka. 823 00:39:36,100 --> 00:39:41,890 Dakle, ovdje, to je često brži za korištenje jezik poput PHP ili Ruby i Python. 824 00:39:41,890 --> 00:39:43,700 Vi samo brzo otvaranje do uređivač teksta. 825 00:39:43,700 --> 00:39:45,900 Imate mnogo više funkcija dostupne za vas. 826 00:39:45,900 --> 00:39:49,325 PHP ima sudopera funkcija, dok je u C, što 827 00:39:49,325 --> 00:39:50,420 imaju vrlo, vrlo malo. 828 00:39:50,420 --> 00:39:53,820 Naime, dečki znaju na teži način da nemate hash tablice. 829 00:39:53,820 --> 00:39:55,000 Ne povezalo liste. 830 00:39:55,000 --> 00:39:57,470 Ako želite onima, morate implementirati ih sami. 831 00:39:57,470 --> 00:40:00,950 >> Dakle, jedan naopako PHP ili stvarno bilo tumačiti jezik je brzina 832 00:40:00,950 --> 00:40:02,920 s kojima možete napisati kod. 833 00:40:02,920 --> 00:40:06,660 No, minus, vidjeli smo to kada sam brzo tučeno gore misspeller 834 00:40:06,660 --> 00:40:11,780 Provedba je u predavanju koristeći PHP, je da je korištenje interpretativnom jeziku 835 00:40:11,780 --> 00:40:13,570 je obično sporiji. 836 00:40:13,570 --> 00:40:18,420 A vidjeli smo da je dokazivo s povećati u vremenu od 0,3 sekunde do 3 837 00:40:18,420 --> 00:40:24,440 sekunde, zbog tumačenja koji se zapravo događa. 838 00:40:24,440 --> 00:40:27,060 >> Drugi naopako je da vam ne moraju sastaviti. 839 00:40:27,060 --> 00:40:30,130 Dakle, to je također ubrzava razvoj usput, jer nemate 840 00:40:30,130 --> 00:40:31,360 Dva koraka za pokretanje programa. 841 00:40:31,360 --> 00:40:32,140 Potrebno je samo jedno. 842 00:40:32,140 --> 00:40:35,260 I to je lijepo uvjerljiv kao dobro. 843 00:40:35,260 --> 00:40:38,450 Korištenje SQL baze podataka, umjesto CSV datoteka za pohranu podataka. 844 00:40:38,450 --> 00:40:40,230 Dakle, SQL baza podataka koristi se za pset7. 845 00:40:40,230 --> 00:40:42,060 CSV datoteke koje ne koriste mnogo. 846 00:40:42,060 --> 00:40:45,960 No, što to koristi neizravno u pset7 kao i razgovarajući s Yahoo financija. 847 00:40:45,960 --> 00:40:49,330 >> Ali CSV je baš kao i Excel datoteke, ali super jednostavna, gdje su stupci 848 00:40:49,330 --> 00:40:54,010 Samo nika zarezom unutar jednog na drugi način tekstualnu datoteku. 849 00:40:54,010 --> 00:40:56,740 I pomoću SQL baze podataka je malo više uvjerljiv. 850 00:40:56,740 --> 00:41:00,060 To je naglavačke, jer ste dobili stvari kao i odabir i umetanje i brisanje. 851 00:41:00,060 --> 00:41:03,790 A što se, po svoj prilici, kazala da je MySQL i druge baze podataka, kao što su 852 00:41:03,790 --> 00:41:07,510 Oracle, graditi za vas u memoriji, što znači tvoj odabir vjerojatno nije 853 00:41:07,510 --> 00:41:09,000 će biti linearan od vrha do dna. 854 00:41:09,000 --> 00:41:11,300 To zapravo će biti nešto kao binarni pretraživanje ili nešto 855 00:41:11,300 --> 00:41:12,520 slični u duhu. 856 00:41:12,520 --> 00:41:13,930 Dakle, oni su u pravilu brže. 857 00:41:13,930 --> 00:41:16,040 >> No, minus je da to je samo više posla. 858 00:41:16,040 --> 00:41:16,730 To je više truda. 859 00:41:16,730 --> 00:41:18,140 Morate razumjeti baze podataka. 860 00:41:18,140 --> 00:41:18,940 Morate ga postaviti. 861 00:41:18,940 --> 00:41:20,840 Trebaš poslužitelj za pokretanje da je baza podataka o. 862 00:41:20,840 --> 00:41:22,750 Morate razumjeti kako ga konfigurirati. 863 00:41:22,750 --> 00:41:24,930 Dakle, to su samo ovi vrste ustupaka. 864 00:41:24,930 --> 00:41:27,860 Dok CSV datoteku, možete stvoriti ga s gedit. 865 00:41:27,860 --> 00:41:28,770 A ti si dobar to ići. 866 00:41:28,770 --> 00:41:31,550 Nema složenosti izvan toga. 867 00:41:31,550 --> 00:41:34,870 >> Korištenje trie umjesto hash tablicu sa zasebnim ulančavanje za pohranu 868 00:41:34,870 --> 00:41:37,490 rječnik riječi podsjećaju od pset5. 869 00:41:37,490 --> 00:41:42,480 Dakle, pokušava naglavačke, u teoriji barem je ono? 870 00:41:42,480 --> 00:41:46,380 Stalno vrijeme, barem ako ste raspršivanja na svaki od pojedinačnih 871 00:41:46,380 --> 00:41:48,990 slova u riječi, kao ti možda za pset5. 872 00:41:48,990 --> 00:41:52,720 To bi moglo biti pet Skosan, šest sasjecka ako postoji pet ili šest 873 00:41:52,720 --> 00:41:53,900 slova u riječi. 874 00:41:53,900 --> 00:41:54,580 I to je jako dobro. 875 00:41:54,580 --> 00:41:56,910 A ako postoji gornja granica na tome dugo vaše riječi može biti, to je 876 00:41:56,910 --> 00:41:59,320 dapače asimptotski konstantna vrijeme. 877 00:41:59,320 --> 00:42:05,180 >> Dok hash tablicu s odvojenim ulančavanje, problem postoji s tim 878 00:42:05,180 --> 00:42:09,070 vrsta strukture podataka da obavljanje svojih algoritama obično 879 00:42:09,070 --> 00:42:12,700 ovisi o broju stvari Već u strukturu podataka. 880 00:42:12,700 --> 00:42:15,660 I to je definitivno slučaj s lanaca, pri čemu više stvari ste stavili 881 00:42:15,660 --> 00:42:18,800 u hash tablicu, više onih lanci idu, što znači da je u najgorem 882 00:42:18,800 --> 00:42:21,960 slučaj, što bi moglo biti u potrazi za je sve na kraju jednog 883 00:42:21,960 --> 00:42:26,000 tih lanaca, koji učinkovito devolves u nešto linearno. 884 00:42:26,000 --> 00:42:29,450 >> Sada, u praksi, to bi apsolutno biti slučaj da hash tablicu s 885 00:42:29,450 --> 00:42:32,820 lanci je brže nego što odgovara Provedba trie. 886 00:42:32,820 --> 00:42:35,570 No, to je zbog raznih razloga, među koji se pokušava koristiti puno 887 00:42:35,570 --> 00:42:39,240 memorije koja se, u stvari, spore stvari dolje, jer ne bi bilo lijepo 888 00:42:39,240 --> 00:42:42,410 Prednosti nešto što se zove caching, gdje se stvari koje su blizu jedna drugoj 889 00:42:42,410 --> 00:42:45,420 u memoriji može se pristupiti Često brže. 890 00:42:45,420 --> 00:42:48,180 A ponekad možete smisliti stvarno dobra funkcija ljestve. 891 00:42:48,180 --> 00:42:51,060 Čak i ako imate gubiti malo memorija, što bi se, doista, biti u stanju 892 00:42:51,060 --> 00:42:54,430 naći stvari brzo i ne tako loše kao linearno. 893 00:42:54,430 --> 00:42:58,410 >> Dakle, ukratko, nije bilo nužno s bilo koje od tih jedan ili čak dva 894 00:42:58,410 --> 00:43:00,050 određene stvari koje su tražili. 895 00:43:00,050 --> 00:43:03,080 Stvarno ništa uvjerljiv kao naopako i minus 896 00:43:03,080 --> 00:43:04,800 uglavnom uhvaćen naše oči. 897 00:43:04,800 --> 00:43:11,840 >> ROB Bowden: Pa za naopako, jesmo Ne prihvaćam na vlastitu "brži". Vi 898 00:43:11,840 --> 00:43:14,540 imao za reći nešto o tome. 899 00:43:14,540 --> 00:43:17,910 Čak i ako je rekao teoretski brži, znali smo da vrsta razumio 900 00:43:17,910 --> 00:43:19,470 da je 0 od 1. 901 00:43:19,470 --> 00:43:22,820 I hash tablicu, u teoriji, nije 0 od 1. 902 00:43:22,820 --> 00:43:26,550 Spominjući ništa o izvršavanja uglavnom imaš bodova. 903 00:43:26,550 --> 00:43:32,640 No, "brži", većina rješenja o velika ploča koje su pokušaja bila 904 00:43:32,640 --> 00:43:34,990 objektivno sporiji od rješenja da su hash tablice. 905 00:43:34,990 --> 00:43:37,250 Dakle brže i sama zapravo nije istina. 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 Ja sam vjerojatno jedini koji shvaća to je kako da je trebao 909 00:43:46,686 --> 00:43:47,500 se izgovara, zar ne? 910 00:43:47,500 --> 00:43:50,400 >> ROB Bowden: Nisam imao zapravo pojma. 911 00:43:50,400 --> 00:43:51,650 >> David J. Malan: To je napravio smisla u mojoj glavi. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB Bowden: Radim ovaj jedan. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Dakle, ovo je jedan gdje se morala povući Dijagram slično što možda 916 00:44:04,243 --> 00:44:06,040 vidjeli na prošlim ispitima. 917 00:44:06,040 --> 00:44:12,200 Tako ćemo samo gledati na to. 918 00:44:12,200 --> 00:44:18,170 Dakle iz HTML čvora, imamo dva djeca, glava i tijelo. 919 00:44:18,170 --> 00:44:20,570 Tako smo se grana - glavu i tijelo. 920 00:44:20,570 --> 00:44:22,280 Glava ima više oznaka. 921 00:44:22,280 --> 00:44:23,710 Dakle, imamo titulu. 922 00:44:23,710 --> 00:44:28,450 >> Sada, jedna je stvar puno ljudi Zaboravila je da su ti tekst čvorovi 923 00:44:28,450 --> 00:44:30,430 elementi unutar tog stabla. 924 00:44:30,430 --> 00:44:36,260 Dakle, ovdje mi se dogoditi da ih izvući što ovala kako bi ih se razlikovalo od njih 925 00:44:36,260 --> 00:44:37,380 vrste čvorova. 926 00:44:37,380 --> 00:44:41,450 No, obavijest i ovdje imamo krov, srednji i donji će završiti kao 927 00:44:41,450 --> 00:44:42,560 tekst čvorovi. 928 00:44:42,560 --> 00:44:46,250 Dakle, zaboravljajući one bio nešto zajedničke pogreške. 929 00:44:46,250 --> 00:44:48,770 >> Tijelo ima troje djece - ove tri divs. 930 00:44:48,770 --> 00:44:53,340 Dakle, div, div, div, a zatim tekst čvora djeca tih divs. 931 00:44:53,340 --> 00:44:55,900 To je uglavnom to za to pitanja. 932 00:44:55,900 --> 00:44:57,860 >> David J. Malan: I to je vrijedno napomenuti, iako mi ne razmišljati o njima 933 00:44:57,860 --> 00:45:01,040 detalji u vrijeme trošimo na JavaScript, da je nalog radi, u 934 00:45:01,040 --> 00:45:02,290 Činjenica, stvar je tehnički. 935 00:45:02,290 --> 00:45:06,330 Dakle, ako je glava u pitanju prije tijela u HTML, onda bi se trebao pojaviti na 936 00:45:06,330 --> 00:45:08,860 lijevo od tijela u stvarnom DOM. 937 00:45:08,860 --> 00:45:12,265 Taj njegov je, u cjelini, samo FYI, nešto što se zove kako bi dokument, u kojem 938 00:45:12,265 --> 00:45:13,260 to ne obzira. 939 00:45:13,260 --> 00:45:17,470 I ako se provodi parser, Program koji čita HTML u zgradi 940 00:45:17,470 --> 00:45:20,960 do stabla u memoriji, da budem iskren, to je vjerojatno ono što intuitivno 941 00:45:20,960 --> 00:45:24,720 svejedno - od vrha do dna, lijeva na desno. 942 00:45:24,720 --> 00:45:26,116 >> ROB Bowden: Pitanja o tome? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Trebam li napraviti sljedeći? 945 00:45:30,000 --> 00:45:32,380 >> David J. Malan: Svakako. 946 00:45:32,380 --> 00:45:33,810 >> ROB Bowden: OK. 947 00:45:33,810 --> 00:45:39,320 Dakle, ovo je tampon prekoračenje Napad pitanje. 948 00:45:39,320 --> 00:45:43,740 Glavna stvar je da prepoznaju ovdje je, dobro, kako bi mogli protivnik trik 949 00:45:43,740 --> 00:45:46,170 ovaj program u izvršavanju proizvoljnog koda? 950 00:45:46,170 --> 00:45:51,860 Dakle argv1, prva naredbenog retka Argument za ovaj program, koji može biti 951 00:45:51,860 --> 00:45:53,920 proizvoljno dugo. 952 00:45:53,920 --> 00:45:59,160 Ali ovdje smo pomoću memcpy kopirati argv1, koja je ovdje bar. 953 00:45:59,160 --> 00:46:00,165 Mi smo to prolazi kao argument. 954 00:46:00,165 --> 00:46:02,050 I tako to traje na ime bara. 955 00:46:02,050 --> 00:46:08,040 >> Tako smo memcpying bar u ovoj tampon c. 956 00:46:08,040 --> 00:46:09,400 Koliko bajta su kopiramo? 957 00:46:09,400 --> 00:46:14,040 Pa ipak su mnogi bajtova bar se događa se koriste, dužinu tog argumenta. 958 00:46:14,040 --> 00:46:17,930 No, c je širok samo 12 bajtova. 959 00:46:17,930 --> 00:46:22,280 Dakle, ako mi tip naredbe argument je to je više od 12 bajtova, mi smo 960 00:46:22,280 --> 00:46:25,470 će se preliti ta Posebno tampon. 961 00:46:25,470 --> 00:46:31,000 Sada, kako bi mogli protivnik trik programirati u izvršavanju proizvoljnog koda? 962 00:46:31,000 --> 00:46:34,910 >> Dakle, ne zaboravite da je ovdje Glavni zove foo. 963 00:46:34,910 --> 00:46:37,340 I tako onda glavni pozivi Foo. 964 00:46:37,340 --> 00:46:40,408 Idemo nacrtali ovo. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Dakle, mi imamo hrpu. 967 00:46:46,990 --> 00:46:49,090 A glavna ima stog okvir na dnu. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 U nekom trenutku, glavni pozivi Foo. 970 00:46:53,250 --> 00:46:55,390 Pa, odmah, glavni pozivi Foo. 971 00:46:55,390 --> 00:46:57,130 I tako Foo dobiva svoj stack okvir. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Sada, u nekom trenutku, Foo će se vratiti. 974 00:47:02,220 --> 00:47:06,810 I otišao foo vraća, moramo znati na što linija koda unutar osnovnog mi 975 00:47:06,810 --> 00:47:10,610 su kako bi znali gdje trebamo nastaviti u glavnom. 976 00:47:10,610 --> 00:47:13,100 Mi možemo nazvati Foo iz cjeline hrpa različitih mjesta. 977 00:47:13,100 --> 00:47:14,620 Kako znamo gdje da se vrate? 978 00:47:14,620 --> 00:47:16,460 Pa, moramo spremiti tu negdje. 979 00:47:16,460 --> 00:47:23,010 >> Dakle, negdje u pravu ovdje, možemo pohraniti gdje smo trebali vratiti u jednom 980 00:47:23,010 --> 00:47:24,070 Foo vraća. 981 00:47:24,070 --> 00:47:26,350 A to je povratna adresa. 982 00:47:26,350 --> 00:47:30,490 Pa kako protivnik mogla iskoristiti to je činjenica da se 983 00:47:30,490 --> 00:47:37,550 to tampon c je pohranjena, neka je kažu, ovdje je c. 984 00:47:37,550 --> 00:47:39,690 Dakle, mi smo dobili za C12 bajtova. 985 00:47:39,690 --> 00:47:40,540 To je c. 986 00:47:40,540 --> 00:47:43,030 A to je Foo je stog prsten. 987 00:47:43,030 --> 00:47:49,970 Dakle, ako zlonamjerni korisnik unese više bajtova od 12 ili uđu naredbu 988 00:47:49,970 --> 00:47:54,570 linija argument da je više od 12 likovi, onda ćemo 989 00:47:54,570 --> 00:47:57,540 prelijevati ovu tampon. 990 00:47:57,540 --> 00:47:59,910 >> Možemo zadržati ide. 991 00:47:59,910 --> 00:48:02,220 I u nekom trenutku, možemo daleko dogurati dovoljno da počnemo 992 00:48:02,220 --> 00:48:05,120 prepisati ovu povratnu adresu. 993 00:48:05,120 --> 00:48:08,310 Dakle, nakon što smo prebrisati povratnu adresu, To znači da kad Foo 994 00:48:08,310 --> 00:48:14,220 vraća, Vraćamo se gdje god zlonamjerni korisnik to govori da se po 995 00:48:14,220 --> 00:48:19,490 bez obzira na vrijednost što je ušao, koji god likovi korisnik unio. 996 00:48:19,490 --> 00:48:24,320 I tako, ako zlonamjerni korisnik bude osobito pametan, on može imati ovo 997 00:48:24,320 --> 00:48:29,255 vratiti u negdje u printDef funkcija ili negdje u malloc 998 00:48:29,255 --> 00:48:31,830 funkcija, samo nigdje proizvoljna. 999 00:48:31,830 --> 00:48:38,420 >> No, čak i više pametan je, što ako on ima Korisnik se vratiti u pravu ovdje. 1000 00:48:38,420 --> 00:48:41,920 I onda počnete izvršavanju to što je linija koda. 1001 00:48:41,920 --> 00:48:46,610 Dakle, u tom trenutku, korisnik može unijeti što god želi u ovoj regiji. 1002 00:48:46,610 --> 00:48:52,210 I on ima potpunu kontrolu preko svog programa. 1003 00:48:52,210 --> 00:48:53,460 Pitanja o tome? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Dakle, sljedeće pitanje je završena reimplementation foo tako 1006 00:49:00,970 --> 00:49:02,620 da to više nije ranjiv. 1007 00:49:02,620 --> 00:49:03,870 >> Dakle, postoji nekoliko načina mogao si to učinio. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Mi još uvijek imamo samo c biti duljine 12. 1010 00:49:13,330 --> 00:49:16,480 Moglo bi se promijenila ova kao dio svoje rješenje. 1011 00:49:16,480 --> 00:49:18,930 Također, dodao je provjeriti kako bi sigurno bar nije bilo null. 1012 00:49:18,930 --> 00:49:24,460 Iako vam ne treba da je za puni kredit. 1013 00:49:24,460 --> 00:49:27,690 Tako smo provjeru prvi duljine od bara. 1014 00:49:27,690 --> 00:49:31,650 Ako je veći od 12, a zatim ne zapravo napraviti kopiju. 1015 00:49:31,650 --> 00:49:33,010 Dakle, to je jedan od načina kako to srediti. 1016 00:49:33,010 --> 00:49:36,750 >> Drugi način je popravljajući je, umjesto ima C biti samo dužine 12, da ga 1017 00:49:36,750 --> 00:49:39,310 biti duljine strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Drugi način je popravljajući je to zapravo samo vratiti. 1019 00:49:43,370 --> 00:49:46,690 Dakle, ako ste upravo stečen osloboditi od svih to, ako ste upravo izbrisati sve 1020 00:49:46,690 --> 00:49:51,830 linija koda, što bi dobio u punom iznosu, od ove funkcije 1021 00:49:51,830 --> 00:49:54,150 ne zapravo ostvariti ništa. 1022 00:49:54,150 --> 00:49:57,650 To je kopiranje naredbenog retka Argument u neki niz u 1023 00:49:57,650 --> 00:49:59,960 njezin lokalni okvir stack. 1024 00:49:59,960 --> 00:50:01,310 I onda što se vraća. 1025 00:50:01,310 --> 00:50:04,020 I sve što je ostvario je otišao. 1026 00:50:04,020 --> 00:50:09,740 Dakle, povratak je bio dovoljan način dobivanja puni kredit. 1027 00:50:09,740 --> 00:50:13,425 >> David J. Malan: Ne sasvim duh pitanje, ali prihvatljivo po 1028 00:50:13,425 --> 00:50:15,580 spec. svejedno. 1029 00:50:15,580 --> 00:50:18,260 >> ROB Bowden: Pitanja na bilo što od toga? 1030 00:50:18,260 --> 00:50:22,270 Jedna stvar koju barem potreban da bi se kod sastavljanja. 1031 00:50:22,270 --> 00:50:24,810 Dakle, iako je tehnički niste ranjiv ako vaš broj ne 1032 00:50:24,810 --> 00:50:29,130 sastaviti, nismo prihvatili da. 1033 00:50:29,130 --> 00:50:31,350 Nema pitanja? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> David J. Malan: Želite li reći ovaj naslov? 1036 00:50:34,580 --> 00:50:37,230 >> ROB Bowden: Ne. 1037 00:50:37,230 --> 00:50:40,470 >> David J. Malan: Pa u tom jednom, ovaj je bilo dobre vijesti ili loše vijesti. 1038 00:50:40,470 --> 00:50:43,870 To je doslovce isti problem kao prvi kviz. 1039 00:50:43,870 --> 00:50:46,140 I to je gotovo isto Problem kao pset1. 1040 00:50:46,140 --> 00:50:49,980 Ali, to je namjerno pojednostavljen kako bi se jednostavnije piramide, koji može biti 1041 00:50:49,980 --> 00:50:52,330 riješiti s nešto jednostavnije iteracija. 1042 00:50:52,330 --> 00:50:55,680 I zaista, ono što smo bili uzimajući u Ovdje nije bilo toliko logika, 1043 00:50:55,680 --> 00:50:58,100 jer je vjerojatno, po ovom trenutku, ti si udobnije nego što su bili 1044 00:50:58,100 --> 00:51:01,850 u tjedan jednom sa za petlje ili zašto petlje, ali stvarno se zafrkavati, osim da 1045 00:51:01,850 --> 00:51:04,790 ti si malo ugodno Ideja da PHP nije riječ samo o tome što 1046 00:51:04,790 --> 00:51:05,290 programiranje. 1047 00:51:05,290 --> 00:51:07,820 To zaista može se koristiti kao jezik napisati naredbenog retka programa. 1048 00:51:07,820 --> 00:51:10,060 >> I doista, to je ono što smo mi pokušavali skrenuti pozornost. 1049 00:51:10,060 --> 00:51:12,060 To je PHP program naredbenog retka. 1050 00:51:12,060 --> 00:51:16,690 Dakle C kod ovdje, a točne u C, nije točan za PHP. 1051 00:51:16,690 --> 00:51:17,940 Ali kod stvarno je ista. 1052 00:51:17,940 --> 00:51:21,720 Ako usporedimo rješenja za kviz 0 protiv kvizu 1, vidjet ćete da 1053 00:51:21,720 --> 00:51:25,630 to je gotovo identična, osim za neki dolar znakove i za 1054 00:51:25,630 --> 00:51:27,250 Odsutnost tipa podataka. 1055 00:51:27,250 --> 00:51:31,720 Konkretno, ako pogledamo ovdje, vidjet ćete da smo ponoviti, u to 1056 00:51:31,720 --> 00:51:33,730 slučaj, od 1. do 7. do. 1057 00:51:33,730 --> 00:51:34,910 >> Mogli smo to učinili 0 indeksa. 1058 00:51:34,910 --> 00:51:37,320 No, ponekad, mislim da je to samo psihički lakše razmišljati o stvarima 1059 00:51:37,320 --> 00:51:38,200 od 1 do 7. 1060 00:51:38,200 --> 00:51:40,300 Ako želite jedan blok, a zatim dva blokovi, zatim tri, a zatim 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot sedam. 1062 00:51:41,770 --> 00:51:45,960 Mi smo j inicijalizacije do 1 a zatim računajući na do i. 1063 00:51:45,960 --> 00:51:48,150 I sve je ovdje inače identični. 1064 00:51:48,150 --> 00:51:49,790 No, valja spomenuti su par stvari. 1065 00:51:49,790 --> 00:51:53,230 Mi vam dati ove dvije linije, ovaj prvi jedan, goofily zove kao shebang 1066 00:51:53,230 --> 00:51:54,560 za oštar prasak. 1067 00:51:54,560 --> 00:51:58,770 I to samo specificira put, mape, u kojem program može biti 1068 00:51:58,770 --> 00:52:02,160 utvrdili da želite koristiti interpretirati ovu sliku. 1069 00:52:02,160 --> 00:52:04,710 >> I onda crta nakon toga, od Naravno, znači ući PHP način. 1070 00:52:04,710 --> 00:52:07,740 A linija na samom dnu znači izlazak PHP način. 1071 00:52:07,740 --> 00:52:09,740 I to radi, u cjelini, s tumačiti jezika. 1072 00:52:09,740 --> 00:52:14,370 To je vrsta neugodno ako pišete Program u datoteci pod nazivom foo.php. 1073 00:52:14,370 --> 00:52:17,320 I onda vaši korisnici imaju samo zapamtite, OK, pokrenuti ovaj program, ja 1074 00:52:17,320 --> 00:52:22,320 morati upisati "php prostor foo.php." Vrsta neugodno ako ništa drugo. 1075 00:52:22,320 --> 00:52:25,270 I to je također otkriva da je vaš program je napisan u PHP, što nije sve 1076 00:52:25,270 --> 00:52:27,060 da osvjetljava za korisnika. 1077 00:52:27,060 --> 00:52:30,100 >> Na taj način možete ukloniti. Php uopce sjećam iz predavanja. 1078 00:52:30,100 --> 00:52:35,690 A što zapravo može učiniti. / Foo ako ste ga chmodded čineći ga 1079 00:52:35,690 --> 00:52:36,500 izvršna. 1080 00:52:36,500 --> 00:52:39,630 Dakle chmod + x Foo bi učinio to. 1081 00:52:39,630 --> 00:52:41,460 A ako i dodati shebang ovdje. 1082 00:52:41,460 --> 00:52:45,320 Ali zapravo, problem je bio uzimajući u ispis nešto ovako. 1083 00:52:45,320 --> 00:52:51,100 Ne HTML, nema C-code sigurno, samo su neke PHP. 1084 00:52:51,100 --> 00:52:54,100 Dakle Milo zatim se vratio u problemu 25. 1085 00:52:54,100 --> 00:52:58,050 A u 25 godina, koju su dobili sljedeći Kostur broj, koji je bio 1086 00:52:58,050 --> 00:52:59,730 prilično jednostavna web stranica. 1087 00:52:59,730 --> 00:53:04,230 I sočan dio HTML-mudar je dolje Ovdje, gdje imamo unutar tijela 1088 00:53:04,230 --> 00:53:09,160 oblik koji ima jedinstveni ID ulaza unutar kojih je dva ulaza, jedan 1089 00:53:09,160 --> 00:53:11,950 s idejom ime, jedan s idejom gumb. 1090 00:53:11,950 --> 00:53:14,240 >> Prvi je tip teksta, Drugi tipa podnose. 1091 00:53:14,240 --> 00:53:16,930 I tako smo ti dali, zapravo, više sastojaka nego što je potrebno, samo tako 1092 00:53:16,930 --> 00:53:19,230 da ste imali opcija s kojom kako riješiti ovaj problem. 1093 00:53:19,230 --> 00:53:21,130 Vi ne strogo potrebno sve ove osobne iskaznice. 1094 00:53:21,130 --> 00:53:23,580 Ali, to vam omogućuje da riješiti to na različite načine. 1095 00:53:23,580 --> 00:53:27,050 A gore na vrhu, primijetiti da Cilj je bio da se aktiviraju 1096 00:53:27,050 --> 00:53:27,960 prozor kao što je ovaj - 1097 00:53:27,960 --> 00:53:28,780 Pozdrav, Milo! - 1098 00:53:28,780 --> 00:53:31,270 poskočiti u pregledniku pomoću super jednostavna, ako 1099 00:53:31,270 --> 00:53:33,190 nije ružna, funkcija oprezu. 1100 00:53:33,190 --> 00:53:37,480 I tako, u konačnici, to se svodi konceptualno nekako sluša 1101 00:53:37,480 --> 00:53:41,290 Tvrdnje o obliku strani klijenta , A ne na strani poslužitelja, nekako 1102 00:53:41,290 --> 00:53:45,640 odgovarajući na tom podnesku od strane grabbing vrijednost koju korisnik upisali 1103 00:53:45,640 --> 00:53:50,120 u na području ime, a zatim prikazivanje u tijelu upozorenja. 1104 00:53:50,120 --> 00:53:53,460 >> Dakle, jedan od načina na koje možete učiniti je s jQuery, koji izgleda malo 1105 00:53:53,460 --> 00:53:56,880 sintaktički zbunjujući na prvi pogled. 1106 00:53:56,880 --> 00:54:00,760 To možete učiniti sa čistim DOM code - document.getelement po ID. 1107 00:54:00,760 --> 00:54:02,530 Ali neka se pogledati na ovoj verziji. 1108 00:54:02,530 --> 00:54:05,110 Imam par važno Prva linija. 1109 00:54:05,110 --> 00:54:09,460 Dakle, mi smo tu liniju, što je identičan onome što ste mogli vidjeti 1110 00:54:09,460 --> 00:54:13,830 u, vjerujem, form2.html iz razreda u tjednu 9.. 1111 00:54:13,830 --> 00:54:16,960 I to samo govori, izvršiti Sljedeći kod kada 1112 00:54:16,960 --> 00:54:18,430 Dokument je spreman. 1113 00:54:18,430 --> 00:54:21,770 To je bitno samo zato što HTML-stranice se pročitati na vrh 1114 00:54:21,770 --> 00:54:23,280 dno, s lijeva na desno. 1115 00:54:23,280 --> 00:54:27,910 >> I zato, ako pokušate napraviti nešto u kodu se ovdje za nekog DOM 1116 00:54:27,910 --> 00:54:31,560 Element, neki HTML tag, to je prema dolje Ovdje, radite to prerano, 1117 00:54:31,560 --> 00:54:34,220 jer ovo nije ni je pročitao u memoriju. 1118 00:54:34,220 --> 00:54:37,740 Tako rekavši ovu document.ready linija, mi tvrdimo, 1119 00:54:37,740 --> 00:54:39,040 evo neki broj, browser. 1120 00:54:39,040 --> 00:54:42,440 Ali ne izvrši to do cjelini Dokument je spreman, da je DOM 1121 00:54:42,440 --> 00:54:44,320 Stablo postoji u memoriji. 1122 00:54:44,320 --> 00:54:47,110 Ovo je jedna malo više jednostavno, ako sintaktički 1123 00:54:47,110 --> 00:54:51,890 malo drugačiji, gdje govorim, grab HTML element čija je jedinstvena 1124 00:54:51,890 --> 00:54:53,560 identifikator ulaza. 1125 00:54:53,560 --> 00:54:56,220 To je ono što hash tag označava, jedinstveni ID. 1126 00:54:56,220 --> 00:54:58,070 A onda sam se zovem. Podnose. 1127 00:54:58,070 --> 00:55:01,660 >> Dakle. Slati ovdje je funkcija, inače poznat kao metoda, koja je 1128 00:55:01,660 --> 00:55:05,850 unutar objekta na lijevoj ruci strana ima koji nisam istaknuti. 1129 00:55:05,850 --> 00:55:08,990 Dakle, ako mislite inputa kao objekt u spomen - i doista je. 1130 00:55:08,990 --> 00:55:10,440 To je čvor u stablu - 1131 00:55:10,440 --> 00:55:16,580 . Dostaviti sredstva kada ovaj obrazac s ovaj ID podnosi, izvršiti 1132 00:55:16,580 --> 00:55:17,700 Sljedeći kod. 1133 00:55:17,700 --> 00:55:20,290 Ne zanima me što se ime Funkcija je sam izvršenja. 1134 00:55:20,290 --> 00:55:23,760 Pa evo ja sam koristeći, kao i prije, što je pozvao funkciju lambda ili 1135 00:55:23,760 --> 00:55:24,720 anonimna funkcija. 1136 00:55:24,720 --> 00:55:27,640 To uopće nije intelektualno Zanimljivo, osim što nema ime, 1137 00:55:27,640 --> 00:55:30,220 što je u redu ako ste samo sve će to nazvati jednom. 1138 00:55:30,220 --> 00:55:34,490 A unutra sam zapravo nositi podnošenje obliku. 1139 00:55:34,490 --> 00:55:36,810 Prvi put sam proglasiti varijablu nazvao vrijednost. 1140 00:55:36,810 --> 00:55:40,610 A što je onda učinak ove istaknut dio ovdje sada? 1141 00:55:40,610 --> 00:55:44,755 Što bi to trebalo učiniti u Visoka razina za mene? 1142 00:55:44,755 --> 00:55:48,539 >> PUBLIKA: On dobiva vrijednost koju korisnik nije u HTML u nastavku. 1143 00:55:48,539 --> 00:55:50,920 Ona dobiva taj ID, a zatim pronalazi vrijednost toga. 1144 00:55:50,920 --> 00:55:51,590 >> David J. Malan: Točno. 1145 00:55:51,590 --> 00:55:54,300 Ona zgrabi čvor, čiji je jedinstvena identifikator ime. 1146 00:55:54,300 --> 00:55:56,900 Ona dobiva vrijednost u njemu, koji je, vjerojatno, ono što je korisnik 1147 00:55:56,900 --> 00:55:58,190 upisali njega ili sebe. 1148 00:55:58,190 --> 00:56:01,020 I onda se sprema da u varijabla zove vrijednost. 1149 00:56:01,020 --> 00:56:03,720 Kao na stranu, što bi moglo imati i učinio malo drugačije. 1150 00:56:03,720 --> 00:56:09,250 Totalno prihvatljivi radiš nešto Laž var vrijednost dobiva 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 I to je razlog zašto je malo zamorno ne koristiti jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Naziv". Vrijednost. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Dakle, posve prihvatljivo. 1157 00:56:19,620 --> 00:56:22,770 Različiti načini da to učinite. jQuery samo ima tendenciju da se malo više jezgrovit i 1158 00:56:22,770 --> 00:56:25,230 definitivno više popularan među programerima. 1159 00:56:25,230 --> 00:56:27,590 >> Sada radim malo zdravog razuma provjeriti, jer je u problemu 1160 00:56:27,590 --> 00:56:30,820 izjava, izričito je rekao, ako se korisnik nije još upisali njegov ili njezin 1161 00:56:30,820 --> 00:56:32,580 ime, ne pokazuju upozorenja. 1162 00:56:32,580 --> 00:56:35,390 No, možete provjeriti za to, po samo provjera za prazan string za 1163 00:56:35,390 --> 00:56:37,850 quote-završiti citat, ako postoji ništa zapravo postoji. 1164 00:56:37,850 --> 00:56:40,880 No, ako to nije jednak quote-završiti citat, Želim pozvati upozorenja. 1165 00:56:40,880 --> 00:56:45,610 I zanimljiv dio je da koristimo plus operatera, koji 1166 00:56:45,610 --> 00:56:48,130 što radi u JavaScriptu? 1167 00:56:48,130 --> 00:56:48,740 Spojite. 1168 00:56:48,740 --> 00:56:50,690 Dakle, to je kao PHPs dot operatera. 1169 00:56:50,690 --> 00:56:52,820 Sve ideje, malo drugačiji sintakse. 1170 00:56:52,820 --> 00:56:55,280 A ja sam samo stvara niz koji ste vidjeli na zaslonu pucao - 1171 00:56:55,280 --> 00:56:57,750 Pozdrav, tako i tako. 1172 00:56:57,750 --> 00:56:59,200 >> A onda, i najmanji detalj je to. 1173 00:56:59,200 --> 00:57:04,970 Zašto bih se vratiti lažno unutrašnjost od tih anonimnih funkcije? 1174 00:57:04,970 --> 00:57:07,420 >> Ivanković: Nema vrijednost. 1175 00:57:07,420 --> 00:57:09,380 Možete ga staviti u formi. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 To samo govori, ako vrijednost nije jednaka je prazno, onda to učinite. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Bilo je prazan u tom podnesku. 1180 00:57:20,940 --> 00:57:21,170 >> David J. Malan: OK. 1181 00:57:21,170 --> 00:57:21,640 Oprezni. 1182 00:57:21,640 --> 00:57:22,830 Ne postoji nitko drugi ovdje. 1183 00:57:22,830 --> 00:57:25,510 A da je povratak lažno je izvan od, ako uvjeti. 1184 00:57:25,510 --> 00:57:29,470 Dakle, ovo je istaknuo liniju, povratak false, izvršava bez obzira kada 1185 00:57:29,470 --> 00:57:32,310 Obrazac se podnosi. 1186 00:57:32,310 --> 00:57:36,810 Što povratku lažno unutar ovog događaj rukovatelj, kako se zove, 1187 00:57:36,810 --> 00:57:38,450 događaj u pitanju se podnesak? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> PUBLIKA: Zato što događa samo jednom. 1190 00:57:44,470 --> 00:57:45,320 >> David J. Malan: događa samo jednom. 1191 00:57:45,320 --> 00:57:46,821 Nije dosta. 1192 00:57:46,821 --> 00:57:47,292 Da? 1193 00:57:47,292 --> 00:57:50,589 >> Ivanković: To sprječava obrazac iz podnošenje zadanom ponašanju, 1194 00:57:50,589 --> 00:57:52,480 koji će napraviti stranicu reload. 1195 00:57:52,480 --> 00:57:53,110 >> David J. Malan: Točno. 1196 00:57:53,110 --> 00:57:56,490 Dakle, ja sam preopterećenja termina slati ovdje, jer ja govorim, forma je 1197 00:57:56,490 --> 00:57:57,670 podnosi. 1198 00:57:57,670 --> 00:58:02,240 No, kao što sugeriraju, to zapravo nije podnesen u pravom HTTP način. 1199 00:58:02,240 --> 00:58:06,870 Nakon što kliknete Pošalji, jer naše onSubmit rukovatelj, mi smo presretanjem 1200 00:58:06,870 --> 00:58:09,040 da je obrazac za slanje da se tako izrazim. 1201 00:58:09,040 --> 00:58:11,290 Mi smo tada radili našu stvar s JavaScript kod. 1202 00:58:11,290 --> 00:58:14,070 No, ja sam namjerno povratka lažna, zato što ne želim da se dogodi 1203 00:58:14,070 --> 00:58:18,430 djelić sekunde kasnije je za cijelu obliku Sam se podnosi na webu 1204 00:58:18,430 --> 00:58:22,800 poslužitelj s ključnim parova vrijednosti promjenom URL se dogoditi nešto slično 1205 00:58:22,800 --> 00:58:26,180 q = mačke ili što god smo učinili, Na primjer, u razredu. 1206 00:58:26,180 --> 00:58:29,640 Ne želim da se to dogodi, jer nema slušanje poslužitelja za to 1207 00:58:29,640 --> 00:58:30,690 obrazac za prijavu. 1208 00:58:30,690 --> 00:58:32,320 To je čisto radi u JavaScript kodu. 1209 00:58:32,320 --> 00:58:35,760 I to je razlog zašto nisam ni action atribut na mojoj formi, jer sam 1210 00:58:35,760 --> 00:58:38,870 ne namjeravaju da se to ikada ići na poslužitelju. 1211 00:58:38,870 --> 00:58:40,780 >> Pa to je da je podnesen. 1212 00:58:40,780 --> 00:58:44,340 No, mi smo presretanja tu formu podnesak i sprečavanje zadani 1213 00:58:44,340 --> 00:58:47,477 ponašanje, koje je zapravo ići sve do poslužitelja. 1214 00:58:47,477 --> 00:58:48,730 >> Ivanković: Pa imajući to na strani klijenta. 1215 00:58:48,730 --> 00:58:49,780 >> David J. Malan: Držanje je na strani klijenta. 1216 00:58:49,780 --> 00:58:51,030 Točno u pravu. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Sljedeći je bio 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 Dakle, ovo prvo pitanje je bilo općenito gruba za ljude. 1222 00:59:04,990 --> 00:59:07,270 Iako mlađi su otišli bolje. 1223 00:59:07,270 --> 00:59:12,260 Tako da su morali odabrati ispravnu podatke vrste za obje ove stupce. 1224 00:59:12,260 --> 00:59:17,750 I jedno i drugo ima neke stvari o njima koje 1225 00:59:17,750 --> 00:59:20,620 napraviti izbor teško. 1226 00:59:20,620 --> 00:59:24,430 Dakle int nije bila valjana tipa za broj. 1227 00:59:24,430 --> 00:59:29,410 Razlog je 12-znamenki računa broj, int nije dovoljno velik da bi 1228 00:59:29,410 --> 00:59:31,070 pohraniti ukupne brojke. 1229 00:59:31,070 --> 00:59:36,570 Tako vrijedi izbor bi bio veliki int, ako vam se dogoditi da znaju da. 1230 00:59:36,570 --> 00:59:42,090 Drugi izbor je mogao biti Polje char duljine 12. 1231 00:59:42,090 --> 00:59:44,560 Dakle, bilo je onih koji bi radili. 1232 00:59:44,560 --> 00:59:46,100 Int ne bi. 1233 00:59:46,100 --> 00:59:50,170 >> Sada, ravnoteža, prisjetite pset7. 1234 00:59:50,170 --> 00:59:59,540 Stoga smo posebno koriste za decimale pohraniti vrijednost dionica ili - 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 Koristili smo decimale pohraniti količinu gotovina koju korisnik trenutno ima. 1238 01:00:05,710 --> 01:00:10,950 Dakle, razlog zbog kojeg smo to je jer, ne zaboravite, pluta. 1239 01:00:10,950 --> 01:00:12,480 Tu je s pomičnim zarezom u preciznosti. 1240 01:00:12,480 --> 01:00:18,200 To se ne može precizno pohraniti novac Vrijednosti poput želimo ovdje. 1241 01:00:18,200 --> 01:00:23,630 Dakle decimala je u stanju precizno trgovine nešto što se, kažu, dvije decimale. 1242 01:00:23,630 --> 01:00:27,630 Zato ravnotežu, mi to želimo biti decimala i ne plutaju. 1243 01:00:27,630 --> 01:00:30,230 >> David J. Malan: I također, previše, iako možda bi bilo pametno u drugom 1244 01:00:30,230 --> 01:00:32,760 kontekstima razmišljati, možda je to je prilika za int. 1245 01:00:32,760 --> 01:00:34,420 Ja ću samo pratiti stvari u penija. 1246 01:00:34,420 --> 01:00:38,670 Budući da smo izričito pokazali zadani vrijednost kao 100,00, da 1247 01:00:38,670 --> 01:00:40,380 znači to samo mogao biti int. 1248 01:00:40,380 --> 01:00:45,310 I još jedna suptilnost previše s brojem bila je da nije bio namijenjen 1249 01:00:45,310 --> 01:00:46,180 biti trik pitanje. 1250 01:00:46,180 --> 01:00:49,860 No, podsjetimo da int u MySQL, kao što je u C, barem 1251 01:00:49,860 --> 01:00:51,440 aparata, je 32-bitni. 1252 01:00:51,440 --> 01:00:53,960 I iako ne očekujem da se znam točno koliko znamenaka koje 1253 01:00:53,960 --> 01:00:56,910 znači, sjećam se da je najveći broj što može predstavljati potencijalno 1254 01:00:56,910 --> 01:01:00,710 s 32-bitnom broj je otprilike ono? 1255 01:01:00,710 --> 01:01:02,760 >> Koji broj mi uvijek reći? 1256 01:01:02,760 --> 01:01:04,530 2 do 32, što je ono što zlo? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Ne morate znati točno. 1259 01:01:08,780 --> 01:01:10,580 No, grubo je korisno u životu. 1260 01:01:10,580 --> 01:01:12,200 To je otprilike 4 milijarde. 1261 01:01:12,200 --> 01:01:14,430 Tako smo, rekao je da je nekoliko puta. 1262 01:01:14,430 --> 01:01:16,360 Ja znam što sam rekao je da je nekoliko puta. 1263 01:01:16,360 --> 01:01:17,670 I to je otprilike 4 milijarde. 1264 01:01:17,670 --> 01:01:19,710 I to je dobro pravilo od oka znati. 1265 01:01:19,710 --> 01:01:21,880 Ako imate 8 bita, 256 je magični broj. 1266 01:01:21,880 --> 01:01:24,160 Ako imate 32 bita, 4 milijardi dati ili uzeti. 1267 01:01:24,160 --> 01:01:27,140 Dakle, ako ste samo napiši 4000000000, vidjet ćete da je to manje od broja 1268 01:01:27,140 --> 01:01:30,970 12, što znači da to nije jasno Dovoljno izražajnost uhvatiti 1269 01:01:30,970 --> 01:01:34,220 Broj 12 znamenki računa. 1270 01:01:34,220 --> 01:01:34,940 >> ROB Bowden: OK. 1271 01:01:34,940 --> 01:01:38,520 Tako su ostale one otišao bolje. 1272 01:01:38,520 --> 01:01:40,900 Dakle, pretpostavimo da banka nameće 20 dolara mjesečne 1273 01:01:40,900 --> 01:01:42,400 naknada za održavanje na svim računima. 1274 01:01:42,400 --> 01:01:45,506 S kojim SQL upit bi banka oduzimamo 20 dolara od svakog računati, čak i ako 1275 01:01:45,506 --> 01:01:47,520 to rezultira u nekim negativnim bilancama? 1276 01:01:47,520 --> 01:01:50,380 Tako je u osnovi, tu su i četiri Glavne vrste upita - 1277 01:01:50,380 --> 01:01:52,840 umetnite, odaberite, ažurirati i obrisati. 1278 01:01:52,840 --> 01:01:56,080 Zato što mislimo da smo će se koristiti ovdje? 1279 01:01:56,080 --> 01:01:57,000 Update. 1280 01:01:57,000 --> 01:01:58,260 >> Tako ćemo pogledati. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Dakle ovdje smo ažuriranje. 1283 01:02:05,870 --> 01:02:09,900 Što stol su mi ažuriranja račune? 1284 01:02:09,900 --> 01:02:11,670 Dakle ažuriranje račune. 1285 01:02:11,670 --> 01:02:15,390 I onda sintakse, kaže, ono što na računima su mi ažuriranja? 1286 01:02:15,390 --> 01:02:19,520 Pa, mi smo postavljanje ravnoteže jednak Trenutna vrijednost saldo umanjen za 20 godina. 1287 01:02:19,520 --> 01:02:22,860 Dakle, to će se ažurirati sve retke računa, oduzimanjem 1288 01:02:22,860 --> 01:02:26,250 20 dolara iz ravnoteže. 1289 01:02:26,250 --> 01:02:29,260 >> David J. Malan: česta pogreška ovdje, iako mi ponekad to oprostio, 1290 01:02:29,260 --> 01:02:32,990 bio je zapravo PHP kod ovdje pozivanjem funkcije upita ili stavljanjem 1291 01:02:32,990 --> 01:02:35,460 citati oko svega što ne trebaju biti tamo. 1292 01:02:35,460 --> 01:02:39,780 >> ROB Bowden: Ne zaboravite da je MySQL zasebna jezika s PHP. 1293 01:02:39,780 --> 01:02:42,410 Mi se dogoditi da se pisanje MySQL u PHP-u. 1294 01:02:42,410 --> 01:02:46,180 I PHP zatim ga poslati više na MySQL poslužitelj. 1295 01:02:46,180 --> 01:02:51,120 No, ne trebate PHP, kako bi se komunicirati s MySQL poslužitelj. 1296 01:02:51,120 --> 01:02:51,730 >> David J. Malan: Točno. 1297 01:02:51,730 --> 01:02:54,240 Tako da nema varijable s znakove dolara treba biti u tom kontekstu. 1298 01:02:54,240 --> 01:02:59,550 To samo može učiniti sve matematike unutar same baze. 1299 01:02:59,550 --> 01:03:00,080 >> ROB Bowden: OK. 1300 01:03:00,080 --> 01:03:01,300 Dakle, sljedeći. 1301 01:03:01,300 --> 01:03:02,731 Je li to sljedeći? 1302 01:03:02,731 --> 01:03:03,210 Da. 1303 01:03:03,210 --> 01:03:06,570 Dakle, s tim što SQL upit bi banka dohvatiti brojeva računa od njegovih 1304 01:03:06,570 --> 01:03:09,300 Najbogatiji kupci, one s stanja veće od 1000? 1305 01:03:09,300 --> 01:03:13,280 Dakle, što je od četiri glavne vrste ćemo ovdje? 1306 01:03:13,280 --> 01:03:14,430 Odaberite. 1307 01:03:14,430 --> 01:03:16,650 Dakle, želimo odabrati. 1308 01:03:16,650 --> 01:03:17,610 Što želimo odabrati? 1309 01:03:17,610 --> 01:03:19,380 Što stupac ne želimo odabrati? 1310 01:03:19,380 --> 01:03:20,970 Mi posebno će htjeti za odabir broja. 1311 01:03:20,970 --> 01:03:23,910 No, ako je rekao zvijezda, mi također prihvatio da. 1312 01:03:23,910 --> 01:03:25,820 >> Dakle, odaberite broj s kojim stolom? 1313 01:03:25,820 --> 01:03:26,640 Računi. 1314 01:03:26,640 --> 01:03:28,370 I onda uvjet želimo? 1315 01:03:28,370 --> 01:03:30,140 Gdje stanje veći od 1000. 1316 01:03:30,140 --> 01:03:31,720 Također smo prihvatili veće od ili jednaka. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Zadnji put. 1319 01:03:36,190 --> 01:03:42,940 S kojim SQL upit bi banka u neposrednoj blizini, tj. izbrisati svaki račun koji 1320 01:03:42,940 --> 01:03:44,480 ima ravnotežu 0 $? 1321 01:03:44,480 --> 01:03:47,620 Dakle, što je četiri smo htjeti koristiti? 1322 01:03:47,620 --> 01:03:48,320 Brisanje. 1323 01:03:48,320 --> 01:03:50,180 Dakle, sintaksa za to? 1324 01:03:50,180 --> 01:03:51,890 Brisanje iz koje tablice? 1325 01:03:51,890 --> 01:03:53,550 Računi. 1326 01:03:53,550 --> 01:03:55,790 A onda je uvjet kojeg želimo izbrisati - 1327 01:03:55,790 --> 01:03:57,280 gdje je saldo jednak nuli. 1328 01:03:57,280 --> 01:04:03,050 Dakle brisanje svih redova iz računa gdje je stanje nula. 1329 01:04:03,050 --> 01:04:04,300 Pitanja na bilo koji od ovih? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Želite li stati u red? 1332 01:04:10,260 --> 01:04:11,200 >> David J. Malan: Red vodič. 1333 01:04:11,200 --> 01:04:17,110 Dakle, u tom jednom, ti dali smo ponešto upoznati strukturu koja smo istraženo 1334 01:04:17,110 --> 01:04:20,450 malo u klasi uz bok tvorevina, koja je data 1335 01:04:20,450 --> 01:04:21,910 Struktura odnose u duhu. 1336 01:04:21,910 --> 01:04:24,670 Razlika iako s red je da smo morali nekako sjetiti tko 1337 01:04:24,670 --> 01:04:27,900 je na prednjem dijelu redu, u velikim dio, tako da smo mogli napraviti više 1338 01:04:27,900 --> 01:04:30,530 Učinkovito korištenje memorije, barem Ako smo koristili niz. 1339 01:04:30,530 --> 01:04:35,460 >> Jer podsjetimo, ako imamo niz, ako je, Na primjer, ovo je prednja strana 1340 01:04:35,460 --> 01:04:38,470 red, ako mi se u redu ovdje, i onda netko dobiva u redu 1341 01:04:38,470 --> 01:04:42,710 iza mene, iza mene, iza mene, i jedna osoba izlazi iz linije, što 1342 01:04:42,710 --> 01:04:45,930 mogao, kao što smo vidjeli neke od naših ljudskih Volonteri u klasi, ima sve 1343 01:04:45,930 --> 01:04:47,100 pomak na ovaj način. 1344 01:04:47,100 --> 01:04:50,880 No, u cjelini, što svatko radi nešto što nije najbolje korištenje vremena 1345 01:04:50,880 --> 01:04:54,600 u programu, jer to znači da je Algoritam se izvodi u ono 1346 01:04:54,600 --> 01:04:56,520 asimptotičnu Trajanje? 1347 01:04:56,520 --> 01:04:57,420 To je linearno. 1348 01:04:57,420 --> 01:04:59,600 >> I osjećam se kao da je to glupo. 1349 01:04:59,600 --> 01:05:02,890 Ako sljedeća osoba na redu je slijedeća Osoba koja bi trebala ići u 1350 01:05:02,890 --> 01:05:04,660 store, ne svi imaju premjestiti zajedno. 1351 01:05:04,660 --> 01:05:08,200 Samo neka ta osoba neće iščupati off , kada za to dođe vrijeme, na primjer. 1352 01:05:08,200 --> 01:05:09,870 Tako možemo uštedjeti malo vremena tamo. 1353 01:05:09,870 --> 01:05:14,840 I tako se to ipak, to znači da glava redu ili 1354 01:05:14,840 --> 01:05:18,060 Pročelje red će progresivno kretati dublje i dublje 1355 01:05:18,060 --> 01:05:23,340 u nizu i na kraju možda zapravo zaokrenuti ako smo pomoću 1356 01:05:23,340 --> 01:05:25,790 Niz pohraniti narod u tom redu. 1357 01:05:25,790 --> 01:05:28,390 Dakle, gotovo da možete sjetiti Niz podataka kao kružni 1358 01:05:28,390 --> 01:05:29,880 struktura u tom smislu. 1359 01:05:29,880 --> 01:05:33,970 >> Tako da na neki način moraju pratiti veličina njemu ili stvarno kraj njega 1360 01:05:33,970 --> 01:05:36,250 a zatim gdje je to je početak. 1361 01:05:36,250 --> 01:05:39,490 Dakle, predlažemo da se proglasi jedan takav red, poziv 1362 01:05:39,490 --> 01:05:41,330 je q, samo jedno slovo. 1363 01:05:41,330 --> 01:05:44,570 Onda ćemo predložiti da se prednji postavljene na nulu, a da je veličina 1364 01:05:44,570 --> 01:05:45,470 biti postavljene na nulu. 1365 01:05:45,470 --> 01:05:47,770 >> Dakle, upravo sada, nema ništa unutar tog reda. 1366 01:05:47,770 --> 01:05:50,910 I molimo vas da ispunite Provedba enqueue u nastavku 1367 01:05:50,910 --> 01:05:55,250 takav način da se funkcija dodaje n na Kraj q, a zatim se vraća true. 1368 01:05:55,250 --> 01:05:58,690 Ali, ako je q puna ili negativna, Funkcija umjesto toga trebali vratiti false. 1369 01:05:58,690 --> 01:06:01,060 A ti dali smo par pretpostavki. 1370 01:06:01,060 --> 01:06:04,320 No, oni nisu stvarno funkcionalno relevantno, upravo to bool postoji, 1371 01:06:04,320 --> 01:06:06,690 jer, tehnički, bool ne postoje u C, osim ako su 1372 01:06:06,690 --> 01:06:07,310 sigurno datoteka zaglavlja. 1373 01:06:07,310 --> 01:06:09,350 Tako da samo se uvjerite da bilo je to trik 1374 01:06:09,350 --> 01:06:10,940 Pitanje vrsta stvar. 1375 01:06:10,940 --> 01:06:16,280 >> Dakle u red, predložili smo u uzorku rješenja za provedbu kako slijedi. 1376 01:06:16,280 --> 01:06:20,420 Jedan, prvo smo provjerili jednostavnost, low-viseće voće. 1377 01:06:20,420 --> 01:06:23,820 Ako red je pun ili broj koji pokušavate umetnuti manja 1378 01:06:23,820 --> 01:06:26,380 od nule, što smo rekli u specifikacija problema trebao 1379 01:06:26,380 --> 01:06:30,320 ne smije dopustiti, jer mi samo želimo ne-negativne vrijednosti, onda ste trebali 1380 01:06:30,320 --> 01:06:31,640 Samo povratak false odmah. 1381 01:06:31,640 --> 01:06:33,820 Tako su neki relativno lako provjeru pogrešaka. 1382 01:06:33,820 --> 01:06:38,720 Ako ipak želite dodati da je stvarna broj, što je morao učiniti malo 1383 01:06:38,720 --> 01:06:39,440 razmišljanja ovdje. 1384 01:06:39,440 --> 01:06:41,330 I ovo je mjesto gdje je malo neugodno psihički, jer morate 1385 01:06:41,330 --> 01:06:43,000 shvatiti kako se nositi cjelina. 1386 01:06:43,000 --> 01:06:46,870 >> No, klice od ideje da se ovdje je od interes nam je da obmatajuća 1387 01:06:46,870 --> 01:06:51,480 često podrazumijeva modularna aritmetika i mod operator, posto strana, 1388 01:06:51,480 --> 01:06:55,140 gdje možete otići iz veće vrijednosti natrag na nulu, a onda jedan i dva i 1389 01:06:55,140 --> 01:06:58,650 tri, a zatim ponovno oko nule, jedan i dva i tri i tako dalje 1390 01:06:58,650 --> 01:06:59,380 opet i opet. 1391 01:06:59,380 --> 01:07:02,880 Dakle, način na koji se predlažu za to je da mi ne želimo da se indeks u 1392 01:07:02,880 --> 01:07:05,850 Niz zove brojevi gdje naši prirodni brojevi leže. 1393 01:07:05,850 --> 01:07:10,740 No, kako bi se tamo, prvo želim napraviti bez obzira na veličinu reda je, ali 1394 01:07:10,740 --> 01:07:14,080 zatim dodati da što god Prednji dio popisa je. 1395 01:07:14,080 --> 01:07:17,880 A učinak da je staviti nas na Pravo mjesto u redu i 1396 01:07:17,880 --> 01:07:20,970 Ne pretpostavljaju da je prva osoba u redu je na početku, što je on ili 1397 01:07:20,970 --> 01:07:24,130 ona je apsolutno može biti ako smo također su prebacuje svima. 1398 01:07:24,130 --> 01:07:26,710 No, mi samo stvara posao za sebe, ako mi je uzeo 1399 01:07:26,710 --> 01:07:27,800 da određeni put. 1400 01:07:27,800 --> 01:07:29,330 >> Dakle, možemo ga zadržati relativno jednostavna. 1401 01:07:29,330 --> 01:07:32,180 Mi ne moramo se sjetiti da smo upravo dodao int na red. 1402 01:07:32,180 --> 01:07:35,850 I onda mi samo vrati istina. 1403 01:07:35,850 --> 01:07:38,560 U međuvremenu, u dequeue, pitali smo što učiniti sljedeće. 1404 01:07:38,560 --> 01:07:42,260 Provesti na takav način da se dequeues, koji je uklanja i vraća, 1405 01:07:42,260 --> 01:07:44,190 Int na prednjoj red. 1406 01:07:44,190 --> 01:07:46,410 Za uklanjanje int, dovoljno to zaboraviti. 1407 01:07:46,410 --> 01:07:47,650 Vi ne morate nadjačati njegovu bit. 1408 01:07:47,650 --> 01:07:48,820 Dakle, to je još uvijek zapravo tamo. 1409 01:07:48,820 --> 01:07:51,930 Baš kao i podataka na tvrdom disku, mi smo samo ignorirajući činjenicu 1410 01:07:51,930 --> 01:07:52,970 da je sada tu. 1411 01:07:52,970 --> 01:07:55,520 A ako q je prazna, trebali bismo umjesto da se vrate negativan 1. 1412 01:07:55,520 --> 01:07:56,750 Dakle, to se osjeća proizvoljna. 1413 01:07:56,750 --> 01:08:01,640 Zašto vratiti negativan 1 umjesto da lažno? 1414 01:08:01,640 --> 01:08:02,620 Da. 1415 01:08:02,620 --> 01:08:05,070 >> PUBLIKA: Q je spremanje pozitivne vrijednosti. 1416 01:08:05,070 --> 01:08:10,950 Budući da je samo pohraniti pozitivne vrijednosti u q, negativna je do pogreške. 1417 01:08:10,950 --> 01:08:11,510 >> David J. Malan: OK, istina. 1418 01:08:11,510 --> 01:08:14,850 Dakle, jer mi smo samo spremanje pozitivno vrijednosti ili nula, onda je u redu da se 1419 01:08:14,850 --> 01:08:18,050 vratiti negativnu vrijednost kao stražar vrijednost, poseban simbol. 1420 01:08:18,050 --> 01:08:21,630 Ali ste prepisivanjem povijesti postoji, jer je razlog što smo samo 1421 01:08:21,630 --> 01:08:25,890 povratka ne-negativne vrijednosti je zato što želimo 1422 01:08:25,890 --> 01:08:27,670 imaju Sentinel vrijednost. 1423 01:08:27,670 --> 01:08:32,617 Dakle, konkretno, zašto ne samo povratak false u slučaju pogreške? 1424 01:08:32,617 --> 01:08:33,099 Da. 1425 01:08:33,099 --> 01:08:35,510 >> PUBLIKA: Vi ste uspjeli vratiti integer. 1426 01:08:35,510 --> 01:08:36,630 >> David J. Malan: Točno. 1427 01:08:36,630 --> 01:08:38,569 I ovo je mjesto gdje C dobiva prilično ograničavajući. 1428 01:08:38,569 --> 01:08:40,590 Ako si rekao da ćeš da se vrate int, moraš 1429 01:08:40,590 --> 01:08:41,279 da se vrate int. 1430 01:08:41,279 --> 01:08:43,689 Ne možete dobiti fancy i početak povratka bool ili float ili 1431 01:08:43,689 --> 01:08:45,040 string ili nešto slično. 1432 01:08:45,040 --> 01:08:49,370 Sada je, u međuvremenu, JavaScript i PHP i neke druge jezike, u stvari, 1433 01:08:49,370 --> 01:08:51,310 ste se vraćaju drugačije vrste vrijednosti. 1434 01:08:51,310 --> 01:08:54,819 A to zapravo može biti korisno, gdje mogli vratiti pozitivne Ints, nula, 1435 01:08:54,819 --> 01:08:59,439 Negativni Ints, ili lažna ili null čak i da označi pogrešku. 1436 01:08:59,439 --> 01:09:01,890 Ali nemamo taj raznovrsnost u C. 1437 01:09:01,890 --> 01:09:04,569 >> Tako je s dequeue, ono što smo predlaže učiniti je - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB Bowden: Možete vratiti false. 1440 01:09:09,830 --> 01:09:13,189 To je samo da je lažno je mljeveno meso definirati lažno na nulu. 1441 01:09:13,189 --> 01:09:16,000 Dakle, ako ste se vratili lažna, vraÄ nulu. 1442 01:09:16,000 --> 01:09:25,470 I nula je važeća stvar u našem redu, dok je negativna 1 nije li 1443 01:09:25,470 --> 01:09:27,000 lažno se dogodilo da se negativna 1. 1444 01:09:27,000 --> 01:09:29,972 No, da ne bi trebali ni moraju znati da. 1445 01:09:29,972 --> 01:09:32,399 >> David J. Malan: To je zašto ja to nisam rekao. 1446 01:09:32,399 --> 01:09:36,450 >> ROB Bowden: Ali to nije istina da se ne može vratiti false. 1447 01:09:36,450 --> 01:09:37,700 >> David J. Malan: Svakako. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Dakle dequeue, primijetit ćemo prihvatiti poništava kao svoj argument. 1450 01:09:44,240 --> 01:09:45,479 A to je zato što nismo prolazi ništa u. 1451 01:09:45,479 --> 01:09:48,359 Mi samo želimo ukloniti element na prednjem redu. 1452 01:09:48,359 --> 01:09:49,819 Pa kako bismo mogli ići oko radiš ovo? 1453 01:09:49,819 --> 01:09:51,290 Pa, prvo, idemo to učiniti brzo razum ček. 1454 01:09:51,290 --> 01:09:53,350 Ako veličina reda je 0, postoji nema posla koji treba obaviti. 1455 01:09:53,350 --> 01:09:54,210 Povratak negativna 1. 1456 01:09:54,210 --> 01:09:54,800 Gotovo. 1457 01:09:54,800 --> 01:09:56,340 Dakle, to je nekoliko redaka mog programa. 1458 01:09:56,340 --> 01:09:58,180 Dakle, samo četiri linije ostaju. 1459 01:09:58,180 --> 01:10:01,310 >> Dakle, ovdje se odlučim za opadanje veličina. 1460 01:10:01,310 --> 01:10:04,620 I decrementing veličinu učinkovito znači da ja zaboravljam 1461 01:10:04,620 --> 01:10:06,010 nešto što je tamo. 1462 01:10:06,010 --> 01:10:09,910 Ali sam isto tako morati ažurirati gdje prednja od brojeva su. 1463 01:10:09,910 --> 01:10:11,620 Pa za to, trebam učiniti dvije stvari. 1464 01:10:11,620 --> 01:10:16,390 Ja najprije morate se sjetiti što je broj je na prednjem redu, 1465 01:10:16,390 --> 01:10:17,860 jer moram vratiti tu stvar. 1466 01:10:17,860 --> 01:10:20,910 Dakle, ja ne želim da se slučajno zaboravi o tome i onda ga prebrisati. 1467 01:10:20,910 --> 01:10:22,840 Samo ću se sjetiti u int. 1468 01:10:22,840 --> 01:10:27,310 >> I sada, želim ažurirati q.front biti q.front jedan. 1469 01:10:27,310 --> 01:10:30,070 Dakle, ako je to bila prva osoba u linija, sada, ja želim plus 1 do 1470 01:10:30,070 --> 01:10:31,930 ukazuju na sljedećoj osobi u redu. 1471 01:10:31,930 --> 01:10:33,420 No, moram se nositi taj spustili. 1472 01:10:33,420 --> 01:10:37,270 A ako je kapacitet globalna konstanta, da će mi dopustiti da se uvjerite 1473 01:10:37,270 --> 01:10:41,140 kao što sam naglasiti da je to zadnja osoba u linija, rad po modulu će donijeti 1474 01:10:41,140 --> 01:10:43,840 ja vratiti na nulu u Pročelje red. 1475 01:10:43,840 --> 01:10:46,050 I to obrađuje okružujući ovdje. 1476 01:10:46,050 --> 01:10:48,950 A onda sam nastaviti da se vrati n. 1477 01:10:48,950 --> 01:10:51,530 >> Sada, strogo govoreći, nisam morati proglasiti n. 1478 01:10:51,530 --> 01:10:53,880 Nisam ga morati zgrabiti i spremiti ga privremeno, budući da je vrijednost 1479 01:10:53,880 --> 01:10:54,740 još uvijek tu. 1480 01:10:54,740 --> 01:10:57,490 Pa sam samo mogao napraviti pravu aritmetiku za povratak bivšeg šefa 1481 01:10:57,490 --> 01:10:58,450 u redu. 1482 01:10:58,450 --> 01:11:01,850 No, samo sam osjetio da je to bilo jasnije zapravo zgrabite int, stavite ga 1483 01:11:01,850 --> 01:11:04,320 u N, a zatim se vratiti da za Jasnoće ali 1484 01:11:04,320 --> 01:11:05,735 nije strogo 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 su svi izgovorljiv u mojoj glavi. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB Bowden: Dakle, prvo pitanje je binarno stablo problema. 1490 01:11:19,110 --> 01:11:22,140 Dakle, prvo pitanje je, da smo dao ti brojevi. 1491 01:11:22,140 --> 01:11:27,160 I želimo da ih nekako umetnuti u tih čvorova, tako da je to 1492 01:11:27,160 --> 01:11:30,110 vrijedi pretraživanje po binarnom stablu. 1493 01:11:30,110 --> 01:11:36,260 Dakle, jedna stvar u vezi binary search drveće je da to nije 1494 01:11:36,260 --> 01:11:39,800 upravo to stvar lijevo manje je i stvar 1495 01:11:39,800 --> 01:11:41,120 Pravo je veća. 1496 01:11:41,120 --> 01:11:44,580 To mora biti da je cijelo stablo lijevo je manje, a cijela stabla 1497 01:11:44,580 --> 01:11:45,740 na desnoj strani je veći. 1498 01:11:45,740 --> 01:11:55,260 >> Dakle, ako sam stavio 34 ovdje na vrhu, a zatim Stavio sam 20 ovdje, tako da je vrijedi toliko 1499 01:11:55,260 --> 01:11:56,970 daleko, jer 34 do ovdje. 1500 01:11:56,970 --> 01:11:57,920 20 ide na lijevu stranu. 1501 01:11:57,920 --> 01:11:58,950 Dakle, to je manje. 1502 01:11:58,950 --> 01:12:03,640 Ali ja ne mogu onda staviti 59 ovdje, jer iako 59 je na desnoj strani od 20, 1503 01:12:03,640 --> 01:12:06,140 to je još uvijek na lijevoj 34. 1504 01:12:06,140 --> 01:12:10,760 Dakle, s tim na umu ograničenja, Najlakši način za rješavanje toga vjerojatno 1505 01:12:10,760 --> 01:12:14,330 Problem je u tome da se samo kakve od tih brojeva - 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 A zatim ih umetnite s lijeva na desno. 1508 01:12:21,640 --> 01:12:23,390 >> Dakle, 20 ide ovdje. 1509 01:12:23,390 --> 01:12:24,630 34 ide ovdje. 1510 01:12:24,630 --> 01:12:25,830 36 ide ovdje. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 I što je također moglo shvatio s Neki priključivanja i realizirati, 1513 01:12:34,730 --> 01:12:38,830 oh, čekaj, ja nemam dovoljno brojeve ispuniti to na ovamo. 1514 01:12:38,830 --> 01:12:42,170 Dakle, trebam reshift ono što je moj Ruta note će biti. 1515 01:12:42,170 --> 01:12:47,490 Ali primijetite da su u posljednja tri, ako čitate s lijeva na desno, što je u 1516 01:12:47,490 --> 01:12:48,740 povećanje red. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Tako sada, želimo izjaviti ono struct će biti za 1519 01:12:56,540 --> 01:12:58,300 čvorovi u ovom stablu. 1520 01:12:58,300 --> 01:13:02,720 Dakle, što nam je potrebno u binarnom stablu? 1521 01:13:02,720 --> 01:13:05,830 Tako imamo vrijednost tipu int, pa su neki int vrijednost. 1522 01:13:05,830 --> 01:13:07,220 Ne znam što mi se zove se u otopini - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Trebamo pokazivač lijevo dijete i pokazivač na pravo djeteta. 1525 01:13:13,570 --> 01:13:17,540 Dakle, to će izgledati ovako. 1526 01:13:17,540 --> 01:13:20,510 I to će zapravo izgledati prije nego kad si dvostruko povezana 1527 01:13:20,510 --> 01:13:25,090 Popis stvari, tako da obavijest - 1528 01:13:25,090 --> 01:13:27,860 Ja ću se morati pomaknuti sve put natrag do problema 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Dakle primijetiti da izgleda identično to, osim samo mi se dogoditi da ih zovemo 1531 01:13:36,390 --> 01:13:38,590 različita imena. 1532 01:13:38,590 --> 01:13:41,440 Mi još uvijek imamo cijeli broj vrijednost i dva naputke. 1533 01:13:41,440 --> 01:13:44,850 To je samo u tome što umjesto liječenja naputke što ukazuje na sljedeću stvar 1534 01:13:44,850 --> 01:13:47,955 i natrag stvar, mi smo liječenje pokazivača ukazati na lijevom djeteta 1535 01:13:47,955 --> 01:13:49,205 i pravo djeteta. 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 Dakle, to je naš struct node. 1539 01:13:59,650 --> 01:14:03,920 I sada, jedina funkcija trebamo provoditi za to je poprijeko, koji 1540 01:14:03,920 --> 01:14:08,320 želimo ići preko drveta, tisak iz vrijednosti stabla u cilju. 1541 01:14:08,320 --> 01:14:15,241 >> Tako izgleda ovdje, mi bi htjeli ispisati od 20, 34, 36, 52, 59, i 106. 1542 01:14:15,241 --> 01:14:17,970 Kako ćemo ostvariti to? 1543 01:14:17,970 --> 01:14:18,890 Dakle, to je prilično slično. 1544 01:14:18,890 --> 01:14:22,910 Ako ste vidjeli u prošlom ispitu je problem da ste htjeli isprintati 1545 01:14:22,910 --> 01:14:25,940 cijela stabla sa zarezima između sve, što je zapravo još 1546 01:14:25,940 --> 01:14:27,320 jednostavnije od toga. 1547 01:14:27,320 --> 01:14:30,950 Dakle, ovdje je rješenje. 1548 01:14:30,950 --> 01:14:33,110 To je znatno lakše ako ga rekurzivno učinio. 1549 01:14:33,110 --> 01:14:36,650 Ja ne znam je li itko pokušao to učiniti iterativno. 1550 01:14:36,650 --> 01:14:38,340 >> Ali prvo, mi imamo bazu slučaj. 1551 01:14:38,340 --> 01:14:39,660 Što ako je korijen null? 1552 01:14:39,660 --> 01:14:40,610 Onda mi samo ćemo se vratiti. 1553 01:14:40,610 --> 01:14:42,300 Mi ne želimo ispisati ništa. 1554 01:14:42,300 --> 01:14:45,940 Inače ćemo proći rekurzivno dolje. 1555 01:14:45,940 --> 01:14:48,140 Ispisati cijelu lijevu podstablo. 1556 01:14:48,140 --> 01:14:51,440 Dakle ispisati sve manje od moje trenutne vrijednosti. 1557 01:14:51,440 --> 01:14:53,930 A onda ću ja ispisati. 1558 01:14:53,930 --> 01:14:57,310 A onda ću recurse niz moje Cijeli pravo podstablo, tako da je sve 1559 01:14:57,310 --> 01:14:58,810 veći od moje vrijednosti. 1560 01:14:58,810 --> 01:15:03,870 A to će se ispisati iz svega u cilju. 1561 01:15:03,870 --> 01:15:05,860 Pitanja o tome kako je to zapravo ostvaruje to? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Ivanković: Imam pitanje Na [nečujan]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB Bowden: Dakle, jedan način približavanja bilo rekurzivna problem je da samo misle 1566 01:15:23,550 --> 01:15:26,275 o tome da mi se morate misliti o svim kutak slučajevi. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Dakle, smatramo da želimo ispisati cijelu ovu stablo. 1569 01:15:38,110 --> 01:15:42,030 Dakle, svi ćemo se usredotočiti na je ovaj čvor - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 U rekurzivni pozivi, možemo se pretvarati oni samo rade. 1572 01:15:47,420 --> 01:15:54,000 Pa evo, ova rekurzivna poziva na poprijeko, možemo čak i bez razmišljanja 1573 01:15:54,000 --> 01:15:58,640 o tome, samo poprijeko lijevi tri, zamislite da je već ispisuje 20 1574 01:15:58,640 --> 01:16:00,730 i 34 za nas. 1575 01:16:00,730 --> 01:16:03,350 I onda, kada smo na kraju rekurzivno nazvati poprijeko na 1576 01:16:03,350 --> 01:16:07,890 U redu, da će pravilno ispisati 52, 59, i 106 za nas. 1577 01:16:07,890 --> 01:16:13,620 >> Dakle, s obzirom da se ova može ispisivati ​​20, 34, i drugi može ispisati 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 svi moramo biti u stanju učiniti je ispisati mi sami u sredini toga. 1579 01:16:17,180 --> 01:16:21,250 Dakle ispisati sve pred sobom. 1580 01:16:21,250 --> 01:16:27,710 Ispis sebe, tako da trenutni čvor za ispis 36, redovito printf, a zatim 1581 01:16:27,710 --> 01:16:31,170 ispisati sve iza nas. 1582 01:16:31,170 --> 01:16:32,730 >> David J. Malan: Ovo je mjesto gdje rekurzija dobiva stvarno lijepo. 1583 01:16:32,730 --> 01:16:36,270 To je ovo nevjerojatna skok vjere, gdje ti i najsitnije malo rada. 1584 01:16:36,270 --> 01:16:38,460 I onda neka netko drugo učiniti ostalo. 1585 01:16:38,460 --> 01:16:40,180 A da je netko drugi je, ironično, ti. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Dakle, za ozbiljne pčelica bodova, ako se pomaknete gore na pitanja - 1588 01:16:48,360 --> 01:16:50,530 >> ROB Bowden: Na pitanja? 1589 01:16:50,530 --> 01:16:53,490 >> David J. Malan: A dolje malo brojeve, zna li netko gdje je 1590 01:16:53,490 --> 01:16:55,190 ti brojevi dolaze iz? 1591 01:16:55,190 --> 01:16:56,610 >> ROB Bowden: Imam doslovno nema pojma. 1592 01:16:56,610 --> 01:16:59,794 >> David J. Malan: Pojavljuju tijekom kviza. 1593 01:16:59,794 --> 01:17:01,150 >> PUBLIKA: Jesu li isti brojevi? 1594 01:17:01,150 --> 01:17:01,910 >> David J. Malan: Ti brojevi. 1595 01:17:01,910 --> 01:17:03,260 Malo uskršnje jaje. 1596 01:17:03,260 --> 01:17:08,100 Dakle, za one od vas gledati online na kući, ako nam možete reći putem e-maila na 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net ono značenje od ove ponavljajući šest brojevi su 1598 01:17:12,680 --> 01:17:18,560 tijekom kviza 1, mi ćemo vas tuš uz nevjerojatnu pozornost na finalu 1599 01:17:18,560 --> 01:17:21,610 Predavanje i stres loptu. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Nice, suptilna. 1602 01:17:27,790 --> 01:17:29,570 >> ROB Bowden: Bilo Zadnja pitanja o svemu na kvizu? 1603 01:17:29,570 --> 01:17:32,608