1 00:00:00,000 --> 00:00:12,040 >> [Muusika mängimine] 2 00:00:12,040 --> 00:00:16,460 >> SPEAKER 1: Olgu, see on CS50, ja see on algusest nädalas neli, 3 00:00:16,460 --> 00:00:20,420 ja nagu te võib-olla kuulnud või lugeda, maailm on lõppemas. 4 00:00:20,420 --> 00:00:23,520 Minnes üle kogu internet on teadmiste ja teadlikkuse 5 00:00:23,520 --> 00:00:27,100 on viga programmi programmeerimiskeelt nimega Bash. 6 00:00:27,100 --> 00:00:32,729 See on imeliselt kaubamärgiga kui Shellshock või Bash uks, 7 00:00:32,729 --> 00:00:35,485 kuid artikleid nagu need ei ole ebatavaline. 8 00:00:35,485 --> 00:00:38,807 Ja tegelikult, paljud neist toovad tagasi mälestused Heartbleed, 9 00:00:38,807 --> 00:00:41,640 mida te võib-olla märganud vajutage tagasi möödunud kevadel, mis 10 00:00:41,640 --> 00:00:43,980 oli samamoodi üsna dramaatiline. 11 00:00:43,980 --> 00:00:47,110 Nüüd need, mis te siin täna, kui palju sul on, 12 00:00:47,110 --> 00:00:50,330 isegi kui sa ei saa aru, mida see on kõik umbes, kuulnud Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Olgu, ja kui palju te on arvutid, mis on tundlikud? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, seal peaks olema palju, palju rohkem kätte üles just nüüd, et põhjus, miks me näeme. 17 00:01:00,250 --> 00:01:02,580 >> Võtame pilk on kestnud meedias 18 00:01:02,580 --> 00:01:05,304 ja siis selgitan natuke siin meie jaoks tehniliselt. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> SPEAKER 2: Security eksperdid hoiatas, et tõsine viga saanud 21 00:01:11,250 --> 00:01:15,650 umbes mõjutada sadu miljonid maailma veebi kasutajatele. 22 00:01:15,650 --> 00:01:20,600 Mis täpselt on viga, mis on olnud dubleeritud Shellshock ja mida see teeb? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Noh, Shellshock on tuntud ka kui Bash viga, tarkvara ta kasutab. 25 00:01:28,910 --> 00:01:33,230 Häkkerid kasutavad viirus skannida haavatav süsteeme töötab Linux ja Unix 26 00:01:33,230 --> 00:01:36,300 operatsioonisüsteemide ja seejärel nakatavad neid. 27 00:01:36,300 --> 00:01:38,730 Bash on käsurea kesta. 28 00:01:38,730 --> 00:01:43,460 See võimaldab kasutajatel anda käske käivitada programmid ja funktsioonid, tarkvara 29 00:01:43,460 --> 00:01:45,250 kirjutades teksti. 30 00:01:45,250 --> 00:01:49,980 See on tavaliselt kasutatakse programmeerijad ja ei tohiks olla avatud laiemale maailmale, 31 00:01:49,980 --> 00:01:51,590 kuigi Shellshock muudab seda. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Noh, worringly mõned analüütikud hoiatada, võiks olla suurem oht, 34 00:01:57,910 --> 00:02:01,580 sest Shellshock lubab täielikku kontrolli nakatunud masin, 35 00:02:01,580 --> 00:02:06,030 samas Heartbleed lubatud ainult häkkerid luurama arvutid. 36 00:02:06,030 --> 00:02:09,130 See on nii tõsine, et see on hinnatud 10 10st 37 00:02:09,130 --> 00:02:11,900 tõsiduse Riiklik Haavatavus andmebaas. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 kõigist veebiserverite juures riski, kaasa arvatud mõned Mac arvuteid. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Noh, veenduge, et olete plaaster oma süsteemi nüüd. 42 00:02:25,600 --> 00:02:29,330 Igaüks hosting veebileht töötab mõjutatud operatsioonisüsteemide 43 00:02:29,330 --> 00:02:31,800 peaks võtma nii kiiresti kui võimalik. 44 00:02:31,800 --> 00:02:35,390 Igaüks, kes saab endale see peaks välja nägema nende jälgimine ja veebirakenduse 45 00:02:35,390 --> 00:02:37,355 tulemüüride tutvu rünnaku. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SPEAKER 3: Halvim mis võib juhtuda, on 48 00:02:41,770 --> 00:02:45,080 et keegi oleks kirjutada kood, mis automaatselt minna ja skaneerida 49 00:02:45,080 --> 00:02:48,280 Internet ja mõjutaks kõik need arvutid. 50 00:02:48,280 --> 00:02:50,710 Ja kui nad seda teevad, et, noh, kõige hullem asi, mida nad võiks teha 51 00:02:50,710 --> 00:02:53,300 lihtsalt kustutada kõik, või suletud alade alla. 52 00:02:53,300 --> 00:02:55,360 Nii et me ei näe kahju sellest seisukohast, 53 00:02:55,360 --> 00:02:58,300 kui meil oleks pahatahtlik inimesed kes lihtsalt otsustavad põhjustada häireid 54 00:02:58,300 --> 00:03:02,534 tuues süsteemi alla või kustutamine failid ja asjad niimoodi. 55 00:03:02,534 --> 00:03:05,200 SPEAKER 2: Mõned ütlevad, et see on üks kõige raskem mõõta 56 00:03:05,200 --> 00:03:08,080 vead aastat ja võib kesta nädalaid või isegi 57 00:03:08,080 --> 00:03:10,820 kuud, et teha kindlaks selle lõplik mõju. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> SPEAKER 1: Nii see kõik on tõsi, kuid naljakas asi on peaaegu kõik 60 00:03:15,560 --> 00:03:18,330 kujundid sa nägid, välja arvatud ehk klaviatuur, 61 00:03:18,330 --> 00:03:20,930 on midagi pistmist viga üldse. 62 00:03:20,930 --> 00:03:23,960 Serverid ja juhtmed ja nii edasi, See on omamoodi riivamisi seotud, 63 00:03:23,960 --> 00:03:27,410 aga keskmes see on tegelikult päris tuttav, mis toimub siin. 64 00:03:27,410 --> 00:03:30,050 Tegelikult, las ma minna meie CS50 seade. 65 00:03:30,050 --> 00:03:32,910 Lubage mul minna ja maksimeerida terminal window siin. 66 00:03:32,910 --> 00:03:36,020 Ja te ei kasutanud seda, või sisseehitatud versioon sellest, 67 00:03:36,020 --> 00:03:39,460 aastal gedit, et kirjutada programme, käske, ja nii edasi, 68 00:03:39,460 --> 00:03:43,690 ja see on tegelikult, ja tal olnud nädalaid, Bash, B--S-H. 69 00:03:43,690 --> 00:03:46,890 See on Bourne-uuesti laduma, mis on lihtsalt fancy viis öelda, 70 00:03:46,890 --> 00:03:50,220 see on programm, mis on vilgub kiiresti, tõhusalt, 71 00:03:50,220 --> 00:03:51,970 et istub seal ootab sisendi jaoks. 72 00:03:51,970 --> 00:03:53,920 Ja see käsk line liides, mille kaudu 73 00:03:53,920 --> 00:03:57,650 Te olete käinud käsud ja lõpuks koostada ja siis töötab 74 00:03:57,650 --> 00:03:58,400 programme. 75 00:03:58,400 --> 00:04:01,320 >> Aga Bash on ka programmeerimine keeles järgmised mõttes. 76 00:04:01,320 --> 00:04:05,460 Sa tead, et on olemas käsud nagu CD ja LS ja ka ripu ja teised, 77 00:04:05,460 --> 00:04:09,580 kuid saate määrata oma käsud rakendades neid Bash. 78 00:04:09,580 --> 00:04:11,420 Nüüd me ei kavatse väga üksikasjalik 79 00:04:11,420 --> 00:04:16,089 nagu bash programmeerimiskeelt, kuid tean näiteks, et hetkel, 80 00:04:16,089 --> 00:04:17,607 seal ei ole käsu nimeks "tere". 81 00:04:17,607 --> 00:04:19,440 Seega võib leida üks neist pakette. 82 00:04:19,440 --> 00:04:20,856 See ei ole arvutisse installitud. 83 00:04:20,856 --> 00:04:21,870 Küsige oma administraatori poole. 84 00:04:21,870 --> 00:04:26,030 Aga kui ma tahan, et oleks olemas programm nimega "Hello" Bash või minu kiire, 85 00:04:26,030 --> 00:04:30,810 Ma ei saa tegelikult kasutada süntaks, mis on päris C. See ei ole päris sama, 86 00:04:30,810 --> 00:04:35,020 kuid see tundub üsna sarnane funktsioon, kuid puuduvad mõned detailid. 87 00:04:35,020 --> 00:04:38,090 Miski tundub juhtuda, kuid nüüd, kui ma tüüpi "tere" 88 00:04:38,090 --> 00:04:40,960 tegelikult võite kirjutada programmi, mitte C, mitte Java 89 00:04:40,960 --> 00:04:44,280 ole teise programmeerimine keeles, kuid Bash ise. 90 00:04:44,280 --> 00:04:47,630 >> Nüüd võti on selles, et ma kirjutasin nimi tahtsin anda uue käsu, 91 00:04:47,630 --> 00:04:50,820 ja sulgudes on ka sümboliseerib see on funktsioon. 92 00:04:50,820 --> 00:04:54,010 Nagu kõrvale, võite teha nalja asju ja tegelikult isegi Mac OS 93 00:04:54,010 --> 00:04:55,620 see on programm nimega Terminal. 94 00:04:55,620 --> 00:04:58,800 Ravim ehitatud kellegi arvuti, mis on Mac selles ruumis, 95 00:04:58,800 --> 00:05:03,640 ja mida saate teha sarnaseid asju Mac OS, aga sa ei lähe enam kaugemale. 96 00:05:03,640 --> 00:05:07,110 Ja see on natuke tangentsiaalne, aga see on omamoodi lõbus. 97 00:05:07,110 --> 00:05:09,715 Meenus mulle täna hommikul, kui mõelda selle kaudu, 98 00:05:09,715 --> 00:05:13,279 on väike mäng ma kasutasin mängida ühe CS50 endine TFs 99 00:05:13,279 --> 00:05:16,570 kusjuures iga kord, kui ta oleks jalutuskäigu kaugusel oma klaviatuuri oma ekraani lukustamata, 100 00:05:16,570 --> 00:05:23,611 Ma käsu nagu see-- "tere öelda." 101 00:05:23,611 --> 00:05:26,610 Ja nüüd iga kord, kui ta tuli tagasi oma klaviatuuri pärast I heaks ekraan 102 00:05:26,610 --> 00:05:27,985 ja ta oleks istuda, proovige teha mõned tööd, 103 00:05:27,985 --> 00:05:29,250 list sisu oma directory-- 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO PLAYBACK] 105 00:05:29,510 --> 00:05:30,010 >> Halloo. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Tere. 108 00:05:32,120 --> 00:05:35,030 >> SPEAKER 1: Niisiis, õiglus, Tegelikult polnud see "tere". 109 00:05:35,030 --> 00:05:36,894 See oli tavaliselt midagi sarnaneb rohkem et-- 110 00:05:36,894 --> 00:05:37,560 [AUDIO PLAYBACK] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 SPEAKER 1: --that I would-- nii tema arvuti oleks 113 00:05:39,320 --> 00:05:42,170 vannun teda iga kord, kui ta tegelikult istus oma klaviatuuri. 114 00:05:42,170 --> 00:05:46,265 Ja väga kiiresti ta arvasin mitte lahkuda oma ekraani lukustamata. 115 00:05:46,265 --> 00:05:48,730 Kuid see näitab omamoodi loll lõbus, et sa 116 00:05:48,730 --> 00:05:50,210 võib olla midagi nagu Bash. 117 00:05:50,210 --> 00:05:52,770 Aga see on natuke rohkem tõsine, et olla kindel, kui see. 118 00:05:52,770 --> 00:05:57,235 Ja tõepoolest, see on üks kõige ohtlikum ja kauakestvad vead 119 00:05:57,235 --> 00:05:58,860 mis on tõesti tabanud maailma kogu maailmas. 120 00:05:58,860 --> 00:06:02,060 See viga on olnud juba umbes 20 aastat, 121 00:06:02,060 --> 00:06:05,780 ja sul tuleb leida vaid Praegu selle suhteline lihtsus. 122 00:06:05,780 --> 00:06:07,990 >> Nii et see on tüüpiline käsu, et kui sa 123 00:06:07,990 --> 00:06:10,448 oma Mac, sõna otseses mõttes kohe kui sul on oma kaas avatud, 124 00:06:10,448 --> 00:06:12,940 võite proovida kirjutades, et programmi nimega Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminal on all Rakendused Utilities-- 126 00:06:15,410 --> 00:06:18,790 kordki Windowsi kasutajad ei pea muretsema selle konkreetse threat-- 127 00:06:18,790 --> 00:06:22,310 kuid need teile Mac tippida Selle aknasse nagu ma teen siin, 128 00:06:22,310 --> 00:06:24,210 ja kui sa ei kirjuta et sellesse programmi 129 00:06:24,210 --> 00:06:28,830 nimega Terminal, nagu ma teen nüüd, kui näed sõna "haavatav" 130 00:06:28,830 --> 00:06:32,200 arvuti on kaitsetud ekspluateerimise. 131 00:06:32,200 --> 00:06:33,850 >> Nüüd mida see tegelikult tähendab? 132 00:06:33,850 --> 00:06:35,870 Ja see on tõsi päris hull süntaks, 133 00:06:35,870 --> 00:06:39,050 kuid olgem vähemalt venitama mõned huvitavaid aspekte. 134 00:06:39,050 --> 00:06:42,567 Nii et siin on mõned süntaks, mis näeb natuke tuttav, vähemalt C 135 00:06:42,567 --> 00:06:43,950 ja programmeerimine üldisemalt. 136 00:06:43,950 --> 00:06:47,550 Ma näen mõned sulud semikoolonit, looksulg, ja selline, 137 00:06:47,550 --> 00:06:50,820 kuid selgub, et käesoleva loll asi siin kollasega 138 00:06:50,820 --> 00:06:53,580 sisuliselt funktsiooni et ei tee midagi. 139 00:06:53,580 --> 00:06:57,840 Koolon vahenditega midagi teha, ja semikoolon tähendab enam ei tee midagi. 140 00:06:57,840 --> 00:07:00,250 Nii seest neist looksulg asjaolu, 141 00:07:00,250 --> 00:07:02,440 et mul on võrdsed kirjutada vasakule, seda 142 00:07:02,440 --> 00:07:05,500 on sisuliselt luua käsu või muutuja 143 00:07:05,500 --> 00:07:09,520 nimetatakse x ja antakse see et kollane natuke kood seal. 144 00:07:09,520 --> 00:07:14,040 See võiks olla midagi "kaja tere "või" öelda piiks "või midagi 145 00:07:14,040 --> 00:07:15,120 mis sarnaneks. 146 00:07:15,120 --> 00:07:17,780 Aga teate, kui silmad tiir veelgi paremale, 147 00:07:17,780 --> 00:07:22,150 seal on rohkem seda joont kui lihtsalt lõpuks, et semikoolon. 148 00:07:22,150 --> 00:07:25,160 "Kaja haavatav," ja seejärel pärast, et seal on isegi rohkem. 149 00:07:25,160 --> 00:07:26,530 Teine semikoolon, bash-c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Nii pikk lugu lühike, see koodirida on 152 00:07:34,050 --> 00:07:36,660 piisab mõjuvatel arvuti, mis on 153 00:07:36,660 --> 00:07:39,830 tundlikud midagi et sa tahad seda teha, 154 00:07:39,830 --> 00:07:44,290 sest seal on viga Bash mille kuigi Bash pidi lõpetama 155 00:07:44,290 --> 00:07:48,980 lugemist ridade käsu õigus seal peale kollane tekst 156 00:07:48,980 --> 00:07:52,520 20-pluss aastat vana viga, Bash on tegelikult lugemine 157 00:07:52,520 --> 00:07:56,780 kaugemale, et semikoolon ja päris palju seda, mida ta ütles. 158 00:07:56,780 --> 00:07:59,070 >> Mis siis kaudselt Selle lõpuks? 159 00:07:59,070 --> 00:08:01,340 Ma ütlesin "echo tere" või "echo haavatav," 160 00:08:01,340 --> 00:08:05,449 aga mis siis, kui sa tegid midagi tegelikult pahatahtlik, nagu rm -rf 161 00:08:05,449 --> 00:08:07,240 mida sa ei pruugi on kunagi kirjutatud enne, 162 00:08:07,240 --> 00:08:08,920 ja ausalt öeldes sa ilmselt ei tohiks liiga kiiresti, 163 00:08:08,920 --> 00:08:10,700 sest sa võid teha palju kahju ta. 164 00:08:10,700 --> 00:08:11,210 Miks? 165 00:08:11,210 --> 00:08:12,990 rm mida teeb, muidugi? 166 00:08:12,990 --> 00:08:14,270 Eemaldab. 167 00:08:14,270 --> 00:08:15,930 * Tähendab mida? 168 00:08:15,930 --> 00:08:16,430 Kõik. 169 00:08:16,430 --> 00:08:18,180 Nii et see on n-ö jokker, nii et see tähendab, 170 00:08:18,180 --> 00:08:20,410 kustutada kõik jooksvasse kataloogi. 171 00:08:20,410 --> 00:08:23,379 r juhtub tähenda rekursiivne, mis tähendab, kui see, mida sa kustutamine 172 00:08:23,379 --> 00:08:26,420 on kataloog, ja seal sees on muid faile ja teisi katalooge, 173 00:08:26,420 --> 00:08:28,950 rekursiivselt sukelduda seal ja kustutada kõik, et. 174 00:08:28,950 --> 00:08:31,040 Ja -f on halvim neist kõigist. 175 00:08:31,040 --> 00:08:32,580 Kas keegi teab, mida -f tähendab siin? 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 Nii sunnib vahendeid, isegi kui see on halb mõte, 179 00:08:37,830 --> 00:08:40,939 seda küsimata mind Täiendava kinnituse. 180 00:08:40,939 --> 00:08:43,230 Niisiis, sa tead, me naerma , aga ausalt, ma ilmselt 181 00:08:43,230 --> 00:08:44,972 tüüp seda mitu korda päev, sest reaalsus 182 00:08:44,972 --> 00:08:47,210 on see kiireim viis kustutada terve hunnik asju. 183 00:08:47,210 --> 00:08:48,590 Aga isegi olen teinud mõningaid kahjustusi. 184 00:08:48,590 --> 00:08:53,100 >> Aga kui sa olid trikk arvuti määratlemisest mõned loll muutuja 185 00:08:53,100 --> 00:08:56,810 või funktsiooni nimetatakse x, kuid siis petab arvuti täidesaatva 186 00:08:56,810 --> 00:09:00,030 piiridest väljapoole, et funktsioon peale selle, semikoolon, 187 00:09:00,030 --> 00:09:04,430 siis võiks tõesti trikk arvuti arvesse täidesaatva midagi rm -rf 188 00:09:04,430 --> 00:09:07,810 või E-mail käsk või Copy käsk. 189 00:09:07,810 --> 00:09:11,400 Midagi sõna-sõnalt, mida saate teha koos arvuti, kas see kustutab faile, 190 00:09:11,400 --> 00:09:15,350 failide loomine, spämmi keegi, rünnata mõned server eemalt, 191 00:09:15,350 --> 00:09:17,190 kui saate seda väljendada käsu peale, siis 192 00:09:17,190 --> 00:09:19,120 saab trikk arvuti tehes. 193 00:09:19,120 --> 00:09:21,510 >> Nüüd sellest, mis on näide sellest, kuidas te võite seda teha? 194 00:09:21,510 --> 00:09:24,300 Noh, seal on palju arvuteid Internetis töötab Bash. 195 00:09:24,300 --> 00:09:26,390 Kõik meist Mac kasutajad on nende seas. 196 00:09:26,390 --> 00:09:30,390 Palju Linux serverite vahel neid hästi ja Unix serverite. 197 00:09:30,390 --> 00:09:32,630 Windows uuesti saab suhteliselt pigist 198 00:09:32,630 --> 00:09:34,590 arvatud juhul, kui olete installinud spetsiaalne tarkvara. 199 00:09:34,590 --> 00:09:37,130 Nüüd palju servereid eest Näiteks veebiserverite käitamine, 200 00:09:37,130 --> 00:09:39,840 ja tegelikult Linux on ehk Populaarseim operatsioonisüsteemi 201 00:09:39,840 --> 00:09:43,060 sõitma arvutid internetis mis teenindavad up veebilehti. 202 00:09:43,060 --> 00:09:44,910 Nüüd, kui me näeme hiljem aastal semester, kui 203 00:09:44,910 --> 00:09:48,470 saadate taotluse Sinu browser-- Chrome, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- serveritega, 205 00:09:50,790 --> 00:09:53,730 Selgub, et kuigi sa lihtsalt kirjutada www.example.com, 206 00:09:53,730 --> 00:09:59,590 Teie brauser saadab sõnumi et see on natuke rohkem keerulisse, niimoodi. 207 00:09:59,590 --> 00:10:01,239 >> Aga teate natuke midagi imelikku. 208 00:10:01,239 --> 00:10:03,030 Esimesed kaks rida Ma pole kunagi varem näinud, 209 00:10:03,030 --> 00:10:04,904 kuid nad ei vaata eriti hirmutav. 210 00:10:04,904 --> 00:10:08,030 Aga teate, mida ma olen varastatud kolmandat rida siia. 211 00:10:08,030 --> 00:10:13,390 Kui paha poiss olnud, et saata sõnum Taoline tema arvuti 212 00:10:13,390 --> 00:10:17,270 haavatavasse Mac või haavatavamad Linux server, 213 00:10:17,270 --> 00:10:21,580 Naljakas on see, et Bash, Nii lihtne vähe käsureale 214 00:10:21,580 --> 00:10:27,450 on kõikjal ja on sageli Kasutatud sisuliselt täita 215 00:10:27,450 --> 00:10:30,020 sisu sõnumi, et ta saab. 216 00:10:30,020 --> 00:10:33,490 Ja selle loogika, saate trikk veebiserver, mistõttu 217 00:10:33,490 --> 00:10:36,370 saates midagi User-agent, mis tavaliselt 218 00:10:36,370 --> 00:10:38,300 peaks ütlema nime oma brauserisse. 219 00:10:38,300 --> 00:10:42,420 Kasutaja agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, see 220 00:10:42,420 --> 00:10:44,590 on lihtsalt oma brauseri välja selgitada ise. 221 00:10:44,590 --> 00:10:46,605 Aga kui paha poiss väga kavalalt ütleb, mm-mm, ma olen 222 00:10:46,605 --> 00:10:47,930 ei ütle teile, Mis minu brauser on, 223 00:10:47,930 --> 00:10:50,888 Ma asemel läheb teile saata see segasena ilmega asi rm -rf 224 00:10:50,888 --> 00:10:55,840 * See, võite sõna otseses mõttes petta haavatav veebiserver internetis 225 00:10:55,840 --> 00:10:59,055 arvesse täidesaatva täpselt, et seal kustutate kõik failid. 226 00:10:59,055 --> 00:11:00,930 Ja ausalt öeldes, see ei ole isegi kõige hullem. 227 00:11:00,930 --> 00:11:01,763 Te ei saa midagi teha. 228 00:11:01,763 --> 00:11:04,480 Võiksite alustada laiali teenuste keelamise rünnak 229 00:11:04,480 --> 00:11:07,030 kui te läkitas Kogu kimpu veebiserverite 230 00:11:07,030 --> 00:11:10,256 ja siis oli neid kõiki laskuda jaoks Näiteks on Harvard.edu serverid, 231 00:11:10,256 --> 00:11:12,130 ja saate sortida bang kuradit välja neid 232 00:11:12,130 --> 00:11:15,490 poolt võrguliiklust, mis oli muidu vallandas see paha poiss. 233 00:11:15,490 --> 00:11:18,760 >> Nii, pikk lugu lühike, peaaegu kõik selles ruumis, kes omab Mac 234 00:11:18,760 --> 00:11:20,240 on tundlikud seda. 235 00:11:20,240 --> 00:11:24,100 Hõbedane vooder on see, et kui sa oled töötab veebiserver oma sülearvuti, 236 00:11:24,100 --> 00:11:27,780 ja kui sa oled tegelikult on seadistatud ta lubada midagi SSH sinna, 237 00:11:27,780 --> 00:11:28,670 sa oled tegelikult ohutu. 238 00:11:28,670 --> 00:11:31,710 See on haavatav, kuid seal ei ole üks üritab saada oma sülearvuti, 239 00:11:31,710 --> 00:11:33,290 nii saab omamoodi kindel. 240 00:11:33,290 --> 00:11:36,210 Kuid Apple varsti Uuendame fix selle eest. 241 00:11:36,210 --> 00:11:39,660 Maailma Linux on juba vabastatud arv määratakse Fedora ja Ubuntu 242 00:11:39,660 --> 00:11:43,790 ja muid versioone Linux, ja tõepoolest kui sa jooksed uuendatud 50 seadet, 243 00:11:43,790 --> 00:11:45,930 isegi, et liiga on ajakohastada ja parandada. 244 00:11:45,930 --> 00:11:47,764 Aga et liiga ei ole tegelikult on haavatavad, 245 00:11:47,764 --> 00:11:49,804 sest kui sa oled tinkered seadme 246 00:11:49,804 --> 00:11:52,770 ja teha oma sülearvuti avalikult kättesaadavaks Internetis, mis ei ole 247 00:11:52,770 --> 00:11:54,910 vaikimisi olete tegelikult häda olnud, sest 248 00:11:54,910 --> 00:11:56,890 kohta firewalling ja muud tehnikat. 249 00:11:56,890 --> 00:12:01,000 >> Aga see on äärmuslik näide viga et me oleme elanud sõna otseses mõttes 20 250 00:12:01,000 --> 00:12:04,050 aastat, ja kes teab, kui keegi Kogu selle aja on teada seda? 251 00:12:04,050 --> 00:12:06,300 Ja tegelikult on see üks oluliste probleemidega, 252 00:12:06,300 --> 00:12:08,690 et me näeme hiljem semester turvalisus, 253 00:12:08,690 --> 00:12:13,020 on see, et just nagu reaalses maailmas, head poisid on hetkel kahjuks. 254 00:12:13,020 --> 00:12:16,500 Et hoida halvad poisid välja, me peame veenduge, et iga uks on lukus, 255 00:12:16,500 --> 00:12:20,340 et iga aken on turvaline, et iga sisenemise kohas kodus 256 00:12:20,340 --> 00:12:21,980 on turvaline hoida halvad poisid välja. 257 00:12:21,980 --> 00:12:26,870 Aga mida see paha poiss on teha, et tegelikult ohustavad teie kodus 258 00:12:26,870 --> 00:12:28,200 ja varastada sinult? 259 00:12:28,200 --> 00:12:32,574 Ta lihtsalt on leida üks lukustamata uks, üks katkine aken või midagi 260 00:12:32,574 --> 00:12:35,240 selles suunas, ning see on sama asi arvuti turvalisust. 261 00:12:35,240 --> 00:12:37,660 Me võime kirjutada miljoneid rida programmeerimine kood 262 00:12:37,660 --> 00:12:40,570 ja kulutada sadu või tuhandeid tundi üritavad seda parandada, 263 00:12:40,570 --> 00:12:43,370 kuid kui sa teed ainult üks viga õigsust, 264 00:12:43,370 --> 00:12:47,030 võite panna kogu süsteemi ja tõepoolest sel juhul kogu Interneti 265 00:12:47,030 --> 00:12:48,660 ja maailm ohus. 266 00:12:48,660 --> 00:12:51,950 >> Niisiis, kui soovite rohkem teada saada sellest, minge selle URL siia. 267 00:12:51,950 --> 00:12:54,450 Ei ole mingit vajadust võtta meetmeid täna, kui sa oled 268 00:12:54,450 --> 00:12:57,116 nende seas mugavam, et käinud oma veebilehe 269 00:12:57,116 --> 00:12:59,810 server, mille puhul teil peaks Tegelikult uuendada oma tarkvara. 270 00:12:59,810 --> 00:13:03,244 >> Ja ka see on tiitel kõnes ja nüüd paberi, 271 00:13:03,244 --> 00:13:05,410 et me oleme seotud kohta Muidugi kodulehel täna. 272 00:13:05,410 --> 00:13:07,600 See oli poolt kaaskodanike nimega Ken Thompson, kes 273 00:13:07,600 --> 00:13:10,120 oli nõustudes väga kuulus auhinna infotehnoloogia, 274 00:13:10,120 --> 00:13:13,495 ja ta andis selle kõne mõned aastad tagasi sisuliselt seda sama teemat. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Küsid inimesed küsimus, peaks tõesti 277 00:13:20,520 --> 00:13:23,480 usaldus lõppkokkuvõttes tarkvara olete saanud? 278 00:13:23,480 --> 00:13:26,100 Näiteks on meil kõigil Enda kirjutatud programme, 279 00:13:26,100 --> 00:13:27,820 ja oleme kogunud neid rõkkama. 280 00:13:27,820 --> 00:13:31,830 Ja kui te teate, olete kirjutanud kõikides programmides CS50 kus on 281 00:13:31,830 --> 00:13:35,310 tagaukse kehvasti, ei tee et paha poiss, kui töötab oma programmi 282 00:13:35,310 --> 00:13:37,410 võiks üle võtta oma arvuti? 283 00:13:37,410 --> 00:13:38,310 Tõenäoliselt mitte, eks? 284 00:13:38,310 --> 00:13:40,180 Mario ja ahne ja Credit. 285 00:13:40,180 --> 00:13:41,680 Need kõik on üsna väikesed programmid. 286 00:13:41,680 --> 00:13:43,910 Sa pead olema üsna Halb, kui sa tegelikult 287 00:13:43,910 --> 00:13:47,310 tegi kogu oma arvuti haavatavaks pärast kirjalikult 10 või 20 rida koodi, 288 00:13:47,310 --> 00:13:49,690 või vähemalt teadlikud mõned Euroopa julgeolekut. 289 00:13:49,690 --> 00:13:52,023 Sest ma ütlen, et naljatades, aga me näeme täna 290 00:13:52,023 --> 00:13:54,600 ja sel nädalal, see on tegelikult tõesti väga lihtne 291 00:13:54,600 --> 00:13:57,980 olla halb ja teha veelgi lühike programmid haavatav. 292 00:13:57,980 --> 00:14:02,880 >> Aga nüüd, vähemalt, mõistma et küsimus küsitakse siin 293 00:14:02,880 --> 00:14:04,850 on umbes rõkkama in tõlkija. 294 00:14:04,850 --> 00:14:08,360 Miks ei ole meid usaldades rõkkama viimase kahe või kolme nädala jooksul? 295 00:14:08,360 --> 00:14:12,650 Kes on öelda, et igaüks, kes kirjutas rõkkama ei ole "kas" seisund on 296 00:14:12,650 --> 00:14:17,680 et sisuliselt süstida mõned nullid ja need igasse programmi koostades 297 00:14:17,680 --> 00:14:21,180 mis ei lase tal juurdepääs arvuti, kui sa magad 298 00:14:21,180 --> 00:14:23,580 ja sülearvuti kaas on avatud ja arvuti töötab? 299 00:14:23,580 --> 00:14:24,080 Eks ole? 300 00:14:24,080 --> 00:14:28,350 Meil on selline au süsteemi paremale Nüüd, kus me usume, et rõkkama on legit. 301 00:14:28,350 --> 00:14:30,000 Sa usaldad, et seade on legit. 302 00:14:30,000 --> 00:14:34,430 Sa kindel, et sõna otseses mõttes iga programmi Mac või PC on usaldusväärne. 303 00:14:34,430 --> 00:14:37,510 Ja seda lihtsat viga näitab, isegi kui see ei ole pahatahtlik, 304 00:14:37,510 --> 00:14:40,580 see on absoluutselt mitte tõenäoliselt olla. 305 00:14:40,580 --> 00:14:42,350 >> Nii et sa peaksid olema hirmul nagu põrgu. 306 00:14:42,350 --> 00:14:45,560 Ausalt öeldes, ei ole lihtne Lahendus sellele teisi 307 00:14:45,560 --> 00:14:48,185 kui omamoodi ühiskondlikku teadlikkust kasvavat keerukust 308 00:14:48,185 --> 00:14:50,310 et me oleme hoone peal meie arvutisüsteemid, 309 00:14:50,310 --> 00:14:53,740 ja kuidas üha haavatavamaks me võiks väga hästi olla. 310 00:14:53,740 --> 00:14:55,570 >> Nüüd seda öelnud, Breakout. 311 00:14:55,570 --> 00:14:59,889 Nii Breakout on probleem seatud kolm, ja Breakout on mäng Läinud 312 00:14:59,889 --> 00:15:02,180 et te võite meelde tuletada, kuid meie jaoks probleem seatud kolm, 313 00:15:02,180 --> 00:15:04,450 see võimaldab meil võtta asjad varundada piir 314 00:15:04,450 --> 00:15:08,880 nii, et kui me kirjutame programmide isegi Terminal aknas niimoodi, 315 00:15:08,880 --> 00:15:14,670 saame reaalselt sõita, lõpuks graafilise programmid ei 316 00:15:14,670 --> 00:15:17,800 erinevalt meil oli juurdepääsu Scratch. 317 00:15:17,800 --> 00:15:20,910 Nii et see on töötajate rakendamise Breakout, 318 00:15:20,910 --> 00:15:23,930 mis on just see telliskivi purustamine mäng, et sa liikuda oma mõla tagasi 319 00:15:23,930 --> 00:15:27,590 edasi, ja sa lüüa palli nende vastu, värvi tellised üleval. 320 00:15:27,590 --> 00:15:30,020 Nii et see toob meid omamoodi tagasi sinna, kus 321 00:15:30,020 --> 00:15:33,180 suutsime väga kiiresti Scratch ja nüüd C, 322 00:15:33,180 --> 00:15:35,800 rakendamiseks oma graafilised kasutajaliidesed. 323 00:15:35,800 --> 00:15:38,960 >> Kuid üle, et see probleemi set kujutab esimest 324 00:15:38,960 --> 00:15:41,000 milles me anname sa hunnik koodi. 325 00:15:41,000 --> 00:15:43,940 Ja tegelikult, ma toon selgesõnaline tähelepanu sellele, sest eriti 326 00:15:43,940 --> 00:15:47,090 neile vähem mugav, see probleem määrata, vähemalt esmapilgul, 327 00:15:47,090 --> 00:15:49,170 läheb tunne, oleme võtnud it up pügala. 328 00:15:49,170 --> 00:15:51,540 Sest me oleme teile, mõnede otsing 329 00:15:51,540 --> 00:15:54,930 ja sorteerimine probleeme pset, hunnik koodi, et me kirjutasime, 330 00:15:54,930 --> 00:15:56,680 ja paar kommentaari et öelda "teha" 331 00:15:56,680 --> 00:15:58,221 kus sa pead täitma lüngad. 332 00:15:58,221 --> 00:16:00,020 Nii et mitte liiga hirmutav, kuid see on esimene kord, 333 00:16:00,020 --> 00:16:03,370 me teisaldus sa kood, mis teil on vaja kõigepealt lugeda, mõista ja seejärel lisada 334 00:16:03,370 --> 00:16:04,290 ja täiendab seda. 335 00:16:04,290 --> 00:16:05,940 >> Ja siis koos Breakout, me ei kavatse teha sama, 336 00:16:05,940 --> 00:16:08,740 andes sulle mõnikümmend rohkem ridu kood, mis ausalt öeldes teile 337 00:16:08,740 --> 00:16:11,490 palju raamistiku mängu, kuid peatuda 338 00:16:11,490 --> 00:16:14,304 rakendamise tellised ja palli ja mõla, 339 00:16:14,304 --> 00:16:15,970 aga meil rakendada mõningaid muid funktsioone. 340 00:16:15,970 --> 00:16:18,280 Ja isegi, et esmapilgul jällegi eriti kui see on vähem mugav, 341 00:16:18,280 --> 00:16:21,480 Võib tunduda, eriti hirmuäratav ja sa arvad, et on nii palju uusi funktsioone 342 00:16:21,480 --> 00:16:24,070 peate wrap meelt ümber, ja see on tõsi. 343 00:16:24,070 --> 00:16:26,281 Kuid pidage meeles, et see on päris nullist. 344 00:16:26,281 --> 00:16:28,780 Koefitsiendid on, et sa ei kasuta kõiki puzzle tükki Scratch. 345 00:16:28,780 --> 00:16:31,120 Koefitsiendid on, et sa ei hooli pakkima meelt umbes neid kõiki 346 00:16:31,120 --> 00:16:33,617 sest selleks oli kiire pilgu mõista, oh, 347 00:16:33,617 --> 00:16:35,450 see on, mida ma teha saan selle puzzle tükk. 348 00:16:35,450 --> 00:16:38,260 Ja tõepoolest, probleemide seatud 3 spec, näitame me sulle 349 00:16:38,260 --> 00:16:41,370 dokumentatsiooniga, mis tutvustada teile mõned uued funktsioonid, 350 00:16:41,370 --> 00:16:43,570 ja lõpuks programmeerimine konstrueerib, mida kasutate. 351 00:16:43,570 --> 00:16:47,610 Tingimused, silmad, muutujate ja funktsioonide 352 00:16:47,610 --> 00:16:50,720 mis on identne mida me oleme näinud siiani. 353 00:16:50,720 --> 00:16:53,560 >> Nii et tõesti, mida me anname sa on mõned proovi kood, mis 354 00:16:53,560 --> 00:16:56,110 saate luua aknas , mis näeb välja mitte nagu see, 355 00:16:56,110 --> 00:16:59,540 ja lõpuks muuta see midagi väga meeldib see. 356 00:16:59,540 --> 00:17:02,250 Nii et ära CS50, arutada tööaega ja rohkem, 357 00:17:02,250 --> 00:17:05,290 ja lohutama selles, et kogus kood, mida on vaja kirjutada 358 00:17:05,290 --> 00:17:06,760 tegelikult ei ole kõik, et palju. 359 00:17:06,760 --> 00:17:10,359 Esimene väljakutse on lihtsalt aklimatiseeruda ennast mingi kood oleme kirjutanud. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Kõik küsimused on pset3, Shellshock või muul viisil? 362 00:17:15,810 --> 00:17:19,226 >> Sihtrühm: Tundus läbimas Breakout 363 00:17:19,226 --> 00:17:22,154 et kood on peaaegu objektorienteeritud stiilis 364 00:17:22,154 --> 00:17:24,675 aga ma arvasin, et C oli objektorienteeritud programmi. 365 00:17:24,675 --> 00:17:26,050 SPEAKER 1: väga hea küsimus. 366 00:17:26,050 --> 00:17:28,258 Nii et vaadata läbi XXX koodi, koodi 367 00:17:28,258 --> 00:17:30,180 me kirjutas pset3, Neile, kes teavad, et 368 00:17:30,180 --> 00:17:32,230 Tundub, et see on vähe objektorienteeritud. 369 00:17:32,230 --> 00:17:33,800 Lühike vastus on, see on. 370 00:17:33,800 --> 00:17:38,130 See ühtlustamine, kuidas võiks teha objektorienteeritud koodi kasutades 371 00:17:38,130 --> 00:17:41,850 keeles nagu C, kuid see on ikka lõpuks menetluslikke. 372 00:17:41,850 --> 00:17:44,900 Puuduvad meetodite sees muutujad, nagu näete. 373 00:17:44,900 --> 00:17:46,180 Aga see meenutab seda. 374 00:17:46,180 --> 00:17:48,780 Ja me näeme, et funktsiooni uuesti kui saame PHP ja JavaScript 375 00:17:48,780 --> 00:17:49,946 lõpu poole semestri. 376 00:17:49,946 --> 00:17:53,667 Aga nüüd, ma arvan et kui vihje, mis on tulemas. 377 00:17:53,667 --> 00:17:54,250 Hea küsimus. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Olgu. 380 00:17:56,550 --> 00:17:59,730 Nii Merge sort oli, kuidas me Vasakul asjad viimast korda. 381 00:17:59,730 --> 00:18:03,250 Ja ühendada sort oli jahe selles mõttes, et see oli nii palju kiiremini, 382 00:18:03,250 --> 00:18:07,100 vähemalt põhineb põgus testid me tegime eelmisel nädalal, kui, ütleme, mull 383 00:18:07,100 --> 00:18:08,710 Sorteeri valiku sorteerida, sisestamise omamoodi. 384 00:18:08,710 --> 00:18:11,780 Ja mis oli puhas liiga lihtsalt kuidas lühidalt ja puhtalt 385 00:18:11,780 --> 00:18:12,810 saab väljendada. 386 00:18:12,810 --> 00:18:15,840 Ja mida me ütleme, et see oli ülemine seondunud sõiduaega ühendamine 387 00:18:15,840 --> 00:18:16,340 sorteerida? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Jah? 390 00:18:18,495 --> 00:18:19,360 >> Sihtrühm: n log n? 391 00:18:19,360 --> 00:18:20,819 >> SPEAKER 1: n log n, eks. n log n. 392 00:18:20,819 --> 00:18:23,776 Ja me tuleme tagasi, mida see tegelikult tähendab või kui see pärineb, 393 00:18:23,776 --> 00:18:25,570 kuid see oli parem kui see, mida sõiduaega 394 00:18:25,570 --> 00:18:28,440 et nägime mull valik ja sisestamine sort? 395 00:18:28,440 --> 00:18:30,610 Nii n ruudus. n ruudus on suurem kui see, 396 00:18:30,610 --> 00:18:34,650 ja isegi kui see ei ole päris selge, tean, et log n on väiksem kui n, 397 00:18:34,650 --> 00:18:36,910 nii et kui sa seda n korda midagi väiksem n 398 00:18:36,910 --> 00:18:38,680 see saab olema väiksem kui n ruudus. 399 00:18:38,680 --> 00:18:40,130 See on natuke intuitsiooni seal. 400 00:18:40,130 --> 00:18:42,190 Aga me makstud hind selle eest. 401 00:18:42,190 --> 00:18:47,000 See oli kiirem, aga teema, mis algas tekkima eelmisel nädalal oli see kompromiss. 402 00:18:47,000 --> 00:18:49,804 Ma sain parema tulemuse ajaliselt, kuid mida 403 00:18:49,804 --> 00:18:52,470 Kas ma pean kulutama muude poolt, et saavutada seda? 404 00:18:52,470 --> 00:18:53,591 >> Sihtrühm: Memory. 405 00:18:53,591 --> 00:18:54,465 SPEAKER 1: Ütle uuesti? 406 00:18:54,465 --> 00:18:55,173 Sihtrühm: Memory. 407 00:18:55,173 --> 00:18:57,040 SPEAKER 1: Memory, või ruumi üldisemalt. 408 00:18:57,040 --> 00:18:59,040 Ja see ei olnud super ilmselged meie inimestel 409 00:18:59,040 --> 00:19:02,240 aga meelde tuletada, et meie vabatahtlikud oli samm edasi ja samm- 410 00:19:02,240 --> 00:19:04,780 tagasi, nagu oleks seal massiivi siin, ja nagu oleks seal 411 00:19:04,780 --> 00:19:07,130 Teise massiivi siin, et nad võivad kasutada, sest me 412 00:19:07,130 --> 00:19:09,080 vajalikku kuhugi ühendada need inimesed. 413 00:19:09,080 --> 00:19:11,480 Me ei saanud lihtsalt vahetada neid olemas. 414 00:19:11,480 --> 00:19:13,800 Nii liita omamoodi finantsvõimenduse on rohkem ruumi, mis 415 00:19:13,800 --> 00:19:15,620 me ei pea koos teiste algoritmide 416 00:19:15,620 --> 00:19:17,410 kuid tagurpidi, et see on palju kiirem. 417 00:19:17,410 --> 00:19:20,780 Ja ausalt öeldes, reaalses maailmas ruumi Nende days-- RAM, kõvaketas space-- 418 00:19:20,780 --> 00:19:25,030 on suhteliselt odav, ja nii see on ole tingimata halb asi. 419 00:19:25,030 --> 00:19:28,320 >> Võtame pilgu, vähe rohkem metoodiliselt, mida me tegime 420 00:19:28,320 --> 00:19:30,220 ja miks me ütlesime see oli n log n. 421 00:19:30,220 --> 00:19:33,260 Nii et siin on kaheksa numbrid ja kaheksa vabatahtlike oli meil viimast korda. 422 00:19:33,260 --> 00:19:35,718 Ja esimene asi, mis ühinevad Sorteeri käskis meil teha oli mis? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 Sihtrühm: jagatakse kaheks. 425 00:19:38,010 --> 00:19:38,663 SPEAKER 1: Ütle uuesti? 426 00:19:38,663 --> 00:19:39,650 Sihtrühm: jagatakse kaheks. 427 00:19:39,650 --> 00:19:40,610 SPEAKER 1: jagatakse kaheks, paremale. 428 00:19:40,610 --> 00:19:42,818 See on väga meenutab telefoniraamatust jaga 429 00:19:42,818 --> 00:19:44,220 ja vallutada üldisemalt. 430 00:19:44,220 --> 00:19:45,640 Nii et me vaatasime vasakule poole. 431 00:19:45,640 --> 00:19:48,700 Ja siis, kui me ütlesime, sort vasakul poolel elementide 432 00:19:48,700 --> 00:19:49,690 mida me järgmiseks öelda? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Sorteeri vasakul pool vasakut pool, mis võimaldas meil, 435 00:19:54,860 --> 00:19:57,570 Pärast jagamisel kaheks keskendub neljale ja kaks. 436 00:19:57,570 --> 00:20:01,280 >> Kuidas sa saad nimekirja nüüd kollane, suurus kaks, kasutades Merge järgi? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Noh jagada see pooleks, ja sorteeri vasakul pool. 439 00:20:04,580 --> 00:20:07,100 Ja see oli koht, kus asjad sain natuke loll lühidalt. 440 00:20:07,100 --> 00:20:10,720 Kuidas sa saad loend, mis on kohta suurus ühe, nagu see number neli here? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 See on järjestatud. 443 00:20:13,210 --> 00:20:14,200 Sa oled teinud. 444 00:20:14,200 --> 00:20:17,300 >> Aga kuidas sa saad nimekirja suurus ühe kui see on number kaks? 445 00:20:17,300 --> 00:20:21,640 Noh, sama asi, kuid nüüd, mis oli Kolmas ja oluline samm Merge järgi? 446 00:20:21,640 --> 00:20:24,020 Sul oli ühendada vasakul pool ja paremal pool. 447 00:20:24,020 --> 00:20:26,580 Ja kui me tegime, et me vaatasime neli, me vaatasime kaks. 448 00:20:26,580 --> 00:20:28,750 Me otsustasime kõik korras, ilmselt kaks on esimesel kohal, 449 00:20:28,750 --> 00:20:31,840 Niisiis panime kaks oma koht, millele järgnes neli. 450 00:20:31,840 --> 00:20:35,010 Ja nüüd on selline tagasikerimine, ja see on omamoodi iseloomulik 451 00:20:35,010 --> 00:20:37,570 algoritmi nagu Merge Sort, tagasi kerida mälus. 452 00:20:37,570 --> 00:20:40,240 Mis oli järgmisel real loo? 453 00:20:40,240 --> 00:20:41,780 Mida ma peaksin keskenduma edasi? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Paremal pool vasakul poole, mis on kuus kuni kaheksa. 456 00:20:47,350 --> 00:20:50,320 >> Lubage mul samm selle kaudu ilma belaboring punkti liiga palju. 457 00:20:50,320 --> 00:20:53,330 Kuus kuni kaheksa, siis kuus on sorteeritud, kaheksa sorteeritakse. 458 00:20:53,330 --> 00:20:57,190 Liita need kokku niimoodi, ja nüüd on järgmine suur samm 459 00:20:57,190 --> 00:21:00,990 on muidugi sorteerida õige pool Esimene samm selle algoritmi. 460 00:21:00,990 --> 00:21:02,870 Nii et me keskendume üks, kolm, seitse, viis. 461 00:21:02,870 --> 00:21:04,540 Seejärel keskendutakse vasakul pool. 462 00:21:04,540 --> 00:21:09,400 Vasakul pool, et õige pool seda ja seejärel ühendada ühe ja kolm. 463 00:21:09,400 --> 00:21:13,100 Siis paremal pool, siis vasakule poole seda, siis parem pool sellest. 464 00:21:13,100 --> 00:21:15,985 Merge seda, ja nüüd, mida etapp jääb? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Merge suur vasakul pool ja suur paremale poole, nii et üks läheb sinna, 467 00:21:22,460 --> 00:21:27,330 siis kaks, siis kolm, siis neli, siis viis, siis kuus, siis seitse, siis kaheksa. 468 00:21:27,330 --> 00:21:31,990 >> Nii et nüüd, miks on see lõpuks paljastavad, eriti siis, kui n ja logaritmid rohkem 469 00:21:31,990 --> 00:21:35,487 üldiselt pigem põgeneda sa, vähemalt viimastel mälu? 470 00:21:35,487 --> 00:21:37,070 Noh, teate kõrgust see asi. 471 00:21:37,070 --> 00:21:41,230 Meil oli kaheksa elemente, ja me jagatakse see kahega, kaks, kaks. 472 00:21:41,230 --> 00:21:44,590 Nii logige baasi kaks kaheksast annab meile kolm. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 Ja usu mind, et kui natuke udune sellel. 475 00:21:48,540 --> 00:21:54,710 Aga log alusega kaks kaheksa kolm, nii me oleme teinud kolm kihti ühendamiseks. 476 00:21:54,710 --> 00:21:57,170 Ja kui me ühendada elemente, kui palju elemente 477 00:21:57,170 --> 00:21:58,950 Kas me vaatame iga nende ridade? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Kokku n, eks? 480 00:22:01,437 --> 00:22:04,020 Kuna ühendada esirea, kuigi me tegime seda tükkhaaval, 481 00:22:04,020 --> 00:22:05,990 me lõpuks puudutanud iga number üks. 482 00:22:05,990 --> 00:22:09,054 Ja teises reas, et ühendada need nimekirjad suurus kaks, 483 00:22:09,054 --> 00:22:10,470 meil oli puudutada iga element ühe korra. 484 00:22:10,470 --> 00:22:12,690 Ja siis siin tõesti selgelt viimases reas, 485 00:22:12,690 --> 00:22:15,430 meil oli puudutada iga nimetatud elemendid kord, kuid ainult üks kord 486 00:22:15,430 --> 00:22:18,400 nii siin on siis meie n log n. 487 00:22:18,400 --> 00:22:21,780 >> Ja nüüd lihtsalt teha asju veidi ametlikum hetkeks, kui te 488 00:22:21,780 --> 00:22:24,260 olid nüüd analüüsida seda juures omamoodi kõrgema 489 00:22:24,260 --> 00:22:28,340 ja proovida, et otsustada, ka kuidas võiks minna umbes väljendades 490 00:22:28,340 --> 00:22:31,780 sõiduaega Selle algoritmi lihtsalt vaadates seda mitte 491 00:22:31,780 --> 00:22:33,590 kasutades kunstlik näide? 492 00:22:33,590 --> 00:22:36,590 Noh, kui palju aega sa ütleksid samm niimoodi kollane võtaks, 493 00:22:36,590 --> 00:22:37,173 kui n <2 edasi-tagasi? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 See on suur O mida? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Nii et ma näen ühte, nii et üks samm, võibolla kaks sammu, sest see on kui 498 00:22:44,540 --> 00:22:47,110 ja siis tagasi, kuid see on konstantset aega, eks? 499 00:22:47,110 --> 00:22:49,960 Nii me ütlesime O (1), ja see on kuidas ma väljendada seda. 500 00:22:49,960 --> 00:22:51,480 T, lihtsalt sõiduaega. 501 00:22:51,480 --> 00:22:54,150 n on suurus sisendi nii T (n), lihtsalt fancy viis 502 00:22:54,150 --> 00:22:56,330 öelda jooksvate aeg antud sisendi suuruse n 503 00:22:56,330 --> 00:23:00,220 saab olema järjekorras konstantse aja O (1). 504 00:23:00,220 --> 00:23:01,970 >> Aga muidu, mis sellest? 505 00:23:01,970 --> 00:23:05,660 Kuidas te väljendada töötamise aeg see kollane joon? 506 00:23:05,660 --> 00:23:06,250 T, mis? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Võite liiki petta siin ja mu küsimusele vastata tsükliliselt. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Nii et kui töötab aeg üldiselt me ​​lihtsalt öelda, on T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 Ja nüüd sa oled omamoodi punting siin ja ütles ka, justkui vasakule poole, 513 00:23:22,490 --> 00:23:23,920 ja siis saad õige pool. 514 00:23:23,920 --> 00:23:27,520 Kuidas võiks me sümboolselt esindama töötamise aeg see kollane joon? 515 00:23:27,520 --> 00:23:28,020 T, mis? 516 00:23:28,020 --> 00:23:29,360 Mis suurus sisend? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n üle kahe. 519 00:23:31,057 --> 00:23:32,140 Miks ma ei lihtsalt öelda, et? 520 00:23:32,140 --> 00:23:36,449 Ja siis see on teine ​​T (n / 2) ja siis uuesti, kui ma ühendada kaks sorteeritud pooleks, 521 00:23:36,449 --> 00:23:38,615 kui palju elemente ma lähen on puudutada kokku? 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 Nii et ma ei saa väljendada seda, lihtsalt olla selline fancy, 525 00:23:42,790 --> 00:23:44,430 kui jooksvat aega üldiselt. 526 00:23:44,430 --> 00:23:51,140 T (n) on just töötamise aeg T (n / 2), pluss T (n / 2), vasakule poole ja paremale poole, 527 00:23:51,140 --> 00:23:55,360 pluss O (n), mis on ilmselt n samme aga võib-olla, kui ma kasutan kahte sõrme, 528 00:23:55,360 --> 00:23:57,960 see on kaks korda nii palju samme, kuid see on lineaarne. 529 00:23:57,960 --> 00:24:00,440 See on teatud arv samme see tegur n, 530 00:24:00,440 --> 00:24:02,270 nii me saame väljendada seda kui see. 531 00:24:02,270 --> 00:24:05,550 Ja see on koht, kus nüüd me punt kuni tagasi meie keskkooli matemaatika õpik 532 00:24:05,550 --> 00:24:10,290 me oleme selle kordumise lõpuks jõuab võrdub see, n korda log n, 533 00:24:10,290 --> 00:24:12,530 kui seda tegelikult välja matemaatika ametlikumalt. 534 00:24:12,530 --> 00:24:13,950 >> Nii et see on lihtsalt kahest aspektist. 535 00:24:13,950 --> 00:24:17,500 Üks arvuliselt koos kodeeritud tüüpilise näite 536 00:24:17,500 --> 00:24:21,140 kasutades kaheksat numbreid ja rohkem üldiselt vaadata, kuidas me sinna jõudsime. 537 00:24:21,140 --> 00:24:25,670 Aga mis on tõesti huvitav siin on jällegi see mõiste jalgrattaga. 538 00:24:25,670 --> 00:24:26,900 Ma ei kasuta jaoks silmuseid. 539 00:24:26,900 --> 00:24:29,860 Ma olen selline määratlemine midagi nii ennast, 540 00:24:29,860 --> 00:24:31,950 mitte ainult käesoleva matemaatiline funktsioon, 541 00:24:31,950 --> 00:24:34,860 vaid ka selle pseudo kood. 542 00:24:34,860 --> 00:24:38,260 See pseudo kood on rekursiivne et selle kaks rida 543 00:24:38,260 --> 00:24:42,310 sisuliselt ütleb, et minna kasutada ise lahendada väiksemaid 544 00:24:42,310 --> 00:24:45,400 probleem väiksuse ja siis uuesti ja uuesti 545 00:24:45,400 --> 00:24:48,820 ja uuesti, kuni me nikerdama see alla selle nn aluspõhimõtted. 546 00:24:48,820 --> 00:24:52,810 >> Nii et olgem tegelikult teha rohkem kaalukaid kaasavõetavateks selle järgmiselt. 547 00:24:52,810 --> 00:24:58,420 Lubage mul minna gedit ja võtta mõningaid tänapäeva lähtekoodi, 548 00:24:58,420 --> 00:24:59,930 eriti see näide siin. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, mis ilmselt lisab numbreid ühest n. 550 00:25:03,709 --> 00:25:05,750 Nii et vaatame, mis on tuttav ja võõras siin. 551 00:25:05,750 --> 00:25:08,690 Esiteks on meil paar hõlmab nii midagi uut. 552 00:25:08,690 --> 00:25:09,190 Prototype. 553 00:25:09,190 --> 00:25:11,370 Olen natuke udune kohta Selle pärast paar päeva, 554 00:25:11,370 --> 00:25:13,790 kuid mida me öelda prototüüp funktsioon on? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 Sihtrühm: [kuuldamatu]. 557 00:25:16,015 --> 00:25:16,905 SPEAKER 1: Mis see on? 558 00:25:16,905 --> 00:25:17,800 Sihtrühm: Me kuulutab selle välja. 559 00:25:17,800 --> 00:25:18,883 SPEAKER 1: Me kuulutab selle välja. 560 00:25:18,883 --> 00:25:22,290 Nii et sa õpetad rõkkama, hei, tegelikult rakendatakse seda veel, 561 00:25:22,290 --> 00:25:25,740 kuid kuskil seda pilti, arvatavasti, läheb funktsiooni nimetatakse mida? 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 Ja see on ainult lubadus, et see saab välja nägema selline. 565 00:25:30,540 --> 00:25:33,720 See saab võtta täisarv kui input-- ja võin olla selgem 566 00:25:33,720 --> 00:25:36,570 ja öelda, int n --and see läheb tagasi int, 567 00:25:36,570 --> 00:25:39,900 kuid semikoolon vahendid, mm, ma saan ümber rakendada seda veidi hiljem. 568 00:25:39,900 --> 00:25:40,989 Jällegi rõkkama on loll. 569 00:25:40,989 --> 00:25:43,280 See on ainult kavatse tea, mida sa ütled seda ülevalt alla, 570 00:25:43,280 --> 00:25:45,765 nii et me peame vähemalt anda see vihje, mis on tulemas. 571 00:25:45,765 --> 00:25:47,330 >> Nüüd vaatame, peamine siin. 572 00:25:47,330 --> 00:25:50,040 Olgem keri siin ja vaata, mis peamine teeb. 573 00:25:50,040 --> 00:25:53,780 See ei ole nii pikk funktsiooni ja tegelikult konstrukt siin on tuttav. 574 00:25:53,780 --> 00:25:57,590 Kinnitan muutuja n, ja seejärel Ma vaevama kasutaja ikka ja jälle 575 00:25:57,590 --> 00:26:01,880 jaoks positiivne täisarv kasutades getInt, ja ainult väljumist läbi selle silmuse 576 00:26:01,880 --> 00:26:03,280 kui kasutaja on järginud. 577 00:26:03,280 --> 00:26:05,670 Kas Kuigi oleme harjunud vaevama kasutaja niimoodi. 578 00:26:05,670 --> 00:26:06,670 Nüüd see on huvitav. 579 00:26:06,670 --> 00:26:08,510 Kinnitan int nimetatakse "vastus." 580 00:26:08,510 --> 00:26:11,420 Ma määrata selle tagastamise väärtus ning funktsiooni nimetatakse "sigma." 581 00:26:11,420 --> 00:26:15,200 Ma ei tea, mida see veel, kuid Mäletan, kuulutatakse ta hetk tagasi. 582 00:26:15,200 --> 00:26:18,310 Ja siis ma möödaminnes Väärtus, mille kasutaja tipitud, n, 583 00:26:18,310 --> 00:26:20,420 ja siis ma aru vastus. 584 00:26:20,420 --> 00:26:22,260 Noh olgem liikuge tagasi hetkeks. 585 00:26:22,260 --> 00:26:28,620 Lähme edasi sellesse kataloogi, teha Sigma 0, ja tegelikult programmi käivitada 586 00:26:28,620 --> 00:26:30,490 ja vaata, mis juhtub. 587 00:26:30,490 --> 00:26:35,930 Nii et kui ma edasi minna ja joosta Selle programmi ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 ja ma kirjuta positiivne täisarv nagu kaks, Sigma, 589 00:26:40,139 --> 00:26:43,180 nagu Kreeka sümbol viitab, on lihtsalt läheb küündivad kõiki numbreid 590 00:26:43,180 --> 00:26:44,320 null kuni kaks. 591 00:26:44,320 --> 00:26:46,560 Nii 0 pluss 1 pluss 2. 592 00:26:46,560 --> 00:26:48,830 Nii et see peaks loodetavasti annab mulle 3. 593 00:26:48,830 --> 00:26:49,750 See on kõik see teeb. 594 00:26:49,750 --> 00:26:52,690 Ja samamoodi, kui ma saan seda uuesti ja ma annan see number kolm, 595 00:26:52,690 --> 00:26:56,721 see on 3 pluss 2, nii et see 5 + 1 peaks mulle 6. 596 00:26:56,721 --> 00:26:59,470 Ja siis, kui ma saan tõesti hull ja hakake suuremad numbrid, 597 00:26:59,470 --> 00:27:01,290 see peaks mulle suuremaks summad. 598 00:27:01,290 --> 00:27:02,250 Nii et see on kõik. 599 00:27:02,250 --> 00:27:04,010 >> Mis siis sigma välja näeb? 600 00:27:04,010 --> 00:27:05,430 Noh, see on üsna lihtne. 601 00:27:05,430 --> 00:27:08,940 See, kuidas me võiksime rakendanud see on viimase paari nädala jooksul. 602 00:27:08,940 --> 00:27:11,120 "Väravavahi" saab olema tagasipöördumine tüüp. 603 00:27:11,120 --> 00:27:14,330 Sigma on nimi, ja see võtab Muutuja m asemel n. 604 00:27:14,330 --> 00:27:15,940 Ma muudan selle üleval. 605 00:27:15,940 --> 00:27:17,340 Siis on see lihtsalt mõistuse kontroll. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Eks me näe, miks hetkel. 608 00:27:19,950 --> 00:27:24,220 Nüüd Kinnitan muu muutuja, mis summa, initsialiseerida see nulli. 609 00:27:24,220 --> 00:27:28,140 Siis ma pean seda loop iterating ilmselt selgust, 610 00:27:28,140 --> 00:27:33,810 alates i = 1 kuni = m, mis on olenemata kasutaja tipitud, ja siis ma 611 00:27:33,810 --> 00:27:35,690 juurdekasvu summa niimoodi. 612 00:27:35,690 --> 00:27:37,360 Ja siis tagasi summa. 613 00:27:37,360 --> 00:27:38,440 >> Nii paar küsimust. 614 00:27:38,440 --> 00:27:42,370 Üks, ma väita, minu kommentaar, et see väldib riski lõputu silmuse. 615 00:27:42,370 --> 00:27:45,620 Miks möödaminnes negatiivne arv esile kutsuda potentsiaalselt lõputu silmuse? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> Sihtrühm: Sa ei jõua kunagi m. 618 00:27:51,290 --> 00:27:52,880 >> SPEAKER 1: Mitte kunagi jõuda m. 619 00:27:52,880 --> 00:27:55,880 Aga m on vastu võetud, nii et olgem kaaluda lihtsa näite. 620 00:27:55,880 --> 00:27:58,510 Kui m on möödas poolt kasutaja on negatiivne. 621 00:27:58,510 --> 00:28:00,059 Sõltumata peamine. 622 00:28:00,059 --> 00:28:01,850 Main kaitseb meid Ka see, et ma olen lihtsalt 623 00:28:01,850 --> 00:28:04,680 on tõesti anal sigma ka veenduda, 624 00:28:04,680 --> 00:28:06,540 et sisend ei saa olla negatiivne. 625 00:28:06,540 --> 00:28:10,130 Nii et kui m on negatiivne, midagi negatiivsed. 626 00:28:10,130 --> 00:28:11,930 Mis siis juhtub? 627 00:28:11,930 --> 00:28:14,390 Noh, ma ei kavatse saada vormindatud ühe, 628 00:28:14,390 --> 00:28:19,060 ja siis ma ei kavatse olla väiksem või võrdne m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Olge valmis. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 See oli-- ärgem, olgem NIX see lugu. 633 00:28:29,370 --> 00:28:32,780 Ma ei küsinud seda küsimust, sest risk, et ma olen vihjates 634 00:28:32,780 --> 00:28:38,360 ei juhtu, sest ma ei alati saab olema suurem kui-- OK, 635 00:28:38,360 --> 00:28:39,871 Ma tõmbuda, et küsimus. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Olgem keskenduda ainult see osa siin. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Miks ma kuulutada mõned väljaspool loop? 640 00:28:48,830 --> 00:28:52,010 Teatis line 49 ma olen deklareeritud i sees silmus, 641 00:28:52,010 --> 00:28:54,950 kuid online-48 Olen deklareeritud mõned väljaspool. 642 00:28:54,950 --> 00:28:55,695 Jah. 643 00:28:55,695 --> 00:28:56,611 Sihtrühm: [kuuldamatu]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 SPEAKER 1: Muidugi. 646 00:28:59,400 --> 00:29:03,360 Nii et ennekõike ma kindlasti ei tahan kuulutada ja initsialiseerida summa 647 00:29:03,360 --> 00:29:06,130 nulli sees silmus iga iteratsiooni 648 00:29:06,130 --> 00:29:09,370 sest see oleks selgelt lüüa eesmärk summeerida numbrid. 649 00:29:09,370 --> 00:29:11,770 Ma hoiaks muutes raha tagasi nulli. 650 00:29:11,770 --> 00:29:17,992 Ja ka, mis on veel üks kauge Põhjus sama disain otsus? 651 00:29:17,992 --> 00:29:18,954 Jah. 652 00:29:18,954 --> 00:29:20,279 >> Sihtrühm: [kuuldamatu]. 653 00:29:20,279 --> 00:29:21,070 SPEAKER 1: Täpselt. 654 00:29:21,070 --> 00:29:24,060 Ma tahan kasutada seda väljaspool loop liiga, mida joon? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 On 53. 657 00:29:26,400 --> 00:29:29,910 Ja põhineb meie rusikareegel mõnest loenguid tagasi 658 00:29:29,910 --> 00:29:33,680 muutujad scoped tõesti, et looksulg, mis hõlmavad neid. 659 00:29:33,680 --> 00:29:38,190 Nii et kui ma ei deklareeri summa sees Nende välimise looksulg, 660 00:29:38,190 --> 00:29:40,250 Ma ei saa seda kasutada vastavalt 53. 661 00:29:40,250 --> 00:29:43,160 Teisisõnu, kui ma tunnistada summa sisse, või isegi 662 00:29:43,160 --> 00:29:45,410 Silmus, ma ei saanud seda kasutada 53. 663 00:29:45,410 --> 00:29:47,150 Muutuja tõhusalt läinud. 664 00:29:47,150 --> 00:29:48,579 Nii paar põhjust seal. 665 00:29:48,579 --> 00:29:50,370 Aga nüüd lähme tagasi ja vaata, mis juhtub. 666 00:29:50,370 --> 00:29:51,730 Nii sigma saab nn. 667 00:29:51,730 --> 00:29:55,640 See lisab kuni 1 pluss 2 või 1 pluss 2 pluss 3 ja seejärel tagastab väärtuse, 668 00:29:55,640 --> 00:29:59,660 salvestab selle vastuse ja printf siin Sellepärast ma näen ekraanil. 669 00:29:59,660 --> 00:30:03,079 Nii et see on see, mida me kutsume iteratiivne lähenemist, kus iteratsiooni lihtsalt 670 00:30:03,079 --> 00:30:03,870 tähendab silmust kasutades. 671 00:30:03,870 --> 00:30:06,900 For loop, samas silmus, Do Kuigi loop, siis midagi jälle 672 00:30:06,900 --> 00:30:08,380 ja uuesti ja uuesti. 673 00:30:08,380 --> 00:30:13,505 >> Aga sigma on selline puhas funktsiooni et ma võiks rakendada seda erinevalt. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Aga see, mis lihtsalt olla selline lahe, 676 00:30:19,120 --> 00:30:21,880 las ma tõesti vabaneda on palju tähelepanu kõrvale 677 00:30:21,880 --> 00:30:24,380 kuna see funktsioon on tegelikult üsna lihtne. 678 00:30:24,380 --> 00:30:27,780 Olgem nikerdama maha lihtsalt oma nelja sisekihte 679 00:30:27,780 --> 00:30:30,410 ja vabaneda kõik Kommentaarid ja lokkis traksid. 680 00:30:30,410 --> 00:30:34,334 See on omamoodi Häkellyttävä alternatiiv rakendamist. 681 00:30:34,334 --> 00:30:37,250 Olgu, võib-olla ei pahanda puhub, aga see on selline seksikam, eks, 682 00:30:37,250 --> 00:30:39,920 vaadata seda nii palju lühidalt. 683 00:30:39,920 --> 00:30:43,120 Vaid neli rida koodi, Ma pean kõigepealt selle meelerahu kontrolli. 684 00:30:43,120 --> 00:30:45,732 Kui m on väiksem või võrdne null, Sigma ei ole mõtet. 685 00:30:45,732 --> 00:30:48,190 See on ainult pidi olema Sel juhul positiivse numbrid, 686 00:30:48,190 --> 00:30:50,340 nii et ma olen lihtsalt läheb tagasi nulli meelevaldselt 687 00:30:50,340 --> 00:30:53,210 nii et meil on vähemalt mõned nn aluspõhimõtted. 688 00:30:53,210 --> 00:30:54,430 >> Aga siin on ilu. 689 00:30:54,430 --> 00:30:59,930 Kogu see mõte, lisades numbritega 1 kuni n või m sel juhul 690 00:30:59,930 --> 00:31:02,630 saab teha sellist kulgeb Buck. 691 00:31:02,630 --> 00:31:04,947 Noh, mis on summa, 1 m? 692 00:31:04,947 --> 00:31:05,780 Noh, sa tead, mida? 693 00:31:05,780 --> 00:31:11,949 See sama summa m pluss summa 1 kuni m miinus 1. 694 00:31:11,949 --> 00:31:12,740 Noh tead mis? 695 00:31:12,740 --> 00:31:13,940 Mis sigma m miinus 1? 696 00:31:13,940 --> 00:31:17,860 Noh, kui sa omamoodi jälgida seda loogiliselt, see on sama nagu m miinus 1 697 00:31:17,860 --> 00:31:21,415 pluss sigma m miinus 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Nii saate liiki lihtsalt-- see on nagu, kui sa oled lihtsalt 700 00:31:26,012 --> 00:31:28,220 üritab tüütama sõbrale ja nad küsivad sult 701 00:31:28,220 --> 00:31:31,344 sa omamoodi vastata küsimusele, te võite seda hoida kulgeb Buck. 702 00:31:31,344 --> 00:31:34,560 Aga mis peamine on see, et kui te ei hoia tegemise küsimuse väiksemaid 703 00:31:34,560 --> 00:31:36,910 ja väiksemate, sa oled ei küsi, mis on sigma 704 00:31:36,910 --> 00:31:39,116 n, mis on sigma kohta n, mis on sigma n? 705 00:31:39,116 --> 00:31:40,990 Sa küsid, mis on Sigma n, mis on sigma 706 00:31:40,990 --> 00:31:42,839 n miinus 1, mis on sigma n miinus 2? 707 00:31:42,839 --> 00:31:44,880 Lõpuks oma küsimus hakkab muutuma mis? 708 00:31:44,880 --> 00:31:50,250 Mis on sigma ühe või null, mõned väga väike väärtus, 709 00:31:50,250 --> 00:31:52,220 ja niipea kui saada, et su sõber, 710 00:31:52,220 --> 00:31:54,350 te ei kavatse küsida sama küsimust uuesti, 711 00:31:54,350 --> 00:31:55,975 sa oled lihtsalt kavatse öelda, oh see on null. 712 00:31:55,975 --> 00:31:58,490 Me oleme valmis mängima selline loll tsükliline mängu. 713 00:31:58,490 --> 00:32:02,950 >> Nii rekursioon on tegu programmeerimine Funktsiooni kutsudes ise. 714 00:32:02,950 --> 00:32:06,630 See programm, kui kompileerida ja tööle, on kavatse käituda täpselt samamoodi, 715 00:32:06,630 --> 00:32:09,620 aga mis peamine on see, et sees ning funktsiooni nimetatakse sigma 716 00:32:09,620 --> 00:32:13,150 on rida koodi kusjuures et me nimetame end, 717 00:32:13,150 --> 00:32:14,980 mis on tavaliselt halb. 718 00:32:14,980 --> 00:32:21,160 Näiteks, mis siis, kui ma esimest korda koostas selle, nii et sigma-- 719 00:32:21,160 --> 00:32:22,710 teha sigma 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Positiivne täisarv, siis 50 1275. 722 00:32:27,690 --> 00:32:30,810 Mida funktsioon tundub olema, mis põhineb ühel test, õige. 723 00:32:30,810 --> 00:32:34,917 Aga mis siis, kui ma saan natuke ohtlik kustutada niinimetatud baas juhul 724 00:32:34,917 --> 00:32:37,750 ja lihtsalt öelda, hästi ma lihtsalt tegemise seda keerulisem see on. 725 00:32:37,750 --> 00:32:42,450 Ütleme lihtsalt arvutada sigma võttes m ja seejärel lisades 726 00:32:42,450 --> 00:32:44,564 Sigma m miinus üks? 727 00:32:44,564 --> 00:32:45,980 Noh, mis juhtub siin? 728 00:32:45,980 --> 00:32:47,140 Lähme välja suumida. 729 00:32:47,140 --> 00:32:52,920 Olgem kompileerida programmi salvestada, kompileerida programmi 730 00:32:52,920 --> 00:33:00,450 ja siis valmis ./sigma-1 Suurendamine sisestage positiivne täisarv palun, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Kui paljud teist on valmis et fess kuni näeme, et? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Nii et see võib juhtuda mitmeid põhjuseid, 735 00:33:06,690 --> 00:33:09,148 ja ausalt öeldes sel nädalal oleme umbes teile rohkem neist. 736 00:33:09,148 --> 00:33:11,780 Kuid sel juhul proovida mõelda tagasi 737 00:33:11,780 --> 00:33:14,430 mis oleks võinud juhtuda siin? 738 00:33:14,430 --> 00:33:17,400 Segmenteerimine süü, me ütles eelmisel ajal, viitab segmendi mälu. 739 00:33:17,400 --> 00:33:18,690 Midagi halba ei juhtunud. 740 00:33:18,690 --> 00:33:21,550 Aga mis oli see mehaaniliselt, mis läks viltu 741 00:33:21,550 --> 00:33:25,000 siin, sest mu eemaldamine Selle niinimetatud baas juhul 742 00:33:25,000 --> 00:33:26,870 kui ma tagasi kodeeritud väärtus? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Mis sa arvad valesti läks? 745 00:33:30,460 --> 00:33:31,219 Jah. 746 00:33:31,219 --> 00:33:32,135 >> Sihtrühm: [kuuldamatu]. 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 Hea küsimus. 750 00:33:37,550 --> 00:33:39,508 Nii suuruse arvu et olin summeerida 751 00:33:39,508 --> 00:33:41,920 sain nii suur, et see ületas suurus mälu. 752 00:33:41,920 --> 00:33:44,640 Hea mõte, aga mitte oluliselt läheb põhjustada krahhi. 753 00:33:44,640 --> 00:33:48,230 See võib põhjustada täisarv overflow, kus bitti lihtsalt flip üle 754 00:33:48,230 --> 00:33:51,760 ja siis viga on tõesti suur number nagu negatiivne arv, 755 00:33:51,760 --> 00:33:53,260 kuid mis ise ei põhjusta krahhi. 756 00:33:53,260 --> 00:33:55,509 Sest lõpuks päev int on veel 32 bitti. 757 00:33:55,509 --> 00:33:57,640 Sa ei kavatse kogemata varastada 33. bit. 758 00:33:57,640 --> 00:33:58,431 Aga hea mõte. 759 00:33:58,431 --> 00:33:58,984 Jah. 760 00:33:58,984 --> 00:33:59,900 >> Sihtrühm: [kuuldamatu]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 SPEAKER 1: meetod kunagi seiskumist 763 00:34:02,300 --> 00:34:06,658 ja tõepoolest see kutsub ennast jälle ja uuesti ja uuesti ja uuesti 764 00:34:06,658 --> 00:34:08,449 ja uuesti, ja mitte ükski neid ülesandeid kunagi 765 00:34:08,449 --> 00:34:13,310 lõpetada, sest nende ainus rida kood nõuab iseenda ja jälle 766 00:34:13,310 --> 00:34:14,219 ja jälle. 767 00:34:14,219 --> 00:34:16,080 Ja mis on tegelikult siin toimub, ja nüüd me 768 00:34:16,080 --> 00:34:18,100 saab omamoodi teha seda piltlikult. 769 00:34:18,100 --> 00:34:20,899 Lubage mul minna üle pilt hetkeks. 770 00:34:20,899 --> 00:34:22,940 See on pilt, mis lõpuks täpsustada 771 00:34:22,940 --> 00:34:26,336 üksikasjalikumalt, mis toimub sees oma arvuti mällu. 772 00:34:26,336 --> 00:34:28,460 Ja selgub, et põhjas seda pilti 773 00:34:28,460 --> 00:34:29,709 on midagi, mida nimetatakse pinu. 774 00:34:29,709 --> 00:34:31,920 See on patakas mälu, patakas RAM, 775 00:34:31,920 --> 00:34:33,920 et lihtsalt kasutada igal ajal funktsiooni nimetatakse. 776 00:34:33,920 --> 00:34:36,239 Iga kord, kui sa, programmeerija, helistada funktsioon, 777 00:34:36,239 --> 00:34:38,860 operatsioonisüsteemi, nagu Mac OS, Windows või Linux, 778 00:34:38,860 --> 00:34:41,920 haarab kamp baiti, ehk paari kilobaiti, võibolla paar megabaiti 779 00:34:41,920 --> 00:34:44,590 mälu, ulatab neile teile ja võimaldab 780 00:34:44,590 --> 00:34:47,650 sa käivitada oma funktsiooni abil olenemata muutujad, mida vajate. 781 00:34:47,650 --> 00:34:50,699 Ja kui te siis helistada teise funktsioon ja teine ​​funktsioon, 782 00:34:50,699 --> 00:34:53,590 saad veel tükk mälu ja teise viilu mälu. 783 00:34:53,590 --> 00:34:57,090 >> Ja tõesti, kui need rohelised plaadid alates Annenberg esindavad seda mälu 784 00:34:57,090 --> 00:34:59,870 siin on, mida juhtub esimesel kord, kui helistada funktsioon sigma. 785 00:34:59,870 --> 00:35:04,510 See on nagu pannes aluse niimoodi kohta, mis on algselt tühi pinu. 786 00:35:04,510 --> 00:35:07,142 Aga siis, kui salv nimetab ennast niiöelda, 787 00:35:07,142 --> 00:35:08,850 kutsudes teise astme Sigma, mis on 788 00:35:08,850 --> 00:35:11,640 nagu paludes operatsioonisüsteemi ooh, vaja natuke rohkem mälu, 789 00:35:11,640 --> 00:35:12,520 anna mulle see. 790 00:35:12,520 --> 00:35:14,840 Ja siis ta saab kuhjatakse peal. 791 00:35:14,840 --> 00:35:18,030 Aga mis peamine on see, et Esimene plaat on ikka veel seal, 792 00:35:18,030 --> 00:35:20,620 sest ta tugines selle teise salve. 793 00:35:20,620 --> 00:35:23,500 Nüüd vahepeal sigma helistada sigma, see on nagu nõuavad rohkem mälu. 794 00:35:23,500 --> 00:35:25,830 Gets kuhjatakse siin. 795 00:35:25,830 --> 00:35:29,350 Sigma helistada sigma, see on teine salve, et saab kuhjatakse siin. 796 00:35:29,350 --> 00:35:32,942 Ja kui sa ikka seda teed, lõpuks, millist kaarti selle visuaalne 797 00:35:32,942 --> 00:35:35,525 selle diagrammi, mis hakkab juhtuda virna? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 See saab ületada summat mälu arvutil on. 800 00:35:41,160 --> 00:35:45,790 Ja niipea, kui see roheline plaat üle horisontaaljoone 801 00:35:45,790 --> 00:35:49,410 üle korstna ja üle selle sõna hunnik, mis me tuleme tagasi tulevikus 802 00:35:49,410 --> 00:35:50,410 mis on halb. 803 00:35:50,410 --> 00:35:52,810 Hunnik on erinevad segment mälu 804 00:35:52,810 --> 00:35:55,190 ja kui sa lased neid plaate kuhi ja vaia, 805 00:35:55,190 --> 00:35:57,800 sa lähed, et ületada oma segmendi mälu 806 00:35:57,800 --> 00:36:00,420 ja programm on tõepoolest kukku. 807 00:36:00,420 --> 00:36:02,930 >> Nüüd kui kõrvale, selle idee kohta rekursioon, seega 808 00:36:02,930 --> 00:36:06,500 selgelt põhjustada probleeme, kuid see ei ole tingimata halb asi. 809 00:36:06,500 --> 00:36:08,840 Kuna kaaluda pärast kõik, kuidas-- ja võibolla 810 00:36:08,840 --> 00:36:11,700 see võtab veidi harjumist et --how elegantne või kuidas lihtsate 811 00:36:11,700 --> 00:36:14,890 et rakendamise sigma oli. 812 00:36:14,890 --> 00:36:17,440 Ja me ei kavatse kasutada rekursioon kõik, et palju on CS50, 813 00:36:17,440 --> 00:36:20,780 kuid CS51, ja tõesti iga klassi kus sa manipuleerida andmestruktuurid 814 00:36:20,780 --> 00:36:23,640 nagu puud või pere puud, et mõned hierarhia, 815 00:36:23,640 --> 00:36:26,000 see on super, super kasulik. 816 00:36:26,000 --> 00:36:29,750 Nüüd, kui kõrvale, nii et sa kui ambitsioonikaid infotehnoloogid 817 00:36:29,750 --> 00:36:33,180 tunnevad mõned Google sees nalja, kui te lähete Google 818 00:36:33,180 --> 00:36:36,345 ja sa näed seda, mida on mõiste, ütleme, rekursioon, siseneda. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Uh-huh. 821 00:36:41,110 --> 00:36:42,670 Nagu kõrvale, ma tõmmata paar. 822 00:36:42,670 --> 00:36:45,470 See oli nagu 10 minutit Viivitamine hommikul. 823 00:36:45,470 --> 00:36:52,890 Kui te ka Google "viltu" teade kallutades oma pead slightly-- 824 00:36:52,890 --> 00:36:55,120 ja siis see üks on võib-olla Kõige jõle kõik 825 00:36:55,120 --> 00:36:57,286 kuna keegi veetis nagu nende päev rakendamisel 826 00:36:57,286 --> 00:36:59,880 mõned aastad ago-- tule. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Oh, Oota- see on viga. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Nii töötab üks Maailma suurim veebilehed 831 00:37:11,410 --> 00:37:13,510 need tobedalt lihavõttemunad. 832 00:37:13,510 --> 00:37:16,690 Nad ilmselt tarbima nontrivial arv ridu koodi 833 00:37:16,690 --> 00:37:19,280 just nii, et meil on natuke nalja asjad niimoodi. 834 00:37:19,280 --> 00:37:22,140 Aga vähemalt nüüd sa mõned nendest inside nalju. 835 00:37:22,140 --> 00:37:28,330 >> Nüüd võtame pilk mõned White Lies oleme rääkinud hilja, 836 00:37:28,330 --> 00:37:30,707 ja alustada koorida tagasi mõned kihid tehniliselt 837 00:37:30,707 --> 00:37:32,790 nii et sa tõesti aru mis on kestnud 838 00:37:32,790 --> 00:37:34,860 ja te saate aru, mõned ohud, 839 00:37:34,860 --> 00:37:38,060 nagu Shellshock, et on nüüd hakanud muutuma 840 00:37:38,060 --> 00:37:41,110 esirinnas igaühe tähelepanu, vähemalt meedias. 841 00:37:41,110 --> 00:37:45,810 Nii et siin on väga lihtne ülesanne mis tagastab midagi, tühine. 842 00:37:45,810 --> 00:37:46,790 Tema nimi on swap. 843 00:37:46,790 --> 00:37:50,880 See võtab kahe muutuja ja ta naaseb midagi. 844 00:37:50,880 --> 00:37:52,260 Võtab ja b. 845 00:37:52,260 --> 00:37:53,337 Nii kiire demonstratsioon. 846 00:37:53,337 --> 00:37:54,170 Tõime need üles. 847 00:37:54,170 --> 00:37:56,100 Me võiksime sama hästi võtta veidi murda siin hetkeks 848 00:37:56,100 --> 00:37:57,250 ja on natuke midagi juua. 849 00:37:57,250 --> 00:38:00,120 Kui keegi ei pahanda ühendab mind siia hetkeks. 850 00:38:00,120 --> 00:38:01,830 Kuidas sa maroon särk? 851 00:38:01,830 --> 00:38:02,335 Tule. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Lihtsalt üks täna. 854 00:38:05,260 --> 00:38:06,251 Aitäh, kuigi. 855 00:38:06,251 --> 00:38:08,000 Olgu, ja meil on tulemas, kes siin on? 856 00:38:08,000 --> 00:38:08,660 Mis su nimi on? 857 00:38:08,660 --> 00:38:09,360 >> SPEAKER 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> SPEAKER 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Tule. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Nii Laura, väga lihtne ülesanne täna. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Meeldiv kohtuda yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Olgu. 866 00:38:16,910 --> 00:38:21,179 Nii et meil on mõned piima siia ja meil on mõned apelsinimahl siia 867 00:38:21,179 --> 00:38:23,345 ja mõned tassid, et me laenatud Annenberg täna. 868 00:38:23,345 --> 00:38:24,178 >> SPEAKER 4: Laenatud. 869 00:38:24,178 --> 00:38:27,240 SPEAKER 1: Ja läheb minna ja teile pool klaasi seda. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Olgu. 872 00:38:28,800 --> 00:38:30,750 Ja me anname teile pool klaas piima. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Oh, ja just nii, et saate mäleta, mis see oli nagu, 875 00:38:35,890 --> 00:38:38,860 Mulle meenus, et tuua see üles ja täna. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Okei. 878 00:38:42,530 --> 00:38:45,470 Kui sa ei pahanda, vaatame, me ei pane neid üle oma prillid 879 00:38:45,470 --> 00:38:46,560 kui soovite. 880 00:38:46,560 --> 00:38:48,710 Sellest saab maailma Laura silmis. 881 00:38:48,710 --> 00:38:49,210 Olgu. 882 00:38:49,210 --> 00:38:53,820 Nii et teie eesmärk, kuna kaks tassi vedel siin, piim ja apelsinimahl, 883 00:38:53,820 --> 00:38:58,370 on swap kaks sisu nii, et apelsinimahl läheb piim tassi 884 00:38:58,370 --> 00:39:00,710 ja piim läheb apelsinimahla tassi. 885 00:39:00,710 --> 00:39:02,359 >> SPEAKER 4: Kas ma saan veel ühe tassi? 886 00:39:02,359 --> 00:39:05,650 SPEAKER 1: ma olen nii rõõmus, et sa palusid, kuigi see oleks olnud palju parem kaadrid 887 00:39:05,650 --> 00:39:06,710 Kui te ei palunud. 888 00:39:06,710 --> 00:39:10,620 Aga jah, me võime pakkuda sulle kolmandat tass, mis on muidugi tühi. 889 00:39:10,620 --> 00:39:11,120 Olgu. 890 00:39:11,120 --> 00:39:12,300 Nii swap sisu olemas. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Väga kena. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Väga hea. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Sa teed seda märkimisväärselt hoolikalt. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 Ja kolmas samm. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Olgu. 901 00:39:31,350 --> 00:39:31,930 Suurepärane. 902 00:39:31,930 --> 00:39:33,930 Suur aplaus oleks hea Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Olgu. 905 00:39:37,000 --> 00:39:40,790 Meil on väike jumalagajätt kingitus teid, kuid lubage mul võtta neid. 906 00:39:40,790 --> 00:39:42,620 Tänan sind nii palju. 907 00:39:42,620 --> 00:39:46,170 Nii lihtne näide, kuigi näidata, et kui sa seda teed 908 00:39:46,170 --> 00:39:48,300 tahan vahetada sisu kahest konteinerist, 909 00:39:48,300 --> 00:39:52,360 või olgem nimetame neid muutujaid, teil on vaja mõned ajutine ladustamine 910 00:39:52,360 --> 00:39:56,710 lavastada üks sisu nii et tegelikult võite seda teha swap. 911 00:39:56,710 --> 00:40:01,790 Nii et tõesti, see lähtekoodi siia üles C on tüüpiline just nii. 912 00:40:01,790 --> 00:40:06,340 Kui apelsinimahla ja piim oli b, ja me tahtsime vahetada kaks, 913 00:40:06,340 --> 00:40:08,990 võid proovida midagi loomingulist valades ühest teise, 914 00:40:08,990 --> 00:40:11,031 kuid ilmselt ei lõpuks eriti hästi. 915 00:40:11,031 --> 00:40:15,260 Ja nii me kasutada kolmanda tassi, kõne see tmp, T-M-P, kokkuleppeliselt 916 00:40:15,260 --> 00:40:19,370 ja pane sisu ELT selles, siis vahetada üks tass, 917 00:40:19,370 --> 00:40:22,610 Seejärel pange ELT sisse originaal tassi, seega 918 00:40:22,610 --> 00:40:25,320 saavutamiseks, täpselt nii, nagu Laura tegi, swap. 919 00:40:25,320 --> 00:40:26,850 >> Teeme just nii. 920 00:40:26,850 --> 00:40:30,110 Lubage mul minna ja avada kuni näiteks see 921 00:40:30,110 --> 00:40:32,720 tegelikult nn "no vaheta ", sest see ei ole 922 00:40:32,720 --> 00:40:36,180 nii lihtsalt teha, kui võite arvata. 923 00:40:36,180 --> 00:40:41,190 Nii et selles programmis, märkate, et Ma kasutan stdio.h, meie vana sõber. 924 00:40:41,190 --> 00:40:43,130 Mul on prototüüp swap seal, mis 925 00:40:43,130 --> 00:40:45,450 tähendab selle rakendamine on ilmselt allapoole, 926 00:40:45,450 --> 00:40:48,050 ja vaatame, mis see peamine Programmi saab teha minu jaoks. 927 00:40:48,050 --> 00:40:52,020 Ma esimest kuulutada int x saab üks ja int y saab kaks. 928 00:40:52,020 --> 00:40:54,930 Nii et mõtle neist kui ELT ja piima, vastavalt. 929 00:40:54,930 --> 00:40:57,100 Ja siis ma lihtsalt printf öeldes x on see 930 00:40:57,100 --> 00:41:00,120 ja y on see, just nii ma ei visuaalselt näha, mis toimub. 931 00:41:00,120 --> 00:41:03,810 Siis olen printf väites et ma vahetada kaks, 932 00:41:03,810 --> 00:41:07,100 ja siis ma välja printida väidavad, et nad vahetasid, 933 00:41:07,100 --> 00:41:09,300 ja ma välja printida x ja y uuesti. 934 00:41:09,300 --> 00:41:13,010 Nii et siin on swap on täpselt, mida Laura tegi, 935 00:41:13,010 --> 00:41:16,240 ja täpselt, mida nägime ekraan hetk tagasi. 936 00:41:16,240 --> 00:41:19,380 >> Nii et lähme edasi ja väga pettunud. 937 00:41:19,380 --> 00:41:24,690 Tee ei swap ja joosta ei swap, suumides väljund siia. 938 00:41:24,690 --> 00:41:28,320 Sisesta x on 1, y 2, vahetades vahetaks. 939 00:41:28,320 --> 00:41:32,700 x on endiselt 1 ja y on endiselt 2. 940 00:41:32,700 --> 00:41:37,630 Nii et kuigi ausalt öeldes, see näeb täpselt nagu, kuigi tehniliselt, 941 00:41:37,630 --> 00:41:40,730 mida Laura tegi, ei tundu töö. 942 00:41:40,730 --> 00:41:42,130 Miks see nii on? 943 00:41:42,130 --> 00:41:46,630 Noh, tuleb välja, et kui me kirjutame programmi niimoodi 944 00:41:46,630 --> 00:41:51,590 , mis on nii põhi-, siin esile, ja siis teine ​​funktsioon, nagu swap, 945 00:41:51,590 --> 00:41:54,230 siin esile, mis see nõuab, maailma 946 00:41:54,230 --> 00:41:57,030 tundub veidi midagi Nende plaate hetk tagasi. 947 00:41:57,030 --> 00:42:00,440 Kui peamine esimene saab nimetada, see on nagu paludes operatsioonisüsteemi 948 00:42:00,440 --> 00:42:04,030 natuke mälu ja kõik kohalikud muutujad nagu x ja y, et peamine on, 949 00:42:04,030 --> 00:42:05,660 ja nad lõpuks sinna. 950 00:42:05,660 --> 00:42:10,920 Kuid kui peamine kõnesid vahetada ning peamised möödub vahetada kaks argumenti a ja b, 951 00:42:10,920 --> 00:42:16,410 apelsinimahl ja piim, see ei meeldi jagab apelsinimahl ja piim 952 00:42:16,410 --> 00:42:17,500 Laura. 953 00:42:17,500 --> 00:42:21,300 Mis arvuti teeb, on see läbib koopiad apelsinimahl 954 00:42:21,300 --> 00:42:27,110 ja koopiate piima Laura, et mis lõppkokkuvõttes sees selle salve 955 00:42:27,110 --> 00:42:32,510 on väärtus üks ja kaks või ELT ja piima, kuid nende koopiad, 956 00:42:32,510 --> 00:42:34,790 nii, et selles kohas lugu, seal 957 00:42:34,790 --> 00:42:36,930 on ELT ning piima iga plaate. 958 00:42:36,930 --> 00:42:39,260 Seal on üks ja kaks Kõigis neis plaate, 959 00:42:39,260 --> 00:42:41,720 ja swap funktsiooni tõepoolest töötab. 960 00:42:41,720 --> 00:42:46,090 See on nende vahetamisest sees Teise tähtsaim salve, 961 00:42:46,090 --> 00:42:48,147 kuid vahetada ei mõjuta. 962 00:42:48,147 --> 00:42:49,980 Ja põhinevad vaid mõned põhiprintsiip me oleme 963 00:42:49,980 --> 00:42:52,970 rääkis enne, ja tõepoolest vaid paar minutit tagasi, mida 964 00:42:52,970 --> 00:42:58,770 võib selgitada, miks muutuvad ja b sees swap 965 00:42:58,770 --> 00:43:05,560 puudub toime x ja y, kuigi Ma veetsin x ja y swap funktsiooni. 966 00:43:05,560 --> 00:43:08,750 Mis on siin võtmesõna, mis võib lihtsustatult seletada? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Ma arvan, et ma kuulsin, et see siin on? 969 00:43:12,627 --> 00:43:13,335 Sihtrühm: Return. 970 00:43:13,335 --> 00:43:14,085 SPEAKER 1: Return? 971 00:43:14,085 --> 00:43:14,590 Ei tagasta. 972 00:43:14,590 --> 00:43:15,895 Lähme koos ühe teise. 973 00:43:15,895 --> 00:43:16,395 Mis see on? 974 00:43:16,395 --> 00:43:17,080 >> Sihtrühm: [kuuldamatu]. 975 00:43:17,080 --> 00:43:20,000 >> SPEAKER 1: OK, nii return-- saime tagasipöördumine tööd lugu, 976 00:43:20,000 --> 00:43:21,914 kuid seal on isegi lihtsam seletus. 977 00:43:21,914 --> 00:43:22,580 Sihtrühm: Reguleerimisala. 978 00:43:22,580 --> 00:43:23,288 SPEAKER 1: Reguleerimisala. 979 00:43:23,288 --> 00:43:24,300 Ma võtan ulatust. 980 00:43:24,300 --> 00:43:27,290 Nii ulatus, mäletan, kui meie x ja y kuulutatud. 981 00:43:27,290 --> 00:43:30,840 Nad kuulutatud sees Peamiste siin üleval. 982 00:43:30,840 --> 00:43:33,200 ja b, vahepeal on tõhusalt deklareeritud 983 00:43:33,200 --> 00:43:35,930 sees swap, mitte päris looksulg kuid siiski 984 00:43:35,930 --> 00:43:37,690 üldises ala swap. 985 00:43:37,690 --> 00:43:40,560 Ja nii tõepoolest ja b olemas ainult selles salves 986 00:43:40,560 --> 00:43:44,850 alates Annenberg see teine ​​patakas kood. 987 00:43:44,850 --> 00:43:49,500 Nii et me tõesti muutumas koopia, kuid see ei ole tõesti kõik, mis kasulik. 988 00:43:49,500 --> 00:43:52,190 >> Võtame pilk Selle veidi madalamale tasemele. 989 00:43:52,190 --> 00:43:55,430 Ma lähen tagasi Allikas Directory 990 00:43:55,430 --> 00:43:58,330 ja ma lähen esimesena suumimiseks siin ja lihtsalt 991 00:43:58,330 --> 00:44:02,290 kinnitada, et ma olen selles suurem terminali aknas 992 00:44:02,290 --> 00:44:04,430 Programmi ikka käituvad niimoodi. 993 00:44:04,430 --> 00:44:06,840 Oletame nüüd, et see ei ole tahtlik. 994 00:44:06,840 --> 00:44:10,090 Ilmselgelt tahtsin vahetus tööd, nii et tundub, nagu putukas. 995 00:44:10,090 --> 00:44:12,780 Nüüd ma võiks alustada lisades palju printf on minu kood, 996 00:44:12,780 --> 00:44:16,010 väljatrükk x siia, y üle siin, siin, b siia. 997 00:44:16,010 --> 00:44:18,220 Aga ausalt öeldes, see on ilmselt, mida olete teinud paar nädalat 998 00:44:18,220 --> 00:44:20,190 nüüd tööaega ja kodus töötades 999 00:44:20,190 --> 00:44:22,150 aasta psets püüdes leida mõned vead. 1000 00:44:22,150 --> 00:44:25,560 Aga näete, kui te pole seda juba teinud, et probleem seatud kolm tutvustab teile 1001 00:44:25,560 --> 00:44:31,630 et käsu nimeks GDB, kus GDB, GNU siluri, 1002 00:44:31,630 --> 00:44:34,040 ise on terve hunnik funktsioone, mis tegelikult 1003 00:44:34,040 --> 00:44:38,160 mõistkem olukordades meeldib see, kuid rohkem compellingly, 1004 00:44:38,160 --> 00:44:39,940 lahendada probleeme ja leida vigu. 1005 00:44:39,940 --> 00:44:40,940 Nii et ma teen seda. 1006 00:44:40,940 --> 00:44:44,770 Selle asemel, et ./noswap, ma olen selle asemel jooksegi GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Teisisõnu, ma saan oma Programm ei ole Bash, et meie uus sõber 1009 00:44:51,200 --> 00:44:51,850 täna. 1010 00:44:51,850 --> 00:44:53,970 Ma saan oma Programmi noswap sees 1011 00:44:53,970 --> 00:44:56,900 selle teise programmi nimega GDB, mis on siluri, mis 1012 00:44:56,900 --> 00:45:01,035 on programm, mis on mõeldud selleks, et sa inimene leida ja eemaldada putukaid. 1013 00:45:01,035 --> 00:45:03,410 Nii et kui ma tabanud Jooks siin, seal jõle summa teksti 1014 00:45:03,410 --> 00:45:04,868 et sa tõesti ei pea lugema. 1015 00:45:04,868 --> 00:45:07,290 See on sisuliselt häiritud alates kiire, mis 1016 00:45:07,290 --> 00:45:10,030 Ma lähen lüüa kontroll-L ärkama ülaosas on. 1017 00:45:10,030 --> 00:45:11,800 See on GDB kiire. 1018 00:45:11,800 --> 00:45:15,550 Kui ma tahan, et programmi käivitada kohe, kui see väike cheat sheet tänapäeva 1019 00:45:15,550 --> 00:45:21,860 slaid näitab, Run on esimene käske, mida me eesmärk on tutvustada. 1020 00:45:21,860 --> 00:45:25,150 Ja ma lihtsalt kirjutada eel siin sees GDB, 1021 00:45:25,150 --> 00:45:26,811 ja tõepoolest see jooksis mu programmi. 1022 00:45:26,811 --> 00:45:29,310 Nüüd on mõned täiendavad väljundid ekraani niimoodi, 1023 00:45:29,310 --> 00:45:31,910 aga see GDB lihtsalt anal ja ütleb meile, mis toimub. 1024 00:45:31,910 --> 00:45:34,451 Sa tõesti ei pea muretsema umbes need andmed kohe. 1025 00:45:34,451 --> 00:45:36,890 Aga mis on tõesti lahe kohta GDB, kui ma teen seda again-- 1026 00:45:36,890 --> 00:45:42,100 Kontroll-L puhastab screen-- lase mul minna ees ja tüüp "murda peamine," seega, 1027 00:45:42,100 --> 00:45:45,743 kui ma vajuta Enter, milles mis nn murdepunkti juures noswap.c, 1028 00:45:45,743 --> 00:45:51,270 real 16, mis on kui GDB arvasin, mu programm tegelikult 1029 00:45:51,270 --> 00:45:53,070 on minu funktsioon tegelikult on. 1030 00:45:53,070 --> 00:45:55,070 Seda me eirame nüüd aga see aadress 1031 00:45:55,070 --> 00:45:57,310 mällu konkreetselt selle funktsiooni. 1032 00:45:57,310 --> 00:46:00,240 Nüüd, kui ma tüüpi joosta, teate, mis on lahe siin. 1033 00:46:00,240 --> 00:46:05,650 Minu programm katkeb line I ütles GDB peatamiseks täitmise juures. 1034 00:46:05,650 --> 00:46:09,850 Nii et ma ei pea nüüd muuta oma koodi, lisada mõned printf-ndatel, kompileerida see, kordamisega 1035 00:46:09,850 --> 00:46:13,300 see, muuta, lisada mõned printf-ndatel, salvestada, kompileerida see, käivitage see. 1036 00:46:13,300 --> 00:46:18,100 Ma ei saa lihtsalt kõndida läbi minu programm samm-samm-sammult inimesel kiirus, 1037 00:46:18,100 --> 00:46:20,880 mitte Intel-sees selline kiirus. 1038 00:46:20,880 --> 00:46:24,580 >> Nüüd teate selle rea Siia ilmub, ja kui ma lähen tagasi 1039 00:46:24,580 --> 00:46:27,800 minu programmi gedit, märgata, et see on tegelikult 1040 00:46:27,800 --> 00:46:29,280 Kõige esimene rida koodi. 1041 00:46:29,280 --> 00:46:31,240 On line 16 gedit. 1042 00:46:31,240 --> 00:46:34,610 On line 16 jooksul GDB, ja isegi kuigi see musta ja valge pesaga 1043 00:46:34,610 --> 00:46:37,760 ei ole kaugeltki nii kasutaja sõbralik, see tähendab, 1044 00:46:37,760 --> 00:46:41,680 et liin 16 ei ole täidetud veel, kuid see on umbes olema. 1045 00:46:41,680 --> 00:46:46,220 Nii tõesti kui ma tüüpi print x, mitte printf, lihtsalt print x, 1046 00:46:46,220 --> 00:46:50,730 Ma saaksin võlts väärtus on null, sest x ei ole vormindatud veel. 1047 00:46:50,730 --> 00:46:54,760 Nii et ma lähen järgmisena, või kui sa tahad olla väljamõeldud, vaid n järgmisel. 1048 00:46:54,760 --> 00:46:59,090 Aga kui ma järgmisena siseneda, nüüd teate see liigub edasi line 17. 1049 00:46:59,090 --> 00:47:02,840 Seega loogiliselt, kui ma olen täide line 16 ja nüüd kirjuta print x, 1050 00:47:02,840 --> 00:47:03,640 Mida ma peaksin vaatama? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Üks. 1053 00:47:05,520 --> 00:47:07,820 >> Ja nüüd on see küll segadusse. 1054 00:47:07,820 --> 00:47:11,260 $ 2 on lihtsalt fancy viis, kui te tahan viidata, et väärtus hiljem 1055 00:47:11,260 --> 00:47:12,510 sa ei saa öelda "dollar kirjutama kaks." 1056 00:47:12,510 --> 00:47:13,480 See on nagu tagasi alles. 1057 00:47:13,480 --> 00:47:14,570 Aga nüüd, lihtsalt ignoreerida. 1058 00:47:14,570 --> 00:47:17,070 Mis huvitav on see, mida on paremal võrdusmärki. 1059 00:47:17,070 --> 00:47:21,000 Ja nüüd, kui ma järgmisena uuesti ja printida y, ma näha 2. 1060 00:47:21,000 --> 00:47:23,870 Võin ka nüüd printida x taas, ja ausalt öeldes, 1061 00:47:23,870 --> 00:47:27,130 kui ma saan natuke segaduses, kus ma olen, ma ei kirjuta nimekirjast nimekirja 1062 00:47:27,130 --> 00:47:30,590 ja lihtsalt vaadata mõned kontekstis ümber hetkel ma olen ka tegelikult. 1063 00:47:30,590 --> 00:47:35,180 Ja nüüd ma ei kirjuta Järgmise, ja seal x on 1. 1064 00:47:35,180 --> 00:47:36,300 Nüüd ma järgmisena. 1065 00:47:36,300 --> 00:47:37,710 Oh, y 2. 1066 00:47:37,710 --> 00:47:40,750 Ja veel, see on segane, sest GDB väljund 1067 00:47:40,750 --> 00:47:43,044 on segatud oma toodangut. 1068 00:47:43,044 --> 00:47:45,710 Aga kui te meeles pidama, mida põrkav edasi-tagasi oma koodi 1069 00:47:45,710 --> 00:47:47,740 või milles see välja poole kõrval olla, siis saad 1070 00:47:47,740 --> 00:47:51,020 näha, et tegelikult ma olen lihtsalt astutakse läbi minu programmi. 1071 00:47:51,020 --> 00:47:54,620 >> Aga teate, mis juhtub, sõna otseses mõttes. 1072 00:47:54,620 --> 00:47:56,380 Siin on line 22. 1073 00:47:56,380 --> 00:48:01,315 Lubage mul minna üle, mis liigub 23 ja kui ma print x nüüd, veel üks. 1074 00:48:01,315 --> 00:48:03,890 Ja kui ma printida y nüüd, veel üks. 1075 00:48:03,890 --> 00:48:05,820 Nii et see ei ole kasulik kasutada. 1076 00:48:05,820 --> 00:48:07,450 Nii et olgem uuesti seda. 1077 00:48:07,450 --> 00:48:10,069 Lubage mul minna tagasi üles top ja tüüp run uuesti. 1078 00:48:10,069 --> 00:48:12,110 Ja ta ütleb programm mis kuramuse silumisel 1079 00:48:12,110 --> 00:48:14,109 on alanud juba, alustas algusest peale. 1080 00:48:14,109 --> 00:48:15,420 Jah, teeme seda jälle. 1081 00:48:15,420 --> 00:48:22,000 Ja seekord teeme järgmise, Next kõrval kõrval, kõrval, 1082 00:48:22,000 --> 00:48:24,180 kuid nüüd asjad huvitavad. 1083 00:48:24,180 --> 00:48:27,760 Nüüd ma tahan astuda swap, nii et ma ei kirjuta järgmine. 1084 00:48:27,760 --> 00:48:34,380 I tüüpi samm, ja nüüd märgata hüppas mulle noswap.c line 33. 1085 00:48:34,380 --> 00:48:37,240 Kui ma lähen tagasi gedit, mis on line 33? 1086 00:48:37,240 --> 00:48:40,500 See on esimene tegelik koodirida sees swap. 1087 00:48:40,500 --> 00:48:44,150 Mis on kena, sest nüüd ma saan liiki tuhnima ja uudishimulik 1088 00:48:44,150 --> 00:48:46,052 selle kohta, mis toimub tõeliselt olemas. 1089 00:48:46,052 --> 00:48:46,760 Lubage mul printida tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Vau. 1092 00:48:48,800 --> 00:48:51,438 Miks tmp on mõned hull, võltsi prügi väärtus? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 Sihtrühm: See ei ole vormindatud. 1095 00:48:56,120 --> 00:48:57,150 SPEAKER 1: See ei ole vormindatud. 1096 00:48:57,150 --> 00:49:00,270 Ja tõepoolest, kui sa jooksed programmi sulle antakse terve hunnik mälu 1097 00:49:00,270 --> 00:49:03,392 operatsioonisüsteemi, kuid sa pole vormindatud tahes väärtusi, 1098 00:49:03,392 --> 00:49:05,600 nii et mida iganes bitti oled näeme siin, kuigi see 1099 00:49:05,600 --> 00:49:07,770 see hull suur negatiivne number, vaid seda, 1100 00:49:07,770 --> 00:49:10,750 et need on jäänuseid mõne varasema kasutuse, et RAM, 1101 00:49:10,750 --> 00:49:13,050 kuigi ma ei ole ise vaja seda veel. 1102 00:49:13,050 --> 00:49:17,086 Nii et nüüd ma lähen edasi minna ja tüüp Järgmise, ja kui ma nüüd kirjuta print tmp, 1103 00:49:17,086 --> 00:49:17,835 Mida ma peaksin vaatama? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Ükskõik väärtus oli on esimene argument, vaid 1106 00:49:23,360 --> 00:49:25,550 nagu x oli esimese asi on vastu võetud, 1107 00:49:25,550 --> 00:49:30,450 nii ja x peaks olema sama, nii printida tmp peaks printida mulle üks. 1108 00:49:30,450 --> 00:49:36,360 >> Niisiis, mida te näete probleemi komplekt kolm on juhendaja kehvasti on GDB, 1109 00:49:36,360 --> 00:49:40,020 kuid mõistab, et see on algusest on pilk vahend, mis tegelikult 1110 00:49:40,020 --> 00:49:42,774 aidata teil lahendada probleeme nii palju efektiivsemalt. 1111 00:49:42,774 --> 00:49:44,690 Mida me oleme lõpuks teeme kolmapäeval 1112 00:49:44,690 --> 00:49:48,180 on alustada koorida tagasi paar kihti ja kõrvaldada mõned abirattad. 1113 00:49:48,180 --> 00:49:50,496 See asi, mida nimetatakse stringi Me oleme mõnda aega kasutatud, 1114 00:49:50,496 --> 00:49:53,370 me aeglaselt ära võtta sinult ja hakata rääkima 1115 00:49:53,370 --> 00:49:55,725 midagi esoterically tuntakse paalia * 1116 00:49:55,725 --> 00:49:59,550 kuid me teeme seda kena ja esmalt ettevaatlikult, kuigi vihjeid, 1117 00:49:59,550 --> 00:50:02,730 nagu neid kutsutakse, on võimalik teha mõningaid väga halbu asju, kui kuritarvitanud, 1118 00:50:02,730 --> 00:50:06,040 vaadates veidi claymation alates meie sõber Nick Parlante Stanfordi 1119 00:50:06,040 --> 00:50:09,670 Ülikooli professor arvuti teadust, kes pani koos Selle eelvaate 1120 00:50:09,670 --> 00:50:11,075 ja mis tulemas sel kolmapäeval. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [VIDEO PLAYBACK] 1123 00:50:13,400 --> 00:50:13,900 Hei, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Ärka üles. 1126 00:50:15,780 --> 00:50:17,240 On aeg pointer lõbus. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> Mis see on? 1129 00:50:19,350 --> 00:50:21,150 Lugege vihjeid? 1130 00:50:21,150 --> 00:50:22,050 Oh, tüdruk! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END VIDEO PLAYBACK] 1133 00:50:23,730 --> 00:50:25,396 SPEAKER 1: mis ootab sind kolmapäeval. 1134 00:50:25,396 --> 00:50:26,440 Näeme siis. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO PLAYBACK] 1136 00:50:27,106 --> 00:50:30,420 Ja nüüd, Deep Mõtted, poolt Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> Miks on meil õppida C? 1139 00:50:35,900 --> 00:50:36,785 Miks mitte +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Naer] 1142 00:50:40,910 --> 00:50:42,160 >> [END VIDEO PLAYBACK]