1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. Malan: Bone. 3 00:00:12,900 --> 00:00:16,790 Do bonvenon al la unua iam CS50 postmortem por kvizon. 4 00:00:16,790 --> 00:00:18,340 Ni pensis ke ni inaŭguros tiun tradicion ĉi jaron. 5 00:00:18,340 --> 00:00:20,960 Kaj tio estos okazo marŝi tra la 6 00:00:20,960 --> 00:00:22,220 solvojn al la kvizo. 7 00:00:22,220 --> 00:00:26,160 Kaj ni vidos plirapidigi aŭ malrapidigi bazita en intereso de tiuj ĉi tien. 8 00:00:26,160 --> 00:00:29,730 >> Do vi estas probable tie ĉar vi estas interesiĝas pri kio vi povus havi aŭ 9 00:00:29,730 --> 00:00:31,170 devus esti respondis iuj de tiuj problemoj. 10 00:00:31,170 --> 00:00:33,300 Do kial ni ne tuj iri en ĉi tiu sekcio unue? 11 00:00:33,300 --> 00:00:34,450 Do atingi kordoj. 12 00:00:34,450 --> 00:00:37,600 Tio donis al vi tri malsamaj versioj de programo kiu estis, finfine, 13 00:00:37,600 --> 00:00:39,650 signifis akiri kordo de uzanto. 14 00:00:39,650 --> 00:00:42,530 Ĉu aŭ ĉu ne ĝi faris ke estis lasis al vi determini. 15 00:00:42,530 --> 00:00:45,150 >> Kaj ni demandis en Demando 0, supozu ke la versio 1 estas 16 00:00:45,150 --> 00:00:46,400 kompilis kaj ekzekutita. 17 00:00:46,400 --> 00:00:48,860 Kial eble la programo segfault? 18 00:00:48,860 --> 00:00:51,150 Je unua rigardo, ia sugestoj kial? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Jes. 21 00:00:54,489 --> 00:00:59,260 >> Spektantaro: Tiel mi memoras vidi tion en antaŭa ekzemplo rigardante la 22 00:00:59,260 --> 00:01:05,506 char * s, kaj vidante la scan de la s kaj vidante ĉar ĝi estas montrilon, kiel 23 00:01:05,506 --> 00:01:07,971 cxu gxi tuŝi kion vi escaneados en? 24 00:01:07,971 --> 00:01:10,940 Ĉu s aŭ la adreso de s? 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. Malan: okej. 26 00:01:11,180 --> 00:01:11,480 Bona. 27 00:01:11,480 --> 00:01:14,830 Do fine, la fonto de iu ajn problemo Estas supozeble tuj redukti 28 00:01:14,830 --> 00:01:16,210 por ke variablo s. 29 00:01:16,210 --> 00:01:17,280 Kaj ĝi estas ja variablo. 30 00:01:17,280 --> 00:01:19,900 La datumtipo de tiu variablo estas char *, kio signifas ke ĝi tuj 31 00:01:19,900 --> 00:01:22,570 enhavas la adreson de karaktero. 32 00:01:22,570 --> 00:01:23,850 Kaj tie radikas la komprenon. 33 00:01:23,850 --> 00:01:28,330 Ĝi tuj enhavas la adreson de gravulo aŭ, pli ĝenerale, la 34 00:01:28,330 --> 00:01:32,110 adreso de la unua signo en tutan blokon de karakteroj. 35 00:01:32,110 --> 00:01:36,680 >> Sed la ruzo estas ke scan s, celon en vivo, estas donita adreson kaj donis 36 00:01:36,680 --> 00:01:40,960 formato kodon, kiel% s, legi ŝnureto en la eron de 37 00:01:40,960 --> 00:01:42,330 memoro en tiu adreso. 38 00:01:42,330 --> 00:01:46,040 Sed ĉar mankas egalsigno antaŭe ke punktokomo sur la unua 39 00:01:46,040 --> 00:01:49,310 linio de kodo, ĉar ni ne reale atribui ajnan memoro kun 40 00:01:49,310 --> 00:01:53,020 malloc, ĉar ĝi ne reale destini tabelo de iuj dimensioj, ĉiuj 41 00:01:53,020 --> 00:01:57,620 vi faras legas la uzanto klavaro enigo en iuj kompletaj 42 00:01:57,620 --> 00:02:00,490 rubo valoro, kiun estas en s defaŭlte. 43 00:02:00,490 --> 00:02:04,480 Do malakordo vi tuj segfault se tiu adreso ne ĝuste tiel okazos 44 00:02:04,480 --> 00:02:08,009 esti valoro kiun vi povas, fakte, skribu al. 45 00:02:08,009 --> 00:02:10,889 Do malbona ne destini via memoro tie. 46 00:02:10,889 --> 00:02:13,150 >> Do, en demando 1, ni demandis, supozu ke la versio 2 estas 47 00:02:13,150 --> 00:02:14,230 kompilis kaj ekzekutita. 48 00:02:14,230 --> 00:02:15,900 Kial eble tiu programo segfault? 49 00:02:15,900 --> 00:02:17,990 Do ĉi tiu estas malpli kalesxo. 50 00:02:17,990 --> 00:02:21,470 Kaj estas vere nur unu evidenta vojo, kie vi povas 51 00:02:21,470 --> 00:02:22,810 deĉenigi segfault tie. 52 00:02:22,810 --> 00:02:23,730 Kaj jen estas temático. 53 00:02:23,730 --> 00:02:28,180 Ajna tempo ni uzas c en memoro, kio vi povus fari por indukti segfault 54 00:02:28,180 --> 00:02:30,718 kun la versio 2? 55 00:02:30,718 --> 00:02:35,560 >> Spektantaro: Se vi uzas tiun enigo en ĉeno kiu estas pli longa ol 49 56 00:02:35,560 --> 00:02:35,975 karakteroj. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. Malan: Ekzakte. 58 00:02:37,260 --> 00:02:41,420 Ajna tempo vi vidos io fiksita longeco kiam temas pri tabelo, via 59 00:02:41,420 --> 00:02:44,650 radaro devus foriri tiu ĉi povus esti problema se vi ne estas kontrolanta la 60 00:02:44,650 --> 00:02:45,810 limoj de tabelo. 61 00:02:45,810 --> 00:02:46,650 Kaj tio estas la problemo ĉi tie. 62 00:02:46,650 --> 00:02:47,910 Ni daŭre uzante scanf. 63 00:02:47,910 --> 00:02:52,200 Ni daŭre uzante% s, kiu signifas provi legi ĉenon de la uzanto. 64 00:02:52,200 --> 00:02:56,300 Tio okazas al esti legata en s, kiuj, ĉe tiu punkto, estas efektive la 65 00:02:56,300 --> 00:02:58,570 adreso de eron de memoro aŭ ĝi estas ekvivalento. 66 00:02:58,570 --> 00:03:02,080 Ĝi estas la nomo de tabelo el karakteroj de memoro. 67 00:03:02,080 --> 00:03:07,610 >> Sed ĝuste tio, se vi legis kordo ke estas pli longaj ol 49 signoj, 49 68 00:03:07,610 --> 00:03:10,440 ĉar vi bezonas cxambron por la backslash 0, vi tuj dronigos 69 00:03:10,440 --> 00:03:11,390 ke bufro. 70 00:03:11,390 --> 00:03:16,410 Kaj eble vi ricevas sorton kaj esti kapabla skribi 51-a karaktero, 52nd, 53a. 71 00:03:16,410 --> 00:03:18,560 Sed en iu momento, la VIN tuj diru, ke ne. 72 00:03:18,560 --> 00:03:21,270 Tiu certe ne estas memoro vi rajtas tuŝi. 73 00:03:21,270 --> 00:03:23,380 Kaj la programo tuj segfault. 74 00:03:23,380 --> 00:03:26,650 >> Do, la heurísticas devus esti neniu tempo vi havas fiksa longeco, vi havas 75 00:03:26,650 --> 00:03:30,150 por certiĝi vi kontrolanta la longo de ĉiu kiu estas vi provas 76 00:03:30,150 --> 00:03:31,090 legi en ĝi. 77 00:03:31,090 --> 00:03:35,110 >> Spektantaro: Do ​​por solvi tion, vi povus havis komunikaĵo kontrolanta reale 78 00:03:35,110 --> 00:03:37,140 estas la longo pli granda ol aŭ malpli ol? 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. Malan: Absolute. 80 00:03:37,730 --> 00:03:41,706 Vi nur devas kondiĉo kiu diras, se la - 81 00:03:41,706 --> 00:03:46,080 aŭ prefere vi ne nepre scias anticipe kiom da karakteroj la 82 00:03:46,080 --> 00:03:49,060 uzanto tuj tajpi, ĉar vi havas kokinon kaj la ovo. 83 00:03:49,060 --> 00:03:51,860 Ne ĝis kiam vi mem legis gxin en kun scanf ĉu vi povas eltrovi kiom longe ĝi estas. 84 00:03:51,860 --> 00:03:54,500 Sed je tiu punkto, estas tro malfrue, ĉar vi jam legis ĝin en 85 00:03:54,500 --> 00:03:55,710 iuj bloko de memoro. 86 00:03:55,710 --> 00:03:59,590 Do kiel apartigas, la CS50 biblioteko Evitas tiu temo en aro, recall 87 00:03:59,590 --> 00:04:01,060 uzante fgetc. 88 00:04:01,060 --> 00:04:05,390 Kaj legas unu karaktero samtempe, tip-toeing kune, sciante, ke vi 89 00:04:05,390 --> 00:04:08,060 povas ne dronigos karaktero se Vi legas unuope. 90 00:04:08,060 --> 00:04:11,580 >> La ruzo estas kun getstring revokon estas ke ni devas konstante re-grandeco 91 00:04:11,580 --> 00:04:13,590 ke eron de memoro, kiun Estas nur la doloro. 92 00:04:13,590 --> 00:04:15,310 Estas multe da linioj de kodo por fari tion. 93 00:04:15,310 --> 00:04:18,779 Do alian alproksimiĝon estus efektive uzi kuzo, do 94 00:04:18,779 --> 00:04:19,790 paroli, el scanf. 95 00:04:19,790 --> 00:04:22,820 Ekzistas variantoj de multe da tiuj funkcioj kiuj reale kontrolu la 96 00:04:22,820 --> 00:04:25,870 longeco de kiom da karakteroj vi eble legis maksimume. 97 00:04:25,870 --> 00:04:29,430 Kaj vi povus precizigi, ne legu pli ol 50 signoj. 98 00:04:29,430 --> 00:04:34,110 Do kiu estus alia alproksimiĝo sed malpli akomodi de pli grandaj enigoj. 99 00:04:34,110 --> 00:04:37,040 >> Do pridubi 2 petas, supozu ke versio 3 estas kompilita kaj ekzekutita. 100 00:04:37,040 --> 00:04:39,960 Kial eble tiu programo segfault? 101 00:04:39,960 --> 00:04:42,650 Do ĉi tiu estas vere la sama respondu, kvankam ĝi 102 00:04:42,650 --> 00:04:43,590 aspektas iom amatoro. 103 00:04:43,590 --> 00:04:46,440 Ni uzas malloc, kiuj sentas kiel Ni donas al ni pli da ebloj. 104 00:04:46,440 --> 00:04:48,030 Kaj tiam ni liberigante ke memoron ĉe la fino. 105 00:04:48,030 --> 00:04:49,580 Ĝi estas ankoraŭ nur 50 bitokoj de memoro. 106 00:04:49,580 --> 00:04:53,620 Do ni povus ankoraŭ provas legi en 51, 52, 1000 bajtoj. 107 00:04:53,620 --> 00:04:55,830 Ĝi tuj segfault por precize la sama kialo. 108 00:04:55,830 --> 00:04:57,530 >> Sed estas alia kialo tro. 109 00:04:57,530 --> 00:05:03,890 Kion alian povis malloc reveno krom la adreso de eron de memoro? 110 00:05:03,890 --> 00:05:04,920 Ĝi povis reveni nula. 111 00:05:04,920 --> 00:05:07,560 Kaj ĉar ni ne kontrolas por ke ni povus fari ion 112 00:05:07,560 --> 00:05:11,350 stulta pro alia kialo, kiu estas tiu Ni povus diri scanf, legi 113 00:05:11,350 --> 00:05:16,050 la uzanto enigon el la klavaro en 0 situo, AKA nula. 114 00:05:16,050 --> 00:05:18,890 Kaj tio, tro, definitive deĉenigi segfault. 115 00:05:18,890 --> 00:05:21,590 Do por la kvizo la celo, ni volas esti akceptita ankaŭ de tiuj, kiel 116 00:05:21,590 --> 00:05:22,740 valida kialo. 117 00:05:22,740 --> 00:05:23,420 Unu estas identaj. 118 00:05:23,420 --> 00:05:25,720 Unu estas iomete pli nuancita. 119 00:05:25,720 --> 00:05:28,975 >> Fine, kun respekto al la programo uzo de memoro, kiom fari versio 2 kaj 120 00:05:28,975 --> 00:05:30,350 Versio 3 diferencas? 121 00:05:30,350 --> 00:05:35,070 Do por kio valoras, ni vidis ŝajne senfina provizo de eblaj 122 00:05:35,070 --> 00:05:35,770 respondojn por ĉi tio. 123 00:05:35,770 --> 00:05:39,300 Kaj inter popola respondoj, kion ni estis esperante, sed ni akceptas aliajn 124 00:05:39,300 --> 00:05:42,250 aĵoj, estis iuj mencio de la fakto ke la versio 2 estas uzanta 125 00:05:42,250 --> 00:05:44,560 la tn pilo. 126 00:05:44,560 --> 00:05:46,710 Versio 3 estas uzanta la havaĵo. 127 00:05:46,710 --> 00:05:50,060 Kaj funkcie, tiu ne vere fari cxiujn ke multe de la diferencon. 128 00:05:50,060 --> 00:05:54,040 Je la fino de la tago, ni estas ankoraŭ nur nun 50 bitokoj de memoro. 129 00:05:54,040 --> 00:05:56,640 >> Sed tiu estis unu el la eblaj respondoj ke ni rigardis. 130 00:05:56,640 --> 00:05:59,730 Sed vi vidos, kiel vi ricevis viajn kvizojn liberigitan el TFS, ke ni faris 131 00:05:59,730 --> 00:06:04,330 akcepti aliajn diskutojn de ilia dispar uzoj de memoro tiel. 132 00:06:04,330 --> 00:06:08,600 Sed pilo kaj amason estus estinta facilan respondon akompani. 133 00:06:08,600 --> 00:06:11,150 Demandojn? 134 00:06:11,150 --> 00:06:12,400 Mi donos al vi Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB Bowden: Do problemo 4. 137 00:06:20,210 --> 00:06:21,985 Ĉi tio estas unu kie vi devis plenigi en la nombro de bitokoj, el cxiuj 138 00:06:21,985 --> 00:06:23,460 tiuj malsamaj tipoj uzataj. 139 00:06:23,460 --> 00:06:24,830 Do ni unue vidas. 140 00:06:24,830 --> 00:06:27,930 Alpreni 32-bita arkitekturo, kiel tiu CS50 aparaton. 141 00:06:27,930 --> 00:06:33,530 Do unu el la fundamentaj aferoj pri 32-bita arkitekturoj, kiuj diras al ni 142 00:06:33,530 --> 00:06:37,490 ekzakte kiom granda puntero tuj esti en la arkitekturo. 143 00:06:37,490 --> 00:06:43,020 >> Do tuj, ni scias, ke iu montrilo tipo estas la 32-bitoj aŭ 4 bitokoj. 144 00:06:43,020 --> 00:06:46,010 Do rigardante tiun tabulon, a nodo * estas montrilo tipo. 145 00:06:46,010 --> 00:06:47,250 Tio tuj estos 4 bitokoj. 146 00:06:47,250 --> 00:06:51,640 Struct nodo *, tio estas laŭvorte identa al nodo stelo. 147 00:06:51,640 --> 00:06:53,590 Kaj por ke tuj estos 4 bitokoj. 148 00:06:53,590 --> 00:06:58,270 Kordo, do tio ne aspektas kiel Pointer ankoraŭ, sed la typedef, a 149 00:06:58,270 --> 00:07:01,590 kordo estas nur char *, kiun estas montrilo tipo. 150 00:07:01,590 --> 00:07:03,550 Do tiu tuj estos 4 bitokoj. 151 00:07:03,550 --> 00:07:06,150 >> Kaj tiuj tri estas ĉiuj 4 bitokoj. 152 00:07:06,150 --> 00:07:09,350 Nun, nodo kaj studento estas iom pli komplika. 153 00:07:09,350 --> 00:07:15,160 Do rigardante nodo kaj studentaj, ni vidas nodo kiel entjero kaj montrilo. 154 00:07:15,160 --> 00:07:18,050 Kaj studento estas du montriloj interne de ĝi. 155 00:07:18,050 --> 00:07:23,340 Do almenaŭ por nia kazo tie ĉi, la vojon ke ni finu la kalkuli la grandecon de 156 00:07:23,340 --> 00:07:27,020 ĉi struct estas nur aldonu ĉion kiu estas interne de la struct. 157 00:07:27,020 --> 00:07:30,690 >> Do por nodo, ni havas entjero, kio estas 4 bitokoj. 158 00:07:30,690 --> 00:07:32,830 Ni havas montrilon, kiu estas 4 bitokoj. 159 00:07:32,830 --> 00:07:35,820 Kaj do unu nodo tuj preni 8 bajtoj. 160 00:07:35,820 --> 00:07:39,490 Kaj simile por studento, ni havi montrilo tio 4 bajtoj kaj alia 161 00:07:39,490 --> 00:07:40,770 montrilo tio 4 bitokoj. 162 00:07:40,770 --> 00:07:43,180 Por ke okazas al fino estante 8 bajtoj. 163 00:07:43,180 --> 00:07:45,480 Do nodo kaj studento estas 8 bajtoj. 164 00:07:45,480 --> 00:07:48,950 Kaj tiuj tri estas ĉiuj 4 bitokoj. 165 00:07:48,950 --> 00:07:50,240 Demandojn pri tio? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Jes. 168 00:07:54,990 --> 00:07:58,413 >> Spektantaro: CXu estis 64-bita arkitekturo, volus, ke 169 00:07:58,413 --> 00:07:59,880 duobligi ĉiuj el ili? 170 00:07:59,880 --> 00:08:01,790 >> ROB Bowden: Ĝi ne volis duobligi ĉiuj el ili. 171 00:08:01,790 --> 00:08:05,830 Do 64-bita arkitekturo, ĝi, denove, ŝanĝoj kiuj fundamenta afero, kiun oni 172 00:08:05,830 --> 00:08:08,910 montrilo estas nun 64 bitojn. 173 00:08:08,910 --> 00:08:09,290 Jes. 174 00:08:09,290 --> 00:08:10,930 Do puntero estas 8 bajtoj. 175 00:08:10,930 --> 00:08:15,420 Do tiuj kiuj estis 4 bitokoj tuj estos la 8 bajtoj. 176 00:08:15,420 --> 00:08:18,617 Studento, kiu estis du montriloj, bone, nun ĝi estas tuj 177 00:08:18,617 --> 00:08:19,800 esti 8 bajtoj, 8 bajtoj. 178 00:08:19,800 --> 00:08:21,980 Ĝi tuj fari 16 bajtoj. 179 00:08:21,980 --> 00:08:25,710 >> Sed nodo estas ankoraŭ 4 bitokoj. 180 00:08:25,710 --> 00:08:27,800 Do tiu montrilon tuj esti 8 bajtoj. 181 00:08:27,800 --> 00:08:28,930 Tiu estas 4 bitokoj. 182 00:08:28,930 --> 00:08:30,870 Do nodo nur tuj esti 12 bajtoj. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Ajna alia demandojn pri tiu? 185 00:08:39,280 --> 00:08:44,500 Do la proksimaj unu, jen estas la HTTP statuso kodoj. 186 00:08:44,500 --> 00:08:48,000 Kaj vi devis priskribi cirkonstancoj sub kiu tiuj heroajxoj 187 00:08:48,000 --> 00:08:49,810 revenos al vi. 188 00:08:49,810 --> 00:08:56,730 unu problemo, kiun mi auxdis kelkajn studentojn havas estas ke ili provis fari la 189 00:08:56,730 --> 00:08:58,950 eraroj estos cxe la kliento fino. 190 00:08:58,950 --> 00:09:02,320 Do kiam ni provos fari la peton al la servilo, io iras 191 00:09:02,320 --> 00:09:03,820 erara sur nia fino. 192 00:09:03,820 --> 00:09:07,660 Sed ĝenerale, tiuj kodoj estas esti redonata de la servilo. 193 00:09:07,660 --> 00:09:11,720 Do ni volas eltrovi, kio okazas erara aŭ rajto je la servilo 194 00:09:11,720 --> 00:09:14,280 kaŭzas tion esti reveninta. 195 00:09:14,280 --> 00:09:18,670 Do kial multobligita servilon revenoj statuso kodo 200? 196 00:09:18,670 --> 00:09:19,920 Ajna pensojn? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Jes. 199 00:09:23,730 --> 00:09:27,850 Do io pri sukcese peto trapasis. 200 00:09:27,850 --> 00:09:30,260 Kaj ili estas kapablaj reveni kion ajn vi petis. 201 00:09:30,260 --> 00:09:32,240 Do ĉio iris bone. 202 00:09:32,240 --> 00:09:35,662 Kio pri 302 trovitaj? 203 00:09:35,662 --> 00:09:36,618 Jes. 204 00:09:36,618 --> 00:09:39,008 >> Spektantaro: La servilo rigardis por kio vi petis. 205 00:09:39,008 --> 00:09:40,442 Sed tio ne povis trovi ĝin. 206 00:09:40,442 --> 00:09:42,850 Do tie estas eraro. 207 00:09:42,850 --> 00:09:47,720 >> ROB Bowden: Do la servilo estis serĉas, kion vi volis. 208 00:09:47,720 --> 00:09:51,682 Do nur rigardas tien, 302 trovis, ĝi sukcesis trovi ĝin. 209 00:09:51,682 --> 00:09:53,035 >> Spektantaro: mi bedaŭras. 210 00:09:53,035 --> 00:09:54,388 Trovita signifas ke ili faris gxin trovi. 211 00:09:54,388 --> 00:09:55,638 Pardonon. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB Bowden: Do 302 trovitaj. 214 00:10:00,160 --> 00:10:02,350 La servilo povas trovi kion vi volis. 215 00:10:02,350 --> 00:10:04,640 >> Spektantaro: Sed ĝi ne estas montri ĝin? 216 00:10:04,640 --> 00:10:08,180 >> ROB Bowden: La diferenco inter ĉi 302 kaj 200 estas ke gxi 217 00:10:08,180 --> 00:10:09,280 scias kion vi volas. 218 00:10:09,280 --> 00:10:12,000 Sed gxi ne estas precize kie Vi volis demandi. 219 00:10:12,000 --> 00:10:14,580 Do 302 estas tipa alidirektadon. 220 00:10:14,580 --> 00:10:16,510 Do vi petis paĝon. 221 00:10:16,510 --> 00:10:19,590 Ĝi scias, ho, mi deziras redoni al vi ĉi. 222 00:10:19,590 --> 00:10:21,070 Sed tio estas je malsama retadreso. 223 00:10:21,070 --> 00:10:23,534 Do bona, vi vere volas tion. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. Malan: Ĝi estas peco kiu diris ke ni donis al vi uloj estas alidirektadoj 225 00:10:26,950 --> 00:10:30,830 funkcio kiu uzis la kaplinion funkcio kiuj, siavice, presita ekster situo, 226 00:10:30,830 --> 00:10:34,110 dupunkto, kaj tiam la URL por kio vi volas malakcepti la uzanto. 227 00:10:34,110 --> 00:10:37,480 Eĉ se vi ne vidis 302 eksplicite tie, tio estas kion PHP- 228 00:10:37,480 --> 00:10:41,550 estus magie enŝovu la kaplinio dirante precize kion Rob diris tie - 229 00:10:41,550 --> 00:10:41,930 trovita. 230 00:10:41,930 --> 00:10:43,180 Sed iru tien anstataŭe. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB Bowden: okej. 233 00:10:46,160 --> 00:10:47,630 Do kio pri 403 malpermesita? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Spektantaro: Mi kredas ke estas ke la servilo Estas esence dirante ke la klienton 236 00:10:57,120 --> 00:10:59,970 ne povas aliri la ĉefpaĝon. 237 00:10:59,970 --> 00:11:03,260 >> ROB Bowden: Do jes. 238 00:11:03,260 --> 00:11:07,670 Nu, la tipa respondo ni estis atendante, estas io kiel, la dosieroj 239 00:11:07,670 --> 00:11:08,920 ne chmodded taŭge. 240 00:11:08,920 --> 00:11:11,590 Tio probable sub kiaj cirkonstancoj vi vidis ilin. 241 00:11:11,590 --> 00:11:18,920 Sed ekzistas kialo, ke la kliento povus esti je kulpo ĉi tie. 242 00:11:18,920 --> 00:11:20,440 Tie estas vere alia statuso kodo - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Do ĉi tiuj estas tre similaj. 245 00:11:22,820 --> 00:11:24,590 >> 401 estas rajtigita. 246 00:11:24,590 --> 00:11:26,130 Kaj 403 estas malpermesata. 247 00:11:26,130 --> 00:11:31,890 Kaj tia senpermesa vin ekskluzive akiri, se vi ne estas ensalutinta 248 00:11:31,890 --> 00:11:34,520 Sed ensalutante povus signifi ke vi estas rajtigita. 249 00:11:34,520 --> 00:11:37,930 Sed se vi jam salutanta kaj vi ankoraŭ ne havas permeson, tiam 250 00:11:37,930 --> 00:11:40,140 vi povas ankaŭ preni malpermesitan. 251 00:11:40,140 --> 00:11:45,320 Do se vi estas ensalutinta, kaj ne havas permeson, malpermesita estas ankaŭ 252 00:11:45,320 --> 00:11:47,164 io, kion vi povas akiri. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. Malan: Kaj la mekanismo per kiu tiuj problemoj estas kutime 254 00:11:48,900 --> 00:11:53,100 solvitaj sur la servilo estas tra kio komandon? 255 00:11:53,100 --> 00:11:57,700 Chmod, se ĝi estas, efektive, permesojn ekspedi en la dosiero aŭ dosierujo. 256 00:11:57,700 --> 00:11:59,220 >> ROB Bowden: Tiam 404 Ne trovis. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Jes. 259 00:12:03,470 --> 00:12:10,150 Do malkiel 302, kie oni ne ekzakte kie vi petante sed scias kion 260 00:12:10,150 --> 00:12:12,710 oni volas, tion, ĝi nur havas nenian ideon kion vi volas. 261 00:12:12,710 --> 00:12:15,648 Kaj vi ne petante io validas. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Mi estas tekruĉo kaj poste 500 internajn servilo. 264 00:12:22,310 --> 00:12:24,870 Do kial eble vi ricevas tion? 265 00:12:24,870 --> 00:12:26,120 >> Do segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Mi vere ne scias la grading normo por ĉi tio. 268 00:12:30,640 --> 00:12:34,850 Sed se via PHP-kodo havis ion malbone en ĝi, en teorio, ĝi povis 269 00:12:34,850 --> 00:12:39,650 reale segfault, en kiu kazo, ĉi 500 internajn servilo eraro, iu 270 00:12:39,650 --> 00:12:41,400 estas malĝusta kun via servilo agordo. 271 00:12:41,400 --> 00:12:44,320 Aux tie estas sintaksa eraro en via PHP-kodo. 272 00:12:44,320 --> 00:12:46,095 Aux io malbona okazas. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. Malan: Ni vidis, segfault inter malmultaj popola respondojn. 274 00:12:48,320 --> 00:12:49,490 Kaj teknike, ĝi povus okazi. 275 00:12:49,490 --> 00:12:53,820 Sed tio estus PHP, la programo skribitaj de aliaj personoj, reale 276 00:12:53,820 --> 00:12:57,790 segfaulted, kiu nur se tiuj homoj ŝraŭbita kaj skribis kalesxo kodo 277 00:12:57,790 --> 00:13:00,680 ilia interpretisto farus PHP mem segfault. 278 00:13:00,680 --> 00:13:06,460 Do eĉ se 500 estas kiel segfault en spirito, ĝi estas preskaŭ ĉiam la 279 00:13:06,460 --> 00:13:10,490 rezulto de agordo-dosiero afero kun via ttt-servilo aŭ, kiel Rob diris, 280 00:13:10,490 --> 00:13:13,200 sintakson eraro, kiel vi ne fermas citaĵon. 281 00:13:13,200 --> 00:13:16,180 Aŭ vi perdis punktokomo ie. 282 00:13:16,180 --> 00:13:23,677 >> Spektantaro: Do ​​pro la Shuttle pset, mi pensas, kiam mi faris tion unufoje Mi klakis la 283 00:13:23,677 --> 00:13:26,300 retumilo, sed nenio okazis, kion oni nomas blanka paĝo. 284 00:13:26,300 --> 00:13:28,056 Sed ĝi estis pro la kodon. 285 00:13:28,056 --> 00:13:29,440 Mi pensas ke estis JavaScript, ĉu ne? 286 00:13:29,440 --> 00:13:29,770 >> ROB Bowden: Jes. 287 00:13:29,770 --> 00:13:31,180 >> Spektantaro: Ĉu tiu eraro ankoraŭ sin levas? 288 00:13:31,180 --> 00:13:34,290 >> ROB Bowden: Do vi ne estus alveninta tiu eraro ĉar ĉiu 289 00:13:34,290 --> 00:13:36,930 de la TTT-servilo perspektivo Estis tute bone. 290 00:13:36,930 --> 00:13:39,090 Sed vi petis index.html. 291 00:13:39,090 --> 00:13:42,000 Vi petis shuttle.js kaj service.js. 292 00:13:42,000 --> 00:13:44,580 Kaj ĝi povis sukcese revenos al vi cxiuj el tiuj aĵoj - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Estas nur kiam via retumilo provis interpreti la JavaScript-kodon 296 00:13:49,330 --> 00:13:51,370 ĝi estas kiel, atendu, tio ne estas valida JavaScript eraro. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Ajna alia demandojn? 299 00:13:58,210 --> 00:14:00,750 Ĉiuj pravas. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. Malan: Do apud supren estis numero 11. 301 00:14:04,120 --> 00:14:07,610 Kaj 11 estis la plej delira cxar multe da homoj. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Do la plej grava afero por noti ĉi tie estis, ke tiu estis, efektive, pri 304 00:14:18,570 --> 00:14:19,840 duoble ligillisto. 305 00:14:19,840 --> 00:14:23,160 Sed tio ne estis la sama kiel pasintjara duoble ligillisto problemo, 306 00:14:23,160 --> 00:14:27,170 kiuj ne donis al vi la averto ke la listo povus, fakte, estus Unsorted. 307 00:14:27,170 --> 00:14:29,640 >> Do la fakto ke la listo estis Unsorted kaj la fakto ke tiu vorto estis 308 00:14:29,640 --> 00:14:32,930 substrekita tie oni intencis transdoni ke ĉi tio vere estas simpligo 309 00:14:32,930 --> 00:14:35,430 de kio alimaniere estus estinta pli defia problemo 310 00:14:35,430 --> 00:14:36,600 kaj pli longa unu. 311 00:14:36,600 --> 00:14:40,760 Do oni komuna eraro ĉi tie estis esti metita pasintjara solvo je via oni 312 00:14:40,760 --> 00:14:45,580 pager kaj tiam simple blinde kopii tiun malsupren kiel la respondon, kiu estas dekstre 313 00:14:45,580 --> 00:14:48,520 respondi al malsama demando simila en spirito. 314 00:14:48,520 --> 00:14:51,340 Sed la subtilaĵoj tien estis jene. 315 00:14:51,340 --> 00:14:55,200 >> Do, ni jam nodo deklaris kaj difinita en la kutima maniero ĉi tie. 316 00:14:55,200 --> 00:14:59,230 Tiam ni difinis listo de esti tutmonda montrilo pravalorizita al nula. 317 00:14:59,230 --> 00:15:02,150 Tiam ŝajne, estas du funkcioj ni havos prototipoj por tie, insert 318 00:15:02,150 --> 00:15:03,240 kaj forigi. 319 00:15:03,240 --> 00:15:06,600 Kaj tiam ni havas iun specimenon kodo tien fari faskon de interpolaciones. 320 00:15:06,600 --> 00:15:09,930 Kaj tiam ni demandos vin kompletigi la efektivigo de insert malsupre en tia 321 00:15:09,930 --> 00:15:14,380 maniero, ke ĝi enmetas n enen la listo en konstanta tempo, ankaŭ substrekis, 322 00:15:14,380 --> 00:15:15,730 eĉ se jam ĉeestas. 323 00:15:15,730 --> 00:15:20,600 >> Do la belecon de povi enigi en konstanta tempo estas ke ĝi implicas 324 00:15:20,600 --> 00:15:23,060 ke vi devas enigi la nova vertico kie? 325 00:15:23,060 --> 00:15:23,690 En la fronto. 326 00:15:23,690 --> 00:15:27,760 Do ĝi forigas, dankeme, almenaŭ unu el la kazoj kiujn uzis por postuli 327 00:15:27,760 --> 00:15:30,520 eĉ pli linioj de kodo, kiel ĝi faris lasta jaro kaj eĉ en la klaso, kiam ni 328 00:15:30,520 --> 00:15:34,040 parolis per ĉi tiu speco de afero kun homoj kaj kun iu 329 00:15:34,040 --> 00:15:35,250 verba pseŭdo-kodo. 330 00:15:35,250 --> 00:15:39,190 Do la solvo ĉi tie, ni salti super por ke ĝuste havi vidan sur 331 00:15:39,190 --> 00:15:40,480 la ekrano. 332 00:15:40,480 --> 00:15:42,230 >> Rimarku ke ni faras la sekvan. 333 00:15:42,230 --> 00:15:45,140 Kaj ankaŭ rimarkos la aliaj plisimpligo estis, ke eĉ se ĝi estas 334 00:15:45,140 --> 00:15:48,280 jam ĉeestas, do tio signifas, eĉ se la nombro jam estas tie, vi povas 335 00:15:48,280 --> 00:15:50,280 nur blinde enmeti alian kopion de ĝi. 336 00:15:50,280 --> 00:15:52,560 Kaj tio, tro, ĝi signifis esti plisimpligo, por ke vi povis 337 00:15:52,560 --> 00:15:54,940 enfokusigi, vere, iu de la pli intelekte interesan parton kaj 338 00:15:54,940 --> 00:15:58,090 Ne nur iuj aldonaj eraro kontrolanta donita la limigita tempo. 339 00:15:58,090 --> 00:16:02,880 >> Do en tiu specimeno solvo, ni rezervu puntero sur la maldekstra mano 340 00:16:02,880 --> 00:16:04,510 flanken tien por nodo. 341 00:16:04,510 --> 00:16:07,190 Nun, rimarkas ke montrilon, kiel Rob diris, estas nur 32 bitoj. 342 00:16:07,190 --> 00:16:09,060 Kaj ĝi ne reale enhavi adreso, ĝis vi 343 00:16:09,060 --> 00:16:09,970 atribui al ĝi la adreson. 344 00:16:09,970 --> 00:16:13,220 Kaj ni faru tion en la dekstra mano flankon per malloc. 345 00:16:13,220 --> 00:16:16,550 Kiel bona civitano, ni kontrolu ke malloc ne estas, fakte, nula, tial ke 346 00:16:16,550 --> 00:16:18,690 ni ne akcidente krei a segfault tie. 347 00:16:18,690 --> 00:16:22,840 Kaj iam vi uzas malloc en vivo, vi devus esti kontrolanta por nula, por ke 348 00:16:22,840 --> 00:16:24,090 vi havas subtilan cimon. 349 00:16:24,090 --> 00:16:28,460 >> Tiam ni pravalorizi ke nula por atribuante n kaj antaŭa kaj sekva. 350 00:16:28,460 --> 00:16:32,450 Kaj en tiu kazo ĉi tie, mi pravalorizita antaŭaj al nula, ĉar ĉi nova 351 00:16:32,450 --> 00:16:34,780 nodo tuj estos la nova komencante de mia listo. 352 00:16:34,780 --> 00:16:37,050 Do tuj estos nenion antaux gxi. 353 00:16:37,050 --> 00:16:42,010 Kaj mi volas esence append la ekzistantan liston al la nova vertico per 354 00:16:42,010 --> 00:16:44,700 opcio apud egala al listo mem. 355 00:16:44,700 --> 00:16:47,120 Sed mi ne agis ĝuste ankoraŭ. 356 00:16:47,120 --> 00:16:51,780 Do se la listo mem jam ekzistis, kaj tie estis almenaŭ unu nodo 357 00:16:51,780 --> 00:16:57,070 Jam en tiu loko, se ĉi tiu estas la listo ĉi tie kaj mi enmeti novan nodon tie, mi 358 00:16:57,070 --> 00:17:01,840 bezonas certigi ke mia iama nodo antaŭ malantaŭen al mia nova nodo, 359 00:17:01,840 --> 00:17:04,260 ĉar ĉi tio estas, denove, duoble ligillisto. 360 00:17:04,260 --> 00:17:05,460 >> Do ni faras prudento ĉekon. 361 00:17:05,460 --> 00:17:10,109 Se listo ne estas nula, se estas jam unu aŭ pli da nodoj tie, tiam 362 00:17:10,109 --> 00:17:12,470 aldoni ke reen referenco por tiel diri. 363 00:17:12,470 --> 00:17:15,420 Kaj tiam la lasta afero kiun ni bezonas fari estas vere aktualigi la tutmonda 364 00:17:15,420 --> 00:17:20,329 variablo listo mem atentigi al tiu nova nodo. 365 00:17:20,329 --> 00:17:21,790 Jes. 366 00:17:21,790 --> 00:17:26,579 >> Spektantaro: En la montrilon sago [Inaudibles] egalas nula, faras ke 367 00:17:26,579 --> 00:17:30,420 pritrakti la listo ĉar la listo estas nula? 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. Malan: Nope. 369 00:17:30,596 --> 00:17:34,500 Tio estas simple mi esti proactivamente Atentu, ke se ĉi tiu estas mia 370 00:17:34,500 --> 00:17:38,730 originalaj liston kun eble kelkaj pli nodoj super ĉi tie kaj mi enmeto mia 371 00:17:38,730 --> 00:17:42,380 novan nodon super cxi tie, tie okazas esti superflue tie ĉi. 372 00:17:42,380 --> 00:17:44,720 Kaj mi volas kapti tiun ideon per opcio antaŭa al 373 00:17:44,720 --> 00:17:47,740 nula en la nova nodo. 374 00:17:47,740 --> 00:17:51,410 Kaj supozeble, se mia kodo estas korekta kaj tie estas alia maniero por enmeti 375 00:17:51,410 --> 00:17:54,970 nodojn alia ol tiu funkcio, supozeble, eĉ se listo havas jam 376 00:17:54,970 --> 00:18:00,090 unu aŭ pli da nodoj en ĝin, supozeble la listo, la unua nodo, havus 377 00:18:00,090 --> 00:18:02,750 antaŭa montrilon de nula mem. 378 00:18:02,750 --> 00:18:03,550 >> Spektantaro: Kaj nur sekvado. 379 00:18:03,550 --> 00:18:08,139 La kialo vi metis montrilon sekvanta egaluloj listo estas vi farante la montrilo 380 00:18:08,139 --> 00:18:13,579 antaŭ listo en tiu ĝi estas montrante al la sekva, mi supozas - 381 00:18:13,579 --> 00:18:14,980 Mi ne batu - 382 00:18:14,980 --> 00:18:15,450 nur listigas? 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. Malan: Ekzakte. 384 00:18:16,400 --> 00:18:19,400 Kaj do ni efektive konsideri du kazoj tie vere, eĉ kvankam la 385 00:18:19,400 --> 00:18:22,070 Por ni konsideras ilin ne tute la sama kiel la kodon. 386 00:18:22,070 --> 00:18:26,250 Sed sur alta nivelo, se ĉi tio reprezentas listo kaj tio estas 32-bita 387 00:18:26,250 --> 00:18:29,560 montrilo, la plej simpla scenejo estas ke ĉi tiu estas nula defaŭlte. 388 00:18:29,560 --> 00:18:33,010 Kaj supozu mi volas enmeti la numero 50 estis la unua numero. 389 00:18:33,010 --> 00:18:37,640 Do mi tuj iros antaŭen kaj destini nodo, kiu tuj enhavi 390 00:18:37,640 --> 00:18:38,770 tri kampoj - 391 00:18:38,770 --> 00:18:42,070 n, antaŭa kaj sekva. 392 00:18:42,070 --> 00:18:44,580 >> Mi tuj metos la nombro 50 ĉi tie, ĉar tio estos n. 393 00:18:44,580 --> 00:18:46,130 Ĉi tio estos proksima. 394 00:18:46,130 --> 00:18:48,530 Kaj ĉi tio estos antaŭa. 395 00:18:48,530 --> 00:18:50,910 Kaj do, kion mi faru en tiu kazo? 396 00:18:50,910 --> 00:18:53,900 Nu, mi ĵus faris linio 1 cxi tie. 397 00:18:53,900 --> 00:18:55,400 Pointer n gets n. 398 00:18:55,400 --> 00:18:57,740 Mi tiam diris, antaŭa devus preni nula. 399 00:18:57,740 --> 00:18:59,470 Do tiu tuj estos nula. 400 00:18:59,470 --> 00:19:01,365 Tiam Mi iros dirindan tuj alvenos listo. 401 00:19:01,365 --> 00:19:05,150 >> Kaj tio nur funkcias bone. 402 00:19:05,150 --> 00:19:06,500 Tiu estas nula. 403 00:19:06,500 --> 00:19:10,620 Kaj do mi diras, la nova nodo apud kampo devus preni kion ajn tio estas. 404 00:19:10,620 --> 00:19:12,570 Do kiu metas alian nula tie. 405 00:19:12,570 --> 00:19:14,510 Kaj tiam la lasta afero Mi estas kontrolu ĉi tie. 406 00:19:14,510 --> 00:19:17,870 Se listo ne estas egala al nula, sed estas egala al nula, tial ni saltos, ke 407 00:19:17,870 --> 00:19:18,470 aro. 408 00:19:18,470 --> 00:19:23,520 Kaj tial ĉiuj mi faras nun, estas listo gets montrilon, kiu pictóricamente rezultigas 409 00:19:23,520 --> 00:19:25,570 bildon tiel. 410 00:19:25,570 --> 00:19:26,620 Do jen unu scenaro. 411 00:19:26,620 --> 00:19:30,490 >> Kaj kiu vi demandis pri specife estas situacio kiel tiu, 412 00:19:30,490 --> 00:19:33,190 kie ni jam havas unu-nodo listo. 413 00:19:33,190 --> 00:19:36,240 Kaj se mi reirus en la originalo problemo komunikaĵo, la sekvanta Ni 414 00:19:36,240 --> 00:19:39,320 enŝovu diri estas 34, nur por pro diskuto. 415 00:19:39,320 --> 00:19:46,210 Do mi iros nur oportune cxerpi, ke ĉi tie. 416 00:19:46,210 --> 00:19:47,540 Mi ĵus malloced. 417 00:19:47,540 --> 00:19:49,310 Supozu mi kontrolanta por nula. 418 00:19:49,310 --> 00:19:51,870 >> Nu, mi tuj pravalorizi n al esti 34. 419 00:19:51,870 --> 00:19:53,040 Kaj tio estos n. 420 00:19:53,040 --> 00:19:54,670 Ĉi tio estos proksima. 421 00:19:54,670 --> 00:19:57,100 Kaj ĉi tio estos antaŭa. 422 00:19:57,100 --> 00:19:59,370 Ni certigu mi ne get this malantaŭen. 423 00:19:59,370 --> 00:20:01,110 Malantaŭa venas unue en la difino. 424 00:20:01,110 --> 00:20:03,070 Permesu al mi korekti tion. 425 00:20:03,070 --> 00:20:04,410 Tiu estas antaŭa. 426 00:20:04,410 --> 00:20:05,780 Ĉi tiu estas proksima. 427 00:20:05,780 --> 00:20:08,620 Eĉ se tiuj estas identaj, ni tenu gxin konsekvenca. 428 00:20:08,620 --> 00:20:09,450 >> Malantaŭa. 429 00:20:09,450 --> 00:20:11,030 Ĉi tiu estas proksima. 430 00:20:11,030 --> 00:20:16,310 Do mi ĵus malloced mia noto, kontrolis por nula, atribuitaj 34 en la nodo. 431 00:20:16,310 --> 00:20:17,570 Malantaŭa gets nula. 432 00:20:17,570 --> 00:20:19,480 Do tio donas al mi tion. 433 00:20:19,480 --> 00:20:21,010 Sekva gets listo. 434 00:20:21,010 --> 00:20:22,370 Do listo estas tiu. 435 00:20:22,370 --> 00:20:26,520 Do tiu estas la sama nun kiel desegnon ĉi arrow, tiel ke ili notas al unu 436 00:20:26,520 --> 00:20:27,940 en la sama. 437 00:20:27,940 --> 00:20:30,400 Kaj poste mi kontrolanta se listo estas ne egala al nula. 438 00:20:30,400 --> 00:20:31,740 Kaj ĝi estas ja tiu tempo. 439 00:20:31,740 --> 00:20:35,580 Tiam Mi faros listo antaŭa gets montrilo. 440 00:20:35,580 --> 00:20:39,700 >> Do listo antaŭa gets PTR. 441 00:20:39,700 --> 00:20:44,300 Do tiu havas la efiki de meto grafikan sagon tie. 442 00:20:44,300 --> 00:20:46,930 Kaj tio ricevas iom ondecaj, la linioj. 443 00:20:46,930 --> 00:20:50,780 Kaj poste, fine, mi ĝisdatigos listo atentigi al Pointer. 444 00:20:50,780 --> 00:20:55,560 Do nun tiu notas al tiu ulo. 445 00:20:55,560 --> 00:20:57,170 Kaj nun, ni faros rapidan prudento ĉekon. 446 00:20:57,170 --> 00:20:59,470 >> Jen la listo, kiu estas La malloka variablo. 447 00:20:59,470 --> 00:21:02,850 La unua nodo estas ja 34, ĉar Mi sekvajn ke sago. 448 00:21:02,850 --> 00:21:05,210 Kaj tio estas korekta ĉar mi volas enmeti komence de la listo 449 00:21:05,210 --> 00:21:06,070 ĉiuj novaj nodoj. 450 00:21:06,070 --> 00:21:08,860 Lia sekva kampo kondukas min al tiu ulo. 451 00:21:08,860 --> 00:21:10,710 Se mi plu iri, mi batis proksima estas nula. 452 00:21:10,710 --> 00:21:11,760 Do ne estas pli-listo. 453 00:21:11,760 --> 00:21:14,460 Se mi batis antaŭa, I get dorso kie mi atendus. 454 00:21:14,460 --> 00:21:16,435 >> Do estas ankoraŭ kelkaj indikoj, evidente, manipuli. 455 00:21:16,435 --> 00:21:19,870 Sed la fakto, ke vi sciigis fari tiu en konstanta tempo signifas nur 456 00:21:19,870 --> 00:21:22,910 havi finia nombro de aferoj vi rajtas fari. 457 00:21:22,910 --> 00:21:24,290 Kaj kio estas tiu nombro? 458 00:21:24,290 --> 00:21:25,185 Ĝi povus esti unu paŝon. 459 00:21:25,185 --> 00:21:25,700 Ĝi povus esti du. 460 00:21:25,700 --> 00:21:26,820 Ĝi povus esti 1.000 paŝoj. 461 00:21:26,820 --> 00:21:30,500 Sed ĝi estas finia, kio signifas ke vi ne povas esti ia speco de looping antauxenirinte 462 00:21:30,500 --> 00:21:32,010 ĉi tie, sen rekursio, neniu maŝojn. 463 00:21:32,010 --> 00:21:37,390 Ĝi simple alvenis al esti hard-coded linioj de kodo, kiel ni havas en tiu specimeno. 464 00:21:37,390 --> 00:21:42,330 >> Do la sekva problemo 12 petis nin kompletigi la efektivigo de Elpreni 465 00:21:42,330 --> 00:21:46,740 malsupre en tia maniero, ke ĝi forigas n de la listo en lineara tempo. 466 00:21:46,740 --> 00:21:48,740 Do vi havas iom pli moveti ĉambro nun. 467 00:21:48,740 --> 00:21:52,380 Vi povas supozi, ke n, se ĉeestas en la listo, ĉeestos 468 00:21:52,380 --> 00:21:53,340 ne pli ol unufoje. 469 00:21:53,340 --> 00:21:56,770 Kaj tio tro celas esti kvizo-bazita simpligante supozo, do 470 00:21:56,770 --> 00:21:59,780 ke se vi trovas la numeron 50 ie en la listo, vi ne faras same 471 00:21:59,780 --> 00:22:02,890 devas zorgi pri daŭre persisti, serĉante ĉiun eblan 472 00:22:02,890 --> 00:22:06,990 Kopio de 50, kio estus nur devolve en kelkaj minutia en limigita tempo. 473 00:22:06,990 --> 00:22:10,460 >> Do kun forigi, ĉi tiu estis definitive pli defia kaj pli 474 00:22:10,460 --> 00:22:11,640 kodon por skribi. 475 00:22:11,640 --> 00:22:14,990 Sed je la unua rigardo, sincere, ĝi eble aspektas blindigaj kaj kiel iu 476 00:22:14,990 --> 00:22:17,060 estas nenia vojo vi povus havi veni supren kun la kvizon. 477 00:22:17,060 --> 00:22:22,450 Sed se ni fokusiĝas je la individuaj paŝoj, espereble, gxi subite 478 00:22:22,450 --> 00:22:26,060 frapi vin ke ĉiu de tiuj individuaj paŝoj faras evidenta senco 479 00:22:26,060 --> 00:22:27,080 Retrospektive. 480 00:22:27,080 --> 00:22:28,200 Do ni rigardu. 481 00:22:28,200 --> 00:22:32,570 >> Do unue, ni pravalorizi montrilo esti listo mem. 482 00:22:32,570 --> 00:22:36,040 Ĉar mi volis lineara tempo, tio signifas Mi tuj havis iun cirklon. 483 00:22:36,040 --> 00:22:39,730 Kaj komunan vojon persisti super la nodojn en lerta strukturo aŭ ia ajn 484 00:22:39,730 --> 00:22:43,860 de strukturo ripete estas preni puntero al la fronto de la datumoj 485 00:22:43,860 --> 00:22:46,990 strukturo kaj tiam nur komencas ĝisdatigi ĝin kaj iru vian vojon 486 00:22:46,990 --> 00:22:48,650 tra la datumstrukturo. 487 00:22:48,650 --> 00:22:50,040 Do mi tuj faros ĝuste tion. 488 00:22:50,040 --> 00:22:54,260 >> Dum montrilon, mia provizora variablo, estas ne egala al nula, ni 489 00:22:54,260 --> 00:22:55,660 iru antaŭen kaj kontrolu. 490 00:22:55,660 --> 00:22:56,910 Did I get bonŝanca? 491 00:22:56,910 --> 00:23:01,740 Estas la n kampo en la nodo Mi estas aktuale rigardas egala al la 492 00:23:01,740 --> 00:23:03,380 numeron Mi serĉas? 493 00:23:03,380 --> 00:23:05,410 Kaj se jes, ni faru ion. 494 00:23:05,410 --> 00:23:10,020 Nun, rimarkos ĉi se kondiĉo ĉirkaŭas la tutan 495 00:23:10,020 --> 00:23:11,520 sekvajn liniojn de kodo. 496 00:23:11,520 --> 00:23:14,610 Tiu estas la nura afero interesas min - trovanta nombro en demando. 497 00:23:14,610 --> 00:23:18,010 Do ne estas alia, kiu simpligas aferojn koncepte iom. 498 00:23:18,010 --> 00:23:22,040 >> Sed nun, mi rimarkis, kaj eble vi havos nur rimarkis tion post pensante 499 00:23:22,040 --> 00:23:24,720 ĝin tra iom, ke estas fakte du kazoj tie. 500 00:23:24,720 --> 00:23:28,060 Unu estas kie la nodo estas en la komencante de la listo, kiu estas 501 00:23:28,060 --> 00:23:31,040 iom ĝena, ĉar tio estas speciala kazo, cxar vi devas trakti 502 00:23:31,040 --> 00:23:33,340 kun tiu afero, kiun Estas la sola anomalio. 503 00:23:33,340 --> 00:23:35,720 Ĉie alie en la listo, ĝi estas la sama afero. 504 00:23:35,720 --> 00:23:38,050 Ekzistas antaŭa nodo kaj apud nodo, antaŭa nodo, apud nodo. 505 00:23:38,050 --> 00:23:40,940 Sed tiu ulo estas iom speciala se li estas en la komenco. 506 00:23:40,940 --> 00:23:48,710 >> Do se la montrilon egalas la listo mem, do se mi estas ĉe la komenco de 507 00:23:48,710 --> 00:23:53,960 la listo kaj mi trovis n, mi bezonas fari kelkajn aferojn. 508 00:23:53,960 --> 00:23:59,230 Unu, mi bezonas ŝanĝi listo por atentigi al la sekvanta kampo, 50. 509 00:23:59,230 --> 00:24:01,270 Do supozu, ke mi provis forigi 34. 510 00:24:01,270 --> 00:24:03,560 Do tiu ulo havas jam iri for en nur unu momento. 511 00:24:03,560 --> 00:24:07,210 >> Do mi intencis diri, lerta gets Pointer proksima. 512 00:24:07,210 --> 00:24:08,570 Nu, tio estas montrilo. 513 00:24:08,570 --> 00:24:10,360 Sekva notas ĉi tie. 514 00:24:10,360 --> 00:24:17,470 Do tiu ŝanĝiĝas ĉi sago dekstren nun atentigi al tiu ulo tie. 515 00:24:17,470 --> 00:24:19,580 Nu, memoru, ni havi portempa variablo. 516 00:24:19,580 --> 00:24:23,520 Do ni ne orfino ajna nodoj, ĉar mi ankaŭ havas ĉi ulo en mia 517 00:24:23,520 --> 00:24:25,010 efektivigo de forigi. 518 00:24:25,010 --> 00:24:29,600 Do nun, se listo mem ne estas nulaj, Mi bezonos ripari iom io. 519 00:24:29,600 --> 00:24:32,690 >> Mi bezonas nun certiĝi ke tiu sago, kio estas antaŭe indikante 520 00:24:32,690 --> 00:24:36,830 el 50 al 34, tiu jam devas iri for, ĉar se mi provas forigi 521 00:24:36,830 --> 00:24:41,910 de 34, 50 prefere ne subtenas ajnan speco de dorso aludo al ĝi kiel la 522 00:24:41,910 --> 00:24:42,820 sago sugestis. 523 00:24:42,820 --> 00:24:44,820 Do mi nur faris ĉi tiun linion. 524 00:24:44,820 --> 00:24:46,520 Tial do mi faris. 525 00:24:46,520 --> 00:24:48,040 Tiukaze estas fakte sufiĉe facila. 526 00:24:48,040 --> 00:24:51,010 Batante la supron de la listo estas relative simpla. 527 00:24:51,010 --> 00:24:52,980 >> Bedaŭrinde, estas tio ĝena alia bloko. 528 00:24:52,980 --> 00:24:56,170 Do nun, mi devas konsideri la kazon kie estas io en la mezo. 529 00:24:56,170 --> 00:24:59,880 Sed ne tro terura, krom cxar sintakso kiel ĉi tio. 530 00:24:59,880 --> 00:25:03,080 Do, se mi ne estas ĉe la komenco de la listo, mi ie ​​en la mezo. 531 00:25:03,080 --> 00:25:08,160 Kaj ĉi tiu lineo tie estas diranta, komenco ĉe kio ajn nodo vi estas ĉe. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Iru al la antaŭa nodo apud kampo kaj atentigi ke ĉe la montrilo. 534 00:25:18,550 --> 00:25:20,390 >> Ni faru tion pictóricamente. 535 00:25:20,390 --> 00:25:21,640 Tio estis atingi komplika. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Do, se mi havas antaŭaj kampoj ĉi tie - ni faru tion - apud kampoj ĉi tie. 538 00:25:37,990 --> 00:25:41,200 Mi iras al simpligi mian pointers prefere ol desegni tutan faskon da 539 00:25:41,200 --> 00:25:45,710 aferojn tien kaj reen crisscrossing reciproke. 540 00:25:45,710 --> 00:25:50,870 Kaj nun, ni nur diru ĉi estas 1, 2, 3 pro diskuton, eĉ 541 00:25:50,870 --> 00:25:53,410 kvankam tio ne laŭliniigi kun la problemo en demando. 542 00:25:53,410 --> 00:25:55,900 >> Do jen mia ligillisto. 543 00:25:55,900 --> 00:25:59,300 Mi klopodas eltiri du en tiu aparta versio de la rakonto. 544 00:25:59,300 --> 00:26:01,960 Do mi ĝisdatigita montrilon al esti indikante al koncerna ulo. 545 00:26:01,960 --> 00:26:03,315 Do tiu estas PTR. 546 00:26:03,315 --> 00:26:04,530 Li montras ĉi tie. 547 00:26:04,530 --> 00:26:07,170 Ĉi tio estas listo, kiu ekzistas tutmonde kiel antaŭe. 548 00:26:07,170 --> 00:26:09,200 Kaj li montras ĉi tie ne gravas. 549 00:26:09,200 --> 00:26:10,800 Kaj nun mi provas eltiri du. 550 00:26:10,800 --> 00:26:13,850 >> Do se montrilon notas cxi tie, mi estas sekvos, ŝajne, la 551 00:26:13,850 --> 00:26:17,110 antaŭa montrilon, kiu metas min je 1. 552 00:26:17,110 --> 00:26:22,290 Mi tiam tuj diru, ke la venonta kampo, kiun alportas al mi trans ĉi tiun 553 00:26:22,290 --> 00:26:25,410 boksi tie, tuj egala montrilon proksima. 554 00:26:25,410 --> 00:26:28,400 Do, se ĉi montrilon, ĉi tiu estas proksima. 555 00:26:28,400 --> 00:26:31,840 Tio signifas ke ĉi sago bezonoj atentigi al tiu ulo. 556 00:26:31,840 --> 00:26:35,140 >> Do kion tiu linio de kodo havas nur farita estas iom de tiu. 557 00:26:35,140 --> 00:26:37,500 Kaj nun, tiu serĉas kiel paŝon en la ĝusta direkto. 558 00:26:37,500 --> 00:26:41,390 Ni esence volas Snip 2 out el la mezo de 1 kaj 3. 559 00:26:41,390 --> 00:26:44,400 Do ĝi havas sencon, ke ni volas itinero ĉi montrilon ĉirkaŭ ĝi. 560 00:26:44,400 --> 00:26:50,400 Do tiu sekva linio estas kontrolanta se montrilo sekvanta ne estas nulaj, ekzistas 561 00:26:50,400 --> 00:26:54,200 ja iu al la rajto de 2, tio signifas ke ni ankaŭ devas fari 562 00:26:54,200 --> 00:26:55,850 iom Snip tie. 563 00:26:55,850 --> 00:27:00,590 >> Do mi devas nun sekvi tiun montrilon kaj aktualigi la antaŭan montrilon sur 564 00:27:00,590 --> 00:27:05,410 ĉi ulo fari iom de workaround tie la punkto ĉi tie. 565 00:27:05,410 --> 00:27:07,100 Kaj nun, vide tiu estas agrabla. 566 00:27:07,100 --> 00:27:11,930 Ĝi estas iom senorda en kiuj ekzistas neniu fingromontrante la 2 plu. 567 00:27:11,930 --> 00:27:13,600 2 notas maldekstren. 568 00:27:13,600 --> 00:27:14,980 Kaj 2 estas montranta dekstren. 569 00:27:14,980 --> 00:27:17,480 Sed li povas fari kion ajn li volas, ĉar li estas proksimume al get liberigita. 570 00:27:17,480 --> 00:27:19,480 Kaj ne gravas kion tiuj valoroj estas plu. 571 00:27:19,480 --> 00:27:23,040 >> Kio gravas estas, ke la ceteraj infanoj routing supre 572 00:27:23,040 --> 00:27:24,280 kaj sub li nun. 573 00:27:24,280 --> 00:27:25,810 Kaj efektive, jen kio ni faros. 574 00:27:25,810 --> 00:27:29,360 Ni liberaj montrilon, kiu signifas ke ni diru la mastruma sistemo, vi estas bonvena 575 00:27:29,360 --> 00:27:30,906 por postuli ĉi. 576 00:27:30,906 --> 00:27:34,900 Kaj poste laste, ni revenos. 577 00:27:34,900 --> 00:27:37,220 Alie, implice, se ni ne revenis ankoraŭ, 578 00:27:37,220 --> 00:27:38,290 Ni devas subteni rigardante. 579 00:27:38,290 --> 00:27:41,485 Do montrilon egalas montrilon sekvanta simple signifas movi ĉi ulo tie. 580 00:27:41,485 --> 00:27:42,600 Movu ĉi ulo tie. 581 00:27:42,600 --> 00:27:45,400 Movu ĉi ulo ĉi tie, se, fakte, ni ne trovos la nombro 582 00:27:45,400 --> 00:27:46,960 ni serĉas ankoraŭ. 583 00:27:46,960 --> 00:27:49,630 >> Do sincere, ĝi aspektas tute blindiga, mi opinias, unue 584 00:27:49,630 --> 00:27:52,180 rigardo, speciale se vi baraktis kun tiu dum la kvizo tiam vidos 585 00:27:52,180 --> 00:27:52,850 iu kiel ĉi tio. 586 00:27:52,850 --> 00:27:55,050 Kaj vi frapeti mem sur la dorso. 587 00:27:55,050 --> 00:27:57,080 Nu, ne estas vojo mi povis havi veni supren kun tiu en la kvizo. 588 00:27:57,080 --> 00:28:00,470 Sed mi volas argumenti, sed vi povas, se vi rompas Ĝi penetras en tiujn individuajn 589 00:28:00,470 --> 00:28:04,400 kazoj kaj nur marŝi tra ĝi zorgeme, kvankam, rekoni, sub 590 00:28:04,400 --> 00:28:06,300 turmenta cirkonstancoj. 591 00:28:06,300 --> 00:28:09,470 >> Bonŝance, la portreto farita ĉiun feliĉaj. 592 00:28:09,470 --> 00:28:11,050 Vi povus cxerpi tio en ajn da manieroj. 593 00:28:11,050 --> 00:28:12,760 Vi ne devos fari la crisscrossing afero ĉi tie. 594 00:28:12,760 --> 00:28:14,520 Vi povus fari ĝin per rektaj liniojn kiel ĉi tio. 595 00:28:14,520 --> 00:28:18,790 Sed la esencon de ĉi tiu problemo, en ĝenerala, estis realigi, ke la 596 00:28:18,790 --> 00:28:22,060 pentraĵo en la fino devus aspekti iom io simila, ĉar 597 00:28:22,060 --> 00:28:25,030 konstanta tempo implicis ke vi observu jamming kaj jamming kaj jamming la 598 00:28:25,030 --> 00:28:29,900 novaj nodoj ĉe la komenco el la listo. 599 00:28:29,900 --> 00:28:31,960 Demandojn? 600 00:28:31,960 --> 00:28:34,565 Probable la plej defia de certe estas la kodigo demandoj. 601 00:28:34,565 --> 00:28:37,690 >> Spektantaro: Tia estas listo simila al estras en antaŭaj ekzemploj. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. Malan: Precize, ĝuste. 603 00:28:39,640 --> 00:28:43,130 Nur malsama nomo por malloka variablo. 604 00:28:43,130 --> 00:28:44,380 World Wide kio? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB Bowden: okej. 607 00:28:49,730 --> 00:28:52,020 Do tiu estas tiu, kie vi devis verki la alineo. 608 00:28:52,020 --> 00:28:56,060 Kelkaj homoj verkis eseojn por tiu ĉi demando. 609 00:28:56,060 --> 00:29:00,230 Sed vi devas nur uzi tiujn ses terminoj priskribi kio okazas, kiam 610 00:29:00,230 --> 00:29:02,440 vi provu kontakti facebook.com. 611 00:29:02,440 --> 00:29:07,930 Do mi simple parolas tra la procezo uzante cxiujn tiujn terminojn. 612 00:29:07,930 --> 00:29:11,290 Do, en nia retumilo, ni tajpas facebook.com kaj batis Eniru. 613 00:29:11,290 --> 00:29:17,280 Do nia retumilo tuj konstrui HTTP peti ke ĝi estas tuj sendos 614 00:29:17,280 --> 00:29:22,220 tra iu procezo por Facebook por Facebook por respondi al ni kun la 615 00:29:22,220 --> 00:29:24,450 HTML de lia paĝo. 616 00:29:24,450 --> 00:29:28,800 >> Do kio estas la procezo per kiun la HTTP peto 617 00:29:28,800 --> 00:29:30,730 fakte alvenas al Facebook? 618 00:29:30,730 --> 00:29:32,790 Do unue, ni bezonas por traduki Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Do simple donita la nomo Facebook.com, kie fakte faras la HTTP peto 620 00:29:38,780 --> 00:29:39,940 bezonas iri? 621 00:29:39,940 --> 00:29:44,120 Do ni bezonas por traduki Facebook.com al IP-adreso, kiun unike 622 00:29:44,120 --> 00:29:47,620 identigas kia maŝino ni efektive volas sendi tiun peton. 623 00:29:47,620 --> 00:29:49,310 Via portebla komputilo havas IP-adreso. 624 00:29:49,310 --> 00:29:52,240 Io ajn konektita al la interreto havas IP-adreso. 625 00:29:52,240 --> 00:29:59,030 >> Do DNS, Domain Name System, kiu estas kio okazos al manipuli la tradukado 626 00:29:59,030 --> 00:30:03,750 el facebook.com al IP-adreso, ke vi fakte volas kontakti. 627 00:30:03,750 --> 00:30:08,075 Do ni kontaktos la DNS-serviloj kaj diru, kio estas facebook.com? 628 00:30:08,075 --> 00:30:16,560 Ĝi diras, oh, tio estas la IP-adreso 190,212 io, iu, io. 629 00:30:16,560 --> 00:30:16,900 Ĉiuj pravas. 630 00:30:16,900 --> 00:30:18,850 Nun, mi scias kio maŝino Mi volas kontakti. 631 00:30:18,850 --> 00:30:22,360 >> Do tiam vi sendu vian HTTP peto super tiu maŝino. 632 00:30:22,360 --> 00:30:24,140 Do kiel faras ĝi preni al tiu maŝino? 633 00:30:24,140 --> 00:30:27,200 Nu, la peto iras de enkursigilo al enkursigilo Bouncing. 634 00:30:27,200 --> 00:30:32,630 Rememoru la ekzemplo en klaso, kie ni efektive vidis, ke la vojo kiun la 635 00:30:32,630 --> 00:30:35,340 pakojn prenis kiam ni provis komuniki. 636 00:30:35,340 --> 00:30:38,460 Ni vidis ĝin salti super la Atlantiko Oceano ĉe unu punkto aŭ kio ajn. 637 00:30:38,460 --> 00:30:42,820 >> Do la lastan terminon havenon. 638 00:30:42,820 --> 00:30:46,520 Do tiu estas nun en via komputilo. 639 00:30:46,520 --> 00:30:49,970 Vi povas havi plurajn aferojn aktuale komunikanta per la interreto. 640 00:30:49,970 --> 00:30:53,730 Do mi povas kuri, diru, Skype. 641 00:30:53,730 --> 00:30:55,670 Mi ne havas retumilo malfermita. 642 00:30:55,670 --> 00:30:59,010 Mi ne havas iu kiu torrenting dosierojn. 643 00:30:59,010 --> 00:31:00,880 Do ĉiu el ĉi tiuj aferoj estas komuniki kun la 644 00:31:00,880 --> 00:31:02,600 interreto iel. 645 00:31:02,600 --> 00:31:08,070 >> Do, kiam via komputilo ricevas iujn datumoj el la interreto, kiel faras tion 646 00:31:08,070 --> 00:31:10,130 scias kion apliko reale volas la datumo? 647 00:31:10,130 --> 00:31:12,610 Kiel tio scii ĉu ĉi tiu aparta datumo estas intencita por la 648 00:31:12,610 --> 00:31:16,070 torrenting apliko kontraste al la retumilo? 649 00:31:16,070 --> 00:31:20,980 Do tiu estas la celo de havenoj en tiu ĉiuj el tiuj aplikoj havas 650 00:31:20,980 --> 00:31:22,720 asertis havenon en via komputilo. 651 00:31:22,720 --> 00:31:27,580 Do via retumilo diras, bona, Mi aŭskultas la haveno 1000. 652 00:31:27,580 --> 00:31:32,240 Kaj via torrenting programo estas jene: Mi aŭskultas la haveno 3000. 653 00:31:32,240 --> 00:31:34,770 Kaj Skype diras, Mi uzas havenon 4000. 654 00:31:34,770 --> 00:31:41,950 >> Do, kiam vi ricevas iujn datumojn kiuj apartenas al unu el ĉi tiuj aplikoj, la datumoj 655 00:31:41,950 --> 00:31:45,510 estas markitaj per kiu haveno ĝi efektive devus esti sendita kune al. 656 00:31:45,510 --> 00:31:47,950 Do tio diras, ho, mi apartenus al haveno 1000. 657 00:31:47,950 --> 00:31:50,950 Mi scias, ĉar mi bezonas resendi ĉi kune al mia retumilo. 658 00:31:50,950 --> 00:31:56,440 Do la kialo estas grava ĉi tie estas ke retserviloj emas 659 00:31:56,440 --> 00:31:58,240 aŭskultu sur haveno 80. 660 00:31:58,240 --> 00:32:02,420 Do, kiam mi kontaktas Facebook.com, mi estas komunikanta kun iu maŝino. 661 00:32:02,420 --> 00:32:06,390 Sed mi bezonas diri kiun havenon de tiu maŝino Mi deziras komuniki kun. 662 00:32:06,390 --> 00:32:09,160 Kaj retserviloj inklinas esti aŭskultante la haveno 80. 663 00:32:09,160 --> 00:32:14,010 >> Se ili volas, ili povus agordi gxin supren ĝis ĝi listigas kiel sur haveno 7000. 664 00:32:14,010 --> 00:32:19,090 Kaj poste en foliumilo, mi povis permane tajpi Facebook.com: 7000 por 665 00:32:19,090 --> 00:32:24,600 sendu la peton al haveno 7000 de Facebook ttt-servilo. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. Malan: Kaj en tiu kazo, eĉ kvankam ni ne postulas ke la homo 667 00:32:26,820 --> 00:32:30,000 mencii ĉi, en tiu kazo, kion haveno estus peto efektive iros al? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Provu denove. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Ekzakte. 672 00:32:44,300 --> 00:32:47,960 Ne serĉas tion, sed oni subtileco ke estas tie neniu la lasta. 673 00:32:47,960 --> 00:32:51,770 >> ROB Bowden: Do la HTTPS, ĉar ĝi estas aŭskultante specife por la 674 00:32:51,770 --> 00:32:55,180 ĉifrita, ĝi estas sur haveno 4430. 675 00:32:55,180 --> 00:32:57,680 >> Spektantaro: Kaj retmesaĝoj estas 25, ĉu ne? 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. Malan: outbound retmesaĝoj, 25, Yep. 677 00:33:00,670 --> 00:33:03,760 >> ROB Bowden: Mi ne eĉ konas la plimulto de la - ĉiuj el la malsupra inklinas esti 678 00:33:03,760 --> 00:33:06,310 rezervita por aĵoj. 679 00:33:06,310 --> 00:33:09,260 Mi kredas ke ĉiu sub 1024 estas rezervitaj. 680 00:33:09,260 --> 00:33:13,450 >> Spektantaro: Kial vi diras 3 estis la malĝusta nombro? 681 00:33:13,450 --> 00:33:18,820 >> ROB Bowden: Ĉar en sama IP-adreso, ekzistas kvar grupoj de ciferoj. 682 00:33:18,820 --> 00:33:21,090 Kaj ili estas de 0 ĝis 255. 683 00:33:21,090 --> 00:33:28,060 Do 192.168.2.1 estas komuna loka reto IP-adreso. 684 00:33:28,060 --> 00:33:30,840 Rimarku ĉiuj el tiuj estas malpli ol 255. 685 00:33:30,840 --> 00:33:33,570 Do kiam mi komencis per 300, ke ne povus havi 686 00:33:33,570 --> 00:33:35,210 estis unu el la nombroj. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. Malan: Sed tiu stulta klipo de - gxi estis CSI, kie ili havis 688 00:33:38,170 --> 00:33:39,970 numeron kiu estis tro granda por la IP adreso. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB Bowden: Ajna demandojn pri tio? 691 00:33:46,110 --> 00:33:51,710 La proksima, tiel kompletan ŝanĝon en temo, sed ni havas ĉi PHP tabelo por 692 00:33:51,710 --> 00:33:53,270 La domoj en la kvar. 693 00:33:53,270 --> 00:33:56,360 Kaj ni havas neordigitan liston. 694 00:33:56,360 --> 00:33:59,550 Kaj ni volas presi ĉiun listeron nur enhavanta la domo nomo. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Do ni havas foreach buklo. 697 00:34:11,870 --> 00:34:17,540 Do memoru, la sintakso estas foreach tabelo kiel eron en la tabelo. 698 00:34:17,540 --> 00:34:22,360 Do per ĉiu ripeto de la ciklo, domo iras preni sur unu el la 699 00:34:22,360 --> 00:34:24,060 valoroj ene de la tabelo. 700 00:34:24,060 --> 00:34:26,530 >> Sur la unua ripeto, domo Estos Cabot Domo. 701 00:34:26,530 --> 00:34:30,370 Sur dua iteracio, domo esti Courier Domo kaj tiel plu. 702 00:34:30,370 --> 00:34:34,370 Do por ĉiu quad kiel domon, ni estas nur tuj presi - 703 00:34:34,370 --> 00:34:37,250 vi ankaŭ povus esti eĥis - 704 00:34:37,250 --> 00:34:42,199 la listeron kaj tiam la domo, la nomo kaj poste fermi la listeron. 705 00:34:42,199 --> 00:34:45,210 La krispa krampoj estas laŭvolaj tie. 706 00:34:45,210 --> 00:34:49,480 >> Kaj tiam ni ankaŭ diris en la demando mem, memoras por fermi la 707 00:34:49,480 --> 00:34:50,770 Neordigita listo etikedo. 708 00:34:50,770 --> 00:34:53,949 Tial oni devas eliri PHP mode por fari tion. 709 00:34:53,949 --> 00:35:00,280 Aŭ ni povus esti ehxis la fermi Neordigita listo etikedo. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. Malan: Ankaŭ fajna tie farus estis uzi malnova lernejo por 711 00:35:02,380 --> 00:35:07,340 buklo kun $ i = 0 0 kaj uzante grafoj al elkompreni la longeco de la radio. 712 00:35:07,340 --> 00:35:09,240 Plene fajna tro, nur iom wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> Spektantaro: Do, se vi intencis [Inaudibles], vi farus - 715 00:35:14,742 --> 00:35:16,734 Mi forgesis kion la buklo [inaudibles] is. 716 00:35:16,734 --> 00:35:21,380 Ĉu vi $ quad krampo i? 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. Malan: Ekzakte. 718 00:35:21,850 --> 00:35:23,100 Jes, ĝuste. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB Bowden: Ĉu io alia? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. Malan: Bone. 723 00:35:32,010 --> 00:35:32,300 Komerco maldungitaj. 724 00:35:32,300 --> 00:35:38,290 Do tie estis aroj da respondojn ebla por ĉiu el tiuj. 725 00:35:38,290 --> 00:35:40,510 Ni estis vere nur serĉas io konvinka por upside kaj 726 00:35:40,510 --> 00:35:41,100 oni batas. 727 00:35:41,100 --> 00:35:44,830 Kaj numero 16 demandis, validigi uzantoj enigo kliento-flanko, kiel kun JavaScript, 728 00:35:44,830 --> 00:35:47,280 anstataŭ servilo-flanko, kiel kun PHP. 729 00:35:47,280 --> 00:35:49,450 Do kio estas la supra parto de faranta kliento-flanko? 730 00:35:49,450 --> 00:35:53,780 >> Nu, unu el la aferoj kiujn ni proponis estas ke kondomoj latenta, ĉar vi 731 00:35:53,780 --> 00:35:56,750 ne devas ĝeni kontaktanta la servilo, kiu povus preni kelkajn 732 00:35:56,750 --> 00:36:00,390 milisekundoj aŭ eĉ kelkaj sekundoj evitante tion kaj simple 733 00:36:00,390 --> 00:36:04,670 validigi uzantoj 'enigo kliento-flanko de deĉenigi sur-submit traktilo kaj 734 00:36:04,670 --> 00:36:06,650 ĝuste kontrolanta, cxu ili tajpi io en por nomo? 735 00:36:06,650 --> 00:36:08,080 Ĉu oni tajpas ion in por retadreso? 736 00:36:08,080 --> 00:36:10,950 Ĉu oni elektu dormejo de la falmenuo? 737 00:36:10,950 --> 00:36:14,360 >> Vi povas doni al ili tujan reagon uzante la gigahertz komputilo 738 00:36:14,360 --> 00:36:16,770 aux cxion, kion ili havas, ke estas efektive sur ilia tablo. 739 00:36:16,770 --> 00:36:19,310 Do ĝi estas nur bonaj uzanto spertos tipe. 740 00:36:19,310 --> 00:36:24,460 Sed batas fari kliento-flanko validigon, se vi faras ĝin sen ankaŭ 741 00:36:24,460 --> 00:36:29,860 faranta servilo-flanko validigo estas ke plej Iu venas el CS50 scias 742 00:36:29,860 --> 00:36:33,980 ke vi povas simple sendu ajnan datumoj vi volas al servanto ajna nombro de manieroj. 743 00:36:33,980 --> 00:36:37,030 Sincere, en plej ajna retumilo, vi povas klaku ĉirkaŭe en la agordojn kaj justa 744 00:36:37,030 --> 00:36:40,110 elŝalti JavaScript, kiuj volis, do, malŝalti ajnan formon de 745 00:36:40,110 --> 00:36:41,080 validigo. 746 00:36:41,080 --> 00:36:44,460 >> Sed vi ankaŭ povas memori, ke eĉ mi faris kelkaj arkaikaj aĵojn en klaso uzante 747 00:36:44,460 --> 00:36:47,790 telnet kaj reale ŝajnigante esti retumilo sendante get 748 00:36:47,790 --> 00:36:49,240 petoj al servilo. 749 00:36:49,240 --> 00:36:51,030 Kaj tio certe ne uzante ajnan JavaScript. 750 00:36:51,030 --> 00:36:53,290 Tio estas nur mi tajpas komandojn ĉe klavaro. 751 00:36:53,290 --> 00:36:57,410 Do vere, ajna programisto ene sufiĉas konsolo, per la retejo kaj http 752 00:36:57,410 --> 00:37:01,690 povus sendi kion ajn datumoj li aŭ ŝi volas al servanto sen validigo. 753 00:37:01,690 --> 00:37:05,470 Kaj se via servilo ne estas ankaŭ checking, cxu ili donu al mi nomon, estas 754 00:37:05,470 --> 00:37:08,930 tio efektive validan retpoŝtan adreson, faris Ili elektas dormejo, vi povus fini 755 00:37:08,930 --> 00:37:12,800 supren enmeto blufa aŭ nur malplenan datumoj en via datenbazo, kiu probable 756 00:37:12,800 --> 00:37:15,450 ne tuj estos bona afero se vi estis alprenanta ĝi estis tie. 757 00:37:15,450 --> 00:37:16,770 >> Do tiu estas ĝena realo. 758 00:37:16,770 --> 00:37:19,890 Sed ĝenerale, la kliento-flanko validigo estas granda. 759 00:37:19,890 --> 00:37:21,810 Sed tio signifas duoble da laboro. 760 00:37:21,810 --> 00:37:25,970 Kvankam tie fari ekzistas pluraj bibliotekoj, JavaScript bibliotekojn por 761 00:37:25,970 --> 00:37:28,830 Ekzemple, kiuj faras ĉi multe, multe malpli pri kapdoloro. 762 00:37:28,830 --> 00:37:31,940 Kaj vi povas reuzi iun el la kodo server-side, kliento-flanko. 763 00:37:31,940 --> 00:37:35,980 Sed ĉu rimarki ke ĝi estas tipe aldona laboro. 764 00:37:35,980 --> 00:37:36,415 Jes. 765 00:37:36,415 --> 00:37:37,792 >> Spektantaro: Do, se ni nur diris malpli sekuraj - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. Malan: [rie] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Tiuj estas ĉiam la pli malfacila ones al juĝas. 769 00:37:43,105 --> 00:37:44,480 >> ROB Bowden: Tio estus estis akceptita. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. Malan: Kio? 771 00:37:44,810 --> 00:37:45,810 >> ROB Bowden: Mi kreis tiun ĉi problemon. 772 00:37:45,810 --> 00:37:46,735 Tio estus akceptita. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. Malan: Jes. 774 00:37:47,220 --> 00:37:47,830 >> Spektantaro: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB Bowden: Sed ni ne akceptis cxar la unua - 776 00:37:51,770 --> 00:37:53,630 nu, kion ni serĉas estas iu kiel vi ne devas 777 00:37:53,630 --> 00:37:55,270 komuniki kun la servilo. 778 00:37:55,270 --> 00:37:58,355 Ni ne akceptas nur rapida. 779 00:37:58,355 --> 00:38:00,080 >> Spektantaro: Kio pri ne refreŝigu paĝon? 780 00:38:00,080 --> 00:38:00,430 >> ROB Bowden: Jes. 781 00:38:00,430 --> 00:38:03,000 Tio estis akceptita respondo. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. Malan: Io ajn kie ni sentis ĝi estis pli verŝajna ol ne verŝajna 783 00:38:06,300 --> 00:38:09,780 ke vi sciis kion vi estis dirante, ke estas malmola 784 00:38:09,780 --> 00:38:13,500 linio por cxerpi foje. 785 00:38:13,500 --> 00:38:16,000 Uzanta ligillisto anstataŭ de tabelo subteni 786 00:38:16,000 --> 00:38:17,590 ordo listo de entjeroj. 787 00:38:17,590 --> 00:38:21,000 Do oni upside ni ofte citas kun ligita listoj kiuj motivis siajn tutajn 788 00:38:21,000 --> 00:38:22,370 enkonduko estis vi ricevas dinamismo. 789 00:38:22,370 --> 00:38:23,030 Ili povas kreski. 790 00:38:23,030 --> 00:38:23,950 Ili povas ŝrumpi. 791 00:38:23,950 --> 00:38:27,370 Do vi ne devas salti tra aros por fakte krei pli da memoro 792 00:38:27,370 --> 00:38:28,140 kun tabelo. 793 00:38:28,140 --> 00:38:30,310 Aŭ vi ne devas nur diri, sorry, uzanto. 794 00:38:30,310 --> 00:38:31,410 La tabelo estas plena. 795 00:38:31,410 --> 00:38:35,850 Do dinamika kresko de la listo. 796 00:38:35,850 --> 00:38:37,210 A malavantaĝo kvankam ligita listoj? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> Spektantaro: Ĝi estas lineara. 799 00:38:43,356 --> 00:38:45,800 Serĉado en ligitaj listo estas lineara anstataŭ kia vi ensaluti 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. Malan: Ekzakte. 801 00:38:46,360 --> 00:38:50,160 Serĉado sur ligillisto estas lineara, eĉ se ĝi estas ordo, ĉar vi povas 802 00:38:50,160 --> 00:38:53,170 nur sekvas tiujn pano panpecetoj, tiuj montriloj, de la komenco de la listo 803 00:38:53,170 --> 00:38:53,570 al la fino. 804 00:38:53,570 --> 00:38:57,970 Vi ne povas utiligi hazarda aliro kaj, tiele, duuma serĉo, eĉ se ĝi estas 805 00:38:57,970 --> 00:39:00,740 ordo, kiun vi povis faru kun tabelo. 806 00:39:00,740 --> 00:39:02,390 Kaj ekzistas ankaŭ alia kosto. 807 00:39:02,390 --> 00:39:02,966 Jes. 808 00:39:02,966 --> 00:39:03,800 >> Spektantaro: Memoro malkompetenta? 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. Malan: Jes. 810 00:39:04,130 --> 00:39:06,940 Nu, mi ne volas nepre diru malkompetenta. 811 00:39:06,940 --> 00:39:10,110 Sed tio kostos al vi pli da memoro, ĉar vi bezonas 32 bitojn por ĉiu 812 00:39:10,110 --> 00:39:13,400 nodo por la aldona montrilon, ĉe Almenaŭ por unuope ligillisto. 813 00:39:13,400 --> 00:39:16,660 Nun, se vi nur stokante entjeroj kaj vi estas aldono de la montrilo, jen 814 00:39:16,660 --> 00:39:17,830 fakte speco de ne-bagatela. 815 00:39:17,830 --> 00:39:19,340 Ĝi estas duobliganta la kvanto da memoro. 816 00:39:19,340 --> 00:39:22,330 Sed en realo, se vi stokante a ligillisto de structs kiuj povus havi 817 00:39:22,330 --> 00:39:25,540 8 bajtoj, 16 bitokoj, eĉ pli ol tio, eble estas malpli 818 00:39:25,540 --> 00:39:26,500 de marĝena kosto. 819 00:39:26,500 --> 00:39:28,320 Sed estas kosto tamen. 820 00:39:28,320 --> 00:39:31,880 Do ĉu de tiuj estus jam estis delikata kiel downsides. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Uzanta PHP anstataŭ C por skribi komand-linia programo. 823 00:39:36,100 --> 00:39:41,890 Do ĉi tie, ĝi estas ofte pli rapide uzi lingvo kiel PHP aŭ Ruby aŭ Python. 824 00:39:41,890 --> 00:39:43,700 Vi nur rapide malfermi supren tekstoredaktilo. 825 00:39:43,700 --> 00:39:45,900 Vi havas multe pli da funkcioj disponebla por vi. 826 00:39:45,900 --> 00:39:49,325 PHP havas la kuirejo profundiĝi de funkcioj, dum en C, oni 827 00:39:49,325 --> 00:39:50,420 havas tre, tre malmulte. 828 00:39:50,420 --> 00:39:53,820 Fakte, knaboj la scias la malmola vojo ke vi ne havas hash tabloj. 829 00:39:53,820 --> 00:39:55,000 Vi ne kunligis listoj. 830 00:39:55,000 --> 00:39:57,470 Se vi volas tiujn, vi devas apliki ilin mem. 831 00:39:57,470 --> 00:40:00,950 >> Do unu upside de PHP aŭ vere neniu interpretita lingvo estas la rapideco 832 00:40:00,950 --> 00:40:02,920 kun kiuj vi povas skribi kodon. 833 00:40:02,920 --> 00:40:06,660 Sed malfacilaĵo, ni vidis tion, kiam mi rapide ekfrapis a misspeller 834 00:40:06,660 --> 00:40:11,780 efektivigo en prelego uzi PHP, estas ke uzante interpretita lingvo 835 00:40:11,780 --> 00:40:13,570 estas kutime malrapidaj. 836 00:40:13,570 --> 00:40:18,420 Kaj ni vidis, ke pruveble kun pliigi en tempo de 0,3 sekundoj por 3 837 00:40:18,420 --> 00:40:24,440 sekundoj, pro la interpretado kiu fakte okazas. 838 00:40:24,440 --> 00:40:27,060 >> Alia upside estis, ke vi ne devas kompili. 839 00:40:27,060 --> 00:40:30,130 Do ĝi ankaŭ akcelas disvolviĝon parenteze, ĉar vi ne havas 840 00:40:30,130 --> 00:40:31,360 du paŝojn por ruli programon. 841 00:40:31,360 --> 00:40:32,140 Vi nur havas unu. 842 00:40:32,140 --> 00:40:35,260 Kaj tial ke estas sufiĉe konvinka tiel. 843 00:40:35,260 --> 00:40:38,450 Uzanta SQL datumbazo anstataŭ a CSV-dosiero por stoki datumoj. 844 00:40:38,450 --> 00:40:40,230 Do SQL datumbazo estas uzata por pset7. 845 00:40:40,230 --> 00:40:42,060 CSV dosierojn vi ne uzis multe. 846 00:40:42,060 --> 00:40:45,960 Sed vi uzis ĝin malrekte en pset7 kiel bone por paroli por Yahoo! Finance. 847 00:40:45,960 --> 00:40:49,330 >> Sed CSV estas ĝuste kiel Excel dosieron sed super simpla, kie la kolumnoj estas 848 00:40:49,330 --> 00:40:54,010 nur demarked per komoj interne de la cetere teksta dosiero. 849 00:40:54,010 --> 00:40:56,740 Kaj uzante SQL datumbazo estas iom pli konvinka. 850 00:40:56,740 --> 00:41:00,060 Ĝi estas inversita, ĉar vi ricevas tion, kiel elekti kaj enmeti kaj forigi. 851 00:41:00,060 --> 00:41:03,790 Kaj vi akiras, supozeble, indeksoj, ke MySQL kaj aliaj datumbazoj, kiel 852 00:41:03,790 --> 00:41:07,510 Oracle, konstruu por vi en la memoro, kiu signifas via unuaranga estas probable ne 853 00:41:07,510 --> 00:41:09,000 tuj estos lineara supro al malsupro. 854 00:41:09,000 --> 00:41:11,300 Ĝi estas vere tuj estos io kiel duuma serĉo aŭ io 855 00:41:11,300 --> 00:41:12,520 simila en spirito. 856 00:41:12,520 --> 00:41:13,930 Do ili estas ĝenerale pli rapidaj. 857 00:41:13,930 --> 00:41:16,040 >> Sed malfacilaĵo estas, ke ĝi estas nur pli da laboro. 858 00:41:16,040 --> 00:41:16,730 Estas pli da klopodoj. 859 00:41:16,730 --> 00:41:18,140 Vi devas kompreni datumbazoj. 860 00:41:18,140 --> 00:41:18,940 Vi devas agordi ĝin. 861 00:41:18,940 --> 00:41:20,840 Vi bezonas servilon kuri ke datumbazo plu. 862 00:41:20,840 --> 00:41:22,750 Vi devas kompreni kiel konfiguri ĝin. 863 00:41:22,750 --> 00:41:24,930 Do tiuj estas nur tiuj specojn de komerco maldungitaj. 864 00:41:24,930 --> 00:41:27,860 Pro CSV-dosiero, vi povas krei ĝin per gedit. 865 00:41:27,860 --> 00:41:28,770 Kaj vi estas bonaj iri. 866 00:41:28,770 --> 00:41:31,550 Ne estas komplekseco preter tiu. 867 00:41:31,550 --> 00:41:34,870 >> Uzanta trie anstataŭ hash tablo kun apartaj sinsekvon stoki 868 00:41:34,870 --> 00:41:37,490 vortaro de vortoj memorigas de pset5. 869 00:41:37,490 --> 00:41:42,480 Do oni provas inversita, en la teorio almenaŭ, estas kio? 870 00:41:42,480 --> 00:41:46,380 Konstanta tempo, almenaŭ, se vi estas hashing sur ĉiu de la individuo 871 00:41:46,380 --> 00:41:48,990 literoj en vorto, same kiel vi povus havi por pset5. 872 00:41:48,990 --> 00:41:52,720 Tio povus esti kvin hashes, ses hashes se estas kvin aŭ ses 873 00:41:52,720 --> 00:41:53,900 literoj en la vorto. 874 00:41:53,900 --> 00:41:54,580 Kaj tio estas sufiĉe bonaj. 875 00:41:54,580 --> 00:41:56,910 Kaj se estas supera baro sur kiel longe viajn vortojn povus esti, ke estas 876 00:41:56,910 --> 00:41:59,320 ja asimptote konstanta tempo. 877 00:41:59,320 --> 00:42:05,180 >> Pro hash tabelo kun apartaj ĉeni, la problemo ekzistas kun tiu 878 00:42:05,180 --> 00:42:09,070 speco de datumstrukturo estas ke la agado de via algoritmoj kutime 879 00:42:09,070 --> 00:42:12,700 dependas de la nombro de la aferoj jam en la datumstrukturo. 880 00:42:12,700 --> 00:42:15,660 Kaj tio estas definitive la kazo kun ĉenoj, per la pli stuff vin meti 881 00:42:15,660 --> 00:42:18,800 enen hash tablo, la pli longa tiuj ĉenoj iru, kiu signifas en la plej malbona 882 00:42:18,800 --> 00:42:21,960 kazo, la afero vi povus serĉi estas la tuta vojo al la fino de unu 883 00:42:21,960 --> 00:42:26,000 de tiuj ĉenoj, kiu efike devolves en iu lineara. 884 00:42:26,000 --> 00:42:29,450 >> Nun, en praktiko, ĝi povus absolute esti la kazo ke oni hash tablo kun 885 00:42:29,450 --> 00:42:32,820 ĉenoj estas pli rapida ol la respondaj trie efektivigo. 886 00:42:32,820 --> 00:42:35,570 Sed tio estas pro diversaj kialoj, inter kiuj provas uzi tuta amaso de 887 00:42:35,570 --> 00:42:39,240 memoro kiu povas, fakte, malrapida aferoj malsupren, ĉar vi ne ricevas belan 888 00:42:39,240 --> 00:42:42,410 avantaĝoj de iu nomita caching, kie aferoj, kiuj estas proksime unu 889 00:42:42,410 --> 00:42:45,420 en memoro povas aliri ofte pli rapide. 890 00:42:45,420 --> 00:42:48,180 Kaj foje vi povas veni supren kun vere bona hash funkcio. 891 00:42:48,180 --> 00:42:51,060 Eĉ se vi havas por perdi iom de memoro, eble vi ja povos 892 00:42:51,060 --> 00:42:54,430 trovu tion firme kaj ne kiel malbona kiel lineare. 893 00:42:54,430 --> 00:42:58,410 >> Do mallonge, ne estis bezone kun iu ajn el tiuj unu aŭ eĉ du 894 00:42:58,410 --> 00:43:00,050 specifaj aferoj ni serĉis. 895 00:43:00,050 --> 00:43:03,080 Vere io persvada kiel upside kaj malavantaĝo 896 00:43:03,080 --> 00:43:04,800 ĝenerale kaptis nian okulon. 897 00:43:04,800 --> 00:43:11,840 >> ROB Bowden: Do pro la inversita, ni faris Ne akcepti je lia propra "rapida." Vi 898 00:43:11,840 --> 00:43:14,540 devis diri ion pri tio. 899 00:43:14,540 --> 00:43:17,910 Eĉ se vi diras teorie pli rapide, Ni sciis, ke vi ia komprenis 900 00:43:17,910 --> 00:43:19,470 ke ĝi estas 0 de 1. 901 00:43:19,470 --> 00:43:22,820 Kaj hash tablo, en teorio, ne estas 0 de 1. 902 00:43:22,820 --> 00:43:26,550 Citante ion pri ekzekuto ĝenerale akiris vi la punktoj. 903 00:43:26,550 --> 00:43:32,640 Sed "rapida," la plimulto de la solvaĵoj je la granda tabulo kiuj peras estis 904 00:43:32,640 --> 00:43:34,990 objektive pli malrapida ol solvoj kiuj estis hash tabloj. 905 00:43:34,990 --> 00:43:37,250 Do pli rapide en kaj el si mem ne estas vere vera. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> DAVID J. Malan: Dom De dom dom. 908 00:43:44,380 --> 00:43:46,686 Mi estas probable la sola kiu realigas jen kiel tio supozas ke 909 00:43:46,686 --> 00:43:47,500 prononcus, ĉu ne? 910 00:43:47,500 --> 00:43:50,400 >> ROB Bowden: Mi havis fakte neniun ideon. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. Malan: Ĝi faris senco en mia kapo. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB Bowden: mi faras ĉi tiu. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Do tiu estas tiu, kie vi devis desegni la diagramo simila al vi, multobligita 916 00:44:04,243 --> 00:44:06,040 vidis sur pasinteco ekzamenojn. 917 00:44:06,040 --> 00:44:12,200 Do ni simple rigardi ĉi. 918 00:44:12,200 --> 00:44:18,170 Do el la HTML nodo, ni havas du infanoj, la kapon kaj la korpon. 919 00:44:18,170 --> 00:44:20,570 Do ni branĉo - kapo kaj korpo. 920 00:44:20,570 --> 00:44:22,280 La kapo havas titolon etikedo. 921 00:44:22,280 --> 00:44:23,710 Do ni havas titolon. 922 00:44:23,710 --> 00:44:28,450 >> Nun, la sola afero ke multaj personoj forgot estas ke tiuj tekstoj nodoj estas 923 00:44:28,450 --> 00:44:30,430 elementojn ene de ĉi arbo. 924 00:44:30,430 --> 00:44:36,260 Do jen ni okazi por cxerpi ilin kiel ovaloj por distingi ilin el tiuj 925 00:44:36,260 --> 00:44:37,380 tipoj de nodoj. 926 00:44:37,380 --> 00:44:41,450 Sed avizo Ankaŭ tie ni havas supro, mezo, kaj malsupro finos esti 927 00:44:41,450 --> 00:44:42,560 teksto nodoj. 928 00:44:42,560 --> 00:44:46,250 Do forgesante estis iom de komuna eraro. 929 00:44:46,250 --> 00:44:48,770 >> La korpo havas tri filojn - tiuj tri divs. 930 00:44:48,770 --> 00:44:53,340 Do div, div, div kaj tiam la teksto nodo infanoj de tiuj divs. 931 00:44:53,340 --> 00:44:55,900 Tio estas sufiĉe da ĝi por ke la demandoj. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. Malan: Kaj estas Mencindas, eĉ kvankam ni ne logxas en tiuj 933 00:44:57,860 --> 00:45:01,040 detaloj en la tempo ni pasigas sur Javascript, ke la ordono faras, en 934 00:45:01,040 --> 00:45:02,290 Fakte, afero teknike. 935 00:45:02,290 --> 00:45:06,330 Do, se la kapo venas antaux korpo en la HTML, tiam ĝi devus aperi al la 936 00:45:06,330 --> 00:45:08,860 forlasis de korpo en la fakta DOM. 937 00:45:08,860 --> 00:45:12,265 Ke lia estas, en ĝenerala, simple FYI, iu nomita dokumenton ordo, kie 938 00:45:12,265 --> 00:45:13,260 tio gravas. 939 00:45:13,260 --> 00:45:17,470 Kaj se vi efektivigo sintaksa analizilo, programon kiu legas HTML en konstruaĵo 940 00:45:17,470 --> 00:45:20,960 ĝis la arbo en la memoro, por esti honesta, tio estas intuicie probable kion vi 941 00:45:20,960 --> 00:45:24,720 do ĉiuokaze - supro al malsupro, maldekstre dekstren. 942 00:45:24,720 --> 00:45:26,116 >> ROB Bowden: Demandoj pri tio? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Should I do la venonta unu? 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. Malan: Certe. 946 00:45:32,380 --> 00:45:33,810 >> ROB Bowden: okej. 947 00:45:33,810 --> 00:45:39,320 Do tiu estas la bufro invadita atako demando. 948 00:45:39,320 --> 00:45:43,740 La ĉefa afero por agnoski ĉi tie estas, bone, kiom povus malhelpi lertaĵo 949 00:45:43,740 --> 00:45:46,170 ĉi programo en la ekzekuti arbitra kodo? 950 00:45:46,170 --> 00:45:51,860 Do argv1, la unua komandlinia argumento por ĉi programon, kiu povas esti 951 00:45:51,860 --> 00:45:53,920 arbitre longa. 952 00:45:53,920 --> 00:45:59,160 Sed ĉi tie ni uzas memcpy kopii argv1, kio tie estas trinkejo. 953 00:45:59,160 --> 00:46:00,165 Ni pasante ĝin kiel la argumento. 954 00:46:00,165 --> 00:46:02,050 Kaj tial ĝi estas prenante la nomon trinkejo. 955 00:46:02,050 --> 00:46:08,040 >> Do ni memcpying trinkejo en ĉi tiun buffer c. 956 00:46:08,040 --> 00:46:09,400 Kiom da bajtoj ni kopiado? 957 00:46:09,400 --> 00:46:14,040 Nu tamen multaj bitokoj trinkejo okazas al uzos, la longeco de tiu diskuto. 958 00:46:14,040 --> 00:46:17,930 Sed c estas nur 12 bitokoj larĝa. 959 00:46:17,930 --> 00:46:22,280 Do, se ni tajpi komandlinia argumento ke estas pli longaj ol 12 bitokoj, ni estas 960 00:46:22,280 --> 00:46:25,470 tuj dronigos ĉi aparta bufro. 961 00:46:25,470 --> 00:46:31,000 Nun, kio povus malhelpi trompi la plani en ekzekuti arbitrajn kodo? 962 00:46:31,000 --> 00:46:34,910 >> Do memoru, ke ĉi tie ĉefa vokas foo. 963 00:46:34,910 --> 00:46:37,340 Kaj tiel do la ĉefa alvokoj Foo. 964 00:46:37,340 --> 00:46:40,408 Ni desegnas ĉi. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Do ni havas nian pilo. 967 00:46:46,990 --> 00:46:49,090 Kaj ĉefa havas stack frame ĉe la malsupro. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Je iu punkto, ĉefa alvokoj Foo. 970 00:46:53,250 --> 00:46:55,390 Nu, tuj, ĉefa alvokoj Foo. 971 00:46:55,390 --> 00:46:57,130 Kaj tiel foo ricevas sian propran stack frame. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Nun, en iu punkto, foo tuj revenos. 974 00:47:02,220 --> 00:47:06,810 Kaj iris foo revenas, ni bezonas scii ĉe kio linio de kodo ene de ĉefa ni 975 00:47:06,810 --> 00:47:10,610 estis por scias kie ni devus rekomenci en ĉefa. 976 00:47:10,610 --> 00:47:13,100 Ni povas nomi foo el tutaj fasko da malsamaj lokoj. 977 00:47:13,100 --> 00:47:14,620 Kiel ni scias, kie reveni? 978 00:47:14,620 --> 00:47:16,460 Nu, ni bezonas por stoki ke ie. 979 00:47:16,460 --> 00:47:23,010 >> Do ie dekstra ĉirkaŭ ĉi tien, ni stoki kie ni devus redoni al fojo 980 00:47:23,010 --> 00:47:24,070 foo revenas. 981 00:47:24,070 --> 00:47:26,350 Kaj jen estas la reveno adreso. 982 00:47:26,350 --> 00:47:30,490 Do kiel atakanto povus utiligi de tio estas la fakto, ke 983 00:47:30,490 --> 00:47:37,550 ĉi buffer c estas stokita, ni diri, ĝuste ĉi tie estas c. 984 00:47:37,550 --> 00:47:39,690 Do ni havas 12 bitokoj por c. 985 00:47:39,690 --> 00:47:40,540 Tiu estas c. 986 00:47:40,540 --> 00:47:43,030 Kaj jen estas foo la stako ringo. 987 00:47:43,030 --> 00:47:49,970 Do se la malica uzanto eniras pli bajtoj ol 12 aŭ ili entajpi komandon 988 00:47:49,970 --> 00:47:54,570 linio argumento kiu estas pli longa ol 12 signoj, tiam ni tuj 989 00:47:54,570 --> 00:47:57,540 dronigos ĉi bufro. 990 00:47:57,540 --> 00:47:59,910 >> Ni povas plu iri. 991 00:47:59,910 --> 00:48:02,220 Kaj en iu punkto, ni iru for sufiĉas ke ni komencu 992 00:48:02,220 --> 00:48:05,120 overwriting ĉi reveno adreso. 993 00:48:05,120 --> 00:48:08,310 Do iam ni anstataŭigi la reveno adreson, tio signifas ke kiam foo 994 00:48:08,310 --> 00:48:14,220 revenas, ni revenis al kie ajn la malica uzanto estas diri gxin al per 995 00:48:14,220 --> 00:48:19,490 kion ajn valoron eniris, per kio ajn karakterojn la uzanto eniris. 996 00:48:19,490 --> 00:48:24,320 Kaj do se la malica uzanto estas estante aparte ruza, ĝi povas havi tiun 997 00:48:24,320 --> 00:48:29,255 revenu al ie en la printDef funkcio aŭ ie en la malloc 998 00:48:29,255 --> 00:48:31,830 funkcio, nur ie ajn arbitra. 999 00:48:31,830 --> 00:48:38,420 >> Sed eĉ pli inteligenta estas kio, se li havas la uzanto reveni al ĝuste ĉi tie. 1000 00:48:38,420 --> 00:48:41,920 Kaj tiam vi komencas ekzekutante la tiujn kiel liniojn de kodo. 1001 00:48:41,920 --> 00:48:46,610 Do, je tiu punkto, la uzanto povas eniri kion ajn li volas en tiu regiono. 1002 00:48:46,610 --> 00:48:52,210 Kaj li havas kompletan kontrolon super via programo. 1003 00:48:52,210 --> 00:48:53,460 Demandojn pri tio? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Do la sekva demando estas plenumi la reimplementation de foo en tia vojo 1006 00:49:00,970 --> 00:49:02,620 ke ĝi ne plu vundebla. 1007 00:49:02,620 --> 00:49:03,870 >> Do tie estas kelkaj manieroj vi povus fari tion. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Ni ankoraŭ havas c nur estante de longo 12. 1010 00:49:13,330 --> 00:49:16,480 Vi povus esti ŝanĝita ĉi kiel parto de via solvo. 1011 00:49:16,480 --> 00:49:18,930 Ni ankaŭ aldonis ĉekon por fari certa trinkejo ne estis nula. 1012 00:49:18,930 --> 00:49:24,460 Kvankam vi ne bezonas ke por plena kredito. 1013 00:49:24,460 --> 00:49:27,690 Do ni estas kontrolanta unue la korda longeco de trinkejo. 1014 00:49:27,690 --> 00:49:31,650 Se ĝi estas pli granda ol 12, do Usonanoj ne faru la kopion. 1015 00:49:31,650 --> 00:49:33,010 Do jen unu maniero de fiksi ĝin. 1016 00:49:33,010 --> 00:49:36,750 >> Alia maniero de fiksi estas anstataŭ havanta c esti nur de longo 12, havas ĝin 1017 00:49:36,750 --> 00:49:39,310 esti de longo strlen (stango). 1018 00:49:39,310 --> 00:49:43,370 Alia maniero de fiksi estas por fakte ĝuste reveni. 1019 00:49:43,370 --> 00:49:46,690 Do se vi jxus liveris de ĉiuj tiu, se vi jxus forigis ĉiujn 1020 00:49:46,690 --> 00:49:51,830 linioj de kodo, vi estus alveninta plena kredito, ĉar ĉi tiu funkcio 1021 00:49:51,830 --> 00:49:54,150 ne reale efektivigi ion. 1022 00:49:54,150 --> 00:49:57,650 Ĝi estas simile al la komanda linio argumento en iuj tabelo en 1023 00:49:57,650 --> 00:49:59,960 lia loka stack frame. 1024 00:49:59,960 --> 00:50:01,310 Kaj tiam la afero reveni. 1025 00:50:01,310 --> 00:50:04,020 Kaj kio ajn ĝi plenumita estas for. 1026 00:50:04,020 --> 00:50:09,740 Do reveno estis ankaŭ sufiĉan vojo de pleniĝas kredito. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. Malan: Ne tute la spirito de la demando sed akceptebla por la 1028 00:50:13,425 --> 00:50:15,580 spec tamen. 1029 00:50:15,580 --> 00:50:18,260 >> ROB Bowden: Demandoj pri ajna el kiuj? 1030 00:50:18,260 --> 00:50:22,270 La unu afero, kiun vi almenaŭ bezonis esti kompilita kodo. 1031 00:50:22,270 --> 00:50:24,810 Do kvankam teknike vi ne estas vundeblaj se via kodo ne 1032 00:50:24,810 --> 00:50:29,130 kompili, ni ne akceptas tion. 1033 00:50:29,130 --> 00:50:31,350 Neniu demandojn? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. Malan: Ĉu vi volas diri tiun titolon? 1036 00:50:34,580 --> 00:50:37,230 >> ROB Bowden: N-ro 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. Malan: Do, en ĉi tiu, ĉi Aŭ estis bona novaĵo aŭ malbonaj novaĵoj. 1038 00:50:40,470 --> 00:50:43,870 Ĉi tio estas laŭvorte la saman problemon kiel la unua kvizo. 1039 00:50:43,870 --> 00:50:46,140 Kaj ĝi estas preskaŭ la sama problemo kiel pset1. 1040 00:50:46,140 --> 00:50:49,980 Sed ĝi estis intence simplificó esti simpla piramido, kiu povas esti 1041 00:50:49,980 --> 00:50:52,330 solvita kun iomete simpla ripeto. 1042 00:50:52,330 --> 00:50:55,680 Kaj vere, kion ni fartas, je tie estis ne tiom la logiko, 1043 00:50:55,680 --> 00:50:58,100 ĉar verŝajne, por ĉi tiu punkto, vi estas pli komforta ol vi estis 1044 00:50:58,100 --> 00:51:01,850 en la semajno unu kun por masxojn aŭ kial masxojn, sed por vere turmentus aparte ke 1045 00:51:01,850 --> 00:51:04,790 vi estas iom komforta kun la nocio ke PHP ne estas nur pri kion 1046 00:51:04,790 --> 00:51:05,290 programado. 1047 00:51:05,290 --> 00:51:07,820 Ĝi povas efektive esti uzata kiel lingvo skribi komandlinia programoj. 1048 00:51:07,820 --> 00:51:10,060 >> Kaj efektive, jen kio ni provis por atentigi vin. 1049 00:51:10,060 --> 00:51:12,060 Tio ĉi estas komandlinia PHP-programo. 1050 00:51:12,060 --> 00:51:16,690 Do C-kodo tie, dum korekta en C, kaj ne korektu por PHP. 1051 00:51:16,690 --> 00:51:17,940 Sed la kodo ja estas la sama. 1052 00:51:17,940 --> 00:51:21,720 Se vi komparas la solvojn por Kvizo 0 kontraŭ Kvizo 1, vi trovos ke 1053 00:51:21,720 --> 00:51:25,630 ĝi estas preskaŭ identaj, krom iuj dolaro signoj kaj pro la 1054 00:51:25,630 --> 00:51:27,250 foresto de datumtipo. 1055 00:51:27,250 --> 00:51:31,720 En aparta, se ni tuj iri tien, vi vidos, ke ni ankaŭ persisti, en tiu 1056 00:51:31,720 --> 00:51:33,730 kazo, de 1 ĝis tra 7. 1057 00:51:33,730 --> 00:51:34,910 >> Ni povis esti farinta 0 indekso. 1058 00:51:34,910 --> 00:51:37,320 Sed kelkfoje, mi kredas ke estas nur psike pli facile pripensi aferojn 1059 00:51:37,320 --> 00:51:38,200 de 1 ĝis 7. 1060 00:51:38,200 --> 00:51:40,300 Se vi volas unu bloko, tiam du blokoj, kaj poste tri, tiam 1061 00:51:40,300 --> 00:51:41,770 streketo streketo dot sep. 1062 00:51:41,770 --> 00:51:45,960 Ni J esti pravalorizita al 1 kaj tiam havante supren al i. 1063 00:51:45,960 --> 00:51:48,150 Kaj ĉio ĉi tie estas alie identaj. 1064 00:51:48,150 --> 00:51:49,790 Sed inda noto estas kelkaj aĵoj. 1065 00:51:49,790 --> 00:51:53,230 Ni donas al vi tiujn du liniojn, tiu unua unu, goofily nomata kiel shebang 1066 00:51:53,230 --> 00:51:54,560 pro akra krako. 1067 00:51:54,560 --> 00:51:58,770 Kaj tio nur precizigas la vojo, La dosierujo, en kiu programo povas esti 1068 00:51:58,770 --> 00:52:02,160 trovis ke vi volas uzi interpreti ĉi tiun dosieron. 1069 00:52:02,160 --> 00:52:04,710 >> Kaj tiam la linion post kiu, Kompreneble, ĝi signifas eniri PHP moduso. 1070 00:52:04,710 --> 00:52:07,740 Tiam la linio je la tre malsupro signifas eliro PHP moduso. 1071 00:52:07,740 --> 00:52:09,740 Kaj tio funkcias, ĝenerale, kun interpretitaj lingvoj. 1072 00:52:09,740 --> 00:52:14,370 Ĝi estas speco de ĝena, se vi skribos programo en dosiero nomata foo.php. 1073 00:52:14,370 --> 00:52:17,320 Kaj tiam via uzantoj devas nur memori, OK, kuri ĉi programon, mi 1074 00:52:17,320 --> 00:52:22,320 devi tajpi "php spaco foo.php." Speco de ĝena, se nenio alia. 1075 00:52:22,320 --> 00:52:25,270 Kaj ĝi ankaŭ malkaŝas ke via programo Estas skribita en PHP, kiuj ne estas ĉiuj 1076 00:52:25,270 --> 00:52:27,060 kiuj lumigas por la uzanto. 1077 00:52:27,060 --> 00:52:30,100 >> Do vi povas forigi la. Php tute memoras el prelego. 1078 00:52:30,100 --> 00:52:35,690 Kaj vi povas efektive fari. / Foo se vi jam chmodded gxin per fari gxin 1079 00:52:35,690 --> 00:52:36,500 plenumebla. 1080 00:52:36,500 --> 00:52:39,630 Do chmod a + x foo estus farinta tion. 1081 00:52:39,630 --> 00:52:41,460 Kaj se vi ankaŭ aldonos la shebang tie. 1082 00:52:41,460 --> 00:52:45,320 Sed vere, la problemo estis akiri ĉe presi ion kiel ĉi tio. 1083 00:52:45,320 --> 00:52:51,100 Neniu HTML, sen C-kodo certe, nur iuj PHP. 1084 00:52:51,100 --> 00:52:54,100 Do Milo tiam revenis en problemo 25. 1085 00:52:54,100 --> 00:52:58,050 Kaj en 25, vi estis donita la jena skeleto kodo, kiu estis 1086 00:52:58,050 --> 00:52:59,730 sufiĉe simpla retpaĝo. 1087 00:52:59,730 --> 00:53:04,230 Kaj la sukaj parto HTML-saĝa iris malsupren tie, kie ni havas interne de la korpo 1088 00:53:04,230 --> 00:53:09,160 formon kiu havas unika ID de enigoj ene de kio estis du eniroj, unu 1089 00:53:09,160 --> 00:53:11,950 kun ideo de nomo, unu kun ideo de butono. 1090 00:53:11,950 --> 00:53:14,240 >> La unua estis tipo de teksto, la dua de tipo submetiĝi. 1091 00:53:14,240 --> 00:53:16,930 Kaj tial ni donis al vi, vere, pli ingrediencoj ol vi bezonis, nur tiel 1092 00:53:16,930 --> 00:53:19,230 you guys havis eblojn per kiu solvi ĉi tiun problemon. 1093 00:53:19,230 --> 00:53:21,130 Vi ne strikte bezonas ĉiuj el tiuj identecoj. 1094 00:53:21,130 --> 00:53:23,580 Sed ĝi ebligas vin solvi ĝin en malsamaj manieroj. 1095 00:53:23,580 --> 00:53:27,050 Kaj ĉe la supro, rimarki ke la objektivo estis deĉenigi 1096 00:53:27,050 --> 00:53:27,960 fenestro kiel tiu - 1097 00:53:27,960 --> 00:53:28,780 Saluton, Milo! - 1098 00:53:28,780 --> 00:53:31,270 pop-supre en la retumilo uzante la super simpla, se 1099 00:53:31,270 --> 00:53:33,190 Ne malbela, garde funkcio. 1100 00:53:33,190 --> 00:53:37,480 Kaj do, finfine, ĉi bolas malsupren koncepte al iel aŭskultante por 1101 00:53:37,480 --> 00:53:41,290 prezentoj de la formo kliento-flanko , Ne la servilon-flanko, iel 1102 00:53:41,290 --> 00:53:45,640 respondi al tiu submetiĝo de kaptante la valoron kiun la uzanto tajpas 1103 00:53:45,640 --> 00:53:50,120 en la nomo de kampo, kaj poste montri ĝin en la korpon de garde. 1104 00:53:50,120 --> 00:53:53,460 >> Do unu vojo vi povas fari ĉi tion estas kun jQuery, kiu aspektas iomete 1105 00:53:53,460 --> 00:53:56,880 sintakse konfuzaj unue. 1106 00:53:56,880 --> 00:54:00,760 Vi povas fari tion per pura DOM kodo - document.getelement de ID. 1107 00:54:00,760 --> 00:54:02,530 Sed ni rigardu tiun version. 1108 00:54:02,530 --> 00:54:05,110 Mi havas kelkajn gravajn liniojn unue. 1109 00:54:05,110 --> 00:54:09,460 Do, ni havas tiun linion, kiu estas identa al kio vi eble vidis 1110 00:54:09,460 --> 00:54:13,830 en, mi kredas, form2.html el klaso en semajno 9. 1111 00:54:13,830 --> 00:54:16,960 Kaj tiu estas nur diras, ekzekuti la jena kodo kiam 1112 00:54:16,960 --> 00:54:18,430 La dokumento estas preta. 1113 00:54:18,430 --> 00:54:21,770 Tiu estas grava nur ĉar HTML-paĝojn oni legas supre 1114 00:54:21,770 --> 00:54:23,280 fundo, maldekstre dekstren. 1115 00:54:23,280 --> 00:54:27,910 >> Kaj do, se vi provos fari ion en kodo supren tie al iu DOM 1116 00:54:27,910 --> 00:54:31,560 elemento, kelkaj HTML-etikedon, jen malsupren ĉi tie, vi faras ĝin tro frue, 1117 00:54:31,560 --> 00:54:34,220 ĉar tio havas eĉ ne estis legitaj en la memoro. 1118 00:54:34,220 --> 00:54:37,740 Do dirante ĉi document.ready linio, ni jene: 1119 00:54:37,740 --> 00:54:39,040 jen iu kodo, foliumilo. 1120 00:54:39,040 --> 00:54:42,440 Sed ne ekzekuti ĉi ĝis la tuta dokumento estas preta, kiu estas la DOM 1121 00:54:42,440 --> 00:54:44,320 arbo ekzistas en memoro. 1122 00:54:44,320 --> 00:54:47,110 Ĉi tiu estas iom pli simpla, se sintakse a 1123 00:54:47,110 --> 00:54:51,890 iom malsamaj, kie mi estas diranta, grab la HTML-elemento kies sola 1124 00:54:51,890 --> 00:54:53,560 ensalutilo estas enigoj. 1125 00:54:53,560 --> 00:54:56,220 Tio estas kion la hash etikedon signifas, la unika identigilo. 1126 00:54:56,220 --> 00:54:58,070 Kaj tiam mi petas. Submetiĝi. 1127 00:54:58,070 --> 00:55:01,660 >> Tiel. Submit tie estas funkcio, alie konata kiel metodo, jen 1128 00:55:01,660 --> 00:55:05,850 interne de la objekto en la maldekstra mano flanko, ke mi ne elstari. 1129 00:55:05,850 --> 00:55:08,990 Do, se vi pensas pri enigoj kiel objekto en memoro - kaj ja estas. 1130 00:55:08,990 --> 00:55:10,440 Ĝi estas vertico en arbo - 1131 00:55:10,440 --> 00:55:16,580 . Submit rimedoj kiam tiu formo kun tiu ID estas donita, ekzekuti 1132 00:55:16,580 --> 00:55:17,700 la jena kodo. 1133 00:55:17,700 --> 00:55:20,290 Mi ne zorgas, kion la nomo de la funkcio estas mi ekzekuti. 1134 00:55:20,290 --> 00:55:23,760 Do ĉi tie mi uzas, kiel antaŭe, kio estas vokis la lambda funkcio aŭ 1135 00:55:23,760 --> 00:55:24,720 anonima funkcio. 1136 00:55:24,720 --> 00:55:27,640 Ĝi ne estas ĉe ĉiuj intelekte Interesa alia ol ĝi ne havas nomon, 1137 00:55:27,640 --> 00:55:30,220 kiu estas delikata se vi estas nur iam tuj nomas ĝin unufoje. 1138 00:55:30,220 --> 00:55:34,490 Kaj ene de tie mi efektive manipuli la submetiĝo de la formularo. 1139 00:55:34,490 --> 00:55:36,810 Mi unue deklari variablon vokis valoro. 1140 00:55:36,810 --> 00:55:40,610 Kaj tiam kia estas la efiko de tiu reliefigis porcion tie nun? 1141 00:55:40,610 --> 00:55:44,755 Kion tio do ĉe alta nivelo por mi? 1142 00:55:44,755 --> 00:55:48,539 >> Spektantaro: ĝi ricevas la valoron kiun la uzanto ne en la HTML-sube. 1143 00:55:48,539 --> 00:55:50,920 Ĝi alvenas ke IRU kaj tiam Trovas la valoron de tio. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. Malan: Ekzakte. 1145 00:55:51,590 --> 00:55:54,300 Ĝi kaptas la nodo, kies sola ensalutilo estas nomo. 1146 00:55:54,300 --> 00:55:56,900 Ĝi ricevas la valoron en gxi, kiuj Estas, supozeble, kion la uzanto 1147 00:55:56,900 --> 00:55:58,190 tajpitaj li aŭ ŝi. 1148 00:55:58,190 --> 00:56:01,020 Kaj poste stokas, ke en la variablon nomitan valoron. 1149 00:56:01,020 --> 00:56:03,720 Kiel flanken, vi povus havi ankaŭ faris tion iom malsame. 1150 00:56:03,720 --> 00:56:09,250 Plene akcepteblaj de faranta ion mensogo var valoro gets 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 Kaj tio estas kial ĝi estas iom teda por ne uzi jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Nomo". Valoro. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Do tute akceptebla. 1157 00:56:19,620 --> 00:56:22,770 Malsamaj manieroj por fari tion. jQuery nur emas esti iom pli konciza kaj 1158 00:56:22,770 --> 00:56:25,230 definitive pli populara inter programistoj. 1159 00:56:25,230 --> 00:56:27,590 >> Nun, mi faras iom da prudento kontrolu, ĉar en la problemo 1160 00:56:27,590 --> 00:56:30,820 komunikaĵo ni eksplicite diris, se la uzanto ankoraŭ ne tajpis lia aŭ ŝia 1161 00:56:30,820 --> 00:56:32,580 enoficigi, ne montras atentigoj. 1162 00:56:32,580 --> 00:56:35,390 Sed vi povas kontroli, ke, por nur kontrolanta por la malplena linio por 1163 00:56:35,390 --> 00:56:37,850 citaĵo-unquote se ekzistas nenio vere ekzistas. 1164 00:56:37,850 --> 00:56:40,880 Sed se estas ne egala al citaĵo-unquote, Mi volas nomi atentigoj. 1165 00:56:40,880 --> 00:56:45,610 Kaj la interesa parto estas, ke ni uzas la alpago operatoro, kiu 1166 00:56:45,610 --> 00:56:48,130 faras kion en JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Concatenate. 1168 00:56:48,740 --> 00:56:50,690 Do gxi estas kiel PHPs skalara operatoro. 1169 00:56:50,690 --> 00:56:52,820 Sama ideo, iomete malsama sintakso. 1170 00:56:52,820 --> 00:56:55,280 Kaj mi simple krei la kordo, kiu vi vidis sur la ekrankopio - 1171 00:56:55,280 --> 00:56:57,750 Saluton, tiom kaj tiom. 1172 00:56:57,750 --> 00:56:59,200 >> Kaj tiam la lasta detalo estas cxi. 1173 00:56:59,200 --> 00:57:04,970 Kial mi revenu falsaj interne de tiu anonima funkcio? 1174 00:57:04,970 --> 00:57:07,420 >> Spektantaro: Mankas valoro. 1175 00:57:07,420 --> 00:57:09,380 Vi metis ĝin en formo. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Ĝi ĵus diras, se valoro ne estas egala al malplena, tiam faru. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Okazis malplenan en tiu submetiĝo. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. Malan: okej. 1181 00:57:21,170 --> 00:57:21,640 Zorga kvankam. 1182 00:57:21,640 --> 00:57:22,830 Estas neniu alia ĉi tie. 1183 00:57:22,830 --> 00:57:25,510 Kaj tiu reveno falsa estas ekstere de la se kondiĉoj. 1184 00:57:25,510 --> 00:57:29,470 Do tiu reliefigis linio, revenu mensoganto, ekzekutas negrave kia kiam 1185 00:57:29,470 --> 00:57:32,310 La formo estas donita. 1186 00:57:32,310 --> 00:57:36,810 Kion signifas reveni falsaj ene de ĉi eventa traktilo, kiel ĝi nomiĝas, 1187 00:57:36,810 --> 00:57:38,450 la okazaĵo en demando esti submetiĝo? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> Spektantaro: Pro tio okazas nur unufoje. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. Malan: Nur okazas unufoje. 1191 00:57:45,320 --> 00:57:46,821 Ne tute. 1192 00:57:46,821 --> 00:57:47,292 Jes? 1193 00:57:47,292 --> 00:57:50,589 >> Spektantaro: ĝi malhelpas la formo de obeante la defaŭlta konduto, 1194 00:57:50,589 --> 00:57:52,480 kio farus la paĝon Reŝarĝi. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. Malan: Ekzakte. 1196 00:57:53,110 --> 00:57:56,490 Do mi superŝarĝi la termino submit ĉi tie, ĉar mi diras, la formo estas 1197 00:57:56,490 --> 00:57:57,670 esti donita. 1198 00:57:57,670 --> 00:58:02,240 Sed kiel vi sugestas, ĝi fakte ne estas prezentis en la vera HTTP vojo. 1199 00:58:02,240 --> 00:58:06,870 Kiam vi klakas Submetu, pro nia onSubmit traktilo, ni interkapti 1200 00:58:06,870 --> 00:58:09,040 tiun formon submetiĝo tiel diri. 1201 00:58:09,040 --> 00:58:11,290 Ni tiam fari nian aferon kun JavaScript kodo. 1202 00:58:11,290 --> 00:58:14,070 Sed mi intence redoni malvera, ĉar kion mi ne volas okazos 1203 00:58:14,070 --> 00:58:18,430 ono de sekundo posta, estas por la tuta formo mem por esti prezentita al la retejo 1204 00:58:18,430 --> 00:58:22,800 servilo kun ŝlosilo valoro paroj ŝanĝante la retadreson al iu kiel 1205 00:58:22,800 --> 00:58:26,180 q = katoj aŭ kion ajn ni faris, ekzemple, en la klaso. 1206 00:58:26,180 --> 00:58:29,640 Mi ne volas ke tio okazas, ĉar ne estas servilo aŭskultado de tiu 1207 00:58:29,640 --> 00:58:30,690 formi submetiĝo. 1208 00:58:30,690 --> 00:58:32,320 Ĝi estas pure farita en JavaScript kodo. 1209 00:58:32,320 --> 00:58:35,760 Kaj tio estas kial mi ecx ne havas ago atribui mian formon, ĉar mi 1210 00:58:35,760 --> 00:58:38,870 ne intencas por ĉi tion al iam iri al la servilo. 1211 00:58:38,870 --> 00:58:40,780 >> Do ĝi estas esti donita. 1212 00:58:40,780 --> 00:58:44,340 Sed ni interkapti tiun formon submetiĝo kaj malhelpante la defaŭltan 1213 00:58:44,340 --> 00:58:47,477 konduto, kio estas efektive iri la tutan vojon al la servilo. 1214 00:58:47,477 --> 00:58:48,730 >> Spektantaro: Do ​​subtenante ŝin kliento-flanko. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. Malan: Keeping ĝi kliento-flanko. 1216 00:58:49,780 --> 00:58:51,030 Ekzakte pravas. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Sekva supren estis mia ho MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB Bowden: okej. 1221 00:59:00,430 --> 00:59:04,990 Do tiu unua demando estis ĝenerale malglata por homoj. 1222 00:59:04,990 --> 00:59:07,270 Kvankam la postaj iris bone. 1223 00:59:07,270 --> 00:59:12,260 Do vi devis elekti la korektan datumoj tipoj por ambaŭ tiuj kolumnoj. 1224 00:59:12,260 --> 00:59:17,750 Ambaux havas iujn aferojn pri ili, ke 1225 00:59:17,750 --> 00:59:20,620 fari la elekton malfacila. 1226 00:59:20,620 --> 00:59:24,430 Do int ne estis valida tajpi por nombro. 1227 00:59:24,430 --> 00:59:29,410 La kialo estante 12-ciferaj konton nombro, an int estas ne sufiĉe grandaj por 1228 00:59:29,410 --> 00:59:31,070 stoki tutan ciferoj. 1229 00:59:31,070 --> 00:59:36,570 Do valida elekto estus estinta granda int se vi hazarde scias ke. 1230 00:59:36,570 --> 00:59:42,090 Alia elekto povus esti a char kampo de longo 12. 1231 00:59:42,090 --> 00:59:44,560 Do ĉu de tiuj estus laborinta. 1232 00:59:44,560 --> 00:59:46,100 Mez ne volis. 1233 00:59:46,100 --> 00:59:50,170 >> Nun, ekvilibro, opinias reen al pset7. 1234 00:59:50,170 --> 00:59:59,540 Do ni specife uzata dekuma al stoki la valoro de agoj aŭ - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID J. Malan: Cash. 1236 01:00:00,550 --> 01:00:01,060 >> ROB Bowden: Cash. 1237 01:00:01,060 --> 01:00:05,710 Ni uzas decimalan stoki la kvanto de kontanta mono, ke la uzanto aktuale havas. 1238 01:00:05,710 --> 01:00:10,950 Do la kialo ni faros tion, kio ĉar rememoru, flosas. 1239 01:00:10,950 --> 01:00:12,480 Tie estas glitpunktaj en precizeco. 1240 01:00:12,480 --> 01:00:18,200 Ĝi ne povas precize stoki la kontanta mono valorojn kiel ni volas cxi tie. 1241 01:00:18,200 --> 01:00:23,630 Do dekuma povas precize vendejo io, diru, du dekumaj lokoj. 1242 01:00:23,630 --> 01:00:27,630 Tio estas kial ekvilibro, ni volas ĝin esti dekuma kaj ne flosi. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. Malan: Kaj ankaŭ, tro, kvankam tio povis esti ruza en aliaj 1244 01:00:30,230 --> 01:00:32,760 kuntekstoj pensi, eble tiu Estas ŝanco por int. 1245 01:00:32,760 --> 01:00:34,420 Mi nur sekvigi aĵojn en cendoj. 1246 01:00:34,420 --> 01:00:38,670 Ĉar ni eksplicite montris la defaŭltan valoro de esti 100.00, ke 1247 01:00:38,670 --> 01:00:40,380 signifas ke ĝi povus simple esti int. 1248 01:00:40,380 --> 01:00:45,310 Kaj alia subtileco tro kun nombro estis, ke ĝi ne signifis 1249 01:00:45,310 --> 01:00:46,180 esti lertaĵo demando. 1250 01:00:46,180 --> 01:00:49,860 Sed memoru, ke int en MySQL, kiel en C, almenaŭ en la 1251 01:00:49,860 --> 01:00:51,440 aparato, estas 32-bita. 1252 01:00:51,440 --> 01:00:53,960 Kaj eĉ se ni ne atendas vin scias ekzakte kiom da ciferoj kiujn 1253 01:00:53,960 --> 01:00:56,910 rimedoj, ja memori, ke la plej granda nombro vi povas reprezenti potenciale 1254 01:00:56,910 --> 01:01:00,710 kun 32-bitan nombro estas malglate kio? 1255 01:01:00,710 --> 01:01:02,760 >> Kio nombro ni ĉiam diras? 1256 01:01:02,760 --> 01:01:04,530 2 al la 32, kiu estas kiu krude? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Vi ne bezonas scii precize. 1259 01:01:08,780 --> 01:01:10,580 Sed malglate estas utila vivo. 1260 01:01:10,580 --> 01:01:12,200 Ĝi estas proksimume 4 miliardoj. 1261 01:01:12,200 --> 01:01:14,430 Do ni jam diris, ke en kelkaj okazoj. 1262 01:01:14,430 --> 01:01:16,360 Mi scias, mi jam diris, ke en kelkaj okazoj. 1263 01:01:16,360 --> 01:01:17,670 Kaj ĝi estas proksimume 4 miliardoj. 1264 01:01:17,670 --> 01:01:19,710 Kaj tio estas bona regulo de dikfingro scii. 1265 01:01:19,710 --> 01:01:21,880 Se vi havas 8 bitojn, 256 estas la magia nombro. 1266 01:01:21,880 --> 01:01:24,160 Se vi havas 32 bitojn, 4 miliardo donos nek preni. 1267 01:01:24,160 --> 01:01:27,140 Do, se vi nur noti 4 miliardoj, vi vidos, ke ĝi estas malpli ciferojn ol 1268 01:01:27,140 --> 01:01:30,970 12, kiu signifas ke estas klare ne sufiĉe esprimpovo kapti 1269 01:01:30,970 --> 01:01:34,220 12-ciferaj konton nombro. 1270 01:01:34,220 --> 01:01:34,940 >> ROB Bowden: okej. 1271 01:01:34,940 --> 01:01:38,520 Do la aliaj aĵoj iris bone. 1272 01:01:38,520 --> 01:01:40,900 Do supozu ke la banko postulas $ 20 ĉiumonate 1273 01:01:40,900 --> 01:01:42,400 bontenado kotizo je ĉiuj kontoj. 1274 01:01:42,400 --> 01:01:45,506 Kun kia SQL query povis la bankon dedukti $ 20 el ĉiu grafo, eĉ se 1275 01:01:45,506 --> 01:01:47,520 ĝi rezultas en iuj negativaj pesiloj? 1276 01:01:47,520 --> 01:01:50,380 Do esence, estas kvar ĉefaj tipoj de konsultoj - 1277 01:01:50,380 --> 01:01:52,840 enigi, elektu, ĝisdatigo kaj forviŝi. 1278 01:01:52,840 --> 01:01:56,080 Do kion ni pensas ke ni estas tuj uzos ĉi tie? 1279 01:01:56,080 --> 01:01:57,000 Ĝisdatigi. 1280 01:01:57,000 --> 01:01:58,260 >> Do ni rigardu. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Do jen ni ĝisdatigi. 1283 01:02:05,870 --> 01:02:09,900 Kio tablo ni ĝisdatigi kontoj? 1284 01:02:09,900 --> 01:02:11,670 Do ĝisdatigi kontojn. 1285 01:02:11,670 --> 01:02:15,390 Kaj tiam la sintakso diras, kion en kontoj estas ni ĝisdatigo? 1286 01:02:15,390 --> 01:02:19,520 Nu, ni opcio pesilo egalas al la aktuala valoro de balanciĝo minus 20. 1287 01:02:19,520 --> 01:02:22,860 Do tiu ĝisdatigos ĉiuj vicoj de kontoj, subtrahanta 1288 01:02:22,860 --> 01:02:26,250 $ 20 de la ekvilibro. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. Malan: Al komuna eraro ĉi tie, eĉ kvankam ni iam pardonis ŝin, 1290 01:02:29,260 --> 01:02:32,990 iris al reale havas PHP kodo tien vokas la informpeto funkcio aŭ metante 1291 01:02:32,990 --> 01:02:35,460 citiloj ĉirkaŭ ĉio tio ne bezonas esti tie. 1292 01:02:35,460 --> 01:02:39,780 >> ROB Bowden: Memoru, ke MySQL estas apartan lingvon de PHP. 1293 01:02:39,780 --> 01:02:42,410 Ni hazarde skribos MySQL en PHP. 1294 01:02:42,410 --> 01:02:46,180 Kaj PHP estas poste sendas gxin super la MySQL-servilo. 1295 01:02:46,180 --> 01:02:51,120 Sed vi ne bezonas PHP-celo komuniki kun MySQL servilon. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. Malan: Ekzakte. 1297 01:02:51,730 --> 01:02:54,240 Do neniu variablojn kun dolaro signoj devus esti en tiu kunteksto. 1298 01:02:54,240 --> 01:02:59,550 Ĝi povas simple fari ĉiujn da la matematiko ene de la datumbazo mem. 1299 01:02:59,550 --> 01:03:00,080 >> ROB Bowden: okej. 1300 01:03:00,080 --> 01:03:01,300 Do la proksimaj unu. 1301 01:03:01,300 --> 01:03:02,731 Ĉu tiu estas la venonta unu? 1302 01:03:02,731 --> 01:03:03,210 Jes. 1303 01:03:03,210 --> 01:03:06,570 Do per kio SQL query povis la bankon retrovi la konto numeroj de lia 1304 01:03:06,570 --> 01:03:09,300 riĉaj klientoj, tiuj kun Pesilo granda ol 1.000? 1305 01:03:09,300 --> 01:03:13,280 Do kiu el la kvar ĉefaj specoj ni tuj volas ĉi tie? 1306 01:03:13,280 --> 01:03:14,430 Selektu. 1307 01:03:14,430 --> 01:03:16,650 Do ni volas elekti. 1308 01:03:16,650 --> 01:03:17,610 Kion ni volas elekti? 1309 01:03:17,610 --> 01:03:19,380 Kio kolumnon cxu ni volas elekti? 1310 01:03:19,380 --> 01:03:20,970 Ni estos specife volas elekti nombron. 1311 01:03:20,970 --> 01:03:23,910 Sed se vi diris, stelo, ni ankaŭ akceptis ke. 1312 01:03:23,910 --> 01:03:25,820 >> Do elektu numeron de kio tablo? 1313 01:03:25,820 --> 01:03:26,640 Kontoj. 1314 01:03:26,640 --> 01:03:28,370 Kaj tiam la kondiĉo ni volas? 1315 01:03:28,370 --> 01:03:30,140 Kie ekvilibro granda ol 1,000. 1316 01:03:30,140 --> 01:03:31,720 Ni akceptis ankaŭ granda ol aŭ egala. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Lasta. 1319 01:03:36,190 --> 01:03:42,940 Kun kia SQL query povis la bankon apude, tio estas:, forigi ĉiun konto ke 1320 01:03:42,940 --> 01:03:44,480 havas ekvilibron de $ 0? 1321 01:03:44,480 --> 01:03:47,620 Do kiu el la kvar estas ni tuj volas uzi? 1322 01:03:47,620 --> 01:03:48,320 Delete. 1323 01:03:48,320 --> 01:03:50,180 Do la sintakson por tiu? 1324 01:03:50,180 --> 01:03:51,890 Forigi el kio tablo? 1325 01:03:51,890 --> 01:03:53,550 Kontoj. 1326 01:03:53,550 --> 01:03:55,790 Kaj tiam la kondiĉo, sur kiu ni volas forigi - 1327 01:03:55,790 --> 01:03:57,280 kie pesilo egalas nulo. 1328 01:03:57,280 --> 01:04:03,050 Do delete ĉiuj vicoj de kontoj kie la ekvilibro estas nulo. 1329 01:04:03,050 --> 01:04:04,300 Demandojn pri iu el tiuj? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Volas enviciĝi? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. Malan: Queue gvidilo. 1333 01:04:11,200 --> 01:04:17,110 Do, en ĉi tiu, ni donis al vi iom familiara strukturo kiu ni esploris 1334 01:04:17,110 --> 01:04:20,450 bito en la klaso apud de structs, kiu estis datumoj 1335 01:04:20,450 --> 01:04:21,910 strukturo rilataj, en la Spirito. 1336 01:04:21,910 --> 01:04:24,670 La diferenco kvankam kun vosto estas ke ni devis iel memoras kiu 1337 01:04:24,670 --> 01:04:27,900 Estis en la fronto de la atendovico, en grandaj parto por ke ni povus fari pli 1338 01:04:27,900 --> 01:04:30,530 efika uzo de la memoro, almenaŭ se ni uzis tabelo. 1339 01:04:30,530 --> 01:04:35,460 >> Ĉar revokon, se ni havas tabelo, se, Ekzemple, ĉi tio estas la antaŭa parto de 1340 01:04:35,460 --> 01:04:38,470 La vosto, se mi eniras en la atendovico ĉi tie, kaj tiam iu metas en linio 1341 01:04:38,470 --> 01:04:42,710 malantaŭ mi, malantaŭ mi, malantaŭ mi, kaj unu persono paŝas el linio, vi 1342 01:04:42,710 --> 01:04:45,930 povis, kiel ni vidis kelkajn de niaj homaj volontuloj en la klaso, havas ĉiuj 1343 01:04:45,930 --> 01:04:47,100 ŝanĝi ĉi vojon. 1344 01:04:47,100 --> 01:04:50,880 Sed ĝenerale, esti ĉiuj faras io estas ne la plej bona uzo de tempo 1345 01:04:50,880 --> 01:04:54,600 en programo, ĉar ĝi signifas via algoritmo ruliĝas en kio 1346 01:04:54,600 --> 01:04:56,520 asimptota rula tempo? 1347 01:04:56,520 --> 01:04:57,420 Ĝi estas lineara. 1348 01:04:57,420 --> 01:04:59,600 >> Kaj mi sentas ke estas iom stulta. 1349 01:04:59,600 --> 01:05:02,890 Se la sekvanta persono en linio estas la sekva persono, kiu supozas, por iri en la 1350 01:05:02,890 --> 01:05:04,660 vendejo, ne ĉiuj havas movi kune. 1351 01:05:04,660 --> 01:05:08,200 Nur lasu tiun personon esti desxiritan kiam la tempo venos, ekzemple. 1352 01:05:08,200 --> 01:05:09,870 Do ni povas savi iom da tempo tie. 1353 01:05:09,870 --> 01:05:14,840 Kaj fari tiel, ke kvankam, tio signifas ke la kapo de la vosto aŭ la 1354 01:05:14,840 --> 01:05:18,060 antaŭ la vosto tuj iom post iom movi pli kaj pli profunden 1355 01:05:18,060 --> 01:05:23,340 en la tabelo kaj eventuale multobligita reale wrap ĉirkaŭ se ni uzas la 1356 01:05:23,340 --> 01:05:25,790 tabelo por stoki la popolo en ĉi tiu vico. 1357 01:05:25,790 --> 01:05:28,390 Do vi povas preskaŭ pensas pri la tabelo kiel cirkla datumoj 1358 01:05:28,390 --> 01:05:29,880 strukturo en tiu senco. 1359 01:05:29,880 --> 01:05:33,970 >> Do vi iel devas sekvigi la grandeco de ĝi aŭ vere la fino de tio 1360 01:05:33,970 --> 01:05:36,250 kaj do kie la komenco de ĝi estas. 1361 01:05:36,250 --> 01:05:39,490 Do ni proponas ke vi rakontu unu tia atendovico, voko 1362 01:05:39,490 --> 01:05:41,330 ĝi q, nur unu letero. 1363 01:05:41,330 --> 01:05:44,570 Tiam ni proponas ke la fronto estos pravalorizita al nulo kaj ke la grandeco 1364 01:05:44,570 --> 01:05:45,470 esti pravalorizita al nulo. 1365 01:05:45,470 --> 01:05:47,770 >> Do nun, estas nenio ene de tiu vico. 1366 01:05:47,770 --> 01:05:50,910 Kaj ni petas vin kompletigi la efektivigo de enqueue malsupre en 1367 01:05:50,910 --> 01:05:55,250 tiel ke la funkcio aldonas n al la finon de q kaj tiam revenas vera. 1368 01:05:55,250 --> 01:05:58,690 Sed se q estas plena aŭ negativa, la funkcio devus anstataŭe redoni malvera. 1369 01:05:58,690 --> 01:06:01,060 Kaj ni donis al vi paro de supozoj. 1370 01:06:01,060 --> 01:06:04,320 Sed ili ne estas vere funkcie adekvata, nur ke bool ekzistas, 1371 01:06:04,320 --> 01:06:06,690 ĉar, teknike, bool ne ekzistas en C, se vi ne inkluzivas 1372 01:06:06,690 --> 01:06:07,310 certaj kaplinio dosiero. 1373 01:06:07,310 --> 01:06:09,350 Por ke oni simple certigi tie estis neniu estas ĉi lertaĵo 1374 01:06:09,350 --> 01:06:10,940 demando speco de afero. 1375 01:06:10,940 --> 01:06:16,280 >> Do enqueue, ni proponis en la specimeno solvoj por apliki jene. 1376 01:06:16,280 --> 01:06:20,420 Unu, ni unue kontrolu la facileco, la malalta kovrotukon fruktoj. 1377 01:06:20,420 --> 01:06:23,820 Se la vosto estas plena aŭ la nombro ke vi provas enmeti estas malpli 1378 01:06:23,820 --> 01:06:26,380 ol nulo, kion ni diris en la specifo de la problemo devus 1379 01:06:26,380 --> 01:06:30,320 ne estos permesita, ĉar ni nur volas nenegativaj valoroj, tiam vi devus 1380 01:06:30,320 --> 01:06:31,640 nur redoni malvera tuj. 1381 01:06:31,640 --> 01:06:33,820 Do iuj relative facila eraro checking. 1382 01:06:33,820 --> 01:06:38,720 Se tamen vi volas aldoni, ke la efektiva nombro, vi devis fari iom de 1383 01:06:38,720 --> 01:06:39,440 pensante tie. 1384 01:06:39,440 --> 01:06:41,330 Kaj ĉi tiu estas kie ĝi estas iom ĝena mense, ĉar vi devas 1385 01:06:41,330 --> 01:06:43,000 elkompreni kiel manipuli wraparound. 1386 01:06:43,000 --> 01:06:46,870 >> Sed la ĝermo de la ideo tie tio de intereson por ni estas ke wraparound 1387 01:06:46,870 --> 01:06:51,480 ofte implicas modula aritmetiko kaj la mod operatoro, la procento flanko 1388 01:06:51,480 --> 01:06:55,140 kie vi povas iri de unu pli granda valoro reen al nulo kaj tiam unu kaj du kaj 1389 01:06:55,140 --> 01:06:58,650 tri kaj poste revenos ĉirkaŭ nulo, unu kaj du kaj tri, ks 1390 01:06:58,650 --> 01:06:59,380 denove kaj denove. 1391 01:06:59,380 --> 01:07:02,880 Do la vojon Ni proponas fari tion estas ke ni volas indekson en la 1392 01:07:02,880 --> 01:07:05,850 tabelo nomis ciferojn kie nia entjeroj mensogas. 1393 01:07:05,850 --> 01:07:10,740 Sed por iri tien, ni unue volas fari sendepende de la grandeco de la vosto estas nur 1394 01:07:10,740 --> 01:07:14,080 tiam aldonu al tio, kion la fronto de la listo estas. 1395 01:07:14,080 --> 01:07:17,880 Kaj la efekto de tiu estas meti nin en la dekstra pozicio en la atendovico, kaj 1396 01:07:17,880 --> 01:07:20,970 Ne supozu, ke la unua persono en linio estas je la komenco, kion li aŭ 1397 01:07:20,970 --> 01:07:24,130 ŝi tute povus esti se ni estis ankaŭ sxangxigxantaj ĉiuj. 1398 01:07:24,130 --> 01:07:26,710 Sed ni nur kreante verkon por ni se ni prenas 1399 01:07:26,710 --> 01:07:27,800 ke apartan vojon. 1400 01:07:27,800 --> 01:07:29,330 >> Do ni povas konservi gxin relative simpla. 1401 01:07:29,330 --> 01:07:32,180 Ni devas memori, ke ni simple aldonis int al la vico. 1402 01:07:32,180 --> 01:07:35,850 Kaj tiam ni ĵus revenas vera. 1403 01:07:35,850 --> 01:07:38,560 Dume, en dequeue, ni demandis vi faru la sekvan. 1404 01:07:38,560 --> 01:07:42,260 Apliki ĝin en tia maniero, ke ĝi dequeues, kiu estas Forigas kaj revenoj, 1405 01:07:42,260 --> 01:07:44,190 la int ĉe la fronto de vosto. 1406 01:07:44,190 --> 01:07:46,410 Por forigi la int, sufichas forgesi ĝin. 1407 01:07:46,410 --> 01:07:47,650 Vi ne bezonas nuligi lian bito. 1408 01:07:47,650 --> 01:07:48,820 Do estas ankoraŭ reale ekzistas. 1409 01:07:48,820 --> 01:07:51,930 Ĝuste kiel datumoj en malmola disko, ni simple ignoras la fakton 1410 01:07:51,930 --> 01:07:52,970 ke ĝi estas nun. 1411 01:07:52,970 --> 01:07:55,520 Kaj se q estas malplena, oni devus anstataŭ reveni negativa 1. 1412 01:07:55,520 --> 01:07:56,750 Do tiu sentas arbitra. 1413 01:07:56,750 --> 01:08:01,640 Kial revenu negativa 1 anstataŭ falsa? 1414 01:08:01,640 --> 01:08:02,620 Jes. 1415 01:08:02,620 --> 01:08:05,070 >> Spektantaro: Q estas stokante pozitivajn valorojn. 1416 01:08:05,070 --> 01:08:10,950 Ĉar vi stoki nur pozitivajn valorojn en la q, negativa estas eraro. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. Malan: OK, veraj. 1418 01:08:11,510 --> 01:08:14,850 Do ĉar ni nur stokante pozitiva valorojn aŭ nulo, tiam gxi estas bone al 1419 01:08:14,850 --> 01:08:18,050 revenu negativan valoron kiel sentinelo valoro, speciala simbolo. 1420 01:08:18,050 --> 01:08:21,630 Sed vi reskribi historion tie, ĉar la kialo ni estas nur 1421 01:08:21,630 --> 01:08:25,890 reveninte nenegativaj valoroj estas ĉar ni volas 1422 01:08:25,890 --> 01:08:27,670 havi gardostaranto valoro. 1423 01:08:27,670 --> 01:08:32,617 Do, pli specife, kial ne simple redoni malvera en kazoj de eraroj? 1424 01:08:32,617 --> 01:08:33,099 Jes. 1425 01:08:33,099 --> 01:08:35,510 >> Spektantaro: Vi jam malsukcesis reveni entjero. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. Malan: Ekzakte. 1427 01:08:36,630 --> 01:08:38,569 Kaj ĉi tiu estas kie C gets bela constriñendo. 1428 01:08:38,569 --> 01:08:40,590 Se vi diras ke vi iras reveni an int, vi havas 1429 01:08:40,590 --> 01:08:41,279 reveni an int. 1430 01:08:41,279 --> 01:08:43,689 Vi ne povas imagi kaj komenci reveni a bool aŭ kaleŝego aŭ 1431 01:08:43,689 --> 01:08:45,040 ŝnuro aŭ io kiel tio. 1432 01:08:45,040 --> 01:08:49,370 Nun, dume, JavaScript kaj PHP kaj iujn aliajn lingvojn povas, fakte, 1433 01:08:49,370 --> 01:08:51,310 ĉu vi reveninte malsamajn specoj de valoroj. 1434 01:08:51,310 --> 01:08:54,819 Kaj kiu povas reale esti utila, kie vi povus redoni pozitiva ints, nuloj, 1435 01:08:54,819 --> 01:08:59,439 negativa ints aux malvera aŭ nula eĉ por signifi eraro. 1436 01:08:59,439 --> 01:09:01,890 Sed ni ne havas tiun versatilidad en C. 1437 01:09:01,890 --> 01:09:04,569 >> Do kun dequeue, kion ni proponas fari estas - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB Bowden: Vi povas redoni malvera. 1440 01:09:09,830 --> 01:09:13,189 Estas nur ke falsa estas hash difini falsa al nulo. 1441 01:09:13,189 --> 01:09:16,000 Do, se vi revenos falsa, vi reveninte nulo. 1442 01:09:16,000 --> 01:09:25,470 Kaj nulo estas valida afero en nia atendovico, dum negativa 1 ne estas se 1443 01:09:25,470 --> 01:09:27,000 falsa okazis esti negativa 1. 1444 01:09:27,000 --> 01:09:29,972 Sed vi ne devus eĉ bezonas scii tion. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. Malan: Tio estas kial mi ne diris ĝin. 1446 01:09:32,399 --> 01:09:36,450 >> ROB Bowden: Sed tio ne estis vera ke vi ne povas reveni falsaj. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. Malan: Certe. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Do dequeue, rimarki ni akceptas vanigas kiel ĝia argumento. 1450 01:09:44,240 --> 01:09:45,479 Kaj tio estas ĉar ni ne estas pasante ion in 1451 01:09:45,479 --> 01:09:48,359 Ni nur volas forigi la elementon ĉe la fronto de la vosto. 1452 01:09:48,359 --> 01:09:49,819 Do kiom eble ni iros en fari ĉi tion? 1453 01:09:49,819 --> 01:09:51,290 Nu, unue, ni faros tiun rapida prudento ĉekon. 1454 01:09:51,290 --> 01:09:53,350 Se la atendovico grandeco estas 0, ekzistas neniu laboro farenda. 1455 01:09:53,350 --> 01:09:54,210 Reiru negativa 1. 1456 01:09:54,210 --> 01:09:54,800 Farita. 1457 01:09:54,800 --> 01:09:56,340 Do jen kelkaj linioj de mia programo. 1458 01:09:56,340 --> 01:09:58,180 Do nur kvar linioj restas. 1459 01:09:58,180 --> 01:10:01,310 >> Do ĉi tie mi decidas dekremento la grandeco. 1460 01:10:01,310 --> 01:10:04,620 Kaj decrementing la grandeco efike signifas ke mi forgesas 1461 01:10:04,620 --> 01:10:06,010 io estas en tie. 1462 01:10:06,010 --> 01:10:09,910 Sed mi havas ankaŭ ĝisdatigi kie la fronto de la nombroj estas. 1463 01:10:09,910 --> 01:10:11,620 Do fari tion, mi bezonas fari du aĵojn. 1464 01:10:11,620 --> 01:10:16,390 Mi unue bezonas memori kion la nombro estas je la fronto de la vosto, 1465 01:10:16,390 --> 01:10:17,860 ĉar mi bezonas reveni tiun aĵon. 1466 01:10:17,860 --> 01:10:20,910 Do mi ne volas hazarde forgesas pri tio kaj poste anstataŭigi ĝin. 1467 01:10:20,910 --> 01:10:22,840 Mi simple tuj memoras en int. 1468 01:10:22,840 --> 01:10:27,310 >> Kaj nun mi volas ĝisdatigi q.front esti q.front +1. 1469 01:10:27,310 --> 01:10:30,070 Do, se tiu estis la unua persono en linio, nun, mi volas fari plus 1 por 1470 01:10:30,070 --> 01:10:31,930 noti al la sekva persono en linion. 1471 01:10:31,930 --> 01:10:33,420 Sed mi devas manipuli ke wraparound. 1472 01:10:33,420 --> 01:10:37,270 Kaj se kapablo estas tutmonda konstanto, ke tuj permesos ke mi certiĝu 1473 01:10:37,270 --> 01:10:41,140 kiel mi notas por la lasta persono en linio, la module operacio kondukos 1474 01:10:41,140 --> 01:10:43,840 min reen al nulo je la fronto de la vosto. 1475 01:10:43,840 --> 01:10:46,050 Kaj kiu manipulas la wraparound tie. 1476 01:10:46,050 --> 01:10:48,950 Kaj poste mi procedi reveni n. 1477 01:10:48,950 --> 01:10:51,530 >> Nun, strikte parolante, tamen mi ne devas deklari n. 1478 01:10:51,530 --> 01:10:53,880 Mi ne devis ekpreni ĝin kaj konservas ĝin provizore, ĉar la valoro estas 1479 01:10:53,880 --> 01:10:54,740 ankoraŭ ekzistas. 1480 01:10:54,740 --> 01:10:57,490 Do mi povis apenaŭ fari la dekstra aritmetiko por reveni al la antaŭa estro 1481 01:10:57,490 --> 01:10:58,450 de la vico. 1482 01:10:58,450 --> 01:11:01,850 Sed mi nur sentis, ke tiu estis pli klaraj por fakte havigu la int, metu ĝin 1483 01:11:01,850 --> 01:11:04,320 en n, kaj tiam revenu ke por klareco, kalkaj sed 1484 01:11:04,320 --> 01:11:05,735 ne strikte necesaj. 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 Ili estas ĉiuj pronunciables en mia kapo. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB Bowden: Do unua demando estas la duuma arbo problemon. 1490 01:11:19,110 --> 01:11:22,140 Do unua demando estas, ni estas donitaj tiuj numeroj. 1491 01:11:22,140 --> 01:11:27,160 Kaj ni volas iel enmeti ilin en tiujn nodojn tia, ke ĝi estas 1492 01:11:27,160 --> 01:11:30,110 valida duuma serĉarbo. 1493 01:11:30,110 --> 01:11:36,260 Do la sola afero por memori pri duuma serĉo arboj estas ke ĝi ne estas 1494 01:11:36,260 --> 01:11:39,800 nur ke la afero maldekstren Estas malpli kaj la afero 1495 01:11:39,800 --> 01:11:41,120 dekstre estas granda. 1496 01:11:41,120 --> 01:11:44,580 Ĝi bezonas esti ke la tuta arbo la maldekstro estas malpli, kaj la tuta arbo 1497 01:11:44,580 --> 01:11:45,740 al la dekstra estas pli granda. 1498 01:11:45,740 --> 01:11:55,260 >> Do se mi metis 34 ĉi tie ĉe la supro, kaj poste Mi metis la 20 ĉi tie, do tio estas valida tiel 1499 01:11:55,260 --> 01:11:56,970 nun, ĉar 34 ĝis ĉi tie. 1500 01:11:56,970 --> 01:11:57,920 20 iras maldekstren. 1501 01:11:57,920 --> 01:11:58,950 Do tio estas malpli. 1502 01:11:58,950 --> 01:12:03,640 Sed mi ne povas do meti la 59 ĉi tie, ĉar eĉ se 59 estas sur la dekstra de 20, 1503 01:12:03,640 --> 01:12:06,140 ĝi estas ankoraŭ sur la maldekstra de 34. 1504 01:12:06,140 --> 01:12:10,760 Do per tiu limigo en menso, la facila maniero de probable solvi ĉi 1505 01:12:10,760 --> 01:12:14,330 problemo estas nur speco de tiuj nombroj - 1506 01:12:14,330 --> 01:12:18,720 tial 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Kaj poste enmeti tiujn de maldekstre al dekstre. 1508 01:12:21,640 --> 01:12:23,390 >> Do 20 iras tien. 1509 01:12:23,390 --> 01:12:24,630 34 iras tien. 1510 01:12:24,630 --> 01:12:25,830 36 iras tien. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 Kaj vi ankaux povus esti figured evi iuj ŝtopanta en kaj realigante, 1513 01:12:34,730 --> 01:12:38,830 Ho, atendu, mi ne havas sufiĉan nombroj al ENIGU ion pli ĉi tie. 1514 01:12:38,830 --> 01:12:42,170 Do mi bezonas reshift kion mia itinero noto tuj estos. 1515 01:12:42,170 --> 01:12:47,490 Sed rimarkas ke en la fino tri, se Vi legas de maldekstre al dekstre, estas en 1516 01:12:47,490 --> 01:12:48,740 kreskanta ordo. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Do nun, ni deziras deklari, kion la struct tuj estu por la 1519 01:12:56,540 --> 01:12:58,300 nodojn en ĉi tiu arbo. 1520 01:12:58,300 --> 01:13:02,720 Do, kion ni bezonas en duuma arbo? 1521 01:13:02,720 --> 01:13:05,830 Do ni havas valoron de tipo int, do kelkaj int valoro. 1522 01:13:05,830 --> 01:13:07,220 Mi ne scias, kion ni nomas ĝin en la solvo - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Ni bezonos montrilon al la maldekstra infano kaj montrilon al la dekstra infano. 1525 01:13:13,570 --> 01:13:17,540 Do ĝi estas tuj aspekti kiel ĉi tio. 1526 01:13:17,540 --> 01:13:20,510 Kaj ĝi malebligos reale rigardi antaux kiam la duoble-ligita 1527 01:13:20,510 --> 01:13:25,090 listo stuff, do avizo - 1528 01:13:25,090 --> 01:13:27,860 Mi tuj devas rulumi ĉiuj vojo reen malsupren al problemo 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Do rimarki ĝi aspektas identa al tiu, krom ni nur okazi nomi tiujn 1531 01:13:36,390 --> 01:13:38,590 malsamaj nomoj. 1532 01:13:38,590 --> 01:13:41,440 Ni ankoraŭ devas entjero valoro kaj du montriloj. 1533 01:13:41,440 --> 01:13:44,850 Estas nur ke anstataŭ trakti la pointers kiel indikante la sekva afero 1534 01:13:44,850 --> 01:13:47,955 kaj la antaŭa, ni trakti la montriloj de atentigi al maldekstra infano 1535 01:13:47,955 --> 01:13:49,205 kaj dekstra infano. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 Do jen nia struct nodo. 1539 01:13:59,650 --> 01:14:03,920 Kaj nun, la sola funkcio ni bezonas apliki cxar tio través, kiuj 1540 01:14:03,920 --> 01:14:08,320 Ni volas iri trans la arbon, impreso el la valoroj de la arbo en ordo. 1541 01:14:08,320 --> 01:14:15,241 >> Do rigardante tien, ni deziras presi el 20, 34, 36, 52, 59, kaj 106. 1542 01:14:15,241 --> 01:14:17,970 Kiel ni plenumi tion? 1543 01:14:17,970 --> 01:14:18,890 Do ĝi estas bela simila. 1544 01:14:18,890 --> 01:14:22,910 Se vi vidis, en la pasinteco ekzameno de la problemo ke vi volis printi 1545 01:14:22,910 --> 01:14:25,940 la tutan arbon per komoj en inter ĉio, ĝi estis fakte eĉ 1546 01:14:25,940 --> 01:14:27,320 pli facile ol tio. 1547 01:14:27,320 --> 01:14:30,950 Do jen la solvo. 1548 01:14:30,950 --> 01:14:33,110 Tio estis signife pli facila se vi faris ĝin rekursie. 1549 01:14:33,110 --> 01:14:36,650 Mi ne scias se iu provis fari ĝin ripete. 1550 01:14:36,650 --> 01:14:38,340 >> Sed unue, ni havos nian bazon kazo. 1551 01:14:38,340 --> 01:14:39,660 Kio, se la radiko estas nula? 1552 01:14:39,660 --> 01:14:40,610 Tiam ni simple tuj revenos. 1553 01:14:40,610 --> 01:14:42,300 Ni ne volas presi ion. 1554 01:14:42,300 --> 01:14:45,940 Alie, ni iras tra rekursie malsupren. 1555 01:14:45,940 --> 01:14:48,140 Presu la tuta maldekstra subarbo. 1556 01:14:48,140 --> 01:14:51,440 Do presi ĉiun malpli ol mia nuna valoro. 1557 01:14:51,440 --> 01:14:53,930 Kaj poste mi iros por printi mem. 1558 01:14:53,930 --> 01:14:57,310 Kaj poste mi iros recurse malsupren mia tutan dekstran subarbo, do ĉiu 1559 01:14:57,310 --> 01:14:58,810 pli granda ol mia valoro. 1560 01:14:58,810 --> 01:15:03,870 Kaj tion tuj presi el ĉio en ordo. 1561 01:15:03,870 --> 01:15:05,860 Demandojn pri kiel tiu ĉi reale plenumas tion? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Spektantaro: Mi havas demandon sur la [inaudibles]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB Bowden: Do unu maniero alproksimigi ajna rekursia problemo estas simple opinias 1566 01:15:23,550 --> 01:15:26,275 pri ĝi plaĉas al vi devos pensi pri la tuta angulo kazoj. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Do konsideru, ke ni volas presi ĉi tiun tutan arbon. 1569 01:15:38,110 --> 01:15:42,030 Do ĉiuj ni tuj enfokusigi Estas ĉi tiu aparta nodo - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 La rekursiaj vokoj, ni ŝajnigi tiuj ĝuste funkcias. 1572 01:15:47,420 --> 01:15:54,000 Do jen, tiu rekursia alvoko al través, ni sen eĉ pensi 1573 01:15:54,000 --> 01:15:58,640 pri tio, nur petolanta maldekstre tri, imagu ke jam presas 20 1574 01:15:58,640 --> 01:16:00,730 kaj 34 por ni. 1575 01:16:00,730 --> 01:16:03,350 Kaj poste kiam ni fine rekursie voki través sur la 1576 01:16:03,350 --> 01:16:07,890 Bone, ke estos ĝuste presi 52, 59, kaj 106 por ni. 1577 01:16:07,890 --> 01:16:13,620 >> Do pro tio ke tiu povas presi 20, 34, kaj la aliaj povas presi 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 ĉiuj ni devas esti kapabla fari estas presita samaj en la mezo de tiu. 1579 01:16:17,180 --> 01:16:21,250 Do presi ĉiun antaux ni. 1580 01:16:21,250 --> 01:16:27,710 Presi samaj, do la nuna nodo print 36, regula printf, kaj poste 1581 01:16:27,710 --> 01:16:31,170 presi ĉiun post ni. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. Malan: Tie estas kie rekursio gets vere bela. 1583 01:16:32,730 --> 01:16:36,270 Ĝi estas tio miriga salto de fido kie vi faras la plej eta iom da laboro. 1584 01:16:36,270 --> 01:16:38,460 Kaj poste vi lasu iun alie fari la reston. 1585 01:16:38,460 --> 01:16:40,180 Kaj ke iu alia estas, ironie, vi. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Do por seriozaj Brownie punktoj, se vi rulumu supren sur la demandoj - 1588 01:16:48,360 --> 01:16:50,530 >> ROB Bowden: Sur la demandoj? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. Malan: Kaj suben iom la numerojn, ĉu iu scias kie 1590 01:16:53,490 --> 01:16:55,190 ĉi tiuj ciferoj venas el? 1591 01:16:55,190 --> 01:16:56,610 >> ROB Bowden: Mi havas laŭvorte neniun ideon. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. Malan: Ili aperi tra la kvizo. 1593 01:16:59,794 --> 01:17:01,150 >> Spektantaro: ili estas el la sama nombroj? 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. Malan: Tiuj nombroj. 1595 01:17:01,910 --> 01:17:03,260 Iom Easter egg. 1596 01:17:03,260 --> 01:17:08,100 Do por tiuj el vi rigardi en linio ĉe hejmen, se vi povas diri al ni per retpoŝto al 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net kion la signifon de tiuj ripetiĝantajn ses nombroj estas 1598 01:17:12,680 --> 01:17:18,560 tra Kvizo 1, ni duŝi vin kun miriga atenton ĉe la fino 1599 01:17:18,560 --> 01:17:21,610 prelego kaj streso pilko. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Nice, subtilajn. 1602 01:17:27,790 --> 01:17:29,570 >> ROB Bowden: Ajna lastaj demandoj pri io ajn en la kvizo? 1603 01:17:29,570 --> 01:17:32,608