1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> Давид Ј. Малан: У реду. 3 00:00:12,900 --> 00:00:16,790 Дакле, добродошли на први ЦС50 постмортем за квиз. 4 00:00:16,790 --> 00:00:18,340 Мислили смо да ћемо отворити ова традиција ове године. 5 00:00:18,340 --> 00:00:20,960 И ово ће бити прилика да хода кроз 6 00:00:20,960 --> 00:00:22,220 решења на квизу. 7 00:00:22,220 --> 00:00:26,160 И ми ћемо убрзати или успорити заснован о интересу оних овде. 8 00:00:26,160 --> 00:00:29,730 >> Дакле, ви сте вероватно овде зато што си интересује како сте могли имати или 9 00:00:29,730 --> 00:00:31,170 Требало је одговорио неки од ових проблема. 10 00:00:31,170 --> 00:00:33,300 Па зашто не бисмо погледали у овом одељку прво? 11 00:00:33,300 --> 00:00:34,450 Тако постаје конце. 12 00:00:34,450 --> 00:00:37,600 Ово ти је дао три различите верзије програма који је, на крају, 13 00:00:37,600 --> 00:00:39,650 значило да се стринг од корисника. 14 00:00:39,650 --> 00:00:42,530 Без обзира да ли је или није то урадио је оставио на вама је да се утврди. 15 00:00:42,530 --> 00:00:45,150 >> И питали смо у питању 0, Претпостављам да је верзија 1 16 00:00:45,150 --> 00:00:46,400 саставио и погубљен. 17 00:00:46,400 --> 00:00:48,860 Зашто се програм сегфаулт? 18 00:00:48,860 --> 00:00:51,150 На први поглед, све предлоге зашто? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Да. 21 00:00:54,489 --> 00:00:59,260 >> ПУБЛИКА: Ја се сећам ово видим у претходни пример гледа 22 00:00:59,260 --> 00:01:05,506 цхар * с и виде скенирану с и види јер је показивач, како 23 00:01:05,506 --> 00:01:07,971 да ли то утиче на оно што се скенира у? 24 00:01:07,971 --> 00:01:10,940 Да ли је С или адреса с? 25 00:01:10,940 --> 00:01:11,180 >> Давид Ј. Малан: У реду. 26 00:01:11,180 --> 00:01:11,480 Добро. 27 00:01:11,480 --> 00:01:14,830 Дакле, на крају, извор једног проблема је вероватно ће смањити 28 00:01:14,830 --> 00:01:16,210 на том променљиве с. 29 00:01:16,210 --> 00:01:17,280 И то заиста је променљива. 30 00:01:17,280 --> 00:01:19,900 Тип података за ту променљиву је цхар *, што значи да ће 31 00:01:19,900 --> 00:01:22,570 садржи адресу карактера. 32 00:01:22,570 --> 00:01:23,850 И ту лежи увид. 33 00:01:23,850 --> 00:01:28,330 То ће садржати адресу карактер или, уопштеније, 34 00:01:28,330 --> 00:01:32,110 адреса првог карактера у цео блок карактера. 35 00:01:32,110 --> 00:01:36,680 >> Али цака је у томе скенирање е, сврха у живот, је дао адресу и дат 36 00:01:36,680 --> 00:01:40,960 Код формата, као% с, прочитајте стринг у комад 37 00:01:40,960 --> 00:01:42,330 меморија на тој адреси. 38 00:01:42,330 --> 00:01:46,040 Али зато нема знак једнакости пред да зарез на први 39 00:01:46,040 --> 00:01:49,310 линија кода, јер не знамо заправо доделити никакву меморију са 40 00:01:49,310 --> 00:01:53,020 маллоц, јер није заправо издвојити низ неке величине, све 41 00:01:53,020 --> 00:01:57,620 радиш чита корисник је тастатура улаз у неки комплетан 42 00:01:57,620 --> 00:02:00,490 вредност смеће, које је у с по дефаулту. 43 00:02:00,490 --> 00:02:04,480 Дакле, шансе су да ћете, ако сегфаулт да адреса не само да се деси 44 00:02:04,480 --> 00:02:08,009 да се вредност која можете, у ствари, пишите. 45 00:02:08,009 --> 00:02:10,889 Дакле, лоше не да издвоји памћење тамо. 46 00:02:10,889 --> 00:02:13,150 >> Дакле, у питању 1, питали смо, Претпостављам да је верзија 2 је 47 00:02:13,150 --> 00:02:14,230 саставио и погубљен. 48 00:02:14,230 --> 00:02:15,900 Зашто се овај програм сегфаулт? 49 00:02:15,900 --> 00:02:17,990 Дакле, ово је мање луд. 50 00:02:17,990 --> 00:02:21,470 И заиста постоји само један очигледан начин где можете 51 00:02:21,470 --> 00:02:22,810 изазвати сегфаулт овде. 52 00:02:22,810 --> 00:02:23,730 И ово је тематски. 53 00:02:23,730 --> 00:02:28,180 Сваки пут када користите ц у меморији, што си могао да подстакне сегфаулт 54 00:02:28,180 --> 00:02:30,718 са верзијом 2? 55 00:02:30,718 --> 00:02:35,560 >> ПУБЛИКА: Ако користите тај улаз у стринг који је дужи од 49 56 00:02:35,560 --> 00:02:35,975 карактера. 57 00:02:35,975 --> 00:02:37,260 >> Давид Ј. Малан: Управо тако. 58 00:02:37,260 --> 00:02:41,420 Сваки пут када видите нешто фиксна дужина када је у питању низ, ваш 59 00:02:41,420 --> 00:02:44,650 радар треба да се угаси да би то могло бити проблематично ако не проверавате 60 00:02:44,650 --> 00:02:45,810 Границе низа. 61 00:02:45,810 --> 00:02:46,650 И то је проблем. 62 00:02:46,650 --> 00:02:47,910 Ми и даље користите сцанф. 63 00:02:47,910 --> 00:02:52,200 Ми и даље користите% с, што значи покушати да чита стринг од корисника. 64 00:02:52,200 --> 00:02:56,300 То ће се читати у с, који, у овом тренутку, ефективно 65 00:02:56,300 --> 00:02:58,570 адреса на комад меморије или је то еквивалент. 66 00:02:58,570 --> 00:03:02,080 То је име низа карактера меморије. 67 00:03:02,080 --> 00:03:07,610 >> Али управо то, ако сте прочитали стринг то је дужи од 49 знакова, 49 68 00:03:07,610 --> 00:03:10,440 јер ти треба простор за обрнуту косу црту 0, идете до прекорачења 69 00:03:10,440 --> 00:03:11,390 да бафер. 70 00:03:11,390 --> 00:03:16,410 А можда се посрећи и бити у стању да напиши 51. карактер, 52., 53.. 71 00:03:16,410 --> 00:03:18,560 Али у неком тренутку, ОС ће рећи, не. 72 00:03:18,560 --> 00:03:21,270 Ово дефинитивно није меморија ти дозвољено да додирне. 73 00:03:21,270 --> 00:03:23,380 А програм ће да сегфаулт. 74 00:03:23,380 --> 00:03:26,650 >> Дакле, да би требало да буде било који хеуристике време имаш фиксну дужину, имате 75 00:03:26,650 --> 00:03:30,150 да се уверите да ли проверавате дужину шта год да је ви покушавате 76 00:03:30,150 --> 00:03:31,090 да чита у њу. 77 00:03:31,090 --> 00:03:35,110 >> ПУБЛИКА: Дакле, да се реши то, можете да имали изјаву проверу заправо 78 00:03:35,110 --> 00:03:37,140 је дужине веће од или мање од? 79 00:03:37,140 --> 00:03:37,730 >> Давид Ј. Малан: Апсолутно. 80 00:03:37,730 --> 00:03:41,706 Потребно је само услов да каже, ако - 81 00:03:41,706 --> 00:03:46,080 односно не нужно знати унапред колико знакова 82 00:03:46,080 --> 00:03:49,060 корисник ће да куцате, јер имате пилетину и јаја. 83 00:03:49,060 --> 00:03:51,860 Не док сте га прочитали у са сцанф можете да схватите колико је то. 84 00:03:51,860 --> 00:03:54,500 Али у том тренутку, то је сувише касно, јер сте већ прочитали у 85 00:03:54,500 --> 00:03:55,710 неки блок меморије. 86 00:03:55,710 --> 00:03:59,590 Дакле, као успут, да ЦС50 библиотека Избегава ово питање у потпуности, опозив 87 00:03:59,590 --> 00:04:01,060 коришћењем фгетц. 88 00:04:01,060 --> 00:04:05,390 И то чита један карактер у исто време, савет-тоеинг заједно, знајући да вам 89 00:04:05,390 --> 00:04:08,060 не може потопити знак ако читате једну по једну. 90 00:04:08,060 --> 00:04:11,580 >> Цака је са гетстринг опозива је да морамо да стално изнова величине 91 00:04:11,580 --> 00:04:13,590 да комад меморије, која је само бол. 92 00:04:13,590 --> 00:04:15,310 То је много линија код да се то уради. 93 00:04:15,310 --> 00:04:18,779 Један други приступ би био да заправо користе рођака, тако 94 00:04:18,779 --> 00:04:19,790 говорити, о сцанф. 95 00:04:19,790 --> 00:04:22,820 Постоје варијанте много њих Функције које заправо проверавају 96 00:04:22,820 --> 00:04:25,870 Дужина колико карактера можда прочитали максимално. 97 00:04:25,870 --> 00:04:29,430 И можете да одредите, не читају више од 50 знакова. 98 00:04:29,430 --> 00:04:34,110 Дакле, то би био још један приступ, али мање предусретљив већих инпута. 99 00:04:34,110 --> 00:04:37,040 >> Дакле, питање 2 пита, претпостављам ту верзију 3. саставља и погубљен. 100 00:04:37,040 --> 00:04:39,960 Зашто се тај програм сегфаулт? 101 00:04:39,960 --> 00:04:42,650 Дакле, ово је заправо исти одговорим, иако 102 00:04:42,650 --> 00:04:43,590 изгледа мало одгајивача. 103 00:04:43,590 --> 00:04:46,440 Користимо маллоц, који се осећа као смо себи даје више опција. 104 00:04:46,440 --> 00:04:48,030 И онда смо ослободили да меморија на крају. 105 00:04:48,030 --> 00:04:49,580 То је још увек само 50 бајтова меморије. 106 00:04:49,580 --> 00:04:53,620 Дакле, ми смо још увек може да покуша да прочита у 51, 52, 1.000 бајтова. 107 00:04:53,620 --> 00:04:55,830 То ће за сегфаулт исти разлог. 108 00:04:55,830 --> 00:04:57,530 >> Али постоји још један разлог превише. 109 00:04:57,530 --> 00:05:03,890 Шта друго може да маллоц повратак поред адреса комад меморије? 110 00:05:03,890 --> 00:05:04,920 То би могло да се врати нулл. 111 00:05:04,920 --> 00:05:07,560 И зато ми не проверавамо за да, ми смо могли да радимо нешто 112 00:05:07,560 --> 00:05:11,350 глупо за неког другог разлога, а то је да бисмо могли да говори сцанф, прочитајте 113 00:05:11,350 --> 00:05:16,050 Унесите корисника са тастатуре у 0 локацији, звани нулл. 114 00:05:16,050 --> 00:05:18,890 И то, такође, ће дефинитивно изазвати сегфаулт. 115 00:05:18,890 --> 00:05:21,590 Дакле, за потребе квиза, ми би прихватили су неки од оних који као 116 00:05:21,590 --> 00:05:22,740 ваљан разлог. 117 00:05:22,740 --> 00:05:23,420 Један је идентичан. 118 00:05:23,420 --> 00:05:25,720 Један је мало више нијанси. 119 00:05:25,720 --> 00:05:28,975 >> На крају, с обзиром на програму је коришћење меморије, како верзију 2 и 120 00:05:28,975 --> 00:05:30,350 верзија 3 разликују? 121 00:05:30,350 --> 00:05:35,070 Дакле, за оно што је вредно, видели смо наизглед бескрајан снабдевање могуће 122 00:05:35,070 --> 00:05:35,770 одговори на ово. 123 00:05:35,770 --> 00:05:39,300 И међу одговорима људи, шта смо били надајући се, али смо прихватили други 124 00:05:39,300 --> 00:05:42,250 ствари, био је неки помен Чињеница да верзија 2 користи 125 00:05:42,250 --> 00:05:44,560 такозвани стек. 126 00:05:44,560 --> 00:05:46,710 Верзија 3 користи гомилу. 127 00:05:46,710 --> 00:05:50,060 И функционално, ово не баш учинити све да много разлике. 128 00:05:50,060 --> 00:05:54,040 На крају дана, и даље смо само се 50 бајтова меморије. 129 00:05:54,040 --> 00:05:56,640 >> Али то је био један од могућих одговора да су ми гледамо. 130 00:05:56,640 --> 00:05:59,730 Али ви ћете видети, као што сте добили своје квизове вратио из тфс, да смо урадили 131 00:05:59,730 --> 00:06:04,330 прихватају друге дискусије њихове различити употребе меморије, као и. 132 00:06:04,330 --> 00:06:08,600 Али стек и гомила би била једноставан одговор да иде са. 133 00:06:08,600 --> 00:06:11,150 Има ли питања? 134 00:06:11,150 --> 00:06:12,400 Дајем ти Роб. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> РОБ БОВДЕН: Па Проблем 4. 137 00:06:20,210 --> 00:06:21,985 Ово је једна у којој сте морали да попуне у броју бајтова од свих 138 00:06:21,985 --> 00:06:23,460 ови различити типови користе. 139 00:06:23,460 --> 00:06:24,830 Дакле, прва ствар коју видимо. 140 00:06:24,830 --> 00:06:27,930 Претпоставимо 32-битну архитектуру, овако ЦС50 апарата. 141 00:06:27,930 --> 00:06:33,530 Дакле, један од основних ствари о 32-битне архитектуре, који нам говори 142 00:06:33,530 --> 00:06:37,490 тачно колики показивач иде да буде у архитектури. 143 00:06:37,490 --> 00:06:43,020 >> Дакле одмах, ми знамо да је сваки показивач Тип је 32-бита или 4 бајта. 144 00:06:43,020 --> 00:06:46,010 Дакле, гледајући ову табелу, * чвор је врста показивач. 145 00:06:46,010 --> 00:06:47,250 То ће бити 4 бајта. 146 00:06:47,250 --> 00:06:51,640 Струцт чвор *, то је буквално идентичан чвор звезде. 147 00:06:51,640 --> 00:06:53,590 И тако да ће бити 4 бајта. 148 00:06:53,590 --> 00:06:58,270 Стринг, тако да не изгледа као поинтер још, али типедеф, 149 00:06:58,270 --> 00:07:01,590 стринг је само знак *, који је типа показивач. 150 00:07:01,590 --> 00:07:03,550 Тако да ће бити 4 бајта. 151 00:07:03,550 --> 00:07:06,150 >> Дакле, ова три су све 4 бајта. 152 00:07:06,150 --> 00:07:09,350 Сада, чвор и ученик су мало компликованије. 153 00:07:09,350 --> 00:07:15,160 Дакле, гледајући у чвор и ученика, видимо чвор као цео број и показивачем. 154 00:07:15,160 --> 00:07:18,050 И студент је два показивачи у њему. 155 00:07:18,050 --> 00:07:23,340 Тако барем за наш случај овде, начин да завршимо израчунавање величине 156 00:07:23,340 --> 00:07:27,020 ово је само струцт сабрати све да је унутар струцт. 157 00:07:27,020 --> 00:07:30,690 >> Дакле, за чвор, имамо цео број, који је 4 бајта. 158 00:07:30,690 --> 00:07:32,830 Имамо показивач, што је 4 бајта. 159 00:07:32,830 --> 00:07:35,820 И тако један чвор иде да узме 8 бајтова. 160 00:07:35,820 --> 00:07:39,490 И слично за студента, имамо Показивач да је 4 бајта и други 161 00:07:39,490 --> 00:07:40,770 Показивач да је 4 бајта. 162 00:07:40,770 --> 00:07:43,180 Тако да ће се завршити горе је 8 бајтова. 163 00:07:43,180 --> 00:07:45,480 Тако чвор и ученик су 8 бајтова. 164 00:07:45,480 --> 00:07:48,950 А ова три су све 4 бајта. 165 00:07:48,950 --> 00:07:50,240 Питања о томе? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Да. 168 00:07:54,990 --> 00:07:58,413 >> ПУБЛИКА: Да ли је то било 64-битни архитектура, која би 169 00:07:58,413 --> 00:07:59,880 удвостручи све њих? 170 00:07:59,880 --> 00:08:01,790 >> РОБ БОВДЕН: Не би удвостручи све њих. 171 00:08:01,790 --> 00:08:05,830 Дакле, 64-битну архитектуру, она, опет, Промене које основна ствар да 172 00:08:05,830 --> 00:08:08,910 Показивач је сада 64 бита. 173 00:08:08,910 --> 00:08:09,290 Да. 174 00:08:09,290 --> 00:08:10,930 Дакле, показивач је 8 бајтова. 175 00:08:10,930 --> 00:08:15,420 Дакле, то је било 4 бајта ће бити 8 бајтова. 176 00:08:15,420 --> 00:08:18,617 Студент, који је био два показивачи, добро, сада ће то 177 00:08:18,617 --> 00:08:19,800 бити 8 бајтова, 8 бајтова. 178 00:08:19,800 --> 00:08:21,980 То ће направити 16 бајтова. 179 00:08:21,980 --> 00:08:25,710 >> Али чвор је и даље 4 бајта. 180 00:08:25,710 --> 00:08:27,800 Дакле, ово показивач иде да буде 8 бајтова. 181 00:08:27,800 --> 00:08:28,930 То је 4 бајта. 182 00:08:28,930 --> 00:08:30,870 Дакле, чвор иде само да буде 12 бајта. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Има ли још питања о оном? 185 00:08:39,280 --> 00:08:44,500 Дакле, следећи, то су ХТТП статусни кодови. 186 00:08:44,500 --> 00:08:48,000 И ви морали да опишете околности под којима ови могу 187 00:08:48,000 --> 00:08:49,810 бити враћен. 188 00:08:49,810 --> 00:08:56,730 један проблем који сам чуо неке студенте имају је да су покушали да 189 00:08:56,730 --> 00:08:58,950 грешке бити на крају клијента. 190 00:08:58,950 --> 00:09:02,320 Дакле, када ћемо покушати да направи захтев на серверу, нешто крене 191 00:09:02,320 --> 00:09:03,820 погрешно на нашем крају. 192 00:09:03,820 --> 00:09:07,660 Али генерално, ови кодови су се вратио сервер. 193 00:09:07,660 --> 00:09:11,720 Зато желимо да схватим шта се дешава погрешно или десно на серверу који 194 00:09:11,720 --> 00:09:14,280 изазива ове ствари да се врати. 195 00:09:14,280 --> 00:09:18,670 Па зашто можда сервер враћа Статус код 200? 196 00:09:18,670 --> 00:09:19,920 Било која мисли? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Да. 199 00:09:23,730 --> 00:09:27,850 Тако нешто о успешно захтев прошао. 200 00:09:27,850 --> 00:09:30,260 И они су у стању да се врате шта год тражио. 201 00:09:30,260 --> 00:09:32,240 Дакле, све је било у реду. 202 00:09:32,240 --> 00:09:35,662 Шта око 302 фоунд? 203 00:09:35,662 --> 00:09:36,618 Да. 204 00:09:36,618 --> 00:09:39,008 >> ПУБЛИКА: Сервер гледао за оно што сте тражили. 205 00:09:39,008 --> 00:09:40,442 Али то не може да га пронађе. 206 00:09:40,442 --> 00:09:42,850 Дакле, ту је грешка. 207 00:09:42,850 --> 00:09:47,720 >> РОБ БОВДЕН: Дакле, сервер је у потрази за оно што сте желели. 208 00:09:47,720 --> 00:09:51,682 Дакле, само гледајући овде, 302 фоунд, је био у стању да га пронађе. 209 00:09:51,682 --> 00:09:53,035 >> ПУБЛИКА: Жао ми је. 210 00:09:53,035 --> 00:09:54,388 Пронађено значи да нисам нашао. 211 00:09:54,388 --> 00:09:55,638 Извините. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> РОБ БОВДЕН: Па 302 Фоунд. 214 00:10:00,160 --> 00:10:02,350 Сервер је у стању да пронађе шта си хтео. 215 00:10:02,350 --> 00:10:04,640 >> ПУБЛИКА: Али то не приказује? 216 00:10:04,640 --> 00:10:08,180 >> РОБ БОВДЕН: разлика између ово 302 и 200 је да 217 00:10:08,180 --> 00:10:09,280 зна шта желите. 218 00:10:09,280 --> 00:10:12,000 Али то није тачно где сте хтели да питате. 219 00:10:12,000 --> 00:10:14,580 Дакле, 302 је типичан за преусмеравање. 220 00:10:14,580 --> 00:10:16,510 Тако сте тражили страницу. 221 00:10:16,510 --> 00:10:19,590 Она зна, ох, ја желим да ти вратим ово. 222 00:10:19,590 --> 00:10:21,070 Али ово је на различит УРЛ. 223 00:10:21,070 --> 00:10:23,534 Па хеј, ви заправо желите ово. 224 00:10:23,534 --> 00:10:26,950 >> Давид Ј. Малан: То је комад који је рекао да смо дали ви момци преусмеравање 225 00:10:26,950 --> 00:10:30,830 Функција која се користи заглавље функције који, заузврат, одштампан локацију, 226 00:10:30,830 --> 00:10:34,110 дебелог црева, а затим УРЛ са којим желите да одбијете корисника. 227 00:10:34,110 --> 00:10:37,480 Иако нисте видели 302 експлицитно постоји, то је оно ПХП 228 00:10:37,480 --> 00:10:41,550 би магично убаците као заглавље рекавши тачно оно што је рекао тамо Роб - 229 00:10:41,550 --> 00:10:41,930 фоунд. 230 00:10:41,930 --> 00:10:43,180 Али уместо тога идите овде. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> РОБ БОВДЕН: У реду. 233 00:10:46,160 --> 00:10:47,630 Дакле, шта је са 403 забрањено? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> ПУБЛИКА: Мислим да је то сервер је у основи каже да клијент 236 00:10:57,120 --> 00:10:59,970 не могу да приступе почетну страницу. 237 00:10:59,970 --> 00:11:03,260 >> РОБ БОВДЕН: Па да. 238 00:11:03,260 --> 00:11:07,670 Па, типичан одговор смо били очекујући нешто слично, фајлове 239 00:11:07,670 --> 00:11:08,920 нису адекватно цхмоддед. 240 00:11:08,920 --> 00:11:11,590 То је вероватно под којим околностима сте их видели. 241 00:11:11,590 --> 00:11:18,920 Али постоји разлог да клијент могао бити крив овде. 242 00:11:18,920 --> 00:11:20,440 Заправо Постоји још један статусни код - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Дакле, ово су веома слични. 245 00:11:22,820 --> 00:11:24,590 >> 401 је неовлашћено. 246 00:11:24,590 --> 00:11:26,130 И 403 је забрањено. 247 00:11:26,130 --> 00:11:31,890 И тако ти неовлашћено искључиво добити ако нисте пријављени 248 00:11:31,890 --> 00:11:34,520 Али се улогујете може да значи да ли су овлашћени. 249 00:11:34,520 --> 00:11:37,930 Али ако сте већ пријављени и ви још немају дозволу, онда 250 00:11:37,930 --> 00:11:40,140 можете добити забрањено. 251 00:11:40,140 --> 00:11:45,320 Дакле, ако сте пријављени и немају дозвола, забрањено је такође 252 00:11:45,320 --> 00:11:47,164 нешто што можете добити. 253 00:11:47,164 --> 00:11:48,900 >> Давид Ј. Малан: А механизам који ови проблеми су обично 254 00:11:48,900 --> 00:11:53,100 решен на серверу је преко шта команда? 255 00:11:53,100 --> 00:11:57,700 Цхмод, ако је то, заиста, дозволе издаје на фајл или директоријум. 256 00:11:57,700 --> 00:11:59,220 >> РОБ БОВДЕН: Онда 404 није пронађен. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Да. 259 00:12:03,470 --> 00:12:10,150 Дакле, за разлику од 302 где то није било тачно где ви питате, али зна шта 260 00:12:10,150 --> 00:12:12,710 хоћеш, ово, оно само има немам појма шта хоћеш. 261 00:12:12,710 --> 00:12:15,648 А ви се не тражи нешто важи. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Ја сам чајник и онда 500 Интернал Сервер. 264 00:12:22,310 --> 00:12:24,870 Па зашто би ти то? 265 00:12:24,870 --> 00:12:26,120 >> Тако сегфаулт - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Ја заправо не знам равнање стандард за ово. 268 00:12:30,640 --> 00:12:34,850 Али, ако ваш ПХП код имала нешто погрешно у томе, у теорији, то би могао 269 00:12:34,850 --> 00:12:39,650 заправо сегфаулт, у ком случају, ово 500 Интернал Сервер Еррор, нешто 270 00:12:39,650 --> 00:12:41,400 није у реду са свог сервера конфигурација. 271 00:12:41,400 --> 00:12:44,320 Или постоји синтаксна грешка у вашем ПХП коду. 272 00:12:44,320 --> 00:12:46,095 Или нешто лоше дешава. 273 00:12:46,095 --> 00:12:48,320 >> Давид Ј. Малан: Нисмо видели сегфаулт међу одговорима неколико људи. 274 00:12:48,320 --> 00:12:49,490 И технички, то може да се деси. 275 00:12:49,490 --> 00:12:53,820 Али да би ПХП, програмски написао других људи, заправо 276 00:12:53,820 --> 00:12:57,790 сегфаултед, која само ако ти људи зезнуо и написао луд код у 277 00:12:57,790 --> 00:13:00,680 њихов преводилац би Сама ПХП сегфаулт. 278 00:13:00,680 --> 00:13:06,460 Дакле, иако је 500 као сегфаулт у духу, то је скоро увек 279 00:13:06,460 --> 00:13:10,490 резултат питању конфигурација филе са вашег веб сервера или, како је рекао Роб, 280 00:13:10,490 --> 00:13:13,200 грешка синтакса, као и ти није затворила цитат. 281 00:13:13,200 --> 00:13:16,180 Или сте изгубили негде зарез. 282 00:13:16,180 --> 00:13:23,677 >> ПУБЛИКА: Дакле, за Схуттле псет, ја Мислим, када сам то урадио једном сам кликнуо 283 00:13:23,677 --> 00:13:26,300 претраживач, али ништа смислио, оно што су звали бела страна. 284 00:13:26,300 --> 00:13:28,056 Али то је било због кода. 285 00:13:28,056 --> 00:13:29,440 Мислим да је ЈаваСцрипт, зар не? 286 00:13:29,440 --> 00:13:29,770 >> РОБ БОВДЕН: Да. 287 00:13:29,770 --> 00:13:31,180 >> ПУБЛИКА: Да ли би то грешка ипак искрсло? 288 00:13:31,180 --> 00:13:34,290 >> РОБ БОВДЕН: Дакле, ви не би добио ово грешка јер је све 289 00:13:34,290 --> 00:13:36,930 из перспективе веб сервера је потпуно у реду. 290 00:13:36,930 --> 00:13:39,090 Али сте тражили индек.хтмл. 291 00:13:39,090 --> 00:13:42,000 Ви тражили схуттле.јс и сервице.јс. 292 00:13:42,000 --> 00:13:44,580 И било је у стању да успешно врати за све вас од тих ствари - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 У реду. 295 00:13:45,680 --> 00:13:49,330 То је само када ваш прегледач покушао да тумаче ЈаваСцрипт код који 296 00:13:49,330 --> 00:13:51,370 то је као, чекај, ово није важи ЈаваСцрипт грешка. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Има ли још питања? 299 00:13:58,210 --> 00:14:00,750 У реду. 300 00:14:00,750 --> 00:14:04,120 >> Давид Ј. Малан: Дакле, следећи горе је број 11. 301 00:14:04,120 --> 00:14:07,610 И 11 је најстрашнија за много људи. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Дакле, најважнија ствар на уму овде било да је то, заиста, о 304 00:14:18,570 --> 00:14:19,840 двоструко повезана листа. 305 00:14:19,840 --> 00:14:23,160 Али то није био исти као прошлогодишњи двоструко повезана листа проблема, 306 00:14:23,160 --> 00:14:27,170 који нису вам дати упозорење да списак може, у ствари, бити унсортед. 307 00:14:27,170 --> 00:14:29,640 >> Дакле, чињеница да је листа била некласификовани и чињеница да је реч била 308 00:14:29,640 --> 00:14:32,930 подвукао ту је требало да пренесе да је ово заправо поједностављење 309 00:14:32,930 --> 00:14:35,430 онога што би иначе било више изазован проблем 310 00:14:35,430 --> 00:14:36,600 и дужи један. 311 00:14:36,600 --> 00:14:40,760 Дакле, овде је уобичајена грешка да су ставили прошлогодишњи решење на једној 312 00:14:40,760 --> 00:14:45,580 пејџер и онда само слепо копирати да доле као одговор, што је право 313 00:14:45,580 --> 00:14:48,520 одговори на друго питање слично у духу. 314 00:14:48,520 --> 00:14:51,340 Али суптилности овде били су следећи. 315 00:14:51,340 --> 00:14:55,200 >> Дакле један, ми смо прогласили чвор и дефинисано у уобичајени начин овде. 316 00:14:55,200 --> 00:14:59,230 Онда смо дефинисана листа бити глобална показивач иницијализован на нулл. 317 00:14:59,230 --> 00:15:02,150 Затим очигледно, постоје две функције имамо прототипове за овде, убаци 318 00:15:02,150 --> 00:15:03,240 и уклонити. 319 00:15:03,240 --> 00:15:06,600 И онда имамо неки узорак код овде од раде гомилу уметања. 320 00:15:06,600 --> 00:15:09,930 И онда смо вас да попуните имплементација инсерт доле у ​​што 321 00:15:09,930 --> 00:15:14,380 начин да се то убацује н у листу у сталном времену, такође нагласио, 322 00:15:14,380 --> 00:15:15,730 чак и ако је већ присутан. 323 00:15:15,730 --> 00:15:20,600 >> Дакле, лепота у стању да уметнете у сталном време је да подразумева 324 00:15:20,600 --> 00:15:23,060 да морате да убаците нови чвор где? 325 00:15:23,060 --> 00:15:23,690 Инто тхе фронт. 326 00:15:23,690 --> 00:15:27,760 Тако да елиминише, на срећу, барем један од случајева који користе захтева 327 00:15:27,760 --> 00:15:30,520 још више линија кода, као што је то урадио прошле године, па чак и у часу када смо 328 00:15:30,520 --> 00:15:34,040 говорио кроз такве ствари са људима и са неким 329 00:15:34,040 --> 00:15:35,250 вербално псеудо код. 330 00:15:35,250 --> 00:15:39,190 Тако у решењу овде, хајде да прескочимо да да само да визуелно 331 00:15:39,190 --> 00:15:40,480 екран. 332 00:15:40,480 --> 00:15:42,230 >> Приметимо да радимо следеће. 333 00:15:42,230 --> 00:15:45,140 И такође приметити друго поједностављење је да чак и ако је то 334 00:15:45,140 --> 00:15:48,280 већ присутан, па то значи да чак и ако број је већ тамо, можете 335 00:15:48,280 --> 00:15:50,280 само слепо убаците још један копија тога. 336 00:15:50,280 --> 00:15:52,560 И то, такође, требало је да буде упрошћавање, тако да сте могли 337 00:15:52,560 --> 00:15:54,940 фокусирати на, заиста, неки од више интелектуално занимљив део и 338 00:15:54,940 --> 00:15:58,090 не само неки додатни грешка провере с обзиром на ограничено време. 339 00:15:58,090 --> 00:16:02,880 >> Дакле, у овом раствору узорка, можемо издвојити показивач на левој 340 00:16:02,880 --> 00:16:04,510 страни овде у чвор. 341 00:16:04,510 --> 00:16:07,190 Сада, схватају да показивач, као Роб је рекао, је само 32 бита. 342 00:16:07,190 --> 00:16:09,060 И то не у ствари садржи адреса до тебе 343 00:16:09,060 --> 00:16:09,970 доделити му адресу. 344 00:16:09,970 --> 00:16:13,220 И ми то радимо на десној страни преко маллоц. 345 00:16:13,220 --> 00:16:16,550 Као доброг грађанина, проверавамо да маллоц није, у ствари, нулл, тако да се 346 00:16:16,550 --> 00:16:18,690 не случајно створи сегфаулт овде. 347 00:16:18,690 --> 00:16:22,840 И сваки пут када користите маллоц у животу, те треба провере за нулл, да не би 348 00:16:22,840 --> 00:16:24,090 имате суптилан буг. 349 00:16:24,090 --> 00:16:28,460 >> Онда смо иницијализовати ту нулл по додељивање н и претходни и следећи. 350 00:16:28,460 --> 00:16:32,450 И у овом случају овде, ја иницијализована пре нулл, јер ова нова 351 00:16:32,450 --> 00:16:34,780 чвор ће бити нови почетак мог списка. 352 00:16:34,780 --> 00:16:37,050 Тако да ће бити ништа пре тога. 353 00:16:37,050 --> 00:16:42,010 И ја желим да у суштини додати Постојећа листа на нови чвор по 354 00:16:42,010 --> 00:16:44,700 постављање поред једнако да се списку. 355 00:16:44,700 --> 00:16:47,120 Али ја нисам урадио још само. 356 00:16:47,120 --> 00:16:51,780 Дакле, ако сама листа је већ постојала, и било је најмање један чвор 357 00:16:51,780 --> 00:16:57,070 већ на месту, ако је то листа овде и ја убаците овде нови чвор, ја 358 00:16:57,070 --> 00:17:01,840 Потребно је да се уверите да је мој бивши чвор указује уназад до моје нове чвор, 359 00:17:01,840 --> 00:17:04,260 јер ово је, опет, двоструко повезана листа. 360 00:17:04,260 --> 00:17:05,460 >> Тако радимо проверу исправности. 361 00:17:05,460 --> 00:17:10,109 Ако листа није нулл, ако већ постоји један или више чворова тамо, онда 362 00:17:10,109 --> 00:17:12,470 додати да врати референцу тако да говори. 363 00:17:12,470 --> 00:17:15,420 А онда последња ствар која нам треба да урадите је заправо ажурира глобални 364 00:17:15,420 --> 00:17:20,329 променљива листа сама да укаже на том новом чвору. 365 00:17:20,329 --> 00:17:21,790 Да. 366 00:17:21,790 --> 00:17:26,579 >> ПУБЛИКА: У стрелице показивача [ИНАУДИБЛЕ] једнако нула, да ли то 367 00:17:26,579 --> 00:17:30,420 баве листи јер листа је нулл? 368 00:17:30,420 --> 00:17:30,596 >> Давид Ј. Малан: Јок. 369 00:17:30,596 --> 00:17:34,500 То је просто ми буде проактивно опрезан, у то ако је ово мој 370 00:17:34,500 --> 00:17:38,730 оригинални списак са више чворова можда неким овде и ја сам мој уметање 371 00:17:38,730 --> 00:17:42,380 нови чвор овде, тамо иде да се ништа овде. 372 00:17:42,380 --> 00:17:44,720 И ја желим да ухвате ту идеју постављањем на претходни 373 00:17:44,720 --> 00:17:47,740 нулл на новом чвору. 374 00:17:47,740 --> 00:17:51,410 И вероватно, ако је мој број исправан и не постоји други начин да убаците 375 00:17:51,410 --> 00:17:54,970 чворови осим ове функције, вероватно, чак и ако листа већ има 376 00:17:54,970 --> 00:18:00,090 један или више чворова у њему, вероватно листа, први чвор, ће имати 377 00:18:00,090 --> 00:18:02,750 претходна показивач саме нулл. 378 00:18:02,750 --> 00:18:03,550 >> ПУБЛИКА: И само праћење. 379 00:18:03,550 --> 00:18:08,139 Разлог сте ставили показивач нект једнаки Листа се правиш показивач 380 00:18:08,139 --> 00:18:13,579 пре списак у да се то показује на следећи, претпостављам - 381 00:18:13,579 --> 00:18:14,980 Ја не - 382 00:18:14,980 --> 00:18:15,450 само набраја? 383 00:18:15,450 --> 00:18:16,400 >> Давид Ј. Малан: Управо тако. 384 00:18:16,400 --> 00:18:19,400 И тако ћемо заправо размотрити два случаја овде заиста, иако 385 00:18:19,400 --> 00:18:22,070 редослед ћемо их размотрити није сасвим исти као и код. 386 00:18:22,070 --> 00:18:26,250 Али на високом нивоу, ако то представља навести и то је 32-битни 387 00:18:26,250 --> 00:18:29,560 показивач, најједноставнији сценарио да је то нула подразумевано. 388 00:18:29,560 --> 00:18:33,010 И претпоставимо да желите да уметнете број 50 је први број. 389 00:18:33,010 --> 00:18:37,640 Зато ћу да идем напред и доделити чвор, који ће да садржи 390 00:18:37,640 --> 00:18:38,770 три поља - 391 00:18:38,770 --> 00:18:42,070 н, претходни, и поред. 392 00:18:42,070 --> 00:18:44,580 >> Ја ћу да ставим број 50 овде, јер ово ће бити н. 393 00:18:44,580 --> 00:18:46,130 Ово ће бити следећи. 394 00:18:46,130 --> 00:18:48,530 И то ће бити претходна. 395 00:18:48,530 --> 00:18:50,910 И тако, шта да радим у овом случају? 396 00:18:50,910 --> 00:18:53,900 Па, ја сам само урадио линију 1 овде. 397 00:18:53,900 --> 00:18:55,400 Показивач н добија н. 398 00:18:55,400 --> 00:18:57,740 Ја онда кажем, претходна треба да добије нулл. 399 00:18:57,740 --> 00:18:59,470 Дакле, ово ће бити ништаван. 400 00:18:59,470 --> 00:19:01,365 Онда ћу рећи следећи ће добити списак. 401 00:19:01,365 --> 00:19:05,150 >> И то само успе добро. 402 00:19:05,150 --> 00:19:06,500 Ово је нулл. 403 00:19:06,500 --> 00:19:10,620 И тако ја кажем, нови чвор је следећи поље би требало да добије шта год да је ово. 404 00:19:10,620 --> 00:19:12,570 Тако да ставља другу нулл тамо. 405 00:19:12,570 --> 00:19:14,510 И онда последња ствар Ја се не проверим овде. 406 00:19:14,510 --> 00:19:17,870 Ако листа није једнак нулл, али је је једнак нулл, тако да прескочите да 407 00:19:17,870 --> 00:19:18,470 заједно. 408 00:19:18,470 --> 00:19:23,520 И тако све радим следећи је листа добија показивач, који сликовито резултира 409 00:19:23,520 --> 00:19:25,570 слика тако. 410 00:19:25,570 --> 00:19:26,620 Дакле, то је један сценарио. 411 00:19:26,620 --> 00:19:30,490 >> А онај који сте били питате посебно је ситуација оваква, 412 00:19:30,490 --> 00:19:33,190 где већ имамо листу један-чвор. 413 00:19:33,190 --> 00:19:36,240 И ако се вратим у оригиналу Проблем изјава, следећи ћемо 414 00:19:36,240 --> 00:19:39,320 убаци рецимо је 34, само за ради дискусије. 415 00:19:39,320 --> 00:19:46,210 Зато ћу само згодно нацртати да овамо. 416 00:19:46,210 --> 00:19:47,540 Управо сам маллоцед. 417 00:19:47,540 --> 00:19:49,310 Претпоставимо Гледам за нулл. 418 00:19:49,310 --> 00:19:51,870 >> Сада, ја ћу да покрене н да буде 34. 419 00:19:51,870 --> 00:19:53,040 И то ће бити н. 420 00:19:53,040 --> 00:19:54,670 Ово ће бити следећи. 421 00:19:54,670 --> 00:19:57,100 И то ће бити претходна. 422 00:19:57,100 --> 00:19:59,370 Хајде да се уверите да нисам ово уназад. 423 00:19:59,370 --> 00:20:01,110 Претходно је на првом месту у дефиницији. 424 00:20:01,110 --> 00:20:03,070 Дозволите ми да поправим ово. 425 00:20:03,070 --> 00:20:04,410 То је претходни. 426 00:20:04,410 --> 00:20:05,780 Ово је следећи. 427 00:20:05,780 --> 00:20:08,620 Иако су идентични, хајде да га задржи доследан. 428 00:20:08,620 --> 00:20:09,450 >> Предходни. 429 00:20:09,450 --> 00:20:11,030 Ово је следећи. 430 00:20:11,030 --> 00:20:16,310 Тако сам управо маллоцед моју поруку, проверио за нулл, добио 34 у чвору. 431 00:20:16,310 --> 00:20:17,570 Претходни добија нула. 432 00:20:17,570 --> 00:20:19,480 Тако да ми даје то. 433 00:20:19,480 --> 00:20:21,010 Следећа листа добија. 434 00:20:21,010 --> 00:20:22,370 Дакле, списак је ово. 435 00:20:22,370 --> 00:20:26,520 Дакле, ово је исто као и сада цртање ово арров, тако да указују једном 436 00:20:26,520 --> 00:20:27,940 у истом. 437 00:20:27,940 --> 00:20:30,400 И онда ја проверавам да ли листа није једнако нулл. 438 00:20:30,400 --> 00:20:31,740 И то није овај пут. 439 00:20:31,740 --> 00:20:35,580 Онда ћу да урадим листу претходна добија показивач. 440 00:20:35,580 --> 00:20:39,700 >> Тако лист претходна добија ПТР. 441 00:20:39,700 --> 00:20:44,300 Дакле, то има ефекат стављања графички стрелица овде. 442 00:20:44,300 --> 00:20:46,930 И то постаје мало таласаста, линије. 443 00:20:46,930 --> 00:20:50,780 А онда, на крају, да ажурирам листу да укаже на показивач. 444 00:20:50,780 --> 00:20:55,560 Дакле, сада то указује на овог момка. 445 00:20:55,560 --> 00:20:57,170 А сада, хајде да урадимо брзо разум провера. 446 00:20:57,170 --> 00:20:59,470 >> Ево листе, која је глобална променљива. 447 00:20:59,470 --> 00:21:02,850 Први чвор је, заиста, 34, јер Пратим ту стрелу. 448 00:21:02,850 --> 00:21:05,210 И то је тачно, јер ја желим да уметнули на почетку листе 449 00:21:05,210 --> 00:21:06,070 сви нови чворови. 450 00:21:06,070 --> 00:21:08,860 Његов следећи поље ме доводи до овог типа. 451 00:21:08,860 --> 00:21:10,710 Ако ја наставим, ја погодио следећи нулл. 452 00:21:10,710 --> 00:21:11,760 Значи, нема више листе. 453 00:21:11,760 --> 00:21:14,460 Ако сам погодио претходну, ја се тамо где очекујем. 454 00:21:14,460 --> 00:21:16,435 >> Дакле, још увек постоји неколико показивачи, очигледно, да манипулишу. 455 00:21:16,435 --> 00:21:19,870 Али, чињеница да вам је речено да урадите ово у сталном времену вам значи само 456 00:21:19,870 --> 00:21:22,910 имају коначан број ствари ти дозвољено да раде. 457 00:21:22,910 --> 00:21:24,290 А шта је то број? 458 00:21:24,290 --> 00:21:25,185 То би могао бити један корак. 459 00:21:25,185 --> 00:21:25,700 То може бити два. 460 00:21:25,700 --> 00:21:26,820 То може бити 1.000 корака. 461 00:21:26,820 --> 00:21:30,500 Али то је коначан, што значи да не можете су било какве петље дешава 462 00:21:30,500 --> 00:21:32,010 овде, без рекурзије, нема петље. 463 00:21:32,010 --> 00:21:37,390 То само има да буде тешко-кодиране линије кода као што имамо у овом узорку. 464 00:21:37,390 --> 00:21:42,330 >> Дакле, следећи проблем 12 нас је замолио да заврши спровођење уклонити 465 00:21:42,330 --> 00:21:46,740 доле на такав начин да уклања н са листе у линеарном времену. 466 00:21:46,740 --> 00:21:48,740 Дакле, имате мало више виггле соба сада. 467 00:21:48,740 --> 00:21:52,380 Можете претпоставити да н, ако је присутан на листи, ће бити присутан 468 00:21:52,380 --> 00:21:53,340 не више него једном. 469 00:21:53,340 --> 00:21:56,770 И то такође треба да буде заснован на квиз поједностављивање претпоставка, па 470 00:21:56,770 --> 00:21:59,780 да ако пронађете број 50 негде на листи, ви не урадите исто 471 00:21:59,780 --> 00:22:02,890 морате да бринете о томе наставља да поновити, у потрази за све могуће 472 00:22:02,890 --> 00:22:06,990 копија од 50, што би само деволве у неком минутиа у ограниченом времену. 473 00:22:06,990 --> 00:22:10,460 >> Дакле, са уклонити, ова је дефинитивно више изазован и више 474 00:22:10,460 --> 00:22:11,640 код да пише. 475 00:22:11,640 --> 00:22:14,990 Али на први поглед, искрено, да би могло изгледају као огромна и нешто 476 00:22:14,990 --> 00:22:17,060 не постоји начин можете да имате смисли на квизу. 477 00:22:17,060 --> 00:22:22,450 Али ако се фокусирамо на појединачне кораке, надамо се, изненада ће 478 00:22:22,450 --> 00:22:26,060 штрајк вас да свака од тих појединачних Кораци има очигледну смисла 479 00:22:26,060 --> 00:22:27,080 у ретроспективи. 480 00:22:27,080 --> 00:22:28,200 Дакле, хајде да погледамо. 481 00:22:28,200 --> 00:22:32,570 >> Дакле, прво, ми инитиализе показивач да се листу. 482 00:22:32,570 --> 00:22:36,040 Зато желим линеарно време, то значи Идем да се мало петље. 483 00:22:36,040 --> 00:22:39,730 И заједнички начин да вршите итерацију над чворова у структури листе или било које врсте 484 00:22:39,730 --> 00:22:43,860 структуре итеративно је да се показивач на предњој података 485 00:22:43,860 --> 00:22:46,990 Структура и онда само старт ажурирања она и хода свој пут 486 00:22:46,990 --> 00:22:48,650 кроз структуру података. 487 00:22:48,650 --> 00:22:50,040 Зато ћу тачно да урадим. 488 00:22:50,040 --> 00:22:54,260 >> Док показивач, моја привремена променљива, није једнако нулл, хајде да 489 00:22:54,260 --> 00:22:55,660 само напред и проверите. 490 00:22:55,660 --> 00:22:56,910 Да ли сам се посрећи? 491 00:22:56,910 --> 00:23:01,740 Да ли је н поље у чвору Тренутно сам гледа једнака 492 00:23:01,740 --> 00:23:03,380 број тражим? 493 00:23:03,380 --> 00:23:05,410 И ако је тако, хајде да урадимо нешто. 494 00:23:05,410 --> 00:23:10,020 Сада, ако приметите овај услов окружује целу 495 00:23:10,020 --> 00:23:11,520 Следеће линије кода. 496 00:23:11,520 --> 00:23:14,610 То је једина ствар ми је стало - проналажење број у питању. 497 00:23:14,610 --> 00:23:18,010 Тако да нема другог, који поједностављује Концептуално ствари мало. 498 00:23:18,010 --> 00:23:22,040 >> Али сада, схватио сам, а можда ћете морати тек схватио ово након размишљања 499 00:23:22,040 --> 00:23:24,720 то кроз мало, ту је заправо два случаја овде. 500 00:23:24,720 --> 00:23:28,060 Онај где је чвор је у почетак листе, што је 501 00:23:28,060 --> 00:23:31,040 мало нервира, јер је то посебан случај, јер морате да се баве 502 00:23:31,040 --> 00:23:33,340 са овом ствари, које је једини аномалија. 503 00:23:33,340 --> 00:23:35,720 Свуда другде у листи, то је иста ствар. 504 00:23:35,720 --> 00:23:38,050 Ту је претходни чвор и поред чвор, чвор претходни, следећи чвор. 505 00:23:38,050 --> 00:23:40,940 Али овај момак је мало посебан ако је на почетку. 506 00:23:40,940 --> 00:23:48,710 >> Дакле, ако показивач једнака листу сама, па ако сам на почетку 507 00:23:48,710 --> 00:23:53,960 списак и ја сам нашао Н, треба да уради пар ствари. 508 00:23:53,960 --> 00:23:59,230 Један, морам да промените листу указују на следеће поље, 50. 509 00:23:59,230 --> 00:24:01,270 Дакле претпостављам да покушавам да уклони 34. 510 00:24:01,270 --> 00:24:03,560 Дакле, овај момак мора да иде далеко у само тренутак. 511 00:24:03,560 --> 00:24:07,210 >> Зато ћу рећи, списак добија следећи поинтер. 512 00:24:07,210 --> 00:24:08,570 Па, ово је показивач. 513 00:24:08,570 --> 00:24:10,360 Следећа окренут овде. 514 00:24:10,360 --> 00:24:17,470 Дакле, ово се мења ову стрелицу право сада да укаже на овог момка овде. 515 00:24:17,470 --> 00:24:19,580 Сада, запамтите, ми имамо привремена променљива. 516 00:24:19,580 --> 00:24:23,520 Дакле, ми нисмо сироче никакве чворове, јер ја имам тог типа у мојој 517 00:24:23,520 --> 00:24:25,010 имплементација уклонити. 518 00:24:25,010 --> 00:24:29,600 Па сад, ако је сама листа није нулл, Морам да поправим нешто мало. 519 00:24:29,600 --> 00:24:32,690 >> Морам сада да ли је ова стрелица, који је претходно указује 520 00:24:32,690 --> 00:24:36,830 од 50 до 34, ово мора да оде, јер ако ја покушавам да се отарасим 521 00:24:36,830 --> 00:24:41,910 од 34, 50 је имао боље не одржава било врста назад позивање на њега као 522 00:24:41,910 --> 00:24:42,820 стрелица предложио. 523 00:24:42,820 --> 00:24:44,820 Тако сам урадио ову линију. 524 00:24:44,820 --> 00:24:46,520 Па онда сам урадио. 525 00:24:46,520 --> 00:24:48,040 Тај случај је заправо прилично лако. 526 00:24:48,040 --> 00:24:51,010 Сецкање главу листе је релативно једноставан. 527 00:24:51,010 --> 00:24:52,980 >> Нажалост, ту је ово нервира друго блок. 528 00:24:52,980 --> 00:24:56,170 Тако да сада, морам да размотри случај где постоји нешто у средини. 529 00:24:56,170 --> 00:24:59,880 Али то није превише страшно, осим за синтаксу овако. 530 00:24:59,880 --> 00:25:03,080 Дакле, ако ја нисам на почетку листа, ја сам негде у средини. 531 00:25:03,080 --> 00:25:08,160 И ова линија овде говори, почетак на шта год да си у чвор. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Иди на следеће поље претходне нода и указују да на показивачу. 534 00:25:18,550 --> 00:25:20,390 >> Хајде да урадимо ово сликовито. 535 00:25:20,390 --> 00:25:21,640 То је компликовано добијање. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Дакле, ако ја имам претходне поља овде - хајде да урадимо то - следећа поља овде. 538 00:25:37,990 --> 00:25:41,200 Идем да поједностави своје показиваче радије него нацртати гомилу 539 00:25:41,200 --> 00:25:45,710 ствари и назад крстаре међусобно. 540 00:25:45,710 --> 00:25:50,870 А сада, хајде да кажемо да је ово 1, 2, 3. зарад дискусије, чак 541 00:25:50,870 --> 00:25:53,410 иако то не построје са проблем у питању. 542 00:25:53,410 --> 00:25:55,900 >> Дакле, овде је моја повезана листа. 543 00:25:55,900 --> 00:25:59,300 Трудим се да уклоните два у овом Посебно верзија приче. 544 00:25:59,300 --> 00:26:01,960 Тако сам ажурира показивач на бити усмерена на овог момка. 545 00:26:01,960 --> 00:26:03,315 Дакле, ово је ПТР. 546 00:26:03,315 --> 00:26:04,530 Он показује овде. 547 00:26:04,530 --> 00:26:07,170 Ово је листа, која постоји глобално као и раније. 548 00:26:07,170 --> 00:26:09,200 И он показује овде без обзира на све. 549 00:26:09,200 --> 00:26:10,800 И сад, ја покушавам да уклоните два. 550 00:26:10,800 --> 00:26:13,850 >> Дакле, ако показивач указује овде, ја сам ће пратити, очигледно, 551 00:26:13,850 --> 00:26:17,110 претходна показивач, који ме ставља на 1. 552 00:26:17,110 --> 00:26:22,290 Ја онда ћу да кажем да следећи поље, које ме доводи до више ово 553 00:26:22,290 --> 00:26:25,410 бок овде, ће једнак показивач следећи. 554 00:26:25,410 --> 00:26:28,400 Дакле, ако овим показивачем, ово је следећи. 555 00:26:28,400 --> 00:26:31,840 То значи да се ова стрелица потребе да укаже на овог момка. 556 00:26:31,840 --> 00:26:35,140 >> Дакле, шта да линија кода има само урађено је мало ово. 557 00:26:35,140 --> 00:26:37,500 А сада, ово је изгледа као корак у правом смеру. 558 00:26:37,500 --> 00:26:41,390 Ми у суштини желе да снип 2 од од средине 1 и 3. 559 00:26:41,390 --> 00:26:44,400 Тако да има смисла да желимо да рута овај показивач око ње. 560 00:26:44,400 --> 00:26:50,400 Дакле, ово следећи ред проверава да ли показивач следећи није нула, ту је 561 00:26:50,400 --> 00:26:54,200 заиста неко десно од 2, то значи да морамо да урадимо 562 00:26:54,200 --> 00:26:55,850 мало снип овде. 563 00:26:55,850 --> 00:27:00,590 >> Тако да ја сада треба да пратите овај показивач и ажурирати претходни показивач на 564 00:27:00,590 --> 00:27:05,410 овај момак да уради мало Разрађен овде поенту овде. 565 00:27:05,410 --> 00:27:07,100 А сада, ово је визуелно лепо. 566 00:27:07,100 --> 00:27:11,930 То је мало у нереду у то нема нико указујући на 2 више. 567 00:27:11,930 --> 00:27:13,600 2 указује на лево. 568 00:27:13,600 --> 00:27:14,980 И 2 указује на десно. 569 00:27:14,980 --> 00:27:17,480 Али он може да уради шта год хоће, јер Он је о томе да се ослободио. 570 00:27:17,480 --> 00:27:19,480 И није битно ста те вредности су више. 571 00:27:19,480 --> 00:27:23,040 >> Оно што је важно јесте да се преостали момци су изнад рутирање 572 00:27:23,040 --> 00:27:24,280 а испод њега сада. 573 00:27:24,280 --> 00:27:25,810 И заиста, то је оно што ћемо сад. 574 00:27:25,810 --> 00:27:29,360 Ми бесплатно показивач, што значи да кажем оперативни систем, ви сте добродошли 575 00:27:29,360 --> 00:27:30,906 да врате ово. 576 00:27:30,906 --> 00:27:34,900 И онда на крају, враћамо. 577 00:27:34,900 --> 00:27:37,220 Иначе имплицитно, ако још нису вратили, 578 00:27:37,220 --> 00:27:38,290 Морамо да тражимо. 579 00:27:38,290 --> 00:27:41,485 Дакле показивач једнако показивач поред само значи потез овог момка овде. 580 00:27:41,485 --> 00:27:42,600 Мове овог момка овде. 581 00:27:42,600 --> 00:27:45,400 Мове овог момка овде ако, у ствари, нисмо нашли број 582 00:27:45,400 --> 00:27:46,960 ми тражимо још. 583 00:27:46,960 --> 00:27:49,630 >> Тако искрено, она потпуно изгледа огромна, мислим, на први 584 00:27:49,630 --> 00:27:52,180 поглед, нарочито ако сте се борили са овим током квиза онда видети 585 00:27:52,180 --> 00:27:52,850 нешто овако. 586 00:27:52,850 --> 00:27:55,050 И ви себе пат на леђима. 587 00:27:55,050 --> 00:27:57,080 Па, не постоји начин да могу да имам смислио да на квизу. 588 00:27:57,080 --> 00:28:00,470 Али ја бих, ако можете прекршите она доле у ​​њих појединац 589 00:28:00,470 --> 00:28:04,400 случајева и само шетња кроз њега Пажљиво, мада, додуше, под 590 00:28:04,400 --> 00:28:06,300 стресним околностима. 591 00:28:06,300 --> 00:28:09,470 >> Срећом, слика је све срећнији. 592 00:28:09,470 --> 00:28:11,050 Могао си да нацртате ово у било који број начина. 593 00:28:11,050 --> 00:28:12,760 Не морате да урадите крстаре ствар овде. 594 00:28:12,760 --> 00:28:14,520 Могао си то урадити са равно линије као што је овај. 595 00:28:14,520 --> 00:28:18,790 Али суштина овог проблема, у уопште, била да схвате да 596 00:28:18,790 --> 00:28:22,060 слика на крају требало да изгледа мало овако нешто, јер 597 00:28:22,060 --> 00:28:25,030 константа пут наговестио да чувате ометање и ометање и ометање 598 00:28:25,030 --> 00:28:29,900 нови чворови на почетку листе. 599 00:28:29,900 --> 00:28:31,960 Има ли питања? 600 00:28:31,960 --> 00:28:34,565 Вероватно највећи изазов свакако кодни питања. 601 00:28:34,565 --> 00:28:37,690 >> ПУБЛИКА: Тако је листа слична глава у претходним примерима. 602 00:28:37,690 --> 00:28:39,640 >> Давид Ј. Малан: Тачно, тачно. 603 00:28:39,640 --> 00:28:43,130 Само друго име за глобална променљива. 604 00:28:43,130 --> 00:28:44,380 Ворлд виде шта? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> РОБ БОВДЕН: У реду. 607 00:28:49,730 --> 00:28:52,020 Дакле, ово је један где сте морао да напише пасус. 608 00:28:52,020 --> 00:28:56,060 Неки људи писао есеје за ово питање. 609 00:28:56,060 --> 00:29:00,230 Али само је потребно да користите ових шест термине да опише шта се дешава када 610 00:29:00,230 --> 00:29:02,440 покушате да контактирате фацебоок.цом. 611 00:29:02,440 --> 00:29:07,930 Па ја ћу говорити кроз процес користећи све ове термине. 612 00:29:07,930 --> 00:29:11,290 Дакле, у нашем претраживачу, куцамо фацебоок.цом и притисните Ентер. 613 00:29:11,290 --> 00:29:17,280 Дакле, наш претраживач ће да се изгради ХТТП захтев да ће то послати 614 00:29:17,280 --> 00:29:22,220 кроз неки процес на Фацебоок за Фацебоок да одговори на нас са 615 00:29:22,220 --> 00:29:24,450 ХТМЛ своје странице. 616 00:29:24,450 --> 00:29:28,800 >> Дакле, шта је процес који ХТТП захтев 617 00:29:28,800 --> 00:29:30,730 заправо добија на Фацебоок? 618 00:29:30,730 --> 00:29:32,790 Дакле, прво, морамо да преведемо Фацебоок.цом. 619 00:29:32,790 --> 00:29:38,780 Дакле, само дати име Фацебоок.цом, где заправо ради ХТТП захтев 620 00:29:38,780 --> 00:29:39,940 треба да идем? 621 00:29:39,940 --> 00:29:44,120 Дакле, морамо да преведемо Фацебоок.цом у ИП адресу, која јединствено 622 00:29:44,120 --> 00:29:47,620 идентификује шта ми заправо машина желите да пошаљете упит. 623 00:29:47,620 --> 00:29:49,310 Ваш лаптоп има ИП адресу. 624 00:29:49,310 --> 00:29:52,240 Све повезан на Интернет има ИП адресу. 625 00:29:52,240 --> 00:29:59,030 >> Дакле ДНС, Домаин Наме Систем, који је шта ће се руковати превод 626 00:29:59,030 --> 00:30:03,750 од фацебоок.цом до ИП адресе које ви у ствари желите да контактирате. 627 00:30:03,750 --> 00:30:08,075 Тако смо у контакт са ДНС сервере и рецимо, шта је фацебоок.цом? 628 00:30:08,075 --> 00:30:16,560 Он каже, ох, то је ИП адреса 190,212 нешто, нешто, нешто. 629 00:30:16,560 --> 00:30:16,900 У реду. 630 00:30:16,900 --> 00:30:18,850 Сада, ја знам шта машина Желим да се обратите. 631 00:30:18,850 --> 00:30:22,360 >> Па онда ви пошаљете ХТТП захтев преко за ту машину. 632 00:30:22,360 --> 00:30:24,140 Па како то да се те машине? 633 00:30:24,140 --> 00:30:27,200 Па, захтев иде од рутер на рутер овај адаптер. 634 00:30:27,200 --> 00:30:32,630 Запамтите пример у класи, где смо заправо видели пут да 635 00:30:32,630 --> 00:30:35,340 пакети узели када смо покушали да комуницирају. 636 00:30:35,340 --> 00:30:38,460 Видели смо га скок преко Атлантика Океан у једном тренутку или било шта друго. 637 00:30:38,460 --> 00:30:42,820 >> Дакле, последњи термин лука. 638 00:30:42,820 --> 00:30:46,520 Дакле, ово је сада на вашем рачунару. 639 00:30:46,520 --> 00:30:49,970 Можете да имате више ствари тренутно комуницира са интернета. 640 00:30:49,970 --> 00:30:53,730 Тако да може да се ради, рецимо, Скипе. 641 00:30:53,730 --> 00:30:55,670 Можда имам интернет прегледач отворен. 642 00:30:55,670 --> 00:30:59,010 Можда имам нешто да Торрентинг фајлове. 643 00:30:59,010 --> 00:31:00,880 Дакле, све ове ствари су комуникацији са 644 00:31:00,880 --> 00:31:02,600 Интернет на неки начин. 645 00:31:02,600 --> 00:31:08,070 >> Дакле, када ваш рачунар прима неке податке са интернета, како то ради 646 00:31:08,070 --> 00:31:10,130 Знам шта апликација заправо жели податке? 647 00:31:10,130 --> 00:31:12,610 Како се зна да ли је тај подаци намењен 648 00:31:12,610 --> 00:31:16,070 Торрентинг апликацију за разлику на веб бровсер? 649 00:31:16,070 --> 00:31:20,980 Дакле, ово је сврха лука у који све ове апликације имају 650 00:31:20,980 --> 00:31:22,720 тврдио порт на рачунару. 651 00:31:22,720 --> 00:31:27,580 Дакле, ваш веб претраживач каже, хеј, Слушам на порту 1000. 652 00:31:27,580 --> 00:31:32,240 А твој Торрентинг програм каже, Слушам на порту 3000. 653 00:31:32,240 --> 00:31:34,770 И Скипе каже, ја користим порт 4000. 654 00:31:34,770 --> 00:31:41,950 >> Дакле, када се неке податке који припада на једном од ових апликација, података 655 00:31:41,950 --> 00:31:45,510 је означена који порт је заправо треба послати заједно на. 656 00:31:45,510 --> 00:31:47,950 Дакле ово каже, ох, ја припадам до луке 1000. 657 00:31:47,950 --> 00:31:50,950 Знам тада морам да ово проследите заједно са мојим веб претраживача. 658 00:31:50,950 --> 00:31:56,440 Дакле, разлог је то релевантно овде је да веб сервери имају тенденцију да 659 00:31:56,440 --> 00:31:58,240 слушајте на порту 80. 660 00:31:58,240 --> 00:32:02,420 Дакле, када сам контактирати Фацебоок.цом, ја сам комуницира са неким машином. 661 00:32:02,420 --> 00:32:06,390 Али морам да кажем коју луку да Машина Желим да комуницирају са. 662 00:32:06,390 --> 00:32:09,160 И веб сервери имају тенденцију да буду слушање на порту 80. 663 00:32:09,160 --> 00:32:14,010 >> Ако су хтели, могли су да га подесите тако да се наводи како на порту 7000. 664 00:32:14,010 --> 00:32:19,090 А онда у веб бровсер, ја могао ручно укуцајте Фацебоок.цом: 7000 до 665 00:32:19,090 --> 00:32:24,600 послати захтев на порту 7000 од Фацебоока веб сервер. 666 00:32:24,600 --> 00:32:26,820 >> Давид Ј. Малан: И у овом случају, чак и иако нисмо захтевају да људи 667 00:32:26,820 --> 00:32:30,000 Помињем ово, у овом случају, шта лука би захтев заправо иде у? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Покушајте поново. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Тачно. 672 00:32:44,300 --> 00:32:47,960 Не тражите да, али суптилност да је тамо нико последњи. 673 00:32:47,960 --> 00:32:51,770 >> РОБ БОВДЕН: Дакле ХТТПС, јер је то посебно за слушање 674 00:32:51,770 --> 00:32:55,180 шифрована, то је на порту 4430. 675 00:32:55,180 --> 00:32:57,680 >> Публика: И е-поште су 25, зар не? 676 00:32:57,680 --> 00:33:00,670 >> Давид Ј. Малан: Спољашњи е-поште, 25, иеп. 677 00:33:00,670 --> 00:33:03,760 >> РОБ БОВДЕН: Ја не знам ни већина - све нижим имају тенденцију да буду 678 00:33:03,760 --> 00:33:06,310 резервисано за ствари. 679 00:33:06,310 --> 00:33:09,260 Мислим да је све под 1024 је резервисано. 680 00:33:09,260 --> 00:33:13,450 >> ПУБЛИКА: Зашто сте рекли 3 је погрешан број? 681 00:33:13,450 --> 00:33:18,820 >> РОБ БОВДЕН: Зато што у ИП адресу, има четири групације цифара. 682 00:33:18,820 --> 00:33:21,090 И они су од 0 до 255.. 683 00:33:21,090 --> 00:33:28,060 Дакле 192.168.2.1 је заједничка локална ИП адреса мрежа. 684 00:33:28,060 --> 00:33:30,840 Обратите пажњу на све оне су мање од 255.. 685 00:33:30,840 --> 00:33:33,570 Дакле, када сам почела са 300, да не би могло имати 686 00:33:33,570 --> 00:33:35,210 био један од бројева. 687 00:33:35,210 --> 00:33:38,170 >> Давид Ј. Малан: Али то блесаво снимак од - било је ЦСИ, где су имали 688 00:33:38,170 --> 00:33:39,970 број који је био сувише велики за ИП адресу. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> РОБ БОВДЕН: Има ли питања на ово? 691 00:33:46,110 --> 00:33:51,710 Следећи, тако потпуна промена у тема, али имамо овај низ ПХП за 692 00:33:51,710 --> 00:33:53,270 куће у парку. 693 00:33:53,270 --> 00:33:56,360 И имамо несређене листе. 694 00:33:56,360 --> 00:33:59,550 И ми желимо да одштампате сваку ставку листе Управо садржи име хоусе. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Дакле, имамо фореацх петљу. 697 00:34:11,870 --> 00:34:17,540 Дакле запамтите, синтакса је фореацх низ као ставка у низу. 698 00:34:17,540 --> 00:34:22,360 Дакле кроз сваку итерацију петље, кућа ће да се на једном од 699 00:34:22,360 --> 00:34:24,060 вредности унутар низа. 700 00:34:24,060 --> 00:34:26,530 >> На првој итерацији, куће ће бити Кабот кућа. 701 00:34:26,530 --> 00:34:30,370 На другој итерацији, кућа ће бити курирске кућа и тако даље. 702 00:34:30,370 --> 00:34:34,370 Дакле, за сваку кућу као куад, ми смо само да одштампате - 703 00:34:34,370 --> 00:34:37,250 Такође је могуће да је поновио - 704 00:34:37,250 --> 00:34:42,199 ставка листе и затим име куће у а затим затворите ставку листе. 705 00:34:42,199 --> 00:34:45,210 Великих заграда су опционални овде. 706 00:34:45,210 --> 00:34:49,480 >> А онда ми је рекао у питању сама, не заборавите да затворите 707 00:34:49,480 --> 00:34:50,770 несређене листе ознака. 708 00:34:50,770 --> 00:34:53,949 Дакле, морамо да изађете ПХП режим како би се то остварило. 709 00:34:53,949 --> 00:35:00,280 Или смо могли да одјекнула затворите Несређена листа ознаку. 710 00:35:00,280 --> 00:35:02,380 >> Давид Ј. Малан: Такође фино овде би су да користе стару школу 711 00:35:02,380 --> 00:35:07,340 петља са $ и = 0 0 и користећи тачке на схватим дужину зрака. 712 00:35:07,340 --> 00:35:09,240 Потпуно исто добро, само мало вордиер. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> ПУБЛИКА: Дакле, ако сте хтели да [ИНАУДИБЛЕ], би ти - 715 00:35:14,742 --> 00:35:16,734 Заборавио сам шта петља [ИНАУДИБЛЕ] је. 716 00:35:16,734 --> 00:35:21,380 Да ли $ куад брацкет и? 717 00:35:21,380 --> 00:35:21,850 >> Давид Ј. Малан: Управо тако. 718 00:35:21,850 --> 00:35:23,100 Да, тачно. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> РОБ БОВДЕН: Још нешто? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> Давид Ј. Малан: У реду. 723 00:35:32,010 --> 00:35:32,300 Компромиси. 724 00:35:32,300 --> 00:35:38,290 Тако је било гомиле одговора могуће за сваки од ових. 725 00:35:38,290 --> 00:35:40,510 Ми заиста су само у потрази за нешто убедљив за наопако и 726 00:35:40,510 --> 00:35:41,100 мана. 727 00:35:41,100 --> 00:35:44,830 И број 16 питао, валидацију корисника ' улаз на страни клијента, као и са ЈаваСцрипт, 728 00:35:44,830 --> 00:35:47,280 уместо страни сервера, као и са ПХП. 729 00:35:47,280 --> 00:35:49,450 Дакле, шта је наопако од ради клијент-страни? 730 00:35:49,450 --> 00:35:53,780 >> Па, једна од ствари које ми је предложеним да ли смањење кашњења, јер вам 731 00:35:53,780 --> 00:35:56,750 не морају да смета контактирали сервера, који може трајати неколико 732 00:35:56,750 --> 00:36:00,390 милисекунди или чак неколико секунди избегавајући да и само 733 00:36:00,390 --> 00:36:04,670 потврђивање корисничких уноса страни клијента по ов он-субмит руковаоца и 734 00:36:04,670 --> 00:36:06,650 Само проверавам, да ли су они упишите нешто у за име? 735 00:36:06,650 --> 00:36:08,080 Да ли су откуцате нешто у за е-маил адресу? 736 00:36:08,080 --> 00:36:10,950 Да ли они бирају дому од падајући мени? 737 00:36:10,950 --> 00:36:14,360 >> Можете им дати тренутну повратну информацију користећи гигахерца рачунара 738 00:36:14,360 --> 00:36:16,770 или шта год они имају то је заправо на њиховом столу. 739 00:36:16,770 --> 00:36:19,310 Дакле, то је само боље корисник доживљавају обично. 740 00:36:19,310 --> 00:36:24,460 Али мана раде на страни клијента валидација, ако то урадите без такође 741 00:36:24,460 --> 00:36:29,860 ради на страни сервера валидацију је да већина неко долази из ЦС50 зна 742 00:36:29,860 --> 00:36:33,980 да можете да пошаљете податке које желите на серверу било који број начина. 743 00:36:33,980 --> 00:36:37,030 Искрено, у већини сваком прегледачу, можете кликните около у подешавањима и само 744 00:36:37,030 --> 00:36:40,110 искључите ЈаваСцрипт, која би, дакле, онемогући било какав облик 745 00:36:40,110 --> 00:36:41,080 валидација. 746 00:36:41,080 --> 00:36:44,460 >> Али такође можда сећате да сам чак и урадио неке ствари у класи волшебни помоћу 747 00:36:44,460 --> 00:36:47,790 телнет и заправо претвара да бити прегледач слањем ГЕТ 748 00:36:47,790 --> 00:36:49,240 захтеви на сервер. 749 00:36:49,240 --> 00:36:51,030 А то свакако није користећи било који ЈаваСцрипт. 750 00:36:51,030 --> 00:36:53,290 То је само моје куцање команде на тастатури. 751 00:36:53,290 --> 00:36:57,410 Дакле стварно, сваки програмер у довољно удобност са Веб и ХТТП 752 00:36:57,410 --> 00:37:01,690 могао послати све податке он или она жели на сервер без нострификације. 753 00:37:01,690 --> 00:37:05,470 А ако ваш сервер не и проверу, да ли они ми дају име, је 754 00:37:05,470 --> 00:37:08,930 ово заправо исправна емаил адреса, зар они бирају спаваоницу, можда ћете завршити 755 00:37:08,930 --> 00:37:12,800 горе убацивање лажни или само празно подаци у бази података, што је вероватно 756 00:37:12,800 --> 00:37:15,450 неће бити добра ствар ако сте под претпоставком да је тамо. 757 00:37:15,450 --> 00:37:16,770 >> Дакле, ово је реалност досадне. 758 00:37:16,770 --> 00:37:19,890 Али, у општем, страни клијента Валидација је супер. 759 00:37:19,890 --> 00:37:21,810 Али то значи дупло више посла. 760 00:37:21,810 --> 00:37:25,970 Иако постоје уради постоје различити библиотеке, ЈаваСцрипт библиотеке за 761 00:37:25,970 --> 00:37:28,830 пример, да би се то много, много мање главобоље. 762 00:37:28,830 --> 00:37:31,940 И ви можете поново да користите неке од кода страни сервера, клијент-страни. 763 00:37:31,940 --> 00:37:35,980 Али не схватају да је то типично додатни посао. 764 00:37:35,980 --> 00:37:36,415 Да. 765 00:37:36,415 --> 00:37:37,792 >> ПУБЛИКА: Дакле, ако ми само рекао мање безбедна - 766 00:37:37,792 --> 00:37:39,205 >> Давид Ј. Малан: [смех] 767 00:37:39,205 --> 00:37:39,680 Ух. 768 00:37:39,680 --> 00:37:43,105 Они су увек теже оне да пресуди. 769 00:37:43,105 --> 00:37:44,480 >> РОБ БОВДЕН: То би су прихваћени. 770 00:37:44,480 --> 00:37:44,810 >> Давид Ј. Малан: Шта? 771 00:37:44,810 --> 00:37:45,810 >> РОБ БОВДЕН: ја створио овај проблем. 772 00:37:45,810 --> 00:37:46,735 То би била прихваћена. 773 00:37:46,735 --> 00:37:47,220 >> Давид Ј. Малан: Да. 774 00:37:47,220 --> 00:37:47,830 >> ПУБЛИКА: Кул. 775 00:37:47,830 --> 00:37:51,770 >> РОБ БОВДЕН: Али ми не прихватамо за први - 776 00:37:51,770 --> 00:37:53,630 добро, оно што смо тражили јесте нешто као да не морају да се 777 00:37:53,630 --> 00:37:55,270 комуницира са сервером. 778 00:37:55,270 --> 00:37:58,355 Нисмо прихватити само бржи. 779 00:37:58,355 --> 00:38:00,080 >> ПУБЛИКА: Шта је са не релоад страницу? 780 00:38:00,080 --> 00:38:00,430 >> РОБ БОВДЕН: Да. 781 00:38:00,430 --> 00:38:03,000 То је био одговор прихваћен. 782 00:38:03,000 --> 00:38:06,300 >> Давид Ј. Малан: Било где смо осетили то је више него вероватно не вероватно 783 00:38:06,300 --> 00:38:09,780 да сте знали шта сте били говорећи, који је тешко 784 00:38:09,780 --> 00:38:13,500 линија за понекад скрене. 785 00:38:13,500 --> 00:38:16,000 Коришћење повезану листу уместо од низа да одржи 786 00:38:16,000 --> 00:38:17,590 сортирана листа целих бројева. 787 00:38:17,590 --> 00:38:21,000 Тако наопако често цитирати са повезан листе које мотивисани њихову целину 788 00:38:21,000 --> 00:38:22,370 увод је добијате динамизам. 789 00:38:22,370 --> 00:38:23,030 Они могу да расту. 790 00:38:23,030 --> 00:38:23,950 Они могу скупити. 791 00:38:23,950 --> 00:38:27,370 Дакле, не морате да скочите кроз обруче да се заиста створи више меморије 792 00:38:27,370 --> 00:38:28,140 са низом. 793 00:38:28,140 --> 00:38:30,310 Или не морате да само кажу, извини, корисник. 794 00:38:30,310 --> 00:38:31,410 Низ је попуњен. 795 00:38:31,410 --> 00:38:35,850 Дакле, динамичан раст листе. 796 00:38:35,850 --> 00:38:37,210 Лоша иако од повезаних листи? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> ПУБЛИКА: То је линеарна. 799 00:38:43,356 --> 00:38:45,800 Претраживање на повезаној листи је линеарна уместо што војдите 800 00:38:45,800 --> 00:38:46,360 >> Давид Ј. Малан: Управо тако. 801 00:38:46,360 --> 00:38:50,160 Претраживање на повезаној листи је линеаран, чак и ако је то сортирају, јер можете 802 00:38:50,160 --> 00:38:53,170 Само пратите ове мрвице хлеба, ови показивачи, од почетка листе 803 00:38:53,170 --> 00:38:53,570 до краја. 804 00:38:53,570 --> 00:38:57,970 Ви не можете да искористи случајан приступ и, стога, бинарни претраживање, чак и ако је то 805 00:38:57,970 --> 00:39:00,740 сортирају, да бисте могли урадите са низом. 806 00:39:00,740 --> 00:39:02,390 А ту је још један трошак. 807 00:39:02,390 --> 00:39:02,966 Да. 808 00:39:02,966 --> 00:39:03,800 >> ПУБЛИКА: Меморија неефикасна? 809 00:39:03,800 --> 00:39:04,130 >> Давид Ј. Малан: Да. 810 00:39:04,130 --> 00:39:06,940 Па, ја не бих нужно кажу неефикасан. 811 00:39:06,940 --> 00:39:10,110 Али то вас не кошта више меморије, јер ти треба 32 бита за сваки 812 00:39:10,110 --> 00:39:13,400 чвор за додатних показивача, ат бар за појединачно повезаној листи. 813 00:39:13,400 --> 00:39:16,660 Сада, ако сте само складиштење целе бројеве и ви додавањем показивача, то је 814 00:39:16,660 --> 00:39:17,830 заправо врста не-тривијалан. 815 00:39:17,830 --> 00:39:19,340 То је удвостручавање количину меморије. 816 00:39:19,340 --> 00:39:22,330 Али у стварности, ако сте складиштење повезана листа Структуре које могу имати 817 00:39:22,330 --> 00:39:25,540 8 бајтова, 16 бајта, још више него да, можда је мање 818 00:39:25,540 --> 00:39:26,500 од маргиналног трошка. 819 00:39:26,500 --> 00:39:28,320 Али то је ипак трошак. 820 00:39:28,320 --> 00:39:31,880 Дакле, било би од оних сам било добро као мана. 821 00:39:31,880 --> 00:39:32,110 >> 18.. 822 00:39:32,110 --> 00:39:36,100 Коришћење ПХП уместо Ц да напише командне линије програма. 823 00:39:36,100 --> 00:39:41,890 Дакле овде, то је често брже за коришћење језик као ПХП или Руби или Питхон. 824 00:39:41,890 --> 00:39:43,700 Само брзо отворите се текст едитору. 825 00:39:43,700 --> 00:39:45,900 Имате много више функција располагању. 826 00:39:45,900 --> 00:39:49,325 ПХП има судоперу функција, док је у Ц, ви 827 00:39:49,325 --> 00:39:50,420 имају врло, врло мало. 828 00:39:50,420 --> 00:39:53,820 У ствари, момци знају на тежи начин да немате хеш табеле. 829 00:39:53,820 --> 00:39:55,000 Не сте повезани листе. 830 00:39:55,000 --> 00:39:57,470 Ако желите онима, морате да имплементирати их сами. 831 00:39:57,470 --> 00:40:00,950 >> Дакле, један од ПХП наопако или стварно било тумачити језик је брзина 832 00:40:00,950 --> 00:40:02,920 са којима можете писати код. 833 00:40:02,920 --> 00:40:06,660 Али мана, видели смо то када сам брзо шлаг горе а мисспеллер 834 00:40:06,660 --> 00:40:11,780 имплементација у предавању користећи ПХП, је да помоћу протумачити језика 835 00:40:11,780 --> 00:40:13,570 је обично спорији. 836 00:40:13,570 --> 00:40:18,420 И видели смо да очигледно са повећање у времену од 0.3 секунди до 3 837 00:40:18,420 --> 00:40:24,440 секунде, због тумачења то заправо дешава. 838 00:40:24,440 --> 00:40:27,060 >> Друга је била да вам наопако не морају да састави. 839 00:40:27,060 --> 00:40:30,130 Тако је такође убрзава развој узгред, јер ви немате 840 00:40:30,130 --> 00:40:31,360 два корака води програм. 841 00:40:31,360 --> 00:40:32,140 Потребно је само један. 842 00:40:32,140 --> 00:40:35,260 И тако то је прилично убедљив као добро. 843 00:40:35,260 --> 00:40:38,450 Коришћење СКЛ базе података уместо ЦСВ датотека за складиштење података. 844 00:40:38,450 --> 00:40:40,230 Дакле, СКЛ база података се користи за псет7. 845 00:40:40,230 --> 00:40:42,060 ЦСВ датотеке нисте користили много. 846 00:40:42,060 --> 00:40:45,960 Али ти га користили индиректно у псет7 као добро разговарајући са Иахоо Финанце. 847 00:40:45,960 --> 00:40:49,330 >> Али ЦСВ је баш као у Екцел фајл али супер једноставно, где су колоне су 848 00:40:49,330 --> 00:40:54,010 само демаркед зарезима унутар од иначе текстуалне датотеке. 849 00:40:54,010 --> 00:40:56,740 И коришћењем СКЛ базе података је мало више убедљив. 850 00:40:56,740 --> 00:41:00,060 То је наопако, јер се ствари као изаберите и убаците и избрисати. 851 00:41:00,060 --> 00:41:03,790 А ти, вероватно, индексе који МиСКЛ и друге базе података, као што су 852 00:41:03,790 --> 00:41:07,510 Орацле, изградити за вас у меморији, који значи да је ваш избор је вероватно не 853 00:41:07,510 --> 00:41:09,000 ће бити линеарна одозго надоле. 854 00:41:09,000 --> 00:41:11,300 То је заправо ће бити нешто као бинарну претрагу или тако нешто 855 00:41:11,300 --> 00:41:12,520 слично у духу. 856 00:41:12,520 --> 00:41:13,930 Дакле, они су генерално бржи су. 857 00:41:13,930 --> 00:41:16,040 >> Али мана је то то је само још посла. 858 00:41:16,040 --> 00:41:16,730 То је више труда. 859 00:41:16,730 --> 00:41:18,140 Морате разумети базе података. 860 00:41:18,140 --> 00:41:18,940 Морате да га подесите. 861 00:41:18,940 --> 00:41:20,840 Потребан вам је сервер за покретање да база података о. 862 00:41:20,840 --> 00:41:22,750 Морате да разумете како да га конфигуришете. 863 00:41:22,750 --> 00:41:24,930 Дакле, то су само они врсте уступака. 864 00:41:24,930 --> 00:41:27,860 Док ЦСВ датотека, можете да створи га са гедит. 865 00:41:27,860 --> 00:41:28,770 А ти си добро да иде. 866 00:41:28,770 --> 00:41:31,550 Нема сложеност даље од тога. 867 00:41:31,550 --> 00:41:34,870 >> Користећи трие уместо хеш табели са посебном цхаининг за складиштење 868 00:41:34,870 --> 00:41:37,490 речник речи подсећају од псет5. 869 00:41:37,490 --> 00:41:42,480 Дакле, покушава наопако, у теорији барем, шта? 870 00:41:42,480 --> 00:41:46,380 Константна време, барем ако сте хеширање на сваком од појединца 871 00:41:46,380 --> 00:41:48,990 слова у речи, као што си ти може имати за псет5. 872 00:41:48,990 --> 00:41:52,720 То би могло да буде пет, шест хешеве хасхес ако има пет или шест 873 00:41:52,720 --> 00:41:53,900 слова у речи. 874 00:41:53,900 --> 00:41:54,580 И то је прилично добро. 875 00:41:54,580 --> 00:41:56,910 И ако постоји горња граница колико дуго ваше речи може бити, то је 876 00:41:56,910 --> 00:41:59,320 заиста асимптотически константа време. 877 00:41:59,320 --> 00:42:05,180 >> Док хасх табела са одвојеним цхаининг, проблем постоји са тим 878 00:42:05,180 --> 00:42:09,070 врста структуре података је да перформансе ваших алгоритама обично 879 00:42:09,070 --> 00:42:12,700 зависи од броја ствари већ у структури података. 880 00:42:12,700 --> 00:42:15,660 И то је дефинитивно случај са ланци, при чему више ствари си ставио 881 00:42:15,660 --> 00:42:18,800 у хеш табели, оне дуже ланци иду, што значи у најгорем 882 00:42:18,800 --> 00:42:21,960 случај, што можда бити у потрази за је скроз на крају једне 883 00:42:21,960 --> 00:42:26,000 од тих ланаца, који ефективно преноси у нешто линеарно. 884 00:42:26,000 --> 00:42:29,450 >> Сада, у пракси, то апсолутно могла бити случај да хеш табела са 885 00:42:29,450 --> 00:42:32,820 ланци је брже од одговарајућих трие имплементација. 886 00:42:32,820 --> 00:42:35,570 Али то је из различитих разлога, међу који се покушава користити цео много 887 00:42:35,570 --> 00:42:39,240 меморије која се, у ствари, споре ствари доле, јер не добијете фин 888 00:42:39,240 --> 00:42:42,410 користи нешто што се зове кеширање, где ствари које су близу заједно 889 00:42:42,410 --> 00:42:45,420 у меморији се може приступити често брже. 890 00:42:45,420 --> 00:42:48,180 А понекад можете доћи до стварно добар хасх функција. 891 00:42:48,180 --> 00:42:51,060 Чак и ако морате да трошите мало меморије, можда, заиста, бити у стању да 892 00:42:51,060 --> 00:42:54,430 наћи ствари брзо и не лош као линеарно. 893 00:42:54,430 --> 00:42:58,410 >> Дакле укратко, није било нужно са било којим од ових једне или чак два 894 00:42:58,410 --> 00:43:00,050 специфичне ствари смо тражите. 895 00:43:00,050 --> 00:43:03,080 Стварно нешто убедљив као наопако и мана 896 00:43:03,080 --> 00:43:04,800 генерално ухваћен нашу пажњу. 897 00:43:04,800 --> 00:43:11,840 >> РОБ БОВДЕН: Дакле, за позитивне стране, ми смо урадили не прихвата по себи "брже." Ви 898 00:43:11,840 --> 00:43:14,540 имао да каже нешто о томе. 899 00:43:14,540 --> 00:43:17,910 Чак и ако теоретски брже рекао, знали смо да сте некако разумели 900 00:43:17,910 --> 00:43:19,470 да је 0 1. 901 00:43:19,470 --> 00:43:22,820 И хасх табела, у теорији, није 0 1. 902 00:43:22,820 --> 00:43:26,550 Помињање ништа о току рада генерално имаш тачке. 903 00:43:26,550 --> 00:43:32,640 Али "брже", већина решења о велики одбор који су имима 904 00:43:32,640 --> 00:43:34,990 објективно спорији од решења који су били хасх табеле. 905 00:43:34,990 --> 00:43:37,250 Дакле, брже по себи није баш истина. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> Давид Ј. Малан: Дом-де Дом Дом. 908 00:43:44,380 --> 00:43:46,686 Ја сам вероватно једини који схвата ето како то би требало да 909 00:43:46,686 --> 00:43:47,500 се изговара, зар не? 910 00:43:47,500 --> 00:43:50,400 >> РОБ БОВДЕН: Ја стварно имао појма. 911 00:43:50,400 --> 00:43:51,650 >> Давид Ј. Малан: То је смисла у мојој глави. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> РОБ БОВДЕН: Ја радим ово. 914 00:43:57,580 --> 00:43:58,020 У реду. 915 00:43:58,020 --> 00:44:04,243 Дакле, ово је једна у којој сте морали да скрене дијаграм сличан можда 916 00:44:04,243 --> 00:44:06,040 видели на претходних испита. 917 00:44:06,040 --> 00:44:12,200 Па хајде да погледамо ово. 918 00:44:12,200 --> 00:44:18,170 Дакле, из ХТМЛ чвора, имамо два деца, глава и тело. 919 00:44:18,170 --> 00:44:20,570 Дакле, ми смо грана - главу и тело. 920 00:44:20,570 --> 00:44:22,280 Глава има наслов таг. 921 00:44:22,280 --> 00:44:23,710 Дакле, имамо наслов. 922 00:44:23,710 --> 00:44:28,450 >> Сада, једна ствар је много људи Заборавио је да су ови текст чворови су 923 00:44:28,450 --> 00:44:30,430 елементи унутар овог дрвета. 924 00:44:30,430 --> 00:44:36,260 Дакле, овде смо да се деси да их скрене као овала да их разликују од ових 925 00:44:36,260 --> 00:44:37,380 типови чворова. 926 00:44:37,380 --> 00:44:41,450 Али Обавештење такође овде имамо топ, средњи, а дно ће завршити као 927 00:44:41,450 --> 00:44:42,560 текст чворови. 928 00:44:42,560 --> 00:44:46,250 Дакле, заборављајући оне донекле је заједничког грешке. 929 00:44:46,250 --> 00:44:48,770 >> Тело има троје деце - ове три Дивс. 930 00:44:48,770 --> 00:44:53,340 Дакле див, див, див, а затим текст деца чвор тих Дивс. 931 00:44:53,340 --> 00:44:55,900 То је прилично много је за то питања. 932 00:44:55,900 --> 00:44:57,860 >> Давид Ј. Малан: И то је вредно напоменути, иако ми не размишљамо о овим 933 00:44:57,860 --> 00:45:01,040 детаљи у време проводимо на Јава, да налог ради, у 934 00:45:01,040 --> 00:45:02,290 Чињеница, ствар технички. 935 00:45:02,290 --> 00:45:06,330 Дакле, ако глава дође пред телом у ХТМЛ, онда би требало да се појави на 936 00:45:06,330 --> 00:45:08,860 лево од тела у стварном ДОМ. 937 00:45:08,860 --> 00:45:12,265 То је његов, у принципу, само ФИИ, нешто што се зове поредак документ, где 938 00:45:12,265 --> 00:45:13,260 није свеједно. 939 00:45:13,260 --> 00:45:17,470 А ако су реализовале само парсер, програм који чита ХТМЛ у згради 940 00:45:17,470 --> 00:45:20,960 до стабла у меморији, да будем искрен, то је вероватно оно што интуитивно 941 00:45:20,960 --> 00:45:24,720 ипак учините - одозго надоле, лева на десно. 942 00:45:24,720 --> 00:45:26,116 >> РОБ БОВДЕН: Питања о томе? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Да ли треба да урадим следећи? 945 00:45:30,000 --> 00:45:32,380 >> Давид Ј. Малан: Наравно. 946 00:45:32,380 --> 00:45:33,810 >> РОБ БОВДЕН: У реду. 947 00:45:33,810 --> 00:45:39,320 Дакле, ово је бафер преплављен напад питање. 948 00:45:39,320 --> 00:45:43,740 Главна ствар овде је да призна, добро, како би могао противник трик 949 00:45:43,740 --> 00:45:46,170 овај програм у извршавању произвољног кода? 950 00:45:46,170 --> 00:45:51,860 Дакле аргв1, прво командне линије Аргумент за овај програм, који може бити 951 00:45:51,860 --> 00:45:53,920 произвољно дуго. 952 00:45:53,920 --> 00:45:59,160 Али овде смо користећи мемцпи да копирате аргв1, који овде налази бар. 953 00:45:59,160 --> 00:46:00,165 Ми смо га пролази као аргумент. 954 00:46:00,165 --> 00:46:02,050 И тако је то узимање на име траци. 955 00:46:02,050 --> 00:46:08,040 >> Дакле, ми смо бар мемцпиинг у овој бафер ц. 956 00:46:08,040 --> 00:46:09,400 Колико бајта смо копирате? 957 00:46:09,400 --> 00:46:14,040 Па ипак многи бајтова бара деси се користи, дужину тог аргумента. 958 00:46:14,040 --> 00:46:17,930 Али ц је широк само 12 бајтова. 959 00:46:17,930 --> 00:46:22,280 Дакле, ако смо упишите аргумент командне линије то је дуже од 12 бајтова, ми смо 960 00:46:22,280 --> 00:46:25,470 ће прелије ово Посебно бафер. 961 00:46:25,470 --> 00:46:31,000 Сада, како да противник превари програмирати у извршавању произвољног кода? 962 00:46:31,000 --> 00:46:34,910 >> Дакле, не заборавите да овде Главни зове фоо. 963 00:46:34,910 --> 00:46:37,340 И тако онда главни позива фоо. 964 00:46:37,340 --> 00:46:40,408 Хајде да нацртате ово. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Дакле, имамо гомилу. 967 00:46:46,990 --> 00:46:49,090 И главна има стека оквир на дну. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 У неком тренутку, главни позиви фоо. 970 00:46:53,250 --> 00:46:55,390 Па, одмах, главни позиви фоо. 971 00:46:55,390 --> 00:46:57,130 И тако трла добија свој стек оквир. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Сада, у неком тренутку, трла ће да се врати. 974 00:47:02,220 --> 00:47:06,810 И отишао фоо приносе, морамо да знамо на шта линија кода унутар главног ми 975 00:47:06,810 --> 00:47:10,610 су да би се знало где требало би да настави у главни. 976 00:47:10,610 --> 00:47:13,100 Можемо позвати фоо од целини гомила различитим местима. 977 00:47:13,100 --> 00:47:14,620 Како да знамо где да се врате? 978 00:47:14,620 --> 00:47:16,460 Па, морамо да ускладишти ту негде. 979 00:47:16,460 --> 00:47:23,010 >> Дакле, негде у праву овде, чувамо где би требало да се врати у једном 980 00:47:23,010 --> 00:47:24,070 фоо враћа. 981 00:47:24,070 --> 00:47:26,350 И то је повратна адреса. 982 00:47:26,350 --> 00:47:30,490 Па како противник може искористити ово је чињеница да 983 00:47:30,490 --> 00:47:37,550 овај бафер Ц се складишти, хајде да кажу, овде је в. 984 00:47:37,550 --> 00:47:39,690 Дакле, имамо 12 бајтова за ц. 985 00:47:39,690 --> 00:47:40,540 Ово је Ц. 986 00:47:40,540 --> 00:47:43,030 И ово је стек прстен Фооа. 987 00:47:43,030 --> 00:47:49,970 Дакле, ако злонамерни корисник унесе више бајтова од 12 или оне унесете команду 988 00:47:49,970 --> 00:47:54,570 линија аргумент који је дужи од 12 карактера, онда ћемо 989 00:47:54,570 --> 00:47:57,540 прелије овај бафер. 990 00:47:57,540 --> 00:47:59,910 >> Можемо да наставимо. 991 00:47:59,910 --> 00:48:02,220 И у једном тренутку, ми идемо далеко довољно да почнемо 992 00:48:02,220 --> 00:48:05,120 замени ову адресу. 993 00:48:05,120 --> 00:48:08,310 Дакле, када смо преписали повратну адресу, то значи да када фоо 994 00:48:08,310 --> 00:48:14,220 повратак, ми смо враћа у где год злонамерни корисник га говори да од 995 00:48:14,220 --> 00:48:19,490 год вредност је ушла, било којим карактера корисник унео. 996 00:48:19,490 --> 00:48:24,320 И тако, ако злонамерни корисник је бити нарочито паметан, он може имати ово 997 00:48:24,320 --> 00:48:29,255 врати се негде у принтДеф функција или негде у маллоц 998 00:48:29,255 --> 00:48:31,830 функција, само нигде произвољна. 999 00:48:31,830 --> 00:48:38,420 >> Али, чак и више паметан шта ако он има корисник врати у праву овде. 1000 00:48:38,420 --> 00:48:41,920 А онда почнете извршавању ово као линија кода. 1001 00:48:41,920 --> 00:48:46,610 Дакле, у том тренутку, корисник може унети шта год хоће у овом региону. 1002 00:48:46,610 --> 00:48:52,210 И он има потпуну контролу преко програма. 1003 00:48:52,210 --> 00:48:53,460 Питања о томе? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Дакле, следеће питање је завршена реимплементатион од фоо на такав начин 1006 00:49:00,970 --> 00:49:02,620 да то више не може. 1007 00:49:02,620 --> 00:49:03,870 >> Дакле, постоји неколико начина могли сте урадили. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Ми још увек имамо само Ц је дужине 12. 1010 00:49:13,330 --> 00:49:16,480 Могао си се променио ово као део вашег решења. 1011 00:49:16,480 --> 00:49:18,930 Ми такође додао да проверите да сигуран бар није била нула. 1012 00:49:18,930 --> 00:49:24,460 Иако вам не треба да је за пуну кредит. 1013 00:49:24,460 --> 00:49:27,690 Дакле, ми смо прво провери дужине од бара. 1014 00:49:27,690 --> 00:49:31,650 Ако је већи од 12, а затим заправо не радите копију. 1015 00:49:31,650 --> 00:49:33,010 Дакле, то је један од начина да фиксирање. 1016 00:49:33,010 --> 00:49:36,750 >> Други начин је фиксирање је уместо има ц бити само дужине 12, то има 1017 00:49:36,750 --> 00:49:39,310 бити дужине стрлен (бар). 1018 00:49:39,310 --> 00:49:43,370 Други начин је фиксирање је да заправо само врате. 1019 00:49:43,370 --> 00:49:46,690 Дакле, ако сте управо стечен ослободити од свих ово, ако сте управо избрисан све 1020 00:49:46,690 --> 00:49:51,830 линија кода, ти би добио пун кредит, јер ове функције 1021 00:49:51,830 --> 00:49:54,150 у ствари не постићи ништа. 1022 00:49:54,150 --> 00:49:57,650 То је копирање командне линије Аргумент у неке низ у 1023 00:49:57,650 --> 00:49:59,960 њена локална стек оквир. 1024 00:49:59,960 --> 00:50:01,310 А онда ствар враћа. 1025 00:50:01,310 --> 00:50:04,020 И шта год да остварена је нестао. 1026 00:50:04,020 --> 00:50:09,740 Дакле, повратак је био и довољан начин за добијање пуне заслуге. 1027 00:50:09,740 --> 00:50:13,425 >> Давид Ј. Малан: Не баш дух питање али прихватљив по 1028 00:50:13,425 --> 00:50:15,580 спец ипак. 1029 00:50:15,580 --> 00:50:18,260 >> РОБ БОВДЕН: Питања на било шта од тога? 1030 00:50:18,260 --> 00:50:22,270 Једна ствар коју најмање потребно да се изради код. 1031 00:50:22,270 --> 00:50:24,810 Дакле, иако технички нисте рањив ако ваша шифра не 1032 00:50:24,810 --> 00:50:29,130 саставити, ми то нисмо прихватили. 1033 00:50:29,130 --> 00:50:31,350 Нема питања? 1034 00:50:31,350 --> 00:50:33,320 У реду. 1035 00:50:33,320 --> 00:50:34,580 >> Давид Ј. Малан: Да ли желите да кажем овај наслов? 1036 00:50:34,580 --> 00:50:37,230 >> РОБ БОВДЕН: Не 1037 00:50:37,230 --> 00:50:40,470 >> Давид Ј. Малан: Дакле, у овом једном, ово је или добра вест или лоша вест. 1038 00:50:40,470 --> 00:50:43,870 Ово је буквално исти проблем као први квизу. 1039 00:50:43,870 --> 00:50:46,140 И то скоро је иста Проблем као псет1. 1040 00:50:46,140 --> 00:50:49,980 Али то је намерно поједностављена да буде једноставнији пирамида, онај који може бити 1041 00:50:49,980 --> 00:50:52,330 решити са мало једноставније итерација. 1042 00:50:52,330 --> 00:50:55,680 И заиста, шта смо добијали на овде није био толико логика, 1043 00:50:55,680 --> 00:50:58,100 јер вероватно, у овом тренутку, ви сте удобније него што сте били 1044 00:50:58,100 --> 00:51:01,850 у недељу једном са петље за или зашто петље, али стварно да задиркује осим да 1045 00:51:01,850 --> 00:51:04,790 ти си мало пријатно Идеја да ПХП је не само о томе шта 1046 00:51:04,790 --> 00:51:05,290 програмирање. 1047 00:51:05,290 --> 00:51:07,820 Заправо се може користити као језик да пишу програме командне линије. 1048 00:51:07,820 --> 00:51:10,060 >> И заиста, то је оно што ми покушавамо да вам скренем пажњу на. 1049 00:51:10,060 --> 00:51:12,060 Ово је командна линија ПХП програма. 1050 00:51:12,060 --> 00:51:16,690 Дакле Ц код овде, док тачан у Ц, не исправи за ПХП. 1051 00:51:16,690 --> 00:51:17,940 Али код стварно је исти. 1052 00:51:17,940 --> 00:51:21,720 Ако упоредите решења за квиз 0 против квиза 1, видећете да 1053 00:51:21,720 --> 00:51:25,630 то је скоро идентичан, осим неки долар знаци и за 1054 00:51:25,630 --> 00:51:27,250 одсуство типа података. 1055 00:51:27,250 --> 00:51:31,720 Конкретно, ако погледамо овде, видећете да смо поновити, у овом 1056 00:51:31,720 --> 00:51:33,730 случај, од 1. до 7. горе. 1057 00:51:33,730 --> 00:51:34,910 >> Могли смо то урадили 0 индекса. 1058 00:51:34,910 --> 00:51:37,320 Али понекад, ја мислим да је то само ментално лакше да размишљају о стварима 1059 00:51:37,320 --> 00:51:38,200 од 1 до 7. 1060 00:51:38,200 --> 00:51:40,300 Ако желите један блок, а затим два блокови, затим три, онда 1061 00:51:40,300 --> 00:51:41,770 тачка, тачка, тачка седам. 1062 00:51:41,770 --> 00:51:45,960 Ми смо се ј иницијализован на 1 и затим рачунајући на до И. 1063 00:51:45,960 --> 00:51:48,150 И све је овде иначе идентичан. 1064 00:51:48,150 --> 00:51:49,790 Али достојан ноте су неколико ствари. 1065 00:51:49,790 --> 00:51:53,230 Ми вам дати ове две линије, ово прво један, гоофили именован као ствар 1066 00:51:53,230 --> 00:51:54,560 за оштре праска. 1067 00:51:54,560 --> 00:51:58,770 И то само специфицира путању, фолдер, у којој програм може бити 1068 00:51:58,770 --> 00:52:02,160 утврдио да ли желите да користите да тумачи ову датотеку. 1069 00:52:02,160 --> 00:52:04,710 >> А онда линија после тога, од Наравно, значи ући ПХП режим. 1070 00:52:04,710 --> 00:52:07,740 И линија на самом дну значи излазак ПХП режим. 1071 00:52:07,740 --> 00:52:09,740 И то ради, уопште, са тумачи језике. 1072 00:52:09,740 --> 00:52:14,370 Некако је досадна, ако пишете Програм у датотеку под називом фоо.пхп. 1073 00:52:14,370 --> 00:52:17,320 А онда ваши корисници морају да само запамтите, у реду, да се покрене овај програм, ја 1074 00:52:17,320 --> 00:52:22,320 морати да откуцате "пхп простора фоо.пхп." Врста од досадних ако ништа друго. 1075 00:52:22,320 --> 00:52:25,270 И то је такође открива да ваш програм је написан у ПХП, што није све 1076 00:52:25,270 --> 00:52:27,060 да осветљава за корисника. 1077 00:52:27,060 --> 00:52:30,100 >> Тако да можете у потпуности уклонити ПХП. сећам из предавања. 1078 00:52:30,100 --> 00:52:35,690 И ви у ствари можете да урадите. / Фоо ако ви сте га тако што га цхмоддед 1079 00:52:35,690 --> 00:52:36,500 извршна. 1080 00:52:36,500 --> 00:52:39,630 Дакле цхмод + к трла би то урадио. 1081 00:52:39,630 --> 00:52:41,460 А ако сте такође додати шарада овде. 1082 00:52:41,460 --> 00:52:45,320 Али стварно, проблем је добијање на одштампа нешто овако. 1083 00:52:45,320 --> 00:52:51,100 Без ХТМЛ, нема Ц-код сигурно, само неки ПХП. 1084 00:52:51,100 --> 00:52:54,100 Тако је Мило тада вратио у проблему 25. 1085 00:52:54,100 --> 00:52:58,050 И у 25., добили сте на следеће скелет код, који је 1086 00:52:58,050 --> 00:52:59,730 прилично једноставна веб страница. 1087 00:52:59,730 --> 00:53:04,230 И сочан део ХТМЛ-мудар је доле Овде, где имамо унутар тела 1088 00:53:04,230 --> 00:53:09,160 облик који има јединствени ИД улаза унутар којих је два улаза, један 1089 00:53:09,160 --> 00:53:11,950 са идејом име, један са идејом дугме. 1090 00:53:11,950 --> 00:53:14,240 >> Први је био тип текста, Други типа поднесе. 1091 00:53:14,240 --> 00:53:16,930 И тако смо вам дали, у ствари, више састојци него ти потребни, само тако 1092 00:53:16,930 --> 00:53:19,230 да сте имали опције са којима да се реши овај проблем. 1093 00:53:19,230 --> 00:53:21,130 Не треба строго све ове личне карте. 1094 00:53:21,130 --> 00:53:23,580 Али то вам омогућава да решите то на различите начине. 1095 00:53:23,580 --> 00:53:27,050 А горе на врху, приметићете да циљ је био да покрене 1096 00:53:27,050 --> 00:53:27,960 прозор овако - 1097 00:53:27,960 --> 00:53:28,780 Здраво, Мило! - 1098 00:53:28,780 --> 00:53:31,270 да се појави у претраживачу користећи супер једноставно, ако 1099 00:53:31,270 --> 00:53:33,190 не ружан, опрезан функција. 1100 00:53:33,190 --> 00:53:37,480 И тако, на крају, ово се своди концептуално да некако слушање за 1101 00:53:37,480 --> 00:53:41,290 поднесци обрасца клијент-страни , Не на страни сервера, некако 1102 00:53:41,290 --> 00:53:45,640 реагују на том поднеску од отимања вредност коју је корисник унео 1103 00:53:45,640 --> 00:53:50,120 у на поље Име, а затим приказивање га у телу увек будни. 1104 00:53:50,120 --> 00:53:53,460 >> Дакле, један начин можете да урадите ово је са јКуери, који изгледа мало 1105 00:53:53,460 --> 00:53:56,880 синтаксички збуњује на први. 1106 00:53:56,880 --> 00:54:00,760 То можете да урадите са чистом ДОМ кодом - доцумент.гетелемент по ИД. 1107 00:54:00,760 --> 00:54:02,530 Али, хајде да погледамо ову верзију. 1108 00:54:02,530 --> 00:54:05,110 Имам пар важно линије прво. 1109 00:54:05,110 --> 00:54:09,460 Дакле један, имамо ову линију, која је идентичан ономе што сте можда видели 1110 00:54:09,460 --> 00:54:13,830 у, ја верујем, форм2.хтмл из класе у недељу 9.. 1111 00:54:13,830 --> 00:54:16,960 И ово је само кажем, извршава Следећи код када 1112 00:54:16,960 --> 00:54:18,430 документ је спреман. 1113 00:54:18,430 --> 00:54:21,770 Ово је важно само због ХТМЛ странице се читају на врх 1114 00:54:21,770 --> 00:54:23,280 дно, лево-десно. 1115 00:54:23,280 --> 00:54:27,910 >> И зато, ако покушате да урадите нешто у коду овде да неком ДОМ 1116 00:54:27,910 --> 00:54:31,560 елеменат, неки ХТМЛ таг, то је доле овде, то радите пребрзо, 1117 00:54:31,560 --> 00:54:34,220 јер ово нема ни прочитана у меморију. 1118 00:54:34,220 --> 00:54:37,740 Дакле, рекавши ово доцумент.реади линија, говоримо, 1119 00:54:37,740 --> 00:54:39,040 ево неки број, претраживач. 1120 00:54:39,040 --> 00:54:42,440 Али не извршавају све док у целини документ је спреман, то је ДОМ 1121 00:54:42,440 --> 00:54:44,320 дрво постоји у меморији. 1122 00:54:44,320 --> 00:54:47,110 Ово је један мало више је једноставно, ако синтаксички 1123 00:54:47,110 --> 00:54:51,890 мало другачије, где ја кажем, граб ХТМЛ елемента чији јединствен 1124 00:54:51,890 --> 00:54:53,560 идентификатор је улаза. 1125 00:54:53,560 --> 00:54:56,220 То је оно што хасх таг означава, јединствени ИД. 1126 00:54:56,220 --> 00:54:58,070 И онда ја зовем. Поднесе. 1127 00:54:58,070 --> 00:55:01,660 >> Тако. Субмит овде је функција, иначе познат као метод, то је 1128 00:55:01,660 --> 00:55:05,850 унутар објекта на левој страна тамо да нисам истакне. 1129 00:55:05,850 --> 00:55:08,990 Дакле, ако мислите улаза као објекат у меморији - и заиста је то. 1130 00:55:08,990 --> 00:55:10,440 То је чвор у дрвету - 1131 00:55:10,440 --> 00:55:16,580 . Достави средства када је овај облик са овај ИД се подноси, извршити 1132 00:55:16,580 --> 00:55:17,700 Следећи код. 1133 00:55:17,700 --> 00:55:20,290 Не занима ме шта име Функција је сам извршавање. 1134 00:55:20,290 --> 00:55:23,760 Дакле, овде сам користећи, као и раније, шта је зове функција или ламбда 1135 00:55:23,760 --> 00:55:24,720 анониман функција. 1136 00:55:24,720 --> 00:55:27,640 То није уопште интелектуално занимљиво осим што нема име, 1137 00:55:27,640 --> 00:55:30,220 што је у реду ако си само икада то назвао једном. 1138 00:55:30,220 --> 00:55:34,490 И унутра сам заправо руковати подношење обрасца. 1139 00:55:34,490 --> 00:55:36,810 Ја прво декларисати променљиву назива вредност. 1140 00:55:36,810 --> 00:55:40,610 И онда шта је ефекат ово истакао део овде сада? 1141 00:55:40,610 --> 00:55:44,755 Шта да радим у Висок ниво за мене? 1142 00:55:44,755 --> 00:55:48,539 >> ПУБЛИКА: Она добија вредност коју корисник није учинио у ХТМЛ испод. 1143 00:55:48,539 --> 00:55:50,920 Она добија тај ИД и онда проналази вредност тога. 1144 00:55:50,920 --> 00:55:51,590 >> Давид Ј. Малан: Управо тако. 1145 00:55:51,590 --> 00:55:54,300 Она зграби чвор, чији јединствени идентификатор је име. 1146 00:55:54,300 --> 00:55:56,900 Она добија вредност у њима, који је, по свој прилици, шта корисник 1147 00:55:56,900 --> 00:55:58,190 откуцали њега или себе. 1148 00:55:58,190 --> 00:56:01,020 И онда се складишти у да променљива назива вредност. 1149 00:56:01,020 --> 00:56:03,720 Као страну, можете такође може имати уради ово мало другачије. 1150 00:56:03,720 --> 00:56:09,250 Потпуно прихватљиво по нешто лаж вар вредност добија 1151 00:56:09,250 --> 00:56:10,500 доцумент.врите. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 И то је разлог зашто је мало досадан да не користим јКуери. 1154 00:56:15,460 --> 00:56:16,710 "Име" вредност.. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Дакле потпуно прихватљиво. 1157 00:56:19,620 --> 00:56:22,770 Различити начини да се то уради. јКуери само има тенденцију да буде мало више језгровит и 1158 00:56:22,770 --> 00:56:25,230 дефинитивно више популаран међу програмерима. 1159 00:56:25,230 --> 00:56:27,590 >> Сада, ја радим помало разума проверити, јер у проблему 1160 00:56:27,590 --> 00:56:30,820 Изјава смо експлицитно рекао, ако корисник још није откуцан његов 1161 00:56:30,820 --> 00:56:32,580 име, не показују упозорења. 1162 00:56:32,580 --> 00:56:35,390 Али можете да проверите да је, за само проверу за празан стринг за 1163 00:56:35,390 --> 00:56:37,850 цитат-Ункуоте ако постоји ништа заправо тамо. 1164 00:56:37,850 --> 00:56:40,880 Али, ако то није једнака куоте-Ункуоте, Желим да позовем обавештења. 1165 00:56:40,880 --> 00:56:45,610 А занимљиво је да је део овде ми користимо оператор плус, који 1166 00:56:45,610 --> 00:56:48,130 шта ради у ЈаваСцрипт? 1167 00:56:48,130 --> 00:56:48,740 ЦОНЦАТЕНАТЕ. 1168 00:56:48,740 --> 00:56:50,690 Дакле, то је као пхпс дот оператера. 1169 00:56:50,690 --> 00:56:52,820 Иста идеја, мало другачије синтакса. 1170 00:56:52,820 --> 00:56:55,280 И ја само ствара ниску која сте видели на снимку екрана - 1171 00:56:55,280 --> 00:56:57,750 Здраво, тако и тако. 1172 00:56:57,750 --> 00:56:59,200 >> А онда последњи детаљ је то. 1173 00:56:59,200 --> 00:57:04,970 Зашто се врати лажну унутрашњост овог анонимног функције? 1174 00:57:04,970 --> 00:57:07,420 >> ПУБЛИКА: Нема вредност. 1175 00:57:07,420 --> 00:57:09,380 Ти га ставите у форми. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Он само каже, ако вредност није једнако празно, онда то урадите. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Било је празно у том поднеску. 1180 00:57:20,940 --> 00:57:21,170 >> Давид Ј. Малан: У реду. 1181 00:57:21,170 --> 00:57:21,640 Пажљиво ипак. 1182 00:57:21,640 --> 00:57:22,830 Нема никога овде. 1183 00:57:22,830 --> 00:57:25,510 И то је повратак лажно изван од, ако услови. 1184 00:57:25,510 --> 00:57:29,470 Дакле, овај истакнути линију, ретурн, извршава без обзира када 1185 00:57:29,470 --> 00:57:32,310 образац се подноси. 1186 00:57:32,310 --> 00:57:36,810 Шта враћање лажну унутрашњост ово догађај руковалац, како се то зове, 1187 00:57:36,810 --> 00:57:38,450 догађај у питању је достављање? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> ПУБЛИКА: Зато што дешава само једном. 1190 00:57:44,470 --> 00:57:45,320 >> Давид Ј. Малан: Само једном се деси. 1191 00:57:45,320 --> 00:57:46,821 Не баш. 1192 00:57:46,821 --> 00:57:47,292 Да? 1193 00:57:47,292 --> 00:57:50,589 >> ПУБЛИКА: Она спречава форму из подношење подразумевано понашање, 1194 00:57:50,589 --> 00:57:52,480 чиме би страницу поново напунити. 1195 00:57:52,480 --> 00:57:53,110 >> Давид Ј. Малан: Управо тако. 1196 00:57:53,110 --> 00:57:56,490 Тако сам преоптерећења термин поднесе овде, зато ја кажем, форма је 1197 00:57:56,490 --> 00:57:57,670 подноси. 1198 00:57:57,670 --> 00:58:02,240 Али, као што сугеришу, то заправо није поднет у правом ХТТП начин. 1199 00:58:02,240 --> 00:58:06,870 Када кликнете на дугме Пошаљи, због наше онСубмит руковалац, ми пресретање 1200 00:58:06,870 --> 00:58:09,040 који облик подношење тако да говори. 1201 00:58:09,040 --> 00:58:11,290 Ми онда радимо наш ствар са ЈаваСцрипт кода. 1202 00:58:11,290 --> 00:58:14,070 Али ја намерно врацам лажна, зато што ја не желим да се деси 1203 00:58:14,070 --> 00:58:18,430 Сплит Сецонд касније је за целу форму сама да се подносе на Интернету 1204 00:58:18,430 --> 00:58:22,800 сервер са кључним вредност паровима променом УРЛ адреса да буде нешто слично 1205 00:58:22,800 --> 00:58:26,180 к = мачке или шта год да јесмо, на пример, у класи. 1206 00:58:26,180 --> 00:58:29,640 Не желим да се то деси, јер нема сервера слушање за ово 1207 00:58:29,640 --> 00:58:30,690 формирају подношење. 1208 00:58:30,690 --> 00:58:32,320 То је чисто ради у ЈаваСцрипт коду. 1209 00:58:32,320 --> 00:58:35,760 И зато ја нисам чак ни акција приписују на мом форми, јер сам 1210 00:58:35,760 --> 00:58:38,870 не намеравају да се то икада ићи на серверу. 1211 00:58:38,870 --> 00:58:40,780 >> Дакле, то је подноси. 1212 00:58:40,780 --> 00:58:44,340 Али ми пресретање тај образац Подношење и спречавање подразумевану 1213 00:58:44,340 --> 00:58:47,477 понашање, што је да се заиста иду све до сервера. 1214 00:58:47,477 --> 00:58:48,730 >> ПУБЛИКА: тако да имајући на страни клијента. 1215 00:58:48,730 --> 00:58:49,780 >> Давид Ј. Малан: Кеепинг то на страни клијента. 1216 00:58:49,780 --> 00:58:51,030 Тачно у праву. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Следећи је био мој ох МиСКЛ. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> РОБ БОВДЕН: У реду. 1221 00:59:00,430 --> 00:59:04,990 Дакле, ово је било прво питање генерално грубо за људе. 1222 00:59:04,990 --> 00:59:07,270 Иако су касније отишли ​​они боље. 1223 00:59:07,270 --> 00:59:12,260 Зато сте морали да изаберете тачан податке типови за оба ова колона. 1224 00:59:12,260 --> 00:59:17,750 И оба од њих имају неке ствари о њима да 1225 00:59:17,750 --> 00:59:20,620 направити избор тежак. 1226 00:59:20,620 --> 00:59:24,430 Дакле, инт није био валидан укуцајте број за. 1227 00:59:24,430 --> 00:59:29,410 Разлог за ово је 12-цифрени рачун број, инт није довољно велики да 1228 00:59:29,410 --> 00:59:31,070 складиштите укупне цифре. 1229 00:59:31,070 --> 00:59:36,570 Дакле, важећи избор би био велики инт ако вам се деси да знате да. 1230 00:59:36,570 --> 00:59:42,090 Други избор би могао да буде Чар поље дужине 12. 1231 00:59:42,090 --> 00:59:44,560 Дакле, било оних би радили. 1232 00:59:44,560 --> 00:59:46,100 Међ не би. 1233 00:59:46,100 --> 00:59:50,170 >> Сада, баланс, мислим назад на псет7. 1234 00:59:50,170 --> 00:59:59,540 Дакле, ми смо посебно користи за децималу меморишете вредност акција или - 1235 00:59:59,540 --> 01:00:00,550 >> Давид Ј. Малан: Готовина. 1236 01:00:00,550 --> 01:00:01,060 >> РОБ БОВДЕН: Готовина. 1237 01:00:01,060 --> 01:00:05,710 Користили смо децималу за складиштење износ готовина да корисник тренутно има. 1238 01:00:05,710 --> 01:00:10,950 Дакле, разлог радимо то је јер, запамтите, плута. 1239 01:00:10,950 --> 01:00:12,480 Има флоатинг поинт у прецизности. 1240 01:00:12,480 --> 01:00:18,200 То не може прецизно држати готовину вредности као и ми желимо овде. 1241 01:00:18,200 --> 01:00:23,630 Дакле децималног је у стању да прецизно продавница нешто, кажу, две децимале. 1242 01:00:23,630 --> 01:00:27,630 Зато биланс, ми то желимо да се децимално и не плутају. 1243 01:00:27,630 --> 01:00:30,230 >> Давид Ј. Малан: И такође, такође, иако то можда било паметно у другом 1244 01:00:30,230 --> 01:00:32,760 контекстима да мисле, можда је ово је шанса за инт. 1245 01:00:32,760 --> 01:00:34,420 Само ћу пратити ствари у пенија. 1246 01:00:34,420 --> 01:00:38,670 Зато што смо експлицитно показали подразумевану вредност је 100,00, то 1247 01:00:38,670 --> 01:00:40,380 значи да би могао да буде инт. 1248 01:00:40,380 --> 01:00:45,310 И још један суптилност превише са бројем је да то није био намењен 1249 01:00:45,310 --> 01:00:46,180 да буде трик питање. 1250 01:00:46,180 --> 01:00:49,860 Али сећам се да инт у МиСКЛ, као у Ц, бар у 1251 01:00:49,860 --> 01:00:51,440 апарат, је 32-битни. 1252 01:00:51,440 --> 01:00:53,960 И мада ми вас не очекују да Знам тачно колико цифара које 1253 01:00:53,960 --> 01:00:56,910 средства, сећам се да је највећи број можете представљати потенцијално 1254 01:00:56,910 --> 01:01:00,710 са 32-битним бројем је отприлике шта? 1255 01:01:00,710 --> 01:01:02,760 >> Који број ми увек кажемо? 1256 01:01:02,760 --> 01:01:04,530 2 до 32, што је оно што отприлике? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Не морате да знате тачно. 1259 01:01:08,780 --> 01:01:10,580 Али отприлике је корисно у животу. 1260 01:01:10,580 --> 01:01:12,200 То је отприлике 4 милијарде. 1261 01:01:12,200 --> 01:01:14,430 Дакле, ми смо рекли да је неколико пута. 1262 01:01:14,430 --> 01:01:16,360 Знам да сам рекао да је неколико пута. 1263 01:01:16,360 --> 01:01:17,670 И то је отприлике 4 милијарде. 1264 01:01:17,670 --> 01:01:19,710 И то је добро правило палца да зна. 1265 01:01:19,710 --> 01:01:21,880 Ако имате 8 битова, 256 је магични број. 1266 01:01:21,880 --> 01:01:24,160 Ако имате 32 бита, 4 милијарди дати или узети. 1267 01:01:24,160 --> 01:01:27,140 Дакле, ако сте само напишу 4 милијарде, видећете да је то мање него цифара 1268 01:01:27,140 --> 01:01:30,970 12, што значи да је очигледно није Довољно експресивност за снимање 1269 01:01:30,970 --> 01:01:34,220 12-цифрени број рачуна. 1270 01:01:34,220 --> 01:01:34,940 >> РОБ БОВДЕН: У реду. 1271 01:01:34,940 --> 01:01:38,520 Дакле, они други отишао боље. 1272 01:01:38,520 --> 01:01:40,900 Дакле, претпоставимо да је банка намеће $ 20 мјесечних 1273 01:01:40,900 --> 01:01:42,400 Накнада за одржавање на свим рачунима. 1274 01:01:42,400 --> 01:01:45,506 Са оно СКЛ упит могао банка одузимамо $ 20 из сваког бројања, чак и ако 1275 01:01:45,506 --> 01:01:47,520 резултира у неким негативним? 1276 01:01:47,520 --> 01:01:50,380 Дакле, у основи, постоје четири главне врсте упита - 1277 01:01:50,380 --> 01:01:52,840 убаците, изаберите, ажурирање и брисање. 1278 01:01:52,840 --> 01:01:56,080 Па шта ми мислимо да смо намеравате да користите овде? 1279 01:01:56,080 --> 01:01:57,000 Упдате. 1280 01:01:57,000 --> 01:01:58,260 >> Дакле, хајде да погледамо. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Дакле, овде смо ажурирање. 1283 01:02:05,870 --> 01:02:09,900 Оно сто смо ажурирање рачуне? 1284 01:02:09,900 --> 01:02:11,670 Тако ажурирање налога. 1285 01:02:11,670 --> 01:02:15,390 И онда каже: синтакса, шта у рачунима смо ажурирање? 1286 01:02:15,390 --> 01:02:19,520 Па, ми смо постављање равнотеже једнак тренутна вредност равнотеже минус 20. 1287 01:02:19,520 --> 01:02:22,860 Тако ће овај ажурирати све редове рачуна, одузимањем 1288 01:02:22,860 --> 01:02:26,250 $ 20 из равнотеже. 1289 01:02:26,250 --> 01:02:29,260 >> Давид Ј. Малан: честа грешка овде, иако смо га понекад опростио, 1290 01:02:29,260 --> 01:02:32,990 је био да се заправо имају ПХП код овде позива функције упита или стављање 1291 01:02:32,990 --> 01:02:35,460 цитати око свега што не треба да буде тамо. 1292 01:02:35,460 --> 01:02:39,780 >> РОБ БОВДЕН: Запамтите да је МиСКЛ одвојен од језика ПХП. 1293 01:02:39,780 --> 01:02:42,410 Ми се десити да се писање МиСКЛ у ПХП. 1294 01:02:42,410 --> 01:02:46,180 А ПХП онда га шаље преко на МиСКЛ сервер. 1295 01:02:46,180 --> 01:02:51,120 Али ти не треба да би ПХП комуницира са МиСКЛ сервером. 1296 01:02:51,120 --> 01:02:51,730 >> Давид Ј. Малан: Управо тако. 1297 01:02:51,730 --> 01:02:54,240 Значи нема променљиве са доларских знакова треба да буде у овом контексту. 1298 01:02:54,240 --> 01:02:59,550 То само може да уради све математике унутар саме базе података. 1299 01:02:59,550 --> 01:03:00,080 >> РОБ БОВДЕН: У реду. 1300 01:03:00,080 --> 01:03:01,300 Дакле, следећи један. 1301 01:03:01,300 --> 01:03:02,731 Да ли је ово следећи? 1302 01:03:02,731 --> 01:03:03,210 Да. 1303 01:03:03,210 --> 01:03:06,570 Дакле, са оним СКЛ упит могао банка преузели бројеве својих рачуна 1304 01:03:06,570 --> 01:03:09,300 Најбогатије купци, они са биланси већу од 1.000? 1305 01:03:09,300 --> 01:03:13,280 Дакле, који од четири главна типа ћемо желети овде? 1306 01:03:13,280 --> 01:03:14,430 Изаберите. 1307 01:03:14,430 --> 01:03:16,650 Дакле, желимо да изаберете. 1308 01:03:16,650 --> 01:03:17,610 Шта желимо да изаберете? 1309 01:03:17,610 --> 01:03:19,380 Шта колона желимо да изаберете? 1310 01:03:19,380 --> 01:03:20,970 Ми ћемо посебно желимо да бисте изабрали број. 1311 01:03:20,970 --> 01:03:23,910 Али, ако сте рекли звезда, ми такође прихватио. 1312 01:03:23,910 --> 01:03:25,820 >> Дакле, изаберите број са ког стола? 1313 01:03:25,820 --> 01:03:26,640 Налози. 1314 01:03:26,640 --> 01:03:28,370 А онда услов желимо? 1315 01:03:28,370 --> 01:03:30,140 Где биланс већи од 1.000. 1316 01:03:30,140 --> 01:03:31,720 Такође смо прихватили већи него или једнако. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Последњи један. 1319 01:03:36,190 --> 01:03:42,940 Са оно СКЛ упит могао банка близу, тј, избрисати сваки налог који 1320 01:03:42,940 --> 01:03:44,480 има баланс $ 0? 1321 01:03:44,480 --> 01:03:47,620 Дакле, који од четири смо ће желети да користите? 1322 01:03:47,620 --> 01:03:48,320 Делете. 1323 01:03:48,320 --> 01:03:50,180 Дакле, синтакса за то? 1324 01:03:50,180 --> 01:03:51,890 Брисање из ког стола? 1325 01:03:51,890 --> 01:03:53,550 Налози. 1326 01:03:53,550 --> 01:03:55,790 А онда услов на који желимо да избришете - 1327 01:03:55,790 --> 01:03:57,280 где биланс једнак нули. 1328 01:03:57,280 --> 01:04:03,050 Дакле, избрисати све редове из рачуна где је биланс нула. 1329 01:04:03,050 --> 01:04:04,300 Питања на било који од ових? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Желите да куеуе? 1332 01:04:10,260 --> 01:04:11,200 >> Давид Ј. Малан: ред за употребу. 1333 01:04:11,200 --> 01:04:17,110 Дакле, у овом једном, ми смо вам дали нешто упознат структура које смо истраживали А 1334 01:04:17,110 --> 01:04:20,450 битни у класи поред Структуре, која је дата 1335 01:04:20,450 --> 01:04:21,910 структура у вези у духу. 1336 01:04:21,910 --> 01:04:24,670 Разлика мада са ред је да смо морали да се сетим ко некако 1337 01:04:24,670 --> 01:04:27,900 био на предњем реду, у великим део, тако да смо могли направити више 1338 01:04:27,900 --> 01:04:30,530 ефикасно коришћење меморије, најмање ако смо користили низ. 1339 01:04:30,530 --> 01:04:35,460 >> Јер опозив, ако имамо низ, ако, на пример, то је фронт 1340 01:04:35,460 --> 01:04:38,470 ред, ако се у реду овде, а онда неко добија у складу 1341 01:04:38,470 --> 01:04:42,710 иза мене, иза мене, иза мене, и једна особа кораке од линије, ви 1342 01:04:42,710 --> 01:04:45,930 могао, као што смо видели неке од наших људских волонтери у класи, имају све 1343 01:04:45,930 --> 01:04:47,100 схифт на овај начин. 1344 01:04:47,100 --> 01:04:50,880 Али у целини, пошто свако уради нешто није најбоље коришћење времена 1345 01:04:50,880 --> 01:04:54,600 у програму, јер то значи да алгоритам ради у шта 1346 01:04:54,600 --> 01:04:56,520 асимптотско време извршавања? 1347 01:04:56,520 --> 01:04:57,420 То је линеарна. 1348 01:04:57,420 --> 01:04:59,600 >> И осећам се као да је некако глупо. 1349 01:04:59,600 --> 01:05:02,890 Ако следећи лице у складу је следећи особа која би требало да иду у 1350 01:05:02,890 --> 01:05:04,660 продавница, они не морају сви да се крећу заједно. 1351 01:05:04,660 --> 01:05:08,200 Само нека та особа бити отргнуте искључен када дође време, на пример. 1352 01:05:08,200 --> 01:05:09,870 Дакле, можемо уштедети мало времена тамо. 1353 01:05:09,870 --> 01:05:14,840 И тако да се то уради, иако, то значи да шеф реда или 1354 01:05:14,840 --> 01:05:18,060 предњи ред ће прогресивно кретање дубље и дубље 1355 01:05:18,060 --> 01:05:23,340 у низу и на крају можда заправо обмотана ако користимо 1356 01:05:23,340 --> 01:05:25,790 низ за складиштење људе у овом реду. 1357 01:05:25,790 --> 01:05:28,390 Дакле, скоро могу да се сетим низ као кружни података 1358 01:05:28,390 --> 01:05:29,880 структура у том смислу. 1359 01:05:29,880 --> 01:05:33,970 >> Тако да некако морати да пратите величина њега или стварно крај 1360 01:05:33,970 --> 01:05:36,250 а онда где је почетак тога је. 1361 01:05:36,250 --> 01:05:39,490 Дакле, предлажемо да се прогласи један такав ред, позив 1362 01:05:39,490 --> 01:05:41,330 то к, само једно слово. 1363 01:05:41,330 --> 01:05:44,570 Онда предлажемо да предња буде иницијализована на нулу и да величина 1364 01:05:44,570 --> 01:05:45,470 бити иницијализован на нулу. 1365 01:05:45,470 --> 01:05:47,770 >> Тако сада, нема ништа унутар тог реда. 1366 01:05:47,770 --> 01:05:50,910 И ми смо вас да попуните имплементација енкуеуе доле у 1367 01:05:50,910 --> 01:05:55,250 такав начин да функција додаје да н крај к а затим враћа истина. 1368 01:05:55,250 --> 01:05:58,690 Али, ако је к пун или негативна, функција треба да уместо тога ретурн. 1369 01:05:58,690 --> 01:06:01,060 И ми смо вам дали пар претпоставки. 1370 01:06:01,060 --> 01:06:04,320 Али они нису баш функционално релевантно, само да боол постоји, 1371 01:06:04,320 --> 01:06:06,690 јер, технички, боол не постоје у Ц осим ако укључују 1372 01:06:06,690 --> 01:06:07,310 сигурно заглавље датотеке. 1373 01:06:07,310 --> 01:06:09,350 Тако да је само проверите да ли постоји су без је ово трик 1374 01:06:09,350 --> 01:06:10,940 Питање такве ствари. 1375 01:06:10,940 --> 01:06:16,280 >> Дакле енкуеуе, предложили смо у узорку решења за спровођење као што следи. 1376 01:06:16,280 --> 01:06:20,420 Један, прво проверите једноставност, су ниске вешање воће. 1377 01:06:20,420 --> 01:06:23,820 Ако ред је пун или број који Ви покушавате да убаците мање 1378 01:06:23,820 --> 01:06:26,380 од нуле, што смо рекли у спецификација проблема треба 1379 01:06:26,380 --> 01:06:30,320 неће бити дозвољено, јер ми само желимо не-негативне вредности, онда ти треба 1380 01:06:30,320 --> 01:06:31,640 само ретурн одмах. 1381 01:06:31,640 --> 01:06:33,820 Дакле неки релативно лако еррор цхецкинг. 1382 01:06:33,820 --> 01:06:38,720 Ако ипак желите да додате да стварни број, морали сте да урадите мало 1383 01:06:38,720 --> 01:06:39,440 размишљања овде. 1384 01:06:39,440 --> 01:06:41,330 И ово је место где је то мало нервира ментално, јер морате да 1385 01:06:41,330 --> 01:06:43,000 схватите како да рукује обвојно. 1386 01:06:43,000 --> 01:06:46,870 >> Али клица идеје овде да је од интерес за нас је то обвојно 1387 01:06:46,870 --> 01:06:51,480 често подразумева модуларна аритметика и мод оператер, посто страни, 1388 01:06:51,480 --> 01:06:55,140 где можете ићи од већег вредности назад на нулу, а затим један и два и 1389 01:06:55,140 --> 01:06:58,650 три а затим назад око нуле, један и два и три и тако даље 1390 01:06:58,650 --> 01:06:59,380 опет и опет. 1391 01:06:59,380 --> 01:07:02,880 Дакле, начин предлажемо ово радимо је да ми не желимо да у индексу 1392 01:07:02,880 --> 01:07:05,850 низ бројева назива где наши цели бројеви лажу. 1393 01:07:05,850 --> 01:07:10,740 Али да би тамо, ми прво желимо да урадимо без обзира на величину реду је, али 1394 01:07:10,740 --> 01:07:14,080 затим додати да без обзира Предњи део листе је. 1395 01:07:14,080 --> 01:07:17,880 И ефекат који је за нас ставити на право место у реду и 1396 01:07:17,880 --> 01:07:20,970 не претпоставити да је прва особа у складу је на почетку, он који или 1397 01:07:20,970 --> 01:07:24,130 она апсолутно може бити ако Такође су пребацивање свима. 1398 01:07:24,130 --> 01:07:26,710 Али, ми смо само правите посао за себе, ако смо узели 1399 01:07:26,710 --> 01:07:27,800 то посебно пут. 1400 01:07:27,800 --> 01:07:29,330 >> Дакле, можемо га задржати релативно једноставно. 1401 01:07:29,330 --> 01:07:32,180 Ми морамо да се сетим да смо управо додао инт у ред. 1402 01:07:32,180 --> 01:07:35,850 И онда смо се вратили само истина. 1403 01:07:35,850 --> 01:07:38,560 У међувремену, у декуеуе, питали смо да урадите следеће. 1404 01:07:38,560 --> 01:07:42,260 Имплементира на такав начин да декуеуес, да је смени и враћа, 1405 01:07:42,260 --> 01:07:44,190 инт на предњој ред. 1406 01:07:44,190 --> 01:07:46,410 Да бисте уклонили инт, довољно је да га заборави. 1407 01:07:46,410 --> 01:07:47,650 Не морате да прекрије њену бит. 1408 01:07:47,650 --> 01:07:48,820 Дакле, то је још увек у ствари тамо. 1409 01:07:48,820 --> 01:07:51,930 Баш као података на хард диску, тек смо игноришући чињеницу 1410 01:07:51,930 --> 01:07:52,970 да је сада тамо. 1411 01:07:52,970 --> 01:07:55,520 А ако је к празна, ми треба уместо врати негативан 1. 1412 01:07:55,520 --> 01:07:56,750 Дакле, ово изгледа произвољна. 1413 01:07:56,750 --> 01:08:01,640 Зашто се врати негативан 1 уместо лажни? 1414 01:08:01,640 --> 01:08:02,620 Да. 1415 01:08:02,620 --> 01:08:05,070 >> ПУБЛИКА: К складиштење позитивне вредности. 1416 01:08:05,070 --> 01:08:10,950 Пошто сте само чувате позитивне вредности у к, негативан је грешка. 1417 01:08:10,950 --> 01:08:11,510 >> Давид Ј. Малан: У реду, истина. 1418 01:08:11,510 --> 01:08:14,850 Зато јер ми смо само чување позитиван вредности или нула, онда је у реду да се 1419 01:08:14,850 --> 01:08:18,050 врати негативну вредност као Сентинел вредност, посебан симбол. 1420 01:08:18,050 --> 01:08:21,630 Али ви преписивање историје тамо, јер разлог што смо једини 1421 01:08:21,630 --> 01:08:25,890 повратак не-негативне вредности је зато што желимо да 1422 01:08:25,890 --> 01:08:27,670 имају Сентинел вредност. 1423 01:08:27,670 --> 01:08:32,617 Дакле конкретно, зашто не само ретурн фалсе у случају грешака? 1424 01:08:32,617 --> 01:08:33,099 Да. 1425 01:08:33,099 --> 01:08:35,510 >> ПУБЛИКА: Ви сте успели да се врате цео број. 1426 01:08:35,510 --> 01:08:36,630 >> Давид Ј. Малан: Управо тако. 1427 01:08:36,630 --> 01:08:38,569 И ово је место где добија Ц прилично ограничавајући. 1428 01:08:38,569 --> 01:08:40,590 Ако кажеш да идеш да се врати инт, имаш 1429 01:08:40,590 --> 01:08:41,279 да се врати инт. 1430 01:08:41,279 --> 01:08:43,689 Ви не можете да добијете фенси и почели да се враћају воид или пловак или 1431 01:08:43,689 --> 01:08:45,040 стринг или тако нешто. 1432 01:08:45,040 --> 01:08:49,370 Сада, у међувремену, Јава и ПХП и неки други језици могу, у ствари, 1433 01:08:49,370 --> 01:08:51,310 сте повратку другачији врсте вредности. 1434 01:08:51,310 --> 01:08:54,819 А то може заправо бити корисно, где можете да вратите позитивне нуле, Интс, 1435 01:08:54,819 --> 01:08:59,439 негативни интс, или лажни или нула чак да означи грешке. 1436 01:08:59,439 --> 01:09:01,890 Али ми немамо тај свестраност у Ц. 1437 01:09:01,890 --> 01:09:04,569 >> Дакле, са декуеуе, оно што смо предлажем да урадите је - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> РОБ БОВДЕН: Можете вратити фалсе. 1440 01:09:09,830 --> 01:09:13,189 То је само да је лажна тараба дефинисати лажно на нулу. 1441 01:09:13,189 --> 01:09:16,000 Дакле, ако сте се вратили лажна, враћате нула. 1442 01:09:16,000 --> 01:09:25,470 И нула је валидан ствар у нашем реду, док је негативна 1 ако није 1443 01:09:25,470 --> 01:09:27,000 лажно се десило да буде негативан 1. 1444 01:09:27,000 --> 01:09:29,972 Али ти не треба ни треба да знају да. 1445 01:09:29,972 --> 01:09:32,399 >> Давид Ј. Малан: То је зашто ја то нисам рекао. 1446 01:09:32,399 --> 01:09:36,450 >> РОБ БОВДЕН: Али то није била истина да не могу да се врате лажна. 1447 01:09:36,450 --> 01:09:37,700 >> Давид Ј. Малан: Наравно. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Дакле декуеуе, приметили смо прихватити воид као свој аргумент. 1450 01:09:44,240 --> 01:09:45,479 А то је зато што нисмо пролази ништа унутра 1451 01:09:45,479 --> 01:09:48,359 Ми само желимо да уклоните елемент на предњем реду. 1452 01:09:48,359 --> 01:09:49,819 Па како да идем о томе ово? 1453 01:09:49,819 --> 01:09:51,290 Па, прво, хајде да урадимо ово брза провера разум. 1454 01:09:51,290 --> 01:09:53,350 Ако је величина ред је 0, има нема посла да се уради. 1455 01:09:53,350 --> 01:09:54,210 Повратак негативан 1. 1456 01:09:54,210 --> 01:09:54,800 Урађено. 1457 01:09:54,800 --> 01:09:56,340 Дакле, то је пар линија мог програма. 1458 01:09:56,340 --> 01:09:58,180 Дакле, само четири линије остају. 1459 01:09:58,180 --> 01:10:01,310 >> Дакле, овде сам одлучити да декрементирати величина. 1460 01:10:01,310 --> 01:10:04,620 И ефикасно децрементинг величину значи да сам заборавио 1461 01:10:04,620 --> 01:10:06,010 нешто је унутра. 1462 01:10:06,010 --> 01:10:09,910 Али ја такође морам да ажурирате где предњи бројева су. 1463 01:10:09,910 --> 01:10:11,620 Тако да се то уради, треба да уради две ствари. 1464 01:10:11,620 --> 01:10:16,390 Ја прво треба да запамтите шта броја је на предњем реду, 1465 01:10:16,390 --> 01:10:17,860 јер морам да се вратим ту ствар. 1466 01:10:17,860 --> 01:10:20,910 Дакле, ја не желим да заборавим случајно о томе и онда га замени. 1467 01:10:20,910 --> 01:10:22,840 Само ћу да се сетим у инт. 1468 01:10:22,840 --> 01:10:27,310 >> А сада, желим да ажурирате к.фронт да се к.фронт +1. 1469 01:10:27,310 --> 01:10:30,070 Дакле, ако је то била прва особа у линија, сад, ја желим да урадим плус 1 до 1470 01:10:30,070 --> 01:10:31,930 указују на следеће особе у складу. 1471 01:10:31,930 --> 01:10:33,420 Али ја морам да средим ту обвојно. 1472 01:10:33,420 --> 01:10:37,270 А ако је капацитет глобална константа, да ће ми дозволити да се уверите 1473 01:10:37,270 --> 01:10:41,140 као што сам указују на веома последњу особу у линија, операција по модулу ће донети 1474 01:10:41,140 --> 01:10:43,840 ја вратим на нулу у Предњи део реда. 1475 01:10:43,840 --> 01:10:46,050 И да управља обвојно овде. 1476 01:10:46,050 --> 01:10:48,950 И онда ја наставити да се врати н. 1477 01:10:48,950 --> 01:10:51,530 >> Сада, строго говорећи, ја нисам морати да прогласи н. 1478 01:10:51,530 --> 01:10:53,880 Ја не морам да га зграби и чувати их привремено, јер је вредност 1479 01:10:53,880 --> 01:10:54,740 још увек постоји. 1480 01:10:54,740 --> 01:10:57,490 Тако сам могао да урадим праву аритметику да врати бившег шефа 1481 01:10:57,490 --> 01:10:58,450 од ред. 1482 01:10:58,450 --> 01:11:01,850 Али сам осетио да је ово више јасно да заправо зграби инт, га ставите 1483 01:11:01,850 --> 01:11:04,320 у Н, па да се врати да ради јасноће, али 1484 01:11:04,320 --> 01:11:05,735 не стриктно неопходно. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Псст. 1487 01:11:12,130 --> 01:11:13,410 Они су сви у мојој глави изговорљив. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> РОБ БОВДЕН: Па прво питање је бинарна дрво проблема. 1490 01:11:19,110 --> 01:11:22,140 Дакле, прво питање је, ми смо дат ови бројеви. 1491 01:11:22,140 --> 01:11:27,160 И ми желимо да их некако убаци у ови чворови таква да је 1492 01:11:27,160 --> 01:11:30,110 важећи бинарни претрагу дрво. 1493 01:11:30,110 --> 01:11:36,260 Дакле, једна ствар коју треба запамтити о бинарне претраге дрвеће је да то није 1494 01:11:36,260 --> 01:11:39,800 само да ствар са леве стране је мање и ствар 1495 01:11:39,800 --> 01:11:41,120 право је већи. 1496 01:11:41,120 --> 01:11:44,580 То треба да буде да цео дрво за лево је мање, а цело стабло 1497 01:11:44,580 --> 01:11:45,740 на десној страни је већа. 1498 01:11:45,740 --> 01:11:55,260 >> Дакле, ако сам ставио 34 овде на врху, а затим Ставио сам 20 овдје, тако да је важећи тако 1499 01:11:55,260 --> 01:11:56,970 сада, јер 34 овде. 1500 01:11:56,970 --> 01:11:57,920 20 иде у лево. 1501 01:11:57,920 --> 01:11:58,950 Дакле, то је мање. 1502 01:11:58,950 --> 01:12:03,640 Али ја не могу онда ставити 59 овде, јер иако је 59 на десној страни 20, 1503 01:12:03,640 --> 01:12:06,140 то је још увек на левој страни 34. 1504 01:12:06,140 --> 01:12:10,760 Дакле, са тим ограничењем на уму, Најлакши начин за решавање овог вероватно 1505 01:12:10,760 --> 01:12:14,330 Проблем је само врста од ових бројева - 1506 01:12:14,330 --> 01:12:18,720 тако 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 А онда убаците оне с лева на десно. 1508 01:12:21,640 --> 01:12:23,390 >> Дакле, 20 иде овде. 1509 01:12:23,390 --> 01:12:24,630 34 иде овде. 1510 01:12:24,630 --> 01:12:25,830 36 иде овде. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 А можете и да су схватили са неки прикључивање и реализације, 1513 01:12:34,730 --> 01:12:38,830 ох, чекај, ја немам довољно бројеве да попуни ово у овде. 1514 01:12:38,830 --> 01:12:42,170 Зато морам да ресхифт шта мој рута белешка ће бити. 1515 01:12:42,170 --> 01:12:47,490 Али приметити да у коначном три, ако читате са лева на десно, она је у 1516 01:12:47,490 --> 01:12:48,740 повећање поредак. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Дакле, сада, желимо да се изјасни шта струцт ће бити за 1519 01:12:56,540 --> 01:12:58,300 чворови у овом дрвету. 1520 01:12:58,300 --> 01:13:02,720 Дакле, шта нам је потребно у бинарном стаблу? 1521 01:13:02,720 --> 01:13:05,830 Дакле, имамо вредност типа инт, па неки инт вредност. 1522 01:13:05,830 --> 01:13:07,220 Не знам шта ми се зове она у раствору - 1523 01:13:07,220 --> 01:13:08,500 инт н. 1524 01:13:08,500 --> 01:13:13,570 Потребан нам је показивач на левој дете и показивач на десну детету. 1525 01:13:13,570 --> 01:13:17,540 Дакле, то ће изгледати овако. 1526 01:13:17,540 --> 01:13:20,510 И то ће заправо изгледати пре када сте повезани двоструко- 1527 01:13:20,510 --> 01:13:25,090 Списак ствари, тако обавештење - 1528 01:13:25,090 --> 01:13:27,860 Ја ћу морати да скролујете све пут назад до проблема 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Дакле, приметите да изгледа идентично ово, осим што се десити да их зовем 1531 01:13:36,390 --> 01:13:38,590 различита имена. 1532 01:13:38,590 --> 01:13:41,440 Ми још увек имамо цео број вредност и два показивача. 1533 01:13:41,440 --> 01:13:44,850 То је само да уместо лечење показивачи као указујући на следећу ствар 1534 01:13:44,850 --> 01:13:47,955 и претходни ствар, ми смо лечење показивачи да укаже на левој дете 1535 01:13:47,955 --> 01:13:49,205 и право дете. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 У реду. 1538 01:13:57,860 --> 01:13:59,650 Тако да је наш струцт чвор. 1539 01:13:59,650 --> 01:14:03,920 И сада, једина функција треба да имплементирати за то је влак, који 1540 01:14:03,920 --> 01:14:08,320 желимо да идемо преко стабла, штампање од вредности дрвета у циљу. 1541 01:14:08,320 --> 01:14:15,241 >> Дакле, гледајући овде, ми смо желели да одштампате оут 20, 34, 36, 52, 59, и 106. 1542 01:14:15,241 --> 01:14:17,970 Како ћемо постићи да? 1543 01:14:17,970 --> 01:14:18,890 Дакле, то је прилично слично. 1544 01:14:18,890 --> 01:14:22,910 Ако сте видели у последњих испита проблем да си хтео да одштампате 1545 01:14:22,910 --> 01:14:25,940 Цијели са зарезима између све, заправо је још 1546 01:14:25,940 --> 01:14:27,320 лакше од тога. 1547 01:14:27,320 --> 01:14:30,950 Дакле, овде је решење. 1548 01:14:30,950 --> 01:14:33,110 Ово је значајно лакше ако сте то урадили рекурзивно. 1549 01:14:33,110 --> 01:14:36,650 Ја не знам да ли је неко покушао да то уради итеративно. 1550 01:14:36,650 --> 01:14:38,340 >> Али прво, ми имамо нашу базу случај. 1551 01:14:38,340 --> 01:14:39,660 Шта ако корен нулл? 1552 01:14:39,660 --> 01:14:40,610 Онда ми ћемо само да се врате. 1553 01:14:40,610 --> 01:14:42,300 Ми не желимо да одштампате било шта. 1554 01:14:42,300 --> 01:14:45,940 Иначе ћемо прећи рекурзивно доле. 1555 01:14:45,940 --> 01:14:48,140 Штампање целу леву подстабло. 1556 01:14:48,140 --> 01:14:51,440 Дакле, све мање принт од моје тренутне вредности. 1557 01:14:51,440 --> 01:14:53,930 А онда ћу да се одштампа. 1558 01:14:53,930 --> 01:14:57,310 А онда ћу да рецурсе доле мој Цео право подстабло, па све 1559 01:14:57,310 --> 01:14:58,810 већи од мог вредности. 1560 01:14:58,810 --> 01:15:03,870 И ово ће се штампати од свега у циљу. 1561 01:15:03,870 --> 01:15:05,860 Питања о томе како то заправо остварује то? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> ПУБЛИКА: Имам питање на [ИНАУДИБЛЕ]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> РОБ БОВДЕН: Па један од начина приближавања сваки рекурзивни проблем је да само мислим 1566 01:15:23,550 --> 01:15:26,275 о томе бих морате да мислите о свим случајевима кутак. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Дакле, сматрам да желимо да принт целу ово дрво. 1569 01:15:38,110 --> 01:15:42,030 Дакле, сви ћемо се фокусирати на је овај чвор - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Рекурзив позиви, ми претварамо они само раде. 1572 01:15:47,420 --> 01:15:54,000 Дакле овде, ово рекурзивни позив на влак, ми смо чак и без размишљања 1573 01:15:54,000 --> 01:15:58,640 о томе, само попречно леви три, замислите да је већ штампа 20 1574 01:15:58,640 --> 01:16:00,730 и 34 за нас. 1575 01:16:00,730 --> 01:16:03,350 И онда када смо коначно рекурзивно позовите на Траверсе 1576 01:16:03,350 --> 01:16:07,890 у праву, да ће исправно штампати 52, 59, 106 и за нас. 1577 01:16:07,890 --> 01:16:13,620 >> Дакле, с обзиром да ово може штампати 20, 34, и други може да одштампа 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 све што треба да буде у стању да урадите је да штампа себе у сред тога. 1579 01:16:17,180 --> 01:16:21,250 Дакле одштампати све пред нама. 1580 01:16:21,250 --> 01:16:27,710 Принт себе, па струја чвор за штампање 36, редовна иф, а затим 1581 01:16:27,710 --> 01:16:31,170 принт све после нас. 1582 01:16:31,170 --> 01:16:32,730 >> Давид Ј. Малан: Ово је место где рекурзије добија стварно лепа. 1583 01:16:32,730 --> 01:16:36,270 То је то невероватно скок вере где ти најмању мало рада. 1584 01:16:36,270 --> 01:16:38,460 А онда нека неко друго урадити остало. 1585 01:16:38,460 --> 01:16:40,180 И да је неко други је, иронично, ти. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Дакле, за озбиљне слатких поена, ако ви дођите горе на питања - 1588 01:16:48,360 --> 01:16:50,530 >> РОБ БОВДЕН: На питања? 1589 01:16:50,530 --> 01:16:53,490 >> Давид Ј. Малан: А доле мало бројеви, да ли неко зна где 1590 01:16:53,490 --> 01:16:55,190 ови бројеви долазе из? 1591 01:16:55,190 --> 01:16:56,610 >> РОБ БОВДЕН: Немам појма буквално. 1592 01:16:56,610 --> 01:16:59,794 >> Давид Ј. Малан: Они се појављују целом квизу. 1593 01:16:59,794 --> 01:17:01,150 >> ПУБЛИКА: они су исти бројеви? 1594 01:17:01,150 --> 01:17:01,910 >> Давид Ј. Малан: Ови бројеви. 1595 01:17:01,910 --> 01:17:03,260 Мало ускршње јаје. 1596 01:17:03,260 --> 01:17:08,100 Дакле, за оне од вас гледају онлине на кући, да ли можете да нам кажете путем е-поште на 1597 01:17:08,100 --> 01:17:12,680 хеадс@ЦС50.нет шта значај од ове понављају шест бројеви су 1598 01:17:12,680 --> 01:17:18,560 током квиза 1, ми ћемо вас туш са невероватном пажњом на финале 1599 01:17:18,560 --> 01:17:21,610 предавање и стрес лопта. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Лепо, суптилна. 1602 01:17:27,790 --> 01:17:29,570 >> РОБ Бовден: Задње питања о било на квизу? 1603 01:17:29,570 --> 01:17:32,608