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 Так што сардэчна запрашаем першай у гісторыі CS50 пасмяротнае для віктарыны. 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 Мы ўсё яшчэ карыстаецеся% S, што азначае, паспрабаваць чытаць радок ад карыстальніка. 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 Так як у бок, бібліятэка CS50 пазбягае гэтае пытанне ў цэлым, нагадаем, 87 00:03:59,590 --> 00:04:01,060 з дапамогай fgetc. 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 >> Загваздка ў тым, з GetString адкліканні з'яўляецца што мы павінны ўвесь час змяняць памеры 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, 1000 байтаў. 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 Што яшчэ магло Malloc вяртанне да таго ж адрас кавалак памяці? 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 месцы, AKA нуль. 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 >> ROB BOWDEN: Так праблема 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-разрадную архітэктуру, як гэты CS50 прыбора. 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 >> ROB BOWDEN: Гэта не так падвоіць ўсё з іх. 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 Такім чынам, наступны, гэта коды стану HTTP. 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 >> ROB BOWDEN: Так сервер быў шукае тое, што вы хацелі. 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 >> ROB BOWDEN: Так 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 >> ROB BOWDEN: Розніца паміж гэта 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 Але гэта ў іншым URL. 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 тоўстай кішкі, а затым URL, да якога Вы хочаце, каб адхіліць карыстальніка. 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 >> ROB BOWDEN: ОК. 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 >> ROB BOWDEN: Дык што, да. 238 00:11:03,260 --> 00:11:07,670 Ну, тыповы адказ мы былі чакаючы нешта падобнае, файлы 239 00:11:07,670 --> 00:11:08,920 ня chmodded адпаведным чынам. 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 CHMOD, калі гэта, сапраўды, правоў выдаваць на файл або каталог. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: Тады 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 Але калі ваш код PHP было нешта ў гэтым дрэннага, у тэорыі, гэта магло 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 Або ёсць памылка сінтаксісу у кодзе PHP. 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 Але гэта было б PHP, праграма напісаныя іншымі людзьмі, на самай справе 276 00:12:53,820 --> 00:12:57,790 segfaulted, якія толькі калі гэтыя людзі аблажаўся і напісаў памылка ў праграмным кодзе ў 277 00:12:57,790 --> 00:13:00,680 іх перакладчык былі б Сам PHP сегментацыі. 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 >> АЎДЫТОРЫЯ: Такім чынам, для Shuttle PSet, я думаю, калі я зрабіў гэта, як толькі я націснуў 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 Я думаю, што было JavaScript, праўда? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Так. 287 00:13:29,770 --> 00:13:31,180 >> АЎДЫТОРЫЯ: о, калі б памылка яшчэ прыдумаць? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Такім чынам, вы б не атрымалі гэтая памылка, таму што ўсе 289 00:13:34,290 --> 00:13:36,930 з пункту гледжання вэб-сервера было абсалютна выдатна. 290 00:13:36,930 --> 00:13:39,090 Але вы прасілі index.html. 291 00:13:39,090 --> 00:13:42,000 Вы прасілі shuttle.js і service.js. 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 І толькі калі ваш браўзэр спрабаваў інтэрпрэтаваць код JavaScript, што 296 00:13:49,330 --> 00:13:51,370 Гэта як, пачакайце, гэта не дзейнічае памылка JavaScript. 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 Калі спіс не роўна NULL, але гэта роўная нуль, таму мы прапускаем, што 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 Я толькі што malloced. 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 Так што я проста malloced маю запіску, праверыў для нуль, прызначаны 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 А потым я правяраю, калі спіс ня роўны NULL. 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 >> Так спісу папярэдні атрымлівае PTR. 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 Гэта можа быць 1000 крокаў. 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 >> У той час як паказальнік, мая часовая пераменная, ня роўнае NULL, давайце 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 Так што гэта PTR. 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 >> ROB BOWDEN: ОК. 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 Вы паспрабуйце звязацца facebook.com. 611 00:29:02,440 --> 00:29:07,930 Так што я буду проста казаць праз працэс выкарыстоўваючы ўсе гэтыя тэрміны. 612 00:29:07,930 --> 00:29:11,290 Так у нашым браўзэры, мы набіраем facebook.com і націсніце Увод. 613 00:29:11,290 --> 00:29:17,280 Такім чынам, наш браўзэр збіраецца пабудаваць HTTP прасіць, каб ён збіраецца адправіць 614 00:29:17,280 --> 00:29:22,220 праз некаторы працэсу ў Facebook для Facebook, каб адказаць на нас з 615 00:29:22,220 --> 00:29:24,450 HTML яго старонцы. 616 00:29:24,450 --> 00:29:28,800 >> Так што гэта працэс, пры які запыт HTTP 617 00:29:28,800 --> 00:29:30,730 на самай справе трапляе ў Facebook? 618 00:29:30,730 --> 00:29:32,790 Такім чынам, спачатку мы павінны перавесці Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Так што проста дадзена імя Facebook.com, дзе на самай справе прасіць HTTP 620 00:29:38,780 --> 00:29:39,940 трэба ісці? 621 00:29:39,940 --> 00:29:44,120 Так што мы павінны перавесці Facebook.com да IP адрасе, які адназначна 622 00:29:44,120 --> 00:29:47,620 ідэнтыфікуе, што машына ў нас на самай справе хочаце адправіць запыт на. 623 00:29:47,620 --> 00:29:49,310 Ваш ноўтбук мае IP-адрас. 624 00:29:49,310 --> 00:29:52,240 Усё, што падлучаныя да Інтэрнэту мае IP-адрас. 625 00:29:52,240 --> 00:29:59,030 >> Так DNS, Domain Name System, гэта значыць што адбываецца ў звароце пераклад 626 00:29:59,030 --> 00:30:03,750 ад facebook.com да IP-адрасы, вы на самой справе хочаце звязацца. 627 00:30:03,750 --> 00:30:08,075 Такім чынам, мы звязацца з DNS-сервераў і скажам, што facebook.com? 628 00:30:08,075 --> 00:30:16,560 Гэта кажа, о, гэта IP-адрас 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 >> Тады вы, адпраўце запыт HTTP да гэтай машыне. 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 Так што я магу быць запушчаны, скажам, Skype. 641 00:30:53,730 --> 00:30:55,670 Я, магчыма, вэб-браўзэр з адкрытым. 642 00:30:55,670 --> 00:30:59,010 Я мог бы мець тое, што torrenting файлы. 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 torrenting прыкладанне ў адрозненне ў вэб-браўзэры? 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 І ваша праграма torrenting кажа, Я на порце 3000. 653 00:31:32,240 --> 00:31:34,770 І Skype кажа, я выкарыстоўваю порт 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 Таму, калі я звязацца Facebook.com, я зносін з некаторай машыны. 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 А потым у вэб-браўзэры, я мог ўручную ўвесці Facebook.com: 7000 у 665 00:32:19,090 --> 00:32:24,600 адправіць запыт на порт 7000 вэб-сервер Facebook. 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 >> ROB BOWDEN: Так HTTPS, так як гэта слухаць спецыяльна для 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 >> ROB BOWDEN: я нават не ведаю, што большасць з - Усё ніжнія маюць тэндэнцыю быць 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 >> ROB BOWDEN: Таму што ў IP-адрас, ёсць чатыры групоўкі лічбаў. 682 00:33:18,820 --> 00:33:21,090 І яны ад 0 да 255. 683 00:33:21,090 --> 00:33:28,060 Так 192.168.2.1 з'яўляецца агульным Лакальны IP-адрас сеткі. 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 >> Дэвід Дж. Малан: Але гэта глупства кліп ад - гэта было CSI, дзе яны павінны былі 688 00:33:38,170 --> 00:33:39,970 лік, якое было занадта вялікім для IP-адрасы. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Усе пытанні па гэтай нагоды? 691 00:33:46,110 --> 00:33:51,710 Наступны, так поўнае змяненне тэма, але ў нас ёсць гэта PHP масіў для 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 Так што мы павінны выйсці з рэжыму PHP для таго, каб зрабіць гэта. 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 пятля з $ I = 0 0 і выкарыстоўваючы разлічвае на высветліць даўжыню прамяня. 712 00:35:07,340 --> 00:35:09,240 Цалкам таксама добра, толькі трохі wordier. 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 >> ROB BOWDEN: што-небудзь яшчэ? 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 спытаў, праверка карыстальнікі ' уваход з боку кліента, так як з JavaScript, 728 00:35:44,830 --> 00:35:47,280 замест боку сервера, а з PHP. 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 рабіць праверку на боку сервера з'яўляецца тое, што Найбольш нехта выходзіць з CS50 ведае 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 Telnet і фактычна робячы выгляд, быць браўзэру, адправіўшы GET 748 00:36:47,790 --> 00:36:49,240 запыты да сервера. 749 00:36:49,240 --> 00:36:51,030 І гэта, вядома, не з дапамогай любога JavaScript. 750 00:36:51,030 --> 00:36:53,290 Вось толькі мне ўводу каманд на клавіятуры. 751 00:36:53,290 --> 00:36:57,410 Так на самай справе, любы праграміст ў досыць камфорт з вэб-і HTTP- 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 Хоць існуюць розныя бібліятэкі, JavaScript бібліятэкі для 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 >> ROB BOWDEN: Гэта было б былі прынятыя. 770 00:37:44,480 --> 00:37:44,810 >> Дэвід Дж. Малан: Што? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: Я стварыў гэтую праблему. 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 >> ROB BOWDEN: Але мы не прымалі для першага - 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 >> ROB BOWDEN: Так. 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 Выкарыстанне PHP замест C напісаць Праграма каманднага радка. 823 00:39:36,100 --> 00:39:41,890 Дык вось, гэта часта хутчэй выкарыстоўваць мова, як PHP або Ruby, або Python. 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 PHP мае ракавіну функцый, тады як у C, вы 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 >> Так што патэнцыял росту PHP або сапраўды любы інтэрпрэтаваць мова з'яўляецца шпаркасць 832 00:40:00,950 --> 00:40:02,920 з дапамогай якога можна пісаць код. 833 00:40:02,920 --> 00:40:06,660 Але недахоп, мы бачылі гэта, калі я хутка на хуткую руку misspeller 834 00:40:06,660 --> 00:40:11,780 рэалізацыя ў лекцыі з выкарыстаннем PHP, з'яўляецца што выкарыстанне інтэрпрэтаванага мовы 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 Выкарыстанне базы дадзеных SQL замест файл у фармаце CSV для захоўвання дадзеных. 844 00:40:38,450 --> 00:40:40,230 Так SQL база дадзеных выкарыстоўваецца для pset7. 845 00:40:40,230 --> 00:40:42,060 CSV файлаў, якія вы не выкарыстоўвалі шмат. 846 00:40:42,060 --> 00:40:45,960 Але вы выкарыстоўвалі яго ўскосна ў pset7 як добра, пагаварыўшы з Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Але CSV гэтак жа, як файл Excel, але супер проста, дзе слупкі 848 00:40:49,330 --> 00:40:54,010 проста дэмаркіраваную коскамі ўнутры у адваротным выпадку з тэкставага файла. 849 00:40:54,010 --> 00:40:56,740 І з выкарыстаннем базы дадзеных SQL з'яўляецца трохі больш пераканаўчым. 850 00:40:56,740 --> 00:41:00,060 Гэта станоўчая бок, таму што вы атрымліваеце тое, як абраць і ўстаўляць і выдаляць. 851 00:41:00,060 --> 00:41:03,790 І вы атрымаеце, як мяркуецца, індэксы, MySQL і іншых баз дадзеных, як 852 00:41:03,790 --> 00:41:07,510 Oracle, пабудаваць для вас у памяці, што азначае, што ваш выбар, верагодна, не 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 У той час як файл CSV, вы можаце стварыць яго з Gedit. 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 слоўнік слоў, якія нагадваюць з pset5. 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 літары ў словы, як і вы можа мець для pset5. 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 >> ROB BOWDEN: Дык што для версе, мы зрабілі ня прымае самастойна "хутчэй". Вы 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 >> ROB BOWDEN: у мяне не было на самай справе не ведаю,. 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 >> ROB BOWDEN: Я раблю гэта. 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 Так што з HTML вузла, у нас ёсць два дзеці, галава і цела. 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 дэталі ў часу мы праводзім на JavaScript, што парадак робіць, у 934 00:45:01,040 --> 00:45:02,290 Справа ў тым, незалежна ад таго, у тэхнічным плане. 935 00:45:02,290 --> 00:45:06,330 Так што, калі кіраўнік ідзе перад органам у HTML, то ён павінен з'явіцца ў 936 00:45:06,330 --> 00:45:08,860 злева ад цела ў фактычным DOM. 937 00:45:08,860 --> 00:45:12,265 Што яго, увогуле, проста FYI, тое, што называецца парадак дакумент, дзе 938 00:45:12,265 --> 00:45:13,260 гэта мае значэнне. 939 00:45:13,260 --> 00:45:17,470 І калі вы былі рэалізацыі парсер, праграма, якая чытае HTML у будынку 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 >> ROB BOWDEN: Пытанні з гэтай нагоды? 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 >> ROB BOWDEN: ОК. 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 Так argv1, першы каманднага радка аргумент гэтай праграмы, якія могуць быць 951 00:45:51,860 --> 00:45:53,920 адвольнай даўжыні. 952 00:45:53,920 --> 00:45:59,160 Але тут мы выкарыстоўваем тетсру скапіяваць argv1, якія тут знаходзіцца бар. 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 >> Такім чынам, мы memcpying бар у гэтай буфернай ст. 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 >> Таму памятайце, што тут Асноўны кліча Foo. 963 00:46:34,910 --> 00:46:37,340 І так, то асноўныя выклікі Foo. 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 У нейкі момант, асноўныя выклікі Foo. 970 00:46:53,250 --> 00:46:55,390 Ну, адразу, асноўныя выклікі Foo. 971 00:46:55,390 --> 00:46:57,130 І так Foo атрымлівае уласны фрэйм ​​стэка. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Зараз, у нейкі момант, Foo збіраецца вярнуцца. 974 00:47:02,220 --> 00:47:06,810 І пайшоў Foo вяртання, мы павінны ведаць, у што радок кода ўнутры галоўнага мы 975 00:47:06,810 --> 00:47:10,610 былі для таго, каб ведаць, дзе мы павінны аднавіць у асноўны. 976 00:47:10,610 --> 00:47:13,100 Мы можам назваць Foo ад ў цэлым куча розных месцах. 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 Foo вяртаецца. 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 І гэта стэк кольца Foo ст. 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 Таму, як толькі мы перазапісаць адрас вяртання, Гэта азначае, што калі Foo 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 вярнуцца да дзесьці ў PRINTDEF функцыя ці недзе ў Таноса 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 Так што ў наступны пытанне завяршэння перапісанай Foo такім чынам 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 быць даўжыні STRLEN (бар). 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 >> ROB BOWDEN: Пытанні па любой з гэтага? 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 >> ROB BOWDEN: Не. 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 І гэта амаль тое ж самае Праблема, як pset1. 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 вы крыху знаёмыя з Паняцце, што PHP не толькі пра тое, што 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 Гэта праграма PHP каманднага радка. 1050 00:51:12,060 --> 00:51:16,690 Так C код тут, у той час як правільнае у З, ня выправіць для PHP. 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 Мы J ініцыялізацыі да 1 а затым разлічвае на да I. 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 Мы даем вам гэтыя два радкі, гэта першае адзін, goofily названы як прытон 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 >> І тое лінія пасля гэтага, з Вядома, азначае увайсці ў рэжым PHP. 1070 00:52:04,710 --> 00:52:07,740 А лінія ў самым нізе азначае выхаду з рэжыму PHP. 1071 00:52:07,740 --> 00:52:09,740 І гэта працуе, увогуле, з інтэрпрэтаваная мова. 1072 00:52:09,740 --> 00:52:14,370 Гэта свайго роду раздражняе, калі вы пішаце Праграма ў файле пад назвай foo.php. 1073 00:52:14,370 --> 00:52:17,320 І тады вашыя карыстальнікі павінны проста памятаеце, ОК, каб запусціць гэтую праграму, я 1074 00:52:17,320 --> 00:52:22,320 павінны ўвесці "PHP прастору foo.php." Выгляд раздражняе, калі нічога іншага. 1075 00:52:22,320 --> 00:52:25,270 І гэта таксама паказвае, што ваша праграма напісана ў PHP, які не ўсе 1076 00:52:25,270 --> 00:52:27,060 што асвятлення для карыстальніка. 1077 00:52:27,060 --> 00:52:30,100 >> Такім чынам, вы можаце выдаліць. PHP наогул Нагадаем, ад лекцыі. 1078 00:52:30,100 --> 00:52:35,690 І вы рэальна можаце зрабіць. / Foo калі Вы chmodded яго, зрабіўшы яго 1079 00:52:35,690 --> 00:52:36,500 выкананы. 1080 00:52:36,500 --> 00:52:39,630 Так CHMOD + х Foo зрабіў бы гэта. 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 Няма HTML, няма C-код, вядома, толькі некаторыя PHP. 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 І сакавітая частка HTML-мудры знізіўся тут, дзе мы маем ўнутры цела 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 >> Так адзін з спосабаў зрабіць гэта з JQuery, які выглядае крыху 1105 00:53:53,460 --> 00:53:56,880 сінтаксічна здзіўленне ў першую чаргу. 1106 00:53:56,880 --> 00:54:00,760 Вы можаце зрабіць гэта з чыстай кода DOM - document.getelement па ID. 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 у, я лічу, form2.html ад класа ў тыдзень 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 Паколькі гэта важна толькі таму, што HTML старонкі чытаюцца зверху 1114 00:54:21,770 --> 00:54:23,280 знізу, злева направа. 1115 00:54:23,280 --> 00:54:27,910 >> І таму, калі вы паспрабуеце зрабіць нешта ў кодзе тут у нейкі DOM 1116 00:54:27,910 --> 00:54:31,560 элемент, некаторыя HTML тэгі, гэта ўніз тут, вы робіце гэта занадта рана, 1117 00:54:31,560 --> 00:54:34,220 таму што гэта не мае нават быў прачытаны ў памяць. 1118 00:54:34,220 --> 00:54:37,740 Так, кажучы гэтую document.ready лінія, мы гаворым, 1119 00:54:37,740 --> 00:54:39,040 Вось код, браўзэр. 1120 00:54:39,040 --> 00:54:42,440 Але не ня выконваць гэта, пакуль у цэлым Дакумент гатовы, то ёсць DOM 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 трохі адрозніваецца, дзе я кажу, захоп элемент HTML чые унікальныя 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 >> АЎДЫТОРЫЯ: Ён атрымлівае значэнне, карыстальнік не ніжэй у HTML. 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 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 І менавіта таму гэта крыху стомна, каб не выкарыстоўваць JQuery. 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 Розныя спосабы зрабіць гэта. JQuery проста мае тэндэнцыю быць трохі больш кароткім і 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 чым займаецца ў JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Аб'яднанне. 1168 00:56:48,740 --> 00:56:50,690 Так што гэта, як PHPs аператара кропкі. 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 Але, як вы кажаце, на самай справе гэта не быў прадстаўлены ў праўдзівай HTTP чынам. 1199 00:58:02,240 --> 00:58:06,870 Пры націску кнопкі Адправіць, з-за нашага OnSubmit апрацоўшчык, мы перахопу 1200 00:58:06,870 --> 00:58:09,040 што форма прадстаўлення, так бы мовіць. 1201 00:58:09,040 --> 00:58:11,290 Мы тады рабіць сваю справу з кодам JavaScript. 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 сервер з пар ключ-значэнне, змяніўшы URL, каб быць нешта накшталт 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 Гэта чыста зроблена ў кодзе JavaScript. 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 Затым быў мой, аб MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB BOWDEN: ОК. 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 Так дзейнічае выбар быў бы вялікі Int, калі вы не ведаеце, што. 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 Int не будзе. 1233 00:59:46,100 --> 00:59:50,170 >> Цяпер, баланс, ўспомніце pset7. 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 >> ROB BOWDEN: Наяўнымі. 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 Але нагадаем, што унутр у MySQL, як у С, па меншай меры 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 Так што калі вы проста запішыце 4000000000, вы ўбачыце, што гэта менш лічбаў, чым 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 >> ROB BOWDEN: ОК. 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 З чым SQL запытаў маглі банк адняць $ 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 быў на самай справе ёсць PHP код тут выкліку функцыі запыту або пакласці 1291 01:02:32,990 --> 01:02:35,460 Двукоссі вакол усяго, што не павінны быць там. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Памятаеце, што MySQL з'яўляецца асобны мову з PHP. 1293 01:02:39,780 --> 01:02:42,410 Мы, аказваецца, пісаць MySQL ў PHP. 1294 01:02:42,410 --> 01:02:46,180 І PHP затым адправіць яго да сервера MySQL. 1295 01:02:46,180 --> 01:02:51,120 Але вам не трэба PHP для таго, каб сувязь з сэрвэрам MySQL. 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 >> ROB BOWDEN: ОК. 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 Так з тым, што SQL-запыт можа банк здабывання з памяці нумароў з-за яго 1304 01:03:06,570 --> 01:03:09,300 багатыя кліенты, тыя, з Рэшткі больш, чым 1000? 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 Дзе баланс перавышае 1000. 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 З чым SQL запытаў маглі банк блізка, гэта значыць выдаліць усе рахункі, якія 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 І мы просім вас запоўніць рэалізацыя Enqueue ніжэй у 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 Але яны на самай справе не функцыянальна стаўленне, проста BOOL існуе, 1371 01:06:04,320 --> 01:06:06,690 таму што, тэхнічна, лагічны ня існуюць у C, калі вы не ўключаюць 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 Мы павінны памятаць, што мы проста дадаў Int ў чаргу. 1402 01:07:32,180 --> 01:07:35,850 А потым мы проста вяртаем праўда. 1403 01:07:35,850 --> 01:07:38,560 Між тым, у Dequeue, мы папрасілі вам рабіць наступнае. 1404 01:07:38,560 --> 01:07:42,260 Рэалізаваць гэта такім чынам, што яна dequeues, гэта значыць выдаляе і вяртае, 1405 01:07:42,260 --> 01:07:44,190 Int ў пярэдняй частцы чарзе. 1406 01:07:44,190 --> 01:07:46,410 Каб зняць Int, досыць забыць яго. 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 Калі вы кажаце, што вы збіраецеся вярнуць Int, у вас ёсць 1429 01:08:40,590 --> 01:08:41,279 вярнуць Int. 1430 01:08:41,279 --> 01:08:43,689 Вы не можаце атрымаць фантазіі і пачаць вяртанне BOOL або паплавок або 1431 01:08:43,689 --> 01:08:45,040 радок ці нешта ў гэтым родзе. 1432 01:08:45,040 --> 01:08:49,370 Цяпер, тым часам, JavaScript і PHP і некаторыя іншыя мовы можа, на самай справе, 1433 01:08:49,370 --> 01:08:51,310 Вы вяртанні адрозніваецца тыпы значэнняў. 1434 01:08:51,310 --> 01:08:54,819 І гэта сапраўды можа быць карысна, калі вы маглі б вярнуцца станоўчыя INTS, нулі, 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 >> Так што з Dequeue, што мы прапаную зрабіць гэта - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Вы можаце вярнуцца ілжывым. 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 >> ROB BOWDEN: Але гэта не так што вы не можаце вярнуцца ілжывым. 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 >> А цяпер, я хачу, каб абнавіць q.front быць q.front 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 Але я проста адчуваў, што гэта было больш ясна, на самай справе захапіць Int, паклаў яго 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 Psst. 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 >> ROB BOWDEN: Так першае пытанне гэта праблема бінарнае дрэва. 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 Таму мне трэба reshift што мой маршрут заўвага будзе. 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 Int N. 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 >> ROB BOWDEN: Так адзін з спосабаў набліжаецца любая рэкурсіўная праблема ў тым, каб проста думаць 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 Надрукаваць OURSELF, таму бягучы вузел друку 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 >> ROB BOWDEN: Па пытаннях? 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 >> ROB BOWDEN: У мяне літаральна ні найменшага падання. 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 heads@CS50.net якое значэнне гэтых паўтаральных шэсць лічбы 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 >> ROB Боуден: Любы апошнія пытанні ні пра што на віктарыне? 1603 01:17:29,570 --> 01:17:32,608