1 00:00:00,000 --> 00:00:12,040 >> [МУЗЫКА ГУЛЯЕ] 2 00:00:12,040 --> 00:00:16,460 >> СПІКЕР 1: Добра, гэта CS50, і гэта пачатак чацвёртай тыдні, 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 за памылкі ў праграму, Мова праграмавання называецца Bash. 6 00:00:27,100 --> 00:00:32,729 Гэта было цудоўна фірмовых як Shellshock, або Баш дзверы, 7 00:00:32,729 --> 00:00:35,485 але такія артыкулы, як гэта не былі рэдкасцю. 8 00:00:35,485 --> 00:00:38,807 І на самай справе, многія з іх прыносяць ўспаміны пра Heartbleed, 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 нават калі вы не разумееце, што гэта ўсё аб, чулі пра Shellshock? 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 Так што ж такое памылка, было назву Shellshock, і для чаго гэта трэба? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Ну, Shellshock таксама вядомы як Bash памылка, праграмнае забеспячэнне яна выкарыстоўвае. 25 00:01:28,910 --> 00:01:33,230 Хакеры выкарыстаюць вірус для сканавання ўразлівыя сістэмы, якія працуюць Linux і Unix 26 00:01:33,230 --> 00:01:36,300 аперацыйных сістэм, а затым заразіць іх. 27 00:01:36,300 --> 00:01:38,730 Bash з'яўляецца абалонкай каманднага радка. 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 хоць Shellshock змяняе, што. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Ну, worringly, некаторыя аналітыкі папярэдзіць гэта можа быць вялікая пагроза, 34 00:01:57,910 --> 00:02:01,580 таму Shellshock дазваляе поўнае кантроль заражанай машыны, 35 00:02:01,580 --> 00:02:06,030 у той час як Heartbleed дапускаецца толькі хакеры, каб шпіёніць за кампутарамі. 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 з усіх вэб-сервераў, па меншай рызыка, у тым ліку некаторых кампутарах Mac. 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 На самай справе, мяне адпусцілі ў наша CS50 прыбор. 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 у Gedit для таго, каб пісаць праграмы, ўводзіць каманды, і гэтак далей, 68 00:03:39,460 --> 00:03:43,690 і гэта на самай справе, і мае быў на працягу многіх тыдняў, Bash B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Гэта Bourne-Again Shell, , Які з'яўляецца проста мудрагелісты спосаб сказаць, 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 >> Але Bash таксама праграмаванне мова ў наступным сэнсе. 76 00:04:01,320 --> 00:04:05,460 Вы ведаеце, што ёсць каманды, як кд і Ls, а таксама ляск і іншыя, 77 00:04:05,460 --> 00:04:09,580 але вы можаце вызначыць свае ўласныя каманды шляхам ўкаранення іх у Bash. 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 Але калі я хачу, каб праграма называецца "прывітанне" у Bash або ў маім запрашэнні, 85 00:04:26,030 --> 00:04:30,810 Я магу на самой справе выкарыстаць сінтаксіс вось зусім як C. Гэта не зусім тое ж самае, 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 Вы можаце на самой справе пісаць Праграма, не ў C, не ў Java, 89 00:04:40,960 --> 00:04:44,280 не ў іншым праграмавання мову, але і ў самой Bash. 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 Як у баку, вы таксама можаце зрабіць задавальненне рэчы, і на самай справе, нават на Mac OS, 93 00:04:54,010 --> 00:04:55,620 гэта праграма пад назвай Terminal. 94 00:04:55,620 --> 00:04:58,800 Ён пастаўляецца убудаваная ў нічые кампутар, які мае Mac у гэтым пакоі, 95 00:04:58,800 --> 00:05:03,640 і вы можаце зрабіць тое ж самае ў Mac АС, але вы можаце пайсці больш за што. 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 маленькай гульні я гуляў з адным з былых TFs CS50 ў 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 спіс змесціва яго directory-- 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 Гэта, як правіла, было нешта больш падобна на that-- 110 00:05:36,894 --> 00:05:37,560 [АЎДЫЁ Прайграванне] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 СПІКЕР 1: --that я would-- так што яго кампутар будзе 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 можа мець нешта накшталт Bash. 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 валодаць Mac, літаральна прама зараз калі ў вас ёсць вечка адкрыта, 124 00:06:10,448 --> 00:06:12,940 Вы можаце паспрабаваць ўвесці ў тым, што Праграма называецца Тэрмінал. 125 00:06:12,940 --> 00:06:15,410 Тэрмінал знаходзіцца пад Прыкладання Utilities-- 126 00:06:15,410 --> 00:06:18,790 на гэты раз, карыстальнікі Windows, не павінны турбавацца аб дадзеным threat-- 127 00:06:18,790 --> 00:06:22,310 але тыя з вас з Macs можаце ўвесці гэта ў акно, як я зраблю тут, 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 Такім чынам, ёсць некаторыя сінтаксіс, які выглядае крыху знаёмыя, па меншай меры, ад C 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 Іншы коскі, Баш -c:. 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 таму што ёсць памылка ў Bash якой хоць Bash павінен быў спыніць 155 00:07:44,290 --> 00:07:48,980 Чытанне радкоў з каманднага правы там пасля жоўтым тэкстам, 156 00:07:48,980 --> 00:07:52,520 для 20-плюс-гадовага памылкі, Bash фактычна чытаў 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 -r адбываецца з выгляду рэкурсіўны, што азначае, калі тое, што вы выдаляеце 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 І -f з'яўляецца горшым з усіх. 175 00:08:31,040 --> 00:08:32,580 Кожны ведае, што -f азначае тут? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Force. 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 або каманда E-mail або каманда Капіяваць. 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 Ну, ёсць шмат кампутараў на інтэрнэт праточнай Bash. 195 00:09:24,300 --> 00:09:26,390 Усе карыстальнікі нам Mac сярод іх. 196 00:09:26,390 --> 00:09:30,390 Шмат сервераў Linux з'яўляюцца аднымі ім таксама, і серверы Unix. 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 а на самай справе Linux з'яўляецца, бадай, самая папулярная аперацыйная сістэма 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 Вы адпраўляеце запыт ад Ваш browser-- Chrome, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- на выдалены сервер, 205 00:09:50,790 --> 00:09:53,730 атрымліваецца, што нават пры тым, Вы толькі што ўвялі www.example.com, 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 да ўразлівай Mac або ўразлівыя сервер Linux, 213 00:10:17,270 --> 00:10:21,580 Самае смешнае, што Bash, што проста трохі каманднага радка, 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 даслаўшы то як User-Agent, які, як правіла, 218 00:10:36,370 --> 00:10:38,300 Мяркуецца сказаць Імя Вашага браўзэра. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent Інтэрнэт Правадыр, User-Agent Firefox, гэта 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 а затым былі яны ўсё адбываюцца, для Асобнік, на серверах Harvard.edu, 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 >> Так, карацей кажучы, амаль усё ў гэтым пакоі, хто валодае Mac 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 і калі вы не на самай справе настроены гэта каб нешта накшталт SSH ў яго, 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 Аднак Apple хутка быць абнаўленне папраўку для гэтага. 241 00:11:36,210 --> 00:11:39,660 Свет Linux ужо выпусціла шэраг выпраўленняў для Fedora і Ubuntu 242 00:11:39,660 --> 00:11:43,790 і іншыя версіі Linux, і на самай справе калі вы запусціце абнаўленне 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 і мы былі кампіляцыі ім з Clang. 280 00:13:27,820 --> 00:13:31,830 І вашым ведам, вы напісалі любыя праграмы для CS50, дзе ёсць 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 аб Clang ў кампілятар. 294 00:14:04,850 --> 00:14:08,360 Чаму нас давяраючы Clang на працягу апошніх двух-трох тыдняў? 295 00:14:08,360 --> 00:14:12,650 Хто можа сказаць, што той, хто пісаў Clang не было "калі" ўмова ў там 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 Мы маем такую ​​сістэмы гонар справа Цяпер, калі мы верым, што Clang з'яўляецца законным. 301 00:14:28,350 --> 00:14:30,000 Вы ўпэўненыя, што прыбор з'яўляецца законным. 302 00:14:30,000 --> 00:14:34,430 Вы ўпэўненыя, што літаральна кожная праграма на вашым Mac ці PC заслугоўвае даверу. 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 >> Цяпер з гэтым сказаў, Breakout. 311 00:14:55,570 --> 00:14:59,889 Так Breakout з'яўляецца праблема ўсталяваць тры, і Breakout гэта гульня ад мінулага 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 Так што гэта супрацоўнікі гатэля Рэалізацыя Breakout, 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 мы змаглі б вельмі хутка з нуля, і цяпер з C, 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 і сартавання праблемы ў PSET, куча кода, які мы напісалі, 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 >> А потым з Breakout, мы збіраемся зрабіць тое ж самае, 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 Так скарыстацца CS50, абмеркаваць працоўныя гадзіны і многае іншае, 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 >> Любыя пытанні па pset3, Кантузія, ці інакш? 362 00:17:15,810 --> 00:17:19,226 >> АЎДЫТОРЫЯ: Здавалася, ісці да канца з Breakout 363 00:17:19,226 --> 00:17:22,154 што код амаль аб'ектна-арыентаваны стыль, 364 00:17:22,154 --> 00:17:24,675 але я думаў, C быў Аб'ектна-арыентаваны праграмы. 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 мы пісалі для pset3, для тых, хто знаёмы, яго 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 мова, як C, але гэта канчатковым рахунку, усё працэдурны. 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 І мы ўбачым гэтую функцыю зноў калі мы дабяромся да PHP і JavaScript 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 І, шчыра кажучы, у рэальным сусветнай прасторы гэта days-- RAM, жорсткі дыск space-- 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 І першае, што Merge Сартаваць сказаў нам рабіць было што? 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 Ну, тое ж самае, але зараз тое, што было Трэці і ключавы крок у Merge Сартаваць? 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 алгарытму, як Merge Сартаваць, перамотка ў памяці. 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 Гэта вялікая O чаго? 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 Таму мы сказалі O (1), і гэта як я буду выказваць гэта. 500 00:22:49,960 --> 00:22:51,480 T, проста час працы. 501 00:22:51,480 --> 00:22:54,150 N з'яўляецца памер ўваходу, так Т (п), толькі мудрагелісты спосаб 502 00:22:54,150 --> 00:22:56,330 сказаць бег Час дадзена ўваход аб'ёму п 503 00:22:56,330 --> 00:23:00,220 будзе парадку сталай часу, у O (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 T чаго? 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 T чаго? 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 І тады гэта яшчэ адзін Т (N / 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 плюс O (п), што, верагодна, п крокаў, але можа быць, калі я выкарыстоўваю два пальцы, 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 Дазвольце мне ісці ў Gedit і прыняць паглядзім на некаторыя з сённяшняй зыходнага кода, 548 00:24:58,420 --> 00:24:59,930 У прыватнасці, гэты прыклад тут. 549 00:24:59,930 --> 00:25:03,709 Sigma 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 Такім чынам, вы вучыце Clang, эй, фактычна не ажыццяўляе гэта яшчэ, 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 Sigma. 564 00:25:27,540 --> 00:25:30,540 І гэта толькі абяцанне, што гэта будзе выглядаць наступным чынам. 565 00:25:30,540 --> 00:25:33,720 Гэта збіраецца заняць цэлае, як input-- і я магу быць больш відавочным 566 00:25:33,720 --> 00:25:36,570 і сказаць Int N --І гэта збіраецца вярнуць Int, 567 00:25:36,570 --> 00:25:39,900 але кропка з коскі азначае, мм, я абысці у рэалізацыі гэтага крыху пазней. 568 00:25:39,900 --> 00:25:40,989 Зноў жа, Clang з'яўляецца нямым. 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 для цэлага станоўчага колькасці, выкарыстоўваючы GetInt, і адзінае выйсце з гэтай завесы 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 Я абвясціць Int пад назвай "Адказ". 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 І тады я перадаю ў значэнне, якое карыстальнік ўводзіць у N, 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 Так што, калі я іду наперад і бегчы гэтая праграма, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 і я друкую ў станоўчым цэлае, як два, Sigma, 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 "Int" будзе тып якое вяртаецца. 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 Гэта was-- давайце не, давайце Нікс гэтую гісторыю. 633 00:28:29,370 --> 00:28:32,780 Я не задаць гэтае пытанне, таму што рызыка таго, што я, намякаючы на 634 00:28:32,780 --> 00:28:38,360 не адбудзецца, таму што я гэта заўсёды будзе быць больш than-- ОК, 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 У мяне абвешчаныя I ўнутры завесы, 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 Для цыклу, у той час як цыкл, Do Хоць цыкл, а проста раблю тое зноў 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 Што Sigma з аднаго або нуля, некаторыя вельмі малое значэнне, 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 але тое, што ключ, што ўнутры функцыі пад назвай Sigma, 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 Напрыклад, што, калі я першы складзены гэты, так што sigma-- 719 00:32:21,160 --> 00:32:22,710 зрабіць сігма 1 ./sigma-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 а затым гатовы ./sigma-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 Таму што ў канцы дзень Int яшчэ 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 аперацыйная сістэма, як Mac OS, Windows, або Linux, 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 Таму што лічу, пасля усё, how-- і, магчыма, 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 І мы не збіраемся выкарыстоўваць Рэкурсія усё, што многае ў CS50, 813 00:36:17,440 --> 00:36:20,780 але ў CS51, і сапраўды любы клас дзе вы маніпуляваць структуры дадзеных 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 знаёмыя з некаторымі з Google, ўнутры анекдоты, калі вы ідзяце ў Google 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 Калі вам таксама Google "крыва", апавяшчэнне нахіляючы галаву slightly-- 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 некалькі гадоў ago-- давай. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 О, wait-- гэта памылка. 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 як Shellshock, што ўжо пачалі, каб стаць 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 Так сапраўды, гэта зыходны код тут, у C з'яўляецца прадстаўніком менавіта гэта. 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 І таму мы выкарыстоўваем трэцюю шклянку, тэлефануйце гэта TMP, T-M-P па пагадненні, 916 00:40:15,260 --> 00:40:19,370 і змясціць змесціва OJ ў тым, што, то памяняць адну кубак, 917 00:40:19,370 --> 00:40:22,610 затым пакласці OJ ў Арыгінальны кубак, тым самым 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 Такім чынам, у гэтай праграме, заўважылі, што Я выкарыстоўваю stdio.h, наш стары сябар. 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 Я спачатку аб'явіць Int х атрымлівае адзін, і дзесятковага у атрымлівае два. 928 00:40:52,020 --> 00:40:54,930 Так думаць пра тых, як OJ і малако, адпаведна. 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 Тады я PRINTF сцвярджаючы што я перапампоўкі два, 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 гэта адно значэнне, і два ці OJ і малако, але іх копіі, 956 00:42:32,510 --> 00:42:34,790 так што на дадзены момант у гісторыі, ёсць 957 00:42:34,790 --> 00:42:36,930 гэта OJ і малако ў кожным з гэтых латкоў. 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 АЎДЫТОРЫЯ: Return. 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: Такім чынам, return-- мы маглі зрабіць зваротны працу ў гэтай гісторыі, 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 на psets, спрабуючы знайсці некаторыя памылкі. 1000 00:44:22,150 --> 00:44:25,560 Але вы ўбачыце, калі вы яшчэ гэтага не зрабілі, што праблема ўсталяваць тры знаёміць вас 1001 00:44:25,560 --> 00:44:31,630 на каманду пад назвай GDB, дзе GDB, GNU адладчык, 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 Замест ./noswap, я замест збіраецца запусціць GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Іншымі словамі, я збіраюся запускаць мае Праграма не ў Bash, наш новы сябар 1009 00:44:51,200 --> 00:44:51,850 сёння. 1010 00:44:51,850 --> 00:44:53,970 Я збіраюся запускаць мае Праграма noswap ўнутры 1011 00:44:53,970 --> 00:44:56,900 гэтай іншай праграме пад назвай GDB, які з'яўляецца адладчык, які 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 Я збіраюся ударыць Control-L ўставаць у верхняй там. 1017 00:45:10,030 --> 00:45:11,800 Гэта запрашэнне GDB. 1018 00:45:11,800 --> 00:45:15,550 Калі я хачу, каб запусціць гэтую праграму зараз, як гэты маленькі шпаргалку на сёння 1019 00:45:15,550 --> 00:45:21,860 слайд мяркуе, Run з'яўляецца першым Каманды, якія мы мелі на ўвазе ўвесці. 1020 00:45:21,860 --> 00:45:25,150 І я проста хачу, каб надрукаваць забягаюць сюды ўнутры GDB, 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 але гэта GDB проста быць анальны і кажа нам, што адбываецца. 1024 00:45:31,910 --> 00:45:34,451 Вы сапраўды не трэба турбавацца аб гэтых дэталях, прама цяпер. 1025 00:45:34,451 --> 00:45:36,890 Але тое, што сапраўды выдатна аб GDB, калі я зраблю гэта again-- 1026 00:45:36,890 --> 00:45:42,100 Control-L ачышчае screen-- адпусціць мяне наперад і тып "зламаць галоўны", тым самым, 1027 00:45:42,100 --> 00:45:45,743 калі я ударыў Enter, усталяваўшы, што гэта завецца кропкай перапынак у noswap.c, 1028 00:45:45,743 --> 00:45:51,270 радок 16, які з'яўляецца, дзе GDB высветлілі маю праграму на самай справе 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 Мая праграма разбівае на лініі I сказаў GDB, каб прыпыніць выкананне ст. 1034 00:46:05,650 --> 00:46:09,850 Так што я не павінен зараз змяніць свой код, дадаць PRINTF-х, перасабраць іх паўтор 1035 00:46:09,850 --> 00:46:13,300 яго, змяніць, дадаць некаторыя PRINTF-х, захаваць яго, перакампіляваць яго, запусціць яго. 1036 00:46:13,300 --> 00:46:18,100 Я магу проста хадзіць па маёй праграме крок за крокам за крокам у чалавечай хуткасцю, 1037 00:46:18,100 --> 00:46:20,880 ня на Intel-ўнутры віду хуткасці. 1038 00:46:20,880 --> 00:46:24,580 >> Так што цяпер заўважыць гэтую лінію з'яўляецца тут, і калі я вярнуся 1039 00:46:24,580 --> 00:46:27,800 у маёй праграме ў Gedit, заўважыць, што гэта на самай справе 1040 00:46:27,800 --> 00:46:29,280 Самая першая радок кода. 1041 00:46:29,280 --> 00:46:31,240 Там у лініі 16 ст Gedit. 1042 00:46:31,240 --> 00:46:34,610 Там у лініі 16 ст GDB, і нават хоць гэтага чорна-белага інтэрфейсу 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 і цяпер я друкую Print X, 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 І зноў, гэта збівае з толку, таму выхад GDB ў 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 Я друкую крок, і цяпер заўважаюць падскочыла мяне noswap.c лініі 33. 1085 00:48:34,380 --> 00:48:37,240 Калі я вяртаюся ў Gedit, што лінія 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 Дазвольце мне друкаваць TMP. 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 Чаму TMP ёсць некаторыя з розуму, падробленым значэнне смецце? 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 Так што цяпер я збіраюся ісці наперад і тып Наступны, і, калі я цяпер тыпу друку TMP, 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 так і х павінны быць такімі ж, так друкаваць TMP павінны надрукаваць мне адзін. 1108 00:49:30,450 --> 00:49:36,360 >> Так што вы ўбачыце ў праблемнай набору тры падручнік роду на GDB, 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 гледзячы на ​​невялікі Claymation ад наш сябар Нік Parlante з Стэнфорда 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 [END ВИДЕОВОСПРОИЗВЕДЕНИЕ] 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 -І Цяпер, Deep Thoughts, па Daven Фарнэме. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> Чаму мы вывучаем C? 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 >> [END ВИДЕОВОСПРОИЗВЕДЕНИЕ]