1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. Malan: Olgu. 3 00:00:12,900 --> 00:00:16,790 Nii teretulnud esimene CS50 postmortem kohta viktoriini. 4 00:00:16,790 --> 00:00:18,340 Me otsustasime, et pidulikult Selle traditsiooni tänavu. 5 00:00:18,340 --> 00:00:20,960 Ja see annab võimaluse kõndida läbi 6 00:00:20,960 --> 00:00:22,220 lahendusi viktoriini. 7 00:00:22,220 --> 00:00:26,160 Ja me kiirendada või aeglustada põhinevad on huvi nende siin. 8 00:00:26,160 --> 00:00:29,730 >> Nii et sa oled ilmselt siin, sest sa oled huvitatud sellest, kuidas te oleksite või 9 00:00:29,730 --> 00:00:31,170 oleks vastanud mõnele neid probleeme. 10 00:00:31,170 --> 00:00:33,300 Miks ei võiks me vaatleme selles rubriigis esimesena? 11 00:00:33,300 --> 00:00:34,450 Nii saad stringe. 12 00:00:34,450 --> 00:00:37,600 See andis teile kolm erinevat versiooni programmi, mis oli lõppkokkuvõttes 13 00:00:37,600 --> 00:00:39,650 tähendas, et saada stringi kasutaja. 14 00:00:39,650 --> 00:00:42,530 Kas ta tegi seda oli vasakule sinu otsustada. 15 00:00:42,530 --> 00:00:45,150 >> Ja küsisime küsimuses 0, oletame, et versioon 1 on 16 00:00:45,150 --> 00:00:46,400 koostatud ja rakendatud. 17 00:00:46,400 --> 00:00:48,860 Miks võiks programmi segfault? 18 00:00:48,860 --> 00:00:51,150 Esmapilgul kõik ettepanekud miks? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Jah. 21 00:00:54,489 --> 00:00:59,260 >> Publik: Ma nägin seda Eelmises näites vaadates 22 00:00:59,260 --> 00:01:05,506 char * s ja nägemine skaneerimisega s ja näha, sest see on pointer, kuidas 23 00:01:05,506 --> 00:01:07,971 ei mõjuta see, mida skaneeritud? 24 00:01:07,971 --> 00:01:10,940 Kas see s või aadress s? 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. Malan: OK. 26 00:01:11,180 --> 00:01:11,480 Väga hea. 27 00:01:11,480 --> 00:01:14,830 Nii lõpuks allikas mingit probleemi on arvatavasti läheb vähendada 28 00:01:14,830 --> 00:01:16,210 selle muutuja s. 29 00:01:16,210 --> 00:01:17,280 Ja see on tõepoolest erinevad. 30 00:01:17,280 --> 00:01:19,900 Andmete tüüpi muutuja on char *, mis tähendab, et see saab 31 00:01:19,900 --> 00:01:22,570 sisaldavad aadress iseloomu. 32 00:01:22,570 --> 00:01:23,850 Ja selles peitub ülevaate. 33 00:01:23,850 --> 00:01:28,330 See saab sisaldama aadress iseloomu või üldisemalt 34 00:01:28,330 --> 00:01:32,110 aadressi esimene märk kogu plokk tähemärki. 35 00:01:32,110 --> 00:01:36,680 >> Aga saak on see, et skaneerida s, selleks elu on antud aadress ja antud 36 00:01:36,680 --> 00:01:40,960 formaadis kood, nagu% s, loe string tüki 37 00:01:40,960 --> 00:01:42,330 mälu sellel aadressil. 38 00:01:42,330 --> 00:01:46,040 Aga kuna pole võrdusmärk enne et semikoolon esimesel 39 00:01:46,040 --> 00:01:49,310 koodirida, sest me tegelikult ei eraldada iga mälu 40 00:01:49,310 --> 00:01:53,020 malloc, sest see ei ole tegelikult jaotada massiivi mõnel suurust; 41 00:01:53,020 --> 00:01:57,620 sa teed loeb kasutaja klaviatuuriga mõnda täielik 42 00:01:57,620 --> 00:02:00,490 prügi väärtus, mis on s vaikimisi. 43 00:02:00,490 --> 00:02:04,480 Nii koefitsiendid sa lähed segfault kui et aadress ei ole lihtsalt nii juhtub, 44 00:02:04,480 --> 00:02:08,009 olema väärtus, mida saab tegelikult kirjutada. 45 00:02:08,009 --> 00:02:10,889 Nii halb mitte eraldada teie mälu on. 46 00:02:10,889 --> 00:02:13,150 >> Nii et küsimus 1, küsisime, oletame, et versioon 2 on 47 00:02:13,150 --> 00:02:14,230 koostatud ja rakendatud. 48 00:02:14,230 --> 00:02:15,900 Miks see programm segfault? 49 00:02:15,900 --> 00:02:17,990 Nii see on vähem lollakas. 50 00:02:17,990 --> 00:02:21,470 Ja seal on tõesti ainult üks selge viis, kus saab 51 00:02:21,470 --> 00:02:22,810 vallandada segfault siin. 52 00:02:22,810 --> 00:02:23,730 Ja see on temaatilised. 53 00:02:23,730 --> 00:02:28,180 Iga kord me kasutame c mälu, mida sa said esilekutsumiseks segfault 54 00:02:28,180 --> 00:02:30,718 versioonist 2? 55 00:02:30,718 --> 00:02:35,560 >> Publik: Kui te kasutate, et oma panuse string, mis on pikem kui 49 56 00:02:35,560 --> 00:02:35,975 tähemärki. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. Malan: Täpselt. 58 00:02:37,260 --> 00:02:41,420 Iga kord, kui näen midagi fikseeritud pikkusega kui tegemist on massiiv, oma 59 00:02:41,420 --> 00:02:44,650 radar peaks minema välja, et see võib olla problemaatiline, kui sa ei kontrolli 60 00:02:44,650 --> 00:02:45,810 piirid massiivi. 61 00:02:45,810 --> 00:02:46,650 Ja see on probleem. 62 00:02:46,650 --> 00:02:47,910 Me veel kasutades scanf. 63 00:02:47,910 --> 00:02:52,200 Me veel kasutades% s, mis tähendab, et proovida lugeda string kasutaja. 64 00:02:52,200 --> 00:02:56,300 See saab lugeda meie s, mis Siinkohal on tõhusalt 65 00:02:56,300 --> 00:02:58,570 aadress tüki mälu või see on samaväärne. 66 00:02:58,570 --> 00:03:02,080 See nimi array märkide mälu. 67 00:03:02,080 --> 00:03:07,610 >> Aga täpselt, et kui sa loed string see on pikem kui 49 tähemärki, 49 68 00:03:07,610 --> 00:03:10,440 sest teil on vaja ruumi kurakriips 0, sa lähed koguneda 69 00:03:10,440 --> 00:03:11,390 et puhver. 70 00:03:11,390 --> 00:03:16,410 Ja võite saada õnnelik ja suutma kirjutada 51. iseloomu, 52., 53.. 71 00:03:16,410 --> 00:03:18,560 Aga mingil hetkel OS ei ütle ei. 72 00:03:18,560 --> 00:03:21,270 See kindlasti ei ole mälu sa tohi puudutada. 73 00:03:21,270 --> 00:03:23,380 Ja programm läheb segfault. 74 00:03:23,380 --> 00:03:26,650 >> Nii et, heuristika peaks olema iga aega sul fikseeritud pikkusega, siis on 75 00:03:26,650 --> 00:03:30,150 veenduda loed pikkus ja mis see on sa üritad 76 00:03:30,150 --> 00:03:31,090 loe ta. 77 00:03:31,090 --> 00:03:35,110 >> Publik: Nii, et lahendada see, mida võiks pidanud avalduse kontrollimisel tegelikult 78 00:03:35,110 --> 00:03:37,140 on pikkus suurem või väiksem kui? 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. Malan: Absoluutselt. 80 00:03:37,730 --> 00:03:41,706 Sa pead lihtsalt seisukorras , mis ütleb, et kui - 81 00:03:41,706 --> 00:03:46,080 või pigem sa ei pruugi teada, ette, kui palju märke 82 00:03:46,080 --> 00:03:49,060 kasutaja saab tippida, sest teil on kana ja muna. 83 00:03:49,060 --> 00:03:51,860 Mitte enne, kui olete lugenud seda koos scanf Kas te saate aru, kui kaua see on. 84 00:03:51,860 --> 00:03:54,500 Aga sel hetkel, kui on liiga hilja, sest sa oled juba lugenud see 85 00:03:54,500 --> 00:03:55,710 mõned ploki mälu. 86 00:03:55,710 --> 00:03:59,590 Nii nagu kõrvale, CS50 raamatukogu väldib see asi üldse, tagasivõtmine 87 00:03:59,590 --> 00:04:01,060 abil fgetc. 88 00:04:01,060 --> 00:04:05,390 Ja see kõlab üks täht korraga, tip-keera mööda, teades, et sa 89 00:04:05,390 --> 00:04:08,060 ei uputa iseloomu kui Lugedes ühekaupa. 90 00:04:08,060 --> 00:04:11,580 >> Saak on koos getString tagasivõtmine on et me peame pidevalt uuesti suurus 91 00:04:11,580 --> 00:04:13,590 et tüki mälu, mis on vaid valu. 92 00:04:13,590 --> 00:04:15,310 See on palju ridu koodi teha. 93 00:04:15,310 --> 00:04:18,779 Nii teine ​​lähenemine oleks tegelikult kasutada nõbu, nii 94 00:04:18,779 --> 00:04:19,790 rääkida, on scanf. 95 00:04:19,790 --> 00:04:22,820 On variante palju neid funktsioone, mis tegelikult kontrollida 96 00:04:22,820 --> 00:04:25,870 pikkus, kui palju märke võite lugeda maksimaalselt. 97 00:04:25,870 --> 00:04:29,430 Ja siis võiks täpsustada, ei loe rohkem kui 50 tähemärki. 98 00:04:29,430 --> 00:04:34,110 Nii et oleks teine ​​lähenemine, kuid vähem majutamiseks suuremate sisendeid. 99 00:04:34,110 --> 00:04:37,040 >> Niisiis küsimus 2 küsib, oletame, et versioon 3 on koostatud ja rakendatud. 100 00:04:37,040 --> 00:04:39,960 Miks võib selle programmi segfault? 101 00:04:39,960 --> 00:04:42,650 Nii see on tegelikult sama vastata, kuigi see 102 00:04:42,650 --> 00:04:43,590 paistab pisut peenema. 103 00:04:43,590 --> 00:04:46,440 Me kasutame malloc, mis tundub me anname ise rohkem võimalusi. 104 00:04:46,440 --> 00:04:48,030 Ja siis me vabastades et mälu lõppu. 105 00:04:48,030 --> 00:04:49,580 See on ikka ainult 50 baiti mälu. 106 00:04:49,580 --> 00:04:53,620 Nii et me võiks veel proovida lugeda 51, 52, 1000 baiti. 107 00:04:53,620 --> 00:04:55,830 See saab segfault eest täpselt samal põhjusel. 108 00:04:55,830 --> 00:04:57,530 >> Kuid on veel üks põhjus ka. 109 00:04:57,530 --> 00:05:03,890 Mida võiks malloc tagastamise lisaks aadress tüki mälu? 110 00:05:03,890 --> 00:05:04,920 See võib naasta null. 111 00:05:04,920 --> 00:05:07,560 Ja kuna me ei kontrolli eest et me võiksime teha midagi 112 00:05:07,560 --> 00:05:11,350 loll muul põhjusel, mis seisneb selles, et me võiks öelda, scanf lugeda 113 00:05:11,350 --> 00:05:16,050 kasutaja sisend klaviatuur arvesse 0 asukoha AKA null. 114 00:05:16,050 --> 00:05:18,890 Ja see ka, kindlasti vallandada segfault. 115 00:05:18,890 --> 00:05:21,590 Nii viktoriin eesmärgi, oleksime on nõustunud kumbki neist nii 116 00:05:21,590 --> 00:05:22,740 mõjuv põhjus. 117 00:05:22,740 --> 00:05:23,420 Üks on identsed. 118 00:05:23,420 --> 00:05:25,720 Üks on natuke rohkem nüansse. 119 00:05:25,720 --> 00:05:28,975 >> Lõpuks, seoses programmi kasutada mälu, kuidas versioon 2 ja 120 00:05:28,975 --> 00:05:30,350 versioon 3 erinevad? 121 00:05:30,350 --> 00:05:35,070 Niisiis, mida see on väärt, nägime näiliselt lõputu pakkumise võimalik 122 00:05:35,070 --> 00:05:35,770 vastuseid sellele. 123 00:05:35,770 --> 00:05:39,300 Ja vahel inimeste vastuseid, mida me lootes, kuid me nõustuda teiste 124 00:05:39,300 --> 00:05:42,250 asjad, oli mõned mainita Asjaolu, et versioon 2 kasutab 125 00:05:42,250 --> 00:05:44,560 nn stack. 126 00:05:44,560 --> 00:05:46,710 Versioon 3 kasutab hunnik. 127 00:05:46,710 --> 00:05:50,060 Ja funktsionaalselt, see ei ole tegelikult tegema kõik, et palju erinevust. 128 00:05:50,060 --> 00:05:54,040 Lõpus päeval, et me oleme ikka lihtsalt saada 50 baiti mälu. 129 00:05:54,040 --> 00:05:56,640 >> Aga see oli üks võimalikke vastuseid et otsisime. 130 00:05:56,640 --> 00:05:59,730 Aga näete, kui sa saad oma viktoriinid tagasi TF, et me tegime 131 00:05:59,730 --> 00:06:04,330 aktsepteerida muid arutelusid nende erinevate kasutusalade mälu samuti. 132 00:06:04,330 --> 00:06:08,600 Aga korstna ja hunnik oleks olnud lihtne vastus minna. 133 00:06:08,600 --> 00:06:11,150 Kas on küsimusi? 134 00:06:11,150 --> 00:06:12,400 Ma annan sulle Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: Nii probleem 4. 137 00:06:20,210 --> 00:06:21,985 See on see, kus sa pidid täitma aastal baitide välja kõik 138 00:06:21,985 --> 00:06:23,460 Nende eri tüüpi kasutada. 139 00:06:23,460 --> 00:06:24,830 Nii et esimene asi, mida me näeme. 140 00:06:24,830 --> 00:06:27,930 Oletame, 32-bitine arhitektuur, Asjalik CS50 aparaat. 141 00:06:27,930 --> 00:06:33,530 Nii üks põhilisi asju 32-bitine arhitektuur, mis ütleb meile, 142 00:06:33,530 --> 00:06:37,490 täpselt, kui suur osuti läheb olevat arhitektuuri. 143 00:06:37,490 --> 00:06:43,020 >> Nii kohe, me teame, et kõik pointer tüüp on 32 bitti või 4 baiti. 144 00:06:43,020 --> 00:06:46,010 Nii vaadates seda tabelit, node * on viit tüüpi. 145 00:06:46,010 --> 00:06:47,250 See saab olema 4 baiti. 146 00:06:47,250 --> 00:06:51,640 Struct sõlme *, mis on sõna otseses mõttes identne sõlm star. 147 00:06:51,640 --> 00:06:53,590 Ja nii, et see saab olema 4 baiti. 148 00:06:53,590 --> 00:06:58,270 String, seega ei tundu pointer, aga typedef, 149 00:06:58,270 --> 00:07:01,590 string on lihtsalt char *, mis on viit tüüpi. 150 00:07:01,590 --> 00:07:03,550 Nii et see saab olema 4 baiti. 151 00:07:03,550 --> 00:07:06,150 >> Nii et need kolm on kõik 4 baiti. 152 00:07:06,150 --> 00:07:09,350 Nüüd sõlme ja õpilane on natuke keerulisem. 153 00:07:09,350 --> 00:07:15,160 Nii vaadeldes sõlme ja õpilane, siis näeme, sõlme täisarv ja pointer. 154 00:07:15,160 --> 00:07:18,050 Ja õpilane on kaks vihjeid sees on. 155 00:07:18,050 --> 00:07:23,340 Nii vähemalt meie puhul siin, kuidas et me lõpetame suuruse arvutamisel 156 00:07:23,340 --> 00:07:27,020 see struct on lihtsalt liita kõik mis seal sees struct. 157 00:07:27,020 --> 00:07:30,690 >> Nii sõlme, meil on täisarv, mis on 4 baiti. 158 00:07:30,690 --> 00:07:32,830 Meil on pointer, mis on 4 baiti. 159 00:07:32,830 --> 00:07:35,820 Ja nii üks sõlm läheb asuda 8 baiti. 160 00:07:35,820 --> 00:07:39,490 Ja samamoodi üliõpilane, meil on pointer, mis on 4 baiti ja teine 161 00:07:39,490 --> 00:07:40,770 pointer, mis on 4 baiti. 162 00:07:40,770 --> 00:07:43,180 Nii et läheb lõppu up on 8 baiti. 163 00:07:43,180 --> 00:07:45,480 Nii sõlme ja õpilane on 8 baiti. 164 00:07:45,480 --> 00:07:48,950 Ja need kolm on kõik 4 baiti. 165 00:07:48,950 --> 00:07:50,240 Küsimused, mis? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Jah. 168 00:07:54,990 --> 00:07:58,413 >> Publik: Kas see oli 64-bit arhitektuur, kas see 169 00:07:58,413 --> 00:07:59,880 kahekordistada neid kõiki? 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: See ei tooks kahekordistada neid kõiki. 171 00:08:01,790 --> 00:08:05,830 Nii 64-bitine arhitektuur, seda jällegi muutusi, mis põhiline asi, mis 172 00:08:05,830 --> 00:08:08,910 pointer on nüüd 64 bitti. 173 00:08:08,910 --> 00:08:09,290 Jah. 174 00:08:09,290 --> 00:08:10,930 Nii osuti on 8 baiti. 175 00:08:10,930 --> 00:08:15,420 Nii et need, kes olid 4 baiti saab olema 8 baiti. 176 00:08:15,420 --> 00:08:18,617 Õpilane, kes oli kaks suunanäitajaks, Noh, nüüd siis läheb 177 00:08:18,617 --> 00:08:19,800 olema 8 baiti, 8 baiti. 178 00:08:19,800 --> 00:08:21,980 See saab teha 16 baiti. 179 00:08:21,980 --> 00:08:25,710 >> Aga tipp on veel 4 baiti. 180 00:08:25,710 --> 00:08:27,800 Nii et see osuti läheb olema 8 baiti. 181 00:08:27,800 --> 00:08:28,930 See on 4 baiti. 182 00:08:28,930 --> 00:08:30,870 Nii sõlm on ainult kavatse olema 12 baiti. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Muid küsimusi, et üks? 185 00:08:39,280 --> 00:08:44,500 Nii kõrval üks, on need HTTP olekud. 186 00:08:44,500 --> 00:08:48,000 Ja siis tuli kirjeldada asjaolusid mille alusel need võivad 187 00:08:48,000 --> 00:08:49,810 tagastatakse Teile. 188 00:08:49,810 --> 00:08:56,730 üks probleem, et ma kuulsin mõned õpilased on see, et nad püüdsid teha 189 00:08:56,730 --> 00:08:58,950 vead on kliendi lõpuni. 190 00:08:58,950 --> 00:09:02,320 Nii et kui me püüame teha taotluse server, midagi läheb 191 00:09:02,320 --> 00:09:03,820 valesti meie lõpp. 192 00:09:03,820 --> 00:09:07,660 Aga üldiselt on need koodid tagastatakse serveri poolt. 193 00:09:07,660 --> 00:09:11,720 Nii et me tahame teada, mis toimub vale või õige server, mis 194 00:09:11,720 --> 00:09:14,280 põhjustab neid asju tagasi. 195 00:09:14,280 --> 00:09:18,670 Miks võiks server naaseb staatuse kood 200? 196 00:09:18,670 --> 00:09:19,920 Kõik mõtted? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Jah. 199 00:09:23,730 --> 00:09:27,850 Seega midagi edukalt taotlus läbis. 200 00:09:27,850 --> 00:09:30,260 Ja nad naasta mida sa palusid. 201 00:09:30,260 --> 00:09:32,240 Nii et kõik on korras. 202 00:09:32,240 --> 00:09:35,662 Aga 302 leitud? 203 00:09:35,662 --> 00:09:36,618 Jah. 204 00:09:36,618 --> 00:09:39,008 >> Publik: server otsisin mida sa soovisid. 205 00:09:39,008 --> 00:09:40,442 Aga ta ei suutnud seda leida. 206 00:09:40,442 --> 00:09:42,850 Nii et seal on viga. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: Nii server oli otsin, mida sa tahtsid. 208 00:09:47,720 --> 00:09:51,682 Nii lihtsalt vaadates siin, 302 leidis, see oli võimalik leida. 209 00:09:51,682 --> 00:09:53,035 >> Publik: Mul on kahju. 210 00:09:53,035 --> 00:09:54,388 Leitud tähendab, et nad ei leia ta. 211 00:09:54,388 --> 00:09:55,638 Vabandust. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: So 302 found. 214 00:10:00,160 --> 00:10:02,350 Server on võimalik leida mida sa tahtsid. 215 00:10:02,350 --> 00:10:04,640 >> Publik: Aga see ei näita seda? 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: vahe Selle 302 ja 200, et see 217 00:10:08,180 --> 00:10:09,280 teab, mida sa tahad. 218 00:10:09,280 --> 00:10:12,000 Aga see ei ole täpselt, kus sa tahtsid küsida. 219 00:10:12,000 --> 00:10:14,580 Nii 302 on tüüpiline suunata. 220 00:10:14,580 --> 00:10:16,510 Nii sa soovisid lehel. 221 00:10:16,510 --> 00:10:19,590 Ta teab, oh, ma tahan tagasi sulle selle. 222 00:10:19,590 --> 00:10:21,070 Aga see on erinev URL. 223 00:10:21,070 --> 00:10:23,534 Nii hei, mida sa tegelikult tahad seda. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. Malan: See on tükk, mis ütles et andsime teid suunata 225 00:10:26,950 --> 00:10:30,830 funktsioon, mida kasutatakse päises funktsioon mis omakorda trükkida asukoht 226 00:10:30,830 --> 00:10:34,110 käärsoole ja seejärel URL millele soovite keelduda kasutaja. 227 00:10:34,110 --> 00:10:37,480 Isegi kui sa ei näe 302 selgesõnaliselt seal, et on, mida PHP 228 00:10:37,480 --> 00:10:41,550 oleks maagiliselt sisestada nagu päises öelda täpselt, mida Rob ütles, et - 229 00:10:41,550 --> 00:10:41,930 leitud. 230 00:10:41,930 --> 00:10:43,180 Aga mine parem siia. 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 Nii et kuidas 403 keelatud? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Publik: Ma arvan, et see, et server Põhimõtteliselt ütleb, et klient 236 00:10:57,120 --> 00:10:59,970 ei pääse kodulehekülg. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: Nii et jah. 238 00:11:03,260 --> 00:11:07,670 Noh, tüüpiline vastus olime oodates on midagi, failid 239 00:11:07,670 --> 00:11:08,920 ei chmodded sobivalt. 240 00:11:08,920 --> 00:11:11,590 See on ilmselt põhjus, millistel tingimustel nägid neid. 241 00:11:11,590 --> 00:11:18,920 Aga seal on üks põhjus, et klient võiks olla viga siin. 242 00:11:18,920 --> 00:11:20,440 Seal on tegelikult veel status code - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Nii et need on väga sarnased. 245 00:11:22,820 --> 00:11:24,590 >> 401 on lubamatu. 246 00:11:24,590 --> 00:11:26,130 Ja 403 on keelatud. 247 00:11:26,130 --> 00:11:31,890 Ja nii volitamata sa ainult saada, kui sa pole sisse logitud 248 00:11:31,890 --> 00:11:34,520 Aga logides võib tähendada et teil on õigus. 249 00:11:34,520 --> 00:11:37,930 Aga kui sa oled juba sisse loginud ja te veel ei ole luba, siis 250 00:11:37,930 --> 00:11:40,140 saab ka keelatud. 251 00:11:40,140 --> 00:11:45,320 Nii et kui te olete sisse logitud ja ei ole loata keelatud on ka 252 00:11:45,320 --> 00:11:47,164 midagi saad. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. Malan: ja mehhanismiga, kus need probleemid on tavaliselt 254 00:11:48,900 --> 00:11:53,100 lahendatud serveris on kaudu, mida käsk? 255 00:11:53,100 --> 00:11:57,700 Chmod, kui see on tõepoolest õigused väljastada faili või kataloogi. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN Siis 404 ei leitud. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Jah. 259 00:12:03,470 --> 00:12:10,150 Seega erinevalt 302, kus ei ole täpselt kus sa palud, kuid ta teab, mida 260 00:12:10,150 --> 00:12:12,710 sa tahad, see, see lihtsalt on ei tea, mida sa tahad. 261 00:12:12,710 --> 00:12:15,648 Ja sa ei ole esitanud midagi kehtiv. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Ma olen teekann ja seejärel 500 internal server. 264 00:12:22,310 --> 00:12:24,870 Miks võiks sa selle said? 265 00:12:24,870 --> 00:12:26,120 >> Nii segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Ma tegelikult ei tea, liigitamine standard eest. 268 00:12:30,640 --> 00:12:34,850 Aga kui teie PHP kood oli midagi vale see, teoreetiliselt võiks see 269 00:12:34,850 --> 00:12:39,650 tegelikult segfault, mispuhul see 500 internal server error, midagi 270 00:12:39,650 --> 00:12:41,400 viga on serveri konfiguratsioonis. 271 00:12:41,400 --> 00:12:44,320 Või seal on süntaksi viga Sinu PHP koodi. 272 00:12:44,320 --> 00:12:46,095 Või midagi halba juhtub. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. Malan: Me ei vaata segfault väheste inimeste vastuseid. 274 00:12:48,320 --> 00:12:49,490 Ja tehniliselt, see võib juhtuda. 275 00:12:49,490 --> 00:12:53,820 Aga see oleks PHP programm kirjutatud teiste inimeste poolt, tegelikult 276 00:12:53,820 --> 00:12:57,790 GDB, mis ainult siis, kui need inimesed, silmamunad ja kirjutas lollakas kood 277 00:12:57,790 --> 00:13:00,680 nende tõlk oleks PHP ise segfault. 278 00:13:00,680 --> 00:13:06,460 Nii et kuigi 500 on nagu segfault vaimus, see on peaaegu alati 279 00:13:06,460 --> 00:13:10,490 tulemusena konfiguratsioonifailis küsimus oma veebi server või kui Rob ütles 280 00:13:10,490 --> 00:13:13,200 süntaksi nagu sa ei sulgenud tsiteerida. 281 00:13:13,200 --> 00:13:16,180 Või sa kaotasid semikooloniga kusagil. 282 00:13:16,180 --> 00:13:23,677 >> Publik: Nii Shuttle pset, I arvan, et kui ma seda tegin, kui ma klõpsatud 283 00:13:23,677 --> 00:13:26,300 brauseri, kuid midagi tuli, mida nad nimetasid valge leht. 284 00:13:26,300 --> 00:13:28,056 Aga see oli, sest kood. 285 00:13:28,056 --> 00:13:29,440 Ma arvan, et see oli JavaScript, eks? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Jah. 287 00:13:29,770 --> 00:13:31,180 >> Publik: Kas see viga veel tulla? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Nii et te ei oleks saanud see viga, sest kõik 289 00:13:34,290 --> 00:13:36,930 veebiserverisse seisukohast oli täiesti korras. 290 00:13:36,930 --> 00:13:39,090 Aga sa soovisid index.html. 291 00:13:39,090 --> 00:13:42,000 Sa taotles shuttle.js ja service.js. 292 00:13:42,000 --> 00:13:44,580 Ja ta suutis edukalt naasta et te kõik need asjad - 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 See on ainult siis, kui brauseri proovinud tõlgendada JavaScript koodi, mis 296 00:13:49,330 --> 00:13:51,370 See on nagu, oota, see ei ole kehtiv JavaScript viga. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Muid küsimusi? 299 00:13:58,210 --> 00:14:00,750 Hea küll. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. Malan: Nii et järgmine up oli number 11. 301 00:14:04,120 --> 00:14:07,610 Ja 11 oli kõige hirmutavam jaoks palju inimesi. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Nii et kõige tähtsam on tähele panna siin oli, et see oli tõepoolest umbes 304 00:14:18,570 --> 00:14:19,840 kahekordselt seotud nimekirja. 305 00:14:19,840 --> 00:14:23,160 Kuid see ei olnud sama, mis eelmisel aastal kahekordselt seotud nimekirja probleemid, 306 00:14:23,160 --> 00:14:27,170 mis ei anna teile hoiatus, et nimekirja võib tegelikult olla sortimata. 307 00:14:27,170 --> 00:14:29,640 >> Niisiis asjaolu, et nimekiri oli sortimata ja asjaolu, et see sõna oli 308 00:14:29,640 --> 00:14:32,930 rõhutati seal pidi edasi et see on tegelikult lihtsustamise 309 00:14:32,930 --> 00:14:35,430 mis muidu oleks olnud keerukam probleem 310 00:14:35,430 --> 00:14:36,600 ja pikem. 311 00:14:36,600 --> 00:14:40,760 Nii üldine viga siin oli pidanud eelmise aasta lahendus teie üks 312 00:14:40,760 --> 00:14:45,580 piipar ja siis lihtsalt pimesi kopeerida, et alla kui vastus, mis on õige 313 00:14:45,580 --> 00:14:48,520 vastata teistsugune küsimus sarnase sisuga. 314 00:14:48,520 --> 00:14:51,340 Aga peensusi siin olid järgmised. 315 00:14:51,340 --> 00:14:55,200 >> Nii et üks, oleme sõlme deklareeritud ja määratletud tavapärasel viisil siin. 316 00:14:55,200 --> 00:14:59,230 Siis määratletud loetelu olla globaalne pointer lähtestatud tühjaks. 317 00:14:59,230 --> 00:15:02,150 Siis ilmselt, seal on kaks funktsiooni meil prototüüpe siia, sisesta 318 00:15:02,150 --> 00:15:03,240 ja eemaldada. 319 00:15:03,240 --> 00:15:06,600 Ja siis on meil mõned proovi kood siia teeme hunnik sisestamisel. 320 00:15:06,600 --> 00:15:09,930 Ja siis me palume teil täita rakendamise sisesta allpool sellistes 321 00:15:09,930 --> 00:15:14,380 nii, et see lisab n viiakse nimekiri pidevas ajal rõhutas ka, 322 00:15:14,380 --> 00:15:15,730 isegi kui see on juba olemas. 323 00:15:15,730 --> 00:15:20,600 >> Nii ilu on võimalik sisestada konstantse ajaga on see, et see tähendab, 324 00:15:20,600 --> 00:15:23,060 et teil sisestada uus sõlm, kus? 325 00:15:23,060 --> 00:15:23,690 Into ees. 326 00:15:23,690 --> 00:15:27,760 Seega kaob õnneks vähemalt üks juhtudel oli varem vaja 327 00:15:27,760 --> 00:15:30,520 isegi rohkem rida koodi, nagu ta tegi, eelmisel aastal ja ka klassi kui me 328 00:15:30,520 --> 00:15:34,040 rääkisime läbi selline asi inimestega ning mõned 329 00:15:34,040 --> 00:15:35,250 suuline pseudo kood. 330 00:15:35,250 --> 00:15:39,190 Nii et lahendus siin, lähme vahele jätta selle lihtsalt on silmaga 331 00:15:39,190 --> 00:15:40,480 ekraanil. 332 00:15:40,480 --> 00:15:42,230 >> Pange tähele, et me teeme järgmine. 333 00:15:42,230 --> 00:15:45,140 Ja ka teate muid lihtsustusi oli, et isegi juhul, kui see 334 00:15:45,140 --> 00:15:48,280 juba olemas, nii et see tähendab, isegi kui number on juba olemas, saate 335 00:15:48,280 --> 00:15:50,280 lihtsalt pimesi lisada veel koopia. 336 00:15:50,280 --> 00:15:52,560 Ja see ka, pidi olema lihtsustamist, et saaksite 337 00:15:52,560 --> 00:15:54,940 keskenduda tõesti, mõned rohkem intellektuaalselt huvitav osa ja 338 00:15:54,940 --> 00:15:58,090 mitte ainult mõned täiendavad veakontrollifunktsioon arvestades piiratud aja jooksul. 339 00:15:58,090 --> 00:16:02,880 >> Nii et selles proovis lahendus, me eraldada kursor vasakul 340 00:16:02,880 --> 00:16:04,510 küljele siin sõlme. 341 00:16:04,510 --> 00:16:07,190 Nüüd mõistan, et pointer, kuna Rob ütles, on ainult 32 bitti. 342 00:16:07,190 --> 00:16:09,060 Ja see ei ole tegelikult sisaldavad aadress, kuni olete 343 00:16:09,060 --> 00:16:09,970 anna see aadress. 344 00:16:09,970 --> 00:16:13,220 Ja me teeme seda on paremal side kaudu malloc. 345 00:16:13,220 --> 00:16:16,550 Nagu hea kodanik, siis kontrollige, et malloc pole tegelikult null, nii et 346 00:16:16,550 --> 00:16:18,690 me ei kogemata tekitada segfault siin. 347 00:16:18,690 --> 00:16:22,840 Ja iga kord, kui kasutate malloc elus, siis peaksid olema kontrollimiseks null, muidu 348 00:16:22,840 --> 00:16:24,090 teil on peen viga. 349 00:16:24,090 --> 00:16:28,460 >> Siis initsialiseerida et null poolt määrates n ja eelmisele või järgmisele. 350 00:16:28,460 --> 00:16:32,450 Ja selles asjas, ma initsialiseerida Varasemates null, sest see uus 351 00:16:32,450 --> 00:16:34,780 sõlm saab olema uus alguses minu nimekirjas. 352 00:16:34,780 --> 00:16:37,050 Nii et see saab olema midagi enne seda. 353 00:16:37,050 --> 00:16:42,010 Ja ma tahan, et sisuliselt lisada olemasolevat loendit uue sõlme poolt 354 00:16:42,010 --> 00:16:44,700 milles järgmine võrdne nimekirja ise. 355 00:16:44,700 --> 00:16:47,120 Aga ma ei teinud veel. 356 00:16:47,120 --> 00:16:51,780 Nii et kui nimekiri iseenesest juba olemas, ja seal oli vähemalt üks sõlm 357 00:16:51,780 --> 00:16:57,070 juba olemas, kui see on loendis siin ja ma lisada uus sõlm siin, ma 358 00:16:57,070 --> 00:17:01,840 on vaja veendumaks, et mu endine sõlme juhib tagasi minu uus sõlm, 359 00:17:01,840 --> 00:17:04,260 sest see on jällegi kahekordselt seotud nimekirja. 360 00:17:04,260 --> 00:17:05,460 >> Nii et me meelerahu vaadata. 361 00:17:05,460 --> 00:17:10,109 Kui nimekirjas ei ole null, kui seal on juba ühe või enama sõlme seal, siis 362 00:17:10,109 --> 00:17:12,470 lisada, et tagasi antud nii rääkida. 363 00:17:12,470 --> 00:17:15,420 Ja siis väga viimane asi, me peame teha, on tegelikult uuendada ülemaailmse 364 00:17:15,420 --> 00:17:20,329 muutuv nimekiri ise juhtida selle uue sõlme. 365 00:17:20,329 --> 00:17:21,790 Jah. 366 00:17:21,790 --> 00:17:26,579 >> Publik: In pointer nool [Kuuldamatu] võrdub null, siis kas see 367 00:17:26,579 --> 00:17:30,420 tegelema nimekirja, sest Nimekiri on null? 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. Malan: Ei. 369 00:17:30,596 --> 00:17:34,500 See on lihtsalt minu on ennetavalt ettevaatlik, sest kui see on minu 370 00:17:34,500 --> 00:17:38,730 Algset nimekirja võibolla veel mõned sõlmed siin ja ma olen lisades minu 371 00:17:38,730 --> 00:17:42,380 uus sõlm siin, seal saab olla midagi siin. 372 00:17:42,380 --> 00:17:44,720 Ja ma tahan, et lüüa, et idee seades enne 373 00:17:44,720 --> 00:17:47,740 null kohta uus sõlm. 374 00:17:47,740 --> 00:17:51,410 Ja arvatavasti, kui minu kood on õige ja ei ole muud võimalust lisada 375 00:17:51,410 --> 00:17:54,970 sõlmed peale seda funktsiooni, arvatavasti, isegi kui nimekiri on juba 376 00:17:54,970 --> 00:18:00,090 üks või rohkem tippe see arvatavasti nimekirja esimene sõlm, oleks 377 00:18:00,090 --> 00:18:02,750 eelmine osuti null ise. 378 00:18:02,750 --> 00:18:03,550 >> Publik: Ja just järelkontrolli. 379 00:18:03,550 --> 00:18:08,139 Põhjus paned kursori järgmise võrdsete Nimekiri on sa üritad pointer 380 00:18:08,139 --> 00:18:13,579 Enne nimekirja, et see osutab teisele, ma arvan - 381 00:18:13,579 --> 00:18:14,980 Ma ei - 382 00:18:14,980 --> 00:18:15,450 lihtsalt nimekirjad? 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. Malan: Täpselt. 384 00:18:16,400 --> 00:18:19,400 Ja olgem tegelikult kaaluda kahel juhul siin tõesti, kuigi 385 00:18:19,400 --> 00:18:22,070 et me kaaluda neid ei ole üsna sama koodi. 386 00:18:22,070 --> 00:18:26,250 Aga kõrge tase, kui see on loetleda ja see on 32-bitine 387 00:18:26,250 --> 00:18:29,560 pointer, lihtsam stsenaarium et see on null vaikimisi. 388 00:18:29,560 --> 00:18:33,010 Ja arvan, et ma tahan lisada number 50 oli esimene number. 389 00:18:33,010 --> 00:18:37,640 Ma lähen edasi minna ja eraldama sõlm, mis läheb sisaldavad 390 00:18:37,640 --> 00:18:38,770 kolmes valdkonnas - 391 00:18:38,770 --> 00:18:42,070 n, eelmine ja järgmine. 392 00:18:42,070 --> 00:18:44,580 >> Ma panen number 50 siin, sest see on n. 393 00:18:44,580 --> 00:18:46,130 See saab olema järgmine. 394 00:18:46,130 --> 00:18:48,530 Ja see saab olema eelmisest. 395 00:18:48,530 --> 00:18:50,910 Ja mida ma pean tegema sel juhul? 396 00:18:50,910 --> 00:18:53,900 Noh, ma olen lihtsalt teinud line 1 siin. 397 00:18:53,900 --> 00:18:55,400 Pointer n saab n. 398 00:18:55,400 --> 00:18:57,740 Ma siis ütlesid eelmine peaksid null. 399 00:18:57,740 --> 00:18:59,470 Nii et see saab olema null. 400 00:18:59,470 --> 00:19:01,365 Siis ma lähen ütlen järgmise ei hakka nimekirja. 401 00:19:01,365 --> 00:19:05,150 >> Ja see lihtsalt toimib hästi. 402 00:19:05,150 --> 00:19:06,500 See on null. 403 00:19:06,500 --> 00:19:10,620 Ja nii ma ütlen, uus sõlm järgmise valdkonnas peaks saama see, mis see on. 404 00:19:10,620 --> 00:19:12,570 Nii et paneb teise null seal. 405 00:19:12,570 --> 00:19:14,510 Ja siis viimane asi, Ma ei vaadata siin. 406 00:19:14,510 --> 00:19:17,870 Kui loetelu ei ole võrdne null, kuid see võrdub null, nii et me vahele, et 407 00:19:17,870 --> 00:19:18,470 täielikult. 408 00:19:18,470 --> 00:19:23,520 Ja nii ma järgmisena teha on nimekiri muutub pointer, mis piltlikult tulemuseks 409 00:19:23,520 --> 00:19:25,570 pilt selline. 410 00:19:25,570 --> 00:19:26,620 Nii et üks stsenaarium. 411 00:19:26,620 --> 00:19:30,490 >> Ja see, mida sa küsisid konkreetselt on olukord selline, 412 00:19:30,490 --> 00:19:33,190 kus meil on juba ühe sõlme nimekirja. 413 00:19:33,190 --> 00:19:36,240 Ja kui ma olen läinud tagasi üles originaal Probleem avaldus, järgmine meiepoolsete 414 00:19:36,240 --> 00:19:39,320 sisestada sõna on 34, lihtsalt huvides arutelu. 415 00:19:39,320 --> 00:19:46,210 Nii et ma lähen lihtsalt mugavalt Joonistame selle siia. 416 00:19:46,210 --> 00:19:47,540 Ma olen lihtsalt malloced. 417 00:19:47,540 --> 00:19:49,310 Oletame Ma kontrollin for null. 418 00:19:49,310 --> 00:19:51,870 >> Nüüd ma lähen initsialiseerida n olema 34. 419 00:19:51,870 --> 00:19:53,040 Ja see on n. 420 00:19:53,040 --> 00:19:54,670 See saab olema järgmine. 421 00:19:54,670 --> 00:19:57,100 Ja see saab olema eelmisest. 422 00:19:57,100 --> 00:19:59,370 Teeme kindlaks, et ma ei teinud seda saada see tagasi. 423 00:19:59,370 --> 00:20:01,110 Eelmine esikohal aastal definitsiooni. 424 00:20:01,110 --> 00:20:03,070 Las ma lahendan selle. 425 00:20:03,070 --> 00:20:04,410 See eelmine. 426 00:20:04,410 --> 00:20:05,780 See on järgmine. 427 00:20:05,780 --> 00:20:08,620 Isegi kui need on identsed, Jätame selle järjepidev. 428 00:20:08,620 --> 00:20:09,450 >> Eelmine. 429 00:20:09,450 --> 00:20:11,030 See on järgmine. 430 00:20:11,030 --> 00:20:16,310 Nii et ma olen lihtsalt malloced minu märkus, kontrollitud for null, määrati 34 arvesse sõlme. 431 00:20:16,310 --> 00:20:17,570 Eelmine muutub null. 432 00:20:17,570 --> 00:20:19,480 Nii et annab mulle. 433 00:20:19,480 --> 00:20:21,010 Järgmine saab nimekirja. 434 00:20:21,010 --> 00:20:22,370 Nii nimekiri on järgmine. 435 00:20:22,370 --> 00:20:26,520 Nii et see on sama, nüüd nagu joonistus see nool, et nad viitavad ühe 436 00:20:26,520 --> 00:20:27,940 aastal sama. 437 00:20:27,940 --> 00:20:30,400 Ja siis ma kontrollin, kas nimekirja ei ole võrdne null. 438 00:20:30,400 --> 00:20:31,740 Ja see ei ole see aeg. 439 00:20:31,740 --> 00:20:35,580 Siis ma teen nimekirja eelmine muutub kursor. 440 00:20:35,580 --> 00:20:39,700 >> Nii nimekiri eelmine muutub PTR. 441 00:20:39,700 --> 00:20:44,300 Nii et see on toime pannes graafiline nool siin. 442 00:20:44,300 --> 00:20:46,930 Ja see muutub vähe laineline liinid. 443 00:20:46,930 --> 00:20:50,780 Ja siis lõpuks, ma värskendan list käsk pointer. 444 00:20:50,780 --> 00:20:55,560 Nüüd see viitab see kutt. 445 00:20:55,560 --> 00:20:57,170 Ja nüüd, teeme kiire Psüühikavise. 446 00:20:57,170 --> 00:20:59,470 >> Siin on nimekiri, mis on globaalse muutuja. 447 00:20:59,470 --> 00:21:02,850 Esimene sõlm on tõepoolest 34, sest Ma pärast noolt. 448 00:21:02,850 --> 00:21:05,210 Ja see on õige, sest ma tahan sisestada alguses nimekirja 449 00:21:05,210 --> 00:21:06,070 kõik uued tipud. 450 00:21:06,070 --> 00:21:08,860 Tema järgmine valdkonnas paneb mind seda meest. 451 00:21:08,860 --> 00:21:10,710 Kui ma käiks, ma tabanud kõrval on null. 452 00:21:10,710 --> 00:21:11,760 Seega ei ole enam nimekirjas. 453 00:21:11,760 --> 00:21:14,460 Kui ma tabanud eelmisel ma saan tagasi, kui ma oodata. 454 00:21:14,460 --> 00:21:16,435 >> Seega on veel mõningaid näpunäiteid, Ilmselt manipuleerida. 455 00:21:16,435 --> 00:21:19,870 Aga see, et sa olid rääkinud, mida teha see pidev aeg tähendab, et sa ainult 456 00:21:19,870 --> 00:21:22,910 on hulga asju olete lubatud teha. 457 00:21:22,910 --> 00:21:24,290 Ja mis see number? 458 00:21:24,290 --> 00:21:25,185 See võib olla üks samm. 459 00:21:25,185 --> 00:21:25,700 See võib olla kaks. 460 00:21:25,700 --> 00:21:26,820 See võib olla 1000 sammu. 461 00:21:26,820 --> 00:21:30,500 Aga see on piiratud, mis tähendab, et sa ei saa on mingeid silmukoiminen toimub 462 00:21:30,500 --> 00:21:32,010 siin, rekursioon, ei silmuseid. 463 00:21:32,010 --> 00:21:37,390 See on lihtsalt pean olema kodeeritud read koodi, mis meil on selles proovis. 464 00:21:37,390 --> 00:21:42,330 >> Nii et järgmine probleem 12 palus meil täielik rakendamine eemalda 465 00:21:42,330 --> 00:21:46,740 Allpool sellisel viisil, et see eemaldab n nimekirjast lineaarne aeg. 466 00:21:46,740 --> 00:21:48,740 Nii et teil on veidi rohkem kõigutama tuba nüüd. 467 00:21:48,740 --> 00:21:52,380 Võite eeldada, et n, kui see on olemas loendis on kohal 468 00:21:52,380 --> 00:21:53,340 mitte rohkem kui üks kord. 469 00:21:53,340 --> 00:21:56,770 Ka see on mõeldud viktoriin põhinev lihtsustada eeldusel, et 470 00:21:56,770 --> 00:21:59,780 et kui sa leiad number 50 kusagil nimekirjas, siis ei ole ka 471 00:21:59,780 --> 00:22:02,890 pea muretsema jätkates itereerima, otsin kõikvõimalikke 472 00:22:02,890 --> 00:22:06,990 koopia 50, mis oleks lihtsalt vaimule mõnda minutia piiratud aja jooksul. 473 00:22:06,990 --> 00:22:10,460 >> Nii eemaldada, see oli kindlasti keerukamaks ja rohkem 474 00:22:10,460 --> 00:22:11,640 koodi kirjutada. 475 00:22:11,640 --> 00:22:14,990 Aga esmapilgul, ausalt, see võib vaata valdav ja nagu midagi 476 00:22:14,990 --> 00:22:17,060 ei ole nii, siis võiks olla tulla on viktoriini. 477 00:22:17,060 --> 00:22:22,450 Aga kui me keskendume sammud, Loodetavasti äkki 478 00:22:22,450 --> 00:22:26,060 leida, et iga individuaalse samme teeb selge mõistus 479 00:22:26,060 --> 00:22:27,080 tagantjärele. 480 00:22:27,080 --> 00:22:28,200 Võtame vaata. 481 00:22:28,200 --> 00:22:32,570 >> Nii et esimene, me initsialiseerida pointer olema nimekirja ise. 482 00:22:32,570 --> 00:22:36,040 Sest ma tahan lineaarne aeg, et vahendid Ma lähen on mõned loop. 483 00:22:36,040 --> 00:22:39,730 Ja levinum viis Käi sõlmede nimekiri struktuur või mis tahes 484 00:22:39,730 --> 00:22:43,860 struktuuri korduvalt on võtta kursor ees andmeid 485 00:22:43,860 --> 00:22:46,990 struktuur ja seejärel lihtsalt alustada ajakohastamine see ja kõndida oma teed 486 00:22:46,990 --> 00:22:48,650 kaudu andmete struktuuri. 487 00:22:48,650 --> 00:22:50,040 Nii et ma teen just nii. 488 00:22:50,040 --> 00:22:54,260 >> Kuigi pointer, mu ajutine muutuja, ei ole võrdne null, olgem 489 00:22:54,260 --> 00:22:55,660 minna ja vaadata. 490 00:22:55,660 --> 00:22:56,910 Kas ma saan õnnelik? 491 00:22:56,910 --> 00:23:01,740 Kas n valdkonnas sõlme Olen praegu vaadates võrdne 492 00:23:01,740 --> 00:23:03,380 number Otsin? 493 00:23:03,380 --> 00:23:05,410 Ja kui nii, teeme midagi. 494 00:23:05,410 --> 00:23:10,020 Nüüd märka seda, kui tingimus ümbritseb kogu 495 00:23:10,020 --> 00:23:11,520 järgmine rida koodi. 496 00:23:11,520 --> 00:23:14,610 See on ainuke asi, millest ma hoolin - leida number küsimus. 497 00:23:14,610 --> 00:23:18,010 Seega pole muud, mis lihtsustab asjad kontseptuaalselt natuke. 498 00:23:18,010 --> 00:23:22,040 >> Aga nüüd sain aru, ja te võib-olla ainult seda mõistnud pärast mõtlemine 499 00:23:22,040 --> 00:23:24,720 läbi veidi, seal on tegelikult kahel juhul siin. 500 00:23:24,720 --> 00:23:28,060 Üks on see, kui sõlm on loetelu alguses, mis on 501 00:23:28,060 --> 00:23:31,040 natuke tüütu, sest see on eriline juhtum, sest sa pead tegelema 502 00:23:31,040 --> 00:23:33,340 see asi, mis on ainus anomaalia. 503 00:23:33,340 --> 00:23:35,720 Kõikjal mujal nimekirjas, see on sama asi. 504 00:23:35,720 --> 00:23:38,050 Seal eelmine sõlme ja järgmise sõlm, eelmine tipp, järgmine sõlme. 505 00:23:38,050 --> 00:23:40,940 Aga see mees on veidi eriline kui ta alguses. 506 00:23:40,940 --> 00:23:48,710 >> Nii et kui osuti võrdub nimekiri ise, nii et kui ma alguses 507 00:23:48,710 --> 00:23:53,960 nimekirja ja leidsin n, ma vajan teha paar asja. 508 00:23:53,960 --> 00:23:59,230 Üks, mul on vaja muuta nimekirja juhtida järgmisele väljale, 50. 509 00:23:59,230 --> 00:24:01,270 Olgu, oletame, et ma üritan eemaldada 34. 510 00:24:01,270 --> 00:24:03,560 Nii et see mees peab minema ära vaid hetk. 511 00:24:03,560 --> 00:24:07,210 >> Nii et ma ütlen, nimekiri saab pointer kõrval. 512 00:24:07,210 --> 00:24:08,570 Noh, see on osuti. 513 00:24:08,570 --> 00:24:10,360 Järgmine on suunaga siia. 514 00:24:10,360 --> 00:24:17,470 Nii et see on muutumas see nool paremale nüüd käsk see kutt siin. 515 00:24:17,470 --> 00:24:19,580 Nüüd, pea meeles, on meil ajutise muutuja. 516 00:24:19,580 --> 00:24:23,520 Nii et me ei ole orvuks iga sõlmede sest mul on ka see kutt minu 517 00:24:23,520 --> 00:24:25,010 rakendamise eemalda. 518 00:24:25,010 --> 00:24:29,600 Nüüd, kui nimekiri ei ole iseenesest null, Mul on vaja määrata natuke midagi. 519 00:24:29,600 --> 00:24:32,690 >> Ma pean nüüd veenduda, et see nool, mis on eelnevalt osutades 520 00:24:32,690 --> 00:24:36,830 50-34, see on saanud ära minna, sest kui ma üritan lahti saada 521 00:24:36,830 --> 00:24:41,910 34, 50 oli parem ei säilita objekti tagasi viite seda 522 00:24:41,910 --> 00:24:42,820 Nool soovitas. 523 00:24:42,820 --> 00:24:44,820 Tegin seda joont. 524 00:24:44,820 --> 00:24:46,520 Siis ma olen teinud. 525 00:24:46,520 --> 00:24:48,040 See juhtum on tegelikult üsna lihtne. 526 00:24:48,040 --> 00:24:51,010 Tükeldamise off eesotsas nimekirja on suhteliselt lihtne. 527 00:24:51,010 --> 00:24:52,980 >> Kahjuks pole seda tüütu teine ​​plokk. 528 00:24:52,980 --> 00:24:56,170 Nüüd pean ma kaaluma võimalust kui on midagi keskel. 529 00:24:56,170 --> 00:24:59,880 Aga see ei ole liiga kohutav, välja arvatud süntaksi niimoodi. 530 00:24:59,880 --> 00:25:03,080 Nii et kui ma ei ole alguses nimekirja, ma olen kusagil keskel. 531 00:25:03,080 --> 00:25:08,160 Ja seda joont siin ütleb, start ükskõik sõlme sa oled. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Eelmise sõlme järgmisele väljale ja punkt, et kursor. 534 00:25:18,550 --> 00:25:20,390 >> Teeme seda piltlikult. 535 00:25:20,390 --> 00:25:21,640 See oli saada keeruline. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Nii et kui mul eelmine väljad siin - teeme seda - järgmise valdkondades siin. 538 00:25:37,990 --> 00:25:41,200 Ma lähen, et lihtsustada oma suunanäitajaks pigem kui teha terve hunnik 539 00:25:41,200 --> 00:25:45,710 asju edasi ja tagasi crisscrossing üksteist. 540 00:25:45,710 --> 00:25:50,870 Ja nüüd, ütleme lihtsalt, et see on 1, 2, 3 pärast arutelu, isegi 541 00:25:50,870 --> 00:25:53,410 kuigi see ei ole ühel joonel kõnealuse probleemi. 542 00:25:53,410 --> 00:25:55,900 >> Nii et siin on minu seotud nimekirja. 543 00:25:55,900 --> 00:25:59,300 Püüan eemaldada kaks selles konkreetse versiooni loost. 544 00:25:59,300 --> 00:26:01,960 Nii et ma olen uuendatud kursor osutades seda meest. 545 00:26:01,960 --> 00:26:03,315 Nii et see on PTR. 546 00:26:03,315 --> 00:26:04,530 Ta osutab siin. 547 00:26:04,530 --> 00:26:07,170 See on nimekiri, mis on olemas maailmas kui enne. 548 00:26:07,170 --> 00:26:09,200 Ja ta osutab siin ükskõik mida. 549 00:26:09,200 --> 00:26:10,800 Ja nüüd, ma üritan eemaldada kaks. 550 00:26:10,800 --> 00:26:13,850 >> Nii et kui osuti osutab siin, ma olen kavatse järgida ilmselt 551 00:26:13,850 --> 00:26:17,110 eelmine pointer, mis paneb mind 1. 552 00:26:17,110 --> 00:26:22,290 Ma siis ütlen, et järgmine valdkonnas, mis toob mind üle selle 553 00:26:22,290 --> 00:26:25,410 kasti siin, läheb võrdne pointer kõrval. 554 00:26:25,410 --> 00:26:28,400 Nii et kui see pointer, see on järgmine. 555 00:26:28,400 --> 00:26:31,840 See tähendab, et see nool vajadustele osutada seda meest. 556 00:26:31,840 --> 00:26:35,140 >> Mis siis, et koodirida on lihtsalt teha on natuke seda. 557 00:26:35,140 --> 00:26:37,500 Ja nüüd on see näeks välja nagu samm õiges suunas. 558 00:26:37,500 --> 00:26:41,390 Me sisuliselt tahad Lõigata 2 välja Lähis 1 ja 3. 559 00:26:41,390 --> 00:26:44,400 Seega on loogiline, et me tahame tee seda pointer ümber. 560 00:26:44,400 --> 00:26:50,400 Nii et see järgmine rida on kontrollida, kas osuti Järgmine ei ole null, ei 561 00:26:50,400 --> 00:26:54,200 tõesti keegi paremal 2, see tähendab, et me peame tegema 562 00:26:54,200 --> 00:26:55,850 veidi lõikama siin. 563 00:26:55,850 --> 00:27:00,590 >> Nii et ma nüüd vaja jälgida seda pointer ja värskendada eelmise osutiga 564 00:27:00,590 --> 00:27:05,410 see poiss teha natuke vastukaalu siin punkt siin. 565 00:27:05,410 --> 00:27:07,100 Ja nüüd, visuaalselt see on kena. 566 00:27:07,100 --> 00:27:11,930 See on natuke segane, et seal on keegi osutades 2 enam. 567 00:27:11,930 --> 00:27:13,600 2 on suunaga vasakule. 568 00:27:13,600 --> 00:27:14,980 Ja 2 on suunatud paremale. 569 00:27:14,980 --> 00:27:17,480 Aga ta saab teha mida iganes ta tahab, sest ta on umbes saada vabaks. 570 00:27:17,480 --> 00:27:19,480 Ja see ei ole oluline, mida need väärtused on enam. 571 00:27:19,480 --> 00:27:23,040 >> Oluline on see, et ülejäänud poisid suunamises üle 572 00:27:23,040 --> 00:27:24,280 ja alla teda nüüd. 573 00:27:24,280 --> 00:27:25,810 Ja tõepoolest, see on, mida me teha. 574 00:27:25,810 --> 00:27:29,360 Me vaba pointer, mis tähendab, et me öelda operatsioonisüsteem, olete teretulnud 575 00:27:29,360 --> 00:27:30,906 nõuda seda. 576 00:27:30,906 --> 00:27:34,900 Ja siis lõpuks, me tagasi. 577 00:27:34,900 --> 00:27:37,220 Else kaudselt, et kui me pole veel tagasi tulnud, 578 00:27:37,220 --> 00:27:38,290 meil hoida otsin. 579 00:27:38,290 --> 00:27:41,485 Nii pointer võrdub pointer kõrval lihtsalt tähendab liikuda see kutt siin. 580 00:27:41,485 --> 00:27:42,600 Viige see mees siin. 581 00:27:42,600 --> 00:27:45,400 Viige see mees siin, kui tegelikult me ei leidnud number 582 00:27:45,400 --> 00:27:46,960 me otsime veel. 583 00:27:46,960 --> 00:27:49,630 >> Nii öeldes, tundub täiesti masendavalt, ma arvan, et esimesel 584 00:27:49,630 --> 00:27:52,180 lühidalt, eriti kui sa võitlesid Selle viktoriini ajal siis vaata 585 00:27:52,180 --> 00:27:52,850 midagi sellist. 586 00:27:52,850 --> 00:27:55,050 Ja sa pat ise tagaküljel. 587 00:27:55,050 --> 00:27:57,080 Noh, seal on kuidagi ma võiks olla tulla, et viktoriini. 588 00:27:57,080 --> 00:28:00,470 Aga ma väidan, võite, kui sa murda see jaguneb individuaalse 589 00:28:00,470 --> 00:28:04,400 juhtudel ja lihtsalt läbi minema hoolikalt, kuigi, tõsi, alla 590 00:28:04,400 --> 00:28:06,300 stressi tingimustes. 591 00:28:06,300 --> 00:28:09,470 >> Õnneks pilt tehtud kõik õnnelikumad. 592 00:28:09,470 --> 00:28:11,050 Sa võid teha seda väga mitmel viisil. 593 00:28:11,050 --> 00:28:12,760 Sa ei pea tegema crisscrossing asi siin. 594 00:28:12,760 --> 00:28:14,520 Sa võid seda teha otse read niimoodi. 595 00:28:14,520 --> 00:28:18,790 Kuid põhisisu on see probleem Üldiselt oli aru saada, et 596 00:28:18,790 --> 00:28:22,060 pilt lõpuks peaks vaatama natuke midagi sellist, sest 597 00:28:22,060 --> 00:28:25,030 pidev aeg mõista, et te ei hoia segamise ja segamise ja segamise 598 00:28:25,030 --> 00:28:29,900 sõlmede alguses nimekirja. 599 00:28:29,900 --> 00:28:31,960 Kas on küsimusi? 600 00:28:31,960 --> 00:28:34,565 Tõenäoliselt on kõige keerulisem kindlasti kodeerimine küsimusi. 601 00:28:34,565 --> 00:28:37,690 >> Publik: Nii on nimekiri sarnane pea eelnevates näidetes. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. Malan: Täpselt nii, täpselt. 603 00:28:39,640 --> 00:28:43,130 Just teine ​​nimi globaalne muutuja. 604 00:28:43,130 --> 00:28:44,380 Ülemaailmne mida? 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 Nii et see on see, kus sa tuli kirjutada lõik. 608 00:28:52,020 --> 00:28:56,060 Mõned inimesed kirjutasid esseesid Selle küsimuse. 609 00:28:56,060 --> 00:29:00,230 Aga sa lihtsalt vaja kasutada neid kuue tingimused kirjeldada, mis juhtub siis, kui 610 00:29:00,230 --> 00:29:02,440 üritate ühendust facebook.com. 611 00:29:02,440 --> 00:29:07,930 Nii et ma lihtsalt rääkida läbi protsessi kasutades kõiki neid tingimusi. 612 00:29:07,930 --> 00:29:11,290 Nii meie brauser, me kirjutame facebook.com ja vajuta Enter. 613 00:29:11,290 --> 00:29:17,280 Nii et meie brauseri kavatse ehitada HTTP taotluse, et see läheb talle 614 00:29:17,280 --> 00:29:22,220 läbi mõned protsessi Facebook eest Facebook vastata meile 615 00:29:22,220 --> 00:29:24,450 HTML oma lehele. 616 00:29:24,450 --> 00:29:28,800 >> Mis on protsess, mis HTTP taotluse 617 00:29:28,800 --> 00:29:30,730 tegelikult saab Facebook? 618 00:29:30,730 --> 00:29:32,790 Nii et kõigepealt peame tõlkima Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Nii lihtsalt antud nimi Facebook.com, kus tegelikult teeb HTTP taotluse 620 00:29:38,780 --> 00:29:39,940 on vaja minna? 621 00:29:39,940 --> 00:29:44,120 Seega peame tõlkima Facebook.com IP aadress, mis üheselt 622 00:29:44,120 --> 00:29:47,620 määratleb, mida masin me tegelikult soovite saata see palve. 623 00:29:47,620 --> 00:29:49,310 Teie sülearvuti on IP-aadress. 624 00:29:49,310 --> 00:29:52,240 Midagi ühendatud internetti on IP-aadress. 625 00:29:52,240 --> 00:29:59,030 >> Nii DNS, Domain Name System, mis on mis hakkab tegelema tõlge 626 00:29:59,030 --> 00:30:03,750 alates facebook.com et IP-aadress, mida sa tegelikult soovid ühendust luua. 627 00:30:03,750 --> 00:30:08,075 Nii et me ühendust DNS serverite ja ütleme, mis on facebook.com? 628 00:30:08,075 --> 00:30:16,560 Ta ütleb, oh, see on IP aadress 190,212 midagi, midagi, midagi. 629 00:30:16,560 --> 00:30:16,900 Hea küll. 630 00:30:16,900 --> 00:30:18,850 Nüüd ma tean, mida masin Tahan pöörduda. 631 00:30:18,850 --> 00:30:22,360 >> Nii siis saatke oma HTTP taotluse üle, et masin. 632 00:30:22,360 --> 00:30:24,140 Niisiis, kuidas see saada, et masin? 633 00:30:24,140 --> 00:30:27,200 Noh, et taotlus läheb ruuter ruuter kopsakas. 634 00:30:27,200 --> 00:30:32,630 Mäleta näiteks klassis, kus me tegelikult nägime marsruuti 635 00:30:32,630 --> 00:30:35,340 paketid võttis kui üritasime suhelda. 636 00:30:35,340 --> 00:30:38,460 Me nägime seda hüpata üle Atlandi Ocean ühel hetkel või mis iganes. 637 00:30:38,460 --> 00:30:42,820 >> Nii eelmise koosseisu port. 638 00:30:42,820 --> 00:30:46,520 Nii et see on nüüd arvutis. 639 00:30:46,520 --> 00:30:49,970 Sul võib olla mitu asja praegu suhtlemine internetis. 640 00:30:49,970 --> 00:30:53,730 Ma võin olla töötab, ütleme, Skype. 641 00:30:53,730 --> 00:30:55,670 Ma võib-olla veebibrauser lahti. 642 00:30:55,670 --> 00:30:59,010 Ma võib-olla midagi, mis torrenting faile. 643 00:30:59,010 --> 00:31:00,880 Nii et kõik need asjad on suhtlemisel 644 00:31:00,880 --> 00:31:02,600 internet mingil moel. 645 00:31:02,600 --> 00:31:08,070 >> Seega, kui arvuti saab mõned andmed Internetist, kuidas see 646 00:31:08,070 --> 00:31:10,130 tean, mida rakendus tegelikult tahab andmed? 647 00:31:10,130 --> 00:31:12,610 Kuidas ta teab, kas see konkreetne andmed on mõeldud 648 00:31:12,610 --> 00:31:16,070 torrenting taotlus erinevalt veebibrauser? 649 00:31:16,070 --> 00:31:20,980 Nii et see on eesmärk sadamad et kõik need taotlused on 650 00:31:20,980 --> 00:31:22,720 väitis port arvutis. 651 00:31:22,720 --> 00:31:27,580 Nii oma veebilehitseja ütleb, hei, Ma kuulan Sadama 1000. 652 00:31:27,580 --> 00:31:32,240 Ja teie torrenting programm ütleb, Ma kuulan Sadama 3000. 653 00:31:32,240 --> 00:31:34,770 Ja Skype ütleb, ma kasutan port 4000. 654 00:31:34,770 --> 00:31:41,950 >> Nii et kui saad mõned andmed, mis kuulub et üks neist taotlused, andmed 655 00:31:41,950 --> 00:31:45,510 on tähistatud mis port see tegelikult tuleks saata mööda. 656 00:31:45,510 --> 00:31:47,950 Nii et see ütleb, oh, ma kuulun sadamasse 1000. 657 00:31:47,950 --> 00:31:50,950 Ma tean, siis ma pean edastada käesolev mööda minu veebibrauser. 658 00:31:50,950 --> 00:31:56,440 Seega põhjus, miks ta on siin oluline on see, et veebiserverite kipuvad 659 00:31:56,440 --> 00:31:58,240 kuulata port 80. 660 00:31:58,240 --> 00:32:02,420 Nii et kui ma ühendust Facebook.com, ma olen suheldes mõned masin. 661 00:32:02,420 --> 00:32:06,390 Aga ma pean ütlema, mis sadamas, et masin tahan suhelda. 662 00:32:06,390 --> 00:32:09,160 Ja veebiserverite kipuvad olema kuula port 80. 663 00:32:09,160 --> 00:32:14,010 >> Kui nad tahavad, võivad nad määrata selle nii, et nimekirjades Sadama 7000. 664 00:32:14,010 --> 00:32:19,090 Ja siis veebibrauser, suutsin käsitsi tippida Facebook.com: 7000 665 00:32:19,090 --> 00:32:24,600 Kirjuta taotluse port 7000 Facebook veebiserver. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. Malan: Ja sel juhul, isegi kuigi me ei nõua, et inimesed 667 00:32:26,820 --> 00:32:30,000 mainida seda, et käesolevas asjas, mis port oleks taotluse tegelikult minna? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Proovi uuesti. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Täpselt. 672 00:32:44,300 --> 00:32:47,960 Ei tunne, aga teravmeelsus et seal ükski eelmine. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: Nii HTTPS, sest see on kuulamise spetsiaalselt 674 00:32:51,770 --> 00:32:55,180 krüpteeritud, see on port 4430. 675 00:32:55,180 --> 00:32:57,680 >> Publik: Ja kirju on 25, eks? 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. Malan: väljaminev e-25, eks. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Ma ei tea isegi enamik - kõik alumised kalduvad olema 678 00:33:03,760 --> 00:33:06,310 reserveeritud asju. 679 00:33:06,310 --> 00:33:09,260 Ma arvan, et kõik alla 1024 on reserveeritud. 680 00:33:09,260 --> 00:33:13,450 >> Publik: Miks sa ütlesid 3 oli vale number? 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Sest IP-aadress, seal on neli rühmituste numbrit. 682 00:33:18,820 --> 00:33:21,090 Ja nad on 0-255. 683 00:33:21,090 --> 00:33:28,060 Nii 192.168.2.1 on ühine kohaliku võrgu IP-aadress. 684 00:33:28,060 --> 00:33:30,840 Teate kõik need on vähem kui 255. 685 00:33:30,840 --> 00:33:33,570 Nii et kui ma alustasin 300, et ei saanud olla 686 00:33:33,570 --> 00:33:35,210 olnud üks numbrid. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. Malan: Aga rumal clip alates - see oli CSI, kus nad olid 688 00:33:38,170 --> 00:33:39,970 number, mis oli liiga suur jaoks IP-aadress. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Kas on küsimusi selle kohta? 691 00:33:46,110 --> 00:33:51,710 Järgmise üks, nii et täielik muutus teema, kuid meil on see PHP massiivi 692 00:33:51,710 --> 00:33:53,270 maja quad. 693 00:33:53,270 --> 00:33:56,360 Ja meil on ebakorrapärane nimekirja. 694 00:33:56,360 --> 00:33:59,550 Ja me tahame välja trükkida iga loendiüksusest lihtsalt sisaldav maja nime. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Nii et meil on foreach silmus. 697 00:34:11,870 --> 00:34:17,540 Seega pidage meeles, süntaks on foreach massiivi elemendi massiivist. 698 00:34:17,540 --> 00:34:22,360 Nii läbi iga iteratsiooni loop, maja läheb võtma ühel 699 00:34:22,360 --> 00:34:24,060 väärtused sees massiivi. 700 00:34:24,060 --> 00:34:26,530 >> On esimene esitus, maja on Cabot House. 701 00:34:26,530 --> 00:34:30,370 On teise korduse maja olema Courier House ja nii edasi. 702 00:34:30,370 --> 00:34:34,370 Nii iga quad nagu maja, me oleme lihtsalt trükkimineku - 703 00:34:34,370 --> 00:34:37,250 sa ka oleks kordas - 704 00:34:37,250 --> 00:34:42,199 Nimekirja objekt ja siis maja nimi ja sulgege nimekirja objekt. 705 00:34:42,199 --> 00:34:45,210 Lokkis traksid on vabatahtlik siin. 706 00:34:45,210 --> 00:34:49,480 >> Ja siis ütles ka küsimus ise, mäletan sulgeda 707 00:34:49,480 --> 00:34:50,770 Tavalise nimekirja tag. 708 00:34:50,770 --> 00:34:53,949 Seega on meil vaja, et väljuda PHP režiim et seda teha. 709 00:34:53,949 --> 00:35:00,280 Või oleksime korratud sulgeda Tavalise nimekirja tag. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. Malan: Ka trahv oleks siin olnud võimalik kasutada vana kooli 711 00:35:02,380 --> 00:35:07,340 loop koos $ i = 0 0 ja kasutades arvu, nuputada pikkus ray. 712 00:35:07,340 --> 00:35:09,240 Täiesti trahvi ka, lihtsalt vähe wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> Publik: Nii et kui te ei kavatse [Kuuldamatu] sa teeksid - 715 00:35:14,742 --> 00:35:16,734 Ma unustan, mida loop [kuuldamatu] on. 716 00:35:16,734 --> 00:35:21,380 Kas sulle $ quad sulg i? 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. Malan: Täpselt. 718 00:35:21,850 --> 00:35:23,100 Jah, täpselt. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: Midagi veel? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. Malan: Olgu. 723 00:35:32,010 --> 00:35:32,300 Kompromisse. 724 00:35:32,300 --> 00:35:38,290 Nii oli kobarad vastused võimaldab igal neist. 725 00:35:38,290 --> 00:35:40,510 Me olime tegelikult lihtsalt otsin midagi kaalukaid positiivseid ja 726 00:35:40,510 --> 00:35:41,100 negatiivsed. 727 00:35:41,100 --> 00:35:44,830 Ja number 16 küsis kinnitamise kasutajate input kliendipoolse, nagu JavaScript, 728 00:35:44,830 --> 00:35:47,280 asemel server-side, nagu PHP. 729 00:35:47,280 --> 00:35:49,450 Mis on tagurpidi teeme kliendipoolse? 730 00:35:49,450 --> 00:35:53,780 >> Noh, üks asi, mida me kavandatud on teil vähendada latency, sest sa 731 00:35:53,780 --> 00:35:56,750 ei pea vaeva ühendust server, mis võib kesta mõne 732 00:35:56,750 --> 00:36:00,390 millisekundit või isegi paar sekundit vältides selle ja lihtsalt 733 00:36:00,390 --> 00:36:04,670 kinnitamise kasutajate panus kliendipoolse vallandada on-esitab käitleja 734 00:36:04,670 --> 00:36:06,650 lihtsalt kontrollisin, kas nad tüüp midagi ette nime? 735 00:36:06,650 --> 00:36:08,080 Kas nad kirjuta midagi aastal e-posti aadress? 736 00:36:08,080 --> 00:36:10,950 Kas nad valida ühiselamus alates rippmenüüst? 737 00:36:10,950 --> 00:36:14,360 >> Võite anda neile hetkeline tagasiside kasutades gigahertsi arvuti 738 00:36:14,360 --> 00:36:16,770 või mis iganes nad on, et see on tegelikult oma kirjutuslaud. 739 00:36:16,770 --> 00:36:19,310 Nii et see on lihtsalt parem kasutaja tekib tavaliselt. 740 00:36:19,310 --> 00:36:24,460 Aga negatiivne külg kliendipoolse valideerimine, kui sa seda ilma ka 741 00:36:24,460 --> 00:36:29,860 tee server-side valideerimine et Kõige keegi sealt välja CS50 teab 742 00:36:29,860 --> 00:36:33,980 et saate saata andmeid soovite Lisa server tahes mitmel viisil. 743 00:36:33,980 --> 00:36:37,030 Ausalt, enamik iga brauseriga saab kliki ringi seaded ja lihtsalt 744 00:36:37,030 --> 00:36:40,110 lülitage JavaScript, mis oleks seega keelata igasugune 745 00:36:40,110 --> 00:36:41,080 valideerimist. 746 00:36:41,080 --> 00:36:44,460 >> Aga sa ka võiks meenutada, et isegi mina tegin mõned kauge asjad klassi kasutades 747 00:36:44,460 --> 00:36:47,790 telnet ja tegelikult teeskleb olema brauseri saates get 748 00:36:47,790 --> 00:36:49,240 taotlused server. 749 00:36:49,240 --> 00:36:51,030 Ja see on kindlasti mitte mis kasutavad mis tahes JavaScript. 750 00:36:51,030 --> 00:36:53,290 See on lihtsalt minu kirjutades käske kell klaviatuuri. 751 00:36:53,290 --> 00:36:57,410 Nii et tõesti, iga programmeerija jooksul piisavalt Mugavus veebi ja HTTP 752 00:36:57,410 --> 00:37:01,690 võib saata mis tahes andmeid ta soovib et server ei valideerimist. 753 00:37:01,690 --> 00:37:05,470 Ja kui teie server ei ole ka kontroll, Kas nad ei anna mulle nimi on 754 00:37:05,470 --> 00:37:08,930 see tegelikult kehtiv e-posti aadress, tegi nad valivad ühiselamus, võite end 755 00:37:08,930 --> 00:37:12,800 üles sisestamist võlts või lihtsalt tühjaks andmed oma andmebaasi, mis tõenäoliselt 756 00:37:12,800 --> 00:37:15,450 ei kavatse olla hea, kui sa eeldada, et see oli seal. 757 00:37:15,450 --> 00:37:16,770 >> Nii et see on tüütu reaalsus. 758 00:37:16,770 --> 00:37:19,890 Aga üldiselt, kliendipoolse valideerimine on suur. 759 00:37:19,890 --> 00:37:21,810 Aga see tähendab, kaks korda nii palju tööd. 760 00:37:21,810 --> 00:37:25,970 Kuigi seal on küll olemas eri raamatukogud, JavaScript raamatukogud 761 00:37:25,970 --> 00:37:28,830 Näiteks, et muuta see palju, palju vähem peavalu. 762 00:37:28,830 --> 00:37:31,940 Ja saate kasutada osa kood server-side, kliendipoolse. 763 00:37:31,940 --> 00:37:35,980 Aga saan aru, et see on tavaliselt lisatööd. 764 00:37:35,980 --> 00:37:36,415 Jah. 765 00:37:36,415 --> 00:37:37,792 >> Publik: Nii et kui me lihtsalt ütles vähem turvaline - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. Malan: [naerab] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Need on alati raskem need lahendada. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN: See oleks on heaks kiidetud. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. Malan: Mis on? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: lõin selle probleemi. 772 00:37:45,810 --> 00:37:46,735 See oleks heaks kiidetud. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. Malan: Jah. 774 00:37:47,220 --> 00:37:47,830 >> Publik: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: Aga me ei nõustu jaoks esimene - 776 00:37:51,770 --> 00:37:53,630 hästi, mida me otsime, on midagi sa ei pea 777 00:37:53,630 --> 00:37:55,270 serveriga suhelda. 778 00:37:55,270 --> 00:37:58,355 Me ei nõustu lihtsalt kiiremini. 779 00:37:58,355 --> 00:38:00,080 >> Publik: Mis ei lae leht uuesti? 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Jah. 781 00:38:00,430 --> 00:38:03,000 See oli heaks vastuse. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. Malan: Midagi, kus me tundsime see on tõenäolisem kui ei ole tõenäoline, 783 00:38:06,300 --> 00:38:09,780 et sa tead, mida sa olid öeldes, mis on karm 784 00:38:09,780 --> 00:38:13,500 line teha mõnikord. 785 00:38:13,500 --> 00:38:16,000 Kasutades seotud nimekirja asemel massiivi säilitada 786 00:38:16,000 --> 00:38:17,590 järjestatud nimekirja täisarvud. 787 00:38:17,590 --> 00:38:21,000 Nii pea me tihti tsiteerivad lingitud nimekirju, mis ajendas oma kogu 788 00:38:21,000 --> 00:38:22,370 sissetoomine saad dünaamilisust. 789 00:38:22,370 --> 00:38:23,030 Nad võivad kasvada. 790 00:38:23,030 --> 00:38:23,950 Nad võivad väheneda. 791 00:38:23,950 --> 00:38:27,370 Nii et sa ei pea hüpata läbi kõvadele tegelikult luua rohkem mälu 792 00:38:27,370 --> 00:38:28,140 massiivi. 793 00:38:28,140 --> 00:38:30,310 Või sa ei pea lihtsalt ütlevad, sorry, kasutaja. 794 00:38:30,310 --> 00:38:31,410 Massiiv on täis. 795 00:38:31,410 --> 00:38:35,850 Nii dünaamiline kasv nimekirja. 796 00:38:35,850 --> 00:38:37,210 Puuduseks aga on seotud nimekirjad? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> Publik: See on lineaarne. 799 00:38:43,356 --> 00:38:45,800 Otsin seotud nimekirja on lineaarne selle asemel, mida sa sisse logida 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. Malan: Täpselt. 801 00:38:46,360 --> 00:38:50,160 Otsin ahelloend on lineaarne, isegi kui see on järjestatud, sest sa võid 802 00:38:50,160 --> 00:38:53,170 vaid järgige neid leivapuru, need viiteid, alates algust nimekirja 803 00:38:53,170 --> 00:38:53,570 lõpuni. 804 00:38:53,570 --> 00:38:57,970 Sa ei saa võimendada muutmälu ja seega, binaarne otsing, isegi kui see on 805 00:38:57,970 --> 00:39:00,740 sorteeritud, et sa võiksid teha massiiv. 806 00:39:00,740 --> 00:39:02,390 Ja seal on ka teine ​​hind. 807 00:39:02,390 --> 00:39:02,966 Jah. 808 00:39:02,966 --> 00:39:03,800 >> Publik: Memory ebaefektiivne? 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. Malan: Jah. 810 00:39:04,130 --> 00:39:06,940 Noh, ma ei pruugi öelda ebaefektiivne. 811 00:39:06,940 --> 00:39:10,110 Aga see ei maksa teile rohkem mälu, sest sa pead 32 bitti iga 812 00:39:10,110 --> 00:39:13,400 sõlm täiendavaid pointer kell vähemalt ühekaupa seotud nimekirja. 813 00:39:13,400 --> 00:39:16,660 Nüüd, kui sa oled ainult ladustamiseks täisarvud ja olete lisatud pointer, see on 814 00:39:16,660 --> 00:39:17,830 tegelikult selline mitte-triviaalne. 815 00:39:17,830 --> 00:39:19,340 See kahekordistada mälu. 816 00:39:19,340 --> 00:39:22,330 Aga tegelikult, kui sa oled ladustamiseks seotud nimekirja structs, millel võib olla 817 00:39:22,330 --> 00:39:25,540 8 baiti, 16 baiti veel kui, et äkki see on vähem 818 00:39:25,540 --> 00:39:26,500 ja piirkulu. 819 00:39:26,500 --> 00:39:28,320 Aga see kulu sellegipoolest. 820 00:39:28,320 --> 00:39:31,880 Nii kumbki neist oleks pidanud olnud trahvi varjuküljed. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Kasutades PHP C asemel kirjutada käsurea programm. 823 00:39:36,100 --> 00:39:41,890 Nii et siin, see on tihti kiirem kasutada keeles nagu PHP või Ruby või Python. 824 00:39:41,890 --> 00:39:43,700 Sa lihtsalt kiiresti avada tekstiredaktor. 825 00:39:43,700 --> 00:39:45,900 Teil on palju rohkem funktsioone teile kättesaadavaks. 826 00:39:45,900 --> 00:39:49,325 PHP on köögi kraanikauss funktsioone, kusjuures C, siis 827 00:39:49,325 --> 00:39:50,420 on väga, väga vähe. 828 00:39:50,420 --> 00:39:53,820 Tegelikult mehed teavad raske tee et sa ei pea hash tabeleid. 829 00:39:53,820 --> 00:39:55,000 Sul ei ole seotud nimekirju. 830 00:39:55,000 --> 00:39:57,470 Kui soovid neid, siis pead rakendada neid ise. 831 00:39:57,470 --> 00:40:00,950 >> Nii et üks tagurpidi PHP või tegelikult mis tahes tõlgendada keel on kiirust 832 00:40:00,950 --> 00:40:02,920 millega saab kirjutada koodi. 833 00:40:02,920 --> 00:40:06,660 Aga negatiivne külg, nägime seda, kui ma kiiresti vahustatud up misspeller 834 00:40:06,660 --> 00:40:11,780 rakendamine loeng kasutades PHP, on et kasutades tõlgendada keel 835 00:40:11,780 --> 00:40:13,570 Tavaliselt on aeglasem. 836 00:40:13,570 --> 00:40:18,420 Ja me nägime, et silmnähtavalt koos suureneb aega 0,3 sekundit 3 837 00:40:18,420 --> 00:40:24,440 sekundit, sest tõlgendamise mis tegelikult juhtub. 838 00:40:24,440 --> 00:40:27,060 >> Teine tagurpidi oli, et sa ei pea koostama. 839 00:40:27,060 --> 00:40:30,130 Nii see ka kiirendab arengut muide, sest sa ei pea 840 00:40:30,130 --> 00:40:31,360 kaks sammu töötab programm. 841 00:40:31,360 --> 00:40:32,140 Sul on ainult üks. 842 00:40:32,140 --> 00:40:35,260 Ja nii see on päris mõjuvad samuti. 843 00:40:35,260 --> 00:40:38,450 Kasutades SQL andmebaasi asemel CSV-faili andmete talletamiseks. 844 00:40:38,450 --> 00:40:40,230 Nii SQL andmebaasi kasutatakse pset7. 845 00:40:40,230 --> 00:40:42,060 CSV faile ei kasuta palju. 846 00:40:42,060 --> 00:40:45,960 Aga sa seda kasutanud kaudselt pset7 kui hästi, rääkides Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Aga CSV on nagu Exceli faili, kuid super lihtne, kus veerud on 848 00:40:49,330 --> 00:40:54,010 lihtsalt demarked komadega sees muidu tekstifaili. 849 00:40:54,010 --> 00:40:56,740 Ja kasutades SQL andmebaas natuke selgem. 850 00:40:56,740 --> 00:41:00,060 See on pea peale, sest sa saad asju nagu valida ja lisada ja kustutada. 851 00:41:00,060 --> 00:41:03,790 Ja sa saad arvatavasti, indeksid, mis MySQL andmebaasi ja teiste andmebaaside, nagu 852 00:41:03,790 --> 00:41:07,510 Oracle, ehitada teid mälu, mis tähendab, et teie valige ole ilmselt 853 00:41:07,510 --> 00:41:09,000 saab olema lineaarne ülevalt alla. 854 00:41:09,000 --> 00:41:11,300 See on tegelikult saab olema midagi nagu binaarne otsing või midagi 855 00:41:11,300 --> 00:41:12,520 sarnase sisuga. 856 00:41:12,520 --> 00:41:13,930 Nii nad tavaliselt kiiremini. 857 00:41:13,930 --> 00:41:16,040 >> Aga negatiivne külg on see, et see on lihtsalt rohkem tööd. 858 00:41:16,040 --> 00:41:16,730 See on rohkem vaeva. 859 00:41:16,730 --> 00:41:18,140 Sa pead aru saama andmebaase. 860 00:41:18,140 --> 00:41:18,940 Sa pead seda seadistada. 861 00:41:18,940 --> 00:41:20,840 Peate server käivitada et andmebaas. 862 00:41:20,840 --> 00:41:22,750 Sa pead aru saama, kuidas seda seadistada. 863 00:41:22,750 --> 00:41:24,930 Nii et need on vaid need liiki kompromisse. 864 00:41:24,930 --> 00:41:27,860 Arvestades CSV fail, saab luua seda gedit. 865 00:41:27,860 --> 00:41:28,770 Ja sa oled hea minna. 866 00:41:28,770 --> 00:41:31,550 Pole mingit keerukust kaugemale. 867 00:41:31,550 --> 00:41:34,870 >> Kasutades Prefiksipuu asemel hash tabel eraldi sõiduahelate salvestada 868 00:41:34,870 --> 00:41:37,490 sõnastik sõnu meenutab kohta pset5. 869 00:41:37,490 --> 00:41:42,480 Nii püüab tagurpidi teoreetiliselt vähemalt on mis? 870 00:41:42,480 --> 00:41:46,380 Pidev aega vähemalt juhul, kui sa oled segamist iga üksiku 871 00:41:46,380 --> 00:41:48,990 tähed sõna, nagu te võib-olla võtta pset5. 872 00:41:48,990 --> 00:41:52,720 See võib olla viis hashes kuus hashes kui seal on viis või kuus 873 00:41:52,720 --> 00:41:53,900 tähed sõna. 874 00:41:53,900 --> 00:41:54,580 Ja see on päris hea. 875 00:41:54,580 --> 00:41:56,910 Ja kui seal on ülemine piir, kuidas kaua teie sõnad olla, see 876 00:41:56,910 --> 00:41:59,320 tõepoolest asymptotically pidevalt aega. 877 00:41:59,320 --> 00:42:05,180 >> Arvestades hash tabelis eraldi ühendamine, probleem on selle 878 00:42:05,180 --> 00:42:09,070 millist andmestruktuuri on, et täita oma algoritme tavaliselt 879 00:42:09,070 --> 00:42:12,700 sõltub paljudest asjadest juba andmestruktuur. 880 00:42:12,700 --> 00:42:15,660 Ja see on kindlasti puhul ketid, kusjuures rohkem asju paned 881 00:42:15,660 --> 00:42:18,800 arvesse hash tabel, enam neid ketid minna, mis tähendab, et halvimal 882 00:42:18,800 --> 00:42:21,960 juhul asi võite olla otsivad kõik on kuidagi lõpuks üks 883 00:42:21,960 --> 00:42:26,000 ketist, mis tõhusalt devolves midagi lineaarne. 884 00:42:26,000 --> 00:42:29,450 >> Nüüd tegelikkuses võiks see absoluutselt juhtuda, et hash tabel 885 00:42:29,450 --> 00:42:32,820 ketid on kiirem kui vastav Prefiksipuu rakendamist. 886 00:42:32,820 --> 00:42:35,570 Aga see on erinevatel põhjustel, sealhulgas mis üritab kasutada kogu palju 887 00:42:35,570 --> 00:42:39,240 mälu, mis võib tegelikult aeglane asju maha, sest sa ei saa kena 888 00:42:39,240 --> 00:42:42,410 kasu, mida nimetatakse vahemälu kus asjad, mis on lähestikku 889 00:42:42,410 --> 00:42:45,420 mälu saab tutvuda sageli kiiremini. 890 00:42:45,420 --> 00:42:48,180 Ja mõnikord võib tulla tõesti hea hash funktsiooni. 891 00:42:48,180 --> 00:42:51,060 Isegi kui teil on raisata natuke mälu, siis võib tõepoolest olla võimalik 892 00:42:51,060 --> 00:42:54,430 leida asju kiiresti ja ei nii halb, kui lineaarselt. 893 00:42:54,430 --> 00:42:58,410 >> Nii lühike, ei olnud tingimata mõni neist ühe või isegi kahe 894 00:42:58,410 --> 00:43:00,050 konkreetsed asjad, mida me otsisime. 895 00:43:00,050 --> 00:43:03,080 Tõesti midagi veenev kui positiivseid kui negatiivseid 896 00:43:03,080 --> 00:43:04,800 üldiselt on püütud meie silma. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: Nii pea, tegime ei võta oma "kiiremini." Sa 898 00:43:11,840 --> 00:43:14,540 oli öelda midagi. 899 00:43:14,540 --> 00:43:17,910 Isegi kui sa ütlesid teoreetiliselt kiiremini, Me teadsime, et sa selline aru 900 00:43:17,910 --> 00:43:19,470 et see on 0 ja 1. 901 00:43:19,470 --> 00:43:22,820 Ja hash tabelis teoreetiliselt ei ole 0 1. 902 00:43:22,820 --> 00:43:26,550 Mainimine midagi runtime üldiselt on sulle punkte. 903 00:43:26,550 --> 00:43:32,640 Aga "kiiremini," enamik lahendusi suur laud, mis üritab olid 904 00:43:32,640 --> 00:43:34,990 objektiivselt aeglasem lahendused mis olid hash tabeleid. 905 00:43:34,990 --> 00:43:37,250 Nii kiirem ja iseenesest ei ole tegelikult tõsi. 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 Ma olen ilmselt ainus, kes saab aru, see on, kuidas see peaks 909 00:43:46,686 --> 00:43:47,500 hääldada, eks? 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: Mul oli tegelikult aimugi. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. Malan: Ta tegi mõtet peas. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: ma teen seda. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Nii et see on see, kus sa pidid koostama skeem sarnane sa võiksid 916 00:44:04,243 --> 00:44:06,040 näinud varem eksamid. 917 00:44:06,040 --> 00:44:12,200 Teeme lihtsalt vaata seda. 918 00:44:12,200 --> 00:44:18,170 Nii et HTML sõlme, meil on kaks lapsed, pea ja keha. 919 00:44:18,170 --> 00:44:20,570 Nii me filiaal - pea ja keha. 920 00:44:20,570 --> 00:44:22,280 Pea on pealkiri tag. 921 00:44:22,280 --> 00:44:23,710 Nii et meil on pealkiri. 922 00:44:23,710 --> 00:44:28,450 >> Nüüd, üks asi, et paljud inimesed unustasin, et need teksti sõlmed 923 00:44:28,450 --> 00:44:30,430 elemente seda puud. 924 00:44:30,430 --> 00:44:36,260 Nii et siin me juhtuda juhtida neid ovaali eristada neid nende 925 00:44:36,260 --> 00:44:37,380 tüüpi sõlmed. 926 00:44:37,380 --> 00:44:41,450 Aga teate ka meil siin üleval, keskelt ja alt on lõppkokkuvõttes 927 00:44:41,450 --> 00:44:42,560 Teksti sõlmed. 928 00:44:42,560 --> 00:44:46,250 Nii unustan mõnevõrra ühine viga. 929 00:44:46,250 --> 00:44:48,770 >> Keha on kolm last - Nende kolme divs. 930 00:44:48,770 --> 00:44:53,340 Nii div div div ja siis tekst sõlme lapsed need divs. 931 00:44:53,340 --> 00:44:55,900 See on päris palju seda sellele küsimusele. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. Malan: Ja see on väärt märkimist, kuigi me ei ela need 933 00:44:57,860 --> 00:45:01,040 üksikasjad aega me kulutame JavaScript, et et ei, 934 00:45:01,040 --> 00:45:02,290 Tegelikult asi tehniliselt. 935 00:45:02,290 --> 00:45:06,330 Nii et kui juht jõuab enne keha HTML, siis tuleb näi 936 00:45:06,330 --> 00:45:08,860 vasak keha tegeliku DOM. 937 00:45:08,860 --> 00:45:12,265 Et tema on üldiselt lihtsalt FYI, midagi, mida nimetatakse dokumendi liik, kus 938 00:45:12,265 --> 00:45:13,260 see asi. 939 00:45:13,260 --> 00:45:17,470 Ja kui sa olid rakendamise parser, programm, mis loeb HTML hoone 940 00:45:17,470 --> 00:45:20,960 puu otsa mälu, olgem ausad, see on intuitiivselt ilmselt, mida sa 941 00:45:20,960 --> 00:45:24,720 teha niikuinii - ülalt alla, vasakult paremale. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Küsimused, mis? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Kas ma peaksin tegema järgmise üks? 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. Malan: Muidugi. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Nii et see on puhvri ületäitumine rünnaku alla. 948 00:45:39,320 --> 00:45:43,740 Peaasi tunnustada siin on, hästi, kuidas võiks vastane trikk 949 00:45:43,740 --> 00:45:46,170 see programm arvesse täidesaatva suvalise koodi? 950 00:45:46,170 --> 00:45:51,860 Nii argv1 esimese käsurea argument, et see programm, mis võib olla 951 00:45:51,860 --> 00:45:53,920 meelevaldselt pikk. 952 00:45:53,920 --> 00:45:59,160 Aga siin me kasutame memcpy kopeerida argv1, mis siin on baar. 953 00:45:59,160 --> 00:46:00,165 Me kulgeb see argument. 954 00:46:00,165 --> 00:46:02,050 Ja nii see on, võttes nime bar. 955 00:46:02,050 --> 00:46:08,040 >> Nii et me memcpying bar sellesse puhver c. 956 00:46:08,040 --> 00:46:09,400 Mitu baiti on meil kopeerida? 957 00:46:09,400 --> 00:46:14,040 Noh aga palju baite baar juhtub kasutavad, pikkus, et argument. 958 00:46:14,040 --> 00:46:17,930 Aga c on ainult 12 baiti suur. 959 00:46:17,930 --> 00:46:22,280 Nii et kui me kirjuta käsureal see on pikem kui 12 baiti, et me oleme 960 00:46:22,280 --> 00:46:25,470 läheb ülevoolu see eelkõige puhver. 961 00:46:25,470 --> 00:46:31,000 Nüüd, kuidas võiks vastane trikk programm arvesse täidesaatva suvalise koodi? 962 00:46:31,000 --> 00:46:34,910 >> Seega pidage meeles, et siin Peamine helistab suva. 963 00:46:34,910 --> 00:46:37,340 Ja nii siis peamised kõned foo. 964 00:46:37,340 --> 00:46:40,408 Joonistame selle. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Nii et meil on meie stack. 967 00:46:46,990 --> 00:46:49,090 Ja peamine on freimi allosas. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Mingil hetkel, peamised kõned foo. 970 00:46:53,250 --> 00:46:55,390 Noh, kohe, peamised kõned foo. 971 00:46:55,390 --> 00:46:57,130 Ja nii foo saab oma freimi. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Nüüd mingil hetkel suva läheb tagasi. 974 00:47:02,220 --> 00:47:06,810 Ja läks foo naaseb, me peame teadma, kell mida koodirida sees peamine me 975 00:47:06,810 --> 00:47:10,610 oli, et teada saada, kus peaksime jätkuda peamine. 976 00:47:10,610 --> 00:47:13,100 Me saame kutsuda foo alates kogu hunnik erinevates kohtades. 977 00:47:13,100 --> 00:47:14,620 Kuidas me teame, kuhu naasta? 978 00:47:14,620 --> 00:47:16,460 Noh, meil on vaja salvestada, et kusagil. 979 00:47:16,460 --> 00:47:23,010 >> Nii kuskil parem siin, me salvestada kus me peaks tagasi, kui 980 00:47:23,010 --> 00:47:24,070 foo tulu. 981 00:47:24,070 --> 00:47:26,350 Ja see on saatja aadress. 982 00:47:26,350 --> 00:47:30,490 Niisiis, kuidas vastane võib ära see on asjaolu, et 983 00:47:30,490 --> 00:47:37,550 Seda puhvrit c on salvestatud, olgem öelda, siin on c. 984 00:47:37,550 --> 00:47:39,690 Nii et meil on 12 baiti c. 985 00:47:39,690 --> 00:47:40,540 See on c. 986 00:47:40,540 --> 00:47:43,030 Ja see on suva tema stack ring. 987 00:47:43,030 --> 00:47:49,970 Seega, kui pahatahtlik kasutaja sisestab rohkem baidid kui 12 või nad sisestada käsu 988 00:47:49,970 --> 00:47:54,570 line argument, mis on pikem kui 12 märki, siis me läheme 989 00:47:54,570 --> 00:47:57,540 ülevoolu see puhver. 990 00:47:57,540 --> 00:47:59,910 >> Me ei jätka. 991 00:47:59,910 --> 00:48:02,220 Ja mingil hetkel, me kaugele piisavalt, et hakkame 992 00:48:02,220 --> 00:48:05,120 ülekirjutamist selle saatja aadress. 993 00:48:05,120 --> 00:48:08,310 Nii et kui me kirjutada saatja aadress, see tähendab, et kui foo 994 00:48:08,310 --> 00:48:14,220 naaseb, oleme tagasi seal, kus pahatahtlik kasutaja räägib seda, mida 995 00:48:14,220 --> 00:48:19,490 mis iganes väärtus on sisestatud, mis tahes tähemärki kasutaja sisestatud. 996 00:48:19,490 --> 00:48:24,320 Ja nii, kui pahatahtlik kasutaja on eriti tark, ta ei ole seda 997 00:48:24,320 --> 00:48:29,255 tagasi kuskil printDef funktsioon või kusagil malloc 998 00:48:29,255 --> 00:48:31,830 funktsioon, just kuskil meelevaldne. 999 00:48:31,830 --> 00:48:38,420 >> Kuid veelgi tark on see, kui tal on kasutaja tagasi siinsamas. 1000 00:48:38,420 --> 00:48:41,920 Ja siis hakkad täidesaatva Nende kui rida koodi. 1001 00:48:41,920 --> 00:48:46,610 Niisiis sel hetkel, kasutaja saab sisestada mida iganes ta tahab sellesse piirkonda. 1002 00:48:46,610 --> 00:48:52,210 Ja tal on täielik kontroll üle oma programmi. 1003 00:48:52,210 --> 00:48:53,460 Küsimused, mis? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Nii et järgmine küsimus on lõppenud reimplementation foo nii 1006 00:49:00,970 --> 00:49:02,620 et see ei ole enam haavatav. 1007 00:49:02,620 --> 00:49:03,870 >> Nii et seal on paar võimalust sa oleks seda teinud. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Meil on veel c ainult on pikkusega 12. 1010 00:49:13,330 --> 00:49:16,480 Sa oleks võinud muuta selle osana oma lahendus. 1011 00:49:16,480 --> 00:49:18,930 Lisasime check teha kindel bar polnud null. 1012 00:49:18,930 --> 00:49:24,460 Kuigi te ei pea et täies ulatuses krediiti. 1013 00:49:24,460 --> 00:49:27,690 Nii me kontrollime esimest string pikkusega bar. 1014 00:49:27,690 --> 00:49:31,650 Kui see on suurem kui 12, siis tegelikult ei tee koopia. 1015 00:49:31,650 --> 00:49:33,010 Nii et üks võimalus, millega ta. 1016 00:49:33,010 --> 00:49:36,750 >> Teine viis, millega see on selle asemel võttes c olla ainult pikkus 12, on see 1017 00:49:36,750 --> 00:49:39,310 olema pikkusega strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Teine viis, millega on tegelikult lihtsalt tagasi. 1019 00:49:43,370 --> 00:49:46,690 Nii et kui sa olid just saanud lahti kõik see, kui sa olid just välja kõik 1020 00:49:46,690 --> 00:49:51,830 rida koodi, siis oleks saanud täies ulatuses krediiti, sest see funktsioon 1021 00:49:51,830 --> 00:49:54,150 tegelikult ei täita midagi. 1022 00:49:54,150 --> 00:49:57,650 See on kopeerimine käsurea argument mõnda massiivi 1023 00:49:57,650 --> 00:49:59,960 tema kohalik freimi. 1024 00:49:59,960 --> 00:50:01,310 Ja siis asi on taastumas. 1025 00:50:01,310 --> 00:50:04,020 Ja mis see saavutatud on läinud. 1026 00:50:04,020 --> 00:50:09,740 Nii kasum oli ka piisav võimalus saada täieliku krediiti. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. Malan: Mitte päris vaimus küsimus aga vastuvõetav kohta 1028 00:50:13,425 --> 00:50:15,580 spec sellegipoolest. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Küsimused ükskõik mis? 1030 00:50:18,260 --> 00:50:22,270 Üks asi, mida vähemalt vaja on koostada kood. 1031 00:50:22,270 --> 00:50:24,810 Nii et kuigi tehniliselt te ei ole haavatavamad kui koodi ei 1032 00:50:24,810 --> 00:50:29,130 koguda, et me ei saa sellega nõustuda. 1033 00:50:29,130 --> 00:50:31,350 Ei ole ühtegi küsimust? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. Malan: Kas sa tahad öelda pealkiri? 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: Ei 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. Malan: Nii see on see oli kas hea uudis või halb uudis. 1038 00:50:40,470 --> 00:50:43,870 See on sõna otseses sama probleem kui esimesele viktoriin. 1039 00:50:43,870 --> 00:50:46,140 Ja see on peaaegu sama probleemi pset1. 1040 00:50:46,140 --> 00:50:49,980 Aga see oli sihilikult lihtsustatud, et lihtsam püramiid, mis võib olla 1041 00:50:49,980 --> 00:50:52,330 lahendatud veidi lihtsam iteratsiooni. 1042 00:50:52,330 --> 00:50:55,680 Ja tõesti, mida me ei saada hetkel siin ei olnud nii palju loogikat 1043 00:50:55,680 --> 00:50:58,100 sest ilmselt selle punkti, et sa oled mugavam kui sa olid 1044 00:50:58,100 --> 00:51:01,850 nädalal üks jaoks silmuseid või miks silmad, aga tõesti tease peale, et 1045 00:51:01,850 --> 00:51:04,790 sa oled natuke rahul Arusaam, et PHP ei ole ainult see, mida 1046 00:51:04,790 --> 00:51:05,290 programmeerimine. 1047 00:51:05,290 --> 00:51:07,820 See võib tegelikult kasutada keelt kirjutada käsurea programme. 1048 00:51:07,820 --> 00:51:10,060 >> Ja tõepoolest, see on, mida me püüdsime juhtida teie tähelepanu. 1049 00:51:10,060 --> 00:51:12,060 See on käsurea PHP programm. 1050 00:51:12,060 --> 00:51:16,690 Nii C-koodi siin, kuigi õige C, pole õige PHP. 1051 00:51:16,690 --> 00:51:17,940 Aga kood on tõesti sama. 1052 00:51:17,940 --> 00:51:21,720 Kui võrrelda lahendusi Quiz 0 vastu Quiz 1, siis leiad, et 1053 00:51:21,720 --> 00:51:25,630 see on peaaegu identsed, välja arvatud mõned dollarimärki ja 1054 00:51:25,630 --> 00:51:27,250 Kuna andmete liiki. 1055 00:51:27,250 --> 00:51:31,720 Eriti siis, kui me vaatleme siin te näete, et me kinnitada, sellega 1056 00:51:31,720 --> 00:51:33,730 juhul alates 1 kuni läbi 7. 1057 00:51:33,730 --> 00:51:34,910 >> Me oleks võinud teha seda 0 indeks. 1058 00:51:34,910 --> 00:51:37,320 Aga mõnikord, ma arvan, et see on lihtsalt vaimselt kergem mõelda asjad 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 Kui sa tahad ühte plokki, siis kaks plokid, siis kolm, siis 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot seitse. 1062 00:51:41,770 --> 00:51:45,960 Oleme j Alglaaditakse 1 ja siis arvestan kuni i. 1063 00:51:45,960 --> 00:51:48,150 Ja kõik on siin identne. 1064 00:51:48,150 --> 00:51:49,790 Aga tuleb mainida, on paar asja. 1065 00:51:49,790 --> 00:51:53,230 Anname teile need kaks rida, seda esimest üks, goofily nimeks Jutt 1066 00:51:53,230 --> 00:51:54,560 terava paugu. 1067 00:51:54,560 --> 00:51:58,770 Ja see lihtsalt täpsustab tee, kausta, kus saab programmi 1068 00:51:58,770 --> 00:52:02,160 Leiti, et soovid kasutada tõlgendada seda faili. 1069 00:52:02,160 --> 00:52:04,710 >> Ja siis joon pärast seda, ning Loomulikult tähendab sisestage PHP režiim. 1070 00:52:04,710 --> 00:52:07,740 Ja joon väga põhjas tähendab väljumise PHP režiim. 1071 00:52:07,740 --> 00:52:09,740 Ja see toimib, üldiselt koos tõlgendada keeles. 1072 00:52:09,740 --> 00:52:14,370 See on selline tüütu, kui sa kirjutad programmi fail nimega foo.php. 1073 00:52:14,370 --> 00:52:17,320 Ja siis teie kasutajad on lihtsalt mäletan, OK, et kasutada seda programmi, ma 1074 00:52:17,320 --> 00:52:22,320 pead kirjutama "php ruumi foo.php." Lahke tüütu, kui miski muu. 1075 00:52:22,320 --> 00:52:25,270 Ja see näitab ka, et teie programm on kirjutatud PHP, mis ei ole kõik 1076 00:52:25,270 --> 00:52:27,060 et valgustav kasutaja. 1077 00:52:27,060 --> 00:52:30,100 >> Nii saab kõrvaldada. Php üldse mäletate loeng. 1078 00:52:30,100 --> 00:52:35,690 Ja tegelikult võite seda teha. / Foo kui olete chmodded seda tehes 1079 00:52:35,690 --> 00:52:36,500 käivitatav. 1080 00:52:36,500 --> 00:52:39,630 Nii chmod + x suva oleks teinud. 1081 00:52:39,630 --> 00:52:41,460 Ja kui sa ka lisada Jutt siin. 1082 00:52:41,460 --> 00:52:45,320 Aga tõesti, probleem oli saada aadressil printimisest midagi sellist. 1083 00:52:45,320 --> 00:52:51,100 No HTML, C-kood kindlasti, vaid mõned PHP. 1084 00:52:51,100 --> 00:52:54,100 Nii Milo naasis probleem 25. 1085 00:52:54,100 --> 00:52:58,050 Ja 25, siis anti järgmise skelett kood, mis oli 1086 00:52:58,050 --> 00:52:59,730 päris lihtne veebileht. 1087 00:52:59,730 --> 00:53:04,230 Ja mahlane osa HTML-tark oli maas siin, kus meil on sees keha 1088 00:53:04,230 --> 00:53:09,160 vormi, mis on unikaalne ID sisendite mille sees oli kaks sisendit, üks 1089 00:53:09,160 --> 00:53:11,950 idee on nimi, mis on üks koos idee nuppu. 1090 00:53:11,950 --> 00:53:14,240 >> Esimene oli teksti tüüp, Teine tüüp esitama. 1091 00:53:14,240 --> 00:53:16,930 Ja nii me andsime teile, tegelikult rohkem koostisosi kui teil on vaja, just nii 1092 00:53:16,930 --> 00:53:19,230 teil oli võimalusi, mis Selle probleemi lahendamiseks. 1093 00:53:19,230 --> 00:53:21,130 Sul ei ole tingimata vaja kõik need IDd. 1094 00:53:21,130 --> 00:53:23,580 Kuid see võimaldab teil lahendada see erinevalt. 1095 00:53:23,580 --> 00:53:27,050 Ja ülaosas, märkate, et Eesmärgiks oli, et käivitada 1096 00:53:27,050 --> 00:53:27,960 aken niimoodi - 1097 00:53:27,960 --> 00:53:28,780 Tere, Milo! - 1098 00:53:28,780 --> 00:53:31,270 avanes brauseri abil super lihtne, kui 1099 00:53:31,270 --> 00:53:33,190 mitte kole, häire funktsioon. 1100 00:53:33,190 --> 00:53:37,480 Ja lõpuks, see taandub kontseptuaalselt kuidagi kuulates 1101 00:53:37,480 --> 00:53:41,290 esildised vormi kliendipoolse Mitte server-side, kuidagi 1102 00:53:41,290 --> 00:53:45,640 vastates, et esitamise haarates raha, et kasutaja sisestatud 1103 00:53:45,640 --> 00:53:50,120 sisse väljale Nimi ja seejärel väljapanek ta keha märguanne. 1104 00:53:50,120 --> 00:53:53,460 >> Nii et üks viis, kuidas saate seda teha on koos jQuery, mis tundub vähe 1105 00:53:53,460 --> 00:53:56,880 süntaktiliselt segadusttekitav esimesel. 1106 00:53:56,880 --> 00:54:00,760 Seda saab teha puhta DOM kood - document.getelement by ID. 1107 00:54:00,760 --> 00:54:02,530 Kuid olgem vaatleme seda versiooni. 1108 00:54:02,530 --> 00:54:05,110 Mul on paar olulist rida esimene. 1109 00:54:05,110 --> 00:54:09,460 Nii et üks, meil on seda joont, mis on identne sellega, mida te olete näinud 1110 00:54:09,460 --> 00:54:13,830 aastal, usun, form2.html klassist nädalal 9. 1111 00:54:13,830 --> 00:54:16,960 Ja see on lihtsalt öeldes, teostada järgmine kood kui 1112 00:54:16,960 --> 00:54:18,430 dokument on valmis. 1113 00:54:18,430 --> 00:54:21,770 See on tähtis ainult sellepärast, HTML lehti lugeda ülevalt 1114 00:54:21,770 --> 00:54:23,280 alla, vasakult paremale. 1115 00:54:23,280 --> 00:54:27,910 >> Ja seega, kui sa püüad teha midagi kood siia mõned DOM 1116 00:54:27,910 --> 00:54:31,560 element, mõned HTML tag, mis on ette siin, sa teed seda liiga kiiresti, 1117 00:54:31,560 --> 00:54:34,220 sest see ei ole isegi loetud mällu. 1118 00:54:34,220 --> 00:54:37,740 Nii öelda, see document.ready line, me ütleme, 1119 00:54:37,740 --> 00:54:39,040 siin on natuke koodi, brauserit. 1120 00:54:39,040 --> 00:54:42,440 Aga ei tee seda enne, kui kogu dokument on valmis, et on DOM 1121 00:54:42,440 --> 00:54:44,320 puu olemas mälu. 1122 00:54:44,320 --> 00:54:47,110 See üks on natuke rohkem arusaadav, kui süntaktiliselt 1123 00:54:47,110 --> 00:54:51,890 natuke erinev, kui ma ütlen, ostke HTML element, mille ainulaadne 1124 00:54:51,890 --> 00:54:53,560 tunnus on sisendid. 1125 00:54:53,560 --> 00:54:56,220 Seda räsi tag märgib, unikaalne ID. 1126 00:54:56,220 --> 00:54:58,070 Ja siis ma helistan. Esitama. 1127 00:54:58,070 --> 00:55:01,660 >> Nii. Esitada siin on funktsioon, vastasel juhul tuntud meetodit, mis on 1128 00:55:01,660 --> 00:55:05,850 sees objekt vasakul pool seal, et ma välja ei toodud. 1129 00:55:05,850 --> 00:55:08,990 Nii et kui te arvate sisendite objekt mälu - ja seda ta tõepoolest on. 1130 00:55:08,990 --> 00:55:10,440 See on sõlme puu - 1131 00:55:10,440 --> 00:55:16,580 . Esitada vahend kui käesoleva vormi Selle ID esitatakse, täidab 1132 00:55:16,580 --> 00:55:17,700 järgmine kood. 1133 00:55:17,700 --> 00:55:20,290 Mind ei huvita, mida nimi funktsioon ma täidesaatva. 1134 00:55:20,290 --> 00:55:23,760 Nii et siin ma kasutan, kui enne, mis on nimetatakse lambda funktsioon või 1135 00:55:23,760 --> 00:55:24,720 anonüümne funktsioon. 1136 00:55:24,720 --> 00:55:27,640 See ei ole üldse intellektuaalselt huvitav, va see ei ole nime, 1137 00:55:27,640 --> 00:55:30,220 mis on hea, kui sa oled ainult kunagi helistada üks kord. 1138 00:55:30,220 --> 00:55:34,490 Ja seal sees ma tegelikult hakkama esitamise vorm. 1139 00:55:34,490 --> 00:55:36,810 Ma esimest kuulutada muutuja nimetatakse väärtus. 1140 00:55:36,810 --> 00:55:40,610 Ja mis on selle tulemuseks rõhutatud osa siin nüüd? 1141 00:55:40,610 --> 00:55:44,755 Mida see teeb juures kõrge tase on minu jaoks? 1142 00:55:44,755 --> 00:55:48,539 >> Publik: Läheb väärtus, kasutaja ei ole HTML allpool. 1143 00:55:48,539 --> 00:55:50,920 Läheb et ID ja seejärel leiab väärtuseks. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. Malan: Täpselt. 1145 00:55:51,590 --> 00:55:54,300 See haarab sõlme, kelle ainulaadne tunnus on nimi. 1146 00:55:54,300 --> 00:55:56,900 Läheb väärtus selles, mis on arvatavasti see, mida kasutaja 1147 00:55:56,900 --> 00:55:58,190 tipitud ennast. 1148 00:55:58,190 --> 00:56:01,020 Ja siis ta salvestab, et muutuja nimega väärtus. 1149 00:56:01,020 --> 00:56:03,720 Nagu kõrvale, siis võib olla ka teha natuke teistmoodi. 1150 00:56:03,720 --> 00:56:09,250 Täiesti vastuvõetav, tehes midagi vale var väärtus muutub 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 Ja see on põhjus, miks see on natuke tüütu, et ei kasuta jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Name". Väärtus. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Seega täiesti vastuvõetav. 1157 00:56:19,620 --> 00:56:22,770 Erinevaid viise seda teha. jQuery lihtsalt kipub olema veidi lühemalt ja 1158 00:56:22,770 --> 00:56:25,230 kindlasti rohkem populaarne seas programmeerijad. 1159 00:56:25,230 --> 00:56:27,590 >> Nüüd ma teen natuke meelerahu kontrollida, sest probleem 1160 00:56:27,590 --> 00:56:30,820 avaldus me selgesõnaliselt öelnud, et kui Kasutaja ei ole veel kirjutatud tema 1161 00:56:30,820 --> 00:56:32,580 Nimi, ei näita teateid. 1162 00:56:32,580 --> 00:56:35,390 Aga te võite kontrollida, et just kontrollimine tühi string 1163 00:56:35,390 --> 00:56:37,850 viisi kraami, kui seal on midagi tegelikult olemas. 1164 00:56:37,850 --> 00:56:40,880 Aga kui see ei ole võrdne viisi kraami, Ma tahan helistada teateid. 1165 00:56:40,880 --> 00:56:45,610 Ja huvitav osa on see, et me kasutame pluss operaator, mis 1166 00:56:45,610 --> 00:56:48,130 mida teeb JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Concatenate. 1168 00:56:48,740 --> 00:56:50,690 Nii et see on nagu PHPS dot operaator. 1169 00:56:50,690 --> 00:56:52,820 Sama mõte, mis on pisut teistsugune süntaks. 1170 00:56:52,820 --> 00:56:55,280 Ja ma lihtsalt luua string nägid ekraanil shot - 1171 00:56:55,280 --> 00:56:57,750 Tere, nii ja nii. 1172 00:56:57,750 --> 00:56:59,200 >> Ja siis viimane detail on see. 1173 00:56:59,200 --> 00:57:04,970 Miks ma tagasi false sees Selle anonüümne funktsioon? 1174 00:57:04,970 --> 00:57:07,420 >> Publik: Pole mingit väärtust. 1175 00:57:07,420 --> 00:57:09,380 Sa pane see vormi. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Ta lihtsalt ütleb, kui raha ei ole võrdne tühi, siis tee seda. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Seal oli tühi selle esitamist. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. Malan: OK. 1181 00:57:21,170 --> 00:57:21,640 Hoolikas aga. 1182 00:57:21,640 --> 00:57:22,830 Seal on keegi teine ​​siin. 1183 00:57:22,830 --> 00:57:25,510 Ja tagasi false on väljaspool ning kui tingimused. 1184 00:57:25,510 --> 00:57:29,470 Nii see esile rida, tagastab false, täidab ükskõik mida, kui 1185 00:57:29,470 --> 00:57:32,310 vorm on esitatud. 1186 00:57:32,310 --> 00:57:36,810 Mis naasmist vale sees selle sündmus, nagu seda nimetatakse, 1187 00:57:36,810 --> 00:57:38,450 kõnealuse sündmuse olles esitamine? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> Publik: Sest see juhtub ainult üks kord. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. Malan: juhtub ainult üks kord. 1191 00:57:45,320 --> 00:57:46,821 Mitte päris. 1192 00:57:46,821 --> 00:57:47,292 Jah? 1193 00:57:47,292 --> 00:57:50,589 >> Publik: See takistab vormi esitades vaikimisi, 1194 00:57:50,589 --> 00:57:52,480 mis muudaks lehekülje reload. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. Malan: Täpselt. 1196 00:57:53,110 --> 00:57:56,490 Nii et ma ülekoormus mõiste esitada siin, sest ma ütlen, et vorm on 1197 00:57:56,490 --> 00:57:57,670 esitatakse. 1198 00:57:57,670 --> 00:58:02,240 Aga kui te soovitate, see pole tegelikult esitati tõsi HTTP tee. 1199 00:58:02,240 --> 00:58:06,870 Kui klõpsate Saada, sest meie onSubmit handler, me pealtkuulamist 1200 00:58:06,870 --> 00:58:09,040 et vormi esitamise nii rääkida. 1201 00:58:09,040 --> 00:58:11,290 Me siis teeme oma asja JavaScript koodi. 1202 00:58:11,290 --> 00:58:14,070 Aga ma teadlikult tagastamise vale, sest ma ei taha, et juhtuma 1203 00:58:14,070 --> 00:58:18,430 Sekundi pärast on kogu vormi ise tuleb esitada veebis 1204 00:58:18,430 --> 00:58:22,800 server koos põhiväärtus paari muutes URL oleks midagi 1205 00:58:22,800 --> 00:58:26,180 q = kassid või mida iganes me tegime, Näiteks klassi. 1206 00:58:26,180 --> 00:58:29,640 Ma ei taha, et see juhtuks, sest pole server kuulata seda 1207 00:58:29,640 --> 00:58:30,690 moodustavad esitamist. 1208 00:58:30,690 --> 00:58:32,320 See on puhtalt tehtud JavaScripti koodi. 1209 00:58:32,320 --> 00:58:35,760 Ja see on põhjus, miks ma ei olnud isegi tegevuse atribuut minu vorm, sest ma 1210 00:58:35,760 --> 00:58:38,870 ei kavatse võtta seda kunagi minna server. 1211 00:58:38,870 --> 00:58:40,780 >> Nii, et see on esitatud. 1212 00:58:40,780 --> 00:58:44,340 Aga me pealtkuulamist, et vormi esitamise ja ennetamise default 1213 00:58:44,340 --> 00:58:47,477 käitumine, mis on tegelikult minna kõik viis server. 1214 00:58:47,477 --> 00:58:48,730 >> Publik: Nii hoides seda kliendipoolse. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. Malan: Keeping see kliendipoolse. 1216 00:58:49,780 --> 00:58:51,030 Täpselt nii. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Next up oli mu 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 Nii et see esimene küsimus oli üldiselt karm inimestele. 1222 00:59:04,990 --> 00:59:07,270 Kuigi hiljem ones läks paremini. 1223 00:59:07,270 --> 00:59:12,260 Nii et teil oleks valida õiged andmed tüübid mõlemad sambad. 1224 00:59:12,260 --> 00:59:17,750 Ja mõlemad on mõned asju neile, et 1225 00:59:17,750 --> 00:59:20,620 teeb valiku raskeks. 1226 00:59:20,620 --> 00:59:24,430 Nii int ei kehti tippida number. 1227 00:59:24,430 --> 00:59:29,410 Selle põhjuseks on 12-kohaline konto number, int ei ole piisavalt suur, et 1228 00:59:29,410 --> 00:59:31,070 salvestada kogu numbrit. 1229 00:59:31,070 --> 00:59:36,570 Nii kehtiv valik oleks olnud suur int kui juhtub, et tead seda. 1230 00:59:36,570 --> 00:59:42,090 Teine valik oleks olnud char valdkonnas pikkus 12. 1231 00:59:42,090 --> 00:59:44,560 Nii kumbki neist oleks töötanud. 1232 00:59:44,560 --> 00:59:46,100 Int ei teeks. 1233 00:59:46,100 --> 00:59:50,170 >> Nüüd, tasakaalu, arvan, et tagasi pset7. 1234 00:59:50,170 --> 00:59:59,540 Nii me konkreetselt kasutada koma salvestada aktsiate väärtust või - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID J. Malan: Cash. 1236 01:00:00,550 --> 01:00:01,060 >> ROB BOWDEN: Cash. 1237 01:00:01,060 --> 01:00:05,710 Me kasutasime kohaga säilitada summa raha, et kasutaja on praegu. 1238 01:00:05,710 --> 01:00:10,950 Seega põhjus, miks me seda teha ei sest mäletan, hõljub. 1239 01:00:10,950 --> 01:00:12,480 Seal ujukoma täpsus. 1240 01:00:12,480 --> 01:00:18,200 Seda ei saa täpselt salvestada raha väärtused nagu me tahame siin. 1241 01:00:18,200 --> 01:00:23,630 Nii koma on võimalik täpselt poest midagi öelda, kaks kohta pärast koma. 1242 01:00:23,630 --> 01:00:27,630 Sellepärast tasakaalu, me tahame seda olema kohaga, mitte ujuda. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. Malan: Ja ka liiga, kuigi oleks olnud tark teiste 1244 01:00:30,230 --> 01:00:32,760 kontekstis mõtlema, võibolla see on võimalus int. 1245 01:00:32,760 --> 01:00:34,420 Ma lihtsalt jälgida asju penni. 1246 01:00:34,420 --> 01:00:38,670 Sest me selgelt näitas default väärtus on 100,00, mis 1247 01:00:38,670 --> 01:00:40,380 tähendab, et see võib olla lihtsalt int. 1248 01:00:40,380 --> 01:00:45,310 Ja veel üks nüanss liiga number oli see, et see ei olnud mõeldud 1249 01:00:45,310 --> 01:00:46,180 olevat trikiga küsimus. 1250 01:00:46,180 --> 01:00:49,860 Aga meenutan, et int MySQL nagu C, vähemalt 1251 01:00:49,860 --> 01:00:51,440 aparaat, on 32-bit. 1252 01:00:51,440 --> 01:00:53,960 Ja kuigi me ei oota, et te tean täpselt, kui palju numbreid, mis 1253 01:00:53,960 --> 01:00:56,910 vahenditega, ei meelde, et kõige rohkem saate esindama potentsiaalselt 1254 01:00:56,910 --> 01:01:00,710 32-bit number on umbes mida? 1255 01:01:00,710 --> 01:01:02,760 >> Mis number me alati öelda? 1256 01:01:02,760 --> 01:01:04,530 2 kuni 32, mis on see umbes? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Sul ei ole täpselt teada. 1259 01:01:08,780 --> 01:01:10,580 Aga enam-vähem on kasulik eluiga. 1260 01:01:10,580 --> 01:01:12,200 See on umbes 4 miljardit. 1261 01:01:12,200 --> 01:01:14,430 Nii et me oleme öelnud, et paar korda. 1262 01:01:14,430 --> 01:01:16,360 Ma tean, et ma olen öelnud, et paar korda. 1263 01:01:16,360 --> 01:01:17,670 Ja see on umbes 4 miljardit. 1264 01:01:17,670 --> 01:01:19,710 Ja see on hea reegel Pöidla teada. 1265 01:01:19,710 --> 01:01:21,880 Kui teil on 8 bitti, 256 on maagiline number. 1266 01:01:21,880 --> 01:01:24,160 Kui sul on 32 bitti, 4 miljardit anda või võtta. 1267 01:01:24,160 --> 01:01:27,140 Nii et kui sa lihtsalt kirjutada 4000000000, te näete, et see on vähem numbreid kui 1268 01:01:27,140 --> 01:01:30,970 12, mis tähendab, et see ei ole ilmselgelt piisavalt väljendusrikkust lüüa 1269 01:01:30,970 --> 01:01:34,220 12-kohaline kontonumber. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 Nii Ülejäänud läks paremini. 1272 01:01:38,520 --> 01:01:40,900 Olgu, oletame, et pank paneb $ 20 igakuine 1273 01:01:40,900 --> 01:01:42,400 hooldustasu igas aspektis. 1274 01:01:42,400 --> 01:01:45,506 Millega SQL Päring võib pank maha $ 20 iga loota, isegi kui 1275 01:01:45,506 --> 01:01:47,520 see toob mõned saldo negatiivne? 1276 01:01:47,520 --> 01:01:50,380 Nii et põhimõtteliselt on neli peamist tüüpi päringuid - 1277 01:01:50,380 --> 01:01:52,840 sisestamiseks valige, värskendada ja kustutada. 1278 01:01:52,840 --> 01:01:56,080 Niisiis, mida me arvame, et oleme kavatse kasutada siin? 1279 01:01:56,080 --> 01:01:57,000 Uuenda. 1280 01:01:57,000 --> 01:01:58,260 >> Võtame vaata. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Nii et siin me oleme ajakohastamine. 1283 01:02:05,870 --> 01:02:09,900 Mida tabeli me ajakohastamine kontot? 1284 01:02:09,900 --> 01:02:11,670 Nii ajakohastamine kontod. 1285 01:02:11,670 --> 01:02:15,390 Ja siis süntaks ütleb, mida kontodel me ajakohastamine? 1286 01:02:15,390 --> 01:02:19,520 Noh, me seame tasakaal võrdne praegune väärtus tasakaal miinus 20. 1287 01:02:19,520 --> 01:02:22,860 Nii see uuendab kõik read raamatupidamise, lahutades 1288 01:02:22,860 --> 01:02:26,250 $ 20 alates tasakaalu. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. Malan: üldine viga siin, kuigi me mõnikord andestas ta, 1290 01:02:29,260 --> 01:02:32,990 oli tegelikult PHP kood siia helistades päringu funktsiooni või paneb 1291 01:02:32,990 --> 01:02:35,460 jutumärgid kõike ei pea seal olema. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Pea meeles, et MySQL on Eraldi keel PHP. 1293 01:02:39,780 --> 01:02:42,410 Meil juhtub olema kirjalikult MySQL PHP. 1294 01:02:42,410 --> 01:02:46,180 Ja PHP seejärel saates selle üle MySQL server. 1295 01:02:46,180 --> 01:02:51,120 Aga sa ei pea PHP et suhelda MySQL server. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. Malan: Täpselt. 1297 01:02:51,730 --> 01:02:54,240 Seega pole muutujaid dollari märgid peaks selles kontekstis. 1298 01:02:54,240 --> 01:02:59,550 Seda saab lihtsalt teha kõik matemaatika jooksul andmebaas ise. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Nii et järgmine üks. 1301 01:03:01,300 --> 01:03:02,731 Kas see on järgmine? 1302 01:03:02,731 --> 01:03:03,210 Jah. 1303 01:03:03,210 --> 01:03:06,570 Niisiis, mida SQL Päring võib pank laadida kontonumbrid oma 1304 01:03:06,570 --> 01:03:09,300 rikkamaid kliente, kellel tasakaalu üle 1000? 1305 01:03:09,300 --> 01:03:13,280 Niisiis, mis on neli peamist liiki hakkame siit tahad? 1306 01:03:13,280 --> 01:03:14,430 Vali. 1307 01:03:14,430 --> 01:03:16,650 Nii et me tahame valida. 1308 01:03:16,650 --> 01:03:17,610 Mida me tahame valida? 1309 01:03:17,610 --> 01:03:19,380 Mida veerus me tahame valida? 1310 01:03:19,380 --> 01:03:20,970 Me just soovite valida number. 1311 01:03:20,970 --> 01:03:23,910 Aga kui sa ütlesid, star, me Aktsepteeritakse ka mis. 1312 01:03:23,910 --> 01:03:25,820 >> Nii valida number, mida lauale? 1313 01:03:25,820 --> 01:03:26,640 Kontod. 1314 01:03:26,640 --> 01:03:28,370 Ja siis seisukorras tahame? 1315 01:03:28,370 --> 01:03:30,140 Kui tasakaal on suurem kui 1000. 1316 01:03:30,140 --> 01:03:31,720 Meil on ka tunnustatud suurem või võrdne. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Viimane. 1319 01:03:36,190 --> 01:03:42,940 Millega SQL Päring võib pank lähedale, st kustutada iga konto, 1320 01:03:42,940 --> 01:03:44,480 on tasakaalu $ 0? 1321 01:03:44,480 --> 01:03:47,620 Niisiis, mis on neli on meil kavatse soovite kasutada? 1322 01:03:47,620 --> 01:03:48,320 Kustuta. 1323 01:03:48,320 --> 01:03:50,180 Nii süntaks on? 1324 01:03:50,180 --> 01:03:51,890 Kustuta mida lauale? 1325 01:03:51,890 --> 01:03:53,550 Kontod. 1326 01:03:53,550 --> 01:03:55,790 Ja siis tingimus, mille kohta me tahame kustutada - 1327 01:03:55,790 --> 01:03:57,280 kus tasakaal võrdub nulliga. 1328 01:03:57,280 --> 01:04:03,050 Nii kustutada kõik read kontodelt kui saldo on null. 1329 01:04:03,050 --> 01:04:04,300 Küsimused ühelgi neist? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Tahad järjekorda? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. Malan: Queue guide. 1333 01:04:11,200 --> 01:04:17,110 Nii et see, andsime me teile pisut tuttav struktuur, uurisime 1334 01:04:17,110 --> 01:04:20,450 natuke klassi kõrval structs, mis oli andmete 1335 01:04:20,450 --> 01:04:21,910 struktuur, mis on seotud vaimu. 1336 01:04:21,910 --> 01:04:24,670 Erinevus kuigi järjekord on et pidime kuidagi meenutada, kes 1337 01:04:24,670 --> 01:04:27,900 oli ees järjekorda, suurtes osa, et me saaksime teha rohkem 1338 01:04:27,900 --> 01:04:30,530 tõhus kasutamine mälu, vähemalt kui olime kasutades massiivi. 1339 01:04:30,530 --> 01:04:35,460 >> Sest mäletate, kui meil on massiiv, kui Näiteks on see ees 1340 01:04:35,460 --> 01:04:38,470 järjekorda, kui ma saan järjekorda siin ja siis keegi saab vastavalt 1341 01:04:38,470 --> 01:04:42,710 minu taga, minu taga, minu taga, ja üks inimene astub üle piiri, siis 1342 01:04:42,710 --> 01:04:45,930 võiks, nagu me nägime mõned meie inimeste vabatahtlike klassis, on kõik 1343 01:04:45,930 --> 01:04:47,100 suunata sel viisil. 1344 01:04:47,100 --> 01:04:50,880 Aga üldiselt, kes kõik teevad midagi ei ole parim ajakasutus 1345 01:04:50,880 --> 01:04:54,600 aastal programmi, sest see tähendab oma algoritm töötab, mida 1346 01:04:54,600 --> 01:04:56,520 asümptootiline sõiduaega? 1347 01:04:56,520 --> 01:04:57,420 See on lineaarne. 1348 01:04:57,420 --> 01:04:59,600 >> Ja ma tunnen, et see on tobe. 1349 01:04:59,600 --> 01:05:02,890 Kui järgmine inimene liin on järgmine inimene, kes pidi minema 1350 01:05:02,890 --> 01:05:04,660 poest, ei ole kõik liikuda koos. 1351 01:05:04,660 --> 01:05:08,200 Las see isik tuleb kitkuda välja kui saabub aeg, näiteks. 1352 01:05:08,200 --> 01:05:09,870 Nii võime säästa natuke aega seal. 1353 01:05:09,870 --> 01:05:14,840 Ja mida teha, et siiski, et vahendite et pea järjekorras või 1354 01:05:14,840 --> 01:05:18,060 ees järjekord läheb järk-järgult liikuda sügavamale 1355 01:05:18,060 --> 01:05:23,340 arvesse massiivi ja lõpuks võiks tegelikult ümbritsev kui me kasutame 1356 01:05:23,340 --> 01:05:25,790 array salvestada inimesed selles järjekorras. 1357 01:05:25,790 --> 01:05:28,390 Nii saab peaaegu mõtle massiivi ümmarguse andmed 1358 01:05:28,390 --> 01:05:29,880 struktuur selles mõttes. 1359 01:05:29,880 --> 01:05:33,970 >> Nii et sa kuidagi on jälgida suurus või tõesti lõpuks see 1360 01:05:33,970 --> 01:05:36,250 ja seejärel, kui algul on. 1361 01:05:36,250 --> 01:05:39,490 Seega teeme ettepaneku, et te deklareerite üks selline järjekord, kutsudes 1362 01:05:39,490 --> 01:05:41,330 see q, ainult ühe kirja. 1363 01:05:41,330 --> 01:05:44,570 Siis teeme ettepaneku, et ees on lähtestatud nulli ja suurus 1364 01:05:44,570 --> 01:05:45,470 lähtestatakse nulli. 1365 01:05:45,470 --> 01:05:47,770 >> Nii et just nüüd, seal on midagi sees, et järjekorda. 1366 01:05:47,770 --> 01:05:50,910 Ja me palume teil täita rakendamise Lisa järjekorda allpool 1367 01:05:50,910 --> 01:05:55,250 nii, et funktsioon lisab n lõpuks q ning tagastab true. 1368 01:05:55,250 --> 01:05:58,690 Aga kui q on täis või negatiivne, funktsioon peaks hoopis tagasi false. 1369 01:05:58,690 --> 01:06:01,060 Ja me andsime teile paar Eelduste. 1370 01:06:01,060 --> 01:06:04,320 Aga nad ei ole tegelikult ülesannetes asjakohane, lihtsalt et bool on olemas, 1371 01:06:04,320 --> 01:06:06,690 sest tehniliselt bool ei olemas C, kui lisate 1372 01:06:06,690 --> 01:06:07,310 teatud header fail. 1373 01:06:07,310 --> 01:06:09,350 Nii et see oli lihtsalt veendumaks, et ei olnud see trikk 1374 01:06:09,350 --> 01:06:10,940 Küsimus selline asi. 1375 01:06:10,940 --> 01:06:16,280 >> Niisiis Lisa järjekorda, tegime ettepaneku proovis lahendusi rakendada järgmiselt. 1376 01:06:16,280 --> 01:06:20,420 Üks, vaatame kõigepealt tundma, kergesti kättesaadavad viljad. 1377 01:06:20,420 --> 01:06:23,820 Kui järjekord on täis või number, üritate sisestada vähem 1378 01:06:23,820 --> 01:06:26,380 kui null, mis me ütlesime spetsifikatsiooni tohiks probleemi 1379 01:06:26,380 --> 01:06:30,320 ei ole lubatud, sest me tahame ainult mittenegatiivsed väärtused, siis tuleks 1380 01:06:30,320 --> 01:06:31,640 lihtsalt tagasi false kohe. 1381 01:06:31,640 --> 01:06:33,820 Nii mõned suhteliselt lihtne Vigade kontrollimine. 1382 01:06:33,820 --> 01:06:38,720 Kui aga soovite lisada, et tegelik number, mida pidin tegema natuke 1383 01:06:38,720 --> 01:06:39,440 mõtlesin siin. 1384 01:06:39,440 --> 01:06:41,330 Ja see on koht, kus see on natuke tüütu vaimselt, sest sa pead 1385 01:06:41,330 --> 01:06:43,000 nuputada, kuidas hakkama Kietaisu. 1386 01:06:43,000 --> 01:06:46,870 >> Aga idud idee siin see on meid huvitab see, et Kietaisu 1387 01:06:46,870 --> 01:06:51,480 Sageli tähendab modulaarne aritmeetika ja mod operaatori protsenti poolel 1388 01:06:51,480 --> 01:06:55,140 kus saab minna suurem väärtus tagasi nulli ja siis üks ja kaks ja 1389 01:06:55,140 --> 01:06:58,650 kolm ja siis ringiga tagasi nulli üks ja kaks ja kolm ja nii edasi 1390 01:06:58,650 --> 01:06:59,380 uuesti ja uuesti. 1391 01:06:59,380 --> 01:07:02,880 Niisiis, kuidas me teeme ettepaneku selle saavutamiseks on et me ei taha indeks 1392 01:07:02,880 --> 01:07:05,850 array numbrite kus meie täisarvud valeta. 1393 01:07:05,850 --> 01:07:10,740 Aga sinna me esimest korda teha tahad olenemata suurusest järjekord on aga 1394 01:07:10,740 --> 01:07:14,080 siis lisada, et olenemata ees nimekirjas on. 1395 01:07:14,080 --> 01:07:17,880 Ja mõju, mis on panna meid õiges asendis järjekorras ja 1396 01:07:17,880 --> 01:07:20,970 Mitte eeldada, et esimene inimene line on alguses, kus ta või 1397 01:07:20,970 --> 01:07:24,130 ta absoluutselt olla, kui me Samuti minnes kõigile. 1398 01:07:24,130 --> 01:07:26,710 Aga me lihtsalt luua töö ise kui võtsime 1399 01:07:26,710 --> 01:07:27,800 et erilist teed. 1400 01:07:27,800 --> 01:07:29,330 >> Nii saame hoida seda suhteliselt lihtne. 1401 01:07:29,330 --> 01:07:32,180 Me peame meeles pidama, et me lihtsalt lisatud int järjekorda. 1402 01:07:32,180 --> 01:07:35,850 Ja siis me lihtsalt tagasi tõsi. 1403 01:07:35,850 --> 01:07:38,560 Vahepeal dequeue palusime teil teha järgmist. 1404 01:07:38,560 --> 01:07:42,260 Rakendada sellisel viisil, et see dequeues, mis eemaldab ja tagastab, 1405 01:07:42,260 --> 01:07:44,190 int ees järjekorda. 1406 01:07:44,190 --> 01:07:46,410 Eemaldamiseks int, piisab seda unustada. 1407 01:07:46,410 --> 01:07:47,650 Sa ei pea alistada oma natuke. 1408 01:07:47,650 --> 01:07:48,820 Nii et see on ikka tegelikult on. 1409 01:07:48,820 --> 01:07:51,930 Just nagu andmed kõvakettale, me lihtsalt ignoreerides asjaolu 1410 01:07:51,930 --> 01:07:52,970 et see on nüüd olemas. 1411 01:07:52,970 --> 01:07:55,520 Ja kui q on tühi, siis peaks asemel tagasi negatiivne 1. 1412 01:07:55,520 --> 01:07:56,750 Nii see tundub meelevaldne. 1413 01:07:56,750 --> 01:08:01,640 Miks tagasi negatiivne 1 asemel vale? 1414 01:08:01,640 --> 01:08:02,620 Jah. 1415 01:08:02,620 --> 01:08:05,070 >> Publik: Q on hoidmiseks positiivsed väärtused. 1416 01:08:05,070 --> 01:08:10,950 Kuna sul on ainult säilitada positiivsed väärtused aastal q, negatiivne on viga. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. Malan: OK, tõsi. 1418 01:08:11,510 --> 01:08:14,850 Niisiis, kuna me alles hoidmiseks positiivne väärtused või null, siis on see hea, et 1419 01:08:14,850 --> 01:08:18,050 tagasi negatiivne väärtus valvur väärtus, spetsiaalne sümbol. 1420 01:08:18,050 --> 01:08:21,630 Aga sa ümberkirjutamist ajalugu seal, sest põhjus, miks me oleme ainult 1421 01:08:21,630 --> 01:08:25,890 tagastamise mittenegatiivsed väärtused sest me tahame 1422 01:08:25,890 --> 01:08:27,670 on valvur väärtus. 1423 01:08:27,670 --> 01:08:32,617 Nii täpsemalt, siis miks mitte lihtsalt tagasi false vigade korral? 1424 01:08:32,617 --> 01:08:33,099 Jah. 1425 01:08:33,099 --> 01:08:35,510 >> Publik: Sa oled suutnud tagasi täisarv. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. Malan: Täpselt. 1427 01:08:36,630 --> 01:08:38,569 Ja see on koht, kus C muutub päris piiravaks. 1428 01:08:38,569 --> 01:08:40,590 Kui sa tahad öelda, et sa lähed tagasi int, sul 1429 01:08:40,590 --> 01:08:41,279 tagasi int. 1430 01:08:41,279 --> 01:08:43,689 Sa ei saa fancy ja hakata tagasi pöörduma bool või float või 1431 01:08:43,689 --> 01:08:45,040 nööri või midagi sellist. 1432 01:08:45,040 --> 01:08:49,370 Nüüd, vahepeal JavaScript ja PHP ja mõne muu keele saab tegelikult 1433 01:08:49,370 --> 01:08:51,310 olete naasevad erinev tüüpi väärtusi. 1434 01:08:51,310 --> 01:08:54,819 Ja mis võib tegelikult olla kasulik, kui võid naasta positiivne ints, nullid, 1435 01:08:54,819 --> 01:08:59,439 negatiivne ints või vale või null isegi tähendama viga. 1436 01:08:59,439 --> 01:09:01,890 Kuid me ei ole seda mitmekülgsus C. 1437 01:09:01,890 --> 01:09:04,569 >> Nii dequeue, mida me ettepanekuid teha, on - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Võite tagasi false. 1440 01:09:09,830 --> 01:09:13,189 See on lihtsalt nii vale on hash määratleda vale nulli. 1441 01:09:13,189 --> 01:09:16,000 Nii et kui sa tagasi false, naasete null. 1442 01:09:16,000 --> 01:09:25,470 Ja null on kehtiv asi meie järjekorda, samas negatiivne 1 ei ole, kui 1443 01:09:25,470 --> 01:09:27,000 false juhtus olema negatiivne 1. 1444 01:09:27,000 --> 01:09:29,972 Kuid te ei tohiks isegi pead teadma, et. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. Malan: See on miks ma ei öelnud seda. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: Aga see ei olnud tõsi et te ei saa tagasi false. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. Malan: Muidugi. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Nii dequeue märka me aktsepteerime kehtetuks, kuna selle argumendiga. 1450 01:09:44,240 --> 01:09:45,479 Ja see on sellepärast, et me ei ole möödaminnes midagi sisse 1451 01:09:45,479 --> 01:09:48,359 Me lihtsalt tahame, et eemaldada element temperatuuril ees järjekorda. 1452 01:09:48,359 --> 01:09:49,819 Niisiis, kuidas võiks me minna seda teed? 1453 01:09:49,819 --> 01:09:51,290 Noh, esiteks, teeme seda kiire mõistuse kontrolli all. 1454 01:09:51,290 --> 01:09:53,350 Kui järjekorras suurus on 0, ei mingit tööd teha. 1455 01:09:53,350 --> 01:09:54,210 Tagasi negatiivne 1. 1456 01:09:54,210 --> 01:09:54,800 Valmis. 1457 01:09:54,800 --> 01:09:56,340 Nii et paar rida minu programmis. 1458 01:09:56,340 --> 01:09:58,180 Nii ainult nelja jääma. 1459 01:09:58,180 --> 01:10:01,310 >> Nii et siin ma otsustan kahandab suurus. 1460 01:10:01,310 --> 01:10:04,620 Degressioon suurus tõhusalt tähendab, et ma unustan 1461 01:10:04,620 --> 01:10:06,010 midagi on seal. 1462 01:10:06,010 --> 01:10:09,910 Aga mul on ka uuendada, kui ees numbrid. 1463 01:10:09,910 --> 01:10:11,620 Niisiis, mida teha, et ma vajan teha kahte asja. 1464 01:10:11,620 --> 01:10:16,390 Mul on vaja kõigepealt meenutada, mis number on ees järjekorda 1465 01:10:16,390 --> 01:10:17,860 sest ma pean tagasi et asi. 1466 01:10:17,860 --> 01:10:20,910 Nii et ma ei taha kogemata unustada seda ja siis kirjutatakse see. 1467 01:10:20,910 --> 01:10:22,840 Ma lihtsalt meeles pidada int. 1468 01:10:22,840 --> 01:10:27,310 >> Ja nüüd, ma tahan, et ajakohastada q.front tuleb q.front 1. 1469 01:10:27,310 --> 01:10:30,070 Seega, kui see oli esimene inimene line, nüüd, ma tahan teha, pluss 1 1470 01:10:30,070 --> 01:10:31,930 osutavad järgmise isiku rida. 1471 01:10:31,930 --> 01:10:33,420 Aga ma pean hakkama Kietaisu. 1472 01:10:33,420 --> 01:10:37,270 Ja kui maht on ülemaailmne pidev, mis toimub, mis võimaldab mul teha kindel 1473 01:10:37,270 --> 01:10:41,140 nagu ma juhtida tähelepanu väga viimane inimene line, moodul operatsiooni toob 1474 01:10:41,140 --> 01:10:43,840 mind tagasi nulli ees järjekorda. 1475 01:10:43,840 --> 01:10:46,050 Ja mis tegeleb Kietaisu siin. 1476 01:10:46,050 --> 01:10:48,950 Ja siis ma minna tagasi n. 1477 01:10:48,950 --> 01:10:51,530 >> Nüüd, äärmisel ma ei kinnitama, n. 1478 01:10:51,530 --> 01:10:53,880 Ma ei pea seda haarata ja hoidke seda ajutiselt, sest väärtus on 1479 01:10:53,880 --> 01:10:54,740 ikka veel seal. 1480 01:10:54,740 --> 01:10:57,490 Nii et ma võiks lihtsalt teha õigeid aritmeetika tagasi endine juht 1481 01:10:57,490 --> 01:10:58,450 järjekorda. 1482 01:10:58,450 --> 01:11:01,850 Aga ma lihtsalt tundsin, et see oli veel selge tegelikult haarata int, pane see 1483 01:11:01,850 --> 01:11:04,320 n, ja siis tagasi, et Selguse mõttes kuid 1484 01:11:04,320 --> 01:11:05,735 ole tingimata vajalik. 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 Nad kõik hääldatavate peas. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: Nii et esimene küsimus on kahendpuu probleem. 1490 01:11:19,110 --> 01:11:22,140 Nii et esimene küsimus on, et me oleme Arvestades neid numbreid. 1491 01:11:22,140 --> 01:11:27,160 Ja me tahame kuidagi lisada need need sõlmed selline, et see 1492 01:11:27,160 --> 01:11:30,110 kehtiv Kahendotsingupuu. 1493 01:11:30,110 --> 01:11:36,260 Nii üks asi meeles pidada umbes binaarne otsing puud on see, et see ei ole 1494 01:11:36,260 --> 01:11:39,800 lihtsalt, et asi vasakule on väiksem ja asi 1495 01:11:39,800 --> 01:11:41,120 õigus on suurem. 1496 01:11:41,120 --> 01:11:44,580 See peab olema, et kogu puu Vasakul on vähem ja kogu puu 1497 01:11:44,580 --> 01:11:45,740 paremal on suurem. 1498 01:11:45,740 --> 01:11:55,260 >> Nii et kui ma panen 34 siin üleval ja seejärel Panin 20 siin, nii et see kehtib nii 1499 01:11:55,260 --> 01:11:56,970 kaugele, kuna 34 siin. 1500 01:11:56,970 --> 01:11:57,920 20 läheb vasakule. 1501 01:11:57,920 --> 01:11:58,950 Nii et vähem. 1502 01:11:58,950 --> 01:12:03,640 Aga ma ei saa siis pane 59 siin, sest kuigi 59 on õigus 20, 1503 01:12:03,640 --> 01:12:06,140 see on ikka vasakul 34. 1504 01:12:06,140 --> 01:12:10,760 Nii et piirang meeles Lihtsaim viis ilmselt lahendada see 1505 01:12:10,760 --> 01:12:14,330 Probleem on selles, et justkui need numbrid - 1506 01:12:14,330 --> 01:12:18,720 nii 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Ja siis lisada need vasakult paremale. 1508 01:12:21,640 --> 01:12:23,390 >> Nii 20 läheb siia. 1509 01:12:23,390 --> 01:12:24,630 34 läheb siia. 1510 01:12:24,630 --> 01:12:25,830 36 läheb siia. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 Ja sa ka võinud arvasin, koos mõned kõrvaldamine ning mõistes, 1513 01:12:34,730 --> 01:12:38,830 oh, oota, ma ei ole piisavalt numbrid et täita seda enam siin. 1514 01:12:38,830 --> 01:12:42,170 Nii et ma pean reshift mis minu tee märge saab olema. 1515 01:12:42,170 --> 01:12:47,490 Aga teate, et lõplik kolm, kui Lugedes vasakult paremale, see on 1516 01:12:47,490 --> 01:12:48,740 kasvavas järjekorras. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Nüüd tahame tunnistada, mida struct saab olema jaoks 1519 01:12:56,540 --> 01:12:58,300 tippe seda puud. 1520 01:12:58,300 --> 01:13:02,720 Mida me vajame, kahendpuu? 1521 01:13:02,720 --> 01:13:05,830 Nii et meil on väärtus tüüpi int, nii et mõned int väärtust. 1522 01:13:05,830 --> 01:13:07,220 Ma ei tea, mida me kutsusime see lahendus - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Vajame kursorit vasakule laps ja kursor paremale laps. 1525 01:13:13,570 --> 01:13:17,540 Nii see läheb välja nägema selline. 1526 01:13:17,540 --> 01:13:20,510 Ja see saab tegelikult vaadata enne Millal kahekordselt seotud 1527 01:13:20,510 --> 01:13:25,090 nimekiri kraami, nii teate - 1528 01:13:25,090 --> 01:13:27,860 Ma pean kerida kõik kuidas tagasi alla probleem 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Nii märkate tundub identne sellele, välja arvatud me lihtsalt juhtub kutsume neid 1531 01:13:36,390 --> 01:13:38,590 erinevate nimede all. 1532 01:13:38,590 --> 01:13:41,440 Meil on veel täisarv väärtus ja kaks suunanäitajaks. 1533 01:13:41,440 --> 01:13:44,850 See on lihtsalt, et selle asemel, et ravida viiteid osutades järgmine asi 1534 01:13:44,850 --> 01:13:47,955 ja eelmise asi, me ravivad viiteid osutavad vasakul laps 1535 01:13:47,955 --> 01:13:49,205 ja õigus laps. 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 Nii et meie struct sõlme. 1539 01:13:59,650 --> 01:14:03,920 Ja nüüd, ainus funktsioon on meil vaja rakendada seda Traverse, mis 1540 01:14:03,920 --> 01:14:08,320 me tahame minna üle puu-, trüki- välja väärtused puus. 1541 01:14:08,320 --> 01:14:15,241 >> Nii vaadates siin, me tahaks, et printida out 20, 34, 36, 52, 59 ja 106. 1542 01:14:15,241 --> 01:14:17,970 Kuidas saavutada, et? 1543 01:14:17,970 --> 01:14:18,890 Nii et see on üsna sarnane. 1544 01:14:18,890 --> 01:14:22,910 Kui sa nägid varem eksami probleem et sa tahad välja printida 1545 01:14:22,910 --> 01:14:25,940 terve puu komadega vahel kõik, see oli tegelikult isegi 1546 01:14:25,940 --> 01:14:27,320 lihtsam kui see. 1547 01:14:27,320 --> 01:14:30,950 Nii et siin on lahendus. 1548 01:14:30,950 --> 01:14:33,110 See oli oluliselt lihtsam kui sa tegid seda rekursiivselt. 1549 01:14:33,110 --> 01:14:36,650 Ma ei tea, kas keegi üritas seda teha korduvalt. 1550 01:14:36,650 --> 01:14:38,340 >> Aga kõigepealt on meil tugipunkti. 1551 01:14:38,340 --> 01:14:39,660 Mida teha, kui juur on null? 1552 01:14:39,660 --> 01:14:40,610 Siis me lihtsalt tagasi. 1553 01:14:40,610 --> 01:14:42,300 Me ei taha, et midagi printida. 1554 01:14:42,300 --> 01:14:45,940 Else me läbida rekursiivselt alla. 1555 01:14:45,940 --> 01:14:48,140 Trüki kogu vasaku alampuu. 1556 01:14:48,140 --> 01:14:51,440 Nii printida kõike vähem kui mu praegune väärtus. 1557 01:14:51,440 --> 01:14:53,930 Ja siis ma lähen trükkida ise. 1558 01:14:53,930 --> 01:14:57,310 Ja siis ma lähen püsi arhiivi alla mu kogu parem alampuu, nii et kõik 1559 01:14:57,310 --> 01:14:58,810 suurem kui minu raha. 1560 01:14:58,810 --> 01:15:03,870 Ja see saab printida kõike selleks. 1561 01:15:03,870 --> 01:15:05,860 Küsimused selle kohta, kuidas see tegelikult saavutatakse, et? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Publik: Mul on küsimus kohta [kuuldamatu]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: Nii üks viis läheneb iga rekursiivne probleem on lihtsalt arvan 1566 01:15:23,550 --> 01:15:26,275 umbes nii, nagu sa pead mõtlema kõigi nurgas juhtudel. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Seega leian, et me tahame printida kogu puu. 1569 01:15:38,110 --> 01:15:42,030 Nii et kõik me keskenduda on selle konkreetse sõlme - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Rekursiivne kõne, teeskleme need lihtsalt tööd. 1572 01:15:47,420 --> 01:15:54,000 Nii et siin, see rekursiivne kõne Traverse, me isegi mõelda 1573 01:15:54,000 --> 01:15:58,640 about it, lihtsalt liiklevad vasakus kolm, kujutage ette, et juba prindib 20 1574 01:15:58,640 --> 01:16:00,730 ja 34 meie jaoks. 1575 01:16:00,730 --> 01:16:03,350 Ja siis, kui me lõpuks rekursiivselt kutsuvad Traverse kohta 1576 01:16:03,350 --> 01:16:07,890 õigus, et korrektselt printida 52, 59 ja 106 juures. 1577 01:16:07,890 --> 01:16:13,620 >> Seega, arvestades, et see on võimalik printida 20, 34 ja muud saab printida 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 kõik me vajame, et oleks võimalik teha, on print paigaldada keset seda. 1579 01:16:17,180 --> 01:16:21,250 Nii välja printida kõik enne meid. 1580 01:16:21,250 --> 01:16:27,710 Trüki paigaldada nii aktiivse sõlme print 36, regulaarne printf ja seejärel 1581 01:16:27,710 --> 01:16:31,170 prindi kõik pärast meid. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. Malan: See on koht, kus rekursioon saab tõesti ilus. 1583 01:16:32,730 --> 01:16:36,270 See on uskumatu hüpe usu kus sa small natuke tööd. 1584 01:16:36,270 --> 01:16:38,460 Ja siis las keegi muidu ei puhata. 1585 01:16:38,460 --> 01:16:40,180 Ja et keegi on iroonilisel kombel sind. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Nii tõsine hellake punkte, kui liigute üles küsimused - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: On küsimusi? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. Malan: ja alla veidi numbrid, keegi ei tea, kus 1590 01:16:53,490 --> 01:16:55,190 need numbrid tulevad? 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: mul on sõna otseses mõttes ei tea. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. Malan: Nad näivad kogu viktoriini. 1593 01:16:59,794 --> 01:17:01,150 >> Publik: Kas need samad numbrid? 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. Malan: Need numbrid. 1595 01:17:01,910 --> 01:17:03,260 Vähe lihavõttemuna. 1596 01:17:03,260 --> 01:17:08,100 Neile, kes te vaatate online kodus, kui te ei ütle meile e-posti teel 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net mis tähtsus Nende korduvate kuus numbrit on 1598 01:17:12,680 --> 01:17:18,560 kogu Quiz 1, siis duši te hämmastav tähelepanu lõplik 1599 01:17:18,560 --> 01:17:21,610 loeng ja stress palli. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Nice, peen. 1602 01:17:27,790 --> 01:17:29,570 >> ROB BOWDEN: Iga viimane küsimused umbes midagi tegema? 1603 01:17:29,570 --> 01:17:32,608