1 00:00:00,000 --> 00:00:12,040 >> [Zenelejátszás] 2 00:00:12,040 --> 00:00:16,460 >> SPEAKER 1: Rendben, ez CS50, és ez a négy hét elején, 3 00:00:16,460 --> 00:00:20,420 és lehet, hogy hallott vagy olvasni, a világ már véget. 4 00:00:20,420 --> 00:00:23,520 Megy az egész internet vetették tudás és tudatosság 5 00:00:23,520 --> 00:00:27,100 A hiba a programban, a programozási nyelv nevű Bash. 6 00:00:27,100 --> 00:00:32,729 Ezt csodálatosan márkás mint Shellshock, vagy a Bash ajtó, 7 00:00:32,729 --> 00:00:35,485 de olyan tárgyak, mint ezek a nem volt ritka. 8 00:00:35,485 --> 00:00:38,807 És valóban, sokan hozzák vissza emlékeit Heartbleed, 9 00:00:38,807 --> 00:00:41,640 amit lehet, hogy észrevette a nyomja vissza a múlt tavasszal, ami 10 00:00:41,640 --> 00:00:43,980 hasonlóképpen meglehetősen drámai. 11 00:00:43,980 --> 00:00:47,110 Most azoknak az itt ma, hányan vannak, 12 00:00:47,110 --> 00:00:50,330 akkor is, ha nem érti, mi ez az egész a, hallott Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Jól van, és hányan rendelkezik számítógéppel, amelyek leginkább kiszolgáltatottak? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, nem kell sokkal, sokkal több kéz fel most okokból fogjuk látni. 17 00:01:00,250 --> 00:01:02,580 >> Vessünk egy pillantást, mi van folyik a médiában 18 00:01:02,580 --> 00:01:05,304 majd magyarázni, hogy egy kicsit itt nekünk technikailag. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> Hangszóró 2: biztonsági szakértők arra figyelmeztetett, hogy egy komoly hibája lehetett 21 00:01:11,250 --> 00:01:15,650 körülbelül hatással száz milliói a világ internetes felhasználók. 22 00:01:15,650 --> 00:01:20,600 Szóval, mi is pontosan a hiba, hogy a már szinkronizált Shellshock, és mit csinál? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Nos, Shellshock is ismert, mint a Bash bug, a szoftver kihasználja. 25 00:01:28,910 --> 00:01:33,230 Hackerek használja a vírus átkutat sebezhető rendszerek Linux és Unix 26 00:01:33,230 --> 00:01:36,300 operációs rendszerek, majd megfertőzni azokat. 27 00:01:36,300 --> 00:01:38,730 Bash egy parancssori shell. 28 00:01:38,730 --> 00:01:43,460 Így a felhasználók a kérdést parancsokat, hogy indítson programok és szolgáltatások belül szoftver 29 00:01:43,460 --> 00:01:45,250 beírásával szöveg. 30 00:01:45,250 --> 00:01:49,980 Ez tipikusan a programozók, és nem lehet nyitott a világ felé, 31 00:01:49,980 --> 00:01:51,590 bár Shellshock megváltoztatja ezt. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Nos, worringly, egyes elemzők figyelmeztetnek, hogy lehet egy nagyobb fenyegetés, 34 00:01:57,910 --> 00:02:01,580 mert Shellshock lehetővé teszi a teljes irányítást a fertőzött gép, 35 00:02:01,580 --> 00:02:06,030 míg Heartbleed csak akkor engedélyezett hackerek, hogy kémkedjen a számítógépen. 36 00:02:06,030 --> 00:02:09,130 Ez annyira komoly, hogy már értékelte a 10-ből 10 37 00:02:09,130 --> 00:02:11,900 A súlyosság a Nemzeti Sebezhetőség adatbázis. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 az összes web szerverek a kockázat, beleértve néhány Mac számítógépeken. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Nos, győződjön meg róla, folt a rendszer most. 42 00:02:25,600 --> 00:02:29,330 Bárki, aki egy olyan honlap futó az érintett operációs rendszerek 43 00:02:29,330 --> 00:02:31,800 lépéseket kell tennie a lehető leghamarabb. 44 00:02:31,800 --> 00:02:35,390 Aki megengedheti magának, meg kell nézni azok ellenőrzése és a webes alkalmazások 45 00:02:35,390 --> 00:02:37,355 tűzfalak, hogy néz ki az esetleges támadásokat. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SPEAKER 3: A legrosszabb , ami történhet, 48 00:02:41,770 --> 00:02:45,080 hogy valaki írni a kódot, hogy az automatikusan megy és szkennelés 49 00:02:45,080 --> 00:02:48,280 az internet és az intézkedés befolyásolná az összes ilyen számítógépek. 50 00:02:48,280 --> 00:02:50,710 És ha mégis, nos, A legrosszabb dolog, amit tehet 51 00:02:50,710 --> 00:02:53,300 csak töröl mindent, vagy kapcsolja ki a helyszínek le. 52 00:02:53,300 --> 00:02:55,360 Így láttuk kár abból a szempontból, 53 00:02:55,360 --> 00:02:58,300 ahol mi lett volna a támadók aki csak úgy, hogy súlyos károkat okoznak 54 00:02:58,300 --> 00:03:02,534 azáltal, hogy a rendszer le vagy törlése kép, és hasonló dolgok. 55 00:03:02,534 --> 00:03:05,200 Hangszóró 2: Néhányan azt mondják, ez az egyik a leginkább nehezen mérhető 56 00:03:05,200 --> 00:03:08,080 hibák években, és azt eltarthat hetekig vagy akár 57 00:03:08,080 --> 00:03:10,820 hónap határozza meg a végső hatást. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> SPEAKER 1: Tehát minden, ami igaz, de a furcsa dolog az, hogy szinte minden 60 00:03:15,560 --> 00:03:18,330 A képek imént látott, kivéve talán a billentyűzet, 61 00:03:18,330 --> 00:03:20,930 semmi köze a hiba nélkül. 62 00:03:20,930 --> 00:03:23,960 Szerverek és vezetékek, és így tovább, Ez egyfajta érintőlegesen kapcsolódó, 63 00:03:23,960 --> 00:03:27,410 de a lényege ez valóban nagyon ismerős, mi folyik itt. 64 00:03:27,410 --> 00:03:30,050 Sőt, hadd menjen be a CS50 készülék. 65 00:03:30,050 --> 00:03:32,910 Hadd menjek előre, és maximalizálja a a terminál ablak itt. 66 00:03:32,910 --> 00:03:36,020 És ti is ezzel, vagy a beágyazott verzió cikkére, 67 00:03:36,020 --> 00:03:39,460 A gedit hogy programokat írni, parancsokat, és így tovább, 68 00:03:39,460 --> 00:03:43,690 és ez valójában, és volt, hogy a hét, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Ez a Bourne-again shell, ami csak egy divatos szóval, 70 00:03:46,890 --> 00:03:50,220 ez egy olyan program, amely a villogó azonnali, hatékony, 71 00:03:50,220 --> 00:03:51,970 hogy ül ott vár bemeneti neked. 72 00:03:51,970 --> 00:03:53,920 És ez a parancs vonal felület, amelyen keresztül 73 00:03:53,920 --> 00:03:57,650 srácok már futó parancsok és végül összeállítása, majd a futás 74 00:03:57,650 --> 00:03:58,400 programokat. 75 00:03:58,400 --> 00:04:01,320 >> De Bash is programozás nyelv a következő értelemben. 76 00:04:01,320 --> 00:04:05,460 Tudod, hogy vannak olyan parancsok, mint a cd és ls, valamint csengés és társai 77 00:04:05,460 --> 00:04:09,580 de akkor meg a saját parancsok által hajtja végre azokat Bash. 78 00:04:09,580 --> 00:04:11,420 Most már nem fog menni nagy részletességgel 79 00:04:11,420 --> 00:04:16,089 mivel a bash a programozási nyelv, de Tudod, például, hogy abban a pillanatban, 80 00:04:16,089 --> 00:04:17,607 nincs parancs a "helló". 81 00:04:17,607 --> 00:04:19,440 Így megtalálható egy ilyen csomag. 82 00:04:19,440 --> 00:04:20,856 Ez nincs telepítve a számítógépre. 83 00:04:20,856 --> 00:04:21,870 Kérdezze meg a rendszergazda. 84 00:04:21,870 --> 00:04:26,030 De ha azt akarom, hogy legyen a programban az úgynevezett "hello" a Bash vagy az én azonnali, 85 00:04:26,030 --> 00:04:30,810 Én ténylegesen használni szintaxist ez elég, mint C. Ez nem teljesen ugyanaz, 86 00:04:30,810 --> 00:04:35,020 de úgy néz ki, nagyon hasonlít a funkció, bár hiányzik néhány részletet. 87 00:04:35,020 --> 00:04:38,090 Semmi sem történik, de most, ha én írja: "Helló," 88 00:04:38,090 --> 00:04:40,960 akkor valóban levelet program nem a C, nem Java, 89 00:04:40,960 --> 00:04:44,280 nem egy másik programozás nyelv, de a Bash is. 90 00:04:44,280 --> 00:04:47,630 >> Most a legfontosabb az, hogy én írtam a nevet akartam adni az új parancs, 91 00:04:47,630 --> 00:04:50,820 és a zárójel is szimbolikus mivel ez a funkció. 92 00:04:50,820 --> 00:04:54,010 Mellesleg, akkor is csinálni szórakozás dolgok, sőt, még a Mac OS, 93 00:04:54,010 --> 00:04:55,620 ez a program neve Terminal. 94 00:04:55,620 --> 00:04:58,800 Jön épített senki számítógép, amely a Mac ebben a szobában, 95 00:04:58,800 --> 00:05:03,640 és meg tudod csinálni hasonló dolgokat Mac Operációs rendszer, de lehet menni még túl. 96 00:05:03,640 --> 00:05:07,110 És ez egy kicsit érintőleges, de ez a fajta szórakozás. 97 00:05:07,110 --> 00:05:09,715 Eszembe jutott ma reggel, amikor gondolta ezt végig, 98 00:05:09,715 --> 00:05:13,279 Egy kis játék, én is játszani az egyik CS50 egykori TF 99 00:05:13,279 --> 00:05:16,570 amellyel bármikor ő sétára a billentyűzet a képernyő kinyitotta, 100 00:05:16,570 --> 00:05:23,611 Szeretnék végre egy parancsot mint Ez-- "köszönni." 101 00:05:23,611 --> 00:05:26,610 És most minden alkalommal, amikor jött vissza a billentyűzet, miután elhagyta a képernyőt 102 00:05:26,610 --> 00:05:27,985 és ő ül le, próbálja meg egy kis munka, 103 00:05:27,985 --> 00:05:29,250 lista tartalmát a directory-- 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO LEJÁTSZÁS] 105 00:05:29,510 --> 00:05:30,010 >> Hello. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Helló. 108 00:05:32,120 --> 00:05:35,030 >> SPEAKER 1: Szóval, a tisztesség, hogy valójában nem a "hello". 109 00:05:35,030 --> 00:05:36,894 Ez általában valami inkább hasonlít hogy-- 110 00:05:36,894 --> 00:05:37,560 [AUDIO LEJÁTSZÁS] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 SPEAKER 1: --that I would-- így a számítógép is 113 00:05:39,320 --> 00:05:42,170 esküszik rá minden alkalommal, amikor valójában leült a billentyűzet. 114 00:05:42,170 --> 00:05:46,265 És nagyon hamar rájött, hogy ne hagyja a képernyő nyitva. 115 00:05:46,265 --> 00:05:48,730 De ez azt sugallja, hogy a fajta Az ostoba móka, amit 116 00:05:48,730 --> 00:05:50,210 lehet valami, mint a Bash. 117 00:05:50,210 --> 00:05:52,770 De ez egy kicsit komoly, az biztos, mint az. 118 00:05:52,770 --> 00:05:57,235 És valóban, ez az egyik a legveszélyesebb és tartós hiba 119 00:05:57,235 --> 00:05:58,860 hogy valóban elérje a világ globálisan. 120 00:05:58,860 --> 00:06:02,060 Ez a hiba már körülbelül közel 20 éve, 121 00:06:02,060 --> 00:06:05,780 és akkor kell találni csak egy pillanatról a viszonylagos egyszerűség. 122 00:06:05,780 --> 00:06:07,990 >> Tehát ez egy képviselő parancsot, hogy ha 123 00:06:07,990 --> 00:06:10,448 maga a Mac, a szó szoros értelmében most ha van a fedél nyitva van, 124 00:06:10,448 --> 00:06:12,940 akkor írd be, hogy nevű programot Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminál alatt Alkalmazások Utilities-- 126 00:06:15,410 --> 00:06:18,790 egyszer, a Windows felhasználóknak nem kell aggódni az adott threat-- 127 00:06:18,790 --> 00:06:22,310 de azoknak, a Mac beírhatja ez egy ablak, mint én itt csinálni, 128 00:06:22,310 --> 00:06:24,210 és ha típus hogy ebbe a programba 129 00:06:24,210 --> 00:06:28,830 az úgynevezett terminál, mint én megteszem most, ha úgy látja, a "sebezhető" 130 00:06:28,830 --> 00:06:32,200 a számítógép téve a kizsákmányolás. 131 00:06:32,200 --> 00:06:33,850 >> Most, mit jelent valójában? 132 00:06:33,850 --> 00:06:35,870 És ez kétségkívül néhány nagyon őrült szintaxis, 133 00:06:35,870 --> 00:06:39,050 de most legalább dolgozzon ki néhány érdekes eleme. 134 00:06:39,050 --> 00:06:42,567 Szóval van valami szintaxist úgy néz ki, egy kicsit ismerős, legalábbis a C 135 00:06:42,567 --> 00:06:43,950 és programozása általában. 136 00:06:43,950 --> 00:06:47,550 Látok néhány zárójel, pontosvesszővel kapcsos zárójelek, és az ilyen, 137 00:06:47,550 --> 00:06:50,820 de kiderül, hogy ez a hülye dolog itt sárga 138 00:06:50,820 --> 00:06:53,580 lényegében egy funkció hogy nem csinál semmit. 139 00:06:53,580 --> 00:06:57,840 A vastagbél eszköz nem tesz semmit, és a pontosvessző azt jelenti, abbahagyni semmit. 140 00:06:57,840 --> 00:07:00,250 Tehát belül ilyen kapcsos zárójelek, a tény 141 00:07:00,250 --> 00:07:02,440 hogy van egy azonos alá a bal, ez 142 00:07:02,440 --> 00:07:05,500 lényegében létrehozása a parancs, vagy a változó, 143 00:07:05,500 --> 00:07:09,520 hívott x, rendeli, hogy a sárga kis kód is. 144 00:07:09,520 --> 00:07:14,040 Ez lehet valami, mint a "visszhang hello "vagy" mondjuk beep "vagy valami 145 00:07:14,040 --> 00:07:15,120 hasonló ehhez. 146 00:07:15,120 --> 00:07:17,780 De figyeljük meg, ha a szemed vándorol tovább jobbra, 147 00:07:17,780 --> 00:07:22,150 van még, hogy ezt a vonalat, mint a csak a végén, hogy a pontosvessző. 148 00:07:22,150 --> 00:07:25,160 "Echo sebezhető", majd azon túl, hogy van még. 149 00:07:25,160 --> 00:07:26,530 Egy másik pontosvessző, bash C :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Tehát hosszú történet rövid, ebben a sorban a kód 152 00:07:34,050 --> 00:07:36,660 elegendő kényszerítő a számítógép, hogy a 153 00:07:36,660 --> 00:07:39,830 veszélyeztetett csinál valamit hogy akarod csinálni, 154 00:07:39,830 --> 00:07:44,290 mert van egy hiba a Bash, ahol noha Bash kellett volna, hogy hagyja abba 155 00:07:44,290 --> 00:07:48,980 olvasás vonalak parancs jog után ott a sárga szöveg, 156 00:07:48,980 --> 00:07:52,520 egy 20 plusz éves bug, Bash ténylegesen olvas 157 00:07:52,520 --> 00:07:56,780 azon túl, hogy pontosvessző és szép sok mit csinál azt mondta. 158 00:07:56,780 --> 00:07:59,070 >> Szóval mi a következménye Az, hogy végül? 159 00:07:59,070 --> 00:08:01,340 Csak azt mondtam, "echo hello" vagy "echo sebezhető" 160 00:08:01,340 --> 00:08:05,449 de mi van, ha nem valami valójában rosszindulatú, mint rm -rf * 161 00:08:05,449 --> 00:08:07,240 ami lehet, hogy nem valaha is gépelt korábban, 162 00:08:07,240 --> 00:08:08,920 és őszintén szólva valószínűleg ne túl hamar, 163 00:08:08,920 --> 00:08:10,700 mert meg tudod csinálni a Sok kárt vele. 164 00:08:10,700 --> 00:08:11,210 Miért? 165 00:08:11,210 --> 00:08:12,990 RM mit csinál, persze? 166 00:08:12,990 --> 00:08:14,270 Eltávolítja. 167 00:08:14,270 --> 00:08:15,930 * Mit jelent? 168 00:08:15,930 --> 00:08:16,430 All. 169 00:08:16,430 --> 00:08:18,180 Tehát ez egy úgynevezett wild card, tehát ez azt jelenti, 170 00:08:18,180 --> 00:08:20,410 töröl mindent az aktuális könyvtárban. 171 00:08:20,410 --> 00:08:23,379 -r történik jelent rekurzív, ami azt jelenti, ha az, amit te törlése 172 00:08:23,379 --> 00:08:26,420 egy könyvtár, és azon belül van az egyéb fájlok és más könyvtárak, 173 00:08:26,420 --> 00:08:28,950 rekurzív belevetik magukat ott és törli az összes, hogy. 174 00:08:28,950 --> 00:08:31,040 És f a legrosszabb mind közül. 175 00:08:31,040 --> 00:08:32,580 Bárki, aki tudja, mit jelent itt-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 Tehát erőt jelenti, még ha ez egy rossz ötlet, 179 00:08:37,830 --> 00:08:40,939 csináld figyelmeztetés nélkül nekem további megerősítést. 180 00:08:40,939 --> 00:08:43,230 Szóval, tudod, mi nevetni ezt, de őszintén szólva, én valószínűleg 181 00:08:43,230 --> 00:08:44,972 írja ezt többször egy nap, mert a valóságban 182 00:08:44,972 --> 00:08:47,210 az, hogy ez a leggyorsabb módja annak, törölni egy csomó dolgot. 183 00:08:47,210 --> 00:08:48,590 De még tettem némi kárt. 184 00:08:48,590 --> 00:08:53,100 >> De ha úgy döntesz, hogy trükk a számítógép a meghatározó valami hülye változó 185 00:08:53,100 --> 00:08:56,810 vagy funkció az úgynevezett x, de aztán megtévesztett a számítógépet végrehajtó 186 00:08:56,810 --> 00:09:00,030 határain túlra, hogy a funkció, túl pontosvessző, 187 00:09:00,030 --> 00:09:04,430 akkor valóban becsapni a számítógép a végrehajtó valami hasonló rm -rf 188 00:09:04,430 --> 00:09:07,810 vagy az e-mail parancs vagy a Másolás parancsot. 189 00:09:07,810 --> 00:09:11,400 Bármi szó, amit tehetünk a számítógép, legyen szó fájlok törlése, 190 00:09:11,400 --> 00:09:15,350 fájlok létrehozását, spam valaki, támadó néhány szervert távolról, 191 00:09:15,350 --> 00:09:17,190 ha ki tudja fejezni azt a parancs 192 00:09:17,190 --> 00:09:19,120 lehet becsapni a számítógépet csinálja. 193 00:09:19,120 --> 00:09:21,510 >> Most mi egy példa arra, hogyan lehet ezt csinálni? 194 00:09:21,510 --> 00:09:24,300 Nos, van egy csomó számítógép az interneten futó Bash. 195 00:09:24,300 --> 00:09:26,390 Mindannyian a Mac felhasználók között. 196 00:09:26,390 --> 00:09:30,390 Sok Linux szerverek között őket is, és a Unix szerverek. 197 00:09:30,390 --> 00:09:32,630 A Windows újra lesz viszonylag ki a horgot 198 00:09:32,630 --> 00:09:34,590 hacsak nem telepítette speciális szoftver. 199 00:09:34,590 --> 00:09:37,130 Most egy csomó szerver, a például webszerverek működtetését, 200 00:09:37,130 --> 00:09:39,840 és valójában a Linux talán a legnépszerűbb operációs rendszer 201 00:09:39,840 --> 00:09:43,060 futtatni a számítógépen az interneten amelyek a weboldalak kiszolgálását. 202 00:09:43,060 --> 00:09:44,910 Most, meglátjuk később a félév, amikor 203 00:09:44,910 --> 00:09:48,470 küld kérésére Ön browser-- Chrome, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- egy távoli szerverre, 205 00:09:50,790 --> 00:09:53,730 kiderül, hogy annak ellenére, hogy csak gépelt www.example.com, 206 00:09:53,730 --> 00:09:59,590 a böngésző küld egy üzenetet ez egy kicsit bonyolult, mint ez. 207 00:09:59,590 --> 00:10:01,239 >> De figyeljük meg egy kis valami furcsa. 208 00:10:01,239 --> 00:10:03,030 Az első két sor Még soha nem láttam korábban, 209 00:10:03,030 --> 00:10:04,904 de nem néz különösen fenyegető. 210 00:10:04,904 --> 00:10:08,030 De észre amit lopott A harmadik sor itt. 211 00:10:08,030 --> 00:10:13,390 Ha rossz ember volt, hogy küldjön egy üzenetet mint ez a saját számítógépén 212 00:10:13,390 --> 00:10:17,270 a sebezhető Mac vagy a sebezhető Linux szerver, 213 00:10:17,270 --> 00:10:21,580 A vicces az, hogy Bash, az egyszerű kis parancssor, 214 00:10:21,580 --> 00:10:27,450 mindenütt jelen van, és gyakran Használt lényegében végre 215 00:10:27,450 --> 00:10:30,020 tartalmának üzenetet kap. 216 00:10:30,020 --> 00:10:33,490 És, hogy a logika, akkor trükk a webszerver, ezért, 217 00:10:33,490 --> 00:10:36,370 küldött valami hasonló User-Agent, ami általában 218 00:10:36,370 --> 00:10:38,300 kellene mondani a neve a böngésző. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, ez 220 00:10:42,420 --> 00:10:44,590 csak a böngésző azonosításának módját is. 221 00:10:44,590 --> 00:10:46,605 De ha rossz ember nagyon ügyesen mondja, mm-mm, vagyok 222 00:10:46,605 --> 00:10:47,930 Nem akartam mondani, hogy mi a böngésző, 223 00:10:47,930 --> 00:10:50,888 Én inkább fogja küldeni ezt rejtélyes külsejű dolog egy rm -rf 224 00:10:50,888 --> 00:10:55,840 * Benne, akkor a szó szoros értelmében becsapni a sebezhető webszerver az interneten 225 00:10:55,840 --> 00:10:59,055 a végrehajtó pontosan, hogy ott törlése az összes fájlt. 226 00:10:59,055 --> 00:11:00,930 És őszintén szólva, ez nem még a legrosszabb. 227 00:11:00,930 --> 00:11:01,763 Meg tudod csinálni semmit. 228 00:11:01,763 --> 00:11:04,480 Lehet kezdeni a megosztott DoS támadást 229 00:11:04,480 --> 00:11:07,030 ha ezt az üzenetet küldte, hogy egész csokor webszerverek 230 00:11:07,030 --> 00:11:10,256 és aztán őket leszáll, a Például a Harvard.edu szerver, 231 00:11:10,256 --> 00:11:12,130 és rendezheti a bumm a fene ki őket 232 00:11:12,130 --> 00:11:15,490 olyan hálózati forgalom volt egyébként váltja a rossz fiú. 233 00:11:15,490 --> 00:11:18,760 >> Szóval, hosszú történet rövid, szinte ebben a teremben mindenki, akinek van egy Mac 234 00:11:18,760 --> 00:11:20,240 ki van téve ennek. 235 00:11:20,240 --> 00:11:24,100 Az érem másik oldala az, hogy ha az ember fut egy webszerver a laptop, 236 00:11:24,100 --> 00:11:27,780 és hacsak nem tényleg beállítva azt, hogy valami hasonló SSH bele, 237 00:11:27,780 --> 00:11:28,670 te tényleg biztonságban. 238 00:11:28,670 --> 00:11:31,710 Ez sebezhető, de nem egyik próbál bejutni a laptop, 239 00:11:31,710 --> 00:11:33,290 így egyfajta megnyugodhat. 240 00:11:33,290 --> 00:11:36,210 Azonban az Apple hamarosan frissítjük javítja ezt. 241 00:11:36,210 --> 00:11:39,660 A világ a Linux már megjelent Számos javítás a Fedora és az Ubuntu 242 00:11:39,660 --> 00:11:43,790 és más Linux rendszerekkel, sőt ha fut frissítést 50 a készülék, 243 00:11:43,790 --> 00:11:45,930 még ez is lesz frissített és javított. 244 00:11:45,930 --> 00:11:47,764 De ez is nem tényleg sebezhető, 245 00:11:47,764 --> 00:11:49,804 mert ha neked van tinkered a készülék 246 00:11:49,804 --> 00:11:52,770 és tette a laptop nyilvánosan elérhető az interneten, ami nem 247 00:11:52,770 --> 00:11:54,910 alapértelmezés szerint neked van ténylegesen jó, mert 248 00:11:54,910 --> 00:11:56,890 A tűzfal és más technikák. 249 00:11:56,890 --> 00:12:01,000 >> De ez egy szélsőséges példa a hiba hogy már élt a szó szoros értelmében 20 250 00:12:01,000 --> 00:12:04,050 évben, és ki tudja, ha valaki Ennyi idő is tudott róla? 251 00:12:04,050 --> 00:12:06,300 És valóban, ez az egyik az alapvető kihívások 252 00:12:06,300 --> 00:12:08,690 hogy majd később látni a félév a biztonság, 253 00:12:08,690 --> 00:12:13,020 az, hogy csakúgy, mint a valós világban, A jó fiúk vannak a hátrányt. 254 00:12:13,020 --> 00:12:16,500 Annak érdekében, hogy a rossz fiúk ki, meg kell győződjön meg arról, hogy minden ajtó zárva van, 255 00:12:16,500 --> 00:12:20,340 hogy minden ablak biztonságos, hogy minden belépési pont egy hazai 256 00:12:20,340 --> 00:12:21,980 biztonságos, hogy a rossz fiúk ki. 257 00:12:21,980 --> 00:12:26,870 De mit jelent a rosszfiú kell tenni, hogy valóban veszélyeztetik a hazai 258 00:12:26,870 --> 00:12:28,200 és ellopják tőled? 259 00:12:28,200 --> 00:12:32,574 Ő csak meg kell találni egy nyitott ajtó, egy törött ablak, vagy valami 260 00:12:32,574 --> 00:12:35,240 Ezen a vonalon, és ez a Ugyanez a számítógép biztonságát. 261 00:12:35,240 --> 00:12:37,660 Mi lehet írni millió sornyi programkód 262 00:12:37,660 --> 00:12:40,570 és költeni több száz vagy több ezer óra próbál meg helyes, 263 00:12:40,570 --> 00:12:43,370 de ha csinál csak egy hiba korrektség, 264 00:12:43,370 --> 00:12:47,030 akkor lehet, hogy a teljes rendszert, és Ebben az esetben valóban, az egész internet 265 00:12:47,030 --> 00:12:48,660 és a világ veszélyeztetett. 266 00:12:48,660 --> 00:12:51,950 >> Tehát, ha szeretne többet erről, megy ez a URL itt. 267 00:12:51,950 --> 00:12:54,450 Nincs szükség intézkedésre ma este, ha te vagy 268 00:12:54,450 --> 00:12:57,116 körében sokkal kényelmesebb, hogy már fut a saját web 269 00:12:57,116 --> 00:12:59,810 kiszolgálóval, amely esetben ki kell, sőt, frissítse a szoftvert. 270 00:12:59,810 --> 00:13:03,244 >> És ez is a címe a beszéd, és most a papír, 271 00:13:03,244 --> 00:13:05,410 hogy már össze kell kapcsolni a Természetesen honlapján ma. 272 00:13:05,410 --> 00:13:07,600 Ez volt az a fickó nevű Ken Thompson, aki 273 00:13:07,600 --> 00:13:10,120 volt elfogadva egy nagyon híres díjat számítástechnika, 274 00:13:10,120 --> 00:13:13,495 és ő adta ezt a beszédet néhány évvel ezelőtt, lényegében ugyanezen témában. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Kérdezi emberek a kérdés, Ha tényleg 277 00:13:20,520 --> 00:13:23,480 bizalom, végső soron, a szoftver, amit kapott? 278 00:13:23,480 --> 00:13:26,100 Például, mindannyiunknak Készítettem programok 279 00:13:26,100 --> 00:13:27,820 és mi már összeállítása őket csenget. 280 00:13:27,820 --> 00:13:31,830 És a tudás, írtál bármely programokat CS50, ahol van 281 00:13:31,830 --> 00:13:35,310 a hátsó ajtón a fajta, van rá mód, hogy rossz ember, ha fut a program 282 00:13:35,310 --> 00:13:37,410 átvehetné a számítógép? 283 00:13:37,410 --> 00:13:38,310 Valószínűleg nem, ugye? 284 00:13:38,310 --> 00:13:40,180 Mario és a kapzsi, és a hitel. 285 00:13:40,180 --> 00:13:41,680 Ezek mind nagyon kis programok. 286 00:13:41,680 --> 00:13:43,910 Azt, hogy elég rossz, ha tényleg 287 00:13:43,910 --> 00:13:47,310 tette az egész számítógép sebezhető megírása után 10, illetve 20 sornyi kódot, 288 00:13:47,310 --> 00:13:49,690 vagy legalább néhány tudatában a biztonsági következmények. 289 00:13:49,690 --> 00:13:52,023 Most azt mondom, hogy tréfásan, de fogunk látni ma 290 00:13:52,023 --> 00:13:54,600 és ezen a héten, hogy ez valójában nagyon, nagyon egyszerű 291 00:13:54,600 --> 00:13:57,980 hogy rossz, és még a rövid programok sebezhető. 292 00:13:57,980 --> 00:14:02,880 >> De most legalább rájönnek hogy a kérdés arra kérik itt 293 00:14:02,880 --> 00:14:04,850 szól csenget a fordító. 294 00:14:04,850 --> 00:14:08,360 Miért mi lett bízva csenget Az elmúlt két-három hét alatt? 295 00:14:08,360 --> 00:14:12,650 Ki kell mondani, hogy aki írta csenget nem volt "ha" feltétel ott 296 00:14:12,650 --> 00:14:17,680 hogy lényegében beadott néhány nullát és azok a minden programot állítja össze 297 00:14:17,680 --> 00:14:21,180 hogy engedné őt hozzáférés a számítógépet, ha alszol 298 00:14:21,180 --> 00:14:23,580 és a laptop fedele nyitva és a számítógép fut? 299 00:14:23,580 --> 00:14:24,080 Nem igaz? 300 00:14:24,080 --> 00:14:28,350 Van ez a fajta becsület rendszer jobb Most hol vagyunk benne, hogy csenget legális. 301 00:14:28,350 --> 00:14:30,000 Te benne, hogy a készülék nem legális. 302 00:14:30,000 --> 00:14:34,430 Te benne, hogy szó szerint minden programot a Mac vagy PC megbízható. 303 00:14:34,430 --> 00:14:37,510 És ez az egyszerű hiba arra utal, akkor is, ha ez nem rosszindulatú, 304 00:14:37,510 --> 00:14:40,580 ez egyáltalán nem valószínű, hogy ez a helyzet. 305 00:14:40,580 --> 00:14:42,350 >> Szóval kell félni, mint a pokol. 306 00:14:42,350 --> 00:14:45,560 Őszintén szólva, nincs egyszerű más megoldás erre 307 00:14:45,560 --> 00:14:48,185 mint egyfajta társadalmi tudatosság A növekvő komplexitása 308 00:14:48,185 --> 00:14:50,310 hogy mi építünk tetejére A számítógépes rendszerek, 309 00:14:50,310 --> 00:14:53,740 és hogyan egyre inkább sebezhető talán nagyon is. 310 00:14:53,740 --> 00:14:55,570 >> Most azt mondta, Breakout. 311 00:14:55,570 --> 00:14:59,889 Tehát Breakout probléma meg három, és Breakout egy játék a tavalyi 312 00:14:59,889 --> 00:15:02,180 hogy lehet felidézni, de számunkra a probléma meg három, 313 00:15:02,180 --> 00:15:04,450 ez lehetővé teszi számunkra, hogy a dolgokat egy fokkal 314 00:15:04,450 --> 00:15:08,880 hogy amikor írunk programokat, még egy terminál ablakban, mint ez, 315 00:15:08,880 --> 00:15:14,670 mi is valójában futni, végül, grafikus programok nem 316 00:15:14,670 --> 00:15:17,800 eltérően volt hozzáférést a Scratch. 317 00:15:17,800 --> 00:15:20,910 Tehát ez a személyzet végrehajtása Breakout, 318 00:15:20,910 --> 00:15:23,930 amely éppen ez a tégla-törés játék, hogy mozog a lapát vissza 319 00:15:23,930 --> 00:15:27,590 oda, és nyomja meg a labdát azok ellen, akik színes téglák felfelé tetején. 320 00:15:27,590 --> 00:15:30,020 Szóval ez így nekünk fajta vissza oda, ahol 321 00:15:30,020 --> 00:15:33,180 tudtuk, hogy nagyon gyorsan A Scratch, és most a C, 322 00:15:33,180 --> 00:15:35,800 végrehajtási saját grafikus felhasználói felületek. 323 00:15:35,800 --> 00:15:38,960 >> De több mint, hogy ez a probléma halmaz jelenti az első 324 00:15:38,960 --> 00:15:41,000 amelyben adsz Ön egy csomó kódot. 325 00:15:41,000 --> 00:15:43,940 És valóban, hozom explicit figyelmet erre, különösen azért, mert 326 00:15:43,940 --> 00:15:47,090 a kevésbé kényelmes, ez probléma állítva, legalábbis első pillantásra, 327 00:15:47,090 --> 00:15:49,170 fog érezni, mint vettünk fel egy fokkal. 328 00:15:49,170 --> 00:15:51,540 Mert már kaptál, néhány a keresési 329 00:15:51,540 --> 00:15:54,930 és válogatás problémák a Pset, egy csomó kódot, amit írt, 330 00:15:54,930 --> 00:15:56,680 és egy pár hozzászólás hogy azt mondják: "csinálni" 331 00:15:56,680 --> 00:15:58,221 ahol van, hogy töltse ki az üres. 332 00:15:58,221 --> 00:16:00,020 Így nem túl ijesztő, de ez az első alkalom, 333 00:16:00,020 --> 00:16:03,370 mi átadta Önnek kódot, hogy meg kell először olvasni, megérteni, majd adja hozzá a 334 00:16:03,370 --> 00:16:04,290 és töltse ki. 335 00:16:04,290 --> 00:16:05,940 >> Majd Breakout, fogjuk, hogy tegyék ugyanezt, 336 00:16:05,940 --> 00:16:08,740 így néhány tucat sor A kód, amely, őszintén szólva, hogy az Ön 337 00:16:08,740 --> 00:16:11,490 sok a keret a játék, de megállni 338 00:16:11,490 --> 00:16:14,304 végrehajtásának téglák és a labdát, és a lapát, 339 00:16:14,304 --> 00:16:15,970 de mi végre néhány egyéb jellemzőit. 340 00:16:15,970 --> 00:16:18,280 És még az első pillantásra, ismét, különösen, ha kevésbé kényelmes, 341 00:16:18,280 --> 00:16:21,480 tűnhet, különösen ijesztő és Szerinted van olyan sok új funkciót 342 00:16:21,480 --> 00:16:24,070 meg kell, hogy lezárja a fejedben körül, és ez igaz. 343 00:16:24,070 --> 00:16:26,281 De ne felejtsük el, ez a nagyon tetszik Scratch. 344 00:16:26,281 --> 00:16:28,780 Valószínűleg te nem használja fel a puzzle-darabokat a Scratch. 345 00:16:28,780 --> 00:16:31,120 Valószínűleg te nem érdekel, hogy csomagolja az elme körül mindet 346 00:16:31,120 --> 00:16:33,617 mert minden elég volt a gyors pillantást, hogy megértsük, ó, 347 00:16:33,617 --> 00:16:35,450 ez az, amit én tehetek azzal a puzzle-darabot. 348 00:16:35,450 --> 00:16:38,260 És valóban, a probléma be 3 spec, akkor pont akkor 349 00:16:38,260 --> 00:16:41,370 A dokumentáció, amely be, hogy néhány új funkció, 350 00:16:41,370 --> 00:16:43,570 és végül a programozási felépíti használja. 351 00:16:43,570 --> 00:16:47,610 Feltételek, hurkok, változók és függvények 352 00:16:47,610 --> 00:16:50,720 azonos lesz amit láttunk eddig. 353 00:16:50,720 --> 00:16:53,560 >> Tehát valóban, mi adunk meg egy kis minta kód 354 00:16:53,560 --> 00:16:56,110 hozhat létre egy ablak úgy néz ki, nem ellentétben ezt, 355 00:16:56,110 --> 00:16:59,540 és végül kapcsolja be valami ehhez foghatót. 356 00:16:59,540 --> 00:17:02,250 Így kihasználják a CS50, megvitassák munkaidőben és több, 357 00:17:02,250 --> 00:17:05,290 és hogy a kényelem az a tény, hogy az összeg a kódot kell írni 358 00:17:05,290 --> 00:17:06,760 valójában nem olyan sok. 359 00:17:06,760 --> 00:17:10,359 Az első kihívás csak hozzászokik magát, hogy egy kódot, amit írt. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Bármilyen kérdése van pset3, Shellshock, vagy más módon? 362 00:17:15,810 --> 00:17:19,226 >> Közönség: Úgy tűnt, megy keresztül a Breakout 363 00:17:19,226 --> 00:17:22,154 hogy a kód szinte egy objektum-orientált stílus, 364 00:17:22,154 --> 00:17:24,675 de azt hittem C volt objektum-orientált program. 365 00:17:24,675 --> 00:17:26,050 SPEAKER 1: Egy kiváló kérdés. 366 00:17:26,050 --> 00:17:28,258 Így néz át a elosztás, a kód 367 00:17:28,258 --> 00:17:30,180 írtunk a pset3, azok számára ismerős, azt 368 00:17:30,180 --> 00:17:32,230 úgy néz ki, mintha egy kis objektum-orientált. 369 00:17:32,230 --> 00:17:33,800 A rövid válasz az, hogy van. 370 00:17:33,800 --> 00:17:38,130 Ez egy közelítése, hogyan talán nem objektum-orientált kódot 371 00:17:38,130 --> 00:17:41,850 egy nyelvet, mint a C, de ez még végül eljárási. 372 00:17:41,850 --> 00:17:44,900 Nincsenek módszerek belsejében A változók, mint látni fogod. 373 00:17:44,900 --> 00:17:46,180 De emlékeztet, hogy a. 374 00:17:46,180 --> 00:17:48,780 És látni fogjuk, hogy a szolgáltatás újra amikor eljutunk PHP és JavaScript 375 00:17:48,780 --> 00:17:49,946 a vége felé a félév. 376 00:17:49,946 --> 00:17:53,667 De most, úgy mondanám, hogy egy csipetnyi mi jön. 377 00:17:53,667 --> 00:17:54,250 Jó kérdés. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Rendben. 380 00:17:56,550 --> 00:17:59,730 Tehát egyesülésről fajta volt, hogyan bal dolgok utoljára. 381 00:17:59,730 --> 00:18:03,250 És egyesítése fajta volt hideg a értelemben, hogy ez így sokkal gyorsabb, 382 00:18:03,250 --> 00:18:07,100 legalább alapuló felületes vizsgálatok mi a múlt héten, mint, mondjuk, buborék 383 00:18:07,100 --> 00:18:08,710 sort, kiválasztás sort, beillesztés sort. 384 00:18:08,710 --> 00:18:11,780 És mi volt szép is csak hogyan tömören és tisztán 385 00:18:11,780 --> 00:18:12,810 ki tudja fejezni azt. 386 00:18:12,810 --> 00:18:15,840 És mit mondunk, hogy egy felső kötött a menetideje merge 387 00:18:15,840 --> 00:18:16,340 rendezni? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Igen? 390 00:18:18,495 --> 00:18:19,360 >> Közönség: n log n? 391 00:18:19,360 --> 00:18:20,819 >> SPEAKER 1: n log n, jobbra. n log n. 392 00:18:20,819 --> 00:18:23,776 És mi jön vissza, hogy mi valójában azt jelenti, vagy ha ez jön, 393 00:18:23,776 --> 00:18:25,570 de ez a jobb volt mint amit futási idő 394 00:18:25,570 --> 00:18:28,440 hogy láttuk a buborék kiválasztás és beillesztés sort? 395 00:18:28,440 --> 00:18:30,610 Így n négyzeten. n kockás nagyobb, mint ez, 396 00:18:30,610 --> 00:18:34,650 és akkor is, ha ez nem teljesen nyilvánvaló, tudják, hogy log n n-nél kisebb, 397 00:18:34,650 --> 00:18:36,910 így ha n-szer valami kisebb, mint n, 398 00:18:36,910 --> 00:18:38,680 ez lesz kevesebb, mint n négyzeten. 399 00:18:38,680 --> 00:18:40,130 Ez egy kicsit az intuíció is. 400 00:18:40,130 --> 00:18:42,190 De nagy árat fizetett ezért. 401 00:18:42,190 --> 00:18:47,000 Ez gyorsabb volt, de a téma indult kialakulni a múlt héten volt ez a kompromisszum. 402 00:18:47,000 --> 00:18:49,804 Van jobb teljesítmény idő bölcs, de mi 403 00:18:49,804 --> 00:18:52,470 tehettem volna költeni a többi kéz, annak érdekében, hogy ezt? 404 00:18:52,470 --> 00:18:53,591 >> Közönség: Memory. 405 00:18:53,591 --> 00:18:54,465 SPEAKER 1: Mondd még egyszer? 406 00:18:54,465 --> 00:18:55,173 Közönség: Memory. 407 00:18:55,173 --> 00:18:57,040 SPEAKER 1: memória, vagy hely általában. 408 00:18:57,040 --> 00:18:59,040 És ez nem volt szuper nyilvánvaló a mi emberek, 409 00:18:59,040 --> 00:19:02,240 de emlékeztetnek arra, hogy önkénteseink is előrelépett, és megerősítsék 410 00:19:02,240 --> 00:19:04,780 vissza, mintha ott egy tömb itt, és mintha ott 411 00:19:04,780 --> 00:19:07,130 egy második tömb, hogy itt tudták használni, mert 412 00:19:07,130 --> 00:19:09,080 Szükséges valahol egyesíteni azokat az embereket. 413 00:19:09,080 --> 00:19:11,480 Mi nem csak cserélni őket a helyére. 414 00:19:11,480 --> 00:19:13,800 Tehát merge sort tőkeáttétel több hely, ami 415 00:19:13,800 --> 00:19:15,620 nem volt szükség a a másik algoritmusok 416 00:19:15,620 --> 00:19:17,410 de a fejjel, hogy ez sokkal gyorsabb. 417 00:19:17,410 --> 00:19:20,780 És őszintén szólva, a való világban tér ezeket days-- RAM, merevlemez space-- 418 00:19:20,780 --> 00:19:25,030 viszonylag olcsó, és így ez nem feltétlenül rossz dolog. 419 00:19:25,030 --> 00:19:28,320 >> Szóval vessünk egy gyors pillantást, egy kis több módszeresen, a mit tettünk 420 00:19:28,320 --> 00:19:30,220 és ezért azt mondta, hogy n log n. 421 00:19:30,220 --> 00:19:33,260 Tehát itt van a nyolc számot és a nyolc önkéntesek volt utoljára. 422 00:19:33,260 --> 00:19:35,718 És az első dolog, ami egyesítése Sort azt mondta, hogy nem volt? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 Közönség: Ossza két. 425 00:19:38,010 --> 00:19:38,663 SPEAKER 1: Mondd még egyszer? 426 00:19:38,663 --> 00:19:39,650 Közönség: Ossza két. 427 00:19:39,650 --> 00:19:40,610 SPEAKER 1: Ossza két, jobb. 428 00:19:40,610 --> 00:19:42,818 Ez nagyon emlékeztet a telefonkönyv, a megosztottság 429 00:19:42,818 --> 00:19:44,220 és uralkodj általában. 430 00:19:44,220 --> 00:19:45,640 Így megnéztük a bal felét. 431 00:19:45,640 --> 00:19:48,700 Aztán egyszer azt mondta, sort a bal fele a elemek, 432 00:19:48,700 --> 00:19:49,690 mit is következő mondjuk? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Rendezni a bal fele a bal fél, amely lehetővé tette, hogy, 435 00:19:54,860 --> 00:19:57,570 Miután elosztjuk két, középpontjában négy és kettő. 436 00:19:57,570 --> 00:20:01,280 >> Hogyan rendezheti a listát most, sárga, méret két, a Merge Sort? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Jól osszuk félbe, és rendezni a bal felét. 439 00:20:04,580 --> 00:20:07,100 És ez volt az, ahol a dolgok Egy kicsit hülye röviden. 440 00:20:07,100 --> 00:20:10,720 Hogyan rendezheti a lista, amelyet a méret egy, mint ez a szám a négy itt? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Ez rendezve. 443 00:20:13,210 --> 00:20:14,200 Kész. 444 00:20:14,200 --> 00:20:17,300 >> De akkor hogyan lehet rendezni a listát méret az egyik, amikor ez a szám két? 445 00:20:17,300 --> 00:20:21,640 Nos, ugyanaz a dolog, de most mi volt a harmadik és legfontosabb lépés a Merge Sort? 446 00:20:21,640 --> 00:20:24,020 Meg kellett egyesíteni a bal fele és a jobb fele. 447 00:20:24,020 --> 00:20:26,580 És amint ezt tettük, néztünk négy, néztük két. 448 00:20:26,580 --> 00:20:28,750 Úgy döntöttünk, minden rendben, nyilvánvalóan két előbb, 449 00:20:28,750 --> 00:20:31,840 így még két saját helyen, ezt követi a négy. 450 00:20:31,840 --> 00:20:35,010 És most meg kell, hogy milyen vissza, és ez a fajta jellemző 451 00:20:35,010 --> 00:20:37,570 Egy algoritmus mint Merge Sort, visszatekerés a memóriában. 452 00:20:37,570 --> 00:20:40,240 Mi volt a következő sorban a történet? 453 00:20:40,240 --> 00:20:41,780 Mit kell összpontosítva a következő lépés? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 A jobb felét a bal fél, azaz hat és nyolc. 456 00:20:47,350 --> 00:20:50,320 >> Engedjék meg, hogy át lehet lépni ezt nélkül belaboring a pont túl sok. 457 00:20:50,320 --> 00:20:53,330 Hat és nyolc, majd hat a válogatni, nyolc van rendezve. 458 00:20:53,330 --> 00:20:57,190 Egyesíti őket össze, mint az, és most a következő nagy lépés 459 00:20:57,190 --> 00:21:00,990 , persze, rendezni a jobb fele Az első lépés az algoritmus. 460 00:21:00,990 --> 00:21:02,870 Így összpontosítani egy, három, hét, öt. 461 00:21:02,870 --> 00:21:04,540 Ezután elsősorban a bal felét. 462 00:21:04,540 --> 00:21:09,400 A bal fele, hogy a jobb fele hogy, majd egyesíti az első és a harmadik. 463 00:21:09,400 --> 00:21:13,100 Majd a jobb oldalán, majd a bal fele belőle, majd a jobb felét. 464 00:21:13,100 --> 00:21:15,985 Merge azt, és most mi is lépést? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Egyesíti a nagy bal felét és a nagy jobb oldalán, tehát az egyik megy le oda, 467 00:21:22,460 --> 00:21:27,330 majd kettő, majd három, majd négy, majd öt, majd hat, majd hét, majd nyolc. 468 00:21:27,330 --> 00:21:31,990 >> Így most miért van ez a végül felfedi, különösen akkor, ha n és a logaritmus több 469 00:21:31,990 --> 00:21:35,487 általában inkább menekülni meg, legalábbis az utóbbi memória? 470 00:21:35,487 --> 00:21:37,070 Nos, észre magassága ezt a dolgot. 471 00:21:37,070 --> 00:21:41,230 Volt nyolc elem, és mi osztva azt a két, két, két. 472 00:21:41,230 --> 00:21:44,590 Tehát log alap két nyolc ad nekünk három. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 És hidd el nekem az, hogy ha egy kis ködös rajta. 475 00:21:48,540 --> 00:21:54,710 De log alap két nyolc három, így tettünk három réteg összevonása. 476 00:21:54,710 --> 00:21:57,170 És amikor egyesült elemek, hány elem 477 00:21:57,170 --> 00:21:58,950 nem nézzük az egyes azokat a sorokat? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Összesen n, igaz? 480 00:22:01,437 --> 00:22:04,020 Mert egyesíteni a felső sorban, még akkor is, tette darabonként, 481 00:22:04,020 --> 00:22:05,990 mi végül megérintette minden számot egyszer. 482 00:22:05,990 --> 00:22:09,054 És a második sorban, a egyesíti ezeket a listákat a méret két, 483 00:22:09,054 --> 00:22:10,470 kellett megérinteni minden elem egyszerre. 484 00:22:10,470 --> 00:22:12,690 És akkor itt tényleg egyértelműen az utolsó sorban, 485 00:22:12,690 --> 00:22:15,430 kellett megérinteni minden egyes ilyen elemek egyszer, de csak egyszer, 486 00:22:15,430 --> 00:22:18,400 így itt fekszik, akkor a n log n. 487 00:22:18,400 --> 00:22:21,780 >> És most csak azért, hogy a dolgok egy kicsit formálisabb egy pillanatra, ha 488 00:22:21,780 --> 00:22:24,260 volt, hogy most elemezni ezt egy fajta magasabb szintű 489 00:22:24,260 --> 00:22:28,340 és próbálja eldönteni, hogyan is Lehet, hogy megy a kifejező 490 00:22:28,340 --> 00:22:31,780 a futási idő az algoritmus csak néztem, és nem 491 00:22:31,780 --> 00:22:33,590 segítségével kitalált példa? 492 00:22:33,590 --> 00:22:36,590 Nos, mennyi időt mondana a lépés, mint ez a sárga venne, 493 00:22:36,590 --> 00:22:37,173 ha n <2 visszatérés? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Ez egy nagy Ó, mi? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Szóval látni egy, így egy lépésben Talán két lépést, mert ha 498 00:22:44,540 --> 00:22:47,110 majd vissza, de ez állandó, igaz? 499 00:22:47,110 --> 00:22:49,960 Így az O (1), és ez hogyan fogom kifejezni ezt. 500 00:22:49,960 --> 00:22:51,480 T, hogy csak működési idő. 501 00:22:51,480 --> 00:22:54,150 n jelentése a méret a bemenet, így T (n), csak egy divatos 502 00:22:54,150 --> 00:22:56,330 mondván a futó idő adott input n méretű 503 00:22:56,330 --> 00:23:00,220 lesz a rendelés állandó idő, az O (1). 504 00:23:00,220 --> 00:23:01,970 >> De egyébként, mi a helyzet ezzel? 505 00:23:01,970 --> 00:23:05,660 Hogyan fejezné a futási ideje ez a sárga vonal? 506 00:23:05,660 --> 00:23:06,250 T, mi? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Ön milyen csal itt választ a kérdésemre ciklikusan. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Tehát, ha a futó idő Általánosságban azt mondjuk a T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 És most milyen ladikozás itt mondván, jól, csak rendezni a bal fele, 513 00:23:22,490 --> 00:23:23,920 majd rendezni a jobb felét. 514 00:23:23,920 --> 00:23:27,520 Hogyan lehet, hogy mi jelképesen képviselt a futási idő ennek a sárga vonal? 515 00:23:27,520 --> 00:23:28,020 T, mi? 516 00:23:28,020 --> 00:23:29,360 Mi ez a méret a bemenet? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 több mint két n. 519 00:23:31,057 --> 00:23:32,140 Miért nem azt mondja? 520 00:23:32,140 --> 00:23:36,449 És akkor ez egy másik T (n / 2), majd újra, ha összeolvad két rendezett felét, 521 00:23:36,449 --> 00:23:38,615 hány elemet fogom hogy kell megérinteni összesen? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 n. 524 00:23:40,320 --> 00:23:42,790 Így tudom kifejezni ezt, csak azért, hogy legyen kedves a képzelet, 525 00:23:42,790 --> 00:23:44,430 mivel a futási idő általában. 526 00:23:44,430 --> 00:23:51,140 T (n) csak a futási ideje T (n / 2), , valamint a T (n / 2), a bal fele és jobb felét, 527 00:23:51,140 --> 00:23:55,360 plusz O (n), ami valószínűleg az n lépéseket, de talán, ha én vagyok a két ujját, 528 00:23:55,360 --> 00:23:57,960 ez kétszer annyi lépések, de ez egyenes. 529 00:23:57,960 --> 00:24:00,440 Ez valami lépések száma ez a tényező az N, 530 00:24:00,440 --> 00:24:02,270 így talán kifejezni ezt, mint ez. 531 00:24:02,270 --> 00:24:05,550 És ez az, ahol most mi punt a Vissza a mi középiskolai matematika tankönyv 532 00:24:05,550 --> 00:24:10,290 vagyunk, hogy a kiújulás végül végül egyenlő ezt n-szer log n, 533 00:24:10,290 --> 00:24:12,530 ha ténylegesen ki A matek még hivatalosan. 534 00:24:12,530 --> 00:24:13,950 >> Szóval ez csak két szempontból. 535 00:24:13,950 --> 00:24:17,500 Egy számszerűen a kódolt reprezentatív példa 536 00:24:17,500 --> 00:24:21,140 a nyolc számot, és egy általános nézd meg, hogyan került oda. 537 00:24:21,140 --> 00:24:25,670 De ami igazán érdekes itt az, hogy megint ez a fogalom a kerékpározás. 538 00:24:25,670 --> 00:24:26,900 Én nem használ hurkok. 539 00:24:26,900 --> 00:24:29,860 Én vagyok a fajta meghatározó valami szempontjából is, 540 00:24:29,860 --> 00:24:31,950 nem csak ezzel matematikai függvény, 541 00:24:31,950 --> 00:24:34,860 hanem a jelen pszeudo kódot. 542 00:24:34,860 --> 00:24:38,260 Ez a pszeudo kód rekurzív az, hogy két vonalai 543 00:24:38,260 --> 00:24:42,310 lényegében azt mondja, hogy menjen használja arra, hogy megoldja a kisebb 544 00:24:42,310 --> 00:24:45,400 probléma a kisebb méretű, majd újra és újra 545 00:24:45,400 --> 00:24:48,820 és újra, amíg mi Whittle azt le, hogy ez az úgynevezett bázis esetében. 546 00:24:48,820 --> 00:24:52,810 >> Úgyhogy tulajdonképpen felhívni a vonzóbb elvitelre e a következő. 547 00:24:52,810 --> 00:24:58,420 Hadd menjek be gedit, és hogy egy nézd meg néhány mai forráskód, 548 00:24:58,420 --> 00:24:59,930 különösen ez a példa itt. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, ami látszólag hozzáteszi a számokat egytől n. 550 00:25:03,709 --> 00:25:05,750 Tehát lássuk, milyen ismerős és ismeretlen itt. 551 00:25:05,750 --> 00:25:08,690 Először is van egy pár magában foglalja, tehát semmi új nincs. 552 00:25:08,690 --> 00:25:09,190 Prototype. 553 00:25:09,190 --> 00:25:11,370 Én egy kicsit homályosak ez után néhány nap, 554 00:25:11,370 --> 00:25:13,790 de mit mondunk a prototípus egy függvény? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 KÖZÖNSÉG: [nem hallható]. 557 00:25:16,015 --> 00:25:16,905 SPEAKER 1: Mi az? 558 00:25:16,905 --> 00:25:17,800 Közönség: Azt jelenti be. 559 00:25:17,800 --> 00:25:18,883 SPEAKER 1: Azt jelenti be. 560 00:25:18,883 --> 00:25:22,290 Így tanítasz csenget, hé, nem ténylegesen végrehajtó ezt még, 561 00:25:22,290 --> 00:25:25,740 de valahol ezt a fájlt, valószínűleg, meg fog olyan függvény is, mi? 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 És ez csak egy ígéret, hogy a hogy fog kinézni, mint ez. 565 00:25:30,540 --> 00:25:33,720 Ez fog tartani egy egész szám input-- és én is inkább kifejezett 566 00:25:33,720 --> 00:25:36,570 és azt mondják, int n --and ez fog visszatérni egy int, 567 00:25:36,570 --> 00:25:39,900 de pontosvessző eszköz, mm, hozok körül megvalósítása ez egy kicsit később. 568 00:25:39,900 --> 00:25:40,989 Ismét csenget néma. 569 00:25:40,989 --> 00:25:43,280 Ez csak akkor fog tudni, hogy mi mondani, hogy felülről lefelé, 570 00:25:43,280 --> 00:25:45,765 így szükséges, hogy legalább ad ez egy tipp, hogy mi jön. 571 00:25:45,765 --> 00:25:47,330 >> Most nézzük meg legfontosabb itt. 572 00:25:47,330 --> 00:25:50,040 Hadd lépjünk le itt és mi fő csinál. 573 00:25:50,040 --> 00:25:53,780 Ez nem olyan hosszú egy függvény, és valójában a konstrukció itt ismerős. 574 00:25:53,780 --> 00:25:57,590 Kijelentem, változó n, majd a Én ellep a felhasználó újra és újra 575 00:25:57,590 --> 00:26:01,880 egy pozitív egész szám segítségével getInt, és csak kilépés ebből a hurok 576 00:26:01,880 --> 00:26:03,280 ha a felhasználó nem teljesíti. 577 00:26:03,280 --> 00:26:05,670 Do While, általunk használt ellep a felhasználó ilyen módon. 578 00:26:05,670 --> 00:26:06,670 Most ez érdekes. 579 00:26:06,670 --> 00:26:08,510 Kijelentem, egy int a "válasz". 580 00:26:08,510 --> 00:26:11,420 Én rendelni azt a visszatérési érték A funkció a "szigma". 581 00:26:11,420 --> 00:26:15,200 Nem tudom, hogy ez mit jelent még, de Emlékszem, kijelentve, hogy egy perce. 582 00:26:15,200 --> 00:26:18,310 És akkor én halad a értéket, amit a felhasználó beírt, n, 583 00:26:18,310 --> 00:26:20,420 és aztán bejelenteni a válasz. 584 00:26:20,420 --> 00:26:22,260 Hát hadd lépjünk vissza egy pillanatra. 585 00:26:22,260 --> 00:26:28,620 Menjünk előre ebbe a könyvtárba, hogy szigma 0, és valóban futtatni ezt a programot 586 00:26:28,620 --> 00:26:30,490 és meglátjuk, mi történik. 587 00:26:30,490 --> 00:26:35,930 Ha megyek előre, és fuss ez a program, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 és írjon be egy pozitív egész, mint két, Sigma, 589 00:26:40,139 --> 00:26:43,180 mivel a görög szimbólum azt jelenti, csak majd összeadjuk a számokat 590 00:26:43,180 --> 00:26:44,320 nulla legfeljebb két. 591 00:26:44,320 --> 00:26:46,560 Így 0 plusz 1 plusz 2. 592 00:26:46,560 --> 00:26:48,830 Így ez remélhetőleg adjon nekem 3. 593 00:26:48,830 --> 00:26:49,750 Ez minden csinál. 594 00:26:49,750 --> 00:26:52,690 És hasonlóan, ha én vezetem ezt újra és adok neki a hármas számú, 595 00:26:52,690 --> 00:26:56,721 ez 3 plusz 2, annak érdekében, hogy ez 5 plusz 1 adj 6. 596 00:26:56,721 --> 00:26:59,470 És akkor, ha igazán őrült és kezdjen el írni a nagyobb számban, 597 00:26:59,470 --> 00:27:01,290 meg kell adni nekem nagyobb és nagyobb összegeket. 598 00:27:01,290 --> 00:27:02,250 Szóval ez az egész. 599 00:27:02,250 --> 00:27:04,010 >> Szóval mit szigma néz ki? 600 00:27:04,010 --> 00:27:05,430 Hát, ez elég egyszerű. 601 00:27:05,430 --> 00:27:08,940 Ez hogyan lehet, hogy végre ez az elmúlt pár hétben. 602 00:27:08,940 --> 00:27:11,120 "Int" lesz a visszatérési típus. 603 00:27:11,120 --> 00:27:14,330 Sigma a neve, és tart változó m helyett n. 604 00:27:14,330 --> 00:27:15,940 Majd változtatni, hogy akár felső. 605 00:27:15,940 --> 00:27:17,340 Akkor ez csak egy józan eszét csekket. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Meglátjuk, hogy miért egy pillanat. 608 00:27:19,950 --> 00:27:24,220 Most kijelentem másik változó, Összességében inicializálja nullára. 609 00:27:24,220 --> 00:27:28,140 Aztán van ez a for ciklus ciklussal, látszólag a világosság, 610 00:27:28,140 --> 00:27:33,810 az i = 1, akár egy = m, ami amit a felhasználó beírt, aztán 611 00:27:33,810 --> 00:27:35,690 növelni az összeget, mint ez. 612 00:27:35,690 --> 00:27:37,360 Majd vissza az összeget. 613 00:27:37,360 --> 00:27:38,440 >> Tehát egy pár kérdést. 614 00:27:38,440 --> 00:27:42,370 Az egyik, hogy azt állítják, az én megjegyzést, hogy ez a elkerüli kockázata végtelen ciklusba kerül. 615 00:27:42,370 --> 00:27:45,620 Miért halad a negatív szám indukál, potenciálisan végtelen ciklusba? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> Közönség: Soha nem éri m. 618 00:27:51,290 --> 00:27:52,880 >> SPEAKER 1: Soha ne nyúljon m. 619 00:27:52,880 --> 00:27:55,880 De m telt el, úgyhogy fontolja meg egy egyszerű példát. 620 00:27:55,880 --> 00:27:58,510 Ha m telt el a felhasználót negatív. 621 00:27:58,510 --> 00:28:00,059 Függetlenül attól, hogy fő. 622 00:28:00,059 --> 00:28:01,850 Főbb megvéd bennünket ez is, úgyhogy csak 623 00:28:01,850 --> 00:28:04,680 hogy igazán anális Sigma is győződjön meg róla, 624 00:28:04,680 --> 00:28:06,540 hogy a bemenet nem lehet negatív. 625 00:28:06,540 --> 00:28:10,130 Tehát, ha m negatív, olyasmi, mint negatív. 626 00:28:10,130 --> 00:28:11,930 Mi fog történni? 627 00:28:11,930 --> 00:28:14,390 Nos, én fog hogy elinduljon egy, 628 00:28:14,390 --> 00:28:19,060 és aztán lesz kevesebb vagy egyenlő, mint m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Készenlét. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Hogy was-- ne, hadd nix ezt a történetet. 633 00:28:29,370 --> 00:28:32,780 Én nem kértem ezt a kérdést, mert annak kockázata, hogy én vagyok utalva 634 00:28:32,780 --> 00:28:38,360 nem fog megtörténni, mert én is mindig lesz nagyobb mint-- rendben, 635 00:28:38,360 --> 00:28:39,871 Én visszahúzódik a kérdést. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Nézzük csak a hangsúly ezen a részén van. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Miért Kijelentem néhány kívül a hurok? 640 00:28:48,830 --> 00:28:52,010 Notice on line 49 én már kijelentette i belsejében a hurok, 641 00:28:52,010 --> 00:28:54,950 de az online 48 én már kijelentette, némi külső. 642 00:28:54,950 --> 00:28:55,695 Igen. 643 00:28:55,695 --> 00:28:56,611 KÖZÖNSÉG: [nem hallható]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 SPEAKER 1: Persze. 646 00:28:59,400 --> 00:29:03,360 Így elsősorban én biztosan nem akar nyilatkozni és inicializálása összeg 647 00:29:03,360 --> 00:29:06,130 nullára belsejében a hurok minden ismétlés, 648 00:29:06,130 --> 00:29:09,370 mert ez egyértelműen legyőzze a célja, összegezve a számokat. 649 00:29:09,370 --> 00:29:11,770 Én folyamatosan változik az értéket vissza nullára. 650 00:29:11,770 --> 00:29:17,992 És azt is, mi a másik, misztikus oka az, hogy ugyanaz a design döntés? 651 00:29:17,992 --> 00:29:18,954 Igen. 652 00:29:18,954 --> 00:29:20,279 >> KÖZÖNSÉG: [nem hallható]. 653 00:29:20,279 --> 00:29:21,070 SPEAKER 1: Pontosan. 654 00:29:21,070 --> 00:29:24,060 Azt akarom elérni, hogy külső A hurok is, hogy mi a vonal? 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 És ennek alapján a szabály egy pár előadás ezelőtt, 658 00:29:29,910 --> 00:29:33,680 változó hatókörű, valóban, hogy a kapcsos zárójelek, amelyek kiterjednek rájuk. 659 00:29:33,680 --> 00:29:38,190 Tehát, ha én nem nyilvánítja összeget belül Ezeknek a külső kapcsos zárójelek, 660 00:29:38,190 --> 00:29:40,250 Nem tudom használni a sorban 53. 661 00:29:40,250 --> 00:29:43,160 Másképpen fogalmazva, ha én kijelentette, összeg itt, vagy akár a 662 00:29:43,160 --> 00:29:45,410 A hurok, nem tudtam elérni azt a 53. 663 00:29:45,410 --> 00:29:47,150 A változó hatékonyan elment. 664 00:29:47,150 --> 00:29:48,579 Tehát egy pár oka van. 665 00:29:48,579 --> 00:29:50,370 De most menjünk vissza és meglátjuk, mi történik. 666 00:29:50,370 --> 00:29:51,730 Tehát szigma hívódik. 667 00:29:51,730 --> 00:29:55,640 Hozzáteszi up 1 és 2, vagy 1 plusz 2 plusz 3, majd visszatér az érték, 668 00:29:55,640 --> 00:29:59,660 tárolja a válasz, és printf itt Ezért látok a képernyőn. 669 00:29:59,660 --> 00:30:03,079 Szóval, ez az, amit majd hívni egy iteratív megközelítés, ahol ismétlés csak 670 00:30:03,079 --> 00:30:03,870 alkalmazását jelenti a hurok. 671 00:30:03,870 --> 00:30:06,900 Egy ciklusban, a While ciklus, a Do While hurok, csak csinál valamit megint 672 00:30:06,900 --> 00:30:08,380 és újra és újra. 673 00:30:08,380 --> 00:30:13,505 >> De Sigma egyfajta ügyes funkció hogy én is végre másképp. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Mi a helyzet ezzel, ami csak azért, hogy ilyen jó, 676 00:30:19,120 --> 00:30:21,880 hadd igazán megszabadulni egy csomó figyelemelterelés 677 00:30:21,880 --> 00:30:24,380 mivel ez a funkció tényleg nagyon egyszerű. 678 00:30:24,380 --> 00:30:27,780 Nézzük Whittle le csak a négy fő vonal 679 00:30:27,780 --> 00:30:30,410 és megszabadulni az összes megjegyzések és kapcsos zárójeleket. 680 00:30:30,410 --> 00:30:34,334 Ez egyfajta észbontó alternatív megvalósítás. 681 00:30:34,334 --> 00:30:37,250 Rendben, lehet, hogy nem észbontó, de ez a fajta szexisebb, rendben, 682 00:30:37,250 --> 00:30:39,920 nézd meg ezt, sokkal több tömören. 683 00:30:39,920 --> 00:30:43,120 Mindössze négy sornyi kódot, Én először ezt a józanság csekket. 684 00:30:43,120 --> 00:30:45,732 Ha m értéke kisebb, vagy egyenlő, mint nulla, sigma nincs értelme. 685 00:30:45,732 --> 00:30:48,190 Ez csak kéne lennie Ebben az esetben a pozitív számok, 686 00:30:48,190 --> 00:30:50,340 úgyhogy csak fog vissza nulla önkényesen 687 00:30:50,340 --> 00:30:53,210 így legalább van néhány úgynevezett alap eset. 688 00:30:53,210 --> 00:30:54,430 >> De itt van a szépség. 689 00:30:54,430 --> 00:30:59,930 A teljes egészében ezt az ötletet, hozzátéve, a számok 1-től n, m, vagy ebben az esetben, 690 00:30:59,930 --> 00:31:02,630 lehet tenni ilyen halad a bak. 691 00:31:02,630 --> 00:31:04,947 Nos, mi az az összeg, 1 m? 692 00:31:04,947 --> 00:31:05,780 Nos, tudod mit? 693 00:31:05,780 --> 00:31:11,949 Ez ugyanaz, mint az összege m plusz az összeg 1-től m-mínusz 1. 694 00:31:11,949 --> 00:31:12,740 Hát tudod mit? 695 00:31:12,740 --> 00:31:13,940 Mi szigma m mínusz 1? 696 00:31:13,940 --> 00:31:17,860 Nos, ha ilyen követi ezt a logikus, hogy ez ugyanaz, mint m mínusz 1 697 00:31:17,860 --> 00:31:21,415 plusz szigma m mínusz 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Így egyfajta csak-- ez olyan, mint, ha csak 700 00:31:26,012 --> 00:31:28,220 próbál bosszantani egy barátnak és felteszek egy kérdést, 701 00:31:28,220 --> 00:31:31,344 Ön milyen válaszolni egy kérdést, akkor milyen tartani halad a bak. 702 00:31:31,344 --> 00:31:34,560 De mi a kulcs az, hogy ha folyamatosan így a szóban forgó kisebb és kisebb 703 00:31:34,560 --> 00:31:36,910 és kisebb, akkor Nem kérdezi, mi a szigma 704 00:31:36,910 --> 00:31:39,116 n, mi szigma a n, mi szigma n? 705 00:31:39,116 --> 00:31:40,990 Azt kérdezi, mi van szigma n, mi szigma 706 00:31:40,990 --> 00:31:42,839 n mínusz 1, mi a szigma n mínusz 2? 707 00:31:42,839 --> 00:31:44,880 Végül a kérdés fog válni, mi? 708 00:31:44,880 --> 00:31:50,250 Mi az egy vagy szigma nulla, néhány nagyon kis értékű, 709 00:31:50,250 --> 00:31:52,220 és amint kap arra, hogy a barátja, 710 00:31:52,220 --> 00:31:54,350 akkor nem fogja kérni ugyanazt a kérdést újra, 711 00:31:54,350 --> 00:31:55,975 csak most fogja mondani, Ó, ez nulla. 712 00:31:55,975 --> 00:31:58,490 Végeztünk játszani ezt a fajta A hülye ciklikus játék. 713 00:31:58,490 --> 00:32:02,950 >> Így rekurzió az a cselekmény, a programozás A funkció nevezte magát. 714 00:32:02,950 --> 00:32:06,630 Ez a program, amikor összeállítják és fut, a fog viselkedni, pontosan ugyanúgy, 715 00:32:06,630 --> 00:32:09,620 de mi a legfontosabb az, hogy a belső A funkció az úgynevezett szigma, 716 00:32:09,620 --> 00:32:13,150 van egy sor kód, amelyben magunkat hívjuk, 717 00:32:13,150 --> 00:32:14,980 ami általában rossz. 718 00:32:14,980 --> 00:32:21,160 Például, mi van, ha én először össze ez, úgyhogy győződjön meg sigma-- 719 00:32:21,160 --> 00:32:22,710 hogy sigma 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Pozitív egész szám, kérem, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Tehát mi a funkció úgy tűnik, hogy lehet, amely egy teszt, korrekt. 723 00:32:30,810 --> 00:32:34,917 De mi van, ha én egy kicsit veszélyes és törölje az úgynevezett alapeset, 724 00:32:34,917 --> 00:32:37,750 és csak azt mondják, jól vagyok, csak így ez sokkal bonyolultabb, mint amilyen valójában. 725 00:32:37,750 --> 00:32:42,450 Nézzük csak kiszámítani a szigma azáltal, hogy m, majd hozzáadjuk 726 00:32:42,450 --> 00:32:44,564 Sigma m mínusz egy? 727 00:32:44,564 --> 00:32:45,980 Nos, mi fog itt történni? 728 00:32:45,980 --> 00:32:47,140 Nézzük kicsinyítés. 729 00:32:47,140 --> 00:32:52,920 Nézzük újrafordítani a program menteni, újrafordítani a programot, 730 00:32:52,920 --> 00:33:00,450 majd a kész ./sigma-1-nagyítás, be pozitív egész kérem, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Hányan vagytok hajlandóak a fess fel, hogy lássam, hogy? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Így ez megtörténhet több okból, 735 00:33:06,690 --> 00:33:09,148 és őszintén szólva ezen a héten vagyunk arról, hogy még több belőlük. 736 00:33:09,148 --> 00:33:11,780 De ebben az esetben próbálja érvelni visszafelé 737 00:33:11,780 --> 00:33:14,430 mi történhetett volna itt? 738 00:33:14,430 --> 00:33:17,400 Szegmentációs hiba, azt mondta a múlt idő, utal egy szegmens a memória. 739 00:33:17,400 --> 00:33:18,690 Valami rossz történt. 740 00:33:18,690 --> 00:33:21,550 De mi volt az mechanikusan hogy elromlott 741 00:33:21,550 --> 00:33:25,000 itt, mert az én eltávolítás Az, hogy az úgynevezett alapeset, 742 00:33:25,000 --> 00:33:26,870 ahol vissza a kódolt érték? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Mit gondolsz, mi? 745 00:33:30,460 --> 00:33:31,219 Igen. 746 00:33:31,219 --> 00:33:32,135 >> KÖZÖNSÉG: [nem hallható]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 SPEAKER 1: Ah. 749 00:33:36,970 --> 00:33:37,550 Jó kérdés. 750 00:33:37,550 --> 00:33:39,508 Tehát a méret a szám hogy én összegzés 751 00:33:39,508 --> 00:33:41,920 annyira nagy, hogy meghaladta a méret a memóriát. 752 00:33:41,920 --> 00:33:44,640 Jó ötlet, de nem alapvetően fog okozni a balesetet. 753 00:33:44,640 --> 00:33:48,230 Hogy okozhat integer túlcsordulás, ahol a bitek éppen átfordítja 754 00:33:48,230 --> 00:33:51,760 és akkor félre egy igazán nagy szám, mint egy negatív szám, 755 00:33:51,760 --> 00:33:53,260 de ez önmagában még nem okoz balesetet. 756 00:33:53,260 --> 00:33:55,509 Mivel a végén a nap egy int még 32 bites. 757 00:33:55,509 --> 00:33:57,640 Ugye nem fog véletlenül ellopni a 33. bit. 758 00:33:57,640 --> 00:33:58,431 De egy jó gondolat. 759 00:33:58,431 --> 00:33:58,984 Igen. 760 00:33:58,984 --> 00:33:59,900 >> KÖZÖNSÉG: [nem hallható]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 1 hangszóró: A módszer Soha nem leáll, 763 00:34:02,300 --> 00:34:06,658 sőt nevezi magát újra és újra és újra és újra 764 00:34:06,658 --> 00:34:08,449 és újra, és egyik ezeket a funkciókat valaha 765 00:34:08,449 --> 00:34:13,310 befejezni mert egyetlen vonal kódot kéri themself újra és újra 766 00:34:13,310 --> 00:34:14,219 és újra. 767 00:34:14,219 --> 00:34:16,080 És ami igazán történik itt, és most 768 00:34:16,080 --> 00:34:18,100 akkor milyen felhívni ezt képileg. 769 00:34:18,100 --> 00:34:20,899 Hadd menjek át, hogy a kép egy pillanatra. 770 00:34:20,899 --> 00:34:22,940 Ez a kép, hogy a végül lyokra 771 00:34:22,940 --> 00:34:26,336 részletesebben, hogy mi folyik itt belsejében a számítógép memóriáját. 772 00:34:26,336 --> 00:34:28,460 És kiderül, hogy a az alsó kép 773 00:34:28,460 --> 00:34:29,709 az úgynevezett a verem. 774 00:34:29,709 --> 00:34:31,920 Ez a darab memória, egy darab RAM, 775 00:34:31,920 --> 00:34:33,920 ez csak használt bármikor metódusokat hívjuk. 776 00:34:33,920 --> 00:34:36,239 Minden alkalommal, amikor egy programozó, hívja a funkció, 777 00:34:36,239 --> 00:34:38,860 az operációs rendszer, mint például a Mac OS, Windows, vagy Linux, 778 00:34:38,860 --> 00:34:41,920 megragad egy csomó bájt, talán egy néhány kilobyte, talán néhány megabájt 779 00:34:41,920 --> 00:34:44,590 memória, átadja őket neked, majd lehetővé teszi, 780 00:34:44,590 --> 00:34:47,650 fut a funkciót bármit változó van szükség. 781 00:34:47,650 --> 00:34:50,699 És ha majd a hívás egy másik funkció és a másik funkció, 782 00:34:50,699 --> 00:34:53,590 kapsz egy szelet memória és egy másik szelet memória. 783 00:34:53,590 --> 00:34:57,090 >> És valóban, ha ezek a zöld tálca az Annenberg kijelenti, hogy a memória, 784 00:34:57,090 --> 00:34:59,870 Ez történik az első alkalommal, amikor hívást funkció szigma. 785 00:34:59,870 --> 00:35:04,510 Ez olyan, mintha egy tálca, mint ez A mi kezdetben egy üres verem. 786 00:35:04,510 --> 00:35:07,142 De ha azt a tálcát hívja magát, hogy úgy mondjam, 787 00:35:07,142 --> 00:35:08,850 hívás egy másik példányát Sigma, ez 788 00:35:08,850 --> 00:35:11,640 mint kér az operációs rendszer, Ó, kell még egy kis memóriát, 789 00:35:11,640 --> 00:35:12,520 így rám. 790 00:35:12,520 --> 00:35:14,840 És akkor nem lesz rakott a tetején. 791 00:35:14,840 --> 00:35:18,030 De ami legfontosabb az, hogy Az első tálca még mindig ott van, 792 00:35:18,030 --> 00:35:20,620 mert hivatkozni ez a második tálcát. 793 00:35:20,620 --> 00:35:23,500 Most Eközben sigma hívja sigma, ez olyan, mint kér több memóriát. 794 00:35:23,500 --> 00:35:25,830 Gets halmoztak fel ide. 795 00:35:25,830 --> 00:35:29,350 sigma sigma hívja, hogy egy másik tálca, hogy lesz halmoztak fel itt. 796 00:35:29,350 --> 00:35:32,942 És ha folyamatosan ezt, végül, milyen térkép ez a vizuális 797 00:35:32,942 --> 00:35:35,525 az, hogy a chart, mi fog történik a köteg tálcák? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Ez lesz haladhatja meg A memória a számítógép. 800 00:35:41,160 --> 00:35:45,790 És amint ezt a zöld tálca meghaladja a vízszintes vonal 801 00:35:45,790 --> 00:35:49,410 felett verem felett, hogy szó halom, amely akkor jön vissza, hogy a jövőben, 802 00:35:49,410 --> 00:35:50,410 ez egy rossz dolog. 803 00:35:50,410 --> 00:35:52,810 A kupac egy másik szegmense memória, 804 00:35:52,810 --> 00:35:55,190 és ha hagyja, hogy ezek tálcák halom és bolyhos, 805 00:35:55,190 --> 00:35:57,800 fogsz haladja meg a a saját szegmensében a memória, 806 00:35:57,800 --> 00:36:00,420 és a program valóban le fog zuhanni. 807 00:36:00,420 --> 00:36:02,930 >> Most, mint egy félre, ez a gondolat rekurzió, ezért 808 00:36:02,930 --> 00:36:06,500 egyértelműen problémákhoz vezethet, de Ez nem feltétlenül rossz dolog. 809 00:36:06,500 --> 00:36:08,840 Mert követően mérlegeli, minden, hogy-- és talán 810 00:36:08,840 --> 00:36:11,700 ez némi megszokni hogy hogyan viselkedni elegáns vagy mennyire egyszerű 811 00:36:11,700 --> 00:36:14,890 hogy a végrehajtás szigma volt. 812 00:36:14,890 --> 00:36:17,440 És nem fogjuk használni rekurzió, hogy sok minden a CS50, 813 00:36:17,440 --> 00:36:20,780 de CS51, és tényleg minden osztályban ahol manipulálni adatstruktúrák 814 00:36:20,780 --> 00:36:23,640 mint a fák, vagy a családi fák, amelyek bizonyos hierarchia, 815 00:36:23,640 --> 00:36:26,000 ez szuper, szuper hasznos. 816 00:36:26,000 --> 00:36:29,750 Most, mint egy félre, így A feltörekvő számítógépes szakemberek 817 00:36:29,750 --> 00:36:33,180 tisztában vannak néhány Google belső viccek, ha megy a Google 818 00:36:33,180 --> 00:36:36,345 és felnézel, mi a meghatározása, mondjuk, rekurzió adja. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Aha. 821 00:36:41,110 --> 00:36:42,670 Mellesleg, húztam fel egy pár. 822 00:36:42,670 --> 00:36:45,470 Ez olyan volt, mint 10 perc halogatás ma reggel. 823 00:36:45,470 --> 00:36:52,890 Ha Ön is a Google "ferdén" közlemény döntve a fejét slightly-- 824 00:36:52,890 --> 00:36:55,120 és akkor ez talán legkegyetlenebb az összes 825 00:36:55,120 --> 00:36:57,286 mert valaki töltött mint a nap végrehajtja ezt 826 00:36:57,286 --> 00:36:59,880 néhány évvel ago-- gyerünk. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Ó, várj, ez a hiba. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Tehát futó egyik világ legnagyobb honlapok 831 00:37:11,410 --> 00:37:13,510 ezek a buta kis húsvéti tojás. 832 00:37:13,510 --> 00:37:16,690 Valószínűleg fogyasztanak nemtriviális több sornyi kódot 833 00:37:16,690 --> 00:37:19,280 csak azért, hogy mi lehet kis vicces dolgokat. 834 00:37:19,280 --> 00:37:22,140 De legalább most már kap néhány ilyen belső vicceket. 835 00:37:22,140 --> 00:37:28,330 >> Most vessünk egy pillantást néhány a White Lies óta azt mondjuk az utóbbi időben, 836 00:37:28,330 --> 00:37:30,707 és elkezd húzza vissza egyes rétegek technikailag 837 00:37:30,707 --> 00:37:32,790 így igazán értem mi folyik 838 00:37:32,790 --> 00:37:34,860 és meg tudja érteni néhány, a fenyegetések, 839 00:37:34,860 --> 00:37:38,060 mint Shellshock, hogy most kezdett válni 840 00:37:38,060 --> 00:37:41,110 az élen mindenki figyelem, legalábbis a médiában. 841 00:37:41,110 --> 00:37:45,810 Tehát itt van egy nagyon egyszerű függvény hogy vissza semmi, semmis. 842 00:37:45,810 --> 00:37:46,790 A neve csere. 843 00:37:46,790 --> 00:37:50,880 Tart a két változó és visszatér semmi. 844 00:37:50,880 --> 00:37:52,260 Vesz a és b. 845 00:37:52,260 --> 00:37:53,337 Tehát egy gyors bemutató. 846 00:37:53,337 --> 00:37:54,170 Hoztunk ezeket. 847 00:37:54,170 --> 00:37:56,100 Akár azt is, hogy egy kis szünet itt egy pillanatra 848 00:37:56,100 --> 00:37:57,250 és van egy kis valamit inni. 849 00:37:57,250 --> 00:38:00,120 Ha valaki nem bánja csatlakozás engem itt egy pillanatra. 850 00:38:00,120 --> 00:38:01,830 Mi lenne, ha a gesztenyebarna ing? 851 00:38:01,830 --> 00:38:02,335 Gyere fel. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Csak az egyik ma. 854 00:38:05,260 --> 00:38:06,251 Köszönöm, bár. 855 00:38:06,251 --> 00:38:08,000 Rendben, és mi jön ki ide? 856 00:38:08,000 --> 00:38:08,660 Mi a neve? 857 00:38:08,660 --> 00:38:09,360 >> Hangszóró 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> SPEAKER 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Gyere fel. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Szóval Laura, nagyon egyszerű feladat ma. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Örülök, hogy megismerhetem yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Rendben. 866 00:38:16,910 --> 00:38:21,179 Tehát van egy kis tejet ide és van néhány narancslé ide 867 00:38:21,179 --> 00:38:23,345 és néhány csésze, amit kölcsönzött Annenberg ma. 868 00:38:23,345 --> 00:38:24,178 >> Hangszóró 4: kölcsönözte. 869 00:38:24,178 --> 00:38:27,240 SPEAKER 1 És megyek előre és kapsz egy fél pohár ezt. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Rendben. 872 00:38:28,800 --> 00:38:30,750 És kapsz fél egy pohár tej. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Ja, és csak így emlékszem, milyen volt, mint, 875 00:38:35,890 --> 00:38:38,860 Eszembe jutott, hogy ezt, és ma. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Oké. 878 00:38:42,530 --> 00:38:45,470 Ha nem bánja, lássuk, mi tegye át őket a saját szemüveg 879 00:38:45,470 --> 00:38:46,560 , ha akarod. 880 00:38:46,560 --> 00:38:48,710 Ez lesz a világ a Laura szeme. 881 00:38:48,710 --> 00:38:49,210 Rendben. 882 00:38:49,210 --> 00:38:53,820 Tehát a cél, mivel két csésze folyékony itt, tej és narancslé, 883 00:38:53,820 --> 00:38:58,370 A csere a két tartalmát, hogy a narancslé bemegy a tej pohár 884 00:38:58,370 --> 00:39:00,710 és a tej megy A narancslé kupát. 885 00:39:00,710 --> 00:39:02,359 >> Hangszóró 4: Kapok egy csésze? 886 00:39:02,359 --> 00:39:05,650 SPEAKER 1: Nagyon örülök, hogy megkérdezted, bár lett volna sokkal jobb felvételeket 887 00:39:05,650 --> 00:39:06,710 ha nem kérdezte. 888 00:39:06,710 --> 00:39:10,620 De igen, tudunk ajánlani egy harmadik csésze ez természetesen üres. 889 00:39:10,620 --> 00:39:11,120 Rendben. 890 00:39:11,120 --> 00:39:12,300 Így cserélni a tartalmát is. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Nagyon szép. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Nagyon jó. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Te ezt rendkívül óvatosan. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 És lépés. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Rendben. 901 00:39:31,350 --> 00:39:31,930 Kiváló. 902 00:39:31,930 --> 00:39:33,930 Egy nagy tapsot jó lenne Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Rendben. 905 00:39:37,000 --> 00:39:40,790 Van egy kis búcsú ajándék az Ön számára, de engedjék meg, hogy ezeket. 906 00:39:40,790 --> 00:39:42,620 Köszönöm szépen. 907 00:39:42,620 --> 00:39:46,170 Tehát egy egyszerű példa, mégis, annak bizonyítására, hogy ha nem 908 00:39:46,170 --> 00:39:48,300 szeretné cserélni a tartalom két tartályból, 909 00:39:48,300 --> 00:39:52,360 vagy nevezzük őket változók kell egy kis átmeneti tárolás 910 00:39:52,360 --> 00:39:56,710 a színpadon az egyik tartalmát úgy , amit ténylegesen a csere. 911 00:39:56,710 --> 00:40:01,790 Szóval valóban, ez a forráskód fel itt C reprezentatív, hogy pontosan. 912 00:40:01,790 --> 00:40:06,340 Ha a narancslé volt, és a tej volt b, és szerettük volna, hogy a csere a két, 913 00:40:06,340 --> 00:40:08,990 akkor próbálj ki valami kreatív öntésével egyik a másik, 914 00:40:08,990 --> 00:40:11,031 de ez valószínűleg nem vége különösen jól. 915 00:40:11,031 --> 00:40:15,260 És így egy harmadik csésze, hívás azt tmp, T-M-P megállapodás szerint, 916 00:40:15,260 --> 00:40:19,370 és tedd a tartalmát HL abban, akkor csere egy csésze, 917 00:40:19,370 --> 00:40:22,610 aztán a HL a eredeti cup, ezáltal 918 00:40:22,610 --> 00:40:25,320 elérése, pontosan úgy, ahogy Laura volt, a csere. 919 00:40:25,320 --> 00:40:26,850 >> Tehát lássuk, hogy pontosan. 920 00:40:26,850 --> 00:40:30,110 Hadd menjek előre, és nyissa meg fel egy példát, ami 921 00:40:30,110 --> 00:40:32,720 tulajdonképpen az úgynevezett "nem csere ", mert ez nem 922 00:40:32,720 --> 00:40:36,180 egyszerűen tenni, mint gondolnád. 923 00:40:36,180 --> 00:40:41,190 Tehát ebben a programban, észreveheti, hogy Én vagyok a stdio.h, régi barátunk. 924 00:40:41,190 --> 00:40:43,130 Nekem van a prototípus A csere ott, ami 925 00:40:43,130 --> 00:40:45,450 azt jelenti, annak végrehajtása a talán lent, 926 00:40:45,450 --> 00:40:48,050 és lássuk, mi a fő programot fog tenni nekem. 927 00:40:48,050 --> 00:40:52,020 Először Kijelentem int x lesz egy, és int y lesz kettő. 928 00:40:52,020 --> 00:40:54,930 Így gondolom, ezek a HL és tej volt. 929 00:40:54,930 --> 00:40:57,100 És akkor én csak egy printf mondván x ez 930 00:40:57,100 --> 00:41:00,120 és y ez, csak azért, hogy vizuálisan látni, mi folyik itt. 931 00:41:00,120 --> 00:41:03,810 Aztán már printf állítva hogy én vagyok kicserélni a két, 932 00:41:03,810 --> 00:41:07,100 és aztán nyomtassa ki a azt állítják, hogy ők cserélték, 933 00:41:07,100 --> 00:41:09,300 és nyomtassa ki x és y újra. 934 00:41:09,300 --> 00:41:13,010 Tehát itt a swap pontosan mit Laura volt, 935 00:41:13,010 --> 00:41:16,240 és pontosan mit láttunk A képernyő egy perce. 936 00:41:16,240 --> 00:41:19,380 >> Szóval, menjünk előre, és nagyon csalódott. 937 00:41:19,380 --> 00:41:24,690 Félreértés ne csere, és fuss nincs csere, nagyítás a kimeneti itt. 938 00:41:24,690 --> 00:41:28,320 Adja meg a x 1, y 2, csere cserélték. 939 00:41:28,320 --> 00:41:32,700 x értéke mindig 1, és y értéke 2 is. 940 00:41:32,700 --> 00:41:37,630 Így, bár, őszintén szólva, ez úgy néz ki, Pontosan úgy, mint, bár technikailag, 941 00:41:37,630 --> 00:41:40,730 amit Laura volt, nem úgy tűnik, hogy működik. 942 00:41:40,730 --> 00:41:42,130 Akkor miért van ez? 943 00:41:42,130 --> 00:41:46,630 Nos, kiderült, hogy amikor írunk egy programot, mint ez 944 00:41:46,630 --> 00:41:51,590 amely a két legfontosabb, kiemelt itt, majd egy másik funkció, mint a csere, 945 00:41:51,590 --> 00:41:54,230 emeltük, amely azt kéri, a világ 946 00:41:54,230 --> 00:41:57,030 úgy néz ki, egy kis valami hasonló Ezek a tálcák egy perce. 947 00:41:57,030 --> 00:42:00,440 Amikor legfontosabb először lesz úgynevezett, ez olyan, mintha azt kérdezi operációs rendszer 948 00:42:00,440 --> 00:42:04,030 egy kis memória minden helyi változók, mint x és y, hogy a Main, 949 00:42:04,030 --> 00:42:05,660 és a végén ott. 950 00:42:05,660 --> 00:42:10,920 De ha a fő hívások cserélni, és a főbb átadja a swap két érv, a és b, 951 00:42:10,920 --> 00:42:16,410 narancslé és a tej, ez nem olyan, mint átadta a narancslé és a tej 952 00:42:16,410 --> 00:42:17,500 Laura. 953 00:42:17,500 --> 00:42:21,300 Mi a számítógépeden, ez halad példányban a narancslé 954 00:42:21,300 --> 00:42:27,110 és másolatait a tejet Laura, hogy a Mi végül belsejében ezt a tálcát 955 00:42:27,110 --> 00:42:32,510 az érték egy és kettő, vagy HL és a tej, de ezek másolatait, 956 00:42:32,510 --> 00:42:34,790 annak érdekében, hogy ezen a ponton a történet, ott 957 00:42:34,790 --> 00:42:36,930 a HL és a tej minden ilyen tálcákat. 958 00:42:36,930 --> 00:42:39,260 Van egy és két minden ilyen tálcák, 959 00:42:39,260 --> 00:42:41,720 és a csere funkció valóban működik. 960 00:42:41,720 --> 00:42:46,090 Ez swapping őket belülről A második legmagasabb tálca, 961 00:42:46,090 --> 00:42:48,147 de hogy csere nem befolyásolja. 962 00:42:48,147 --> 00:42:49,980 És ennek alapján csak néhány alapelv mi már 963 00:42:49,980 --> 00:42:52,970 beszélt korábban, és valóban csak néhány perccel ezelőtt, mi 964 00:42:52,970 --> 00:42:58,770 megmagyarázza, hogy miért változik a és b belsejében csere 965 00:42:58,770 --> 00:43:05,560 nincs hatással az x és y, bár Átmentem x és y, hogy a swap funkció. 966 00:43:05,560 --> 00:43:08,750 Mi az a kulcsszó, hogy itt Lehet, leegyszerűsítve magyarázni? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Azt hiszem, hallottam itt? 969 00:43:12,627 --> 00:43:13,335 Közönség: Return. 970 00:43:13,335 --> 00:43:14,085 SPEAKER 1: vissza? 971 00:43:14,085 --> 00:43:14,590 Nem tér vissza. 972 00:43:14,590 --> 00:43:15,895 Menjünk egy másik. 973 00:43:15,895 --> 00:43:16,395 Mi ez? 974 00:43:16,395 --> 00:43:17,080 >> KÖZÖNSÉG: [nem hallható]. 975 00:43:17,080 --> 00:43:20,000 >> SPEAKER 1: OK, így return-- tudtuk hogy visszatérés a munka a történet, 976 00:43:20,000 --> 00:43:21,914 de van egy még egyszerűbb magyarázat. 977 00:43:21,914 --> 00:43:22,580 Közönség: Scope. 978 00:43:22,580 --> 00:43:23,288 SPEAKER 1: Scope. 979 00:43:23,288 --> 00:43:24,300 Elviszem hatálya alá. 980 00:43:24,300 --> 00:43:27,290 Tehát hatály, emlékszem, hol az x és y kijelentette. 981 00:43:27,290 --> 00:43:30,840 Ők nyilvánították belül fő egészen itt. 982 00:43:30,840 --> 00:43:33,200 a és b, eközben vannak hatékonyan nyilvánította 983 00:43:33,200 --> 00:43:35,930 belsejében csere, nem egészen A kapcsos zárójelek, de még mindig 984 00:43:35,930 --> 00:43:37,690 az általános terület csere. 985 00:43:37,690 --> 00:43:40,560 És így valóban, a és b csak létezik ebben a tálca 986 00:43:40,560 --> 00:43:44,850 a Annenberg, ez második kódrészletet. 987 00:43:44,850 --> 00:43:49,500 Szóval valóban változik a másolás, de ez nem is annyira hasznos. 988 00:43:49,500 --> 00:43:52,190 >> Szóval vessünk egy pillantást ez egy kicsit alacsonyabb szinten. 989 00:43:52,190 --> 00:43:55,430 Én megyek vissza A Source Directory, 990 00:43:55,430 --> 00:43:58,330 és én fogok először nagyítás itt, és csak 991 00:43:58,330 --> 00:44:02,290 megerősíteni, hogy én vagyok ebben nagyobb terminál ablak, 992 00:44:02,290 --> 00:44:04,430 A program még mindig úgy viselkedik, mint az. 993 00:44:04,430 --> 00:44:06,840 Tegyük fel, hogy ez a nem szándékos. 994 00:44:06,840 --> 00:44:10,090 Nyilvánvaló akartam swap munka, ezért úgy érzi, mint egy bogár. 995 00:44:10,090 --> 00:44:12,780 Most kezdhetnénk hozzáadása Sok printf által a kódomat, 996 00:44:12,780 --> 00:44:16,010 kinyomtatni x ide, y felett itt egy ide, b ide. 997 00:44:16,010 --> 00:44:18,220 De őszintén szólva, ez valószínűleg mi csináltál egy pár hétig 998 00:44:18,220 --> 00:44:20,190 most, munkaidőn és otthon, amikor dolgozik 999 00:44:20,190 --> 00:44:22,150 A psets próbálnak találni hibákat. 1000 00:44:22,150 --> 00:44:25,560 De látni fogod, ha még nem tetted meg, hogy a probléma meg három bemutatja 1001 00:44:25,560 --> 00:44:31,630 a parancs nevű GDB, ahol GDB, GNU debugger, 1002 00:44:31,630 --> 00:44:34,040 maga is egy csomó funkciók, amelyek valójában 1003 00:44:34,040 --> 00:44:38,160 értsük helyzetekben mint ez, de feltűnően, 1004 00:44:38,160 --> 00:44:39,940 megoldani a problémákat, és megtalálni a hibákat. 1005 00:44:39,940 --> 00:44:40,940 Így fogom csinálni. 1006 00:44:40,940 --> 00:44:44,770 Ahelyett ./noswap vagyok helyette fog futni GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Más szóval, megyek futtatni a a program nem a Bash, új barátunk 1009 00:44:51,200 --> 00:44:51,850 ma. 1010 00:44:51,850 --> 00:44:53,970 Fogom futtatni a programot noswap belül 1011 00:44:53,970 --> 00:44:56,900 Ennek más a program neve GDB, ami egy debugger, amely 1012 00:44:56,900 --> 00:45:01,035 egy olyan program, ami célja, hogy a Ti emberek megtalálja és eltávolítja a hibákat. 1013 00:45:01,035 --> 00:45:03,410 Szóval, ha megüt Fuss itt van egy szörnyű mennyiségű szöveget 1014 00:45:03,410 --> 00:45:04,868 hogy valóban nem kell olvasni. 1015 00:45:04,868 --> 00:45:07,290 Ez lényegében egy figyelemelterelés A gyors, ami 1016 00:45:07,290 --> 00:45:10,030 Megyek a control-L felkelni a tetején ott. 1017 00:45:10,030 --> 00:45:11,800 Ez a GDB gyors. 1018 00:45:11,800 --> 00:45:15,550 Ha azt akarom futtatni ezt a programot most, mivel ez a kis puskát a mai 1019 00:45:15,550 --> 00:45:21,860 dia sugallja, Run az első azt parancsolja, hogy mi jelentett bevezetni. 1020 00:45:21,860 --> 00:45:25,150 És én csak megyek, hogy írja fuss ide belsejében GDB, 1021 00:45:25,150 --> 00:45:26,811 és valóban futott a programom. 1022 00:45:26,811 --> 00:45:29,310 Most van egy kis további kimenete a képernyő, mint ez, 1023 00:45:29,310 --> 00:45:31,910 de ez GDB csak, hogy anális és mondja el, mi folyik itt. 1024 00:45:31,910 --> 00:45:34,451 Nem igazán kell aggódnia ezekről részleteket most. 1025 00:45:34,451 --> 00:45:36,890 De ami igazán jó a GDB, ha én ezt again-- 1026 00:45:36,890 --> 00:45:42,100 Vezérlés-L törli a screen-- hadd menjen előre, és írja be a "szünet fő", ily módon, 1027 00:45:42,100 --> 00:45:45,743 amikor elütöttem az Enter, amelyben mi hívott egy töréspontot a noswap.c, 1028 00:45:45,743 --> 00:45:51,270 A 16. sorban, ott, ahol GDB kitalálta a program valóban 1029 00:45:51,270 --> 00:45:53,070 az, hogy én a funkció valójában. 1030 00:45:53,070 --> 00:45:55,070 Ez most nem foglalkozunk most de ez a cím 1031 00:45:55,070 --> 00:45:57,310 emlékére kifejezetten ezt a funkciót. 1032 00:45:57,310 --> 00:46:00,240 Így most, amikor a RUN, észre, mi jó itt. 1033 00:46:00,240 --> 00:46:05,650 Az a program bontja a vonalat I mondta GDB szünet végrehajtást. 1034 00:46:05,650 --> 00:46:09,850 Szóval nem kell most változtatni a kódot, adjunk hozzá néhány printf által, újrafordítani, hajtsa végre ismét a 1035 00:46:09,850 --> 00:46:13,300 meg, a változás, adjunk hozzá egy kevés printf által, menteni, fordítani, futtatni. 1036 00:46:13,300 --> 00:46:18,100 Én is csak séta a programom lépésről lépésről lépésre az emberi sebességgel, 1037 00:46:18,100 --> 00:46:20,880 nem Intel-belül ilyen sebesség. 1038 00:46:20,880 --> 00:46:24,580 >> Így most észre ezt a sort itt jelenik meg, és ha visszamegyek 1039 00:46:24,580 --> 00:46:27,800 az én program gedit, észre, hogy ez valójában 1040 00:46:27,800 --> 00:46:29,280 Az első sor kódot. 1041 00:46:29,280 --> 00:46:31,240 Van vonal 16 gedit. 1042 00:46:31,240 --> 00:46:34,610 Van vonal 16 belül GDB, és még bár ez a fekete-fehér felület 1043 00:46:34,610 --> 00:46:37,760 közel sem olyan felhasználói barátságos, ez azt jelenti, 1044 00:46:37,760 --> 00:46:41,680 hogy a vonal 16 nem hajtották végre még, de hamarosan lesz. 1045 00:46:41,680 --> 00:46:46,220 Tehát, ha valóban azt írja print x, nem printf, csak print x, 1046 00:46:46,220 --> 00:46:50,730 Én egy kis hamis értéket ott nulla, mert x nem helyeztük üzembe még. 1047 00:46:50,730 --> 00:46:54,760 Úgyhogy gépelni a következő, vagy, ha azt szeretnék, hogy divatos, csak n a következő. 1048 00:46:54,760 --> 00:46:59,090 De mikor írja be a következő, most észre mozog, hogy a 17. sorban. 1049 00:46:59,090 --> 00:47:02,840 Tehát logikus, ha már végre vonal 16 és most írja print x, 1050 00:47:02,840 --> 00:47:03,640 mit kell látni? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Egy. 1053 00:47:05,520 --> 00:47:07,820 >> És most ez kétségkívül zavaró. 1054 00:47:07,820 --> 00:47:11,260 2 $ csak egy divatos módon, ha akar utalni, hogy érték később, 1055 00:47:11,260 --> 00:47:12,510 lehet mondani, hogy "dollár jel kettő." 1056 00:47:12,510 --> 00:47:13,480 Olyan, mint egy visszautalást. 1057 00:47:13,480 --> 00:47:14,570 De most, ne törődj vele. 1058 00:47:14,570 --> 00:47:17,070 Az az érdekes, hogy mi van a jobb oldalon az egyenlőségjel. 1059 00:47:17,070 --> 00:47:21,000 És most, ha azt írja a következő újra és a nyomtatási y, én meg a 2. 1060 00:47:21,000 --> 00:47:23,870 Én is már nyomtatni x megint, és őszintén szólva, 1061 00:47:23,870 --> 00:47:27,130 ha kapok egy kicsit zavaros, hogy ahol én vagyok, én írja lista lista 1062 00:47:27,130 --> 00:47:30,590 és csak látni néhány háttér körül az pont én vagyok valóban az. 1063 00:47:30,590 --> 00:47:35,180 És most írja következő, és x 1 lehet. 1064 00:47:35,180 --> 00:47:36,300 Most típus mellett. 1065 00:47:36,300 --> 00:47:37,710 Oh, y 2. 1066 00:47:37,710 --> 00:47:40,750 És ismét, ez zavaró, mert GDB kimenete 1067 00:47:40,750 --> 00:47:43,044 van tárolva a saját termelés. 1068 00:47:43,044 --> 00:47:45,710 De ha folyamatosan szem előtt tartva, a nézett oda-vissza a kódot 1069 00:47:45,710 --> 00:47:47,740 vagy a tojásrakás ki oldalra mellett talán, akkor 1070 00:47:47,740 --> 00:47:51,020 látni, hogy tényleg én vagyok átlépett a programom. 1071 00:47:51,020 --> 00:47:54,620 >> De figyeljük meg, mi történik a következő, a szó szoros értelmében. 1072 00:47:54,620 --> 00:47:56,380 Itt a 22. sorban. 1073 00:47:56,380 --> 00:48:01,315 Hadd menjek át, és ezzel mozog 23, és ha nyomtatni x most még egy. 1074 00:48:01,315 --> 00:48:03,890 És ha nyomtatni y most még egy. 1075 00:48:03,890 --> 00:48:05,820 Tehát ez nem egy hasznos gyakorlat. 1076 00:48:05,820 --> 00:48:07,450 Szóval újra ezt. 1077 00:48:07,450 --> 00:48:10,069 Hadd menjek vissza a felső és típus fut újra. 1078 00:48:10,069 --> 00:48:12,110 És mondja a program ez hibakeresést 1079 00:48:12,110 --> 00:48:14,109 elkezdődött már, indult az elején. 1080 00:48:14,109 --> 00:48:15,420 Igen, csináljuk meg újra. 1081 00:48:15,420 --> 00:48:22,000 És ezúttal csináljuk a következő, next, next, next, next, 1082 00:48:22,000 --> 00:48:24,180 de most a dolgok érdekessé. 1083 00:48:24,180 --> 00:48:27,760 Most azt akarom, hogy belépjünk csere, így nem írja a következő. 1084 00:48:27,760 --> 00:48:34,380 I típusú lépés, és most vette észre ugrott, hogy noswap.c 33. sor. 1085 00:48:34,380 --> 00:48:37,240 Ha visszamegyek a gedit, mi a 33. sor? 1086 00:48:37,240 --> 00:48:40,500 Ez az első tényleges kódsor belsejében csere. 1087 00:48:40,500 --> 00:48:44,150 Ami szép és jó, mert most már tudom fajta piszkálni körül, és kap kíváncsi 1088 00:48:44,150 --> 00:48:46,052 arról, hogy mi folyik igazán ott. 1089 00:48:46,052 --> 00:48:46,760 Hadd nyomtatni tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Hűha. 1092 00:48:48,800 --> 00:48:51,438 Miért tmp néhány őrült, hamis szemét érték? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 Közönség: Ez nem helyeztük üzembe. 1095 00:48:56,120 --> 00:48:57,150 SPEAKER 1: Ez nem helyeztük üzembe. 1096 00:48:57,150 --> 00:49:00,270 És valóban, ha egy olyan programot futtat, te adni egy csomó memória 1097 00:49:00,270 --> 00:49:03,392 az operációs rendszer, de a nem adja meg olyan értékeket, 1098 00:49:03,392 --> 00:49:05,600 így bármit bit te látva itt, bár ez 1099 00:49:05,600 --> 00:49:07,770 ezt az őrült nagy negatív számot, csak azt jelenti, 1100 00:49:07,770 --> 00:49:10,750 hogy ezek a maradványok néhány korábbi használatát, hogy RAM, 1101 00:49:10,750 --> 00:49:13,050 bár én még nem magamat kell még. 1102 00:49:13,050 --> 00:49:17,086 Úgyhogy most megyek előre és típusa következő, és ha most írja print tmp, 1103 00:49:17,086 --> 00:49:17,835 mit kell látni? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Bármi legyen is az értéke volt, az az első érv, csak 1106 00:49:23,360 --> 00:49:25,550 mint x volt az első dolog, hogy telt el, 1107 00:49:25,550 --> 00:49:30,450 így a és x meg kell egyeznie, így nyomtatni tmp kell nyomtatni egyet. 1108 00:49:30,450 --> 00:49:36,360 >> Tehát mit fog látni a probléma meg három egy tutorial a fajta a GDB, 1109 00:49:36,360 --> 00:49:40,020 de észre, hogy ez a kezdete Egy pillantást egy eszköz, amely valóban 1110 00:49:40,020 --> 00:49:42,774 segít megoldani a problémákat így sokkal hatékonyabban. 1111 00:49:42,774 --> 00:49:44,690 Mi vagyunk végül fog tenni szerdán 1112 00:49:44,690 --> 00:49:48,180 A kezd húzza vissza egy pár réteg és távolítsa el néhány képzés kerekek. 1113 00:49:48,180 --> 00:49:50,496 Ez a dolog az úgynevezett karakterlánc, mi már használják egy ideje, 1114 00:49:50,496 --> 00:49:53,370 fogunk lassan elvenni meg, és elkezd beszélni 1115 00:49:53,370 --> 00:49:55,725 valami ezoterikus néven char * 1116 00:49:55,725 --> 00:49:59,550 de fogunk tenni ezt a szép és először csak enyhén, bár mutatók, 1117 00:49:59,550 --> 00:50:02,730 ahogy ők hívják, tehetünk néhány nagyon rossz dolog, ha visszaélnek, 1118 00:50:02,730 --> 00:50:06,040 nézi egy kis claymation a barátunk Nick Parlante Stanford 1119 00:50:06,040 --> 00:50:09,670 Egyetem professzora, számítógép tudósok, akik össze előnézet 1120 00:50:09,670 --> 00:50:11,075 A mi várható szerdán. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [Videolejátszás] 1123 00:50:13,400 --> 00:50:13,900 Hé, Muci. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Kelj fel. 1126 00:50:15,780 --> 00:50:17,240 Itt az ideje a mutató móka. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> Mi az? 1129 00:50:19,350 --> 00:50:21,150 Tudjon meg többet a mutatók? 1130 00:50:21,150 --> 00:50:22,050 Oh, nagyszerű! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END Videolejátszás] 1133 00:50:23,730 --> 00:50:25,396 SPEAKER 1: Hogy várja szerdán. 1134 00:50:25,396 --> 00:50:26,440 Majd akkor találkozunk. 1135 00:50:26,440 --> 00:50:27,106 [Videolejátszás] 1136 00:50:27,106 --> 00:50:30,420 -És Most, mély gondolatokat, által Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> Miért vagyunk tanulni C? 1139 00:50:35,900 --> 00:50:36,785 Miért nem A +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Nevetés] 1142 00:50:40,910 --> 00:50:42,160 >> [END Videolejátszás]