1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> David J. Malan: Gerai. 3 00:00:12,900 --> 00:00:16,790 Taigi kviečiame pirmasis CS50 lavonas už viktoriną. 4 00:00:16,790 --> 00:00:18,340 Mes galvojome, mes norime inauguruoti ši tradicija šiemet. 5 00:00:18,340 --> 00:00:20,960 Ir tai bus galimybė vaikščioti per 6 00:00:20,960 --> 00:00:22,220 sprendimai viktorinoje. 7 00:00:22,220 --> 00:00:26,160 Ir mes paspartinti arba sulėtinti remiantis palūkanas tiems čia. 8 00:00:26,160 --> 00:00:29,730 >> Taigi, jūs tikriausiai čia, nes jūs esate įdomu, kaip jūs galite turėti arba 9 00:00:29,730 --> 00:00:31,170 turėjo atsakyti kai šių problemų. 10 00:00:31,170 --> 00:00:33,300 Tad kodėl gi ne mes pažvelgsime Šiame skyriuje pirmiausia? 11 00:00:33,300 --> 00:00:34,450 Taigi gauti eilutes. 12 00:00:34,450 --> 00:00:37,600 Tai davė jums tris skirtingas versijas programa, kuri buvo, galiausiai, 13 00:00:37,600 --> 00:00:39,650 skirtas gauti eilutę iš vartotojo. 14 00:00:39,650 --> 00:00:42,530 Nesvarbu, ar tai padarė, kad buvo paliekama jums nustatyti. 15 00:00:42,530 --> 00:00:45,150 >> Ir mes paprašėme klausime 0, tarkime, kad 1 variantas 16 00:00:45,150 --> 00:00:46,400 sudaromi ir vykdomi. 17 00:00:46,400 --> 00:00:48,860 Kodėl programa gali segfault? 18 00:00:48,860 --> 00:00:51,150 Iš pirmo žvilgsnio, kokių pasiūlymų , kodėl? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Taip. 21 00:00:54,489 --> 00:00:59,260 >> PUBLIKA: Aš atsimenu, matau tai Ankstesniame pavyzdyje žiūri 22 00:00:59,260 --> 00:01:05,506 char * s ir matydamas s nuskaitymo ir matyti, nes tai žymeklis, kaip 23 00:01:05,506 --> 00:01:07,971 neturėjo įtakos tai, ką jūs nuskaityti? 24 00:01:07,971 --> 00:01:10,940 Tai s arba s adresas? 25 00:01:10,940 --> 00:01:11,180 >> David J. Malan: Gerai. 26 00:01:11,180 --> 00:01:11,480 Geras. 27 00:01:11,480 --> 00:01:14,830 Taigi, galiausiai, bet problemos šaltinis yra tikriausiai ketina sumažinti 28 00:01:14,830 --> 00:01:16,210 to kintamojo s. 29 00:01:16,210 --> 00:01:17,280 Ir tai iš tiesų skiriasi. 30 00:01:17,280 --> 00:01:19,900 Duomenų tipas, kad kintamasis yra char *, tai reiškia, kad vyksta 31 00:01:19,900 --> 00:01:22,570 pateikiama simbolio adresą. 32 00:01:22,570 --> 00:01:23,850 Ir jame slypi įžvalga. 33 00:01:23,850 --> 00:01:28,330 Ji ketina būti nurodytas adresas simbolis arba, platesne prasme, 34 00:01:28,330 --> 00:01:32,110 adresas pirmąjį požymį Visas blokas simbolių. 35 00:01:32,110 --> 00:01:36,680 >> Bet laimikis, kad skenavimas s paskirtis gyvenimas yra pateiktas adresas ir pateikta 36 00:01:36,680 --> 00:01:40,960 formatas kodas, kaip% s, skaityti Styga į riekė 37 00:01:40,960 --> 00:01:42,330 atminties šiuo adresu. 38 00:01:42,330 --> 00:01:46,040 Bet kadangi nėra lygybės ženklas prieš kad kabliataškis į pirmą 39 00:01:46,040 --> 00:01:49,310 linija kodą, nes mes ne iš tikrųjų skirti bet atmintyje su 40 00:01:49,310 --> 00:01:53,020 malloc, nes ji nėra iš tikrųjų Išskirti kai kurių dydžio masyvas, visi 41 00:01:53,020 --> 00:01:57,620 darote skaito vartotojo klaviatūros į kai visiškai 42 00:01:57,620 --> 00:02:00,490 šiukšlių vertę, kuri yra s pagal nutylėjimą. 43 00:02:00,490 --> 00:02:04,480 Taigi, šansai yra, kad jūs ketinate segfault jei kad adresas nėra tiesiog taip atsitikti 44 00:02:04,480 --> 00:02:08,009 būti vertė, kad galite, Tiesą sakant, parašykite. 45 00:02:08,009 --> 00:02:10,889 Taip blogai, neskirti jūsų atminties ten. 46 00:02:10,889 --> 00:02:13,150 >> Taigi klausimas 1, mes paprašėme, tarkime, kad 2 variantas yra 47 00:02:13,150 --> 00:02:14,230 sudaromi ir vykdomi. 48 00:02:14,230 --> 00:02:15,900 Kodėl ši programa gali segfault? 49 00:02:15,900 --> 00:02:17,990 Taigi, tai vienas yra mažiau klaidų. 50 00:02:17,990 --> 00:02:21,470 Ir ten tikrai tik vienas jei akivaizdu, kaip jūs galite 51 00:02:21,470 --> 00:02:22,810 sukelti segfault čia. 52 00:02:22,810 --> 00:02:23,730 Ir tai yra teminis. 53 00:02:23,730 --> 00:02:28,180 Bet kuriuo metu mes naudojame c atmintyje, kas galima padaryti, kad sukelti segfault 54 00:02:28,180 --> 00:02:30,718 su 2 versija? 55 00:02:30,718 --> 00:02:35,560 >> PUBLIKA: Jei naudosite šią įvestį seka, tai ilgiau nei 49 56 00:02:35,560 --> 00:02:35,975 simbolių. 57 00:02:35,975 --> 00:02:37,260 >> David J. Malan: Būtent. 58 00:02:37,260 --> 00:02:41,420 Bet kuriuo metu jūs matote kažką fiksuoto ilgio kai jis ateina į masyvą, savo 59 00:02:41,420 --> 00:02:44,650 radarai turi išjungti, kad tai galėtų būti problemiška, jei jūs ne tikrinti 60 00:02:44,650 --> 00:02:45,810 ribos masyvo. 61 00:02:45,810 --> 00:02:46,650 Ir tai problema čia. 62 00:02:46,650 --> 00:02:47,910 Mes vis dar naudojate scanf. 63 00:02:47,910 --> 00:02:52,200 Mes vis dar naudojate% s, o tai reiškia, pabandykite skaityti eilutę iš vartotojo. 64 00:02:52,200 --> 00:02:56,300 Tai bus skaitomos į s, kurios, šiuo metu, yra efektyviai 65 00:02:56,300 --> 00:02:58,570 adresas iš atminties riekė ar tai tolygu. 66 00:02:58,570 --> 00:03:02,080 Tai masyvo pavadinimas simbolių atminties. 67 00:03:02,080 --> 00:03:07,610 >> Bet lygiai taip pat, jei jūs skaitote eilutę tai ilgesnis nei 49 simbolių, 49 68 00:03:07,610 --> 00:03:10,440 nes jūs turite kambarį backslash 0, jūs ketinate perkrautas 69 00:03:10,440 --> 00:03:11,390 kad buferio. 70 00:03:11,390 --> 00:03:16,410 Ir jūs galite gauti pasisekė ir galėti parašyti 51. charakterį, 52., 53.. 71 00:03:16,410 --> 00:03:18,560 Bet tam tikru momentu, Operacinės sistemos ketina pasakyti ne. 72 00:03:18,560 --> 00:03:21,270 Tai tikrai nėra atminties jums leidžiama liesti. 73 00:03:21,270 --> 00:03:23,380 Ir programa ketina segfault. 74 00:03:23,380 --> 00:03:26,650 >> Taigi ten, euristika turėtų būti bet laiko jūs turite fiksuotą ilgį, 75 00:03:26,650 --> 00:03:30,150 įsitikinkite, kad jums patikrinti ilgį Bet kokios tai jūs bandote 76 00:03:30,150 --> 00:03:31,090 skaityti į jį. 77 00:03:31,090 --> 00:03:35,110 >> PUBLIKA: Taigi spręsti, kad galėtumėte turėjo ataskaitas apie faktiškai tikrinimo 78 00:03:35,110 --> 00:03:37,140 yra ilgis didesnis Didesnis ar mažesnis nei? 79 00:03:37,140 --> 00:03:37,730 >> David J. Malan: Absoliučiai. 80 00:03:37,730 --> 00:03:41,706 Jūs tiesiog turite būklę , kad sako, jei - 81 00:03:41,706 --> 00:03:46,080 arba o jūs nebūtinai žinoti iš anksto, kiek simbolių 82 00:03:46,080 --> 00:03:49,060 vartotojas ketina įvesti, nes jūs turite vištienos ir kiaušinių. 83 00:03:49,060 --> 00:03:51,860 Ne, kol jūs jį skaityti su scanf galite išsiaiškinti, kiek laiko ji yra. 84 00:03:51,860 --> 00:03:54,500 Bet tuo momentu, tai per vėlai, nes jūs jau perskaitėte, kad į 85 00:03:54,500 --> 00:03:55,710 kai atminties blokas. 86 00:03:55,710 --> 00:03:59,590 Taigi, kaip an žemę, CS50 bibliotekos vengia šis klausimas apskritai, susigrąžinimas 87 00:03:59,590 --> 00:04:01,060 naudojant fgetc. 88 00:04:01,060 --> 00:04:05,390 Ir jis nuskaito vieną simbolį vienu metu, patarimas toeing kartu, žinodami, kad jums 89 00:04:05,390 --> 00:04:08,060 negali ištekėti iš jeigu charakterį skaityti vienu metu. 90 00:04:08,060 --> 00:04:11,580 >> Laimikis su getstring atšaukimo yra kad mes turime nuolat iš naujo dydžio 91 00:04:11,580 --> 00:04:13,590 kad atminties riekė, kuri yra tik skausmas. 92 00:04:13,590 --> 00:04:15,310 Tai eilučių daug kodas, kaip tai padaryti. 93 00:04:15,310 --> 00:04:18,779 Taigi dar vienas būdas būtų iš tikrųjų naudoti pusbrolį, todėl 94 00:04:18,779 --> 00:04:19,790 sakant, scanf. 95 00:04:19,790 --> 00:04:22,820 Yra variantai, iš jų daug funkcijos, kurios iš tikrųjų patikrinti 96 00:04:22,820 --> 00:04:25,870 ilgis kiek ženklai galite skaityti maksimaliai. 97 00:04:25,870 --> 00:04:29,430 Ir jūs galite nurodyti, nereikia skaityti daugiau nei 50 simbolių. 98 00:04:29,430 --> 00:04:34,110 Taigi, kad būtų dar vienas požiūris, bet mažiau pritaikymas didesnių sąnaudų. 99 00:04:34,110 --> 00:04:37,040 >> Taigi 2 klausimas klausia, tarkime tą versiją 3 sudaromas ir vykdomas. 100 00:04:37,040 --> 00:04:39,960 Kodėl ši programa gali segfault? 101 00:04:39,960 --> 00:04:42,650 Taigi šis iš tikrųjų yra tas pats atsakyti, nors ji 102 00:04:42,650 --> 00:04:43,590 atrodo tiek mėgėjas. 103 00:04:43,590 --> 00:04:46,440 Mes naudojame malloc, kuris jaučiasi mes teikiame sau daugiau galimybių. 104 00:04:46,440 --> 00:04:48,030 Ir tada mes atlaisvinti, kad atminties pabaigoje. 105 00:04:48,030 --> 00:04:49,580 Tai dar tik 50 baitų atminties. 106 00:04:49,580 --> 00:04:53,620 Taigi, mes vis dar gali bandyti skaityti 51, 52, 1000 baitų. 107 00:04:53,620 --> 00:04:55,830 Ji ketina segfault už būtent dėl ​​tos pačios priežasties. 108 00:04:55,830 --> 00:04:57,530 >> Bet yra dar viena priežastis, taip pat. 109 00:04:57,530 --> 00:05:03,890 Kas dar galėtų malloc grąžą be iš atminties riekė adresas? 110 00:05:03,890 --> 00:05:04,920 Tai galėtų grįžti null. 111 00:05:04,920 --> 00:05:07,560 Ir todėl, kad mes ne tikrinti kad mes galime daryti ką nors 112 00:05:07,560 --> 00:05:11,350 kvailas ir dėl kitos priežasties, kuri yra tai, kad mes galime būti pasakoja scanf skaityti 113 00:05:11,350 --> 00:05:16,050 vartotojo įvesties iš klaviatūros į 0 vietoje, AKA null. 114 00:05:16,050 --> 00:05:18,890 Ir tai taip pat neabejotinai sukelti segfault. 115 00:05:18,890 --> 00:05:21,590 Taigi Viktorina paskirtimi, mes priėmė vieną iš tų, kaip 116 00:05:21,590 --> 00:05:22,740 priežasčiai. 117 00:05:22,740 --> 00:05:23,420 Vienas iš jų yra vienodi. 118 00:05:23,420 --> 00:05:25,720 Vienas iš jų yra šiek tiek daugiau niuansų. 119 00:05:25,720 --> 00:05:28,975 >> Galiausiai, atsižvelgiant į programos tikslų naudoti atminties, kaip padaryti versiją 2 bei 120 00:05:28,975 --> 00:05:30,350 3 versija skiriasi? 121 00:05:30,350 --> 00:05:35,070 Taigi, ką verta, mes matėme pažiūros begalinis tiekimo įmanoma 122 00:05:35,070 --> 00:05:35,770 Atsakymai į šį. 123 00:05:35,770 --> 00:05:39,300 Ir tarp žmonių atsakymų, ką mes buvome tikiuosi, bet mes priėmėme kitą 124 00:05:39,300 --> 00:05:42,250 dalykų, buvo kai paminėjimas faktas, kad 2 versija naudoja 125 00:05:42,250 --> 00:05:44,560 vadinamasis kamino. 126 00:05:44,560 --> 00:05:46,710 Versija 3 naudoja krūvą. 127 00:05:46,710 --> 00:05:50,060 Ir funkcionaliai, tai tikrai ne padaryti viską, kad daug skirtumų. 128 00:05:50,060 --> 00:05:54,040 Tuo dienos pabaigos, mes vis dar tiesiog gauti 50 baitų atminties. 129 00:05:54,040 --> 00:05:56,640 >> Bet tai buvo vienas iš galimų atsakymų kad mes ieškojome. 130 00:05:56,640 --> 00:05:59,730 Bet jūs pamatysite, kaip jūs gaunate savo viktorinos atgal iš TFS, kad mes padarėme 131 00:05:59,730 --> 00:06:04,330 priimti kitus diskusijų apie juos skirtingas naudoja atminties, taip pat. 132 00:06:04,330 --> 00:06:08,600 Bet sukrauti ir krūva būtų buvę lengva atsakyti, eiti su. 133 00:06:08,600 --> 00:06:11,150 Turite klausimų? 134 00:06:11,150 --> 00:06:12,400 Aš duodu jums Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: Taigi problema 4. 137 00:06:20,210 --> 00:06:21,985 Tai vienas, kur turėjo užpildyti į baitų skaičių iš visų 138 00:06:21,985 --> 00:06:23,460 šių skirtingų tipų. 139 00:06:23,460 --> 00:06:24,830 Taigi pirmas dalykas, kurį mes matome. 140 00:06:24,830 --> 00:06:27,930 Tarkime, 32 bitų architektūra, kaip šio CS50 prietaisu. 141 00:06:27,930 --> 00:06:33,530 Taigi vienas iš pagrindinių dalykų apie 32-bitų architektūros, kad pasakoja, 142 00:06:33,530 --> 00:06:37,490 tiksliai, kaip didelis žymeklį vyksta būti į architektūrą. 143 00:06:37,490 --> 00:06:43,020 >> Taigi iš karto, mes žinome, kad bet rodyklė tipas 32-bitų arba 4 baitų. 144 00:06:43,020 --> 00:06:46,010 Taigi žiūri į šią lentelę, mazgas * yra žymeklis tipas. 145 00:06:46,010 --> 00:06:47,250 Tai bus 4 baitų. 146 00:06:47,250 --> 00:06:51,640 Struct mazgas *, tai tiesiog identiškas mazgas žvaigždė. 147 00:06:51,640 --> 00:06:53,590 Ir todėl, kad tai bus 4 baitų. 148 00:06:53,590 --> 00:06:58,270 String, todėl ji nėra atrodyti žymeklis dar, bet Typedef, 149 00:06:58,270 --> 00:07:01,590 eilutė yra tiesiog char *, kuris yra žymeklis tipas. 150 00:07:01,590 --> 00:07:03,550 Taigi, tai bus 4 baitų. 151 00:07:03,550 --> 00:07:06,150 >> Taigi šie trys yra visi 4 baitai. 152 00:07:06,150 --> 00:07:09,350 Dabar mazgas ir studentas yra šiek tiek sudėtingesnis. 153 00:07:09,350 --> 00:07:15,160 Taigi žiūri mazgas ir mokinio, matome mazgas kaip sveikasis skaičius ir rodyklė. 154 00:07:15,160 --> 00:07:18,050 Ir studentas yra dvi rodyklės viduje ji. 155 00:07:18,050 --> 00:07:23,340 Taigi, bent jau mūsų atveju čia būdas kad mes galų gale skaičiuojant dydį 156 00:07:23,340 --> 00:07:27,020 tai struct tiesiog įtraukti viską tai viduje struct. 157 00:07:27,020 --> 00:07:30,690 >> Taigi, mazgas, mes turime sveikąjį skaičių, kuris yra 4 baitai. 158 00:07:30,690 --> 00:07:32,830 Mes turime žymeklį, kuris yra 4 baitai. 159 00:07:32,830 --> 00:07:35,820 Ir taip vienas mazgas vyksta imtis 8 baitų. 160 00:07:35,820 --> 00:07:39,490 Ir panašiai studentas, mes turime žymeklis, kad yra 4 baitai ir kita 161 00:07:39,490 --> 00:07:40,770 žymeklis, kad yra 4 baitai. 162 00:07:40,770 --> 00:07:43,180 Taigi, kad ketina baigti gale yra 8 baitai. 163 00:07:43,180 --> 00:07:45,480 Taigi mazgas ir studentas yra 8 baitai. 164 00:07:45,480 --> 00:07:48,950 Ir šitie trys yra visi 4 baitai. 165 00:07:48,950 --> 00:07:50,240 Klausimai apie tai? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Taip. 168 00:07:54,990 --> 00:07:58,413 >> Auditorija: Ar tai buvo 64 bitų architektūra, norėčiau, kad 169 00:07:58,413 --> 00:07:59,880 dvigubai juos visus? 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: Tai gi ne dvigubai juos visus. 171 00:08:01,790 --> 00:08:05,830 Taigi 64 bitų architektūra, tai, vėlgi, pokyčius, pagrindinis dalykas, kad 172 00:08:05,830 --> 00:08:08,910 žymeklis yra dabar 64 bitai. 173 00:08:08,910 --> 00:08:09,290 Taip. 174 00:08:09,290 --> 00:08:10,930 Taigi žymeklis yra 8 baitai. 175 00:08:10,930 --> 00:08:15,420 Taigi tai, kad buvo 4 baitai ketina būti 8 baitai. 176 00:08:15,420 --> 00:08:18,617 Studentas, kuris buvo dvi rodyklės, Na, dabar tai vyksta 177 00:08:18,617 --> 00:08:19,800 būti 8 baitų 8 baitų. 178 00:08:19,800 --> 00:08:21,980 Tai ketiname padaryti 16 baitų. 179 00:08:21,980 --> 00:08:25,710 >> Bet mazgas yra dar 4 baitai. 180 00:08:25,710 --> 00:08:27,800 Taigi, šis žymeklis vyksta iki 8 baitų. 181 00:08:27,800 --> 00:08:28,930 Tai 4 baitai. 182 00:08:28,930 --> 00:08:30,870 Taigi mazgas yra tik ketina būti 12 baitų. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Visi kiti klausimai, kad vienas? 185 00:08:39,280 --> 00:08:44,500 Taigi kitą vieną, tai yra HTTP būsenos kodai. 186 00:08:44,500 --> 00:08:48,000 Ir jums teko apibūdinti aplinkybes pagal kurią jie gali 187 00:08:48,000 --> 00:08:49,810 būti jums grąžintas. 188 00:08:49,810 --> 00:08:56,730 viena problema, kad aš girdėjau kai kurie studentai yra tai, kad jie bandė padaryti 189 00:08:56,730 --> 00:08:58,950 klaidų būti kliento pabaigos. 190 00:08:58,950 --> 00:09:02,320 Taigi, kai mes stengiamės, kad prašymą į serverį, kažkas 191 00:09:02,320 --> 00:09:03,820 negerai mūsų pabaigos. 192 00:09:03,820 --> 00:09:07,660 Bet apskritai, šie kodai: grąžinamas į serverį. 193 00:09:07,660 --> 00:09:11,720 Taigi, mes norime išsiaiškinti, kas vyksta neteisinga arba tiesiai ant serverio, 194 00:09:11,720 --> 00:09:14,280 sukelia šie dalykai turi būti grąžintas. 195 00:09:14,280 --> 00:09:18,670 Tad kodėl galėtų prisiimti serveris grąžina statusas kodas 200? 196 00:09:18,670 --> 00:09:19,920 Bet mintis? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Taip. 199 00:09:23,730 --> 00:09:27,850 Taigi, kažkas apie sėkmingai prašymas išgyveno. 200 00:09:27,850 --> 00:09:30,260 Ir jie galės grįžti ką jūs paprašė. 201 00:09:30,260 --> 00:09:32,240 Taigi, viskas buvo gerai. 202 00:09:32,240 --> 00:09:35,662 Ką apie 302 rasti? 203 00:09:35,662 --> 00:09:36,618 Taip. 204 00:09:36,618 --> 00:09:39,008 >> PUBLIKA: serveris ieškote ką jūs paprašė. 205 00:09:39,008 --> 00:09:40,442 Tačiau ji negalėjo rasti. 206 00:09:40,442 --> 00:09:42,850 Taigi, čia yra klaida. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: Taigi serveris ieškote, ką norėjo. 208 00:09:47,720 --> 00:09:51,682 Taigi tiesiog ieškote čia 302 rašo, ji galėjo rasti. 209 00:09:51,682 --> 00:09:53,035 >> PUBLIKA: atsiprašau. 210 00:09:53,035 --> 00:09:54,388 Surasta reiškia, kad jie padarė jį rasti. 211 00:09:54,388 --> 00:09:55,638 Atsiprašau. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: Taigi 302 rasta. 214 00:10:00,160 --> 00:10:02,350 Serveris gali rasti ką norėjo. 215 00:10:02,350 --> 00:10:04,640 >> Auditorija: Bet tai ne rodyti jį? 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: skirtumas tarp tai 302 ir 200, kad ji 217 00:10:08,180 --> 00:10:09,280 žino, ką norite. 218 00:10:09,280 --> 00:10:12,000 Bet tai nėra tiksliai ten, kur jūs norėjote paklausti. 219 00:10:12,000 --> 00:10:14,580 Taigi 302 yra tipiškas peradresavimas. 220 00:10:14,580 --> 00:10:16,510 Taigi, Jūsų prašomas puslapis. 221 00:10:16,510 --> 00:10:19,590 Ji žino, oh, aš noriu grįžti jums tai. 222 00:10:19,590 --> 00:10:21,070 Bet tai kitu URL. 223 00:10:21,070 --> 00:10:23,534 Taigi, ei, jūs iš tikrųjų norite tai. 224 00:10:23,534 --> 00:10:26,950 >> David J. Malan: Tai gabalas, kuris sakė, kad mes davė jums, vaikinai peradresavimą 225 00:10:26,950 --> 00:10:30,830 funkcija, kuri naudojama antraštės funkcija kad, savo ruožtu, atspausdinti vietą, 226 00:10:30,830 --> 00:10:34,110 storosios žarnos, ir tada URL, kuris norite atmesti vartotoją. 227 00:10:34,110 --> 00:10:37,480 Net jei nematė 302 aiškiai ten, kad tai, kas PHP 228 00:10:37,480 --> 00:10:41,550 būtų stebuklingai įterpti antraštę sakydamas ką Robas ten sako - 229 00:10:41,550 --> 00:10:41,930 nerasta. 230 00:10:41,930 --> 00:10:43,180 Bet eiti čia vietoj. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB BOWDEN: Gerai. 233 00:10:46,160 --> 00:10:47,630 Taigi, ką apie 403 draudžiama? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> PUBLIKA: Aš manau, kad tai, kad serveris iš esmės sakydamas, kad klientas 236 00:10:57,120 --> 00:10:59,970 negali patekti į pagrindinį puslapį. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: Taip taip. 238 00:11:03,260 --> 00:11:07,670 Na, tipiškas atsakymas buvome tikisi, yra kažkas panašaus, failai 239 00:11:07,670 --> 00:11:08,920 nėra tinkamai chmodded. 240 00:11:08,920 --> 00:11:11,590 Tai turbūt, kokiomis aplinkybėmis matėte juos. 241 00:11:11,590 --> 00:11:18,920 Bet yra priežastis, kad klientas gali būti kaltas čia. 242 00:11:18,920 --> 00:11:20,440 Yra iš tikrųjų kitas statusas kodas - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Taigi tai yra labai panašūs. 245 00:11:22,820 --> 00:11:24,590 >> 401 yra neteisėtas. 246 00:11:24,590 --> 00:11:26,130 Ir 403 yra uždraustas. 247 00:11:26,130 --> 00:11:31,890 Ir taip be leidimo galite tik gauti, jei esate neprisijungęs 248 00:11:31,890 --> 00:11:34,520 Bet prisijungti gali reikšti kad jums yra leidžiama. 249 00:11:34,520 --> 00:11:37,930 Bet jei jūs jau esate prisijungęs ir jūs dar neturite leidimo, tada 250 00:11:37,930 --> 00:11:40,140 Jūs taip pat galite gauti draudžiama. 251 00:11:40,140 --> 00:11:45,320 Taigi, jei esate prisijungęs ir neturi leidimo, draudžiama, taip pat 252 00:11:45,320 --> 00:11:47,164 kažkas, ką galite gauti. 253 00:11:47,164 --> 00:11:48,900 >> David J. Malan: Ir Mechanizmą kurios šios problemos yra paprastai 254 00:11:48,900 --> 00:11:53,100 išspręsta serveryje yra per ką komanda? 255 00:11:53,100 --> 00:11:57,700 Chmod, jei ji, Iš tiesų, leidimai išduoti ant failo ar katalogo. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: Tada 404 nerastas. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Taip. 259 00:12:03,470 --> 00:12:10,150 Taigi, skirtingai nuo 302, kai ji buvo ne visai jei esate klausia, bet jis žino, ką 260 00:12:10,150 --> 00:12:12,710 norite, tai, jis tiesiog turi ne idėja, ką norite. 261 00:12:12,710 --> 00:12:15,648 O jūs nesate prašydama kažkas galioja. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Aš arbatinukas ir tada 500 vidinė serverio. 264 00:12:22,310 --> 00:12:24,870 Tad kodėl gali jums tai? 265 00:12:24,870 --> 00:12:26,120 >> Taigi segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Aš iš tikrųjų nežinau rūšiavimas standartas tai. 268 00:12:30,640 --> 00:12:34,850 Bet jei jūsų PHP kodą turėjo kažką negerai tai, teoriškai, jis galėtų 269 00:12:34,850 --> 00:12:39,650 faktiškai segfault, tokiu atveju šis 500 vidinė serverio klaida, kažkas 270 00:12:39,650 --> 00:12:41,400 yra negerai su jūsų serverio failą konfigūracija. 271 00:12:41,400 --> 00:12:44,320 Arba ten sintaksės klaida Savo PHP kodą. 272 00:12:44,320 --> 00:12:46,095 Arba kažkas blogai vyksta. 273 00:12:46,095 --> 00:12:48,320 >> David J. Malan: Mes tikrai matė segfault tarp kelių žmonių atsakymus. 274 00:12:48,320 --> 00:12:49,490 Ir techniškai, tai gali įvykti. 275 00:12:49,490 --> 00:12:53,820 Bet tai būtų PHP programa parašyta kitų žmonių, iš tikrųjų 276 00:12:53,820 --> 00:12:57,790 segfaulted, o tik tada, kai tie žmonės įsukus ir parašė Buggy kodą 277 00:12:57,790 --> 00:13:00,680 jų vertėjas būtų PHP pati segfault. 278 00:13:00,680 --> 00:13:06,460 Taigi, nors 500 yra tarsi segfault dvasia, tai beveik visada 279 00:13:06,460 --> 00:13:10,490 rezultatas iš konfigūracijos failo klausimu su savo žiniatinklio serveryje arba, kaip sakė Rob, 280 00:13:10,490 --> 00:13:13,200 syntax error, kaip tu neuždarė citata. 281 00:13:13,200 --> 00:13:16,180 Ar jums neteko kabliataškį kažkur. 282 00:13:16,180 --> 00:13:23,677 >> PUBLIKA: Taigi už Shuttle pset aš manau, kai aš jį, kai aš spustelėjote 283 00:13:23,677 --> 00:13:26,300 naršyklė, bet nieko atėjo, ką jie vadino baltas puslapis. 284 00:13:26,300 --> 00:13:28,056 Bet tai buvo, nes kodą. 285 00:13:28,056 --> 00:13:29,440 Manau, kad buvo Javaskriptą, tiesa? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Taip. 287 00:13:29,770 --> 00:13:31,180 >> Auditorija: Ar ši klaida dar sugalvoti? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Taigi jūs nebūtų Dotarłeś tai klaida, nes viskas 289 00:13:34,290 --> 00:13:36,930 iš interneto serverio perspektyvos buvo visiškai gerai. 290 00:13:36,930 --> 00:13:39,090 Bet jūs paprašė index.html. 291 00:13:39,090 --> 00:13:42,000 Jūs prašėte shuttle.js ir service.js. 292 00:13:42,000 --> 00:13:44,580 Ir ji galėjo sėkmingai grįžti jums visiems iš tų dalykų - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 Gerai. 295 00:13:45,680 --> 00:13:49,330 Tai tik tada, kai Jūsų naršyklė bandė interpretuoti JavaScript kodą, kuris 296 00:13:49,330 --> 00:13:51,370 tai kaip, palauk, tai nėra galioja klaida JavaScript. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Visi kiti klausimai? 299 00:13:58,210 --> 00:14:00,750 Gerai. 300 00:14:00,750 --> 00:14:04,120 >> David J. Malan: Taigi kitą iki buvo numeris 11. 301 00:14:04,120 --> 00:14:07,610 Ir 11 buvo baisiausias už daug žmonių. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Taigi, svarbiausia atkreipti dėmesį į čia buvo ta, kad tai iš tiesų buvo apie 304 00:14:18,570 --> 00:14:19,840 dvigubai susijęs sąrašas. 305 00:14:19,840 --> 00:14:23,160 Bet tai buvo ne tas pats kaip pernai dvigubai susijęs sąrašas problema, 306 00:14:23,160 --> 00:14:27,170 kuris nesuteikė jums įspėjimą, kad sąrašas galėtų iš tikrųjų būti nerūšiuotos. 307 00:14:27,170 --> 00:14:29,640 >> Taigi tai, kad sąrašas buvo nerūšiuotų ir faktas, kad šis žodis buvo 308 00:14:29,640 --> 00:14:32,930 Pabrauktas ten buvo norima perteikti kad iš tikrųjų tai yra supaprastinimas 309 00:14:32,930 --> 00:14:35,430 kas kitaip būtų buvę sunkiau problema 310 00:14:35,430 --> 00:14:36,600 ir ilgiau vienas. 311 00:14:36,600 --> 00:14:40,760 Taigi dažnai pasitaikanti klaida čia buvo įmušęs pernykštis sprendimas jūsų vieno 312 00:14:40,760 --> 00:14:45,580 Pager ir tada tiesiog aklai kopijuoti, kad pasižymėjo kaip atsakymą, kuris yra teisus 313 00:14:45,580 --> 00:14:48,520 atsakyti į kitą klausimą panaši dvasia. 314 00:14:48,520 --> 00:14:51,340 Bet čia subtilybes buvo taip. 315 00:14:51,340 --> 00:14:55,200 >> Taigi vienas, mes paskelbė mazgas ir apibrėžta įprastu būdu čia. 316 00:14:55,200 --> 00:14:59,230 Tada mes apibrėžta sąrašas būti pasaulio rodyklė inicializuoti null. 317 00:14:59,230 --> 00:15:02,150 Tada, matyt, yra dvi funkcijos mes turime prototipų čia įterpti 318 00:15:02,150 --> 00:15:03,240 ir nuimkite. 319 00:15:03,240 --> 00:15:06,600 Ir tada mes turime kai mėginio kodą čia daro daug intarpais krūva. 320 00:15:06,600 --> 00:15:09,930 Ir tada mes paprašyti užpildyti įgyvendinimas įterpti žemiau tokiu 321 00:15:09,930 --> 00:15:14,380 taip, kad jis įterpia n į sąrašą nuolat laiko, taip pat pabrėžė, 322 00:15:14,380 --> 00:15:15,730 net jau dabar. 323 00:15:15,730 --> 00:15:20,600 >> Taigi, kad galėtų įterpti grožis nuolat laiko tai, kad ji reiškia, 324 00:15:20,600 --> 00:15:23,060 kad jūs turite įrašyti naujas mazgas, kur? 325 00:15:23,060 --> 00:15:23,690 Į priekį. 326 00:15:23,690 --> 00:15:27,760 Taigi jis pašalina, laimei, bent jau vienas iš atvejų, kad anksčiau reikėjo 327 00:15:27,760 --> 00:15:30,520 dar daugiau eilučių kodo, kaip ji pernai ir net klasėje, kai mes 328 00:15:30,520 --> 00:15:34,040 kalbėjo per šios rūšies dalykas su žmonėmis ir kai 329 00:15:34,040 --> 00:15:35,250 žodinis pseudo kodas. 330 00:15:35,250 --> 00:15:39,190 Taigi tirpale čia, galime praleisti į, kad tik turėti regimąjį On 331 00:15:39,190 --> 00:15:40,480 ekranas. 332 00:15:40,480 --> 00:15:42,230 >> Atkreipkite dėmesį, kad mes darome taip. 333 00:15:42,230 --> 00:15:45,140 O taip pat pastebėti kitų paprastinimo buvo ta, kad net jei tai 334 00:15:45,140 --> 00:15:48,280 jau dabar, todėl tai reiškia, net jei skaičius jau yra, galite 335 00:15:48,280 --> 00:15:50,280 tiesiog aklai įterpti kitą kopija. 336 00:15:50,280 --> 00:15:52,560 Ir tai taip pat turėjo būti supaprastinimas, kad galėtumėte 337 00:15:52,560 --> 00:15:54,940 dėmesio, tikrai, kai daugiau intelektualiai įdomiausia dalis ir 338 00:15:54,940 --> 00:15:58,090 ne tik kai papildomas klaidų tikrinimas atsižvelgiant į ribotą laiką. 339 00:15:58,090 --> 00:16:02,880 >> Taigi šio mėginio tirpalo, mes skirti Kairėje rankoje rodyklė 340 00:16:02,880 --> 00:16:04,510 pusėje čia mazgas. 341 00:16:04,510 --> 00:16:07,190 Dabar suprantame, kad žymiklį, kaip Robas sako, yra tik 32 bitų. 342 00:16:07,190 --> 00:16:09,060 Ir jis nėra iš tikrųjų yra kol jus adresas 343 00:16:09,060 --> 00:16:09,970 priskirti jai adresą. 344 00:16:09,970 --> 00:16:13,220 Ir mes tai darome ant dešinėje, pusė per malloc. 345 00:16:13,220 --> 00:16:16,550 Kaip gera piliečio, mes patikrinti, kad malloc nėra, iš tiesų, null, kad 346 00:16:16,550 --> 00:16:18,690 mes ne atsitiktinai sukurti segfault čia. 347 00:16:18,690 --> 00:16:22,840 Ir bet kada naudoti malloc gyvenime, jums turi būti patikrinti dėl null, kitaip 348 00:16:22,840 --> 00:16:24,090 turite subtilų klaidą. 349 00:16:24,090 --> 00:16:28,460 >> Tada mes inicijuoti, kad neapibrėžta pagal priskiriant N ir Ankstesnių ir ateinančių. 350 00:16:28,460 --> 00:16:32,450 Ir šiuo atveju čia, aš inicializuoti prieš nulis, nes ši nauja 351 00:16:32,450 --> 00:16:34,780 mazgas bus nauja pradžioje mano sąraše. 352 00:16:34,780 --> 00:16:37,050 Taigi, ten bus nieko prieš jį. 353 00:16:37,050 --> 00:16:42,010 Ir aš noriu iš esmės papildyti esamą sąrašą į naują mazgas pagal 354 00:16:42,010 --> 00:16:44,700 nustatyti kitą lygi sąrašas pati. 355 00:16:44,700 --> 00:16:47,120 Bet aš ne padaryti tik dar. 356 00:16:47,120 --> 00:16:51,780 Taigi, jei pati sąrašas jau egzistavo, ir ten buvo bent vienas mazgas 357 00:16:51,780 --> 00:16:57,070 jau vietoje, jei tai sąrašas čia ir aš įterpti naują mazgas čia aš 358 00:16:57,070 --> 00:17:01,840 reikia įsitikinti, kad mano buvęs mazgas nurodo atgal į mano naujas mazgas, 359 00:17:01,840 --> 00:17:04,260 nes tai, vėlgi, dvigubai susijęs sąrašas. 360 00:17:04,260 --> 00:17:05,460 >> Taigi mes normalumas patikrinti. 361 00:17:05,460 --> 00:17:10,109 Jei sąrašas nėra lygus nuliui, jei ten jau vienas ar daugiau mazgų ten, tada 362 00:17:10,109 --> 00:17:12,470 pridurti, kad atgal nuorodą taip sakant. 363 00:17:12,470 --> 00:17:15,420 Ir tada paskutinis dalykas, mes turime padaryti iš tikrųjų atnaujinti pasaulio 364 00:17:15,420 --> 00:17:20,329 kintamasis sąrašas pati atkreipti prie šios naujos mazgas. 365 00:17:20,329 --> 00:17:21,790 Taip. 366 00:17:21,790 --> 00:17:26,579 >> PUBLIKA: Be rodykle rodykle [Nesigirdi] lygu nuliui, tai daro 367 00:17:26,579 --> 00:17:30,420 kovoti su sąrašu, nes sąrašas yra niekinis? 368 00:17:30,420 --> 00:17:30,596 >> David J. Malan: Nope. 369 00:17:30,596 --> 00:17:34,500 Tai tiesiog man buvo aktyviai atsargūs, nes jei tai mano 370 00:17:34,500 --> 00:17:38,730 Pradinis sąrašas su gal kai daugiau mazgų čia ir aš įterpti savo 371 00:17:38,730 --> 00:17:42,380 naujas mazgas čia, ten vyksta kad nieko čia. 372 00:17:42,380 --> 00:17:44,720 Ir aš noriu užfiksuoti, kad idėja nustatant prieš 373 00:17:44,720 --> 00:17:47,740 niekinis dėl naujos mazgas. 374 00:17:47,740 --> 00:17:51,410 Ir turbūt, jei mano kodas teisingas ir nėra jokio kito būdo įterpti 375 00:17:51,410 --> 00:17:54,970 išskyrus šią funkciją mazgai, matyt, net jei sąrašas jau 376 00:17:54,970 --> 00:18:00,090 vienas ar daugiau mazgų joje, matyt, sąrašas, pirmasis mazgas, būtų 377 00:18:00,090 --> 00:18:02,750 ankstesnis rodyklė pati null. 378 00:18:02,750 --> 00:18:03,550 >> PUBLIKA: Ir tik tolesnių. 379 00:18:03,550 --> 00:18:08,139 Todėl jūs įdėti žymeklį šalia lygu sąrašas darote žymiklį 380 00:18:08,139 --> 00:18:13,579 prieš sąrašas, kad tai nukreipta į kitą, manau, - 381 00:18:13,579 --> 00:18:14,980 Aš NeraŠykiTe - 382 00:18:14,980 --> 00:18:15,450 tiesiog išvardyti? 383 00:18:15,450 --> 00:18:16,400 >> David J. Malan: Būtent. 384 00:18:16,400 --> 00:18:19,400 Ir todėl galime realiai apsvarstyti dvi bylas čia tikrai, nors 385 00:18:19,400 --> 00:18:22,070 kad mes juos svarstyti nėra visai kaip kodą. 386 00:18:22,070 --> 00:18:26,250 Bet aukšto lygio, jei tai yra sąrašą, ir tai yra 32 bitų 387 00:18:26,250 --> 00:18:29,560 žymeklis, paprasčiausias scenarijus kad tai yra niekinis pagal nutylėjimą. 388 00:18:29,560 --> 00:18:33,010 Ir manau, kad aš noriu įterpti numeris 50 buvo pirmasis skaičius. 389 00:18:33,010 --> 00:18:37,640 Taigi, aš ruošiuosi eiti į priekį ir paskirstyti mazgas, kuris ketina būti 390 00:18:37,640 --> 00:18:38,770 trys laukai - 391 00:18:38,770 --> 00:18:42,070 n, praėjusią, ir kitą. 392 00:18:42,070 --> 00:18:44,580 >> Aš ruošiuosi įdėti numeris 50 čia, nes tai bus n. 393 00:18:44,580 --> 00:18:46,130 Tai bus kitas. 394 00:18:46,130 --> 00:18:48,530 Ir tai bus ankstesnė. 395 00:18:48,530 --> 00:18:50,910 Ir taip, tai ką man daryti tokiu atveju? 396 00:18:50,910 --> 00:18:53,900 Na, aš tiesiog padaryti 1 eilutės čia. 397 00:18:53,900 --> 00:18:55,400 Rodyklė n gauna n. 398 00:18:55,400 --> 00:18:57,740 Aš tada suprantama, praėjusią turėtų gauti null. 399 00:18:57,740 --> 00:18:59,470 Taigi tai bus niekinis. 400 00:18:59,470 --> 00:19:01,365 Tada aš ruošiuosi pasakyti kitą ketina gauti sąrašą. 401 00:19:01,365 --> 00:19:05,150 >> Ir tai tik pavyks gerai. 402 00:19:05,150 --> 00:19:06,500 Tai yra niekinis. 403 00:19:06,500 --> 00:19:10,620 Ir todėl aš sakau, naujas mazgas šalia sritis turėtų gauti nepriklausomai nuo to. 404 00:19:10,620 --> 00:19:12,570 Taigi, kad iškelia kitą null ten. 405 00:19:12,570 --> 00:19:14,510 Ir tada paskutinis dalykas Aš tai patikrinti čia. 406 00:19:14,510 --> 00:19:17,870 Jei sąrašas nėra lygus nulis, bet ji lygus nulis, todėl mes praleisti, kad 407 00:19:17,870 --> 00:19:18,470 apskritai. 408 00:19:18,470 --> 00:19:23,520 Ir taip viskas, ką aš padaryti kitą sąrašas gauna žymeklis, kuris pavaizduotomis piktogramo sukelia 409 00:19:23,520 --> 00:19:25,570 kaip kad pav. 410 00:19:25,570 --> 00:19:26,620 Štai vienas scenarijus. 411 00:19:26,620 --> 00:19:30,490 >> Ir vienas, kad jūs klausiate apie specialiai yra Tokia situacija, 412 00:19:30,490 --> 00:19:33,190 kur mes jau turime vieną mazgas sąrašą. 413 00:19:33,190 --> 00:19:36,240 O jei aš einu atgal į originalą problema apsauga, šalia mūsų bus 414 00:19:36,240 --> 00:19:39,320 įdėti tarkim yra 34, tik diskusijų sake. 415 00:19:39,320 --> 00:19:46,210 Taigi, aš ruošiuosi tik patogiai parengti, kad per čia. 416 00:19:46,210 --> 00:19:47,540 Aš tiesiog malloced. 417 00:19:47,540 --> 00:19:49,310 Tarkime, aš tikrinti null. 418 00:19:49,310 --> 00:19:51,870 >> Dabar aš ruošiuosi inicijuoti n turi būti 34. 419 00:19:51,870 --> 00:19:53,040 Ir tai bus n. 420 00:19:53,040 --> 00:19:54,670 Tai bus kitas. 421 00:19:54,670 --> 00:19:57,100 Ir tai bus ankstesnė. 422 00:19:57,100 --> 00:19:59,370 Leiskite įsitikinkite, aš ne gauti tai atgal. 423 00:19:59,370 --> 00:20:01,110 Ankstesnis ateina pirmas apibrėžime. 424 00:20:01,110 --> 00:20:03,070 Leiskite man išspręsti šią problemą. 425 00:20:03,070 --> 00:20:04,410 Tai praėjusią. 426 00:20:04,410 --> 00:20:05,780 Tai kitą. 427 00:20:05,780 --> 00:20:08,620 Net jei tai yra tapatūs, tegul saugo ją atitinka. 428 00:20:08,620 --> 00:20:09,450 >> Ankstesnis. 429 00:20:09,450 --> 00:20:11,030 Tai kitą. 430 00:20:11,030 --> 00:20:16,310 Taigi aš tiesiog malloced mano dėmesį, patikrinti for null, priskirti 34 į mazgą. 431 00:20:16,310 --> 00:20:17,570 Ankstesnis gauna null. 432 00:20:17,570 --> 00:20:19,480 Taigi, kad suteikia man, kad. 433 00:20:19,480 --> 00:20:21,010 Kitas gauna sąrašas. 434 00:20:21,010 --> 00:20:22,370 Taigi sąrašas yra toks. 435 00:20:22,370 --> 00:20:26,520 Taigi, tai yra tas pats dabar kaip piešimo tai arrow, kad jie atkreipia dėmesį į vieną 436 00:20:26,520 --> 00:20:27,940 per tą patį. 437 00:20:27,940 --> 00:20:30,400 Ir tada aš patikrinti, jei sąrašas nėra lygus nulis. 438 00:20:30,400 --> 00:20:31,740 Ir tai ne šį kartą. 439 00:20:31,740 --> 00:20:35,580 Tada aš ruošiuosi daryti sąrašą ankstesnis gauna rodyklę. 440 00:20:35,580 --> 00:20:39,700 >> Taigi sąrašą praėjusią gauna PTR. 441 00:20:39,700 --> 00:20:44,300 Taigi tai turi išleidžia poveikį grafinė rodyklė čia. 442 00:20:44,300 --> 00:20:46,930 Ir tai truputį banguotas, linijos. 443 00:20:46,930 --> 00:20:50,780 Ir tada, pagaliau, aš atnaujinti sąrašą, kad rodytų į rodyklę. 444 00:20:50,780 --> 00:20:55,560 Taigi dabar tai rodo šio vaikino. 445 00:20:55,560 --> 00:20:57,170 Ir dabar, darykime greitai normalumas patikrinti. 446 00:20:57,170 --> 00:20:59,470 >> Štai sąrašas, kuris yra pasaulinį kintamąjį. 447 00:20:59,470 --> 00:21:02,850 Pirmasis mazgas, iš tiesų, 34, nes Aš taip, kad rodyklę. 448 00:21:02,850 --> 00:21:05,210 Ir tai teisinga, nes aš noriu įdėti į sąrašo pradžią 449 00:21:05,210 --> 00:21:06,070 visi nauji mazgai. 450 00:21:06,070 --> 00:21:08,860 Jo tolimesnis laukas veda mane prie šio vaikino. 451 00:21:08,860 --> 00:21:10,710 Jei aš nesustoti, I hit kitą yra niekinis. 452 00:21:10,710 --> 00:21:11,760 Taigi, čia yra ne daugiau, sąrašas. 453 00:21:11,760 --> 00:21:14,460 Jei aš nukentėjo praėjusią gaunu atgal, kai aš tikiuosi. 454 00:21:14,460 --> 00:21:16,435 >> Taigi, vis dar yra keletas patarimų, akivaizdu, manipuliuoti. 455 00:21:16,435 --> 00:21:19,870 Tačiau faktas, kad buvo pasakyta daryti tai nuolat laiko tai jums tik 456 00:21:19,870 --> 00:21:22,910 turi baigtinį skaičių dalykų jums leidžiama daryti. 457 00:21:22,910 --> 00:21:24,290 Ir kas tai yra skaičius? 458 00:21:24,290 --> 00:21:25,185 Tai gali būti vienas žingsnis. 459 00:21:25,185 --> 00:21:25,700 Tai gali būti du. 460 00:21:25,700 --> 00:21:26,820 Tai gali būti 1000 žingsnių. 461 00:21:26,820 --> 00:21:30,500 Bet tai baigtinė, o tai reiškia, jūs negalite Ar kas nors iš ąselę natūra vyksta 462 00:21:30,500 --> 00:21:32,010 čia ne rekursija, jokių kilpų. 463 00:21:32,010 --> 00:21:37,390 Tai tiesiog turiu būti sunkiai koduojamų linijos kodo, kaip mes turime šioje atrankoje. 464 00:21:37,390 --> 00:21:42,330 >> Taigi Kita problema 12 teiraudavosi baigti šalinti programas įgyvendinti 465 00:21:42,330 --> 00:21:46,740 toliau tokiu būdu, kad jis pašalina n iš linijinio laiko sąrašą. 466 00:21:46,740 --> 00:21:48,740 Taigi jūs turite šiek tiek daugiau krutėti kambarys dabar. 467 00:21:48,740 --> 00:21:52,380 Jūs galite manyti, kad n, jei yra sąraše, bus pateikti 468 00:21:52,380 --> 00:21:53,340 ne daugiau kaip vieną kartą. 469 00:21:53,340 --> 00:21:56,770 Ir tai taip pat reiškia, kad viktorina pagrįstas supaprastinti prielaida, todėl 470 00:21:56,770 --> 00:21:59,780 kad jei jums rasti skaičių 50 kažkur sąraše, jūs ne taip 471 00:21:59,780 --> 00:22:02,890 jaudintis toliau pakartoti, ieško visų įmanomų 472 00:22:02,890 --> 00:22:06,990 kopija 50, o tiesiog perduoti į tam tikrą ribotą laiką smulkmenomis. 473 00:22:06,990 --> 00:22:10,460 >> Taigi su Šalinti tai vienas tikrai buvo sunkiau ir daugiau 474 00:22:10,460 --> 00:22:11,640 kodas rašyti. 475 00:22:11,640 --> 00:22:14,990 Tačiau iš pirmo žvilgsnio, tiesą sakant, ji gali atrodo didele ir kaip kažką 476 00:22:14,990 --> 00:22:17,060 nėra jokio būdo galite turėti sugalvoti ant viktorina. 477 00:22:17,060 --> 00:22:22,450 Bet jei mes orientuojamės į individualius veiksmus, tikiuosi, jis bus staiga 478 00:22:22,450 --> 00:22:26,060 streikuoti, kad su kiekviena iš šių veiksmai daro akivaizdžią prasmę 479 00:22:26,060 --> 00:22:27,080 retrospektyviai. 480 00:22:27,080 --> 00:22:28,200 Taigi galime pažvelgti. 481 00:22:28,200 --> 00:22:32,570 >> Taigi, pirmiausia, mes inicijuoti rodyklė būti list pati. 482 00:22:32,570 --> 00:22:36,040 Nes aš noriu linijinio laiko, kad priemonės Aš ruošiuosi turėti tam tikrą ciklą. 483 00:22:36,040 --> 00:22:39,730 Ir paplitęs būdas pakartoti per mazgai sąrašo struktūros ar bet kokios rūšies 484 00:22:39,730 --> 00:22:43,860 struktūros iteracijų yra imtis rodyklę į duomenų priekio 485 00:22:43,860 --> 00:22:46,990 struktūra ir tada tiesiog pradėti atnaujinti tai ir vaikščioti savo kelią 486 00:22:46,990 --> 00:22:48,650 per duomenų struktūros. 487 00:22:48,650 --> 00:22:50,040 Taigi, aš ruošiuosi daryti būtent tai. 488 00:22:50,040 --> 00:22:54,260 >> Nors žymeklis, mano laikinas kintamasis, nėra lygus nulis, tegul 489 00:22:54,260 --> 00:22:55,660 eiti į priekį ir patikrinti. 490 00:22:55,660 --> 00:22:56,910 Ar man pasisekė? 491 00:22:56,910 --> 00:23:01,740 Ar n laukas mazgas Aš šiuo metu žiūri lygios 492 00:23:01,740 --> 00:23:03,380 skaičius aš ieškau? 493 00:23:03,380 --> 00:23:05,410 Ir jei taip, darykime kažką. 494 00:23:05,410 --> 00:23:10,020 Dabar pastebėti tai, jei sąlyga supa visą 495 00:23:10,020 --> 00:23:11,520 Šias eilutes kodo. 496 00:23:11,520 --> 00:23:14,610 Tai vienintelis dalykas, man rūpi - rasti atitinkamą skaičių. 497 00:23:14,610 --> 00:23:18,010 Taigi nėra kitur, kuris supaprastina viskas konceptualiai truputį. 498 00:23:18,010 --> 00:23:22,040 >> Bet dabar supratau, ir jums gali tekti tik supratau, tai po mąstymas 499 00:23:22,040 --> 00:23:24,720 tai per tiek, ten tikrųjų yra du atvejai čia. 500 00:23:24,720 --> 00:23:28,060 Viena yra, kai mazgas yra pradžioje sąrašo, kuris yra 501 00:23:28,060 --> 00:23:31,040 šiek tiek erzina, nes tai ypatingas atvejis, nes jūs turite elgtis 502 00:23:31,040 --> 00:23:33,340 su šio dalyko, kuris yra tik anomalija. 503 00:23:33,340 --> 00:23:35,720 Visur kitur sąraše tai tas pats. 504 00:23:35,720 --> 00:23:38,050 Yra praėjusią mazgas ir kitą mazgas, praėjusią mazgas, šalia mazgas. 505 00:23:38,050 --> 00:23:40,940 Tačiau šis vaikinas yra šiek tiek ypatingas jei jis pradžioje. 506 00:23:40,940 --> 00:23:48,710 >> Taigi, jei žymeklis yra lygi sąrašą pati, todėl, jei aš ne pradžioje 507 00:23:48,710 --> 00:23:53,960 sąrašas ir radau n, man reikia padaryti keletą dalykų. 508 00:23:53,960 --> 00:23:59,230 Vienas iš jų, man reikia pakeisti sąrašą atkreipia dėmesį į kitą laukelį, 50. 509 00:23:59,230 --> 00:24:01,270 Taigi, tarkime, kad aš bandau pašalinti 34. 510 00:24:01,270 --> 00:24:03,560 Taigi, šis vaikinas turiu eiti toli vos akimirką. 511 00:24:03,560 --> 00:24:07,210 >> Taigi, aš ruošiuosi pasakyti, sąrašas gauna žymiklį kitą. 512 00:24:07,210 --> 00:24:08,570 Na, tai yra žymeklis. 513 00:24:08,570 --> 00:24:10,360 Kitas nukreipta čia. 514 00:24:10,360 --> 00:24:17,470 Taigi, tai pakeitus šią rodyklę teisę dabar, kad rodytų į šį vaikiną čia. 515 00:24:17,470 --> 00:24:19,580 Dabar, atsiminkite, mes turime laikinas kintamasis. 516 00:24:19,580 --> 00:24:23,520 Taigi mes ne našlaičiai jokių mazgų, nes aš taip pat turiu šį vaikinas mano 517 00:24:23,520 --> 00:24:25,010 įgyvendinimas Pašalinti. 518 00:24:25,010 --> 00:24:29,600 Taigi dabar, jei pati sąrašas nėra lygus nuliui, Man reikia nustatyti šiek tiek kažką. 519 00:24:29,600 --> 00:24:32,690 >> Man reikia dabar įsitikinkite, kad tai rodyklė, kuri anksčiau nukreipta 520 00:24:32,690 --> 00:24:36,830 50-34, tai turiu išeiti, nes jei aš bandau atsikratyti 521 00:24:36,830 --> 00:24:41,910 iš 34, 50 turėjo geriau ne išlaikyti bet rūšies atgal nuoroda į tai, kaip 522 00:24:41,910 --> 00:24:42,820 rodyklė siūloma. 523 00:24:42,820 --> 00:24:44,820 Taigi aš tiesiog padarė šią eilutę. 524 00:24:44,820 --> 00:24:46,520 Taigi tada aš padaryti. 525 00:24:46,520 --> 00:24:48,040 Ši byla yra iš tikrųjų labai paprasta. 526 00:24:48,040 --> 00:24:51,010 Atkirtimas sąrašo galvą yra gana paprasta. 527 00:24:51,010 --> 00:24:52,980 >> Deja, ten tai erzina kitas blokas. 528 00:24:52,980 --> 00:24:56,170 Taigi dabar, turiu nagrinėti bylą kur yra kažkas per vidurį. 529 00:24:56,170 --> 00:24:59,880 Bet tai nėra labai baisi, išskyrus sintaksė, kaip šis. 530 00:24:59,880 --> 00:25:03,080 Taigi, jei aš ne iš pradžių sąrašas, aš kažkur per vidurį. 531 00:25:03,080 --> 00:25:08,160 Ir ši eilutė čia sako, pradžia bet kokie mazgas esate ne. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Pereiti į ankstesnį mazgas kitą lauką ir nurodo, kad rodyklės. 534 00:25:18,550 --> 00:25:20,390 >> Padarykim tai pavaizduotomis piktogramo. 535 00:25:20,390 --> 00:25:21,640 Tai buvo gauti sudėtinga. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Taigi, jei aš turiu ankstesnius laukus čia - tegul tai padaryti - tolesni laukai čia. 538 00:25:37,990 --> 00:25:41,200 Aš ruošiuosi supaprastinti mano patarimų, o kaip padaryti visa krūva 539 00:25:41,200 --> 00:25:45,710 dalykų ir atgal crisscrossing tarpusavyje. 540 00:25:45,710 --> 00:25:50,870 Ir dabar, tegul tiesiog pasakyti, tai yra 1, 2, 3 už diskusijų labui, net 541 00:25:50,870 --> 00:25:53,410 nors tai nėra nesuderinama su nagrinėjama problema. 542 00:25:53,410 --> 00:25:55,900 >> Taigi čia mano susieta sąrašas. 543 00:25:55,900 --> 00:25:59,300 Bandau du pašalinti šioje ypač portalo istoriją. 544 00:25:59,300 --> 00:26:01,960 Taigi, aš atnaujinti žymeklį į būti nukreipta į šio vaikino. 545 00:26:01,960 --> 00:26:03,315 Taigi tai yra PTR. 546 00:26:03,315 --> 00:26:04,530 Jis nukreipta čia. 547 00:26:04,530 --> 00:26:07,170 Tai sąrašas, kuris egzistuoja visame pasaulyje, kaip ir anksčiau. 548 00:26:07,170 --> 00:26:09,200 Ir jis nukreipta čia nesvarbu koks. 549 00:26:09,200 --> 00:26:10,800 Ir dabar aš bandau pašalinti du. 550 00:26:10,800 --> 00:26:13,850 >> Taigi, jei rodyklė yra nukreipta čia aš ketina laikytis, matyt, 551 00:26:13,850 --> 00:26:17,110 ankstesnis žymeklis, kuris iškelia mane į 1. 552 00:26:17,110 --> 00:26:22,290 Aš tada sakys, kad kitą sritis, kuri duoda man per tai 553 00:26:22,290 --> 00:26:25,410 Lauke čia vyksta lygūs rodyklė kitą. 554 00:26:25,410 --> 00:26:28,400 Taigi, jei šio rodyklė, tai kitą. 555 00:26:28,400 --> 00:26:31,840 Tai reiškia, kad šis rodyklių poreikiai atkreipti dėmesį į šį vaikiną. 556 00:26:31,840 --> 00:26:35,140 >> Taigi, ką tai kodo eilutę turi tik padariau, tai šiek tiek apie tai. 557 00:26:35,140 --> 00:26:37,500 Ir dabar tai atrodo kaip žingsnis teisinga kryptimi. 558 00:26:37,500 --> 00:26:41,390 Mes iš esmės nori akiplėša 2 out į vidurį 1 ir 3. 559 00:26:41,390 --> 00:26:44,400 Taigi logiška, kad mes norime maršruto šį žymeklį aplink jį. 560 00:26:44,400 --> 00:26:50,400 Taigi tai kitą eilutę tikrina, jei žymeklis šalia nėra lygus nuliui, yra 561 00:26:50,400 --> 00:26:54,200 Iš tiesų kažkas su 2 dešinę tai reiškia, kad mes taip pat turime daryti 562 00:26:54,200 --> 00:26:55,850 tiek akiplėša čia. 563 00:26:55,850 --> 00:27:00,590 >> Taigi aš dabar reikia sekti šį žymeklį ir atnaujinti ankstesnę žymeklį ant 564 00:27:00,590 --> 00:27:05,410 šis vaikinas padaryti šiek tiek apeiti čia tašką čia. 565 00:27:05,410 --> 00:27:07,100 Ir dabar, vizualiai tai gražus. 566 00:27:07,100 --> 00:27:11,930 Tai tiek nepatogus tuo, kad ten niekas nukreipta į 2 daugiau. 567 00:27:11,930 --> 00:27:13,600 2 yra nukreipta į kairę. 568 00:27:13,600 --> 00:27:14,980 Ir 2 yra nukreipta į dešinę. 569 00:27:14,980 --> 00:27:17,480 Bet jis gali daryti ką nori, nes jis yra apie gauti išlaisvinti. 570 00:27:17,480 --> 00:27:19,480 Ir nesvarbu, ką tos vertybės nebėra. 571 00:27:19,480 --> 00:27:23,040 >> Kas svarbu, kad likusi vaikinai maršruto aukščiau 572 00:27:23,040 --> 00:27:24,280 ir toliau juo dabar. 573 00:27:24,280 --> 00:27:25,810 Ir iš tiesų, tai, ką mes darome toliau. 574 00:27:25,810 --> 00:27:29,360 Mes nemokamai žymeklis, kuris reiškia, kad mes pasakyti operacinė sistema, kviečiame 575 00:27:29,360 --> 00:27:30,906 susigrąžinti tai. 576 00:27:30,906 --> 00:27:34,900 Ir tada galiausiai, mes grįžtame. 577 00:27:34,900 --> 00:27:37,220 Kitur netiesiogiai, jei mes nebuvo grąžintas dar, 578 00:27:37,220 --> 00:27:38,290 mes turime nuolat ieško. 579 00:27:38,290 --> 00:27:41,485 Taigi rodyklė Lygu rodyklę šalia tik tai perkelti šį vaikiną čia. 580 00:27:41,485 --> 00:27:42,600 Perkelti šį vaikiną čia. 581 00:27:42,600 --> 00:27:45,400 Perkelti šią vaikinas čia, jeigu iš tiesų, neradome numerį 582 00:27:45,400 --> 00:27:46,960 mes ieškome dar. 583 00:27:46,960 --> 00:27:49,630 >> Taigi, tiesą sakant, ji atrodo visiškai didele, manau, iš pradžių 584 00:27:49,630 --> 00:27:52,180 žvilgsnio, ypač jei sunkiai su šiuo metu viktorinoje tada pamatyti 585 00:27:52,180 --> 00:27:52,850 kažkas panašaus į tai. 586 00:27:52,850 --> 00:27:55,050 Ir jūs paglostyti save ant nugaros. 587 00:27:55,050 --> 00:27:57,080 Na, nėra jokio būdo aš galėjo sugalvoti, kad viktorinoje. 588 00:27:57,080 --> 00:28:00,470 Bet aš norėčiau ginčytis, galite, jei jums pertraukos jį žemyn į šiuos individualius 589 00:28:00,470 --> 00:28:04,400 atvejais ir tik vaikščioti per ją atsargiai, nors, žinoma, pagal 590 00:28:04,400 --> 00:28:06,300 stresinių aplinkybių. 591 00:28:06,300 --> 00:28:09,470 >> Laimei, paveikslėlis, sudarytas viskas laimingesni. 592 00:28:09,470 --> 00:28:11,050 Jūs galite padaryti tai bet būdų skaičius. 593 00:28:11,050 --> 00:28:12,760 Jūs neturite daryti crisscrossing dalykas čia. 594 00:28:12,760 --> 00:28:14,520 Jūs galite tai padaryti su tiesiai linijos tai patinka. 595 00:28:14,520 --> 00:28:18,790 Tačiau šios problemos esmę, į Apskritai, buvo suvokti, kad 596 00:28:18,790 --> 00:28:22,060 nuotrauką pabaigoje turėtų atrodyti šiek tiek kažkas panašaus į tai, nes 597 00:28:22,060 --> 00:28:25,030 pastovus laikas suprasti, kad jūs nuolat trukdymo ir trukdymo ir trukdymo 598 00:28:25,030 --> 00:28:29,900 naujus mazgus pradžioje iš sąrašo. 599 00:28:29,900 --> 00:28:31,960 Turite klausimų? 600 00:28:31,960 --> 00:28:34,565 Turbūt sunkiausia tikrai kodavimo klausimai. 601 00:28:34,565 --> 00:28:37,690 >> PUBLIKA: Taigi sąrašas panašus į galvą ankstesnių pavyzdžių. 602 00:28:37,690 --> 00:28:39,640 >> David J. Malan: Būtent, būtent. 603 00:28:39,640 --> 00:28:43,130 Tiesiog kitoks pavadinimas pasaulinį kintamąjį. 604 00:28:43,130 --> 00:28:44,380 World Wide ką? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB BOWDEN: Gerai. 607 00:28:49,730 --> 00:28:52,020 Taigi tai yra viena, kai jūs teko rašyti pastraipą. 608 00:28:52,020 --> 00:28:56,060 Kai kurie žmonės rašė rašinius už šį klausimą. 609 00:28:56,060 --> 00:29:00,230 Bet jūs tiesiog reikia naudoti šiuos šešis sąlygas apibūdinti, kas atsitinka, kai 610 00:29:00,230 --> 00:29:02,440 bandysite susisiekti facebook.com. 611 00:29:02,440 --> 00:29:07,930 Taigi aš tik kalbėti per procesą naudojant visas šias sąlygas. 612 00:29:07,930 --> 00:29:11,290 Taigi, mūsų naršyklėje, mes tipo facebook.com ir paspauskite "Enter". 613 00:29:11,290 --> 00:29:17,280 Taigi, mūsų naršyklė ketina statyti HTTP prašyti, kad jis ketina siųsti 614 00:29:17,280 --> 00:29:22,220 per tam tikrą procesą facebook "Facebook" atsakyti į mus su 615 00:29:22,220 --> 00:29:24,450 HTML jo puslapyje. 616 00:29:24,450 --> 00:29:28,800 >> Taigi, kas yra procesas, kuris HTTP užklausa 617 00:29:28,800 --> 00:29:30,730 faktiškai gauna "Facebook"? 618 00:29:30,730 --> 00:29:32,790 Taigi, pirmiausia, mums reikia išversti Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Taigi ką tik suteikė vardas Facebook.com, kur iš tiesų HTTP užklausa 620 00:29:38,780 --> 00:29:39,940 reikia eiti? 621 00:29:39,940 --> 00:29:44,120 Taigi mums reikia išversti Facebook.com IP adresu, kuris unikaliai 622 00:29:44,120 --> 00:29:47,620 nustato, ką mes iš tikrųjų mašina norite siųsti šį prašymą. 623 00:29:47,620 --> 00:29:49,310 Jūsų nešiojamas kompiuteris turi IP adresą. 624 00:29:49,310 --> 00:29:52,240 Viskas prijungtas prie interneto turi IP adresą. 625 00:29:52,240 --> 00:29:59,030 >> Taigi, DNS, Domain Name System, kuri yra kas vyksta dirbti vertimą 626 00:29:59,030 --> 00:30:03,750 iš facebook.com prie IP adreso, jūs iš tikrųjų norite susisiekti. 627 00:30:03,750 --> 00:30:08,075 Taigi, mes kreiptis į DNS serverius ir tarkim, kas yra facebook.com? 628 00:30:08,075 --> 00:30:16,560 Ji sako, oi, tai IP adresas 190,212 kažkas, kažkas, kažką. 629 00:30:16,560 --> 00:30:16,900 Gerai. 630 00:30:16,900 --> 00:30:18,850 Dabar aš žinau, ką mašina Noriu susisiekti. 631 00:30:18,850 --> 00:30:22,360 >> Taigi jūs siunčiate savo HTTP užklausa per tą mašiną. 632 00:30:22,360 --> 00:30:24,140 Taigi, kaip tai gauti į tą mašiną? 633 00:30:24,140 --> 00:30:27,200 Na, prašymas eina iš maršrutizatorius maršrutizatorius šoktelėti. 634 00:30:27,200 --> 00:30:32,630 Prisiminti pavyzdį klasėje, kur mes iš tikrųjų matė maršrutą, kad 635 00:30:32,630 --> 00:30:35,340 paketus paėmė, kai mes bandėme bendrauti. 636 00:30:35,340 --> 00:30:38,460 Mes matėme, kad peršokti per Atlantą Vandenyno vienu metu ar whatever. 637 00:30:38,460 --> 00:30:42,820 >> Taigi paskutinis terminas uosto. 638 00:30:42,820 --> 00:30:46,520 Taigi, tai jau jūsų kompiuteryje. 639 00:30:46,520 --> 00:30:49,970 Jūs galite turėti keletą dalykų šiuo metu bendrauti su internetu. 640 00:30:49,970 --> 00:30:53,730 Taigi aš galiu veikti, pavyzdžiui, "Skype". 641 00:30:53,730 --> 00:30:55,670 Galiu turėti interneto naršyklę atvirą. 642 00:30:55,670 --> 00:30:59,010 Galiu turėti kažką, kad torrenting failus. 643 00:30:59,010 --> 00:31:00,880 Taigi, visi šie dalykai yra bendrauti su 644 00:31:00,880 --> 00:31:02,600 interneto tam tikru būdu. 645 00:31:02,600 --> 00:31:08,070 >> Taigi, kai jūsų kompiuteris gauna tam tikrus duomenis iš interneto, kaip tai daro 646 00:31:08,070 --> 00:31:10,130 žinoti, kokia programa iš tikrųjų nori duomenis? 647 00:31:10,130 --> 00:31:12,610 Kaip tai žinoti, ar ši konkreti duomenys skirtas 648 00:31:12,610 --> 00:31:16,070 torrenting taikymą, o ne į interneto naršyklę? 649 00:31:16,070 --> 00:31:20,980 Taigi tai yra uostų, kad tikslas visi iš šių programų turi 650 00:31:20,980 --> 00:31:22,720 teigė prievadą jūsų kompiuteryje. 651 00:31:22,720 --> 00:31:27,580 Taigi jūsų naršyklė sako, ei, Girdžiu dėl uosto 1000. 652 00:31:27,580 --> 00:31:32,240 Ir jūsų torrenting programa sako, Girdžiu dėl uosto 3000. 653 00:31:32,240 --> 00:31:34,770 Ir "Skype" sako, aš naudoju uosto 4000. 654 00:31:34,770 --> 00:31:41,950 >> Taigi, kai jūs gaunate kai kuriuos duomenis, kad priklauso į vieną iš šių programų, duomenų 655 00:31:41,950 --> 00:31:45,510 yra pažymėta kurie uosto jis iš tikrųjų turi būti siunčiama kartu su. 656 00:31:45,510 --> 00:31:47,950 Taigi tai sako, oi, aš priklausau uosto 1000. 657 00:31:47,950 --> 00:31:50,950 Aš žinau, tada man reikia tai perduoti kartu į savo interneto naršyklėje. 658 00:31:50,950 --> 00:31:56,440 Taigi, priežastis jis atitinka čia yra tai, kad interneto serverių paprastai 659 00:31:56,440 --> 00:31:58,240 klausytis dėl uosto 80. 660 00:31:58,240 --> 00:32:02,420 Taigi, kai aš susisiekti Facebook.com, aš bendraujant su kai mašina. 661 00:32:02,420 --> 00:32:06,390 Bet turiu pasakyti, kuri uostą, kad mašina Noriu bendrauti su. 662 00:32:06,390 --> 00:32:09,160 Ir interneto serverių linkę būti klausymas dėl uosto 80. 663 00:32:09,160 --> 00:32:14,010 >> Jei jie nori, jie gali nustatyti, kad jis taip, ji išvardija kaip portą 7000. 664 00:32:14,010 --> 00:32:19,090 Ir tada naršyklėje, galėčiau rankiniu būdu įvesti Facebook.com: 7000 prie 665 00:32:19,090 --> 00:32:24,600 siųsti prašymą į uostą 7000 "Facebook" interneto serveryje. 666 00:32:24,600 --> 00:32:26,820 >> David J. Malan: Ir šiuo atveju, net nors mes ne reikalauti, kad žmonės 667 00:32:26,820 --> 00:32:30,000 paminėti tai, šiuo atveju, ką uostas būtų prašymas iš tikrųjų eiti į? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Bandykite dar kartą. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Būtent. 672 00:32:44,300 --> 00:32:47,960 Neieško, kad bet subtilumas kad ten nė vienas paskutinis. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: Taigi HTTPS, nes tai klausytis specialiai 674 00:32:51,770 --> 00:32:55,180 užšifruotas, tai dėl uosto 4430. 675 00:32:55,180 --> 00:32:57,680 >> Auditorija: ir laiškų yra 25, tiesa? 676 00:32:57,680 --> 00:33:00,670 >> David J. Malan: Išvykstamasis laiškus, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Aš net nežinau, dauguma - visi žemutinius linkę būti 678 00:33:03,760 --> 00:33:06,310 saugomos dalykų. 679 00:33:06,310 --> 00:33:09,260 Manau, viskas pagal 1024 yra saugomos. 680 00:33:09,260 --> 00:33:13,450 >> PUBLIKA: Kodėl jūs sakote, 3 buvo neteisingas numeris? 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Kadangi IP adresą, ten keturios grupės skaitmenų. 682 00:33:18,820 --> 00:33:21,090 Ir jie nuo 0 iki 255. 683 00:33:21,090 --> 00:33:28,060 Taigi 192.168.2.1 yra paplitusi vietinio tinklo IP adresas. 684 00:33:28,060 --> 00:33:30,840 Atkreipkite dėmesį, visi iš jų yra mažiau nei 255. 685 00:33:30,840 --> 00:33:33,570 Taigi, kai aš pradėjau su 300, kad negalėjo turėti 686 00:33:33,570 --> 00:33:35,210 buvo vienas iš skaičių. 687 00:33:35,210 --> 00:33:38,170 >> David J. Malan: Bet tai kvaila klipas nuo - ji buvo CSI kur jie turėjo 688 00:33:38,170 --> 00:33:39,970 skaičius, kad buvo per didelis IP adreso. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Bet apie tai paklausti? 691 00:33:46,110 --> 00:33:51,710 Šalia vienas, todėl visiškai pakeisti tema, bet mes turime šį PHP masyvo 692 00:33:51,710 --> 00:33:53,270 Į quad namai. 693 00:33:53,270 --> 00:33:56,360 Ir mes turime netvarkingai sąrašą. 694 00:33:56,360 --> 00:33:59,550 Ir mes norime spausdinti kiekvieną sąrašo elementą tiesiog, kuriame yra namas, pavadinimą. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Taigi, mes turime foreach ciklą. 697 00:34:11,870 --> 00:34:17,540 Taigi atminkite, kad sintaksė foreach masyvas kaip elemento masyve. 698 00:34:17,540 --> 00:34:22,360 Taigi per kiekvieną kilpą iteracija, namas truks vieną iš 699 00:34:22,360 --> 00:34:24,060 vertybės viduje masyvo. 700 00:34:24,060 --> 00:34:26,530 >> Pirmą iteracijos, namas bus Cabot namai. 701 00:34:26,530 --> 00:34:30,370 Dėl antrajame iteracijos, namas būti Kurjerių Namas ir pan. 702 00:34:30,370 --> 00:34:34,370 Taigi kiekvienam quad kaip namuose, mes tik ketina spausdinti - 703 00:34:34,370 --> 00:34:37,250 jūs taip pat galėtų būti pakartotas - 704 00:34:37,250 --> 00:34:42,199 sąrašo elementą ir tada namas vardas ir tada uždarykite sąrašo elementą. 705 00:34:42,199 --> 00:34:45,210 Garbanotas petnešos yra neprivaloma čia. 706 00:34:45,210 --> 00:34:49,480 >> Ir tada mes taip pat sakė klausimą pati, nepamirškite uždaryti 707 00:34:49,480 --> 00:34:50,770 netvarkingai sąrašą tegus. 708 00:34:50,770 --> 00:34:53,949 Taigi mums reikia išeiti PHP režimą norint tai padaryti. 709 00:34:53,949 --> 00:35:00,280 Arba mes galėjo atkartojo uždaryti netvarkingai sąrašą tegus. 710 00:35:00,280 --> 00:35:02,380 >> David J. Malan: Taip pat gerai čia būtų buvo naudoti seną mokyklą 711 00:35:02,380 --> 00:35:07,340 kilpa su $ i = 0 0 ir naudojant skaičiai, suprasti, kad spindulio ilgį. 712 00:35:07,340 --> 00:35:09,240 Visiškai neblogai, tik mažai wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> PUBLIKA: Taigi, jei jūs ketinate [Nesigirdi] tu darytum - 715 00:35:14,742 --> 00:35:16,734 Aš pamirštu kas kilpa [nesigirdi] yra. 716 00:35:16,734 --> 00:35:21,380 Norite $ quad kronšteiną i? 717 00:35:21,380 --> 00:35:21,850 >> David J. Malan: Būtent. 718 00:35:21,850 --> 00:35:23,100 Taip, tiksliai. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: ko nors? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> David J. Malan: Gerai. 723 00:35:32,010 --> 00:35:32,300 Kompromisai. 724 00:35:32,300 --> 00:35:38,290 Taigi ten buvo kekių atsakymų galima kiekvieną iš jų. 725 00:35:38,290 --> 00:35:40,510 Mums buvo tikrai tik ieškote kažkas įtikinamų pervertinta ir 726 00:35:40,510 --> 00:35:41,100 Neigiama. 727 00:35:41,100 --> 00:35:44,830 Ir skaičius 16 paprašė, patvirtinti vartotojai " įvesties kliento pusėje, kaip ir su JavaScript 728 00:35:44,830 --> 00:35:47,280 vietoj serverio pusėje, kaip ir PHP. 729 00:35:47,280 --> 00:35:49,450 Taigi, kas iš aukštyn daro kliento pusėje? 730 00:35:49,450 --> 00:35:53,780 >> Na, vienas iš dalykų, mes pasiūlėme yra kad jums sumažinti vėlavimą, nes jums 731 00:35:53,780 --> 00:35:56,750 neturite nerimauti kreiptis serverio, kuris gali trukti kelias 732 00:35:56,750 --> 00:36:00,390 milisekundžių ar net kelias sekundes vengiant, kad ir tiesiog 733 00:36:00,390 --> 00:36:04,670 patvirtinti naudotojų įvesties kliento pusėje iki suveikimo on-pateikti prižiūrėtojas ir 734 00:36:04,670 --> 00:36:06,650 tiesiog patikrinti, ar jie tipo kažkas už vardą? 735 00:36:06,650 --> 00:36:08,080 Ar jie tipo kažką už elektroninio pašto adresą? 736 00:36:08,080 --> 00:36:10,950 Ar jie pasirinkti bendrabučio nuo Išskleidžiamajame meniu? 737 00:36:10,950 --> 00:36:14,360 >> Jūs galite suteikti jiems momentinis atsiliepimus naudojant gigahercų kompiuterį 738 00:36:14,360 --> 00:36:16,770 ar kas jie tai iš tikrųjų jų stalo. 739 00:36:16,770 --> 00:36:19,310 Taigi, tai tik geriau vartotojui patirti paprastai. 740 00:36:19,310 --> 00:36:24,460 Bet daro kliento pusėje neigiama patvirtinimas, jei jums tai padaryti be taip pat 741 00:36:24,460 --> 00:36:29,860 daro server-side patvirtinimo yra tai, kad labiausiai kas išeina CS50 žino 742 00:36:29,860 --> 00:36:33,980 kad jūs galite tik siųsti visus duomenis, kuriuos norite prie serverio bet būdų skaičius. 743 00:36:33,980 --> 00:36:37,030 Tiesą sakant, daugumoje su bet kokia naršykle, galite spustelėkite aplink parametrus ir tiesiog 744 00:36:37,030 --> 00:36:40,110 išjungti JavaScript, kas, Todėl, išjungti bet kokia forma 745 00:36:40,110 --> 00:36:41,080 patvirtinimas. 746 00:36:41,080 --> 00:36:44,460 >> Bet jūs taip pat gali priminti, kad net aš darė keletą paslaptingų dalykų pamokose naudojant 747 00:36:44,460 --> 00:36:47,790 Telnet ir faktiškai apsimeta būti siunčiant get naršyklė 748 00:36:47,790 --> 00:36:49,240 prašymai į serverį. 749 00:36:49,240 --> 00:36:51,030 Ir tai tikrai ne naudojant bet "JavaScript". 750 00:36:51,030 --> 00:36:53,290 Tai tiesiog man rašyti komandas ne klaviatūra. 751 00:36:53,290 --> 00:36:57,410 Taigi tikrai, bet per pakankamai programuotojas komfortas internete ir HTTP 752 00:36:57,410 --> 00:37:01,690 gali siųsti bet kokio duomenų jis ar ji nori į be patvirtinimo serveryje. 753 00:37:01,690 --> 00:37:05,470 Ir jei jūsų serveris nėra taip pat tikrinti, Ar jie man duoti vardą, yra 754 00:37:05,470 --> 00:37:08,930 tai iš tikrųjų galioja pašto adresą, padarė jie pasirenka bendrabučio, jums gali baigtis 755 00:37:08,930 --> 00:37:12,800 iki įterpiant fiktyvus arba tiesiog tuščia duomenys į savo duomenų bazę, kuri tikriausiai 756 00:37:12,800 --> 00:37:15,450 nesiruošia būti geras dalykas, jei Jums buvo darant prielaidą, kad ten buvo. 757 00:37:15,450 --> 00:37:16,770 >> Taigi tai erzina realybe. 758 00:37:16,770 --> 00:37:19,890 Bet apskritai, kliento pusėje patvirtinimas yra puikus. 759 00:37:19,890 --> 00:37:21,810 Bet tai reiškia, kad dvigubai daugiau darbo. 760 00:37:21,810 --> 00:37:25,970 Nors egzistuoja, įvairių bibliotekos, JavaScript bibliotekos, skirtos 761 00:37:25,970 --> 00:37:28,830 Pavyzdžiui, kad tai daug, daug mažiau galvos skausmo. 762 00:37:28,830 --> 00:37:31,940 Ir jūs galite pakartotinai naudoti kai kurias kodas server-side, kliento pusėje. 763 00:37:31,940 --> 00:37:35,980 Tačiau nereikia suprasti, kad paprastai papildomas darbas. 764 00:37:35,980 --> 00:37:36,415 Taip. 765 00:37:36,415 --> 00:37:37,792 >> PUBLIKA: Taigi, jei mes tiesiog sakė mažiau saugus - 766 00:37:37,792 --> 00:37:39,205 >> David J. Malan: [Juokiasi] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Tai yra visada sunkiau tie, priimti sprendimą. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN tai reikštų buvo priimtas. 770 00:37:44,480 --> 00:37:44,810 >> David J. Malan: Kas? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: Aš sukūriau šią problemą. 772 00:37:45,810 --> 00:37:46,735 Kad būtų priimtas. 773 00:37:46,735 --> 00:37:47,220 >> David J. Malan: Taip. 774 00:37:47,220 --> 00:37:47,830 >> PUBLIKA: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: Bet mes nepriėmė už pirmąjį - 776 00:37:51,770 --> 00:37:53,630 gerai, mes ieškojome, kas yra kažkas panašaus jums nereikia 777 00:37:53,630 --> 00:37:55,270 bendrauti su serveriu. 778 00:37:55,270 --> 00:37:58,355 Mes nepritarė tik greičiau. 779 00:37:58,355 --> 00:38:00,080 >> PUBLIKA: Ką apie nereikia perkrauti puslapį? 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Taip. 781 00:38:00,430 --> 00:38:03,000 Tai buvo priimtas sprendimas. 782 00:38:03,000 --> 00:38:06,300 >> David J. Malan: Nieko kur jautėmės tai buvo labiau tikėtina, nei mažai tikėtina 783 00:38:06,300 --> 00:38:09,780 kad žinotum, ką buvo sakydamas, kuris yra sunku 784 00:38:09,780 --> 00:38:13,500 linija atkreipti kartais. 785 00:38:13,500 --> 00:38:16,000 Naudojant susietą sąrašą, o masyvo išlaikyti 786 00:38:16,000 --> 00:38:17,590 rūšiuoti sąrašą sveikaisiais skaičiais. 787 00:38:17,590 --> 00:38:21,000 Taigi aukštyn mes dažnai nurodo su susieta sąrašus, kad motyvuoti savo visą 788 00:38:21,000 --> 00:38:22,370 įvedimas buvo jums dinamiškumą. 789 00:38:22,370 --> 00:38:23,030 Jie gali augti. 790 00:38:23,030 --> 00:38:23,950 Jie gali susitraukti. 791 00:38:23,950 --> 00:38:27,370 Taigi jūs neturite šokinėti per lankus iš tikrųjų sukurti daugiau atminties 792 00:38:27,370 --> 00:38:28,140 su masyvo. 793 00:38:28,140 --> 00:38:30,310 Arba jūs neturite tiesiog pasakyti, atsiprašau, vartotojas. 794 00:38:30,310 --> 00:38:31,410 Masyvas užpildytas. 795 00:38:31,410 --> 00:38:35,850 Toks dinamiškas augimas sąrašą. 796 00:38:35,850 --> 00:38:37,210 Neigiama nors iš susijusių sąrašų? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> PUBLIKA: Tai linijinė. 799 00:38:43,356 --> 00:38:45,800 Paieška pagal susietą sąrašą yra linijinė o ką jūs prisijungti 800 00:38:45,800 --> 00:38:46,360 >> David J. Malan: Būtent. 801 00:38:46,360 --> 00:38:50,160 Paieška pagal susietą sąrašą yra linijinė, net jei ji rūšiuojami, nes galite 802 00:38:50,160 --> 00:38:53,170 tik šiuos duonos trupinius, tai patarimų, iš sąrašo pradžios 803 00:38:53,170 --> 00:38:53,570 iki galo. 804 00:38:53,570 --> 00:38:57,970 Jūs negalite sverto laisvą prieigą ir, Taigi, dvejetainis paieškos, net jei tai 805 00:38:57,970 --> 00:39:00,740 rūšiuojami, kad galėtumėte daryti su masyvo. 806 00:39:00,740 --> 00:39:02,390 Ir ten taip pat kitas išlaidas. 807 00:39:02,390 --> 00:39:02,966 Taip. 808 00:39:02,966 --> 00:39:03,800 >> PUBLIKA: Atmintis neefektyvus? 809 00:39:03,800 --> 00:39:04,130 >> David J. Malan: Taip. 810 00:39:04,130 --> 00:39:06,940 Na, aš ne būtinai pasakyti neefektyvus. 811 00:39:06,940 --> 00:39:10,110 Bet tai jums kainuos daugiau atminties, nes reikia 32 bitus kiekvienas 812 00:39:10,110 --> 00:39:13,400 mazgas papildomo rodyklė, ne mažiau už atskirai susiję sąrašas. 813 00:39:13,400 --> 00:39:16,660 Dabar, jei jūs tik saugoti sveikieji skaičiai ir norite pridėti rodyklę, tai 814 00:39:16,660 --> 00:39:17,830 faktiškai rūšies ne trivialus. 815 00:39:17,830 --> 00:39:19,340 Tai dvigubai daugiau atminties. 816 00:39:19,340 --> 00:39:22,330 Bet iš tikrųjų, jei jūs saugoti susijęs sąrašas structs, kurie gali turėti 817 00:39:22,330 --> 00:39:25,540 8 baitai, 16 baitai, dar nei, kad gal tai ne 818 00:39:25,540 --> 00:39:26,500 iš ribiniams kaštams. 819 00:39:26,500 --> 00:39:28,320 Bet tai kaina vis. 820 00:39:28,320 --> 00:39:31,880 Taigi, arba tų, tai jau buvo gerai, nes praradimas. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Naudojant PHP vietoj C rašyti komandinės eilutės programa. 823 00:39:36,100 --> 00:39:41,890 Taigi čia, tai dažnai greičiau naudoti kalba kaip PHP arba Ruby ar Python. 824 00:39:41,890 --> 00:39:43,700 Jūs tiesiog greitai atidaryti iki teksto redaktoriumi. 825 00:39:43,700 --> 00:39:45,900 Jūs turite daug daugiau funkcijų prieinamas jums. 826 00:39:45,900 --> 00:39:49,325 PHP turi virtuvės kriauklė funkcijų, o C, jūs 827 00:39:49,325 --> 00:39:50,420 labai, labai mažai. 828 00:39:50,420 --> 00:39:53,820 Tiesą sakant, vaikinai žino kietąjį būdu kad jūs neturite maišos lenteles. 829 00:39:53,820 --> 00:39:55,000 Jūs neturite susijęs sąrašus. 830 00:39:55,000 --> 00:39:57,470 Jei norite tuos, turite jiems įgyvendinti patys. 831 00:39:57,470 --> 00:40:00,950 >> Taigi vienas aukštyn PHP ar tikrai bet aiškinama kalba greitumas 832 00:40:00,950 --> 00:40:02,920 su kuria jūs galite rašyti kodą. 833 00:40:02,920 --> 00:40:06,660 Tačiau neigiama, mes matėme tai, kai aš greitai plakta misspeller 834 00:40:06,660 --> 00:40:11,780 įgyvendinimas paskaitoje naudojant PHP, yra kad naudojant aiškinama kalbą 835 00:40:11,780 --> 00:40:13,570 paprastai yra lėtesnis. 836 00:40:13,570 --> 00:40:18,420 Ir pamatėme, kad akivaizdžiai su padidinti laikas nuo 0,3 sekundes 3 837 00:40:18,420 --> 00:40:24,440 sekundžių, nes aiškinimo kad iš tikrųjų vyksta. 838 00:40:24,440 --> 00:40:27,060 >> Kitas dugnu buvo tai, kad jums neturi sudaryti. 839 00:40:27,060 --> 00:40:30,130 Taigi ji taip pat pagreitina vystymąsi beje, nes jūs neturite 840 00:40:30,130 --> 00:40:31,360 du etapai buvo paleista programa. 841 00:40:31,360 --> 00:40:32,140 Jūs tiesiog turite vieną. 842 00:40:32,140 --> 00:40:35,260 Ir todėl, kad gana didelis, kaip gerai. 843 00:40:35,260 --> 00:40:38,450 Naudojant SQL duomenų bazę, o ne CSV failas saugoti duomenis. 844 00:40:38,450 --> 00:40:40,230 Taigi, duomenų bazės SQL naudojamas pset7. 845 00:40:40,230 --> 00:40:42,060 CSV tu negali naudoti daug. 846 00:40:42,060 --> 00:40:45,960 Bet jūs jį naudojo netiesiogiai pset7 kaip gerai kalbėti Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Bet CSV yra tik kaip "Excel" failą, tačiau super paprasta, kur stulpeliai 848 00:40:49,330 --> 00:40:54,010 tiesiog demarked kableliais viduje kitu atveju tekstinį failą. 849 00:40:54,010 --> 00:40:56,740 Ir naudojant SQL duomenų bazės yra mažai įtikinamos. 850 00:40:56,740 --> 00:41:00,060 Tai aukštyn kojom, nes jums dalykų kaip pasirinkti ir įterpti ir ištrinti. 851 00:41:00,060 --> 00:41:03,790 Ir jums, matyt, indeksus, kad MySQL ir kitų duomenų bazių, pavyzdžiui, 852 00:41:03,790 --> 00:41:07,510 "Oracle", sukurti Jums atminties, kuri reiškia, kad jūsų pasirinkti tikriausiai nėra 853 00:41:07,510 --> 00:41:09,000 bus linijinis iš viršaus į apačią. 854 00:41:09,000 --> 00:41:11,300 Tai tikrai bus kažkas kaip dvejetainėje paiešką ar kažką 855 00:41:11,300 --> 00:41:12,520 panaši dvasia. 856 00:41:12,520 --> 00:41:13,930 Taigi jie paprastai greičiau. 857 00:41:13,930 --> 00:41:16,040 >> Tačiau neigiama yra tai, kad tai tik daugiau darbo. 858 00:41:16,040 --> 00:41:16,730 Tai daugiau pastangų. 859 00:41:16,730 --> 00:41:18,140 Jūs turite suprasti, duomenų bazes. 860 00:41:18,140 --> 00:41:18,940 Turite ją įsteigti. 861 00:41:18,940 --> 00:41:20,840 Jūs turite serverį paleisti kad duomenų bazė. 862 00:41:20,840 --> 00:41:22,750 Jūs turite suprasti, kaip jį konfigūruoti. 863 00:41:22,750 --> 00:41:24,930 Taigi tai yra tik šių rūšių kompromisus. 864 00:41:24,930 --> 00:41:27,860 Kadangi CSV failą, galite sukurti su gedit. 865 00:41:27,860 --> 00:41:28,770 Ir jūs gerai eiti. 866 00:41:28,770 --> 00:41:31,550 Nėra už šio sudėtingumo. 867 00:41:31,550 --> 00:41:34,870 >> Naudojant TRIE vietoj maišos lentelė su atskiru susiejami saugoti 868 00:41:34,870 --> 00:41:37,490 žodynas žodžių, primenančių iš pset5. 869 00:41:37,490 --> 00:41:42,480 Taigi bando aukštyn, teoriškai bent jau tai, ką? 870 00:41:42,480 --> 00:41:46,380 Pastovus laikas, bent jau, jei esate maišos dėl kiekvieno individo 871 00:41:46,380 --> 00:41:48,990 raidės žodyje, kaip jūs gali turėti pset5. 872 00:41:48,990 --> 00:41:52,720 Tai gali būti penkių maišos, šešių maišų, jei yra penkių ar šešių 873 00:41:52,720 --> 00:41:53,900 raidės žodžio. 874 00:41:53,900 --> 00:41:54,580 Ir tai labai gerai. 875 00:41:54,580 --> 00:41:56,910 Ir jei yra viršutinė riba, kaip ilgai jūsų žodžiai gali būti, kad tai 876 00:41:56,910 --> 00:41:59,320 Iš tiesų asimptotiškai pastovus laikas. 877 00:41:59,320 --> 00:42:05,180 >> Kadangi maišos lentelė su atskira Grupavimo, problema yra su tuo 878 00:42:05,180 --> 00:42:09,070 tipo duomenų struktūrą, yra tai, kad atlikimas savo algoritmus dažniausiai 879 00:42:09,070 --> 00:42:12,700 priklauso nuo daug dalykų jau duomenų struktūra. 880 00:42:12,700 --> 00:42:15,660 Ir tai tikrai atvejis grandinės, kuriuo daugiau daiktų jūs įtraukėte 881 00:42:15,660 --> 00:42:18,800 į maišos lentelės, jau tie grandinės eiti, o tai reiškia blogiausia 882 00:42:18,800 --> 00:42:21,960 atveju, dalykas, ką jums gali būti ieškote visą kelią vienos pabaigos 883 00:42:21,960 --> 00:42:26,000 šių konkuruojančių tinklų, kurie efektyviai pereina į kažką linijiniu. 884 00:42:26,000 --> 00:42:29,450 >> Dabar praktiškai ji galėtų visiškai būti atvejis, kad maišos lentelė 885 00:42:29,450 --> 00:42:32,820 tinklai yra spartesnis, nei atitinkamas trie įgyvendinimas. 886 00:42:32,820 --> 00:42:35,570 Bet tai dėl įvairių priežasčių, tarp kurie bando naudoti visai daug 887 00:42:35,570 --> 00:42:39,240 atminties, kuri gali iš tikrųjų lėtai dalykų žemyn, nes jums nereikia gauti gražus 888 00:42:39,240 --> 00:42:42,410 nauda kažką vadinama spartinimo, kur viskas, kad yra arti vienas kito 889 00:42:42,410 --> 00:42:45,420 atmintyje galima rasti dažnai greičiau. 890 00:42:45,420 --> 00:42:48,180 O kartais gali sugalvoti tikrai gera maišos funkcija. 891 00:42:48,180 --> 00:42:51,060 Net jei jūs turite švaisto tiek atmintis, jūs galite iš tikrųjų būtų galima 892 00:42:51,060 --> 00:42:54,430 rasti dalykų greitai, o ne taip blogai, kaip tiesiškai. 893 00:42:54,430 --> 00:42:58,410 >> Taigi, trumpai tariant, yra nebūtinai su bet kuriuo iš šių vieną ar net du 894 00:42:58,410 --> 00:43:00,050 konkrečių dalykų mes ieškojome. 895 00:43:00,050 --> 00:43:03,080 Tikrai nieko įtikinamas kaip pervertinimo ir sumažinimo 896 00:43:03,080 --> 00:43:04,800 paprastai sugauti savo akis. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: Taigi augs, mes padarėme nepriima į savo "greičiau". Jūs 898 00:43:11,840 --> 00:43:14,540 turėjo pasakyti kažką apie jį. 899 00:43:14,540 --> 00:43:17,910 Net jei jums sakė teoriškai greičiau, mes žinojome, kad jūs tipo suprantama 900 00:43:17,910 --> 00:43:19,470 kad tai 0 ir 1. 901 00:43:19,470 --> 00:43:22,820 Ir maišos lentelės, teoriškai, nėra 0 iš 1. 902 00:43:22,820 --> 00:43:26,550 Paminėti nieko apie runtime paprastai turiu jums taškų. 903 00:43:26,550 --> 00:43:32,640 Tačiau "greičiau", dauguma sprendimų dėl didelis lenta, kad buvo bando buvo 904 00:43:32,640 --> 00:43:34,990 objektyviai lėčiau nei sprendimų kad buvo maišos lentelės. 905 00:43:34,990 --> 00:43:37,250 Taigi, greičiau ir pati tikrai nėra tiesa. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> David J. Malan: Namas de dom dom. 908 00:43:44,380 --> 00:43:46,686 Aš turbūt tik viena, kad supranta Štai kaip tai turėtų 909 00:43:46,686 --> 00:43:47,500 tariamas, ar ne? 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: aš tikrai neįsivaizduoju. 911 00:43:50,400 --> 00:43:51,650 >> David J. Malan: Jis padarė jausmas, mano galva. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: darau šį vieną. 914 00:43:57,580 --> 00:43:58,020 Gerai. 915 00:43:58,020 --> 00:44:04,243 Taigi tai yra viena, kur jums teko atkreipti schema panaši į galbūt 916 00:44:04,243 --> 00:44:06,040 matėme pastaruosius egzaminus. 917 00:44:06,040 --> 00:44:12,200 Taigi, tegul tiesiog pažvelgti į tai. 918 00:44:12,200 --> 00:44:18,170 Taigi iš HTML mazgas, mes turime du vaikai, galvos ir kūno. 919 00:44:18,170 --> 00:44:20,570 Taigi mes filialas - galvą ir kūną. 920 00:44:20,570 --> 00:44:22,280 Vadovas turi žymės pavadinimą. 921 00:44:22,280 --> 00:44:23,710 Taigi, mes turime pavadinimą. 922 00:44:23,710 --> 00:44:28,450 >> Dabar vienas dalykas, daug žmonių Pamiršau, kad šie teksto mazgai 923 00:44:28,450 --> 00:44:30,430 elementai, kaip apibrėžta šio medžio. 924 00:44:30,430 --> 00:44:36,260 Taigi čia mes atsitikti atkreipti juos ovalai atskirti juos nuo jų 925 00:44:36,260 --> 00:44:37,380 tipų mazgų. 926 00:44:37,380 --> 00:44:41,450 Tačiau pranešime taip pat čia mes turime viršų, viduryje, ir apačioje bus baigti yra 927 00:44:41,450 --> 00:44:42,560 teksto mazgai. 928 00:44:42,560 --> 00:44:46,250 Taigi nepamirštant tų, buvo šiek tiek bendros klaidą. 929 00:44:46,250 --> 00:44:48,770 >> Kūnas turi tris vaikus - šie trys Divs. 930 00:44:48,770 --> 00:44:53,340 Taigi div, span, div ir tada tekstas mazgas vaikai šių div us. 931 00:44:53,340 --> 00:44:55,900 Tai gana daug už, kad klausimus. 932 00:44:55,900 --> 00:44:57,860 >> David J. Malan: Ir verta pažymėti, nors mes neturime gyventi dėl šių 933 00:44:57,860 --> 00:45:01,040 detales laiko mes praleidžiame apie JavaScript, kad tvarka daro, ir 934 00:45:01,040 --> 00:45:02,290 faktas, nesvarbu techniškai. 935 00:45:02,290 --> 00:45:06,330 Taigi, jei vadovas yra prieš kūną HTML, tada jis turėtų atrodyti 936 00:45:06,330 --> 00:45:08,860 kairėje kūno faktinis DOM. 937 00:45:08,860 --> 00:45:12,265 Kad jo yra, apskritai, tiesiog FYI, kažkas vadinamas dokumentas siekiant, kur 938 00:45:12,265 --> 00:45:13,260 tai tikrai svarbu. 939 00:45:13,260 --> 00:45:17,470 Ir jei buvo įgyvendinti analizatorius, programa, kuri nuskaito HTML statybos 940 00:45:17,470 --> 00:45:20,960 iki atmintyje medį, būti sąžiningais, tai intuityviai turbūt tai, ką 941 00:45:20,960 --> 00:45:24,720 vistiek - iš viršaus į apačią, kairės į dešinę. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Klausimai apie tai? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Turėčiau daryti kitą vieną? 945 00:45:30,000 --> 00:45:32,380 >> David J. Malan: Žinoma. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: Gerai. 947 00:45:33,810 --> 00:45:39,320 Taigi tai yra buferio ataka klausimas. 948 00:45:39,320 --> 00:45:43,740 Svarbiausia pripažinti čia yra, gerai, kaip galėtų priešininkas triukas 949 00:45:43,740 --> 00:45:46,170 ši programa į vykdančiosios abejotinam kodui? 950 00:45:46,170 --> 00:45:51,860 Taigi argv1, pirmą komandinę eilutę argumentas šiai programai, kuri gali būti 951 00:45:51,860 --> 00:45:53,920 savavališkai ilgas. 952 00:45:53,920 --> 00:45:59,160 Bet čia mes naudojame memcpy kopijuoti argv1, kuris čia yra baras. 953 00:45:59,160 --> 00:46:00,165 Mes perduoti ją kaip argumentą. 954 00:46:00,165 --> 00:46:02,050 Ir taip jis įgauna pavadinimo juostoje. 955 00:46:02,050 --> 00:46:08,040 >> Taigi mes memcpying baras į šį buferinį a. 956 00:46:08,040 --> 00:46:09,400 Kiek baitų mes kopijuojate? 957 00:46:09,400 --> 00:46:14,040 Na tačiau daugelis baras baitų atsitinka bus naudojamas, šio argumento ilgį. 958 00:46:14,040 --> 00:46:17,930 Bet c yra tik 12 baitų pločio. 959 00:46:17,930 --> 00:46:22,280 Taigi, jei mes tipo komandinės eilutės argumentas tai ilgiau nei 12 baitų, mes 960 00:46:22,280 --> 00:46:25,470 ketina ištekėti tai ypač buferis. 961 00:46:25,470 --> 00:46:31,000 Dabar, kaip gali priešininkas apgauti programą į vykdančiosios piktybinį kodą? 962 00:46:31,000 --> 00:46:34,910 >> Taigi nepamirškite, kad čia Pagrindinis skambina foo. 963 00:46:34,910 --> 00:46:37,340 Ir taip, tada pagrindiniai skambučiai foo. 964 00:46:37,340 --> 00:46:40,408 Leiskite atkreipti tai. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Taigi, mes turime krūvą. 967 00:46:46,990 --> 00:46:49,090 Ir pagrindinis turi kamino kadrą apačioje. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Tam tikru momentu, pagrindiniai skambučiai foo. 970 00:46:53,250 --> 00:46:55,390 Na, iš karto, pagrindiniai skambučiai foo. 971 00:46:55,390 --> 00:46:57,130 Ir taip foo gauna savo stack frame. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Dabar, tam tikru momentu, foo ketina grįžti. 974 00:47:02,220 --> 00:47:06,810 Priėjęs foo grąžą, mes turime žinoti, ką eilutėje kodas viduje pagrindinis mes 975 00:47:06,810 --> 00:47:10,610 buvo Norint žinoti, kur turėtume atnaujintas pagrindinis. 976 00:47:10,610 --> 00:47:13,100 Mes galime paskambinti foo iš visos krūva skirtingose ​​vietose. 977 00:47:13,100 --> 00:47:14,620 Kaip mes žinome, kur grįžti? 978 00:47:14,620 --> 00:47:16,460 Na, mes turime laikyti, kad kažkur. 979 00:47:16,460 --> 00:47:23,010 >> Taigi kažkur dešinėje maždaug čia mes saugome kur turėtume grįžti į kartą 980 00:47:23,010 --> 00:47:24,070 foo grįžta. 981 00:47:24,070 --> 00:47:26,350 Ir tai yra atgalinis adresas. 982 00:47:26,350 --> 00:47:30,490 Taigi, kaip priešininkas gali pasinaudoti tai yra tai, kad 983 00:47:30,490 --> 00:47:37,550 šis buferis c yra saugomi, galime pasakyti, čia yra C. 984 00:47:37,550 --> 00:47:39,690 Taigi, mes turime 12 baitų a. 985 00:47:39,690 --> 00:47:40,540 Tai yra C. 986 00:47:40,540 --> 00:47:43,030 Ir tai Foo savo kamino žiedas. 987 00:47:43,030 --> 00:47:49,970 Taigi, jei piktybinis vartotojas įveda daugiau baitų nei 12 arba jos įvežamos į komandą 988 00:47:49,970 --> 00:47:54,570 linija argumentas, kad yra ilgesnis nei 12 simbolių, tada mes ketiname 989 00:47:54,570 --> 00:47:57,540 perkrautas šį buferį. 990 00:47:57,540 --> 00:47:59,910 >> Mes galime nesustoti. 991 00:47:59,910 --> 00:48:02,220 Ir tam tikru momentu, mes toli pakankamai, kad mes pradedame 992 00:48:02,220 --> 00:48:05,120 perrašyti šį atgalinį adresą. 993 00:48:05,120 --> 00:48:08,310 Taigi, kai mes perrašyti atgalinį adresą, tai reiškia, kad kai rūšys 994 00:48:08,310 --> 00:48:14,220 grįžta, mes grįžti ten, kur piktybinis vartotojas pasakoja ją pagal 995 00:48:14,220 --> 00:48:19,490 kokia vertė jis įrašytas, bet kokio simbolių vartotojo įrašytas. 996 00:48:19,490 --> 00:48:24,320 Ir todėl, jei piktybinis vartotojas yra ypač protingas, jis gali turėti tai 997 00:48:24,320 --> 00:48:29,255 grįžti į kažkur printDef funkcija ar kažkur malloc 998 00:48:29,255 --> 00:48:31,830 funkcija, tiesiog visur savavališkas. 999 00:48:31,830 --> 00:48:38,420 >> Bet dar protingas, ką, jei jis turi vartotojo grįžti čia. 1000 00:48:38,420 --> 00:48:41,920 Ir tada pradėti vykdyti tai kaip eilučių kodo. 1001 00:48:41,920 --> 00:48:46,610 Taigi tuo metu, vartotojas gali įvesti ką nori į šį regioną. 1002 00:48:46,610 --> 00:48:52,210 Ir jis turi pilną kontrolę per savo programą. 1003 00:48:52,210 --> 00:48:53,460 Klausimai apie tai? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Taigi, kitas klausimas yra baigtas reimplementation foo tokiu būdu 1006 00:49:00,970 --> 00:49:02,620 kad ji nebėra pažeidžiamas. 1007 00:49:02,620 --> 00:49:03,870 >> Taigi, čia yra keletas būdų, pora jums galėjo padaryti tai. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Mes vis dar turime c tik yra ilgis 12. 1010 00:49:13,330 --> 00:49:16,480 Jūs galėjote pakeisti šį kaip dalį savo sprendimą. 1011 00:49:16,480 --> 00:49:18,930 Mes taip pat pridūrė, patikrinkite, tikras baras nebuvo tuščias. 1012 00:49:18,930 --> 00:49:24,460 Nors jums nereikia kad visą kreditą. 1013 00:49:24,460 --> 00:49:27,690 Taigi, mes patikrinti pirmas string ilgis juostoje. 1014 00:49:27,690 --> 00:49:31,650 Jei tai didesnis nei 12, tada ne iš tikrųjų padaryti kopiją. 1015 00:49:31,650 --> 00:49:33,010 Štai vienas iš būdų nustatant jį. 1016 00:49:33,010 --> 00:49:36,750 >> Kitas nustatant jį būdas yra vietoj turintis c tik ilgis 12, kad jis 1017 00:49:36,750 --> 00:49:39,310 būti ilgis strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Kitas nustatant jį būdas iš tikrųjų tiesiog grįžti. 1019 00:49:43,370 --> 00:49:46,690 Taigi, jei jūs ką tik Dotarłeś atsikratyti visų tai, jei jūs ką tik ištrynė visus 1020 00:49:46,690 --> 00:49:51,830 eilučių kodo, jūs Dotarłeś visiškas kredito, nes šios funkcijos 1021 00:49:51,830 --> 00:49:54,150 iš tikrųjų nėra atlikti nieko. 1022 00:49:54,150 --> 00:49:57,650 Tai kopijavimo komandų eilutę argumentas į tam tikru masyvo 1023 00:49:57,650 --> 00:49:59,960 vietinis kamino rėmas. 1024 00:49:59,960 --> 00:50:01,310 Ir tada pats grįžta. 1025 00:50:01,310 --> 00:50:04,020 Ir ką jis nuveikė dingo. 1026 00:50:04,020 --> 00:50:09,740 Taigi grąža taip pat buvo pakankamas būdas gauti visą kreditą. 1027 00:50:09,740 --> 00:50:13,425 >> David J. Malan: Ne visai dvasia klausimas, bet priimtina vienam 1028 00:50:13,425 --> 00:50:15,580 spec vis. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Klausimai apie bet apie tai? 1030 00:50:18,260 --> 00:50:22,270 Vienas dalykas, kad jūs bent jau reikia, kad renkant kodą. 1031 00:50:22,270 --> 00:50:24,810 Taigi, nors techniškai nesate pažeidžiami, jei jūsų kodas nėra 1032 00:50:24,810 --> 00:50:29,130 kaupti, mes nesutiko, kad. 1033 00:50:29,130 --> 00:50:31,350 Nėra klausimų? 1034 00:50:31,350 --> 00:50:33,320 Gerai. 1035 00:50:33,320 --> 00:50:34,580 >> David J. Malan: Ar norite pasakyti šį vardą? 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: Ne 1037 00:50:37,230 --> 00:50:40,470 >> David J. Malan: Taigi, tai viena, tai buvo arba gera naujiena ar bloga naujiena. 1038 00:50:40,470 --> 00:50:43,870 Tai tiesiog pati problema kaip pirmoji viktorina. 1039 00:50:43,870 --> 00:50:46,140 Ir tai beveik tas pats problema kaip pset1. 1040 00:50:46,140 --> 00:50:49,980 Bet tai buvo sąmoningai supaprastinti, kad būtų paprastesnis piramidės, vienas, kad gali būti 1041 00:50:49,980 --> 00:50:52,330 išspręsti su šiek tiek paprastesnis iteracija. 1042 00:50:52,330 --> 00:50:55,680 Ir tikrai, ką mes buvo gauti ne čia buvo ne tiek logika, 1043 00:50:55,680 --> 00:50:58,100 nes tikriausiai, šiame punkte, jūs patogesnis, nei buvai 1044 00:50:58,100 --> 00:51:01,850 per savaitę vieną su už kilpomis arba kodėl kilpos, bet tikrai erzinti išskyrus, kad 1045 00:51:01,850 --> 00:51:04,790 Jūs esate šiek tiek patogiau su Požiūris, kad PHP yra ne tik apie tai, kas 1046 00:51:04,790 --> 00:51:05,290 programavimas. 1047 00:51:05,290 --> 00:51:07,820 Ji iš tiesų gali būti naudojamas kaip kalba parašyti komandinės eilutės programų. 1048 00:51:07,820 --> 00:51:10,060 >> Ir iš tiesų, tai, ką mes bandome atkreipti jūsų dėmesį. 1049 00:51:10,060 --> 00:51:12,060 Tai komandinės eilutės PHP programos. 1050 00:51:12,060 --> 00:51:16,690 Taigi C kodą čia, o teisingas C, Netiksli PHP. 1051 00:51:16,690 --> 00:51:17,940 Bet kodas tikrai tas pats. 1052 00:51:17,940 --> 00:51:21,720 Jei Palyginkite Viktorina sprendimai 0 prieš Testas 1, jūs pamatysite, kad 1053 00:51:21,720 --> 00:51:25,630 tai beveik identiški, išskyrus kai Dolerio ženklai ir už 1054 00:51:25,630 --> 00:51:27,250 nebuvimas duomenų tipą. 1055 00:51:27,250 --> 00:51:31,720 Visų pirma, jei mes pažvelgsime čia pamatysite, kad mes pakartoti, kad tai 1056 00:51:31,720 --> 00:51:33,730 atveju, nuo 1 iki 7 per. 1057 00:51:33,730 --> 00:51:34,910 >> Mes galėjome padaryti jai 0 indeksą. 1058 00:51:34,910 --> 00:51:37,320 Bet kartais, manau, kad tai tik psichiškai lengviau galvoti apie dalykus 1059 00:51:37,320 --> 00:51:38,200 nuo 1 iki 7. 1060 00:51:38,200 --> 00:51:40,300 Jei norite, kad vienas blokas, tada du blokai, tada trys, tada 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot septyni. 1062 00:51:41,770 --> 00:51:45,960 Mes j yra inicializuoti 1 ir tada tikisi iki i. 1063 00:51:45,960 --> 00:51:48,150 Ir viskas čia yra kitaip identiški. 1064 00:51:48,150 --> 00:51:49,790 Tačiau verta paminėti, yra pora dalykų. 1065 00:51:49,790 --> 00:51:53,230 Mes suteikiame Jums šias dvi eilutes, tai pirmasis vienas, goofily pavadintas kaip Szulernia 1066 00:51:53,230 --> 00:51:54,560 dėl staigaus sprogimo. 1067 00:51:54,560 --> 00:51:58,770 Ir tai tik nurodo kelią, aplankas, kuriame programa gali būti 1068 00:51:58,770 --> 00:52:02,160 nustatėme, kad jūs norite naudoti interpretuoti šį failą. 1069 00:52:02,160 --> 00:52:04,710 >> Ir tada linija po to iš Žinoma, tai įvesti PHP režimą. 1070 00:52:04,710 --> 00:52:07,740 Ir pačioje apačioje linija reiškia išeiti PHP režimą. 1071 00:52:07,740 --> 00:52:09,740 Ir tai veikia, apskritai, su aiškinama kalbas. 1072 00:52:09,740 --> 00:52:14,370 Tai tipo erzina, jei rašote programos failą pavadinimu foo.php. 1073 00:52:14,370 --> 00:52:17,320 Ir tada jūsų vartotojai turi tik prisiminti, gerai, kad paleisti šią programą, aš 1074 00:52:17,320 --> 00:52:22,320 turite įvesti "php kosmoso foo.php." Natūra erzina, jei nieko. 1075 00:52:22,320 --> 00:52:25,270 Ir jis taip pat atskleidžia, kad jūsų programa parašyta PHP, kurie yra ne visi 1076 00:52:25,270 --> 00:52:27,060 kad apšviesti vartotojui. 1077 00:52:27,060 --> 00:52:30,100 >> Taigi, galite pašalinti. PHP apskritai Atšaukti iš paskaitos. 1078 00:52:30,100 --> 00:52:35,690 Ir jūs iš tikrųjų galite padaryti. / Foo jei jūs chmodded jį padaryti jį 1079 00:52:35,690 --> 00:52:36,500 vykdomąjį. 1080 00:52:36,500 --> 00:52:39,630 Taigi chmod + x rūšys būtų padaryti. 1081 00:52:39,630 --> 00:52:41,460 Ir jei jums tai taip pat pridėti prie Szulernia čia. 1082 00:52:41,460 --> 00:52:45,320 Bet iš tikrųjų, problema buvo gauti ne spausdinti kažką panašaus į tai. 1083 00:52:45,320 --> 00:52:51,100 Nr HTML, C-kodas tikrai, tik keletas PHP. 1084 00:52:51,100 --> 00:52:54,100 Taigi Milo tada grįžo problemos 25. 1085 00:52:54,100 --> 00:52:58,050 Ir 25, jums buvo suteikta taip skeletas kodas, kuris buvo 1086 00:52:58,050 --> 00:52:59,730 gana paprastas interneto puslapis. 1087 00:52:59,730 --> 00:53:04,230 Ir sultingas dalis HTML protinga sumažėjo čia, kur mes turime viduje kūno 1088 00:53:04,230 --> 00:53:09,160 forma, kuri turi unikalų ID žaliavų kurio viduje buvo du įėjimai, vienas 1089 00:53:09,160 --> 00:53:11,950 su pavadinimo, viena idėja su mygtuko idėja. 1090 00:53:11,950 --> 00:53:14,240 >> Pirmasis tipas tekstas, antra tipo pateikti. 1091 00:53:14,240 --> 00:53:16,930 Ir taip mes jums davė, iš tikrųjų, daugiau ingredientai, nei jums reikia, tiesiog taip 1092 00:53:16,930 --> 00:53:19,230 vaikinai turėjo galimybes, su kuriomis išspręsti šią problemą. 1093 00:53:19,230 --> 00:53:21,130 Jūs neturite griežtai reikia visi šie identifikatoriai. 1094 00:53:21,130 --> 00:53:23,580 Tačiau ji leidžia išspręsti tai skirtingais būdais. 1095 00:53:23,580 --> 00:53:27,050 Ir į viršų, pastebėsite, kad tikslas buvo paskatinti 1096 00:53:27,050 --> 00:53:27,960 kaip šis langas - 1097 00:53:27,960 --> 00:53:28,780 Sveiki, Milo! - 1098 00:53:28,780 --> 00:53:31,270 pop-up naršyklėje naudoti super paprasta, jei 1099 00:53:31,270 --> 00:53:33,190 nėra negraži, įspėjimo funkcija. 1100 00:53:33,190 --> 00:53:37,480 Ir taip, galiausiai, tai suvesta konceptualiai kažkaip klausant 1101 00:53:37,480 --> 00:53:41,290 argumentai formos kliento pusėje , O ne serverio pusėje, kažkaip 1102 00:53:41,290 --> 00:53:45,640 atsakyti į šį teiginį, pagal greiferiniai vertę, kad vartotojo įvestą 1103 00:53:45,640 --> 00:53:50,120 į lauko pavadinimas, o tada rodyti jį perspėjimas kūno. 1104 00:53:50,120 --> 00:53:53,460 >> Taigi, vienas iš būdų, galite tai padaryti yra su JQuery, kuri atrodo šiek tiek 1105 00:53:53,460 --> 00:53:56,880 sintaksiškai stulbinantis pirmas. 1106 00:53:56,880 --> 00:54:00,760 Jūs galite tai padaryti su grynu DOM kodas - document.getelement pagal ID. 1107 00:54:00,760 --> 00:54:02,530 Tačiau galime pažvelgti į šios versijos išvaizdą. 1108 00:54:02,530 --> 00:54:05,110 Turiu svarbu pora linijos pirmas. 1109 00:54:05,110 --> 00:54:09,460 Taigi vienas, mes turime šią eilutę, kuri yra identiška tai, ką galėjo matyti 1110 00:54:09,460 --> 00:54:13,830 ir, manau, form2.html iš klasės 9 savaitės. 1111 00:54:13,830 --> 00:54:16,960 Ir tai tik sakau, vykdyti šis kodas, kai 1112 00:54:16,960 --> 00:54:18,430 dokumentas yra parengtas. 1113 00:54:18,430 --> 00:54:21,770 Tai yra svarbu, nes tik HTML puslapius skaityti iš viršaus į 1114 00:54:21,770 --> 00:54:23,280 apačioje, iš kairės į dešinę. 1115 00:54:23,280 --> 00:54:27,910 >> Ir todėl, jei bandysite tai padaryti kažkas kodą čia tam tikru DOM 1116 00:54:27,910 --> 00:54:31,560 elementas, kai HTML tegus, tai žemyn čia jūs darote tai per anksti, 1117 00:54:31,560 --> 00:54:34,220 nes tai yra net buvo skaityti į atmintį. 1118 00:54:34,220 --> 00:54:37,740 Taigi, sakydamas šį document.ready linija, mes sakydamas, 1119 00:54:37,740 --> 00:54:39,040 štai šiek tiek kodo, naršyklė. 1120 00:54:39,040 --> 00:54:42,440 Tačiau nereikia vykdyti tai, kol visos dokumentas yra paruoštas, kad yra DOM 1121 00:54:42,440 --> 00:54:44,320 medis egzistuoja atmintyje. 1122 00:54:44,320 --> 00:54:47,110 Tai vienas šiek tiek daugiau paprasta, jei sintaksiškai 1123 00:54:47,110 --> 00:54:51,890 šiek tiek kitoks, jei aš sakau, patraukti HTML elementas, kurio unikalus 1124 00:54:51,890 --> 00:54:53,560 identifikatorius yra įėjimai. 1125 00:54:53,560 --> 00:54:56,220 Štai ką maišos tegus reiškia, unikalų ID. 1126 00:54:56,220 --> 00:54:58,070 Ir tada aš skambina. Pateikti. 1127 00:54:58,070 --> 00:55:01,660 >> Taigi. Pateikti čia yra funkcija, kitaip žinomas kaip metodas, tai 1128 00:55:01,660 --> 00:55:05,850 viduje kairėje rankoje objekto pusė yra, kad aš ne atkreipti dėmesį. 1129 00:55:05,850 --> 00:55:08,990 Taigi, jei manote, žaliavų, kaip objektą atmintyje - ir iš tikrųjų ji yra. 1130 00:55:08,990 --> 00:55:10,440 Tai medyje mazgas - 1131 00:55:10,440 --> 00:55:16,580 . Pateikia priemonių, kai ši forma su tai ID pateikta, vykdyti 1132 00:55:16,580 --> 00:55:17,700 šis kodas. 1133 00:55:17,700 --> 00:55:20,290 Man nerūpi, ką pavadinimas funkcija aš vykdomas. 1134 00:55:20,290 --> 00:55:23,760 Taigi čia aš naudoju, kaip ir anksčiau, kas vadinamas lambda funkcija arba 1135 00:55:23,760 --> 00:55:24,720 anoniminis funkcija. 1136 00:55:24,720 --> 00:55:27,640 Tai ne visi intelektualiai Įdomu, išskyrus tai neturi pavadinimo, 1137 00:55:27,640 --> 00:55:30,220 tai gerai, jei jūs tik kada nors jį pavadinti vieną kartą. 1138 00:55:30,220 --> 00:55:34,490 Ir viduje ten aš iš tikrųjų tvarkyti Formos pateikimas. 1139 00:55:34,490 --> 00:55:36,810 Aš pirmą kartą paskelbti kintamąjį vadinamas vertė. 1140 00:55:36,810 --> 00:55:40,610 Ir kas tada yra šis poveikis pabrėžė dalis čia dabar? 1141 00:55:40,610 --> 00:55:44,755 Ką tai padaryti aukšto lygio už mane? 1142 00:55:44,755 --> 00:55:48,539 >> PUBLIKA: Ji gauna vertę, vartotojas nebuvo žemiau HTML. 1143 00:55:48,539 --> 00:55:50,920 Ji gauna kad ID ir tada randa jo vertę. 1144 00:55:50,920 --> 00:55:51,590 >> David J. Malan: Būtent. 1145 00:55:51,590 --> 00:55:54,300 Jis griebia mazgas, kurio unikalus identifikatorius, pavadinimas. 1146 00:55:54,300 --> 00:55:56,900 Ji gauna vertę jame, kuris yra, matyt, ką vartotojas 1147 00:55:56,900 --> 00:55:58,190 įvedėte jį arba save. 1148 00:55:58,190 --> 00:56:01,020 Ir tada ji saugo, kad kintamasis vadinamas vertė. 1149 00:56:01,020 --> 00:56:03,720 Kaip panaikinti, galite turėti, taip pat tai padarė šiek tiek kitaip. 1150 00:56:03,720 --> 00:56:09,250 Visiškai priimtini kažką melas var vertė tampa 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 Ir tai yra, kodėl ji tiek varginantis nenaudoti jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Pavadinimas". Vertė. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Taigi visiškai nepriimtina. 1157 00:56:19,620 --> 00:56:22,770 Įvairių būdų, kaip tai padaryti. JQuery tik linkęs būti šiek tiek daugiau glaustai ir 1158 00:56:22,770 --> 00:56:25,230 tikrai labiau populiarėja tarp programuotojų. 1159 00:56:25,230 --> 00:56:27,590 >> Dabar darau kaip iš sveiko proto tiek patikrinti, nes problemos 1160 00:56:27,590 --> 00:56:30,820 teiginys mes aiškiai sakė, jei vartotojas dar įvedėte jo ar jos 1161 00:56:30,820 --> 00:56:32,580 pavadinimas, nereikia parodyti įspėjimus. 1162 00:56:32,580 --> 00:56:35,390 Bet jūs galite patikrinti, kad tiesiog tikrinant tuščią string 1163 00:56:35,390 --> 00:56:37,850 citata-citatos, jei yra nieko iš tikrųjų nėra. 1164 00:56:37,850 --> 00:56:40,880 Bet jei ji nėra lygi citata-citatos, Noriu paraginti įspėjimus. 1165 00:56:40,880 --> 00:56:45,610 Ir įdomiausia dalis yra ta, kad mes naudojame plius operatorius, kuris 1166 00:56:45,610 --> 00:56:48,130 ką daro JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Jungiant. 1168 00:56:48,740 --> 00:56:50,690 Taigi, tai lyg PHPs dot operatorius. 1169 00:56:50,690 --> 00:56:52,820 Pati idėja, šiek tiek skiriasi sintaksė. 1170 00:56:52,820 --> 00:56:55,280 Ir aš tiesiog sukurti eilutę, matėte ant ekrano fotografiją - 1171 00:56:55,280 --> 00:56:57,750 Sveiki, taip ir taip. 1172 00:56:57,750 --> 00:56:59,200 >> Ir tada paskutinis detalė yra tai. 1173 00:56:59,200 --> 00:57:04,970 Kodėl aš grįžti klaidingą vidų Šio anoniminio funkcija? 1174 00:57:04,970 --> 00:57:07,420 >> PUBLIKA: Nėra vertė. 1175 00:57:07,420 --> 00:57:09,380 Jūs įdėti jį į formą. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Jis tiesiog sako, jei vertė nėra lygi Blankas, tada daryti. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Nebuvo toje pateikimo tuščias. 1180 00:57:20,940 --> 00:57:21,170 >> David J. Malan: Gerai. 1181 00:57:21,170 --> 00:57:21,640 Atsargūs, nors. 1182 00:57:21,640 --> 00:57:22,830 Yra niekas čia. 1183 00:57:22,830 --> 00:57:25,510 Ir kad grąža klaidinga yra ne iš jeigu sąlygos. 1184 00:57:25,510 --> 00:57:29,470 Taigi tai pabrėžė linija, return false, vykdo nesvarbu, kas, kada 1185 00:57:29,470 --> 00:57:32,310 forma pateikta. 1186 00:57:32,310 --> 00:57:36,810 Ką grįžti klaidingą viduje šis renginys prižiūrėtojas, kaip ji vadinama, 1187 00:57:36,810 --> 00:57:38,450 aptariamas įvykis yra pateikti? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> PUBLIKA: Kadangi tai įvyksta tik vieną kartą. 1190 00:57:44,470 --> 00:57:45,320 >> David J. Malan: Tik atsitinka vieną kartą. 1191 00:57:45,320 --> 00:57:46,821 Ne visai. 1192 00:57:46,821 --> 00:57:47,292 Taip? 1193 00:57:47,292 --> 00:57:50,589 >> PUBLIKA: Jis apsaugo formą nuo pateikimą pagal nutylėjimą, 1194 00:57:50,589 --> 00:57:52,480 kuri leistų puslapio perkrovimas. 1195 00:57:52,480 --> 00:57:53,110 >> David J. Malan: Būtent. 1196 00:57:53,110 --> 00:57:56,490 Taigi, aš perkrovos terminas pateikti čia nes sakau, forma 1197 00:57:56,490 --> 00:57:57,670 pateikimo. 1198 00:57:57,670 --> 00:58:02,240 Bet kaip jūs siūlote, tai tikrai ne buvo pateiktas tikrąja HTTP būdu. 1199 00:58:02,240 --> 00:58:06,870 Kai spustelite Siųsti, nes mūsų onsubmit prižiūrėtojas, mes perimti 1200 00:58:06,870 --> 00:58:09,040 kad formos pateikimas, taip sakant. 1201 00:58:09,040 --> 00:58:11,290 Mes tada darome ką su JavaScript kodu. 1202 00:58:11,290 --> 00:58:14,070 Bet aš sąmoningai grįžta klaidinga, nes tai, ką aš nenoriu, kad taip atsitiktų 1203 00:58:14,070 --> 00:58:18,430 sekundės vėliau yra visai forma pats turi būti pateikta prie interneto 1204 00:58:18,430 --> 00:58:22,800 serveris su pagrindinių vertės poromis, keičiant URL turi būti kažkas panašaus 1205 00:58:22,800 --> 00:58:26,180 q = katės ar ką mes padarėme, pavyzdžiui, klasėje. 1206 00:58:26,180 --> 00:58:29,640 Aš nenoriu, kad taip atsitiktų, nes nėra serverio klausymo tai 1207 00:58:29,640 --> 00:58:30,690 forma pateikti. 1208 00:58:30,690 --> 00:58:32,320 Tai grynai padaryta JavaScript kodą. 1209 00:58:32,320 --> 00:58:35,760 Ir štai kodėl aš net neturėjau veiksmų atributas mano forma, nes aš 1210 00:58:35,760 --> 00:58:38,870 neketina už tai kada nors eiti į serverį. 1211 00:58:38,870 --> 00:58:40,780 >> Taigi jis yra pateiktas. 1212 00:58:40,780 --> 00:58:44,340 Bet mes perimti tą formą pateikimas ir išvengti nutylėjimą 1213 00:58:44,340 --> 00:58:47,477 elgesys, kuris yra iš tikrųjų pereiti visą kelią iki serverio. 1214 00:58:47,477 --> 00:58:48,730 >> PUBLIKA: Taigi laikant jį kliento pusėje. 1215 00:58:48,730 --> 00:58:49,780 >> David J. Malan: Laikydami tai kliento pusėje. 1216 00:58:49,780 --> 00:58:51,030 Visiškai teisus. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Toliau, buvo mano oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB BOWDEN: Gerai. 1221 00:59:00,430 --> 00:59:04,990 Taigi tai pirmas klausimas buvo apskritai grubus žmonių. 1222 00:59:04,990 --> 00:59:07,270 Nors vėliau tie ėjo geriau. 1223 00:59:07,270 --> 00:59:12,260 Taigi jums teko pasirinkti teisingus duomenis tipai ir iš šių stulpelių. 1224 00:59:12,260 --> 00:59:17,750 Ir abu jie turi kai viskas apie juos, kad 1225 00:59:17,750 --> 00:59:20,620 kad pasirinkimas sunku. 1226 00:59:20,620 --> 00:59:24,430 Taigi int nebuvo galioja Tipo skaičių. 1227 00:59:24,430 --> 00:59:29,410 Priežastis yra 12 skaitmenų sąskaitos skaičius, int nėra pakankamai didelis, kad 1228 00:59:29,410 --> 00:59:31,070 saugoti bendras skaitmenų. 1229 00:59:31,070 --> 00:59:36,570 Taigi galioja pasirinkimas būtų buvę didelė int jei atsitiktų žinoti, kad. 1230 00:59:36,570 --> 00:59:42,090 Kitas pasirinkimas galėjo char lauko ilgis 12. 1231 00:59:42,090 --> 00:59:44,560 Taigi, arba tų, būtų dirbę. 1232 00:59:44,560 --> 00:59:46,100 Žiniasklaida ne. 1233 00:59:46,100 --> 00:59:50,170 >> Dabar, balansas, prisiminkite pset7. 1234 00:59:50,170 --> 00:59:59,540 Taigi, mes specialiai naudojamos dešimtainis laikyti akcijų vertę arba - 1235 00:59:59,540 --> 01:00:00,550 >> David J. Malan: Pinigai. 1236 01:00:00,550 --> 01:00:01,060 >> ROB BOWDEN: Pinigai. 1237 01:00:01,060 --> 01:00:05,710 Mes naudojome dešimtainės į atmintį sumą pinigų, kad vartotojas šiuo metu yra. 1238 01:00:05,710 --> 01:00:10,950 Taigi priežastis, kodėl mes tai padaryti yra nes, atminkite, plūdes. 1239 01:00:10,950 --> 01:00:12,480 Yra slankiojo kablelio tikslumo. 1240 01:00:12,480 --> 01:00:18,200 Jis negali tiksliai laikyti pinigus vertybės, kaip mes norime čia. 1241 01:00:18,200 --> 01:00:23,630 Taigi dešimtainis galėtų tiksliai parduotuvė kažkas, tarkim, dviejų skaičių po kablelio. 1242 01:00:23,630 --> 01:00:27,630 Štai kodėl pusiausvyra, mes norime jį būti dešimtainė, o ne plaukti. 1243 01:00:27,630 --> 01:00:30,230 >> David J. Malan: Ir taip pat, taip pat, nors ji galėjo būti protingas kita 1244 01:00:30,230 --> 01:00:32,760 kontekstai, galvoti, gal tai yra už int šansas. 1245 01:00:32,760 --> 01:00:34,420 Aš tiesiog sekti dalykų centus. 1246 01:00:34,420 --> 01:00:38,670 Kadangi mes aiškiai parodė, kad pagal nutylėjimą vertė yra 100,00, tai 1247 01:00:38,670 --> 01:00:40,380 reiškia, kad jis gali būti tik int. 1248 01:00:40,380 --> 01:00:45,310 Ir dar vienas subtilumas per su skaičiumi buvo ta, kad nebuvo skirta 1249 01:00:45,310 --> 01:00:46,180 būti apgauti klausimas. 1250 01:00:46,180 --> 01:00:49,860 Tačiau primena, kad MySQL int kaip C, bent jau 1251 01:00:49,860 --> 01:00:51,440 prietaisas yra 32 bitų. 1252 01:00:51,440 --> 01:00:53,960 Ir nors mes nesitikime jums tiksliai žinoti, kiek skaitmenys, 1253 01:00:53,960 --> 01:00:56,910 priemonė, nereikia priminti, kad didžiausias skaičius galite Potencialiai 1254 01:00:56,910 --> 01:01:00,710 su 32-bitų skaičius yra maždaug kas? 1255 01:01:00,710 --> 01:01:02,760 >> Kokiu numeriu mes visada pasakyti? 1256 01:01:02,760 --> 01:01:04,530 2 iki 32, o tai, ką maždaug? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Jūs neturite tiksliai žinoti. 1259 01:01:08,780 --> 01:01:10,580 Bet maždaug yra naudinga gyvenime. 1260 01:01:10,580 --> 01:01:12,200 Tai maždaug 4 mlrd. 1261 01:01:12,200 --> 01:01:14,430 Taigi mes sakė, kad kelis kartus. 1262 01:01:14,430 --> 01:01:16,360 Aš žinau, aš sakė, kad kelis kartus. 1263 01:01:16,360 --> 01:01:17,670 Ir tai yra maždaug 4 mlrd. 1264 01:01:17,670 --> 01:01:19,710 Ir tai gera taisyklė Nykščio žinoti. 1265 01:01:19,710 --> 01:01:21,880 Jei turite 8 bitai, 256 yra magiškas skaičius. 1266 01:01:21,880 --> 01:01:24,160 Jei turite 32 bitai, 4 milijardų suteikti arba užtrukti. 1267 01:01:24,160 --> 01:01:27,140 Taigi, jei jūs tiesiog užrašyti 4 mlrd, Jūs pamatysite, kad tai yra mažiau skaitmenų nei 1268 01:01:27,140 --> 01:01:30,970 12, o tai reiškia, kad tai tikrai nėra pakankamai ekspresyvumas užfiksuoti 1269 01:01:30,970 --> 01:01:34,220 12 skaitmenų sąskaitos numeris. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: Gerai. 1271 01:01:34,940 --> 01:01:38,520 Taigi kiti tie ėjo geriau. 1272 01:01:38,520 --> 01:01:40,900 Taigi, tarkime, kad bankas nustato 20 $ kas mėnesį 1273 01:01:40,900 --> 01:01:42,400 priežiūros mokestis už visas sąskaitas. 1274 01:01:42,400 --> 01:01:45,506 Su kokiais SQL užklausa galėtų bankas atskaityti $ 20 nuo kiekvieno skaičiaus, net jei 1275 01:01:45,506 --> 01:01:47,520 tai sukelia kai kurių neigiamų likučių? 1276 01:01:47,520 --> 01:01:50,380 Taigi, iš esmės, yra keturios pagrindinių tipų užklausas - 1277 01:01:50,380 --> 01:01:52,840 įterpti, pasirinkite, atnaujinti ir ištrinti. 1278 01:01:52,840 --> 01:01:56,080 Taigi, ką mes manome, kad mes ketinate naudoti čia? 1279 01:01:56,080 --> 01:01:57,000 Atnaujinkite. 1280 01:01:57,000 --> 01:01:58,260 >> Taigi galime pažvelgti. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Taigi čia mes atnaujinti. 1283 01:02:05,870 --> 01:02:09,900 Kas stalo mes atnaujinti sąskaitas? 1284 01:02:09,900 --> 01:02:11,670 Taigi atnaujinti sąskaitas. 1285 01:02:11,670 --> 01:02:15,390 Ir tada sintaksė sako, ką sąskaitose mes atnaujinti? 1286 01:02:15,390 --> 01:02:19,520 Na, mes nustatyti pusiausvyrą, lygią dabartinė vertė balanso atėmus 20. 1287 01:02:19,520 --> 01:02:22,860 Taigi atnaujins visas eilutes sąskaitų, atimant 1288 01:02:22,860 --> 01:02:26,250 20 $ iš balanso. 1289 01:02:26,250 --> 01:02:29,260 >> David J. Malan: pasitaikanti klaida čia nors mes kartais atleido jį, 1290 01:02:29,260 --> 01:02:32,990 buvo iš tikrųjų turi PHP kodą čia paskambinus užklausos funkciją arba išleisti 1291 01:02:32,990 --> 01:02:35,460 citatos apie viską, nereikia būti ten. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Atminkite, kad MySQL yra atskiras kalba nuo PHP. 1293 01:02:39,780 --> 01:02:42,410 Mes atsitiktų būti raštu MySQL PHP. 1294 01:02:42,410 --> 01:02:46,180 Ir PHP yra tada siųsti jį perkelti į MySQL serverį. 1295 01:02:46,180 --> 01:02:51,120 Tačiau jums nereikia PHP, siekiant bendrauti su MySQL serveryje. 1296 01:02:51,120 --> 01:02:51,730 >> David J. Malan: Būtent. 1297 01:02:51,730 --> 01:02:54,240 Taigi nėra su dolerio ženklais kintamieji turi būti šiame kontekste. 1298 01:02:54,240 --> 01:02:59,550 Jis gali tiesiog daryti visa matematika per pačios duomenų bazės. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: Gerai. 1300 01:03:00,080 --> 01:03:01,300 Taigi šalia vienas. 1301 01:03:01,300 --> 01:03:02,731 Tai šalia vienas? 1302 01:03:02,731 --> 01:03:03,210 Taip. 1303 01:03:03,210 --> 01:03:06,570 Taigi, ką SQL užklausa galėtų bankas gauti sąskaitų numerius iš jos 1304 01:03:06,570 --> 01:03:09,300 Turtingiausi vartotojai, turintys likučiai didesnis nei 1000? 1305 01:03:09,300 --> 01:03:13,280 Taigi, kuris iš keturių pagrindinių tipų mes norės čia? 1306 01:03:13,280 --> 01:03:14,430 Pasirinkite. 1307 01:03:14,430 --> 01:03:16,650 Taigi, mes norime pasirinkti. 1308 01:03:16,650 --> 01:03:17,610 Ką mes norime pasirinkti? 1309 01:03:17,610 --> 01:03:19,380 Kas skiltyje norime pasirinkti? 1310 01:03:19,380 --> 01:03:20,970 Mes specialiai nori pasirinkti numerį. 1311 01:03:20,970 --> 01:03:23,910 Bet jei jūs sakėte, žvaigždė, mes Taip pat pripažįstama, kad. 1312 01:03:23,910 --> 01:03:25,820 >> Taigi, pasirinkite numerį iš kokio stalo? 1313 01:03:25,820 --> 01:03:26,640 Sąskaitas. 1314 01:03:26,640 --> 01:03:28,370 Ir tada sąlyga norime? 1315 01:03:28,370 --> 01:03:30,140 Jeigu balansas didesnis nei 1000. 1316 01:03:30,140 --> 01:03:31,720 Mes taip pat pripažino, didesnis arba lygu. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Naujausia. 1319 01:03:36,190 --> 01:03:42,940 Su kokiais SQL užklausa galėtų bankas arti, t.y. ištrinti kiekvieną sąskaitą, 1320 01:03:42,940 --> 01:03:44,480 turi 0 $ likutį? 1321 01:03:44,480 --> 01:03:47,620 Taigi, kuris iš keturių mes ketinate norite naudoti? 1322 01:03:47,620 --> 01:03:48,320 Naikinti. 1323 01:03:48,320 --> 01:03:50,180 Taigi už tai sintaksė? 1324 01:03:50,180 --> 01:03:51,890 Ištrinti iš kokio stalo? 1325 01:03:51,890 --> 01:03:53,550 Sąskaitas. 1326 01:03:53,550 --> 01:03:55,790 Ir tada būklė, kai mes norime ištrinti - 1327 01:03:55,790 --> 01:03:57,280 jei balansas lygus nuliui. 1328 01:03:57,280 --> 01:04:03,050 Taigi ištrinti visas eilutes iš sąskaitų jei balansas yra nulinis. 1329 01:04:03,050 --> 01:04:04,300 Klausimai dėl bet kurios iš jų? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Nori į eilę? 1332 01:04:10,260 --> 01:04:11,200 >> David J. Malan: Eilė vadovas. 1333 01:04:11,200 --> 01:04:17,110 Taigi, tai viena, mes davė jums šiek tiek susipažinęs struktūra, kad mes ištirti a 1334 01:04:17,110 --> 01:04:20,450 tiek klasėje kartu iš structs, kuris buvo duomenys 1335 01:04:20,450 --> 01:04:21,910 sandarą, susijusią dvasia. 1336 01:04:21,910 --> 01:04:24,670 Nors skirtumas su eilę yra kad mes turėjome kažkaip prisiminti, kas 1337 01:04:24,670 --> 01:04:27,900 buvo ne iš eilės priekyje, didelis dalis, kad mes galime padaryti daugiau 1338 01:04:27,900 --> 01:04:30,530 efektyviai naudoti atmintį, mažiausiai jei mes buvome naudojant masyvą. 1339 01:04:30,530 --> 01:04:35,460 >> Nes išėmimas, jei mes turime masyvą, jei Pavyzdžiui, tai yra priekinis 1340 01:04:35,460 --> 01:04:38,470 eilė, jei aš galiu gauti į eilę čia ir tada kas nors gauna pagal 1341 01:04:38,470 --> 01:04:42,710 už mane, už manęs, už manęs, ir vienas žmogus išeina linijos, jūs 1342 01:04:42,710 --> 01:04:45,930 gali, kaip matėme kai kurių mūsų žmonių savanoriai klasėje, turime visiems 1343 01:04:45,930 --> 01:04:47,100 perkelti šį kelią. 1344 01:04:47,100 --> 01:04:50,880 Bet apskritai, turintys visi padaryti kažkas yra ne geriausiai panaudoti laiką 1345 01:04:50,880 --> 01:04:54,600 programoje, nes tai reiškia, kad jūsų algoritmą, kas 1346 01:04:54,600 --> 01:04:56,520 asimptotinės veikimo laikas? 1347 01:04:56,520 --> 01:04:57,420 Tai linijinis. 1348 01:04:57,420 --> 01:04:59,600 >> Ir aš jaučiu, kaip tai tipo kvaila. 1349 01:04:59,600 --> 01:05:02,890 Jei kitas asmuo linija kitą asmuo, kuris manimi turėjo eiti į 1350 01:05:02,890 --> 01:05:04,660 parduotuvė, jie ne visi turi judėti kartu. 1351 01:05:04,660 --> 01:05:08,200 Tiesiog leiskite, kad asmuo būtų sumušiau, roviau kai ateis laikas, pvz. 1352 01:05:08,200 --> 01:05:09,870 Taigi, mes galime sutaupyti šiek tiek laiko ten. 1353 01:05:09,870 --> 01:05:14,840 Ir taip, kaip tai padaryti, nors, kad priemonė kad iš eilės, vadovas ar 1354 01:05:14,840 --> 01:05:18,060 priekinė eilės vyksta palaipsniui perkelti giliau ir giliau 1355 01:05:18,060 --> 01:05:23,340 į masyvą ir ilgainiui gali faktiškai wrap aplink, jei mes naudojame 1356 01:05:23,340 --> 01:05:25,790 masyvas saugoti žmonių Šioje eilėje. 1357 01:05:25,790 --> 01:05:28,390 Taigi, jūs galite beveik galvoti masyvas kaip apskrito duomenys 1358 01:05:28,390 --> 01:05:29,880 struktūra šia prasme. 1359 01:05:29,880 --> 01:05:33,970 >> Taigi jūs kažkaip turi sekti dydis apie tai ar tikrai jo pabaigos 1360 01:05:33,970 --> 01:05:36,250 ir tada, kai jo pradžia. 1361 01:05:36,250 --> 01:05:39,490 Taigi, mes siūlome, kad jūs deklaruoti viena tokia eilė, pašaukimas 1362 01:05:39,490 --> 01:05:41,330 tai q tik viena raidė. 1363 01:05:41,330 --> 01:05:44,570 Tada mes siūlome, kad priekyje būtų inicializuoti iki nulio ir kad dydis 1364 01:05:44,570 --> 01:05:45,470 inicializuoti iki nulio. 1365 01:05:45,470 --> 01:05:47,770 >> Taigi dabar, nėra nieko viduje šios eilės. 1366 01:05:47,770 --> 01:05:50,910 Ir mes prašome užpildyti įgyvendinimas į eilę žemiau 1367 01:05:50,910 --> 01:05:55,250 tokiu būdu, kad funkcija prideda n prie q pabaigos ir tada grąžina true. 1368 01:05:55,250 --> 01:05:58,690 Bet jei q yra visiškai arba neigiamas, funkcija turi, o return false. 1369 01:05:58,690 --> 01:06:01,060 Ir mes davė jums pora prielaidų. 1370 01:06:01,060 --> 01:06:04,320 Bet jie tikrai ne funkciškai tinka, tik, kad bool egzistuoja, 1371 01:06:04,320 --> 01:06:06,690 nes techniškai, bool nėra egzistuoja C, jei yra 1372 01:06:06,690 --> 01:06:07,310 tikras failo antraštės. 1373 01:06:07,310 --> 01:06:09,350 Taigi, kad buvo tiesiog įsitikinkite, kad buvo ne tai triukas 1374 01:06:09,350 --> 01:06:10,940 klausimas rūšies dalykas. 1375 01:06:10,940 --> 01:06:16,280 >> Taigi į eilę, mes pasiūlėme į imtį sprendimai įgyvendinti taip. 1376 01:06:16,280 --> 01:06:20,420 Vienas iš jų, mes pirmiausia patikrina, lengvumas, žemos kabančių vaisių. 1377 01:06:20,420 --> 01:06:23,820 Jei eilė pilna arba skaičius, kad Jūs bandote įterpti mažiau 1378 01:06:23,820 --> 01:06:26,380 už nulį, o mes sakėme, į specifikacija problemos turėtų 1379 01:06:26,380 --> 01:06:30,320 negalima leisti, nes mes tik norime ne neigiamos vertės, tada jūs turėtumėte 1380 01:06:30,320 --> 01:06:31,640 tiesiog return false karto. 1381 01:06:31,640 --> 01:06:33,820 Taigi, kai kurie yra gana lengva klaidų tikrinimą. 1382 01:06:33,820 --> 01:06:38,720 Jei nors norite pridurti, kad tikrasis skaičius, kurį turėjo padaryti iš tiek 1383 01:06:38,720 --> 01:06:39,440 galvoju čia. 1384 01:06:39,440 --> 01:06:41,330 Ir tai, kai jis šiek tiek erzina protiškai, nes jūs turite 1385 01:06:41,330 --> 01:06:43,000 išsiaiškinti, kaip elgtis vaikjuostės. 1386 01:06:43,000 --> 01:06:46,870 >> Bet idėja gemalai čia tai iš palūkanos mums, kad vaikjuostės 1387 01:06:46,870 --> 01:06:51,480 dažnai reiškia modulinės aritmetinis ir Mod operatorius proc pusė, 1388 01:06:51,480 --> 01:06:55,140 kur jūs galite pereiti iš didesnio vertę atgal iki nulio ir tada vienas ir du ir 1389 01:06:55,140 --> 01:06:58,650 trijų ir vėl aplink nulį, vieno ir dviejų ir trijų ir tt 1390 01:06:58,650 --> 01:06:59,380 vėl ir vėl. 1391 01:06:59,380 --> 01:07:02,880 Taigi, kaip mes siūlome tai padaryti yra kad mes norite indeksuoti į 1392 01:07:02,880 --> 01:07:05,850 masyvas vadinamas numerius, kurių mūsų sveikieji skaičiai meluoti. 1393 01:07:05,850 --> 01:07:10,740 Tačiau ten patekti, pirmiausia noriu padaryti kokia iš eilės dydis, bet 1394 01:07:10,740 --> 01:07:14,080 tada pridėti, kad nepriklausomai nuo priekis sąraše. 1395 01:07:14,080 --> 01:07:17,880 Ir, kad poveikis yra įdėti mumis teisė pozicija eilėje ir 1396 01:07:17,880 --> 01:07:20,970 Negalima manyti, kad pirmasis asmuo atitinka yra pradžioje, kurioje jis 1397 01:07:20,970 --> 01:07:24,130 ji visiškai gali būti, jei mes taip pat buvo perkelti visi. 1398 01:07:24,130 --> 01:07:26,710 Bet mes tiesiog sukurti darbą už save, jei mes priėmėme 1399 01:07:26,710 --> 01:07:27,800 kad pirma kelias. 1400 01:07:27,800 --> 01:07:29,330 >> Taigi, mes galime išlaikyti jį gana paprasta. 1401 01:07:29,330 --> 01:07:32,180 Mes turime prisiminti, kad mes tiesiog pridėtinės int į eilę. 1402 01:07:32,180 --> 01:07:35,850 Ir tada mes tiesiog grąžina true. 1403 01:07:35,850 --> 01:07:38,560 Tuo tarpu, dequeue, mes paprašėme jums atlikite šiuos veiksmus. 1404 01:07:38,560 --> 01:07:42,260 Įgyvendinti jį taip, kad jis dequeues, ty pašalina ir grąžina, 1405 01:07:42,260 --> 01:07:44,190 prie eilės priekyje int. 1406 01:07:44,190 --> 01:07:46,410 Norėdami pašalinti int, pakanka pamiršti jį. 1407 01:07:46,410 --> 01:07:47,650 Jums nereikia perrašyti savo tiek. 1408 01:07:47,650 --> 01:07:48,820 Taigi, ji vis dar iš tikrųjų ten. 1409 01:07:48,820 --> 01:07:51,930 Tiesiog kaip ir duomenis į kietąjį diską, mes tiesiog ignoruojant faktą, 1410 01:07:51,930 --> 01:07:52,970 kad jis dabar ten. 1411 01:07:52,970 --> 01:07:55,520 Ir jei q yra tuščias, mes turėtume o grįžti neigiamos 1. 1412 01:07:55,520 --> 01:07:56,750 Taigi tai mano savavališkas. 1413 01:07:56,750 --> 01:08:01,640 Kodėl grįžti neigiamą 1 vietoj klaidingas? 1414 01:08:01,640 --> 01:08:02,620 Taip. 1415 01:08:02,620 --> 01:08:05,070 >> PUBLIKA: Q saugoti teigiamos reikšmės. 1416 01:08:05,070 --> 01:08:10,950 Kadangi jūs tik laikyti teigiamas vertybes ir q, neigiamas klaida. 1417 01:08:10,950 --> 01:08:11,510 >> David J. Malan: Gerai, tiesa. 1418 01:08:11,510 --> 01:08:14,850 Taigi, nes mes tik saugoti teigiamas vertės arba nulis, tada tai gerai 1419 01:08:14,850 --> 01:08:18,050 grįžti neigiamą vertę kaip kontrolinių vertė, specialus simbolis. 1420 01:08:18,050 --> 01:08:21,630 Bet jūs perrašyti istoriją ten, nes priežastis mes tik 1421 01:08:21,630 --> 01:08:25,890 grįžti ne neigiamas reikšmes nes mes norime 1422 01:08:25,890 --> 01:08:27,670 turi sarginio vertę. 1423 01:08:27,670 --> 01:08:32,617 Taigi, konkrečiau, kodėl ne tik return false atvejais klaidų? 1424 01:08:32,617 --> 01:08:33,099 Taip. 1425 01:08:33,099 --> 01:08:35,510 >> Auditorija: Jūs nepavyko grįžti sveikasis skaičius. 1426 01:08:35,510 --> 01:08:36,630 >> David J. Malan: Būtent. 1427 01:08:36,630 --> 01:08:38,569 Ir tai yra kur C gauna gana varžančiu. 1428 01:08:38,569 --> 01:08:40,590 Jei jūs sakote, kad jūs ketinate grįžti int, jūs turite 1429 01:08:40,590 --> 01:08:41,279 grįžti int. 1430 01:08:41,279 --> 01:08:43,689 Jūs negalite gauti išgalvotas ir pradėti grąžinti bool arba lėšos arba 1431 01:08:43,689 --> 01:08:45,040 eilutę ar kažkas panašaus. 1432 01:08:45,040 --> 01:08:49,370 Dabar, tuo tarpu, JavaScript ir PHP, ir kai kurios kitos kalbos gali, iš tiesų, 1433 01:08:49,370 --> 01:08:51,310 tu grįžti kitoks tipų reikšmių. 1434 01:08:51,310 --> 01:08:54,819 Ir tai iš tiesų gali būti naudinga, jei galite grįžti teigiamų INTS, nuliai, 1435 01:08:54,819 --> 01:08:59,439 neigiamos ints, ar klaidinga arba null net reikšti klaidą. 1436 01:08:59,439 --> 01:09:01,890 Bet mes neturime, kad universalumas C 1437 01:09:01,890 --> 01:09:04,569 >> Taigi su dequeue, ką mes pasiūlyti padaryti, tai - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Galite grįžti klaidinga. 1440 01:09:09,830 --> 01:09:13,189 Tai tiesiog, kad klaidinga yra maišos apibrėžti klaidinga nuliui. 1441 01:09:13,189 --> 01:09:16,000 Taigi, jei jūs return false, jūs grįžti prie nulio. 1442 01:09:16,000 --> 01:09:25,470 Ir nulis galioja dalykas mūsų eilėje, o neigiamas 1 nėra, jei 1443 01:09:25,470 --> 01:09:27,000 klaidinga atsitiko neigiamas 1. 1444 01:09:27,000 --> 01:09:29,972 Bet jūs turėtumėte dar nėra reikia žinoti, kad. 1445 01:09:29,972 --> 01:09:32,399 >> David J. Malan: Štai kodėl aš ne pasakyti. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: Bet tai buvo netiesa kad jūs negalite grįžti klaidinga. 1447 01:09:36,450 --> 01:09:37,700 >> David J. Malan: Žinoma. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Taigi dequeue, pastebėsite, mes priimame negalioja, nes jo argumentas. 1450 01:09:44,240 --> 01:09:45,479 Ir tai todėl, kad mes ne artimųjų nieko in 1451 01:09:45,479 --> 01:09:48,359 Mes tiesiog norite pašalinti elementą prie eilės priekyje. 1452 01:09:48,359 --> 01:09:49,819 Taigi, kaip gali eiti apie tai daro? 1453 01:09:49,819 --> 01:09:51,290 Na, visų pirma, galime tai padaryti greitai normalumas patikrinti. 1454 01:09:51,290 --> 01:09:53,350 Jei eilė dydis yra 0, yra ne reikia daug nuveikti. 1455 01:09:53,350 --> 01:09:54,210 Grįžti neigiamas 1. 1456 01:09:54,210 --> 01:09:54,800 Atlikta. 1457 01:09:54,800 --> 01:09:56,340 Štai tik keletas eilučių iš mano programos. 1458 01:09:56,340 --> 01:09:58,180 Taigi tik keturios linijos išlieka. 1459 01:09:58,180 --> 01:10:01,310 >> Taigi čia aš nuspręsti Mažėja dydis. 1460 01:10:01,310 --> 01:10:04,620 Ir efektyviai decrementing dydį tai reiškia, kad aš užmiršimo 1461 01:10:04,620 --> 01:10:06,010 kažkas ten. 1462 01:10:06,010 --> 01:10:09,910 Bet aš taip pat turi atnaujinti, jei iš numerių priekyje yra. 1463 01:10:09,910 --> 01:10:11,620 Taigi, kaip tai padaryti, man reikia padaryti du dalykus. 1464 01:10:11,620 --> 01:10:16,390 Aš pirmą kartą reikia prisiminti, kas jo numeris yra ne iš eilės priekyje, 1465 01:10:16,390 --> 01:10:17,860 nes man reikia grąžinti tą daiktą. 1466 01:10:17,860 --> 01:10:20,910 Taigi, aš nenoriu, kad netyčia pamiršti apie tai ir tada perrašyti. 1467 01:10:20,910 --> 01:10:22,840 Aš tik prisiminti, int. 1468 01:10:22,840 --> 01:10:27,310 >> Ir dabar, aš noriu atnaujinti q.front būti q.front 1. 1469 01:10:27,310 --> 01:10:30,070 Taigi, jei tai buvo pirmasis asmuo linija, dabar noriu padaryti plius 1 iki 1470 01:10:30,070 --> 01:10:31,930 nukreiptas į kitą asmenį linija. 1471 01:10:31,930 --> 01:10:33,420 Bet aš turiu dirbti, kad vaikjuostės. 1472 01:10:33,420 --> 01:10:37,270 Ir ar yra pajėgumų pasaulio konstanta, kad ketina leisti man įsitikinti, 1473 01:10:37,270 --> 01:10:41,140 kaip aš atkreipti dėmesį į paskutinę asmeniui linija, modulį operacija atneš 1474 01:10:41,140 --> 01:10:43,840 mane atgal iki nulio priekis eilėje. 1475 01:10:43,840 --> 01:10:46,050 Ir kad rankenos vaikjuostės čia. 1476 01:10:46,050 --> 01:10:48,950 Ir tada aš pradėti grąžinti n. 1477 01:10:48,950 --> 01:10:51,530 >> Dabar, griežtai kalbant, aš ne turi deklaruoti n. 1478 01:10:51,530 --> 01:10:53,880 Aš neturėjau patraukti jį ir laikyti jį laikinai, nes vertė yra 1479 01:10:53,880 --> 01:10:54,740 vis dar ten. 1480 01:10:54,740 --> 01:10:57,490 Taigi galėčiau tiesiog daryti teisingus aritmetinius grįžti į buvusį 1481 01:10:57,490 --> 01:10:58,450 iš eilės. 1482 01:10:58,450 --> 01:11:01,850 Bet aš tiesiog jaučiau, kad tai buvo labiau aišku, realiai patraukti int, įdėkite jį 1483 01:11:01,850 --> 01:11:04,320 n, ir tada grįžkite, kad siekiant aiškumo, bet 1484 01:11:04,320 --> 01:11:05,735 nėra būtina. 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 Jie visi ištariamas mano galvoje. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: Taigi pirmasis klausimas yra dvejetainis medis problema. 1490 01:11:19,110 --> 01:11:22,140 Taigi, pirmas klausimas, mes atsižvelgiant į šiuos numerius. 1491 01:11:22,140 --> 01:11:27,160 Ir mes norime kažkaip įterpti juos į šie mazgai tokia, kad ji yra 1492 01:11:27,160 --> 01:11:30,110 galioja dvejetainis paieškos medis. 1493 01:11:30,110 --> 01:11:36,260 Taigi, vienas dalykas prisiminti apie dvejetainiai paieškos medžiai yra tai, kad nėra 1494 01:11:36,260 --> 01:11:39,800 tik, kad į kairę dalykas vis mažiau ir dalykas 1495 01:11:39,800 --> 01:11:41,120 teisė yra didesnis. 1496 01:11:41,120 --> 01:11:44,580 Ji turi būti, kad visa medis Kairėje pusėje yra mažiau, o visa medis 1497 01:11:44,580 --> 01:11:45,740 į dešinę yra didesnis. 1498 01:11:45,740 --> 01:11:55,260 >> Taigi, jei aš įdėti 34 čia viršuje, ir tada Aš 20 čia, todėl, kad tai galioja tiek 1499 01:11:55,260 --> 01:11:56,970 toli, nes 34 čia. 1500 01:11:56,970 --> 01:11:57,920 20 vyksta į kairę. 1501 01:11:57,920 --> 01:11:58,950 Štai mažiau. 1502 01:11:58,950 --> 01:12:03,640 Bet aš negaliu tada įdėti 59 čia, nes nors 59 yra 20 teisę, 1503 01:12:03,640 --> 01:12:06,140 jis vis dar apie 34 kairėje. 1504 01:12:06,140 --> 01:12:10,760 Taigi su tuo apribojimų omenyje, Lengviausias būdas turbūt sprendžiant šį 1505 01:12:10,760 --> 01:12:14,330 problema yra tiesiog tarsi Šių numerių - 1506 01:12:14,330 --> 01:12:18,720 taip 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Ir tada įterpti tuos iš kairės į dešinę. 1508 01:12:21,640 --> 01:12:23,390 >> Taigi 20 eina čia. 1509 01:12:23,390 --> 01:12:24,630 34 eina čia. 1510 01:12:24,630 --> 01:12:25,830 36 eina čia. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 Ir jūs taip pat galėtų išsiaiškino su kai prijungti ir įgyvendinti, 1513 01:12:34,730 --> 01:12:38,830 Oi, palauk, aš neturiu pakankamai numerių užpildyti tai čia. 1514 01:12:38,830 --> 01:12:42,170 Taigi man reikia reshift ką mano maršrutas pastaba bus. 1515 01:12:42,170 --> 01:12:47,490 Tačiau pastebime, kad į galutinį trijų, jei skaityti iš kairės į dešinę, tai yra 1516 01:12:47,490 --> 01:12:48,740 didėjimo tvarka. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Taigi, dabar mes norime paskelbti, kas struct bus už 1519 01:12:56,540 --> 01:12:58,300 mazgai šio medžio. 1520 01:12:58,300 --> 01:13:02,720 Taigi, ką mes turime dvejetainiu medžiu? 1521 01:13:02,720 --> 01:13:05,830 Taigi, mes turime vertę tipo int, todėl kai int vertė. 1522 01:13:05,830 --> 01:13:07,220 Aš nežinau, ką mes vadinome ji tirpale - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Mums reikia žymeklį į kairę vaikui ir rodyklė į dešinę vaikui. 1525 01:13:13,570 --> 01:13:17,540 Taigi jis atrodys tai. 1526 01:13:17,540 --> 01:13:20,510 Ir jis bus iš tikrųjų atrodo prieš kada dvigubai susietų 1527 01:13:20,510 --> 01:13:25,090 sąrašas dalykų, todėl pranešimas - 1528 01:13:25,090 --> 01:13:27,860 Aš ruošiuosi slinkti visi būdas atgal į problemos 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Taigi, pastebėsite, kad jis atrodo identiška tai, išskyrus mes tiesiog atsitikti skambinti šių 1531 01:13:36,390 --> 01:13:38,590 skirtingi vardai. 1532 01:13:38,590 --> 01:13:41,440 Mes vis dar turime sveikąjį skaičių vertė ir dvi rodykles. 1533 01:13:41,440 --> 01:13:44,850 Tai tiesiog, kad vietoj gydyti patarimų, kaip nukreipta į kitą dalyką 1534 01:13:44,850 --> 01:13:47,955 ir ankstesnių dalykas, mes gydant kad rodykles, kad rodytų į kairę vaikui 1535 01:13:47,955 --> 01:13:49,205 ir į dešinę vaikas. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 Gerai. 1538 01:13:57,860 --> 01:13:59,650 Štai mūsų struct mazgas. 1539 01:13:59,650 --> 01:14:03,920 Ir dabar, tik funkcija turime įgyvendinti ir tai yra ėjimas, kuris 1540 01:14:03,920 --> 01:14:08,320 mes norime eiti per medžių, spauda iš medžio vertybių tvarka. 1541 01:14:08,320 --> 01:14:15,241 >> Taigi ieškote čia mes norime spausdinti iš 20, 34, 36, 52, 59 ir 106. 1542 01:14:15,241 --> 01:14:17,970 Kaip mes įvykdyti? 1543 01:14:17,970 --> 01:14:18,890 Taigi, tai gana panaši. 1544 01:14:18,890 --> 01:14:22,910 Jei matėte per pastaruosius egzaminą problema kad jūs norėjote atsispausdinti 1545 01:14:22,910 --> 01:14:25,940 Visas medis kableliais tarp viskas, tai buvo iš tikrųjų net 1546 01:14:25,940 --> 01:14:27,320 lengviau nei tai. 1547 01:14:27,320 --> 01:14:30,950 Taigi, čia yra sprendimas. 1548 01:14:30,950 --> 01:14:33,110 Tai buvo gerokai lengviau jei tu jį rekursyviai. 1549 01:14:33,110 --> 01:14:36,650 Aš nežinau, jei kas nors bandė daryti keletą kartų. 1550 01:14:36,650 --> 01:14:38,340 >> Bet pirmiausia mes turime bazinį atvejį. 1551 01:14:38,340 --> 01:14:39,660 Ką daryti, jei šaknis yra niekinis? 1552 01:14:39,660 --> 01:14:40,610 Tada mes tik ketina grįžti. 1553 01:14:40,610 --> 01:14:42,300 Mes nenorime nieko spausdinti. 1554 01:14:42,300 --> 01:14:45,940 Dar mes ketiname feed rekursyviai žemyn. 1555 01:14:45,940 --> 01:14:48,140 Spausdinti visą kairįjį subtree. 1556 01:14:48,140 --> 01:14:51,440 Taigi spausdinti viską mažiau nei mano dabartine verte. 1557 01:14:51,440 --> 01:14:53,930 Ir tada aš ruošiuosi spausdinti save. 1558 01:14:53,930 --> 01:14:57,310 Ir tada aš ruošiuosi recurse žemyn mano Visas teisė šaka, todėl viskas 1559 01:14:57,310 --> 01:14:58,810 didesnis nei mano vertę. 1560 01:14:58,810 --> 01:15:03,870 Ir tai vyksta spausdinti iš visko tvarka. 1561 01:15:03,870 --> 01:15:05,860 Klausimai apie tai, kaip tai iš tikrųjų įvykdo tai? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> PUBLIKA: Turiu klausimą apie [nesigirdi]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: Taigi vienas iš būdų artėja bet grįžtamojo problema yra tiesiog manau 1566 01:15:23,550 --> 01:15:26,275 apie tai, kaip jūs turite galvoti apie visus kampinių atvejais. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Taigi, manau, kad mes norime spausdinti visą šį medį. 1569 01:15:38,110 --> 01:15:42,030 Taigi, visi mes ketiname sutelkti dėmesį į tai ypač mazgas - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Rekurentiniai ragina mes apsimesti Tiems, kurie tik dirbti. 1572 01:15:47,420 --> 01:15:54,000 Taigi čia, tai rekursinis paskambinti ėjimas, mes net galvoti 1573 01:15:54,000 --> 01:15:58,640 apie tai, tiesiog einant į kairę trys, įsivaizduokite, kad jau spausdina 20 1574 01:15:58,640 --> 01:16:00,730 ir 34 mums. 1575 01:16:00,730 --> 01:16:03,350 Ir tada, kai mes galiausiai rekursyviai skambinti feed nuo 1576 01:16:03,350 --> 01:16:07,890 Gerai, kad bus teisingai spausdinti 52, 59 ir 106 už mus. 1577 01:16:07,890 --> 01:16:13,620 >> Taigi, turint omenyje, kad tai gali spausdinti 20, 34 ir kiti gali spausdinti 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 visi mes turime sugebėti padaryti spausdinimui Save viduryje, kad. 1579 01:16:17,180 --> 01:16:21,250 Taigi atsispausdinti viskas prieš mus. 1580 01:16:21,250 --> 01:16:27,710 Spausdinti Save, todėl dabartinė mazgas spausdinti 36, reguliariai printf, tada 1581 01:16:27,710 --> 01:16:31,170 spausdinti viską po mūsų. 1582 01:16:31,170 --> 01:16:32,730 >> David J. Malan: Tai kur rekursija bus tikrai gražus. 1583 01:16:32,730 --> 01:16:36,270 Būtent šis nuostabus šuolis tikėjimo kur jūs mažytį tiek darbo. 1584 01:16:36,270 --> 01:16:38,460 Ir tada tegul kas nors dar darome. 1585 01:16:38,460 --> 01:16:40,180 Ir kad kažkas yra ironiška, jūs. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Taigi rimtų aitvaras kiekis, jei slinkdami aukštyn dėl klausimų - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: Dėl klausimų? 1589 01:16:50,530 --> 01:16:53,490 >> David J. Malan: Ir žemyn mažai numeriai, ar kas nors žino, kur 1590 01:16:53,490 --> 01:16:55,190 šie skaičiai atsirado? 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: Turiu pažodžiui neįsivaizduoju. 1592 01:16:56,610 --> 01:16:59,794 >> David J. Malan: Jie atrodo visoje viktorina. 1593 01:16:59,794 --> 01:17:01,150 >> Auditorija: Ar jie patys skaičiai? 1594 01:17:01,150 --> 01:17:01,910 >> David J. Malan: Tie skaičiai. 1595 01:17:01,910 --> 01:17:03,260 Tiek margutis. 1596 01:17:03,260 --> 01:17:08,100 Taigi, tiems iš jūsų, žiūrėti internete namo, jei galite pasakyti mums elektroniniu paštu 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net ką reikšmė iš šios pasikartojančios šešios numeriai 1598 01:17:12,680 --> 01:17:18,560 visoje viktorina 1, mes jus savo su puikiais dėmesys, galutinis 1599 01:17:18,560 --> 01:17:21,610 paskaita ir streso kamuolys. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Gražus, subtilus. 1602 01:17:27,790 --> 01:17:29,570 >> ROB Bowden: Bet paskutiniai klausimai nieko apie viktorinos? 1603 01:17:29,570 --> 01:17:32,608