1 00:00:00,000 --> 00:00:12,040 >> [Мусиц плаиинг] 2 00:00:12,040 --> 00:00:16,460 >> ПРЕДСЕДНИК 1: У реду, ово је ЦС50, и ово је почетак седмице четири, 3 00:00:16,460 --> 00:00:20,420 а као што сте можда чули или прочитајте, свет је крај. 4 00:00:20,420 --> 00:00:23,520 Иде широм интернета има било знање и свест 5 00:00:23,520 --> 00:00:27,100 од буба у програму, програмски језик се зове Басх. 6 00:00:27,100 --> 00:00:32,729 Ово је дивно брендиране као Схеллсхоцк, или Басх врата, 7 00:00:32,729 --> 00:00:35,485 али овакви чланци нису реткост. 8 00:00:35,485 --> 00:00:38,807 А у ствари, многи од њих донесе успомене на Хеартблеед, 9 00:00:38,807 --> 00:00:41,640 које сте можда приметили у Притисните БАЦК прошлог пролећа, што 10 00:00:41,640 --> 00:00:43,980 Слично је било прилично драматична. 11 00:00:43,980 --> 00:00:47,110 Сад од оне од вас овде Данас, колико вас има, 12 00:00:47,110 --> 00:00:50,330 чак и ако не разумете шта то је све о, чули Схеллсхоцк? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 У реду, и колико вас имају компјутере које су рањиве? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 У реду, требало би да постоји много, много више руке до сада, због видећемо. 17 00:01:00,250 --> 00:01:02,580 >> Хајде да погледамо шта је се дешава у медијима 18 00:01:02,580 --> 00:01:05,304 а онда је објаснити мало за нас технички. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> Звучник 2: Безбедносни стручњаци имају упозорио да озбиљан пропуст може 21 00:01:11,250 --> 00:01:15,650 се о томе да утиче на стотине милиони светских веб корисницима. 22 00:01:15,650 --> 00:01:20,600 Дакле, шта је тачно грешка која је била под називом Схеллсхоцк, и шта она ради? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Па, Схеллсхоцк је такође познат као Басх Буг, софтвер је експлоатише. 25 00:01:28,910 --> 00:01:33,230 Хакери користе вирус скенирање рањива системи раде Линук и Уник 26 00:01:33,230 --> 00:01:36,300 оперативне системе и онда их зарази. 27 00:01:36,300 --> 00:01:38,730 Басх је командна линија граната. 28 00:01:38,730 --> 00:01:43,460 Ово омогућава корисницима да покрену питање команде Програми и функције у оквиру софтвера 29 00:01:43,460 --> 00:01:45,250 тако што ћете унети у тексту. 30 00:01:45,250 --> 00:01:49,980 То је обично користи од стране програмера, и не би требало да буду отворени за широм света, 31 00:01:49,980 --> 00:01:51,590 мада Схеллсхоцк мења то. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Па, воррингли, неки аналитичари упозоравају да би могао да буде већа претња, 34 00:01:57,910 --> 00:02:01,580 јер Схеллсхоцк омогућава потпуна контрола зараженог машине, 35 00:02:01,580 --> 00:02:06,030 док Хеартблеед дозвољено хакери да шпијунира рачунарима. 36 00:02:06,030 --> 00:02:09,130 То је тако озбиљно, то је оцијењено је 10 од укупно 10 37 00:02:09,130 --> 00:02:11,900 за озбиљност од стране националних Рањивост база података. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 свих веб сервера су на ризик, укључујући и неке Мац рачунарима. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Па, проверите да ли сте патцх своје системе сада. 42 00:02:25,600 --> 00:02:29,330 Свако хостинг веб сајта приказују погођеним оперативни системи 43 00:02:29,330 --> 00:02:31,800 треба да предузме акцију што је пре могуће. 44 00:02:31,800 --> 00:02:35,390 Свако ко може да приушти треба да изгледа на њихово праћење и веб апликације 45 00:02:35,390 --> 00:02:37,355 фиревалл да пази за било напада. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 ПРЕДСЕДНИК 3: Најгора ствар да је могло да се деси јесте 48 00:02:41,770 --> 00:02:45,080 да би неко напише код који би аутоматски отићи и скенира 49 00:02:45,080 --> 00:02:48,280 Интернет и да ће утицати на свих ових рачунара. 50 00:02:48,280 --> 00:02:50,710 А кад то ураде, добро, најгора ствар коју може да уради 51 00:02:50,710 --> 00:02:53,300 је само избришите све, или затворена сајтове доле. 52 00:02:53,300 --> 00:02:55,360 Тако да смо могли да видимо штету са те тачке гледишта, 53 00:02:55,360 --> 00:02:58,300 где би имали злонамерне људе који само да одлучи да изазову хаос 54 00:02:58,300 --> 00:03:02,534 довођењем система доле или брисање фајлове, и сличне ствари. 55 00:03:02,534 --> 00:03:05,200 Звучник 2: Неки кажу да је ово један од најтеже мерити 56 00:03:05,200 --> 00:03:08,080 бубе у годинама, и то може потрајати неколико недеља или чак 57 00:03:08,080 --> 00:03:10,820 месеци да се утврди њен крајњи ефекат. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> ПРЕДСЕДНИК 1: Дакле, све што је истина, али смешно је, скоро сви 60 00:03:15,560 --> 00:03:18,330 од слика које сте управо видели, осим можда тастатуру, 61 00:03:18,330 --> 00:03:20,930 нема никакве везе са Буг уопште. 62 00:03:20,930 --> 00:03:23,960 Сервери и жице и тако даље, То је нека врста површно у вези, 63 00:03:23,960 --> 00:03:27,410 али у срцу је заправо прилично познато шта се овде дешава. 64 00:03:27,410 --> 00:03:30,050 У ствари, пусти ме у наш ЦС50 апарата. 65 00:03:30,050 --> 00:03:32,910 Пусти ме само напред и максимално прозор терминала овде. 66 00:03:32,910 --> 00:03:36,020 А ви момци су користили ово, или уграђени верзију истог, 67 00:03:36,020 --> 00:03:39,460 у гедит како да пишу програме, типа команде, и тако даље, 68 00:03:39,460 --> 00:03:43,690 и то је заправо, и има био недељама, басх, Б-А-С-Х. 69 00:03:43,690 --> 00:03:46,890 То је Боурне-Агаин Схелл, што је само фенси начин да се каже, 70 00:03:46,890 --> 00:03:50,220 То је програм који има трепери брз, ефикасно, 71 00:03:50,220 --> 00:03:51,970 да седи тамо чека за унос за вас. 72 00:03:51,970 --> 00:03:53,920 И то је команда линија интерфејс преко кога 73 00:03:53,920 --> 00:03:57,650 ви се приказују команде и на крају састављање и онда ради 74 00:03:57,650 --> 00:03:58,400 програми. 75 00:03:58,400 --> 00:04:01,320 >> Али басх је програмирање Језик у следећем смислу. 76 00:04:01,320 --> 00:04:05,460 Ви знате да постоје команде попут ЦД и ЛС и цланг и други, 77 00:04:05,460 --> 00:04:09,580 али можете дефинисати своје команде их спроведе у Басх. 78 00:04:09,580 --> 00:04:11,420 Сада нећемо да ићи у детаље 79 00:04:11,420 --> 00:04:16,089 као да басх програмском језику, али је Знам, на пример, да у овом тренутку, 80 00:04:16,089 --> 00:04:17,607 нема команда зове "здраво". 81 00:04:17,607 --> 00:04:19,440 Тако да се може наћи у једна од ових пакета. 82 00:04:19,440 --> 00:04:20,856 То није инсталиран на мом компјутеру. 83 00:04:20,856 --> 00:04:21,870 Питајте администратора. 84 00:04:21,870 --> 00:04:26,030 Али ако сам тамо желим да будем програма под називом "здраво" у Басх, или у мојој линији 85 00:04:26,030 --> 00:04:30,810 Ја стварно могу да користе синтаксу то је баш као и Ц. То није баш исто, 86 00:04:30,810 --> 00:04:35,020 али изгледа прилично слично функција, иако недостају неке детаље. 87 00:04:35,020 --> 00:04:38,090 Ништа се не чини да се деси, али сада ако сам типа "Здраво", 88 00:04:38,090 --> 00:04:40,960 ви у ствари да напишете Програм, не у Ц, не у Јави, 89 00:04:40,960 --> 00:04:44,280 не у другом програмирање језика, али у самом Басх. 90 00:04:44,280 --> 00:04:47,630 >> Сада кључ овде је да сам написао име сам хтео да дам ову нову команду, 91 00:04:47,630 --> 00:04:50,820 а заграде су симбол Ова је функција. 92 00:04:50,820 --> 00:04:54,010 Као страну, можете да урадите забаве ствари, а у ствари, чак и на Мац ОС, 93 00:04:54,010 --> 00:04:55,620 То је програм под називом Терминал. 94 00:04:55,620 --> 00:04:58,800 То долази уграђени у свако је рачунар који има Мац у овој просторији, 95 00:04:58,800 --> 00:05:03,640 а можете да урадите сличне ствари у Мац ОС, али можете ићи још даље од тога. 96 00:05:03,640 --> 00:05:07,110 И ово је мало тангенцијални, али је некако забавно. 97 00:05:07,110 --> 00:05:09,715 Ја сам подсетио јутрос, када се мисли о овоме, 98 00:05:09,715 --> 00:05:13,279 на малу игру сам да играју са једним од бивших ЦС50 Поздрав 99 00:05:13,279 --> 00:05:16,570 чиме сваки пут он би хода од његова тастатура са својим екраном откључана, 100 00:05:16,570 --> 00:05:23,611 Ја бих изврши команду овако-- "поздрави". 101 00:05:23,611 --> 00:05:26,610 А сада сваки пут се вратио у његову тастатура након што сам очистили екран 102 00:05:26,610 --> 00:05:27,985 и он би сео, покушајте да урадите неки посао, 103 00:05:27,985 --> 00:05:29,250 наведе садржај свог дирецтори-- 104 00:05:29,250 --> 00:05:29,510 >> [Аудио плаибацк] 105 00:05:29,510 --> 00:05:30,010 >> Здраво. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Здраво. 108 00:05:32,120 --> 00:05:35,030 >> ПРЕДСЕДНИК 1: Дакле, у правичност, то није било у ствари "здраво". 109 00:05:35,030 --> 00:05:36,894 Је обично било нешто више личи на то-- 110 00:05:36,894 --> 00:05:37,560 [Аудио плаибацк] 111 00:05:37,560 --> 00:05:37,750 -Бееп. 112 00:05:37,750 --> 00:05:39,320 ПРЕДСЕДНИК 1: --тхат И би-- тако да је његова рачунар ће 113 00:05:39,320 --> 00:05:42,170 Кунем се на њега у било које време он заправо сјео на његов тастатури. 114 00:05:42,170 --> 00:05:46,265 И веома брзо је схватио да не напусти своју екрана откључана. 115 00:05:46,265 --> 00:05:48,730 Али ово указује на врсту глупо забаве која вас 116 00:05:48,730 --> 00:05:50,210 могу имати са нечим као Басх. 117 00:05:50,210 --> 00:05:52,770 Али, то је мало више озбиљно, да будемо сигурни, од тога. 118 00:05:52,770 --> 00:05:57,235 А у ствари, ово је један од најопаснија и дуготрајан Бугс 119 00:05:57,235 --> 00:05:58,860 који је заиста погодила свет глобално. 120 00:05:58,860 --> 00:06:02,060 Ова грешка је била око неких 20 година, 121 00:06:02,060 --> 00:06:05,780 а ви ћете бити ударио у само тренутак по релативној једноставности. 122 00:06:05,780 --> 00:06:07,990 >> Тако да је ово представник заповеди да ако 123 00:06:07,990 --> 00:06:10,448 поседује Мац, буквално одмах Када имате поклопац отворен, 124 00:06:10,448 --> 00:06:12,940 можете пробати куцате у то Програм се зове Терминал. 125 00:06:12,940 --> 00:06:15,410 Терминал је под Апликације Утилитиес-- 126 00:06:15,410 --> 00:06:18,790 једном, корисници Виндовс не морају да бринете о овом конкретном тхреат-- 127 00:06:18,790 --> 00:06:22,310 али они од вас са Мац да куцате ово у прозору као да ћу овдје, 128 00:06:22,310 --> 00:06:24,210 и ако не упишете да је у овај програм 129 00:06:24,210 --> 00:06:28,830 зове Терминал, као што ћу учинити сада, ако видите реч "рањива", 130 00:06:28,830 --> 00:06:32,200 Ваш рачунар рањива на експлоатацију. 131 00:06:32,200 --> 00:06:33,850 >> Дакле, шта то заправо значи? 132 00:06:33,850 --> 00:06:35,870 И ово је додуше неке прилично Црази синтакса, 133 00:06:35,870 --> 00:06:39,050 али хајде да барем извући неке од занимљивих аспеката. 134 00:06:39,050 --> 00:06:42,567 Тако да неки синтаксе која изгледа мало познато, бар из Ц 135 00:06:42,567 --> 00:06:43,950 и програмирање уопште. 136 00:06:43,950 --> 00:06:47,550 Видим неке заграде, тачка-зарез, коврџава заграда, а што је, 137 00:06:47,550 --> 00:06:50,820 али се испоставља да је ово глупо ствар овде у жутом 138 00:06:50,820 --> 00:06:53,580 је у суштини функција то не ради ништа. 139 00:06:53,580 --> 00:06:57,840 Дебело црево значи ништа, а зарез значи стоп радећи ништа. 140 00:06:57,840 --> 00:07:00,250 Тако да унутар њих цурли протеза, чињеница 141 00:07:00,250 --> 00:07:02,440 да ја имам исти потпише лево, ово 142 00:07:02,440 --> 00:07:05,500 је у суштини стварање команда или променљива, 143 00:07:05,500 --> 00:07:09,520 звао к, и да га додељивање да жута мало кода тамо. 144 00:07:09,520 --> 00:07:14,040 То би могло да буде нешто попут "Ецхо здраво "или" кажу бип "или нешто 145 00:07:14,040 --> 00:07:15,120 слично томе. 146 00:07:15,120 --> 00:07:17,780 Али приметити ако су вам очи лутају даље на десно, 147 00:07:17,780 --> 00:07:22,150 има више овој линији од само крај тог зарезом. 148 00:07:22,150 --> 00:07:25,160 "Ецхо рањива", а затим осим тога има још. 149 00:07:25,160 --> 00:07:26,530 Још један зарез, басх -Ц :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Па скратим причу, Ова линија кода је 152 00:07:34,050 --> 00:07:36,660 довољна за убедљив рачунар који је 153 00:07:36,660 --> 00:07:39,830 рањива да ради нешто да желите да урадите, 154 00:07:39,830 --> 00:07:44,290 јер има буг у којој Басх иако Басх је требало да се заустави 155 00:07:44,290 --> 00:07:48,980 линија читања командној права тамо након жуте текста, 156 00:07:48,980 --> 00:07:52,520 за 20-плус година старог буг, Басх је заправо чита 157 00:07:52,520 --> 00:07:56,780 иза тог зарез и прилично колико радиш оно што је речено. 158 00:07:56,780 --> 00:07:59,070 >> Па шта је импликација то на крају? 159 00:07:59,070 --> 00:08:01,340 Само сам рекао "ецхо Хелло" или "ецхо рањива," 160 00:08:01,340 --> 00:08:05,449 али шта ако си урадио нешто заправо злонамерни, као рм -рф *, 161 00:08:05,449 --> 00:08:07,240 што можда и не икада раније откуцан, 162 00:08:07,240 --> 00:08:08,920 и искрено вероватно не треба прерано, 163 00:08:08,920 --> 00:08:10,700 зато што можете да урадите много штете са њим. 164 00:08:10,700 --> 00:08:11,210 Зашто? 165 00:08:11,210 --> 00:08:12,990 РМ шта ради, наравно? 166 00:08:12,990 --> 00:08:14,270 Уклања. 167 00:08:14,270 --> 00:08:15,930 * Значи шта? 168 00:08:15,930 --> 00:08:16,430 Све. 169 00:08:16,430 --> 00:08:18,180 Тако да је такозвани вилд картицу, тако то значи 170 00:08:18,180 --> 00:08:20,410 делете све у тренутни директоријум. 171 00:08:20,410 --> 00:08:23,379 -р дешава да значи рекурзивно, што значи да ако је оно што сте брисању 172 00:08:23,379 --> 00:08:26,420 је директоријум, а унутар тамо је друге датотеке и друге директоријуме, 173 00:08:26,420 --> 00:08:28,950 рекурзивно зароните у ту и избрисати све то. 174 00:08:28,950 --> 00:08:31,040 А -ф је најгори од свих њих. 175 00:08:31,040 --> 00:08:32,580 Ико зна шта -ф овде значи? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Сила. 178 00:08:34,360 --> 00:08:37,830 Дакле натерати средства, чак и ако је ово лоша идеја, 179 00:08:37,830 --> 00:08:40,939 урадите то без мене навело за даљу потврду. 180 00:08:40,939 --> 00:08:43,230 Дакле, ви знате, ми смејали , али искрено, вероватно 181 00:08:43,230 --> 00:08:44,972 откуцате ову више пута дан, јер је реалност 182 00:08:44,972 --> 00:08:47,210 је да је најбржи начин да делете гомилу ствари. 183 00:08:47,210 --> 00:08:48,590 Али чак сам урадио неку штету. 184 00:08:48,590 --> 00:08:53,100 >> Али, ако сте били да преварите рачунар у дефинисање неки глупи променљиву 185 00:08:53,100 --> 00:08:56,810 или функција се зове к, али онда преваре рачунар у извршавању 186 00:08:56,810 --> 00:09:00,030 изван граница које функција, изван тог зарез, 187 00:09:00,030 --> 00:09:04,430 можете заиста могли да преварите рачунар у извршавању нешто слично рм -рф 188 00:09:04,430 --> 00:09:07,810 или команда-маил или команду Цопи. 189 00:09:07,810 --> 00:09:11,400 Нешто буквално можете да урадите са компјутер, без обзира да ли је то брисање датотека, 190 00:09:11,400 --> 00:09:15,350 креирање фајлова, спам некога, нападају неки сервер даљински, 191 00:09:15,350 --> 00:09:17,190 ако можете да га изрази са командом, ви 192 00:09:17,190 --> 00:09:19,120 може преварити компјутер у то раде. 193 00:09:19,120 --> 00:09:21,510 >> Шта је сада пример Како можете да урадите? 194 00:09:21,510 --> 00:09:24,300 Па, постоји много рачунара на интернет трчања Басх. 195 00:09:24,300 --> 00:09:26,390 Свако од нас Мац кориснике су међу њима. 196 00:09:26,390 --> 00:09:30,390 Много Линук сервера су међу их као добро, а Уникс сервера. 197 00:09:30,390 --> 00:09:32,630 Виндовс опет добија релативно Офф куке 198 00:09:32,630 --> 00:09:34,590 осим ако сте инсталирали посебан софтвер. 199 00:09:34,590 --> 00:09:37,130 Сада много сервера, за пример, покрените веб сервера, 200 00:09:37,130 --> 00:09:39,840 и, у ствари, Линукс је можда најпопуларнији оперативни систем 201 00:09:39,840 --> 00:09:43,060 да ради на рачунарима на Интернету које служе Веб странице. 202 00:09:43,060 --> 00:09:44,910 Сада као што ћемо видети касније у семестру, када је 203 00:09:44,910 --> 00:09:48,470 ви пошаљете захтев Ваш бровсер-- Цхроме, 204 00:09:48,470 --> 00:09:50,790 Интернет екплорер, вхатевер-- на удаљеном серверу, 205 00:09:50,790 --> 00:09:53,730 Испоставило се да, иако само откуцали ввв.екампле.цом, 206 00:09:53,730 --> 00:09:59,590 Ваш бровсер шаље поруку То је мало више волшебни, овако. 207 00:09:59,590 --> 00:10:01,239 >> Али приметите нешто чудно. 208 00:10:01,239 --> 00:10:03,030 Прве две линије Никада нисам видела, 209 00:10:03,030 --> 00:10:04,904 али они не изгледају Посебно претећи. 210 00:10:04,904 --> 00:10:08,030 Али погледајте шта сам украо за трећи ред овде. 211 00:10:08,030 --> 00:10:13,390 Ако лош момак требало да пошаље поруку овако са свог компјутера 212 00:10:13,390 --> 00:10:17,270 на угроженој Мац или рањива Линукс сервер, 213 00:10:17,270 --> 00:10:21,580 Смешна ствар је да Басх, једноставно мало командна линија, 214 00:10:21,580 --> 00:10:27,450 свеприсутна и често Половне у суштини изврши 215 00:10:27,450 --> 00:10:30,020 Садржај поруку да добије. 216 00:10:30,020 --> 00:10:33,490 И тој логици, можете трицк веб сервер, дакле, 217 00:10:33,490 --> 00:10:36,370 слањем нешто слично Усер-агент, који се обично 218 00:10:36,370 --> 00:10:38,300 је требало да кажем Име вашег прегледача. 219 00:10:38,300 --> 00:10:42,420 Усер-агент Хром, Усер-Агент интернет Екплорер, Усер-Агент Фирефок, ово 220 00:10:42,420 --> 00:10:44,590 је само ваш прегледач је начин идентификовања себе. 221 00:10:44,590 --> 00:10:46,605 Али ако лош момак веома паметно каже, мм-мм, ја сам 222 00:10:46,605 --> 00:10:47,930 неће да вам кажем шта је мој претраживач је, 223 00:10:47,930 --> 00:10:50,888 Ја уместо тога ћу да вам пошаљем ово Цриптиц изгледа ствар са рм -рф 224 00:10:50,888 --> 00:10:55,840 * У њему, можете буквално да преварите рањив веб сервер на интернету 225 00:10:55,840 --> 00:10:59,055 у вршењу управо то у ту за брисање свих датотека. 226 00:10:59,055 --> 00:11:00,930 И искрено, то није чак најгоре. 227 00:11:00,930 --> 00:11:01,763 То можете да урадите било шта. 228 00:11:01,763 --> 00:11:04,480 Можете да почнете дистрибуира ускраћивање услуга напада 229 00:11:04,480 --> 00:11:07,030 Уколико сте послали ову поруку читаве гомиле веб сервера 230 00:11:07,030 --> 00:11:10,256 а потом их је све спуштају, за пример, на Харвард.еду серверима, 231 00:11:10,256 --> 00:11:12,130 а можете да сортирате од Банг до ђавола из њих 232 00:11:12,130 --> 00:11:15,490 саобраћај мрежи која је иначе изазван овим негативца. 233 00:11:15,490 --> 00:11:18,760 >> Дакле, скратим причу, скоро свако у овој соби који је власник Мац 234 00:11:18,760 --> 00:11:20,240 је рањива на ово. 235 00:11:20,240 --> 00:11:24,100 Силвер Лининг је да уколико сте покретање веб сервер на лаптоп рачунару, 236 00:11:24,100 --> 00:11:27,780 и ако сте заиста конфигурисан је да се омогући нешто као ССХ у њега, 237 00:11:27,780 --> 00:11:28,670 ти си стварно сигуран. 238 00:11:28,670 --> 00:11:31,710 То је рањива, али не постоји који покушава да уђе у ваш лаптоп, 239 00:11:31,710 --> 00:11:33,290 тако да можете да некако уверени. 240 00:11:33,290 --> 00:11:36,210 Међутим, Аппле ће ускоро бити ажурирање поправити за ово. 241 00:11:36,210 --> 00:11:39,660 Свет Линука већ објавио број исправки за Федора и Убунту 242 00:11:39,660 --> 00:11:43,790 и друге верзије Линука, и заиста ако наиђете упдате 50 у уређају, 243 00:11:43,790 --> 00:11:45,930 чак и то ће такође бити ажурира и исправљена. 244 00:11:45,930 --> 00:11:47,764 Али и то нема Заиста је рањива, 245 00:11:47,764 --> 00:11:49,804 јер ако немаш тинкеред са апаратом 246 00:11:49,804 --> 00:11:52,770 и направио свој лаптоп јавно доступна на интернету, што није 247 00:11:52,770 --> 00:11:54,910 подразумевано, немаш заправо било у реду, јер 248 00:11:54,910 --> 00:11:56,890 од фиреваллинг и других техника. 249 00:11:56,890 --> 00:12:01,000 >> Али то је екстреман пример буг да смо живели за буквално 20 250 00:12:01,000 --> 00:12:04,050 године, а ко зна да ли је неко све ово време је познато о томе? 251 00:12:04,050 --> 00:12:06,300 А у ствари, ово је један од основни изазови 252 00:12:06,300 --> 00:12:08,690 да ћемо видети касније у семестар о безбедности, 253 00:12:08,690 --> 00:12:13,020 је да је баш као у стварном свету, Тхе Гоод Гуис су на штету. 254 00:12:13,020 --> 00:12:16,500 Да би лоше момке, морамо да уверите се да свака врата закључана, 255 00:12:16,500 --> 00:12:20,340 да је сваки прозор је безбедна, да свака тачка уласка у дом 256 00:12:20,340 --> 00:12:21,980 је сигурно да лоши момци напоље. 257 00:12:21,980 --> 00:12:26,870 Али шта лош момак треба да учинити да стварно компромис свој дом 258 00:12:26,870 --> 00:12:28,200 и краду од тебе? 259 00:12:28,200 --> 00:12:32,574 Он или она једноставно мора да пронађе једну откључана врата, један прозор поломљен, или тако нешто 260 00:12:32,574 --> 00:12:35,240 У том смислу, и то је Иста ствар на безбедност рачунара. 261 00:12:35,240 --> 00:12:37,660 Можемо написати милионе линија програмског кода 262 00:12:37,660 --> 00:12:40,570 и троше стотине или хиљаде сати покушавају да се то тачно, 263 00:12:40,570 --> 00:12:43,370 али ако направите само једну грешка у исправност, 264 00:12:43,370 --> 00:12:47,030 можете ставити цео систем и заиста у овом случају, цео интернет 265 00:12:47,030 --> 00:12:48,660 и свет у опасности. 266 00:12:48,660 --> 00:12:51,950 >> Дакле, ако желите да сазнате више о томе, идите на следећу УРЛ адресу овде. 267 00:12:51,950 --> 00:12:54,450 Нема потребе за акцију Вечерас ако нисте 268 00:12:54,450 --> 00:12:57,116 међу онима који удобнији су покретањем сопственог веб 269 00:12:57,116 --> 00:12:59,810 сервер, у ком случају би требало, У ствари, ажурирање софтвера. 270 00:12:59,810 --> 00:13:03,244 >> И ово је такође наслов говор, а сада папира, 271 00:13:03,244 --> 00:13:05,410 да смо повезани на Сајт Курс за данас. 272 00:13:05,410 --> 00:13:07,600 То је било од стране колега имену Кен Томпсон, који је 273 00:13:07,600 --> 00:13:10,120 прихвата веома познати Награда у компјутерској науци, 274 00:13:10,120 --> 00:13:13,495 и он је дао ову говор неколико година Пре, у суштини на ову исту тему. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Тражећи људе питање, треба стварно 277 00:13:20,520 --> 00:13:23,480 Поверење, на крају, Софтваре сте добили? 278 00:13:23,480 --> 00:13:26,100 На пример, сви ми имамо пишем програме, 279 00:13:26,100 --> 00:13:27,820 а ми смо били састављање их са цланг. 280 00:13:27,820 --> 00:13:31,830 И колико је вама познато, да ли си написао Сви програми за ЦС50 где има 281 00:13:31,830 --> 00:13:35,310 Назад врата врста, постоји начин да је лош момак, ако покренете програм, 282 00:13:35,310 --> 00:13:37,410 могао да преузме свој рачунар? 283 00:13:37,410 --> 00:13:38,310 Вероватно не, зар не? 284 00:13:38,310 --> 00:13:40,180 Марио, и похлепан, и Цредит. 285 00:13:40,180 --> 00:13:41,680 То су све веома мали програми. 286 00:13:41,680 --> 00:13:43,910 Ти би бити прилично лоше ако заиста 287 00:13:43,910 --> 00:13:47,310 је цео твој рачунар рањив после писања 10 или 20 линија кода, 288 00:13:47,310 --> 00:13:49,690 или бар несвесни неких безбедносних импликација. 289 00:13:49,690 --> 00:13:52,023 Сада кажем да је шаљиво, али ми ћемо да видимо данас 290 00:13:52,023 --> 00:13:54,600 а ове недеље је заправо Стварно, стварно лако 291 00:13:54,600 --> 00:13:57,980 да буде лоше и да чак и кратке програме рањиви. 292 00:13:57,980 --> 00:14:02,880 >> Али за сада, барем, схватају да питање се овде питање 293 00:14:02,880 --> 00:14:04,850 је око цланг у компајлера. 294 00:14:04,850 --> 00:14:08,360 Зашто смо били верујући цланг за последње две или три недеље? 295 00:14:08,360 --> 00:14:12,650 Ко може да каже да је онај ко је написао цланг није имао "ако" услов унутра 296 00:14:12,650 --> 00:14:17,680 који у суштини убризгава неке нуле и оне у сваком програму је саставља 297 00:14:17,680 --> 00:14:21,180 да би нека или њен приступ рачунара када спаваш 298 00:14:21,180 --> 00:14:23,580 и ваш лаптоп поклопац отворен и ваш рачунар ради? 299 00:14:23,580 --> 00:14:24,080 Зар не? 300 00:14:24,080 --> 00:14:28,350 Ми имамо ову врсту права част система А где верујемо да Цланг је читљив. 301 00:14:28,350 --> 00:14:30,000 Ви верујете да је уређај је читљив. 302 00:14:30,000 --> 00:14:34,430 Ви верујете да је буквално сваки програм на вашем Мац или ПЦ је поуздан. 303 00:14:34,430 --> 00:14:37,510 И као овај једноставни Буг сугерише, чак и ако то није злонамерно, 304 00:14:37,510 --> 00:14:40,580 то апсолутно не вероватно да ће бити случај. 305 00:14:40,580 --> 00:14:42,350 >> Тако да би требало да буде уплашен као пакао. 306 00:14:42,350 --> 00:14:45,560 Искрено, нема једноставно решење за овај други 307 00:14:45,560 --> 00:14:48,185 него нека врста друштвеног свести све веће сложености 308 00:14:48,185 --> 00:14:50,310 да градимо на врху наших рачунарских система, 309 00:14:50,310 --> 00:14:53,740 и како све више рањива можемо врло добро бити. 310 00:14:53,740 --> 00:14:55,570 >> Сада са тим, рекао је, Бреакоут. 311 00:14:55,570 --> 00:14:59,889 Па пробоја је проблем поставити три, и Пробоја је игра из прошла 312 00:14:59,889 --> 00:15:02,180 да би се сећате, али за нас у проблем сет три, 313 00:15:02,180 --> 00:15:04,450 то нам омогућава да ствари резервне копије усек 314 00:15:04,450 --> 00:15:08,880 тако да када пишемо програме, чак иу прозору Терминала овако, 315 00:15:08,880 --> 00:15:14,670 заправо може да ради, на крају, графички програми не 316 00:15:14,670 --> 00:15:17,800 за разлику од оних које смо имали приступ у нуле. 317 00:15:17,800 --> 00:15:20,910 Дакле, ово је особља имплементација Бреакоут, 318 00:15:20,910 --> 00:15:23,930 што је само ова цигла-разбијање игра, да померите весло назад 319 00:15:23,930 --> 00:15:27,590 и даље, и ударио лопту против оних боје цигле горе. 320 00:15:27,590 --> 00:15:30,020 Дакле, ово нас доводи врста тамо где 321 00:15:30,020 --> 00:15:33,180 смо у стању да се врло брзо са Огреби, а сада са Ц, 322 00:15:33,180 --> 00:15:35,800 спровођење наше графичких корисничких интерфејса. 323 00:15:35,800 --> 00:15:38,960 >> Али, више од тога, овај Проблем представља скуп први 324 00:15:38,960 --> 00:15:41,000 у коме дајемо ви гомила кода. 325 00:15:41,000 --> 00:15:43,940 А у ствари, донети експлицитна пажњу на ово, јер је нарочито 326 00:15:43,940 --> 00:15:47,090 за оне мање удобан, ово Проблем сет, бар на први поглед, 327 00:15:47,090 --> 00:15:49,170 ће да се осећају као да смо га преузео усек. 328 00:15:49,170 --> 00:15:51,540 Зато смо вам дали, за неке од потраге 329 00:15:51,540 --> 00:15:54,930 и сортирање проблеме у псет, гомила кода који смо писали, 330 00:15:54,930 --> 00:15:56,680 и пар коментара да кажу "да уради," 331 00:15:56,680 --> 00:15:58,221 где морате да попуните празнине. 332 00:15:58,221 --> 00:16:00,020 Дакле, не тако страшно, али је први пут 333 00:16:00,020 --> 00:16:03,370 ми вам предаје код који треба да Прво прочитати, разумети, а затим додати у 334 00:16:03,370 --> 00:16:04,290 и да га заврши. 335 00:16:04,290 --> 00:16:05,940 >> А затим са Бреакоут, ћемо да урадимо исто, 336 00:16:05,940 --> 00:16:08,740 дајући вам неколико десетина више линија кода који, искрено, ти дам 337 00:16:08,740 --> 00:16:11,490 много оквира за игра, али се заустави кратка 338 00:16:11,490 --> 00:16:14,304 спровођења цигле а лопта и весло, 339 00:16:14,304 --> 00:16:15,970 али ми радимо спроведе неке друге функције. 340 00:16:15,970 --> 00:16:18,280 Па чак и да се на први поглед, опет, нарочито ако мање удобан, 341 00:16:18,280 --> 00:16:21,480 Можда изгледа застрашујуће и посебно мислите да постоји толико много нових функција 342 00:16:21,480 --> 00:16:24,070 морате да заврши свој ум около, и то је истина. 343 00:16:24,070 --> 00:16:26,281 Али имајте на уму, то је баш као и нуле. 344 00:16:26,281 --> 00:16:28,780 Квоте су нисте користили све комада слагалице у нуле. 345 00:16:28,780 --> 00:16:31,120 Квоте су ти није стало да заврши Твој ум је око свих њих 346 00:16:31,120 --> 00:16:33,617 јер све што је било Брзи поглед да разуме, ох, 347 00:16:33,617 --> 00:16:35,450 то је оно што ја могу да урадим са тим слагалица. 348 00:16:35,450 --> 00:16:38,260 И заиста, у проблему сет 3 Спец ћемо вам указати 349 00:16:38,260 --> 00:16:41,370 на документацију која ће увести вас са неким новим функцијама, 350 00:16:41,370 --> 00:16:43,570 и на крају програмирање конструише користите. 351 00:16:43,570 --> 00:16:47,610 Услови, кругова, променљиве и функције 352 00:16:47,610 --> 00:16:50,720 ће бити идентичан оно што смо видели до сада. 353 00:16:50,720 --> 00:16:53,560 >> Дакле заиста, шта ћемо дати што је неки узорак кода који 354 00:16:53,560 --> 00:16:56,110 вам омогућава да креирате прозор која изгледа није за разлику од ове, 355 00:16:56,110 --> 00:16:59,540 и на крају га претворити у нешто сасвим овако. 356 00:16:59,540 --> 00:17:02,250 Тако да искористе ЦС50, разговарају радног времена и више, 357 00:17:02,250 --> 00:17:05,290 и да утеху у чињеници да количину кода морате да пишете 358 00:17:05,290 --> 00:17:06,760 заправо није толико много. 359 00:17:06,760 --> 00:17:10,359 Први изазов је само да се прилагоде себи да неки код смо написали. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Сва питања о псет3, Схеллсхоцк, или на други начин? 362 00:17:15,810 --> 00:17:19,226 >> ПУБЛИКА: Изгледало је као пролази кроз са Бреакоут 363 00:17:19,226 --> 00:17:22,154 да код скоро објектно оријентисани стил, 364 00:17:22,154 --> 00:17:24,675 али сам мислио да је Ц објектно-оријентисани програм. 365 00:17:24,675 --> 00:17:26,050 ПРЕДСЕДНИК 1: одлично питање. 366 00:17:26,050 --> 00:17:28,258 Дакле, у потрази путем дистрибуција код, код 367 00:17:28,258 --> 00:17:30,180 смо написали за псет3, за оне упознати, то 368 00:17:30,180 --> 00:17:32,230 Изгледа као да је мали објекат оријентисан. 369 00:17:32,230 --> 00:17:33,800 Кратак одговор је, то је. 370 00:17:33,800 --> 00:17:38,130 То је приближавање како сте може да уради објектно оријентисане шифру помоћу 371 00:17:38,130 --> 00:17:41,850 језика као Ц, али је ипак на крају процедурално. 372 00:17:41,850 --> 00:17:44,900 Не постоје методе унутрашњост променљиве, као што ћете видети. 373 00:17:44,900 --> 00:17:46,180 Али је подсећа на то. 374 00:17:46,180 --> 00:17:48,780 И ми ћемо поново видети ту функцију кад стигнемо у ПХП и ЈаваСцрипт 375 00:17:48,780 --> 00:17:49,946 крајем семестра. 376 00:17:49,946 --> 00:17:53,667 Али за сада, мислим о томе као наговештај онога што долази. 377 00:17:53,667 --> 00:17:54,250 Добро питање. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 У реду. 380 00:17:56,550 --> 00:17:59,730 Па Обједињавање Сорт било како смо оставили ствари последњи пут. 381 00:17:59,730 --> 00:18:03,250 И споји Сорт био кул у осећај да је толико много брже, 382 00:18:03,250 --> 00:18:07,100 барем на основу површно тестовима смо прошле недеље, него, рецимо, Буббле 383 00:18:07,100 --> 00:18:08,710 сорт, селекција сорт, уметање сорт. 384 00:18:08,710 --> 00:18:11,780 И који је био уредан превише је само како језгровито и чисто 385 00:18:11,780 --> 00:18:12,810 можете да га изрази. 386 00:18:12,810 --> 00:18:15,840 И шта смо рекли да је горња везан на ради времену стапања 387 00:18:15,840 --> 00:18:16,340 сортирање? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Да? 390 00:18:18,495 --> 00:18:19,360 >> ПУБЛИКА: Н лог Н? 391 00:18:19,360 --> 00:18:20,819 >> ПРЕДСЕДНИК 1: н лог н, десно. н лог н. 392 00:18:20,819 --> 00:18:23,776 А ми ћемо се вратити на оно што је заправо значи или где да се долази, 393 00:18:23,776 --> 00:18:25,570 али ово је било боље него што Руннинг тиме 394 00:18:25,570 --> 00:18:28,440 које смо видели у балон Избор и убацивање врсте? 395 00:18:28,440 --> 00:18:30,610 Тако н квадрат. н квадрат је већи од овога, 396 00:18:30,610 --> 00:18:34,650 па чак и ако то није очигледно, знају да лог н је мањи од Н, 397 00:18:34,650 --> 00:18:36,910 Дакле, ако радите н пута нешто мањи од Н, 398 00:18:36,910 --> 00:18:38,680 то ће бити мањи од н на квадрат. 399 00:18:38,680 --> 00:18:40,130 То је мало интуиције тамо. 400 00:18:40,130 --> 00:18:42,190 Али смо платили цену за то. 401 00:18:42,190 --> 00:18:47,000 То је био бржи, али је тема која је почела да се појављују прошле недеље је то компромис. 402 00:18:47,000 --> 00:18:49,804 Имам боље перформансе Време мудар, али оно 403 00:18:49,804 --> 00:18:52,470 да ли морам да потрошите на друге стране рука, у циљу постизања то? 404 00:18:52,470 --> 00:18:53,591 >> Публика: Меморија. 405 00:18:53,591 --> 00:18:54,465 ПРЕДСЕДНИК 1: Понови? 406 00:18:54,465 --> 00:18:55,173 Публика: Меморија. 407 00:18:55,173 --> 00:18:57,040 ПРЕДСЕДНИК 1: Меморија, или простор уопште. 408 00:18:57,040 --> 00:18:59,040 И није било супер Очигледно са нашим људима, 409 00:18:59,040 --> 00:19:02,240 али се сећате тога наших волонтера су одскочна напред и стајања 410 00:19:02,240 --> 00:19:04,780 назад као да постоји низ овде, и као да има 411 00:19:04,780 --> 00:19:07,130 Други низ овде да они могу користити, јер ми 412 00:19:07,130 --> 00:19:09,080 и потребно негде да споји те људе. 413 00:19:09,080 --> 00:19:11,480 Нисмо могли да их само замене на месту. 414 00:19:11,480 --> 00:19:13,800 Па мерге сорт утицај је више простора, што 415 00:19:13,800 --> 00:19:15,620 нисмо потребна са други алгоритми, 416 00:19:15,620 --> 00:19:17,410 али наопако је да је много брже. 417 00:19:17,410 --> 00:19:20,780 И искрено, у стварном свету простору ови даис-- РАМ, хард диск спаце-- 418 00:19:20,780 --> 00:19:25,030 је релативно јефтин, као и да је није нужно лоша ствар. 419 00:19:25,030 --> 00:19:28,320 >> Па хајде да на брзину погледамо, мало више методично, на оно што смо урадили 420 00:19:28,320 --> 00:19:30,220 и зашто смо рекли да је н лог н. 421 00:19:30,220 --> 00:19:33,260 Дакле, овде су осам бројева и осам волонтера смо имали прошли пут. 422 00:19:33,260 --> 00:19:35,718 И прва ствар која Мерге Сорт нам је рекао да то урадите је оно? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 ПУБЛИКА: Дивиде на два дела. 425 00:19:38,010 --> 00:19:38,663 ПРЕДСЕДНИК 1: Понови? 426 00:19:38,663 --> 00:19:39,650 ПУБЛИКА: Дивиде на два дела. 427 00:19:39,650 --> 00:19:40,610 ПРЕДСЕДНИК 1: Поделити на два дела, у реду. 428 00:19:40,610 --> 00:19:42,818 Ово је веома подсећа на именик, од поделе 429 00:19:42,818 --> 00:19:44,220 па владај уопште. 430 00:19:44,220 --> 00:19:45,640 Тако да смо гледали на левој половини. 431 00:19:45,640 --> 00:19:48,700 И онда кад смо рекли, сорт Лева половина елемената, 432 00:19:48,700 --> 00:19:49,690 Шта смо се следећи пут рекли? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Сортирајте левој половини са леве стране пола, што нам је дозвољено да се, 435 00:19:54,860 --> 00:19:57,570 после поделе на два дела, фокусирати на четири и два. 436 00:19:57,570 --> 00:20:01,280 >> Како се сада сортирате листу, у жута, величине два, користећи Мерге Сорт? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Добро га поделити на пола, и сортирање левој половини. 439 00:20:04,580 --> 00:20:07,100 И то је било где ствари Имам мало глупо кратко. 440 00:20:07,100 --> 00:20:10,720 Како се сортирате листу која је од величина једног, као што је овај број четири овде? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 То је сортирано. 443 00:20:13,210 --> 00:20:14,200 Завршите. 444 00:20:14,200 --> 00:20:17,300 >> Али онда како да сортирате листу Величина једног када је број два? 445 00:20:17,300 --> 00:20:21,640 Па, иста ствар, али сада шта је трећи и кључни корак у Мерге Сорт? 446 00:20:21,640 --> 00:20:24,020 Морао си да споји леви пола и десна половина. 447 00:20:24,020 --> 00:20:26,580 А када смо то урадили, ми смо гледали на четири, гледали смо два. 448 00:20:26,580 --> 00:20:28,750 Одлучили смо да све у реду, Очигледно два на првом месту, 449 00:20:28,750 --> 00:20:31,840 па смо ставили два у својој место, затим четири. 450 00:20:31,840 --> 00:20:35,010 А сада морате некако уназад, и то је врста карактеристичних 451 00:20:35,010 --> 00:20:37,570 алгоритма као спајања Сорт, уназад у меморији. 452 00:20:37,570 --> 00:20:40,240 Шта је био следећи ред приче? 453 00:20:40,240 --> 00:20:41,780 Шта би требало да се фокусира на следеће? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Право половина левице пола, што је шест и осам. 456 00:20:47,350 --> 00:20:50,320 >> Дакле, дозволите ми само корак кроз овај без белаборинг тачку превише. 457 00:20:50,320 --> 00:20:53,330 Шест до осам, онда је шест поредани, осам је сортиран. 458 00:20:53,330 --> 00:20:57,190 Споји их заједно тако, и сада следећи велики корак 459 00:20:57,190 --> 00:21:00,990 је, наравно, сортирање десној половини од први корак овог алгоритма. 460 00:21:00,990 --> 00:21:02,870 Тако да смо се фокусирати на један, три, седам, пет. 461 00:21:02,870 --> 00:21:04,540 Онда ћемо се фокусирати на левој половини. 462 00:21:04,540 --> 00:21:09,400 Лева половина тога, десна половина да, а потом спајају у једном и три. 463 00:21:09,400 --> 00:21:13,100 Тада десна половина, а затим напустио пола о томе, а затим десна половина од тога. 464 00:21:13,100 --> 00:21:15,985 Спојити га, а шта сад корак даље? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Споји велики левој половини и велика десна половина, па иде доле, 467 00:21:22,460 --> 00:21:27,330 затим два, па три, па четири, па Пет, онда шест, од седам, а затим осам. 468 00:21:27,330 --> 00:21:31,990 >> Тако да сада зашто је то на крају открива, посебно ако н и логаритми море 469 00:21:31,990 --> 00:21:35,487 генерално прилично бежите, бар у скорије време? 470 00:21:35,487 --> 00:21:37,070 Па, приметио висину ове ствари. 471 00:21:37,070 --> 00:21:41,230 Имали смо осам елемената, а ми подељен га два, по два, по два. 472 00:21:41,230 --> 00:21:44,590 Па лог базу два осам нам даје три. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 И верујте ми на то да ли мало магловито на томе. 475 00:21:48,540 --> 00:21:54,710 Али лог база два осам је три, тако да смо урадили три слоја спајања. 476 00:21:54,710 --> 00:21:57,170 И кад смо спојили елементи, колико елемената 477 00:21:57,170 --> 00:21:58,950 смо погледамо на сваком од тих редова? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Укупно Н, зар не? 480 00:22:01,437 --> 00:22:04,020 Јер да споји у горњем реду, иако смо то парче урадили, 481 00:22:04,020 --> 00:22:05,990 ми смо на крају дотакли сваки број једном. 482 00:22:05,990 --> 00:22:09,054 А у другом реду, то споји те спискове величине два, 483 00:22:09,054 --> 00:22:10,470 ми смо морали да додирују елемент једном. 484 00:22:10,470 --> 00:22:12,690 А онда ту заиста јасно у последњем реду, 485 00:22:12,690 --> 00:22:15,430 ми смо морали да додирују од оних елементи једном, али само једном, 486 00:22:15,430 --> 00:22:18,400 па овде лежи, онда, наша н лог н. 487 00:22:18,400 --> 00:22:21,780 >> А сада само да се ствари мало више формално само на тренутак, ако је вама 488 00:22:21,780 --> 00:22:24,260 су сада анализирају ово на неку врсту вишег нивоа 489 00:22:24,260 --> 00:22:28,340 и покушати да одлучи, како добро Можда идете о изражавању 490 00:22:28,340 --> 00:22:31,780 ради време овог алгоритма само гледајући у њу, а не 491 00:22:31,780 --> 00:22:33,590 помоћу вештачки пример? 492 00:22:33,590 --> 00:22:36,590 Па, колико времена би рекао корак овако у жуто би потребно, 493 00:22:36,590 --> 00:22:37,173 ако је н <2 вратити? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 То је Биг О чега? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Па видим један, тако да један корак, можда два корака, јер је то, ако 498 00:22:44,540 --> 00:22:47,110 а затим се вратите, али је Цонстант време, зар не? 499 00:22:47,110 --> 00:22:49,960 Тако да смо рекли О (1), и то је како ћу изразити ово. 500 00:22:49,960 --> 00:22:51,480 Т., само буди трчање времена. 501 00:22:51,480 --> 00:22:54,150 н је величина улаза, па Т (н), само Фанци начин 502 00:22:54,150 --> 00:22:56,330 каже покретање Време дато унос величине Н 503 00:22:56,330 --> 00:23:00,220 ће бити на налогу константне времена, у О (1). 504 00:23:00,220 --> 00:23:01,970 >> Али иначе, шта је ово? 505 00:23:01,970 --> 00:23:05,660 Како би сте изразити руннинг време ове жуте линије? 506 00:23:05,660 --> 00:23:06,250 Т чега? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Можете да некако превари и овде одговорите на моје питање циклично. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Дакле, ако ради време у Генерални смо управо рекли је Т (н). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 А сад ти некако Пунтинг овде и говорећи, добро, само сортирају левој половини, 513 00:23:22,490 --> 00:23:23,920 а затим сортирање десној половини. 514 00:23:23,920 --> 00:23:27,520 Како бисмо могли симболично представљати ради време ове жуте линије? 515 00:23:27,520 --> 00:23:28,020 Т чега? 516 00:23:28,020 --> 00:23:29,360 Шта је величина улаза? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 н више од два. 519 00:23:31,057 --> 00:23:32,140 Зашто не бих само да кажем да? 520 00:23:32,140 --> 00:23:36,449 А онда је ово још један Т (н / 2), а затим Опет, ако сам спојити два разврстане полувремена, 521 00:23:36,449 --> 00:23:38,615 Колико елемената ћу морати да додирнете укупно? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 н. 524 00:23:40,320 --> 00:23:42,790 Тако да могу да изразим ово, само да се некако фенси, 525 00:23:42,790 --> 00:23:44,430 као истеклог времена уопште. 526 00:23:44,430 --> 00:23:51,140 Т (н) је само ради време Т (н / 2), Плус Т (н / 2), лево и десно пола пола, 527 00:23:51,140 --> 00:23:55,360 плус О (н), што је вероватно н корака, али можда, ако сам помоћу два прста, 528 00:23:55,360 --> 00:23:57,960 Дупло је онолико кораке, али је линеарна. 529 00:23:57,960 --> 00:24:00,440 То је неки број корака То је фактор Н, 530 00:24:00,440 --> 00:24:02,270 тако да смо могли изразити ово као ово. 531 00:24:02,270 --> 00:24:05,550 И ово је место где сада ћемо да пунт Назад нашег средњошколског уџбеника математика 532 00:24:05,550 --> 00:24:10,290 смо да је понављање на крају завршава изнесува ово, н пута лог н, 533 00:24:10,290 --> 00:24:12,530 ако ви у ствари раде из математика више формално. 534 00:24:12,530 --> 00:24:13,950 >> Дакле, то је само два перспективе. 535 00:24:13,950 --> 00:24:17,500 Један бројчано са хард-цодед репрезентативан пример 536 00:24:17,500 --> 00:24:21,140 користи осам бројева, а више Генерал Погледајте како смо стигли. 537 00:24:21,140 --> 00:24:25,670 Али оно што је заиста занимљиво овде је, опет, овај појам бициклизма. 538 00:24:25,670 --> 00:24:26,900 Ја не користим за петље. 539 00:24:26,900 --> 00:24:29,860 Ја сам некако дефинисања нешто у смислу себи, 540 00:24:29,860 --> 00:24:31,950 не само са овим математичка функција, 541 00:24:31,950 --> 00:24:34,860 али у смислу овог псеудо кода. 542 00:24:34,860 --> 00:24:38,260 Овај псеудо код је рекурзивна у да су двојица његових линија 543 00:24:38,260 --> 00:24:42,310 је у суштини то говори да иде користе се за решавање мањи 544 00:24:42,310 --> 00:24:45,400 проблем мањих димензија, а онда опет и опет 545 00:24:45,400 --> 00:24:48,820 и поново све док ми га Вхиттле до такозваног основног случаја. 546 00:24:48,820 --> 00:24:52,810 >> Дакле, хајде да ствари скрене више убедљив узети-далеко од ово као што следи. 547 00:24:52,810 --> 00:24:58,420 Пусти ме у гедит и да погледати неке данашње изворног кода, 548 00:24:58,420 --> 00:24:59,930 нарочито овај пример овде. 549 00:24:59,930 --> 00:25:03,709 Сигма 0, која очигледно додаје бројеви један преко Н. 550 00:25:03,709 --> 00:25:05,750 Па хајде да видимо шта је то познато и непознатим овде. 551 00:25:05,750 --> 00:25:08,690 Прво имамо пар обухвата, тако да ништа ново тамо. 552 00:25:08,690 --> 00:25:09,190 Прототип. 553 00:25:09,190 --> 00:25:11,370 Мало сам магловита о Ова после неколико дана, 554 00:25:11,370 --> 00:25:13,790 али оно што смо рекли прототип функције је? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 ПУБЛИКА: [неразумљиво]. 557 00:25:16,015 --> 00:25:16,905 ПРЕДСЕДНИК 1: Шта је то? 558 00:25:16,905 --> 00:25:17,800 ПУБЛИКА: Ми га објави. 559 00:25:17,800 --> 00:25:18,883 ПРЕДСЕДНИК 1: Ми га објави. 560 00:25:18,883 --> 00:25:22,290 Тако да се настави цланг, хеј, заправо не спроводи ово још, 561 00:25:22,290 --> 00:25:25,740 али негде у овом фајлу, по свој прилици, ће бити функција зове шта? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 Сигма. 564 00:25:27,540 --> 00:25:30,540 И ово је само обећање да то ће да изгледа овако. 565 00:25:30,540 --> 00:25:33,720 То ће да се цео број као инпут-- и могу да будем јаснији 566 00:25:33,720 --> 00:25:36,570 и кажу инт н --анд је ће врати ИНТ, 567 00:25:36,570 --> 00:25:39,900 али и зарез средства, мм, ја ћу добити около спровођењу ово мало касније. 568 00:25:39,900 --> 00:25:40,989 Опет, Цланг је глупо. 569 00:25:40,989 --> 00:25:43,280 То ће само да знају шта ви не кажете врха до дна, 570 00:25:43,280 --> 00:25:45,765 тако да је потребно да барем дају то наговештај онога што долази. 571 00:25:45,765 --> 00:25:47,330 >> Сада хајде да погледамо главни овде. 572 00:25:47,330 --> 00:25:50,040 Хајде дођите овамо и види шта Маин ради. 573 00:25:50,040 --> 00:25:53,780 То није толико дуго на функцији, и у ствари конструкт овде познато. 574 00:25:53,780 --> 00:25:57,590 Изјављујем променљива Н, а потом Ја опет и опет малтретира корисника 575 00:25:57,590 --> 00:26:01,880 за позитиван цео број коришћењем Тонированние, а једини излаз из ове петље 576 00:26:01,880 --> 00:26:03,280 Када корисник је испунио. 577 00:26:03,280 --> 00:26:05,670 Радити док смо некада пестер кориснику на тај начин. 578 00:26:05,670 --> 00:26:06,670 Сада ово је интересантно. 579 00:26:06,670 --> 00:26:08,510 Изјављујем инт називом "одговор". 580 00:26:08,510 --> 00:26:11,420 Ја то повратна вредност доделити на функцију која се зове "Сигма". 581 00:26:11,420 --> 00:26:15,200 Ја не знам шта је то још увек, али Сећам га прогласи малопре. 582 00:26:15,200 --> 00:26:18,310 А онда сам ја пролази у вредност коју корисник унесе, н, 583 00:26:18,310 --> 00:26:20,420 а онда сам пријави одговор. 584 00:26:20,420 --> 00:26:22,260 Па хајде да дођите назад само на тренутак. 585 00:26:22,260 --> 00:26:28,620 Идемо напред у овом директоријуму, направити сигма 0, а заправо покренете овај програм 586 00:26:28,620 --> 00:26:30,490 и види шта се дешава. 587 00:26:30,490 --> 00:26:35,930 Дакле, ако одем напред и Рун Овај програм, ./сигма-0, 588 00:26:35,930 --> 00:26:40,139 и куцам у позитиван цео као два, Сигма, 589 00:26:40,139 --> 00:26:43,180 као грчки симбол подразумева, само ће се сабрати све бројеве из 590 00:26:43,180 --> 00:26:44,320 нула на до два. 591 00:26:44,320 --> 00:26:46,560 Па 0 плус 1 плус 2. 592 00:26:46,560 --> 00:26:48,830 Дакле, ово би било пожељно да ми дају 3. 593 00:26:48,830 --> 00:26:49,750 То је све што ради. 594 00:26:49,750 --> 00:26:52,690 И слично, ако останем ово поново и ја му дати број три, 595 00:26:52,690 --> 00:26:56,721 То је 3 плус 2, тако да је 5 плус 1 требало би да ми дају 6. 596 00:26:56,721 --> 00:26:59,470 И онда ако добијем стварно луд и почните да куцате у већим бројевима, 597 00:26:59,470 --> 00:27:01,290 треба ми дају веће и веће суме. 598 00:27:01,290 --> 00:27:02,250 Тако да је то све. 599 00:27:02,250 --> 00:27:04,010 >> Дакле, шта Сигма изгледа? 600 00:27:04,010 --> 00:27:05,430 Па, то је прилично једноставно. 601 00:27:05,430 --> 00:27:08,940 То је како да смо имплементирали ово за последњих неколико недеља. 602 00:27:08,940 --> 00:27:11,120 "Инт" ће бити типа повратак. 603 00:27:11,120 --> 00:27:14,330 Сигма је име, и потребно је променљива м уместо н. 604 00:27:14,330 --> 00:27:15,940 Ја ћу то променити Уп Топ. 605 00:27:15,940 --> 00:27:17,340 Онда је ово само проверу исправности. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Ћемо видети зашто је за тренутак. 608 00:27:19,950 --> 00:27:24,220 Сада сам још једну променљиву изјављујем, Укратко, иницијализујте на нулу. 609 00:27:24,220 --> 00:27:28,140 Онда ја имам ово за петљу итератинг, очигледно због јасноће, 610 00:27:28,140 --> 00:27:33,810 од И = 1 горе до = М, који је год корисник унесе, а онда сам 611 00:27:33,810 --> 00:27:35,690 повећавати износ овако. 612 00:27:35,690 --> 00:27:37,360 А затим се вратите суму. 613 00:27:37,360 --> 00:27:38,440 >> Па пар питања. 614 00:27:38,440 --> 00:27:42,370 Један, ја тврдим у мом коментару да је та избегава ризик од бесконачне петље. 615 00:27:42,370 --> 00:27:45,620 Зашто би пролази у негативном броју подстакне, потенцијално, бесконачну петљу? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> ПУБЛИКА: Никада нећеш доћи м. 618 00:27:51,290 --> 00:27:52,880 >> ПРЕДСЕДНИК 1: Никада до м. 619 00:27:52,880 --> 00:27:55,880 Али м је усвојен, па хајде да размислите једноставан пример. 620 00:27:55,880 --> 00:27:58,510 Ако је м донет од стране Корисник је негативно. 621 00:27:58,510 --> 00:28:00,059 Без обзира на Маин. 622 00:28:00,059 --> 00:28:01,850 Главни нас штити од и ово, тако да сам само 623 00:28:01,850 --> 00:28:04,680 је заиста анал с Сигма да такође проверите да ли 624 00:28:04,680 --> 00:28:06,540 да улаз не може бити негативан. 625 00:28:06,540 --> 00:28:10,130 Дакле, ако м је негативан, нешто као негативно. 626 00:28:10,130 --> 00:28:11,930 Шта ће се десити? 627 00:28:11,930 --> 00:28:14,390 Па, ја ће се се иницијализован на један, 628 00:28:14,390 --> 00:28:19,060 а онда ће бити мање од или једнако м? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Станд би. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 То је било-- хајде да не, хајде да оставите на миру ову причу. 633 00:28:29,370 --> 00:28:32,780 Нисам питао то питање, јер је ризик да сам алудирајући 634 00:28:32,780 --> 00:28:38,360 се неће догодити јер је Увек ће бити већи тхан-- реду, 635 00:28:38,360 --> 00:28:39,871 Ја ретрацт то питање. 636 00:28:39,871 --> 00:28:40,370 У реду. 637 00:28:40,370 --> 00:28:42,030 Хајде да се фокусирамо само на овом делу овде. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Зашто сам изјављујем мало изван петље? 640 00:28:48,830 --> 00:28:52,010 Обавештење он лине 49 Имам прогласио И унутар петље, 641 00:28:52,010 --> 00:28:54,950 али Онлине 48 имам изјавио је мало ван. 642 00:28:54,950 --> 00:28:55,695 Да. 643 00:28:55,695 --> 00:28:56,611 ПУБЛИКА: [неразумљиво]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 ПРЕДСЕДНИК 1: Наравно. 646 00:28:59,400 --> 00:29:03,360 Дакле, прво и пре свега ја сигурно не желе да се изјасне и иницијализацију суму 647 00:29:03,360 --> 00:29:06,130 до нула унутрашњости петља на сваком итерације, 648 00:29:06,130 --> 00:29:09,370 јер би јасно пораз Сврха сумирајући бројеве. 649 00:29:09,370 --> 00:29:11,770 Ја бих стално мењају вредности назад на нулу. 650 00:29:11,770 --> 00:29:17,992 И такође, што је још један више волшебни Разлог за ту исту дизајн одлуке? 651 00:29:17,992 --> 00:29:18,954 Да. 652 00:29:18,954 --> 00:29:20,279 >> ПУБЛИКА: [неразумљиво]. 653 00:29:20,279 --> 00:29:21,070 ПРЕДСЕДНИК 1: Управо тако. 654 00:29:21,070 --> 00:29:24,060 Желим да јој приступе напољу петље такође на којој линији? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 По 53. 657 00:29:26,400 --> 00:29:29,910 И на основу нашег правило од пре неколико предавања, 658 00:29:29,910 --> 00:29:33,680 променљиве сцопед, заиста, да се цурли протеза која их обухвата. 659 00:29:33,680 --> 00:29:38,190 Дакле, ако ја не изјављујем суму унутра ових спољних заграда, 660 00:29:38,190 --> 00:29:40,250 Не могу да га користе у реду 53. 661 00:29:40,250 --> 00:29:43,160 Другачије речено, ако сам прогласио сума овде, или чак унутар 662 00:29:43,160 --> 00:29:45,410 За петљу, ја нисам могао да приступи у 53. 663 00:29:45,410 --> 00:29:47,150 Променљива би ефикасно нестати. 664 00:29:47,150 --> 00:29:48,579 Тако да неколико разлога тамо. 665 00:29:48,579 --> 00:29:50,370 Али сада да се вратимо и види шта се дешава. 666 00:29:50,370 --> 00:29:51,730 Тако сигма добија звао. 667 00:29:51,730 --> 00:29:55,640 Додаје се 1 плус 2 или 1 плус 2 плус 3, а затим враћа вредност, 668 00:29:55,640 --> 00:29:59,660 складишти је у одговору, и принтф овде Зато и видим на екрану. 669 00:29:59,660 --> 00:30:03,079 Дакле, то је оно што ћемо назвати итеративни приступ, где је само понављање 670 00:30:03,079 --> 00:30:03,870 значи коришћење петљу. 671 00:30:03,870 --> 00:30:06,900 За петље, неко време петље, раде док петља, само опет радимо нешто 672 00:30:06,900 --> 00:30:08,380 и опет и опет. 673 00:30:08,380 --> 00:30:13,505 >> Али сигма је врста уредан функције у да сам могао да га другачије спроведе. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Шта о томе, што само да буду кул, 676 00:30:19,120 --> 00:30:21,880 пусти ме стварно отарасити о много дистракција 677 00:30:21,880 --> 00:30:24,380 јер ове функције је заиста прилично једноставан. 678 00:30:24,380 --> 00:30:27,780 Хајде Вхиттле га само својим четири основне линије 679 00:30:27,780 --> 00:30:30,410 и отарасити свих коментари и коврџава заграда. 680 00:30:30,410 --> 00:30:34,334 То је врста одувава алтернатива имплементација. 681 00:30:34,334 --> 00:30:37,250 У реду, можда не смета-дува, али је некако секси, у реду, 682 00:30:37,250 --> 00:30:39,920 да погледате ово много више језгровито. 683 00:30:39,920 --> 00:30:43,120 Са само четири линије кода, Ја прво тај исправности чек. 684 00:30:43,120 --> 00:30:45,732 Ако је м је мања или једнака нула, Сигма нема смисла. 685 00:30:45,732 --> 00:30:48,190 То би требало да буде само у овај случај за позитивне бројеве, 686 00:30:48,190 --> 00:30:50,340 тако да сам само ћу да врати нулу произвољно 687 00:30:50,340 --> 00:30:53,210 тако да смо барем имамо Неки такозвани основни случај. 688 00:30:53,210 --> 00:30:54,430 >> Али овде је лепота. 689 00:30:54,430 --> 00:30:59,930 Целина ове идеје, додајући бројеве од 1 до н, или м у овом случају, 690 00:30:59,930 --> 00:31:02,630 може да се уради врстом доношења долар. 691 00:31:02,630 --> 00:31:04,947 Па, шта је суму од 1 до м? 692 00:31:04,947 --> 00:31:05,780 Па, знате шта? 693 00:31:05,780 --> 00:31:11,949 То је исто као збир м Плус суму од 1 до м минус 1. 694 00:31:11,949 --> 00:31:12,740 Па знате шта? 695 00:31:12,740 --> 00:31:13,940 Шта је сигма М минус 1? 696 00:31:13,940 --> 00:31:17,860 Па, ако сте мало пратите ове логично, то је исто као м минус 1 697 00:31:17,860 --> 00:31:21,415 Плус сигма М минус 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Па можете некако само-- То је као, ако сте тек 700 00:31:26,012 --> 00:31:28,220 покушавају да узнемире пријатеља и они да те питам нешто, 701 00:31:28,220 --> 00:31:31,344 Некако одговорити питањем, можете некако задржи доношења долар. 702 00:31:31,344 --> 00:31:34,560 Али оно што је кључно је да ако наставиш чинећи питање мањи и мањи 703 00:31:34,560 --> 00:31:36,910 и мањи, ти си Не тражимо шта је Сигма 704 00:31:36,910 --> 00:31:39,116 Н, шта је сигма од н, шта је сигма н? 705 00:31:39,116 --> 00:31:40,990 Ви питате шта је сигма Н, што је Сигма 706 00:31:40,990 --> 00:31:42,839 за Н минус 1, шта је сигма од Н минус 2? 707 00:31:42,839 --> 00:31:44,880 На крају питање ће постати шта? 708 00:31:44,880 --> 00:31:50,250 Шта је сигма једног или нула, неке веома мале вредности, 709 00:31:50,250 --> 00:31:52,220 и чим Склони то, твој пријатељ, 710 00:31:52,220 --> 00:31:54,350 нећете питати Опет исто питање, 711 00:31:54,350 --> 00:31:55,975 само ћеш рећи, Ох, то је нула. 712 00:31:55,975 --> 00:31:58,490 Завршили смо играли ову врсту глупо цикличног игре. 713 00:31:58,490 --> 00:32:02,950 >> Па Рекурзија је акт у програмирању о функцији која себе назива. 714 00:32:02,950 --> 00:32:06,630 Овај програм, када се саставља и бежи, је ће да се понашају на исти начин, 715 00:32:06,630 --> 00:32:09,620 али оно што је кључно јесте да се унутар на функцију која се зове Сигма, 716 00:32:09,620 --> 00:32:13,150 постоји линија кода при чему смо се зовете, 717 00:32:13,150 --> 00:32:14,980 што би нормално било лоше. 718 00:32:14,980 --> 00:32:21,160 На пример, шта ако сам први саставио ово, тако да сигма-- 719 00:32:21,160 --> 00:32:22,710 направити сигма 1 ./сигма-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Позитиван цео број, молим вас, 50 ​​1275. 722 00:32:27,690 --> 00:32:30,810 Па шта функција делује се, на основу једног теста, тачно. 723 00:32:30,810 --> 00:32:34,917 Али, шта ако добијем мало опасно и брисање такозвани основни случај, 724 00:32:34,917 --> 00:32:37,750 и само да кажем, па ја само правим Ова компликованије него што јесте. 725 00:32:37,750 --> 00:32:42,450 Хајде да израчуна СИГМА узимањем м а затим додавањем 726 00:32:42,450 --> 00:32:44,564 у сигма од м минус један? 727 00:32:44,564 --> 00:32:45,980 Па, шта ће се овдје десити? 728 00:32:45,980 --> 00:32:47,140 Хајде да умањите. 729 00:32:47,140 --> 00:32:52,920 Хајде да рекомпајлирате програма, сачувајте га, рекомпајлирате програм, 730 00:32:52,920 --> 00:33:00,450 а затим спреман ./сигма-1 зумирања, унесите позитиван цео број молим те, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Колико сте спремни да признај да видим то? 733 00:33:04,430 --> 00:33:04,950 >> У реду. 734 00:33:04,950 --> 00:33:06,690 Тако да то може да се догоди за број разлога, 735 00:33:06,690 --> 00:33:09,148 а искрено ове недеље смо о томе да вам дам више њих. 736 00:33:09,148 --> 00:33:11,780 Али у овом случају, покушајте разуму уназад 737 00:33:11,780 --> 00:33:14,430 Шта би се десило? 738 00:33:14,430 --> 00:33:17,400 Сегментација грешка, рекли смо последњи време, односи се на сегмент меморије. 739 00:33:17,400 --> 00:33:18,690 Нешто лоше десило. 740 00:33:18,690 --> 00:33:21,550 Али оно што је било механички да кренуло наопако 741 00:33:21,550 --> 00:33:25,000 овде због мог уклањања тог такозваног основног случаја, 742 00:33:25,000 --> 00:33:26,870 где сам се вратио хард-кодирани вредност? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Шта ти мислиш кренуло наопако? 745 00:33:30,460 --> 00:33:31,219 Да. 746 00:33:31,219 --> 00:33:32,135 >> ПУБЛИКА: [неразумљиво]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 ПРЕДСЕДНИК 1: Ах. 749 00:33:36,970 --> 00:33:37,550 Добро питање. 750 00:33:37,550 --> 00:33:39,508 Тако да је величина броја да сам сумирајући 751 00:33:39,508 --> 00:33:41,920 Имам толико велика да је прекорачен величина меморијског простора. 752 00:33:41,920 --> 00:33:44,640 Добра идеја, али не и у основи ће да изазове судар. 753 00:33:44,640 --> 00:33:48,230 То би могло да изазове цео Оверфлов, где битови само пребацити 754 00:33:48,230 --> 00:33:51,760 а онда грешка заиста велики број за попут негативног броја, 755 00:33:51,760 --> 00:33:53,260 али да сама неће изазвати судар. 756 00:33:53,260 --> 00:33:55,509 Јер је на крају Дан инт је још увек 32 бита. 757 00:33:55,509 --> 00:33:57,640 Нећеш се случајно украсти 33. мало. 758 00:33:57,640 --> 00:33:58,431 Али добар мисао. 759 00:33:58,431 --> 00:33:58,984 Да. 760 00:33:58,984 --> 00:33:59,900 >> ПУБЛИКА: [неразумљиво]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 СПЕАКЕР 1: Метод Никада престаје да тече, 763 00:34:02,300 --> 00:34:06,658 и заиста она се назива поново и опет и опет и опет 764 00:34:06,658 --> 00:34:08,449 и опет, и ниједна од Те функције Евер 765 00:34:08,449 --> 00:34:13,310 заврши јер је њихова јединим линију Шифра себи, позива опет и опет 766 00:34:13,310 --> 00:34:14,219 и поново. 767 00:34:14,219 --> 00:34:16,080 И шта је заиста дешава овде и сада смо 768 00:34:16,080 --> 00:34:18,100 могу некако извући ово сликовито. 769 00:34:18,100 --> 00:34:20,899 Пусти ме преко у слика за само тренутак. 770 00:34:20,899 --> 00:34:22,940 Ово је слика, која на крају ће се месо из 771 00:34:22,940 --> 00:34:26,336 детаљније, шта се дешава унутар меморије рачунара. 772 00:34:26,336 --> 00:34:28,460 И испада да је дно ове слике 773 00:34:28,460 --> 00:34:29,709 је нешто што се зове стек. 774 00:34:29,709 --> 00:34:31,920 Ово је комад Меморија, комад РАМ, 775 00:34:31,920 --> 00:34:33,920 то је само користи у било које време функција се зове. 776 00:34:33,920 --> 00:34:36,239 Свака ти пут, програмер, позовите функцију, 777 00:34:36,239 --> 00:34:38,860 оперативни систем, као и Мац ОС, Виндовс, или Линук, 778 00:34:38,860 --> 00:34:41,920 зграби гомила бајтова, можда неколико килобајта, можда неколико мегабајта 779 00:34:41,920 --> 00:34:44,590 меморије, руке им вама, а затим омогућава 780 00:34:44,590 --> 00:34:47,650 наиђете своју функцију помоћу год променљиве ти треба. 781 00:34:47,650 --> 00:34:50,699 А ако онда позвати другу функција и друга функција, 782 00:34:50,699 --> 00:34:53,590 добијате још једну кришку меморије и још парче меморије. 783 00:34:53,590 --> 00:34:57,090 >> И заиста, ако се ове зелене тацне од Анненберг представљају ту меморију, 784 00:34:57,090 --> 00:34:59,870 ево шта се дешава први Време зовете функција Сигма. 785 00:34:59,870 --> 00:35:04,510 То је као стављање послужавник овако на оно што је у почетку празан Стацк. 786 00:35:04,510 --> 00:35:07,142 Али онда ако је тацна себе назива, да тако кажем, 787 00:35:07,142 --> 00:35:08,850 позивајући другу инстанцу СИГМА, то је 788 00:35:08,850 --> 00:35:11,640 као да питате оперативни систем, Оох, треба мало више меморије, 789 00:35:11,640 --> 00:35:12,520 дај ми то. 790 00:35:12,520 --> 00:35:14,840 И онда се добија нагомилане на на врху. 791 00:35:14,840 --> 00:35:18,030 Али оно што је кључ је у томе да прва касета је још увек тамо, 792 00:35:18,030 --> 00:35:20,620 јер је позвао ову другу фиоку. 793 00:35:20,620 --> 00:35:23,500 Сада у међувремену, Сигма позовите Сигма, то је као да траже више меморије. 794 00:35:23,500 --> 00:35:25,830 Добија нагомилане овамо. 795 00:35:25,830 --> 00:35:29,350 сигма зову Сигма, то је још један траи који добија нагомилане овде. 796 00:35:29,350 --> 00:35:32,942 И ако стално то радиш, на крају, некако мап Овај визуелни 797 00:35:32,942 --> 00:35:35,525 тој табели, шта ће се десити са гомилу носача? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 То ће премашити износ меморије рачунар има. 800 00:35:41,160 --> 00:35:45,790 И чим тој зеленој фиоке премашује хоризонталну линију 801 00:35:45,790 --> 00:35:49,410 изнад гомиле и изнад тог речи гомили, што ћемо се вратити у будућности, 802 00:35:49,410 --> 00:35:50,410 то је лоша ствар. 803 00:35:50,410 --> 00:35:52,810 Куча је другачији сегмент меморије, 804 00:35:52,810 --> 00:35:55,190 и ако пустите ове тацне гомила и гомила на, 805 00:35:55,190 --> 00:35:57,800 идете да прелази свој сегмент меморије, 806 00:35:57,800 --> 00:36:00,420 и програм заиста ће да се сруши. 807 00:36:00,420 --> 00:36:02,930 >> Сада као страни, ова идеја рекурзије, дакле, 808 00:36:02,930 --> 00:36:06,500 може јасно да доведе до проблема, али је то није нужно лоша ствар. 809 00:36:06,500 --> 00:36:08,840 Јер сматрају, после све, а можда како-- 810 00:36:08,840 --> 00:36:11,700 То захтева навикавање да --хов елегантно или како је једноставно 811 00:36:11,700 --> 00:36:14,890 да је примена СИГМА био. 812 00:36:14,890 --> 00:36:17,440 И нећемо користити рецурсион све то много у ЦС50, 813 00:36:17,440 --> 00:36:20,780 али у ЦС51, и стварно било класа где сте манипулишу структуре података 814 00:36:20,780 --> 00:36:23,640 као дрвеће или породичних стабала, да су неки хијерархију, 815 00:36:23,640 --> 00:36:26,000 то је супер, супер корисно. 816 00:36:26,000 --> 00:36:29,750 Сада, као на страну, тако да као амбициозне компјутерских научника 817 00:36:29,750 --> 00:36:33,180 су упознати са неким од Гоогле-а интерних шала, ако одете на Гоогле-у 818 00:36:33,180 --> 00:36:36,345 и погледате оно што је дефиниција, рецимо, рекурзије, унесите. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Аха. 821 00:36:41,110 --> 00:36:42,670 Као на страну, повукао сам неколико. 822 00:36:42,670 --> 00:36:45,470 То је било као 10 минута Одуговлачење јутрос. 823 00:36:45,470 --> 00:36:52,890 Ако и ви Гоогле "накриво" Нотице нагињањем главу слигхтли-- 824 00:36:52,890 --> 00:36:55,120 а онда ово је можда Најстрашнија од свега 825 00:36:55,120 --> 00:36:57,286 јер је неко провео као њихов дан реализовања 826 00:36:57,286 --> 00:36:59,880 неколико година аго-- хајде. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Ох, ваит-- то буба. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Тако ради на једном од највећим светским сајтова 831 00:37:11,410 --> 00:37:13,510 су ови глупи мали ускршња јаја. 832 00:37:13,510 --> 00:37:16,690 Вероватно троше нетривијална број линија кода 833 00:37:16,690 --> 00:37:19,280 само да можемо да имамо мало забаве ствари тако. 834 00:37:19,280 --> 00:37:22,140 Али барем сад ти неке од тих интерних шала. 835 00:37:22,140 --> 00:37:28,330 >> Сада ћемо да погледамо неке од Вхите Лиес смо говорили у последње време, 836 00:37:28,330 --> 00:37:30,707 и почињу да ољуштити Назад неки слојеви Технички 837 00:37:30,707 --> 00:37:32,790 тако да заиста разумеш Шта се дешава 838 00:37:32,790 --> 00:37:34,860 и можете разумети неке од претњи, 839 00:37:34,860 --> 00:37:38,060 попут Схеллсхоцк, то су сада почели да постану 840 00:37:38,060 --> 00:37:41,110 на челу свачијег Пажња, бар у медијима. 841 00:37:41,110 --> 00:37:45,810 Дакле, овде је врло једноставна функција да враћа ништа, празнина. 842 00:37:45,810 --> 00:37:46,790 Његово име је свап. 843 00:37:46,790 --> 00:37:50,880 Потребно у две променљиве и враћа ништа. 844 00:37:50,880 --> 00:37:52,260 Узима у А и Б. 845 00:37:52,260 --> 00:37:53,337 Тако брзо демонстрација. 846 00:37:53,337 --> 00:37:54,170 Донели смо ово горе. 847 00:37:54,170 --> 00:37:56,100 Ми можда и узети мало бреак овде само тренутак 848 00:37:56,100 --> 00:37:57,250 и имају мало нешто да попијем. 849 00:37:57,250 --> 00:38:00,120 Ако неко не би сметало придруживања ме овде за тренутак. 850 00:38:00,120 --> 00:38:01,830 Шта је са тобом у бордо мајици? 851 00:38:01,830 --> 00:38:02,335 Дођи горе. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Само један данас. 854 00:38:05,260 --> 00:38:06,251 Хвала, ипак. 855 00:38:06,251 --> 00:38:08,000 У реду, и ми имамо долази ко овде? 856 00:38:08,000 --> 00:38:08,660 Како се зовеш? 857 00:38:08,660 --> 00:38:09,360 >> ПРЕДСЕДНИК 4: Лаура. 858 00:38:09,360 --> 00:38:09,740 >> ПРЕДСЕДНИК 1: Лаура. 859 00:38:09,740 --> 00:38:10,370 Дођи горе. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Дакле Лаура, врло једноставно изазов данас. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Драго ми је да упознам ио. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 У реду. 866 00:38:16,910 --> 00:38:21,179 Дакле, имамо мало млека овде и имамо неки сок од поморанџе овамо 867 00:38:21,179 --> 00:38:23,345 и неке шоље које смо позајмљена од Анненберг данас. 868 00:38:23,345 --> 00:38:24,178 >> ПРЕДСЕДНИК 4: позајмио. 869 00:38:24,178 --> 00:38:27,240 ПРЕДСЕДНИК 1: И ићи напред и дати вам пола чаше ово. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 У реду. 872 00:38:28,800 --> 00:38:30,750 А ми ћемо вам дати пола чашу млека. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Ох, и само тако да можете сећате шта је то било као, 875 00:38:35,890 --> 00:38:38,860 Сетила сам се да донесе То се и данас. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Ок. 878 00:38:42,530 --> 00:38:45,470 Ако вам не би сметало, да видимо, ми смо може да их стави у своје наочаре 879 00:38:45,470 --> 00:38:46,560 ако желите. 880 00:38:46,560 --> 00:38:48,710 То ће бити свет из Лауриним очију. 881 00:38:48,710 --> 00:38:49,210 У реду. 882 00:38:49,210 --> 00:38:53,820 Дакле, ваш циљ, с обзиром две шоље течност овде, млеко и сок од поморанџе, 883 00:38:53,820 --> 00:38:58,370 се замени два садржаје тако да сок од поморанџе иде у млеко шољу 884 00:38:58,370 --> 00:39:00,710 а млеко иде у сок од поморанџе чаша. 885 00:39:00,710 --> 00:39:02,359 >> ПРЕДСЕДНИК 4: Да ли добити још једну шољу? 886 00:39:02,359 --> 00:39:05,650 ПРЕДСЕДНИК 1: Драго ми је што питао, мада било би много боље снимак 887 00:39:05,650 --> 00:39:06,710 ако не тражили. 888 00:39:06,710 --> 00:39:10,620 Али да, можемо да Вам понудимо трећи чаша да је празна, наравно. 889 00:39:10,620 --> 00:39:11,120 У реду. 890 00:39:11,120 --> 00:39:12,300 Так своп садржај тамо. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Врло лепо. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Врло добро. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Ви то радите изузетно пажљиво. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 И Трећи корак. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 У реду. 901 00:39:31,350 --> 00:39:31,930 Одлична. 902 00:39:31,930 --> 00:39:33,930 Велики аплауз би било добро за Лаура. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 У реду. 905 00:39:37,000 --> 00:39:40,790 Имамо мали поклон за растанак за вас, али дозволите ми да ово. 906 00:39:40,790 --> 00:39:42,620 Хвала вам пуно. 907 00:39:42,620 --> 00:39:46,170 Тако једноставан пример, међутим, да покаже да ако радите 908 00:39:46,170 --> 00:39:48,300 желите да замените садржај два контејнера, 909 00:39:48,300 --> 00:39:52,360 или да их назовемо варијабле, ти треба привремено складиштење 910 00:39:52,360 --> 00:39:56,710 да изведе један од садржаја у тако које се могу урадити замену. 911 00:39:56,710 --> 00:40:01,790 Дакле заиста, овај код извор овде у Ц је представник управо то. 912 00:40:01,790 --> 00:40:06,340 Ако је сок од поморанџе и млеко била Б, а ми смо желели да мењате два, 913 00:40:06,340 --> 00:40:08,990 можете да пробате нешто креативно сипањем један у други, 914 00:40:08,990 --> 00:40:11,031 али то вероватно не би завршити посебно добро. 915 00:40:11,031 --> 00:40:15,260 Па ми користимо трећи Цуп, позив то тмп, Т-М-П по обичају, 916 00:40:15,260 --> 00:40:19,370 и ставио садржај ОЈ у томе, онда замените једну шољу, 917 00:40:19,370 --> 00:40:22,610 затим ставити у ОЈ Оригинал Цуп, тиме 918 00:40:22,610 --> 00:40:25,320 постизање, баш као што Лаура урадио, замену. 919 00:40:25,320 --> 00:40:26,850 >> Па хајде да управо то. 920 00:40:26,850 --> 00:40:30,110 Пусти ме само напред и отворите уп пример који је 921 00:40:30,110 --> 00:40:32,720 заправо зове "не свап ", јер то није 922 00:40:32,720 --> 00:40:36,180 као једноставно урадити као што мислите. 923 00:40:36,180 --> 00:40:41,190 Дакле, у овом програму, приметићете да Ја користим стдио.х, наш стари пријатељ. 924 00:40:41,190 --> 00:40:43,130 Имам прототип За свап тамо, што 925 00:40:43,130 --> 00:40:45,450 значи његова примена је Вероватно доле, 926 00:40:45,450 --> 00:40:48,050 и да видимо шта је то главни Програм ће да уради за мене. 927 00:40:48,050 --> 00:40:52,020 Први пут сам изјављујем инт к добија један, а инт и добија два. 928 00:40:52,020 --> 00:40:54,930 Тако да мислим да од оних који су ОЈ и млеко, респективно. 929 00:40:54,930 --> 00:40:57,100 И онда сам само иф рекавши к је ово 930 00:40:57,100 --> 00:41:00,120 и и је то, само тако могу визуелно види шта се дешава. 931 00:41:00,120 --> 00:41:03,810 Онда сам принтф тврдим да ја замене двоје, 932 00:41:03,810 --> 00:41:07,100 а онда одштампате тврде да они заменили, 933 00:41:07,100 --> 00:41:09,300 и ја одштампате Кс и И поново. 934 00:41:09,300 --> 00:41:13,010 Дакле, овде у свап тачно шта Лаура урадио, 935 00:41:13,010 --> 00:41:16,240 и управо оно што смо видели на екран малопре. 936 00:41:16,240 --> 00:41:19,380 >> Па идемо напред и бити крајње разочаран. 937 00:41:19,380 --> 00:41:24,690 Да не буде замену, и покренете никакву замену, зумирањем на излазу овде. 938 00:41:24,690 --> 00:41:28,320 Улаз к је 1, и је 2, замене заменили. 939 00:41:28,320 --> 00:41:32,700 к је још увек 1, а и је још увек 2. 940 00:41:32,700 --> 00:41:37,630 Дакле, иако, искрено, ово изгледа исто као, мада више технички, 941 00:41:37,630 --> 00:41:40,730 шта Лаура урадио, није изгледа да ради. 942 00:41:40,730 --> 00:41:42,130 Па зашто је то тако? 943 00:41:42,130 --> 00:41:46,630 Па, испоставило се да када пишемо програм овако 944 00:41:46,630 --> 00:41:51,590 који је оба главна, истакао овде а затим још један функција, као што свап, 945 00:41:51,590 --> 00:41:54,230 истакао овде, што позива, свет 946 00:41:54,230 --> 00:41:57,030 изгледа нешто попут ови тацне малопре. 947 00:41:57,030 --> 00:42:00,440 Када је главни први буде звао, то је као да питате оперативни систем 948 00:42:00,440 --> 00:42:04,030 за мало меморије за било која локална варијабле као што су кии да је главни има, 949 00:42:04,030 --> 00:42:05,660 и они завршавају тамо. 950 00:42:05,660 --> 00:42:10,920 Али, ако главни позиви замените, а главни прелази да замени два аргумента, А и Б, 951 00:42:10,920 --> 00:42:16,410 Сок од поморанџе и млеко, није да предаје сок од наранџе и млеко 952 00:42:16,410 --> 00:42:17,500 Лаури. 953 00:42:17,500 --> 00:42:21,300 Шта компјутер ради, то је пролази копије сока од поморанџе 954 00:42:21,300 --> 00:42:27,110 и копије млека за Лаура, тако да оно што је у крајњој линији унутар ове фиоке 955 00:42:27,110 --> 00:42:32,510 је један вредност и два, или ОЈ и млека, али њихове копије, 956 00:42:32,510 --> 00:42:34,790 тако да у овом тренутку у причи, ту 957 00:42:34,790 --> 00:42:36,930 је ОЈ и млеко у свакој од ових носача. 958 00:42:36,930 --> 00:42:39,260 Постоји један и два У сваком од ових тацне, 959 00:42:39,260 --> 00:42:41,720 а свап функција заиста ради. 960 00:42:41,720 --> 00:42:46,090 Их је унутра сваппинг на другом највишем фиоке, 961 00:42:46,090 --> 00:42:48,147 али да нема утицаја Сваппинг. 962 00:42:48,147 --> 00:42:49,980 И на основу само неке Основни принцип имамо 963 00:42:49,980 --> 00:42:52,970 говорио о раније, и заиста Пре само неколико минута, шта 964 00:42:52,970 --> 00:42:58,770 би могло да објасни зашто мења А и Б унутар своп 965 00:42:58,770 --> 00:43:05,560 нема никакав утицај на к и и, иако Прошао сам Кс и И за своп функцију. 966 00:43:05,560 --> 00:43:08,750 Шта је кључна реч овде да Можда упрошћено објаснити? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Мислим да сам чуо овде? 969 00:43:12,627 --> 00:43:13,335 Публика: Повратак. 970 00:43:13,335 --> 00:43:14,085 ПРЕДСЕДНИК 1: Повратак? 971 00:43:14,085 --> 00:43:14,590 Не врати. 972 00:43:14,590 --> 00:43:15,895 Идемо са једним другим. 973 00:43:15,895 --> 00:43:16,395 Шта је то? 974 00:43:16,395 --> 00:43:17,080 >> ПУБЛИКА: [неразумљиво]. 975 00:43:17,080 --> 00:43:20,000 >> ПРЕДСЕДНИК 1: У реду, тако да смо могли ретурн-- да повратак рад у причи, 976 00:43:20,000 --> 00:43:21,914 али постоји још једноставније објашњење. 977 00:43:21,914 --> 00:43:22,580 Публика: Обим. 978 00:43:22,580 --> 00:43:23,288 ПРЕДСЕДНИК 1: Обим. 979 00:43:23,288 --> 00:43:24,300 Узећу обима. 980 00:43:24,300 --> 00:43:27,290 Дакле обим, сећате где прогласио наш Кс и И. 981 00:43:27,290 --> 00:43:30,840 Они проглашен унутра главних одмах овде. 982 00:43:30,840 --> 00:43:33,200 А и Б, у међувремену, су ефективно прогласио 983 00:43:33,200 --> 00:43:35,930 унутар замене, не баш у великих заграда, али и даље 984 00:43:35,930 --> 00:43:37,690 у општем подручју свап. 985 00:43:37,690 --> 00:43:40,560 И тако заиста, и б постоје само у оквиру ове фиоке 986 00:43:40,560 --> 00:43:44,850 од Анненберг, ово Други комад кода. 987 00:43:44,850 --> 00:43:49,500 Дакле, ми смо заиста мења копију, али то није баш све то корисно. 988 00:43:49,500 --> 00:43:52,190 >> Па хајде да погледамо ово мало нижи ниво. 989 00:43:52,190 --> 00:43:55,430 Идем да се вратим у Извор Дирецтори, 990 00:43:55,430 --> 00:43:58,330 а ја ћу се прво зоом овде, и само 991 00:43:58,330 --> 00:44:02,290 да потврди да сам у овом већи прозор терминала, 992 00:44:02,290 --> 00:44:04,430 Програм је и даље понашају тако. 993 00:44:04,430 --> 00:44:06,840 Претпоставимо сада да је ово није намерно. 994 00:44:06,840 --> 00:44:10,090 Јасно сам желео да своп рад, тако да изгледа као бубу. 995 00:44:10,090 --> 00:44:12,780 Сада сам могао да почне додавање Много принтф да мој код, 996 00:44:12,780 --> 00:44:16,010 штампања к овамо, и преко овде, овамо, б овамо. 997 00:44:16,010 --> 00:44:18,220 Али искрено, то је вероватно оно сте радили за пар недеља 998 00:44:18,220 --> 00:44:20,190 сада, у радног времена и код куће у раду 999 00:44:20,190 --> 00:44:22,150 на псетс покушавају да пронађу неке грешке. 1000 00:44:22,150 --> 00:44:25,560 Али ви ћете видети, ако не већ имате, да је проблем поставити три вас уводи 1001 00:44:25,560 --> 00:44:31,630 до команде зове ГДБ, где ГДБ, ГНУ дебуггер, 1002 00:44:31,630 --> 00:44:34,040 је себи гомилу особине које заправо може 1003 00:44:34,040 --> 00:44:38,160 хајде да разумемо ситуацију овако, али више убедљив, 1004 00:44:38,160 --> 00:44:39,940 решавају проблеме и пронађу грешке. 1005 00:44:39,940 --> 00:44:40,940 Па ћу да урадим. 1006 00:44:40,940 --> 00:44:44,770 Уместо ./носвап, ја сам уместо тога ће се покренути гдб ./носвап. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Другим речима, ја ћу да водим Програм не басх, наш нови пријатељ 1009 00:44:51,200 --> 00:44:51,850 данас. 1010 00:44:51,850 --> 00:44:53,970 Ја ћу да водим Програм носвап инсиде 1011 00:44:53,970 --> 00:44:56,900 овог другог програма под називом ГДБ, што је дебуггер, која 1012 00:44:56,900 --> 00:45:01,035 је програм који је дизајниран да помогне ти људи пронашли и уклонили грешке. 1013 00:45:01,035 --> 00:45:03,410 Дакле, ако сам погодио Трчи овде, ту је Огромна количина текста 1014 00:45:03,410 --> 00:45:04,868 да ли заиста не морате да чита. 1015 00:45:04,868 --> 00:45:07,290 То у суштини је сметња из линији која 1016 00:45:07,290 --> 00:45:10,030 Идем да удари Цонтрол-Л да устане на врху тамо. 1017 00:45:10,030 --> 00:45:11,800 То је ГДБ брз. 1018 00:45:11,800 --> 00:45:15,550 Ако желим да покренем овај програм сада, као овај мали Цхеат Схеет на данашњој 1019 00:45:15,550 --> 00:45:21,860 Слиде сугерише, Рун је први команде да ми треба да се уведе. 1020 00:45:21,860 --> 00:45:25,150 И ја само ћу да куцате рун овде унутар ГДБ, 1021 00:45:25,150 --> 00:45:26,811 и заиста је водио мој програм. 1022 00:45:26,811 --> 00:45:29,310 Сада постоји нека додатна излази екрана овако, 1023 00:45:29,310 --> 00:45:31,910 али то је само бити ГДБ анални и да нам кажете шта се дешава. 1024 00:45:31,910 --> 00:45:34,451 Ви стварно не морају да брину о овим детаљима сада. 1025 00:45:34,451 --> 00:45:36,890 Али оно што је заиста кул Абоут ГДБ, ако урадим ово Поново: 1026 00:45:36,890 --> 00:45:42,100 Контрола-Л брише сцреен-- пусти ме напред и тип "бреак главни," тиме, 1027 00:45:42,100 --> 00:45:45,743 када сам ударио Ентер, постављање шта је назвао пауза тачка у носвап.ц, 1028 00:45:45,743 --> 00:45:51,270 ред 16, где се ГДБ схватио мој програм заиста 1029 00:45:51,270 --> 00:45:53,070 је, моја функција је заправо. 1030 00:45:53,070 --> 00:45:55,070 То ћемо игнорисати за сада али то је адреса 1031 00:45:55,070 --> 00:45:57,310 у знак сећања посебно ове функције. 1032 00:45:57,310 --> 00:46:00,240 Тако да сада када тип трчим, приметити шта је кул овде. 1033 00:46:00,240 --> 00:46:05,650 Мој програм прекида на линији И Рекао ГДБ да паузирате извршење у. 1034 00:46:05,650 --> 00:46:09,850 Тако да не морам да сада промени своју шифру, додати неке принтф'С, рекомпајлирате га, реприза 1035 00:46:09,850 --> 00:46:13,300 га, промени, додати принтф'С, сачувајте га, рекомпајлирате га, покрените га. 1036 00:46:13,300 --> 00:46:18,100 Ја само да ходам кроз моју програм корак по корак по корак у људском брзином, 1037 00:46:18,100 --> 00:46:20,880 не у Интел-инсиде врсте брзине. 1038 00:46:20,880 --> 00:46:24,580 >> Тако да сада приметили ову линију појављује овде, а ако се вратим 1039 00:46:24,580 --> 00:46:27,800 мом програму у гедит, приметити да је то у ствари 1040 00:46:27,800 --> 00:46:29,280 први линија кода. 1041 00:46:29,280 --> 00:46:31,240 Постоји линија 16 у гедит. 1042 00:46:31,240 --> 00:46:34,610 Постоји ред 16 унутар ГДБ, и чак иако овој црној и белој интерфејс 1043 00:46:34,610 --> 00:46:37,760 није ни приближно као корисник пријатељски, то значи 1044 00:46:37,760 --> 00:46:41,680 да је линија 16 није извршена још увек, али ради се о бити. 1045 00:46:41,680 --> 00:46:46,220 Па заиста, ако куцам принт Кс, не принтф, само принт к, 1046 00:46:46,220 --> 00:46:50,730 Ја се мало лажне вредности постоји нула, јер к још није покренут. 1047 00:46:50,730 --> 00:46:54,760 Па ћу да куцате Следеће, или, ако Желим да будем фенси, само н за следећи. 1048 00:46:54,760 --> 00:46:59,090 Али када сам тип Следеће ући, сад приметити креће на линији 17. 1049 00:46:59,090 --> 00:47:02,840 Дакле логично, ако сам погубљен линија 16 и сада типа штампања Кс, 1050 00:47:02,840 --> 00:47:03,640 Шта би требало да видим? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Оне. 1053 00:47:05,520 --> 00:47:07,820 >> А сада ово је додуше збуњујуће. 1054 00:47:07,820 --> 00:47:11,260 $ 2 је само фенси начин, ако вас желе да се односи на те вредности касније, 1055 00:47:11,260 --> 00:47:12,510 можете рећи "долар потписати два." 1056 00:47:12,510 --> 00:47:13,480 То је као леђа референце. 1057 00:47:13,480 --> 00:47:14,570 Али за сада, само га игнорисати. 1058 00:47:14,570 --> 00:47:17,070 Оно што је интересантно је оно што је на десној страни знака једнакости. 1059 00:47:17,070 --> 00:47:21,000 А сада, ако ми се следеће откуца поново и Принт и, треба да видим 2. 1060 00:47:21,000 --> 00:47:23,870 Такође сада штампати к опет, и искрено, 1061 00:47:23,870 --> 00:47:27,130 ако сам све мало збуњен да где сам, могу типа листе за листу 1062 00:47:27,130 --> 00:47:30,590 и да видимо неке контекст око поента Ја сам заправо у. 1063 00:47:30,590 --> 00:47:35,180 И сада могу да куцате Следеће, а ту к је 1. 1064 00:47:35,180 --> 00:47:36,300 Сада куцам следећи. 1065 00:47:36,300 --> 00:47:37,710 Ох, и је 2. 1066 00:47:37,710 --> 00:47:40,750 И опет, то је збуњујуће, јер гдб је излаз 1067 00:47:40,750 --> 00:47:43,044 се измешани са мојим излазом. 1068 00:47:43,044 --> 00:47:45,710 Али ако имате на уму, по гледајући назад на вашем коду 1069 00:47:45,710 --> 00:47:47,740 или полагању страну од стране можда, ти ћеш 1070 00:47:47,740 --> 00:47:51,020 видим да стварно сам само одскочна кроз мој програм. 1071 00:47:51,020 --> 00:47:54,620 >> Већ приметили шта се даље дешава, буквално. 1072 00:47:54,620 --> 00:47:56,380 Ево ред 22. 1073 00:47:56,380 --> 00:48:01,315 Пусти ме да идем преко њега, тиме идемо даље до 23., а ако сам одштампате Кс сада, још увек један. 1074 00:48:01,315 --> 00:48:03,890 И ако сам и одштампате сада, још увек један. 1075 00:48:03,890 --> 00:48:05,820 Дакле, ово није корисна вежба. 1076 00:48:05,820 --> 00:48:07,450 Па хајде да редо ово. 1077 00:48:07,450 --> 00:48:10,069 Пусти ме да се вратим до врх и тип Рун поново. 1078 00:48:10,069 --> 00:48:12,110 И то каже програм који је већ био дебуггед 1079 00:48:12,110 --> 00:48:14,109 је већ почела, почео од почетка. 1080 00:48:14,109 --> 00:48:15,420 Да, хајде да поновимо ово. 1081 00:48:15,420 --> 00:48:22,000 И овај пут ћемо урадити следеће, Следеће, Нект, Нект, Нект, 1082 00:48:22,000 --> 00:48:24,180 али сада се ствари занимљив. 1083 00:48:24,180 --> 00:48:27,760 Сада желим да ступи у свап, тако да не типа следећи. 1084 00:48:27,760 --> 00:48:34,380 Куцам корак, а сада га приметити ме је скочио на носвап.ц линију 33. 1085 00:48:34,380 --> 00:48:37,240 Ако се вратим у гедит, шта је линија 33? 1086 00:48:37,240 --> 00:48:40,500 То је први стварни линија кода унутар свап. 1087 00:48:40,500 --> 00:48:44,150 Што је лепо, јер сада могу врста џаку около и добити радознали 1088 00:48:44,150 --> 00:48:46,052 о томе шта се дешава заиста тамо. 1089 00:48:46,052 --> 00:48:46,760 Дозволите ми принт тмп. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Вау. 1092 00:48:48,800 --> 00:48:51,438 Зашто тмп имају неке Црази, лажно смеће вредност? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 ПУБЛИКА: То није покренут. 1095 00:48:56,120 --> 00:48:57,150 ПРЕДСЕДНИК 1: То није покренут. 1096 00:48:57,150 --> 00:49:00,270 И заиста, када покренете програм, сте дали гомилу меморије 1097 00:49:00,270 --> 00:49:03,392 оперативни систем, али ви нису иницијализовани никакве вредности, 1098 00:49:03,392 --> 00:49:05,600 тако да шта год да сте бита видим овде, иако је 1099 00:49:05,600 --> 00:49:07,770 Ова луда велики негативни број, само значи 1100 00:49:07,770 --> 00:49:10,750 да су то остаци из неке претходне употребе тог РАМ, 1101 00:49:10,750 --> 00:49:13,050 иако нисам себи да је потребно још. 1102 00:49:13,050 --> 00:49:17,086 Па сад ћу да наставим и тип Даље, и ако ја сада типа штампања ТМП, 1103 00:49:17,086 --> 00:49:17,835 Шта би требало да видим? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Без обзира вредност је, је први аргумент, само 1106 00:49:23,360 --> 00:49:25,550 као што Кс је први ствар се донет, 1107 00:49:25,550 --> 00:49:30,450 тако и к треба да буде исти, па принт тмп треба да ми принт један. 1108 00:49:30,450 --> 00:49:36,360 >> Дакле, шта ћете видети у сету проблема три је туторијал од врста на ГДБ, 1109 00:49:36,360 --> 00:49:40,020 али схватају да је ово почетак од погледате алат који ће заправо 1110 00:49:40,020 --> 00:49:42,774 вам помоћи у решавању проблема много ефикасније. 1111 00:49:42,774 --> 00:49:44,690 Оно што смо на крају смо урадити у среду 1112 00:49:44,690 --> 00:49:48,180 се почињу да ољуштити уназад неколико слојева и уклоните неке точкове обуке. 1113 00:49:48,180 --> 00:49:50,496 Та ствар се зове стринг који смо се користи за неко време, 1114 00:49:50,496 --> 00:49:53,370 ћемо полако одузети од тебе и почну да причају о 1115 00:49:53,370 --> 00:49:55,725 нешто више есотерицалли познат као цхар *, 1116 00:49:55,725 --> 00:49:59,550 али ми ћемо да радимо овај лепо и нежно на први, иако показивача, 1117 00:49:59,550 --> 00:50:02,730 јер они звали, може да уради нешто Веома лоше ствари, ако злостављана, 1118 00:50:02,730 --> 00:50:06,040 гледајући мало Цлаиматион из наш пријатељ Ницк Парланте из Станфорд 1119 00:50:06,040 --> 00:50:09,670 Универзитет, професор у рачунару наука који заједно овај преглед 1120 00:50:09,670 --> 00:50:11,075 онога што долази ове среде. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [ВИДЕО РЕПРОДУКЦИЈА] 1123 00:50:13,400 --> 00:50:13,900 Хеј, Бинки. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Пробудити. 1126 00:50:15,780 --> 00:50:17,240 Време је за забаву показивача. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> Шта је то? 1129 00:50:19,350 --> 00:50:21,150 Сазнајте више о тројке? 1130 00:50:21,150 --> 00:50:22,050 Ох, добро! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [ЕНД ВИДЕО РЕПРОДУКЦИЈА] 1133 00:50:23,730 --> 00:50:25,396 ПРЕДСЕДНИК 1: То те чека у среду. 1134 00:50:25,396 --> 00:50:26,440 Ми ћемо се онда. 1135 00:50:26,440 --> 00:50:27,106 [ВИДЕО РЕПРОДУКЦИЈА] 1136 00:50:27,106 --> 00:50:30,420 -А Сада, Дееп Тхоугхтс, од Давен Фарнхам. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> Зашто смо учење Ц? 1139 00:50:35,900 --> 00:50:36,785 Зашто не +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [СМЕХ] 1142 00:50:40,910 --> 00:50:42,160 >> [ЕНД ВИДЕО РЕПРОДУКЦИЈА]