1 00:00:00,000 --> 00:00:12,040 >> [MUZIK bermain] 2 00:00:12,040 --> 00:00:16,460 >> SPEAKER 1: Baiklah, ini adalah CS50, dan ini adalah permulaan minggu empat, 3 00:00:16,460 --> 00:00:20,420 dan seperti yang anda mungkin pernah mendengar atau membaca, dunia telah berakhir. 4 00:00:20,420 --> 00:00:23,520 Melangkah di seluruh internet mempunyai menjadi pengetahuan dan kesedaran 5 00:00:23,520 --> 00:00:27,100 daripada pepijat dalam program, yang bahasa pengaturcaraan yang dikenali sebagai Bash. 6 00:00:27,100 --> 00:00:32,729 Ini telah hebat berjenama sebagai Shellshock, atau pintu Bash ini, 7 00:00:32,729 --> 00:00:35,485 tetapi artikel seperti ini belum biasa. 8 00:00:35,485 --> 00:00:38,807 Dan sebenarnya, ramai di antara mereka membawa kenangan belakang Heartbleed, 9 00:00:38,807 --> 00:00:41,640 yang anda mungkin perasan dalam tekan kembali musim bunga yang lepas, yang 10 00:00:41,640 --> 00:00:43,980 adalah juga agak dramatik. 11 00:00:43,980 --> 00:00:47,110 Sekarang orang-orang di antara kamu di sini hari ini, berapa ramai daripada anda mempunyai, 12 00:00:47,110 --> 00:00:50,330 walaupun anda tidak faham apa itu semua kira-kira, mendengar Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Baiklah, dan bagaimana ramai daripada anda mempunyai komputer yang terdedah? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, perlu ada ini, jauh lebih tangan sehingga sekarang, atas sebab-sebab yang akan kita lihat. 17 00:01:00,250 --> 00:01:02,580 >> Mari kita lihat apa yang telah berlaku di dalam media 18 00:01:02,580 --> 00:01:05,304 dan kemudian menjelaskan sedikit di sini untuk kita dari segi teknikal. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> SPEAKER 2: pakar-pakar keselamatan mempunyai memberi amaran bahawa kecacatan yang serius boleh 21 00:01:11,250 --> 00:01:15,650 lebih kurang menjejaskan beratus-ratus berjuta-juta pengguna web di dunia. 22 00:01:15,650 --> 00:01:20,600 Jadi apa sebenarnya adalah bug yang sudah digelar Shellshock, dan apa yang ia buat? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Nah, Shellshock juga dikenali sebagai Bug Bash, perisian yang mengeksploitasi. 25 00:01:28,910 --> 00:01:33,230 Hacker menggunakan virus untuk mengimbas terdedah sistem berjalan Linux dan Unix 26 00:01:33,230 --> 00:01:36,300 sistem operasi dan kemudian menjangkiti mereka. 27 00:01:36,300 --> 00:01:38,730 Bash adalah cangkerang baris perintah. 28 00:01:38,730 --> 00:01:43,460 Ini membolehkan isu pengguna arahan untuk melancarkan program dan ciri-ciri dalam perisian 29 00:01:43,460 --> 00:01:45,250 dengan menaip teks. 30 00:01:45,250 --> 00:01:49,980 Ia biasa digunakan oleh pengaturcara, dan tidak harus dibuka kepada dunia yang lebih luas, 31 00:01:49,980 --> 00:01:51,590 walaupun Shellshock perubahan itu. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Nah, worringly, beberapa penganalisis memberi amaran ia boleh menjadi ancaman yang lebih besar, 34 00:01:57,910 --> 00:02:01,580 kerana Shellshock membolehkan lengkap kawalan mesin yang dijangkiti, 35 00:02:01,580 --> 00:02:06,030 manakala Heartbleed hanya dibenarkan hacker untuk mengintip komputer. 36 00:02:06,030 --> 00:02:09,130 Ia begitu serius, ia telah diberi 10 daripada 10 37 00:02:09,130 --> 00:02:11,900 untuk keterukan oleh National Kelemahan Pangkalan Data. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 daripada semua pelayan web adalah di risiko, termasuk beberapa komputer Mac. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Nah, pastikan anda patch sistem anda sekarang. 42 00:02:25,600 --> 00:02:29,330 Sesiapa hosting laman web berjalan sistem pengendalian terjejas 43 00:02:29,330 --> 00:02:31,800 harus mengambil tindakan secepat mungkin. 44 00:02:31,800 --> 00:02:35,390 Sesiapa yang mampu harus melihat untuk pemantauan dan web permohonan mereka 45 00:02:35,390 --> 00:02:37,355 firewall untuk melihat keluar untuk sebarang serangan. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SPEAKER 3: Perkara yang paling teruk yang boleh berlaku adalah 48 00:02:41,770 --> 00:02:45,080 bahawa seseorang akan menulis kod yang secara automatik akan pergi dan mengimbas 49 00:02:45,080 --> 00:02:48,280 internet dan akan menjejaskan semua komputer ini. 50 00:02:48,280 --> 00:02:50,710 Dan apabila mereka berbuat demikian, baik, perkara yang paling buruk yang mereka boleh lakukan 51 00:02:50,710 --> 00:02:53,300 hanya memadam segala-galanya, atau menutup laman ke bawah. 52 00:02:53,300 --> 00:02:55,360 Oleh itu, kita dapat melihat kerosakan dari sudut pandang, 53 00:02:55,360 --> 00:02:58,300 di mana kita akan mempunyai orang-orang yang berniat jahat yang hanya membuat keputusan untuk menyebabkan malapetaka 54 00:02:58,300 --> 00:03:02,534 dengan membawa sistem ke bawah atau memotong gambar, dan perkara-perkara seperti itu. 55 00:03:02,534 --> 00:03:05,200 SPEAKER 2: Ada yang mengatakan ini adalah salah satu satu yang paling sukar untuk mengukur 56 00:03:05,200 --> 00:03:08,080 bug pada tahun-tahun, dan ia mungkin mengambil masa beberapa minggu atau 57 00:03:08,080 --> 00:03:10,820 bulan untuk menentukan kesan muktamad. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> SPEAKER 1: Jadi semua itu adalah benar, tetapi yang anehnya, hampir semua 60 00:03:15,560 --> 00:03:18,330 gambaran yang anda hanya melihat, kecuali mungkin papan kekunci, 61 00:03:18,330 --> 00:03:20,930 tiada kaitan dengan bug sekalipun. 62 00:03:20,930 --> 00:03:23,960 Pelayan dan wayar dan sebagainya, ia semacam tangen berkaitan, 63 00:03:23,960 --> 00:03:27,410 tetapi pada teras ia sebenarnya cukup biasa apa yang berlaku di sini. 64 00:03:27,410 --> 00:03:30,050 Malah, saya pergi ke perkakas CS50 kami. 65 00:03:30,050 --> 00:03:32,910 Biar saya pergi ke hadapan dan memaksimumkan tetingkap terminal di sini. 66 00:03:32,910 --> 00:03:36,020 Dan kalian telah menggunakan ini, atau versi tertanam daripadanya, 67 00:03:36,020 --> 00:03:39,460 dalam gedit untuk menulis program, menaip arahan, dan sebagainya, 68 00:03:39,460 --> 00:03:43,690 dan ini adalah benar-benar, dan mempunyai kerana minggu, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Ini adalah Bourne-lagi shell, yang hanya satu cara mewah untuk mengatakan, 70 00:03:46,890 --> 00:03:50,220 ini adalah satu program yang mempunyai berkelip cepat, berkesan, 71 00:03:50,220 --> 00:03:51,970 yang duduk di sana menunggu untuk input untuk anda. 72 00:03:51,970 --> 00:03:53,920 Dan ia arahan antara muka baris yang melalui 73 00:03:53,920 --> 00:03:57,650 anda semua telah berjalan arahan dan akhirnya menyusun dan kemudian berjalan 74 00:03:57,650 --> 00:03:58,400 program. 75 00:03:58,400 --> 00:04:01,320 >> Tetapi Bash juga pengaturcaraan yang bahasa dalam erti kata yang berikut. 76 00:04:01,320 --> 00:04:05,460 Anda tahu bahawa ada perintah seperti cd dan ls dan juga dilafaz dan lain-lain, 77 00:04:05,460 --> 00:04:09,580 tetapi anda boleh menentukan arahan anda sendiri dengan melaksanakan mereka dalam Bash. 78 00:04:09,580 --> 00:04:11,420 Sekarang kita tidak akan pergi ke terperinci 79 00:04:11,420 --> 00:04:16,089 untuk Bash bahasa pengaturcaraan, tetapi tahu, misalnya, bahawa pada masa ini, 80 00:04:16,089 --> 00:04:17,607 tidak ada arahan yang dikenali sebagai "hello." 81 00:04:17,607 --> 00:04:19,440 Oleh itu, ia boleh didapati di salah satu daripada pakej-pakej ini. 82 00:04:19,440 --> 00:04:20,856 Ia tidak dipasang pada komputer saya. 83 00:04:20,856 --> 00:04:21,870 Tanya pentadbir anda. 84 00:04:21,870 --> 00:04:26,030 Tetapi jika saya mahu ke sana untuk menjadi satu program yang dikenali sebagai "hello" dalam Bash atau segera saya, 85 00:04:26,030 --> 00:04:30,810 Saya benar-benar boleh menggunakan sintaks itu agak seperti C. Ia tidak cukup yang sama, 86 00:04:30,810 --> 00:04:35,020 tetapi ia kelihatan agak serupa dengan fungsi, walaupun hilang beberapa butiran. 87 00:04:35,020 --> 00:04:38,090 Tiada apa-apa seolah-olah berlaku, tetapi sekarang saya menaip "hello," 88 00:04:38,090 --> 00:04:40,960 anda sebenarnya boleh menulis program, bukan dalam C, tidak di Jawa, 89 00:04:40,960 --> 00:04:44,280 tidak dalam pengaturcaraan lain bahasa, tetapi dalam Bash sendiri. 90 00:04:44,280 --> 00:04:47,630 >> Sekarang kunci di sini ialah saya menulis menamakan saya mahu memberikan arahan baru ini, 91 00:04:47,630 --> 00:04:50,820 dan kurungan adalah juga simbolik ini merupakan fungsi. 92 00:04:50,820 --> 00:04:54,010 Sebagai mengetepikan, anda juga boleh melakukan menyeronokkan perkara, dan sebenarnya, walaupun pada Mac OS, 93 00:04:54,010 --> 00:04:55,620 ini adalah program yang dikenali sebagai Terminal. 94 00:04:55,620 --> 00:04:58,800 Ia datang dibina ke sesiapa komputer yang mempunyai Mac di dalam bilik ini, 95 00:04:58,800 --> 00:05:03,640 dan anda boleh melakukan perkara-perkara yang sama di dalam Mac OS, tetapi anda boleh pergi lebih lebih dari itu. 96 00:05:03,640 --> 00:05:07,110 Dan ini adalah sedikit yang menyeleweng, tetapi ia adalah jenis keseronokan. 97 00:05:07,110 --> 00:05:09,715 Saya diingatkan pagi ini, apabila memikirkan ini melalui, 98 00:05:09,715 --> 00:05:13,279 daripada permainan kecil saya digunakan untuk bermain dengan salah satu daripada bekas TFS CS50 ini 99 00:05:13,279 --> 00:05:16,570 mana bila-bila masa dia akan berjalan kaki dari keyboard dengan skrin beliau dibuka, 100 00:05:16,570 --> 00:05:23,611 Saya akan melaksanakan perintah seperti this-- "bertanya khabar." 101 00:05:23,611 --> 00:05:26,610 Dan kini bila-bila masa dia datang kembali kepada beliau keyboard selepas saya dibersihkan skrin 102 00:05:26,610 --> 00:05:27,985 dan dia akan duduk, cuba untuk membuat kerja-kerja, 103 00:05:27,985 --> 00:05:29,250 menyenaraikan isi kandungan directory-- beliau 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO MAIN SEMULA] 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 Hello. 108 00:05:32,120 --> 00:05:35,030 >> SPEAKER 1: Jadi, dalam keadilan, ia tidak benar-benar "hello." 109 00:05:35,030 --> 00:05:36,894 Ia adalah sesuatu yang biasanya lebih menyerupai bahawa- 110 00:05:36,894 --> 00:05:37,560 [AUDIO MAIN SEMULA] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 SPEAKER 1: --that saya would-- supaya komputer akan 113 00:05:39,320 --> 00:05:42,170 bersumpah kepadanya bila-bila masa dia sebenarnya duduk di papan kekunci itu. 114 00:05:42,170 --> 00:05:46,265 Dan dengan cepat dia digambarkan tidak meninggalkan skrin beliau dibuka kuncinya. 115 00:05:46,265 --> 00:05:48,730 Tetapi ini mencadangkan jenis yang keseronokan bodoh yang anda 116 00:05:48,730 --> 00:05:50,210 boleh mempunyai dengan sesuatu seperti Bash. 117 00:05:50,210 --> 00:05:52,770 Tetapi ia lebih sedikit serius, untuk memastikan, daripada itu. 118 00:05:52,770 --> 00:05:57,235 Dan sebenarnya, ini adalah salah satu daripada pepijat yang paling berbahaya dan tahan lama 119 00:05:57,235 --> 00:05:58,860 yang benar-benar melanda dunia global. 120 00:05:58,860 --> 00:06:02,060 Pepijat ini telah wujud untuk beberapa 20 tahun, 121 00:06:02,060 --> 00:06:05,780 dan anda akan melanda dalam hanya masa oleh kesederhanaan relatif. 122 00:06:05,780 --> 00:06:07,990 >> Jadi ini adalah wakil perintah bahawa jika anda 123 00:06:07,990 --> 00:06:10,448 memiliki Mac, secara literal sekarang apabila anda mempunyai penutup terbuka, 124 00:06:10,448 --> 00:06:12,940 anda boleh cuba menaip ke dalam yang program yang dikenali sebagai Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminal adalah di bawah Aplikasi Utilities-- 126 00:06:15,410 --> 00:06:18,790 untuk sekali, pengguna Windows tidak perlu bimbang tentang threat-- tertentu 127 00:06:18,790 --> 00:06:22,310 tetapi orang-orang di antara kamu dengan Mac boleh menaip ini ke dalam tetingkap seperti saya akan lakukan di sini, 128 00:06:22,310 --> 00:06:24,210 dan jika anda menaip itu ke dalam program ini 129 00:06:24,210 --> 00:06:28,830 dipanggil Terminal, seperti yang saya akan lakukan sekarang, jika anda melihat perkataan "terdedah," 130 00:06:28,830 --> 00:06:32,200 komputer anda terdedah kepada eksploitasi. 131 00:06:32,200 --> 00:06:33,850 >> Sekarang apakah yang benar-benar bermakna? 132 00:06:33,850 --> 00:06:35,870 Dan ini adalah diakui beberapa sintaks cukup gila, 133 00:06:35,870 --> 00:06:39,050 tetapi mari kita sekurang-kurangnya menarik keluar beberapa aspek yang menarik. 134 00:06:39,050 --> 00:06:42,567 Jadi ada beberapa sintaks yang kelihatan yang biasa sedikit, sekurang-kurangnya dari C 135 00:06:42,567 --> 00:06:43,950 dan pengaturcaraan amnya. 136 00:06:43,950 --> 00:06:47,550 Saya melihat beberapa kurungan, koma bertitik, pendakap kerinting, dan apa-apa, 137 00:06:47,550 --> 00:06:50,820 tetapi ternyata bahawa ini perkara bodoh di sini berwarna kuning 138 00:06:50,820 --> 00:06:53,580 pada asasnya fungsi yang melakukan apa-apa. 139 00:06:53,580 --> 00:06:57,840 Cara kolon berbuat apa-apa, dan koma bernoktah bermakna berhenti melakukan apa-apa. 140 00:06:57,840 --> 00:07:00,250 Jadi di dalam ini pendakap kerinting, hakikat 141 00:07:00,250 --> 00:07:02,440 yang saya ada yang sama menandatangani di sebelah kiri, ini 142 00:07:02,440 --> 00:07:05,500 pada dasarnya mewujudkan arahan, atau pembolehubah, 143 00:07:05,500 --> 00:07:09,520 dipanggil x, dan memberikan ia yang sedikit kuning kod sana. 144 00:07:09,520 --> 00:07:14,040 Itu boleh menjadi sesuatu seperti "echo hello "atau" mengatakan bip "atau sesuatu 145 00:07:14,040 --> 00:07:15,120 sewaktu dengannya. 146 00:07:15,120 --> 00:07:17,780 Tetapi notis jika mata anda bersiar-siar lagi ke kanan, 147 00:07:17,780 --> 00:07:22,150 ada lagi ke baris ini daripada hanya akhir koma bernoktah itu. 148 00:07:22,150 --> 00:07:25,160 "Echo terdedah," dan kemudian di luar yang ada lebih. 149 00:07:25,160 --> 00:07:26,530 Satu lagi koma bertitik, bash -c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Jadi cerita panjang pendek, baris ini kod adalah 152 00:07:34,050 --> 00:07:36,660 mencukupi bagi memaksa komputer itu 153 00:07:36,660 --> 00:07:39,830 terdedah kepada melakukan sesuatu yang yang anda mahu ia lakukan, 154 00:07:39,830 --> 00:07:44,290 kerana ada bug dalam Bash mana walaupun Bash sepatutnya berhenti 155 00:07:44,290 --> 00:07:48,980 membaca baris arahan betul di sana selepas teks yang kuning, 156 00:07:48,980 --> 00:07:52,520 untuk bug lama tahun 20-plus, Bash sebenarnya telah membaca 157 00:07:52,520 --> 00:07:56,780 di luar koma bernoktah itu dan cantik banyak melakukan apa yang diceritakan. 158 00:07:56,780 --> 00:07:59,070 >> Jadi apa implikasi itu akhirnya? 159 00:07:59,070 --> 00:08:01,340 Saya hanya berkata "echo hello" atau "echo terdedah," 160 00:08:01,340 --> 00:08:05,449 tetapi bagaimana jika anda melakukan sesuatu yang sebenarnya berniat jahat, seperti rm -rf *, 161 00:08:05,449 --> 00:08:07,240 yang anda mungkin tidak pernah ditaip sebelum ini, 162 00:08:07,240 --> 00:08:08,920 dan terus-terang anda mungkin sepatutnya tidak terlalu lama lagi, 163 00:08:08,920 --> 00:08:10,700 kerana anda boleh melakukan banyak kerosakan dengannya. 164 00:08:10,700 --> 00:08:11,210 Mengapa? 165 00:08:11,210 --> 00:08:12,990 rm melakukan apa, sudah tentu? 166 00:08:12,990 --> 00:08:14,270 Menghilangkan. 167 00:08:14,270 --> 00:08:15,930 * Bermaksud apa? 168 00:08:15,930 --> 00:08:16,430 Semua. 169 00:08:16,430 --> 00:08:18,180 Jadi ini adalah apa yang dipanggil kad liar, jadi ia bermakna 170 00:08:18,180 --> 00:08:20,410 menghilangkan segala direktori semasa. 171 00:08:20,410 --> 00:08:23,379 r berlaku bermakna rekursif, yang bererti jika apa yang anda memotong 172 00:08:23,379 --> 00:08:26,420 adalah direktori, dan dalam terdapat adalah fail lain dan direktori lain, 173 00:08:26,420 --> 00:08:28,950 secara rekursif menyelam ke sana dan memadam semua itu. 174 00:08:28,950 --> 00:08:31,040 Dan -f adalah yang paling teruk daripada mereka semua. 175 00:08:31,040 --> 00:08:32,580 Sesiapa tahu apa-f bermakna di sini? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Berkuat kuasa. 178 00:08:34,360 --> 00:08:37,830 Jadi cara memaksa, walaupun jika ini adalah idea yang buruk, 179 00:08:37,830 --> 00:08:40,939 melakukannya tanpa mendorong saya untuk pengesahan lanjut. 180 00:08:40,939 --> 00:08:43,230 Jadi, anda tahu, kita ketawa ini, tetapi terus-terang, saya mungkin 181 00:08:43,230 --> 00:08:44,972 menaip ini beberapa kali sehari, kerana hakikatnya 182 00:08:44,972 --> 00:08:47,210 ia adalah cara paling cepat untuk memadam sejumlah besar barangan. 183 00:08:47,210 --> 00:08:48,590 Tetapi saya telah melakukan beberapa kerosakan. 184 00:08:48,590 --> 00:08:53,100 >> Tetapi jika anda adalah untuk menipu komputer dalam menentukan beberapa pembolehubah bodoh 185 00:08:53,100 --> 00:08:56,810 atau fungsi dipanggil x, tetapi kemudian menipu komputer dalam melaksanakan 186 00:08:56,810 --> 00:09:00,030 melangkaui sempadan yang fungsi, di luar koma bertitik itu, 187 00:09:00,030 --> 00:09:04,430 anda memang boleh menipu komputer dalam melaksanakan sesuatu seperti rm -rf 188 00:09:04,430 --> 00:09:07,810 E-mel atau perintah yang atau arahan Copy. 189 00:09:07,810 --> 00:09:11,400 Apa-apa sahaja yang anda benar-benar boleh lakukan dengan komputer, sama ada ia memotong fail, 190 00:09:11,400 --> 00:09:15,350 mewujudkan fail, spam seseorang, menyerang beberapa pelayan dari jauh, 191 00:09:15,350 --> 00:09:17,190 jika anda boleh meluahkan ia dengan arahan, anda 192 00:09:17,190 --> 00:09:19,120 boleh menipu komputer untuk melakukan itu. 193 00:09:19,120 --> 00:09:21,510 >> Sekarang apa yang satu contoh bagaimana anda boleh melakukan ini? 194 00:09:21,510 --> 00:09:24,300 Nah, terdapat banyak komputer pada Bash internet berjalan. 195 00:09:24,300 --> 00:09:26,390 Semua pengguna kami Mac di antara mereka. 196 00:09:26,390 --> 00:09:30,390 Banyak pelayan Linux antara mereka juga, dan pelayan Unix. 197 00:09:30,390 --> 00:09:32,630 Windows lagi mendapat agak luar buku itu 198 00:09:32,630 --> 00:09:34,590 kecuali jika anda telah dipasang perisian khas. 199 00:09:34,590 --> 00:09:37,130 Sekarang banyak pelayan, untuk contoh, pelayan web berlari, 200 00:09:37,130 --> 00:09:39,840 dan sebenarnya Linux mungkin yang sistem operasi yang paling popular 201 00:09:39,840 --> 00:09:43,060 berjalan pada komputer di internet yang sedang berkhidmat menggunakan laman web. 202 00:09:43,060 --> 00:09:44,910 Sekarang seperti yang kita akan lihat nanti pada semester, apabila 203 00:09:44,910 --> 00:09:48,470 anda menghantar permintaan dari Chrome browser-- anda, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- ke pelayan jauh, 205 00:09:50,790 --> 00:09:53,730 ternyata bahawa walaupun anda hanya ditaip www.example.com, 206 00:09:53,730 --> 00:09:59,590 pelayar anda menghantar mesej itu sedikit lebih sukar difahami, seperti ini. 207 00:09:59,590 --> 00:10:01,239 >> Tetapi notis sesuatu yang sedikit pelik. 208 00:10:01,239 --> 00:10:03,030 Yang pertama dua baris Saya tidak pernah dilihat sebelum ini, 209 00:10:03,030 --> 00:10:04,904 tetapi mereka tidak melihat terutamanya mengancam. 210 00:10:04,904 --> 00:10:08,030 Tetapi melihat apa yang saya dicuri untuk baris ketiga di sini. 211 00:10:08,030 --> 00:10:13,390 Jika lelaki yang tidak baik adalah untuk menghantar mesej seperti ini dari komputer beliau 212 00:10:13,390 --> 00:10:17,270 kepada Mac terdedah atau server Linux terdedah, 213 00:10:17,270 --> 00:10:21,580 yang anehnya Bash itu, yang mudah sedikit arahan segera, 214 00:10:21,580 --> 00:10:27,450 adalah kehadiran dan sering digunakan untuk melaksanakan dasarnya 215 00:10:27,450 --> 00:10:30,020 kandungan sesuatu mesej yang diterima. 216 00:10:30,020 --> 00:10:33,490 Dan berdasarkan logik tersebut, anda boleh menipu pelayan web, oleh itu, 217 00:10:33,490 --> 00:10:36,370 dengan menghantar sesuatu seperti User-Agent, yang biasanya 218 00:10:36,370 --> 00:10:38,300 sepatutnya untuk mengatakan nama pelayar anda. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, ini 220 00:10:42,420 --> 00:10:44,590 hanyalah penyemak imbas anda cara mengenal pasti sendiri. 221 00:10:44,590 --> 00:10:46,605 Tetapi jika lelaki yang tidak baik sangat bijak berkata, mm mm, saya 222 00:10:46,605 --> 00:10:47,930 tidak akan memberitahu anda apa yang pelayar saya adalah, 223 00:10:47,930 --> 00:10:50,888 Saya bukannya akan menghantar anda ini samar-cari perkara dengan -rf rm 224 00:10:50,888 --> 00:10:55,840 * Di dalamnya, anda dapat menipu yang pelayan web terdedah di internet 225 00:10:55,840 --> 00:10:59,055 dalam melaksanakan apa yang di sana untuk memadam semua fail. 226 00:10:59,055 --> 00:11:00,930 Dan terus terang, itu bukan walaupun yang paling teruk daripada itu. 227 00:11:00,930 --> 00:11:01,763 Anda boleh melakukan apa-apa. 228 00:11:01,763 --> 00:11:04,480 Anda boleh memulakan teragih penafian perkhidmatan serangan 229 00:11:04,480 --> 00:11:07,030 jika anda menghantar mesej ini kepada tandan keseluruhan pelayan web 230 00:11:07,030 --> 00:11:10,256 dan kemudian mempunyai mereka semua turun, untuk contoh, pada pelayan Harvard.edu, 231 00:11:10,256 --> 00:11:12,130 dan anda boleh menyusun bang palang pintu keluar dari mereka 232 00:11:12,130 --> 00:11:15,490 oleh trafik rangkaian itu adalah sebaliknya dicetuskan oleh lelaki yang buruk ini. 233 00:11:15,490 --> 00:11:18,760 >> Jadi, cerita panjang pendek, hampir semua orang di dalam bilik ini yang memiliki sebuah Mac 234 00:11:18,760 --> 00:11:20,240 terdedah kepada ini. 235 00:11:20,240 --> 00:11:24,100 Lapisan perak adalah bahawa melainkan jika anda yang menjalankan pelayan web pada komputer riba anda, 236 00:11:24,100 --> 00:11:27,780 dan melainkan jika anda benar-benar dikonfigurasikan untuk membolehkan sesuatu seperti SSH ke dalamnya, 237 00:11:27,780 --> 00:11:28,670 anda benar-benar selamat. 238 00:11:28,670 --> 00:11:31,710 Ia terdedah, tetapi tidak ada satu cuba untuk mendapatkan ke dalam laptop anda, 239 00:11:31,710 --> 00:11:33,290 supaya anda boleh semacam yakin. 240 00:11:33,290 --> 00:11:36,210 Walau bagaimanapun, Apple tidak lama lagi akan menjadi mengemaskini satu penyelesaian untuk ini. 241 00:11:36,210 --> 00:11:39,660 Dunia Linux telah dikeluarkan beberapa pembaikan untuk Fedora dan Ubuntu 242 00:11:39,660 --> 00:11:43,790 dan versi lain untuk Linux, dan sesungguhnya jika anda menjalankan kemas kini 50 dalam perkakas, 243 00:11:43,790 --> 00:11:45,930 walaupun itu juga akan dikemaskini dan diperbetulkan. 244 00:11:45,930 --> 00:11:47,764 Tetapi itu juga tidak mempunyai benar-benar telah terdedah, 245 00:11:47,764 --> 00:11:49,804 kerana melainkan anda mempunyai tinkered dengan perkakas ini 246 00:11:49,804 --> 00:11:52,770 dan membuat komputer riba anda secara terbuka boleh diakses di internet, yang tidak 247 00:11:52,770 --> 00:11:54,910 secara lalai, anda mempunyai sebenarnya telah denda kerana 248 00:11:54,910 --> 00:11:56,890 daripada firewalling dan teknik-teknik lain. 249 00:11:56,890 --> 00:12:01,000 >> Tetapi ia adalah contoh melampau pepijat bahawa kami telah hidup selama beribu-20 untuk 250 00:12:01,000 --> 00:12:04,050 tahun, dan yang tahu jika seseorang selama ini telah diketahui tentang ia? 251 00:12:04,050 --> 00:12:06,300 Dan sebenarnya, ini adalah salah satu cabaran asas 252 00:12:06,300 --> 00:12:08,690 bahawa kita akan lihat nanti dalam semester mengenai keselamatan, 253 00:12:08,690 --> 00:12:13,020 ialah seperti di dunia sebenar, lelaki yang baik adalah di dalam keadaan itu. 254 00:12:13,020 --> 00:12:16,500 Untuk menjaga orang jahat keluar, kita perlu memastikan bahawa setiap pintu dikunci, 255 00:12:16,500 --> 00:12:20,340 bahawa setiap tetingkap adalah selamat, yang setiap pintu masuk ke dalam rumah 256 00:12:20,340 --> 00:12:21,980 adalah selamat untuk menjaga orang-orang jahat keluar. 257 00:12:21,980 --> 00:12:26,870 Tetapi apakah lelaki yang buruk perlu lakukan untuk benar-benar bertolak ansur rumah anda 258 00:12:26,870 --> 00:12:28,200 dan mencuri dari anda? 259 00:12:28,200 --> 00:12:32,574 Dia hanya perlu mencari satu unlocked pintu, satu tingkap yang pecah, atau sesuatu 260 00:12:32,574 --> 00:12:35,240 sepanjang garis, dan ia adalah Perkara yang sama dalam keselamatan komputer. 261 00:12:35,240 --> 00:12:37,660 Kita boleh menulis berjuta-juta baris kod pengaturcaraan 262 00:12:37,660 --> 00:12:40,570 dan menghabiskan beratus-ratus atau beribu-ribu jam cuba untuk mendapatkan ia betul, 263 00:12:40,570 --> 00:12:43,370 tetapi jika anda membuat hanya satu kesilapan dalam kebenaran, 264 00:12:43,370 --> 00:12:47,030 anda boleh meletakkan keseluruhan sistem dan sesungguhnya dalam kes ini, seluruh internet 265 00:12:47,030 --> 00:12:48,660 dan dunia berisiko. 266 00:12:48,660 --> 00:12:51,950 >> Jadi, jika anda ingin mengetahui lebih lanjut kira-kira ini, pergi ke URL ini di sini. 267 00:12:51,950 --> 00:12:54,450 Tidak ada keperluan untuk tindakan malam ini melainkan jika anda 268 00:12:54,450 --> 00:12:57,116 di kalangan mereka yang lebih selesa telah berjalan web anda sendiri 269 00:12:57,116 --> 00:12:59,810 pelayan, di mana anda harus, sebenarnya, mengemas kini perisian anda. 270 00:12:59,810 --> 00:13:03,244 >> Dan ini juga adalah gelaran ucapan, dan kini kertas kerja, 271 00:13:03,244 --> 00:13:05,410 bahawa kami telah dikaitkan kepada laman web kursus untuk hari ini. 272 00:13:05,410 --> 00:13:07,600 Ia adalah oleh rakan-rakan yang bernama Ken Thompson, yang 273 00:13:07,600 --> 00:13:10,120 telah menerima yang sangat terkenal anugerah dalam bidang sains komputer, 274 00:13:10,120 --> 00:13:13,495 dan dia memberikan ucapan ini beberapa tahun lalu, pada asasnya ini topik yang sama. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Meminta orang soalan, sekiranya anda benar-benar 277 00:13:20,520 --> 00:13:23,480 amanah, akhirnya, perisian yang anda telah diberikan? 278 00:13:23,480 --> 00:13:26,100 Sebagai contoh, kita semua mempunyai telah menulis program, 279 00:13:26,100 --> 00:13:27,820 dan kami telah menyusun mereka dengan bunyi berdering. 280 00:13:27,820 --> 00:13:31,830 Dan untuk pengetahuan anda, anda telah ditulis mana-mana program untuk CS50 di mana ada 281 00:13:31,830 --> 00:13:35,310 pintu belakang macam, ada cara yang bahawa lelaki yang tidak baik, jika berjalan program anda, 282 00:13:35,310 --> 00:13:37,410 boleh mengambil alih komputer anda? 283 00:13:37,410 --> 00:13:38,310 Mungkin tidak, bukan? 284 00:13:38,310 --> 00:13:40,180 Mario, dan tamak, dan Kredit. 285 00:13:40,180 --> 00:13:41,680 Ini semua adalah program yang cukup kecil. 286 00:13:41,680 --> 00:13:43,910 Anda harus menjadi cantik buruk jika anda benar-benar 287 00:13:43,910 --> 00:13:47,310 dibuat keseluruhan komputer anda terdedah selepas menulis 10 atau 20 baris kod, 288 00:13:47,310 --> 00:13:49,690 atau sekurang-kurangnya tidak sedar beberapa implikasi keselamatan. 289 00:13:49,690 --> 00:13:52,023 Sekarang saya mengatakan bahawa dgn jenaka, tetapi kita akan lihat hari ini 290 00:13:52,023 --> 00:13:54,600 dan minggu ini ia sebenarnya benar-benar, benar-benar mudah 291 00:13:54,600 --> 00:13:57,980 menjadi lapuk dan membuat lebih program-program pendek yang mudah terjejas. 292 00:13:57,980 --> 00:14:02,880 >> Tetapi untuk sekarang, sekurang-kurangnya, menyedari bahawa soalan yang ditanya di sini 293 00:14:02,880 --> 00:14:04,850 adalah kira-kira bunyi berdering dalam pengkompil. 294 00:14:04,850 --> 00:14:08,360 Mengapa kami telah mempercayai dilafaz untuk lepas dua atau tiga minggu? 295 00:14:08,360 --> 00:14:12,650 Siapa yang mengatakan bahawa sesiapa yang menulis dilafaz tidak mempunyai "jika" keadaan di sana 296 00:14:12,650 --> 00:14:17,680 yang pada asasnya disuntik beberapa sifar dan orang-orang ke dalam setiap program itu menyusun 297 00:14:17,680 --> 00:14:21,180 yang akan membiarkan dia atau akses beliau komputer anda apabila anda tidur 298 00:14:21,180 --> 00:14:23,580 dan penutup komputer riba anda terbuka dan komputer anda sedang berjalan? 299 00:14:23,580 --> 00:14:24,080 Betul? 300 00:14:24,080 --> 00:14:28,350 Kami mempunyai ini jenis sistem penghormatan hak kini di mana kita percaya bahawa dilafaz adalah legit. 301 00:14:28,350 --> 00:14:30,000 Anda percaya bahawa perkakas ini legit. 302 00:14:30,000 --> 00:14:34,430 Anda percaya bahawa harfiah setiap program pada Mac atau PC anda boleh dipercayai. 303 00:14:34,430 --> 00:14:37,510 Dan sebagai pepijat ini mudah mencadangkan, walaupun ia bukan berniat jahat, 304 00:14:37,510 --> 00:14:40,580 yang sama sekali tidak mungkin kes itu. 305 00:14:40,580 --> 00:14:42,350 >> Jadi, anda perlu takut sebagai neraka. 306 00:14:42,350 --> 00:14:45,560 Terus terang, tidak ada yang mudah penyelesaian kepada ini selain 307 00:14:45,560 --> 00:14:48,185 daripada semacam kesedaran masyarakat kerumitan yang semakin meningkat 308 00:14:48,185 --> 00:14:50,310 bahawa kita membina di atas sistem komputer kita, 309 00:14:50,310 --> 00:14:53,740 dan bagaimana semakin terdedah kita dengan baik mungkin. 310 00:14:53,740 --> 00:14:55,570 >> Kini dengan itu berkata, Breakout. 311 00:14:55,570 --> 00:14:59,889 Jadi Breakout masalah menetapkan tiga, dan Breakout adalah permainan dari tadi 312 00:14:59,889 --> 00:15:02,180 anda mungkin ingat, tetapi bagi kita dalam masalah menetapkan tiga, 313 00:15:02,180 --> 00:15:04,450 ia membolehkan kita untuk mengambil perkara menyandarkan takuk 314 00:15:04,450 --> 00:15:08,880 supaya apabila kita menulis program, walaupun dalam tetingkap Terminal seperti ini, 315 00:15:08,880 --> 00:15:14,670 kita boleh berlari, akhirnya, program grafik tidak 316 00:15:14,670 --> 00:15:17,800 tidak seperti mereka yang kita mempunyai akses ke dalam Scratch. 317 00:15:17,800 --> 00:15:20,910 Jadi ini adalah kakitangan pelaksanaan Breakout, 318 00:15:20,910 --> 00:15:23,930 yang hanya ini bata pecah permainan yang anda bergerak dayung anda kembali 319 00:15:23,930 --> 00:15:27,590 dan sebagainya, dan anda memukul bola terhadap orang-orang bata berwarna sehingga atas. 320 00:15:27,590 --> 00:15:30,020 Jadi ini membawa kita semacam kembali ke tempat 321 00:15:30,020 --> 00:15:33,180 kami dapat menjadi sangat cepat dengan Awal, dan kini dengan C, 322 00:15:33,180 --> 00:15:35,800 melaksanakan sendiri antara muka pengguna grafik. 323 00:15:35,800 --> 00:15:38,960 >> Tetapi lebih daripada itu, ini set masalah mewakili pertama 324 00:15:38,960 --> 00:15:41,000 di mana kami memberikan anda sekumpulan kod. 325 00:15:41,000 --> 00:15:43,940 Dan sebenarnya, saya membawa jelas perhatian kepada ini, kerana terutamanya 326 00:15:43,940 --> 00:15:47,090 untuk mereka yang kurang selesa, ini masalah yang dinyatakan, sekurang-kurangnya pada pandangan pertama, 327 00:15:47,090 --> 00:15:49,170 akan rasa seperti kami telah mengambil ia sehingga takuk a. 328 00:15:49,170 --> 00:15:51,540 Kerana kita telah memberikan anda, untuk beberapa carian 329 00:15:51,540 --> 00:15:54,930 dan masalah dalam sorting Serangga ini, sekumpulan kod yang kita menulis, 330 00:15:54,930 --> 00:15:56,680 dan beberapa komen yang mengatakan "lakukan," 331 00:15:56,680 --> 00:15:58,221 di mana anda perlu mengisi tempat kosong. 332 00:15:58,221 --> 00:16:00,020 Jadi tidak terlalu menakutkan, tetapi ia adalah kali pertama 333 00:16:00,020 --> 00:16:03,370 kami menyampaikan anda kod yang anda perlu pertama membaca, memahami, dan kemudian menambah 334 00:16:03,370 --> 00:16:04,290 dan menyiapkannya. 335 00:16:04,290 --> 00:16:05,940 >> Dan kemudian dengan Breakout, kita akan melakukan perkara yang sama, 336 00:16:05,940 --> 00:16:08,740 memberikan anda beberapa dozen lebih talian kod itu, terus-terang, memberi anda 337 00:16:08,740 --> 00:16:11,490 banyak rangka kerja bagi permainan tetapi berhenti pendek 338 00:16:11,490 --> 00:16:14,304 melaksanakan batu bata dan bola dan dayung, 339 00:16:14,304 --> 00:16:15,970 tetapi kita melaksanakan beberapa ciri-ciri lain. 340 00:16:15,970 --> 00:16:18,280 Dan yang pada pandangan pertama, sekali lagi, terutamanya jika kurang selesa, 341 00:16:18,280 --> 00:16:21,480 mungkin kelihatan terutamanya menakutkan dan anda fikir ada begitu banyak fungsi-fungsi baru 342 00:16:21,480 --> 00:16:24,070 anda perlu untuk membalut fikiran anda sekitar, dan yang benar. 343 00:16:24,070 --> 00:16:26,281 Tetapi perlu diingat, itu agak seperti Scratch. 344 00:16:26,281 --> 00:16:28,780 Kemungkinan besar anda tidak menggunakan semua kepingan teka-teki dalam Scratch. 345 00:16:28,780 --> 00:16:31,120 Kemungkinan adalah anda tidak peduli untuk membalut fikiran anda di seluruh semua mereka 346 00:16:31,120 --> 00:16:33,617 kerana semua itu telah mengambil satu pandangan cepat untuk memahami, oh, 347 00:16:33,617 --> 00:16:35,450 itulah yang boleh saya lakukan dengan sekeping teka-teki. 348 00:16:35,450 --> 00:16:38,260 Dan memang, dalam masalah yang dinyatakan 3 spec, kami akan menunjukkan anda 349 00:16:38,260 --> 00:16:41,370 pada dokumentasi yang akan memperkenalkan anda kepada beberapa fungsi baru, 350 00:16:41,370 --> 00:16:43,570 dan akhirnya pengaturcaraan membina anda gunakan. 351 00:16:43,570 --> 00:16:47,610 Syarat, gelung, pembolehubah, dan fungsi 352 00:16:47,610 --> 00:16:50,720 akan sama dengan apa yang kita lihat setakat ini. 353 00:16:50,720 --> 00:16:53,560 >> Jadi sesungguhnya, apa yang kita akan memberikan anda beberapa contoh kod yang 354 00:16:53,560 --> 00:16:56,110 membolehkan anda membuat tetingkap yang tidak kelihatan tidak seperti ini, 355 00:16:56,110 --> 00:16:59,540 dan akhirnya mengubahnya menjadi sesuatu yang agak seperti ini. 356 00:16:59,540 --> 00:17:02,250 Jadi mengambil kesempatan daripada CS50, membincangkan waktu pejabat dan banyak lagi, 357 00:17:02,250 --> 00:17:05,290 dan mengambil keselesaan dalam fakta bahawa jumlah kod anda perlu menulis 358 00:17:05,290 --> 00:17:06,760 sebenarnya tidak semua yang banyak. 359 00:17:06,760 --> 00:17:10,359 Cabaran pertama adalah hanya untuk acclimate diri anda dengan beberapa kod yang kami tulis. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Apa-apa soalan mengenai pset3, Shellshock, atau sebaliknya? 362 00:17:15,810 --> 00:17:19,226 >> PENONTON: Ia seolah-olah seperti melalui dengan Breakout 363 00:17:19,226 --> 00:17:22,154 bahawa kod adalah hampir gaya berorientasikan objek, 364 00:17:22,154 --> 00:17:24,675 tetapi saya fikir C adalah objek berorientasikan program. 365 00:17:24,675 --> 00:17:26,050 SPEAKER 1: Satu soalan yang sangat baik. 366 00:17:26,050 --> 00:17:28,258 Jadi dalam mencari melalui kod pengedaran, kod 367 00:17:28,258 --> 00:17:30,180 kita menulis untuk pset3, bagi mereka yang biasa, ia 368 00:17:30,180 --> 00:17:32,230 kelihatan seperti ia adalah satu sedikit objek berorientasikan. 369 00:17:32,230 --> 00:17:33,800 Jawapan ringkasnya adalah, ia adalah. 370 00:17:33,800 --> 00:17:38,130 Ia merupakan satu anggaran bagaimana anda mungkin melakukan kod berorientasikan objek menggunakan 371 00:17:38,130 --> 00:17:41,850 bahasa seperti C, tetapi ia adalah masih akhirnya prosedur. 372 00:17:41,850 --> 00:17:44,900 Tiada kaedah di dalam pembolehubah, kerana anda akan melihat. 373 00:17:44,900 --> 00:17:46,180 Tetapi ia mengingatkan itu. 374 00:17:46,180 --> 00:17:48,780 Dan kita akan melihat ciri-ciri yang sekali lagi apabila kita mencapai PHP dan JavaScript 375 00:17:48,780 --> 00:17:49,946 ke arah akhir semester. 376 00:17:49,946 --> 00:17:53,667 Tetapi untuk sekarang, menganggapnya sebagai tanda-tanda bahawa apa yang akan datang. 377 00:17:53,667 --> 00:17:54,250 Soalan yang baik. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Baiklah. 380 00:17:56,550 --> 00:17:59,730 Jadi bergabung jenis adalah bagaimana kita perkara kiri masa lalu. 381 00:17:59,730 --> 00:18:03,250 Dan bergabung bentuk adalah sejuk dalam rasa bahawa ia adalah begitu banyak lebih cepat, 382 00:18:03,250 --> 00:18:07,100 sekurang-kurangnya berdasarkan ujian sepintas kita lakukan minggu lepas, daripada, katakan, gelembung 383 00:18:07,100 --> 00:18:08,710 jenis, jenis pemilihan, jenis sisipan. 384 00:18:08,710 --> 00:18:11,780 Dan apa yang terlalu kemas hanya bagaimana ringkas dan bersih 385 00:18:11,780 --> 00:18:12,810 anda boleh meluahkan ia. 386 00:18:12,810 --> 00:18:15,840 Dan apa yang kita katakan ia adalah atas terikat pada masa yang berjalan di merge 387 00:18:15,840 --> 00:18:16,340 menyusun? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Yeah? 390 00:18:18,495 --> 00:18:19,360 >> PENONTON: n log n? 391 00:18:19,360 --> 00:18:20,819 >> SPEAKER 1: n log n, betul. n log n. 392 00:18:20,819 --> 00:18:23,776 Dan kita akan kembali kepada apa yang benar-benar bermakna atau di mana yang datang dari, 393 00:18:23,776 --> 00:18:25,570 tetapi ini adalah lebih baik daripada masa yang berlari 394 00:18:25,570 --> 00:18:28,440 yang kita lihat untuk gelembung pemilihan dan jenis sisipan? 395 00:18:28,440 --> 00:18:30,610 Jadi n kuasa dua. n kuasa dua adalah lebih besar daripada ini, 396 00:18:30,610 --> 00:18:34,650 dan walaupun ia tidak cukup jelas, tahu bahawa log n lebih kecil daripada n, 397 00:18:34,650 --> 00:18:36,910 jadi jika anda n kali sesuatu yang lebih kecil daripada n, 398 00:18:36,910 --> 00:18:38,680 ia akan menjadi kurang daripada n kuasa dua. 399 00:18:38,680 --> 00:18:40,130 Ia sedikit gerak hati di sana. 400 00:18:40,130 --> 00:18:42,190 Tetapi kita membayar harga untuk ini. 401 00:18:42,190 --> 00:18:47,000 Ia adalah lebih cepat, tetapi tema yang bermula muncul minggu lepas adalah tradeoff ini. 402 00:18:47,000 --> 00:18:49,804 Saya mendapat prestasi yang lebih baik masa yang bijak, tetapi apa yang 403 00:18:49,804 --> 00:18:52,470 adakah saya perlu menghabiskan di pihak yang lain tangan, untuk mencapainya? 404 00:18:52,470 --> 00:18:53,591 >> PENONTON: Memori. 405 00:18:53,591 --> 00:18:54,465 SPEAKER 1: Katakanlah lagi? 406 00:18:54,465 --> 00:18:55,173 PENONTON: Memori. 407 00:18:55,173 --> 00:18:57,040 SPEAKER 1: memori, atau ruang amnya. 408 00:18:57,040 --> 00:18:59,040 Dan bukan super jelas dengan manusia kita, 409 00:18:59,040 --> 00:19:02,240 tetapi ingat bahawa sukarelawan kami telah melangkah ke hadapan dan melangkah 410 00:19:02,240 --> 00:19:04,780 kembali seolah-olah ada array di sini, dan seolah-olah ada 411 00:19:04,780 --> 00:19:07,130 pelbagai kedua di sini bahawa mereka boleh menggunakan, kerana kita 412 00:19:07,130 --> 00:19:09,080 kurang lebih diperlukan untuk menggabungkan mereka semua. 413 00:19:09,080 --> 00:19:11,480 Kita tidak boleh hanya menukar mereka di tempat. 414 00:19:11,480 --> 00:19:13,800 Jadi bergabung jenis leverage adalah lebih banyak ruang, yang 415 00:19:13,800 --> 00:19:15,620 kita tidak perlu dengan algoritma yang lain, 416 00:19:15,620 --> 00:19:17,410 tetapi terbalik adalah bahawa itu lebih cepat. 417 00:19:17,410 --> 00:19:20,780 Dan terus-terang, di dalam ruang dunia sebenar RAM ini days--, cakera keras space-- 418 00:19:20,780 --> 00:19:25,030 adalah agak murah, dan sebagainya itu tidak semestinya sesuatu yang buruk. 419 00:19:25,030 --> 00:19:28,320 >> Jadi mari kita lihat yang cepat, sedikit lebih teratur, apa yang kita lakukan 420 00:19:28,320 --> 00:19:30,220 dan mengapa kita berkata ia n log n. 421 00:19:30,220 --> 00:19:33,260 Jadi di sini adalah lapan nombor dan lapan sukarelawan kita mempunyai masa lalu. 422 00:19:33,260 --> 00:19:35,718 Dan perkara pertama yang Merge Susun memberitahu kami lakukan ialah apa? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 PENONTON: Jurang dua. 425 00:19:38,010 --> 00:19:38,663 SPEAKER 1: Katakanlah lagi? 426 00:19:38,663 --> 00:19:39,650 PENONTON: Jurang dua. 427 00:19:39,650 --> 00:19:40,610 SPEAKER 1: Jurang dalam dua, betul. 428 00:19:40,610 --> 00:19:42,818 Ini adalah sangat mengingatkan buku telefon, jurang 429 00:19:42,818 --> 00:19:44,220 dan menakluk amnya. 430 00:19:44,220 --> 00:19:45,640 Oleh itu, kita melihat separuh kiri. 431 00:19:45,640 --> 00:19:48,700 Kemudian sebaik sahaja kami berkata, jenis separuh di sebelah kiri unsur-unsur, 432 00:19:48,700 --> 00:19:49,690 apakah yang kita seterusnya katakan? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Menyusun separuh kiri kiri separuh, yang membolehkan kami, 435 00:19:54,860 --> 00:19:57,570 selepas membahagikan dalam dua, memberi tumpuan kepada empat dan dua. 436 00:19:57,570 --> 00:20:01,280 >> Bagaimana anda menyusun senarai sekarang, dalam kuning, saiz dua, dengan menggunakan Gabung Susun? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Juga dibahagikan pada separuh, dan menyusun separuh kiri. 439 00:20:04,580 --> 00:20:07,100 Dan ini adalah di mana perkara-perkara mendapat secara ringkas bodoh sedikit. 440 00:20:07,100 --> 00:20:10,720 Bagaimana anda menyusun senarai itu daripada saiz satu, seperti nombor empat di sini? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Ia disusun. 443 00:20:13,210 --> 00:20:14,200 Anda sudah selesai. 444 00:20:14,200 --> 00:20:17,300 >> Tetapi bagaimana anda menyusun senarai saiz satu apabila ia nombor dua? 445 00:20:17,300 --> 00:20:21,640 Nah, perkara yang sama, tetapi kini bagaimana ketiga dan langkah penting dalam Merge Susun? 446 00:20:21,640 --> 00:20:24,020 Anda terpaksa bergabung kiri separuh dan separuh yang betul. 447 00:20:24,020 --> 00:20:26,580 Dan sekali yang kita lakukan itu, kita melihat di empat, kita melihat dua. 448 00:20:26,580 --> 00:20:28,750 Kami memutuskan semua hak, jelas dua datang pertama, 449 00:20:28,750 --> 00:20:31,840 jadi kami meletakkan dua dalam yang tempat, diikuti oleh empat. 450 00:20:31,840 --> 00:20:35,010 Dan sekarang anda perlu jenis putar balik, dan ini adalah jenis ciri 451 00:20:35,010 --> 00:20:37,570 daripada algoritma seperti Merge Susun, memutar balik dalam ingatan. 452 00:20:37,570 --> 00:20:40,240 Apakah garis cerita seterusnya? 453 00:20:40,240 --> 00:20:41,780 Apakah yang perlu saya memberi tumpuan kepada yang akan datang? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Separuh kanan kiri setengah, yang merupakan enam dan lapan. 456 00:20:47,350 --> 00:20:50,320 >> Jadi biarlah saya melalui langkah ini tanpa belaboring titik terlalu banyak. 457 00:20:50,320 --> 00:20:53,330 Enam dan lapan, maka enam adalah disusun, lapan adalah disusun. 458 00:20:53,330 --> 00:20:57,190 Bergabung mereka bersama-sama seperti itu, dan kini langkah seterusnya besar 459 00:20:57,190 --> 00:21:00,990 adalah, sudah tentu, menyusun separuh kanan dari langkah pertama dalam algoritma ini. 460 00:21:00,990 --> 00:21:02,870 Oleh itu, kita memberi tumpuan kepada satu, tiga, tujuh, lima. 461 00:21:02,870 --> 00:21:04,540 Kami kemudian memberi tumpuan kepada separuh kiri. 462 00:21:04,540 --> 00:21:09,400 Separuh kiri itu, separuh kanan itu, dan kemudian bergabung dalam satu dan tiga. 463 00:21:09,400 --> 00:21:13,100 Kemudian separuh kanan, kemudian kiri setengah itu, maka separuh yang betul itu. 464 00:21:13,100 --> 00:21:15,985 Bergabung dalam, dan sekarang apa langkah kekal? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Bergabung separuh kiri besar dan besar separuh betul, supaya seseorang pergi di bawah sana, 467 00:21:22,460 --> 00:21:27,330 kemudian dua, kemudian tiga, kemudian empat, maka lima, kemudian enam, maka tujuh, maka lapan. 468 00:21:27,330 --> 00:21:31,990 >> Jadi sekarang kenapa ini akhirnya mendedahkan, terutamanya jika n dan logaritma lebih 469 00:21:31,990 --> 00:21:35,487 umumnya agak melarikan diri anda, sekurang-kurangnya dalam ingatan baru-baru ini? 470 00:21:35,487 --> 00:21:37,070 Nah, perhatikan ketinggian perkara ini. 471 00:21:37,070 --> 00:21:41,230 Kami mempunyai lapan elemen, dan kami membahagikannya dengan dua, dengan dua, dengan dua. 472 00:21:41,230 --> 00:21:44,590 Jadi asas log dua daripada lapan memberikan kita tiga. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 Dan kepercayaan saya pada yang jika yang kabur tentang itu. 475 00:21:48,540 --> 00:21:54,710 Tetapi asas log dua daripada lapan adalah tiga, jadi kami telah melakukan tiga lapisan bercantum. 476 00:21:54,710 --> 00:21:57,170 Dan apabila kita bergabung unsur-unsur, bilangan elemen 477 00:21:57,170 --> 00:21:58,950 yang kita melihat pada setiap daripada mereka baris? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Sebanyak n, bukan? 480 00:22:01,437 --> 00:22:04,020 Kerana untuk bergabung baris atas, walaupun kita melakukannya sedikit demi sedikit, 481 00:22:04,020 --> 00:22:05,990 kita akhirnya menyentuh setiap nombor sekali. 482 00:22:05,990 --> 00:22:09,054 Dan di barisan kedua, untuk mereka bergabung senarai saiz dua, 483 00:22:09,054 --> 00:22:10,470 kami terpaksa menyentuh setiap elemen sekali. 484 00:22:10,470 --> 00:22:12,690 Dan kemudian di sini benar-benar jelas berturut-turut yang lalu, 485 00:22:12,690 --> 00:22:15,430 kami terpaksa menyentuh setiap orang elemen sekali, tetapi hanya sekali, 486 00:22:15,430 --> 00:22:18,400 jadi di sinilah, maka, n log n kami. 487 00:22:18,400 --> 00:22:21,780 >> Dan kini hanya untuk membuat perkara yang sedikit lebih formal untuk seketika, jika anda 488 00:22:21,780 --> 00:22:24,260 adalah kini menganalisis ini pada jenis tahap yang lebih tinggi 489 00:22:24,260 --> 00:22:28,340 dan cuba untuk membuat keputusan, dan bagaimana mungkin anda pergi tentang menyatakan 490 00:22:28,340 --> 00:22:31,780 masa yang berjalan algoritma ini hanya dengan melihat dan tidak 491 00:22:31,780 --> 00:22:33,590 dengan menggunakan contoh yang dibuat-? 492 00:22:33,590 --> 00:22:36,590 Nah, berapa banyak kali anda akan berkata yang langkah seperti ini dalam kuning akan mengambil, 493 00:22:36,590 --> 00:22:37,173 jika n <2 kembali? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Itu merupakan O besar apa? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Jadi, saya melihat satu, jadi satu langkah, mungkin dua langkah kerana itu jika 498 00:22:44,540 --> 00:22:47,110 dan kemudian kembali, tetapi ia pemalar masa, bukan? 499 00:22:47,110 --> 00:22:49,960 Oleh itu, kita kata O (1), dan itu bagaimana saya akan menyatakan ini. 500 00:22:49,960 --> 00:22:51,480 T, hanya menjadi masa berjalan. 501 00:22:51,480 --> 00:22:54,150 n adalah saiz input, jadi T (n), hanya cara yang mewah 502 00:22:54,150 --> 00:22:56,330 mengatakan berjalan input diberi masa bersaiz n 503 00:22:56,330 --> 00:23:00,220 akan menjadi atas perintah masa tetap, di O (1). 504 00:23:00,220 --> 00:23:01,970 >> Tetapi sebaliknya, apa tentang perkara ini? 505 00:23:01,970 --> 00:23:05,660 Bagaimana anda meluahkan berjalan masa garis kuning ini? 506 00:23:05,660 --> 00:23:06,250 T dari apa? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Anda boleh jenis menipu di sini dan menjawab soalan saya cyclically. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Jadi, jika masa yang berjalan di umum kita katakan adalah T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 Dan sekarang anda jenis punting di sini dan berkata, baik, hanya menyusun separuh kiri, 513 00:23:22,490 --> 00:23:23,920 dan kemudian menyusun separuh betul. 514 00:23:23,920 --> 00:23:27,520 Bagaimana mungkin kita secara simbolik mewakili masa yang berjalan garis kuning ini? 515 00:23:27,520 --> 00:23:28,020 T dari apa? 516 00:23:28,020 --> 00:23:29,360 Apa saiz input? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n lebih dua. 519 00:23:31,057 --> 00:23:32,140 Kenapa saya tidak hanya mengatakan bahawa? 520 00:23:32,140 --> 00:23:36,449 Dan maka ini adalah satu lagi T (n / 2) dan kemudian sekali lagi, jika saya menggabungkan dua bahagian disusun, 521 00:23:36,449 --> 00:23:38,615 berapa banyak elemen saya akan harus menyentuh jumlah? 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 Jadi saya boleh meluahkan ini, hanya untuk jenis mewah, 525 00:23:42,790 --> 00:23:44,430 sebagai masa berjalan pada umumnya. 526 00:23:44,430 --> 00:23:51,140 T (n) hanya masa yang berjalan T (n / 2), ditambah T (n / 2), separuh dan separuh betul kiri, 527 00:23:51,140 --> 00:23:55,360 ditambah O (n), yang mungkin n langkah, tetapi mungkin, jika saya menggunakan dua jari, 528 00:23:55,360 --> 00:23:57,960 ia dua kali ganda langkah-langkah, tetapi ia linear. 529 00:23:57,960 --> 00:24:00,440 Ia beberapa beberapa langkah itulah faktor n, 530 00:24:00,440 --> 00:24:02,270 jadi kita mungkin menyatakan ini kerana ini. 531 00:24:02,270 --> 00:24:05,550 Dan ini adalah di mana sekarang kita akan menyepak bola ke belakang buku teks matematik sekolah tinggi kita 532 00:24:05,550 --> 00:24:10,290 kita yang berulang akhirnya berakhir menyamai ini, n kali log n, 533 00:24:10,290 --> 00:24:12,530 jika anda benar-benar melakukan keluar matematik yang lebih formal. 534 00:24:12,530 --> 00:24:13,950 >> Jadi itu hanya dua perspektif. 535 00:24:13,950 --> 00:24:17,500 Satu berangka dengan keras berkod contoh wakil 536 00:24:17,500 --> 00:24:21,140 menggunakan lapan nombor, dan yang lebih rupa umum bagaimana kita sampai di sana. 537 00:24:21,140 --> 00:24:25,670 Tetapi apa yang benar-benar menarik di sini adalah, sekali lagi, tanggapan ini berbasikal. 538 00:24:25,670 --> 00:24:26,900 Saya tidak menggunakan untuk gelung. 539 00:24:26,900 --> 00:24:29,860 Saya jenis mentakrifkan sesuatu dari segi sendiri, 540 00:24:29,860 --> 00:24:31,950 bukan sahaja dengan ini fungsi matematik, 541 00:24:31,950 --> 00:24:34,860 tetapi juga dari segi kod pseudo ini. 542 00:24:34,860 --> 00:24:38,260 Kod pseudo adalah rekursif dalam dua baris yang 543 00:24:38,260 --> 00:24:42,310 pada asasnya memberitahu ia pergi menggunakan sendiri untuk menyelesaikan yang lebih kecil 544 00:24:42,310 --> 00:24:45,400 masalah saiz yang lebih kecil, dan sekali lagi dan sekali lagi 545 00:24:45,400 --> 00:24:48,820 dan sekali lagi sehingga kita meraut ia turun ke kes asas yang dipanggil ini. 546 00:24:48,820 --> 00:24:52,810 >> Jadi mari kita sebenarnya menarik lebih menarik bawa pulang dari ini seperti berikut. 547 00:24:52,810 --> 00:24:58,420 Biar saya pergi ke gedit dan mengambil lihat beberapa kod sumber hari ini, 548 00:24:58,420 --> 00:24:59,930 khususnya contoh ini di sini. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, yang nampaknya menambah nombor satu melalui n. 550 00:25:03,709 --> 00:25:05,750 Jadi mari kita lihat apa yang biasa dan tidak biasa di sini. 551 00:25:05,750 --> 00:25:08,690 Pertama kami mempunyai beberapa termasuk, jadi apa yang baru di sana. 552 00:25:08,690 --> 00:25:09,190 Prototaip. 553 00:25:09,190 --> 00:25:11,370 Saya kabur sedikit pada ini selepas beberapa hari, 554 00:25:11,370 --> 00:25:13,790 tetapi apa yang kita katakan yang prototaip fungsi adalah? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 PENONTON: [didengar]. 557 00:25:16,015 --> 00:25:16,905 SPEAKER 1: Apakah itu? 558 00:25:16,905 --> 00:25:17,800 PENONTON: Kami mengumumkannya. 559 00:25:17,800 --> 00:25:18,883 SPEAKER 1: Kami mengumumkannya. 560 00:25:18,883 --> 00:25:22,290 Jadi, anda sedang mengajar dilafaz, hey, sebenarnya tidak melaksanakan ini, 561 00:25:22,290 --> 00:25:25,740 tetapi di suatu tempat di gambar ini, mungkin, adalah akan fungsi yang dipanggil apa? 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 Dan ini hanyalah janji yang ia akan kelihatan seperti ini. 565 00:25:30,540 --> 00:25:33,720 Ia akan mengambil integer sebagai input-- dan saya boleh menjadi lebih jelas 566 00:25:33,720 --> 00:25:36,570 dan berkata int n --and ia akan kembali int satu, 567 00:25:36,570 --> 00:25:39,900 tetapi cara koma bertitik, mm, saya akan mendapatkan sekitar untuk melaksanakan ini sedikit kemudian. 568 00:25:39,900 --> 00:25:40,989 Sekali lagi, dilafaz adalah dalam keadaan sihat. 569 00:25:40,989 --> 00:25:43,280 Ia hanya akan tahu apa yang anda memberitahu ia atas ke bawah, 570 00:25:43,280 --> 00:25:45,765 jadi kita perlu sekurang-kurangnya memberi itu tanda-tanda bahawa apa yang akan datang. 571 00:25:45,765 --> 00:25:47,330 >> Sekarang mari kita lihat utama di sini. 572 00:25:47,330 --> 00:25:50,040 Mari kita tatal ke bawah di sini dan melihat apa yang utama lakukan. 573 00:25:50,040 --> 00:25:53,780 Ia bukan yang panjang fungsi, dan sebenarnya membina di sini adalah biasa. 574 00:25:53,780 --> 00:25:57,590 Saya mengisytiharkan pembolehubah n, dan kemudian Saya mahukan pengguna lagi dan lagi 575 00:25:57,590 --> 00:26:01,880 untuk integer positif menggunakan getInt, dan hanya keluar daripada gelung ini 576 00:26:01,880 --> 00:26:03,280 sekali pengguna telah dipatuhi. 577 00:26:03,280 --> 00:26:05,670 Adakah Walaupun, kami telah digunakan untuk mengganggu pengguna dengan cara itu. 578 00:26:05,670 --> 00:26:06,670 Sekarang ini adalah menarik. 579 00:26:06,670 --> 00:26:08,510 Saya mengisytiharkan int dipanggil "jawapan." 580 00:26:08,510 --> 00:26:11,420 Saya sediakan nilai pulangan fungsi yang dipanggil "sigma." 581 00:26:11,420 --> 00:26:15,200 Saya tidak tahu apa yang tidak lagi, tetapi Saya masih ingat mengisytiharkan ia sebentar tadi. 582 00:26:15,200 --> 00:26:18,310 Dan kemudian saya lulus dalam nilai yang pengguna ditaip, n, 583 00:26:18,310 --> 00:26:20,420 dan kemudian saya melaporkan jawapannya. 584 00:26:20,420 --> 00:26:22,260 Nah mari kita tinjau kembali hanya seketika. 585 00:26:22,260 --> 00:26:28,620 Mari kita pergi ke hadapan ke dalam direktori ini, membuat sigma 0, dan benar-benar menjalankan program ini 586 00:26:28,620 --> 00:26:30,490 dan lihat apa yang berlaku. 587 00:26:30,490 --> 00:26:35,930 Jadi, jika saya pergi ke depan dan jangka program ini, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 dan saya taip yang positif integer seperti dua, Sigma, 589 00:26:40,139 --> 00:26:43,180 sebagai simbol Yunani membayangkan, hanya akan menambah semua nombor 590 00:26:43,180 --> 00:26:44,320 sifar pada sehingga dua. 591 00:26:44,320 --> 00:26:46,560 Jadi 0 campur 1 plus 2. 592 00:26:46,560 --> 00:26:48,830 Jadi ini diharapkan dapat memberikan saya 3. 593 00:26:48,830 --> 00:26:49,750 Itu semua ia lakukan. 594 00:26:49,750 --> 00:26:52,690 Begitu juga, sekiranya saya ini sekali lagi dan saya memberikan nombor tiga, 595 00:26:52,690 --> 00:26:56,721 itulah 3 campur 2, supaya 5, ditambah 1 perlu memberi saya 6. 596 00:26:56,721 --> 00:26:59,470 Dan kemudian jika saya mendapat benar-benar gila dan mula menaip dalam jumlah yang lebih besar, 597 00:26:59,470 --> 00:27:01,290 ia harus memberi saya jumlah wang yang lebih besar dan lebih besar. 598 00:27:01,290 --> 00:27:02,250 Jadi itu sahaja. 599 00:27:02,250 --> 00:27:04,010 >> Jadi apakah sigma kelihatan seperti? 600 00:27:04,010 --> 00:27:05,430 Nah, ia cukup mudah. 601 00:27:05,430 --> 00:27:08,940 Ia adalah bagaimana kita mungkin telah melaksanakan ini untuk beberapa minggu lalu. 602 00:27:08,940 --> 00:27:11,120 "Int" akan menjadi jenis pulangan. 603 00:27:11,120 --> 00:27:14,330 Sigma adalah nama, dan ia mengambil yang m pembolehubah bukan n. 604 00:27:14,330 --> 00:27:15,940 Saya akan menukar bahawa sehingga atas. 605 00:27:15,940 --> 00:27:17,340 Maka ini adalah hanya cek kewarasan. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Kita akan melihat mengapa dalam seketika. 608 00:27:19,950 --> 00:27:24,220 Sekarang saya mengisytiharkan pembolehubah yang lain, Kesimpulannya, ia memulakan dengan sifar. 609 00:27:24,220 --> 00:27:28,140 Kemudian saya ini Untuk gelung iterating, nampaknya untuk kejelasan, 610 00:27:28,140 --> 00:27:33,810 daripada i = 1 pada sehingga = m, yang merupakan apa pengguna ditaip, dan kemudian saya 611 00:27:33,810 --> 00:27:35,690 menokokkan jumlah yang seperti ini. 612 00:27:35,690 --> 00:27:37,360 Dan kemudian kembali jumlah. 613 00:27:37,360 --> 00:27:38,440 >> Jadi beberapa soalan. 614 00:27:38,440 --> 00:27:42,370 Satu, saya menuntut dalam komen saya ini mengelakkan risiko gelung tak terhingga. 615 00:27:42,370 --> 00:27:45,620 Mengapa lulus dalam beberapa negatif mendorong, berpotensi, gelung tak terhingga? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> PENONTON: Anda tidak akan pernah mencapai m. 618 00:27:51,290 --> 00:27:52,880 >> SPEAKER 1: Jangan sekali-kali mencapai m. 619 00:27:52,880 --> 00:27:55,880 Tetapi m diluluskan dalam, jadi mari kita mempertimbangkan contoh yang mudah. 620 00:27:55,880 --> 00:27:58,510 Jika m diluluskan oleh pengguna sebagai salah satu negatif. 621 00:27:58,510 --> 00:28:00,059 Tanpa mengira utama. 622 00:28:00,059 --> 00:28:01,850 Utama melindungi kita daripada ini juga, jadi saya hanya 623 00:28:01,850 --> 00:28:04,680 yang benar-benar dubur dengan sigma juga memastikan 624 00:28:04,680 --> 00:28:06,540 input yang tidak boleh menjadi negatif. 625 00:28:06,540 --> 00:28:10,130 Jadi, jika m adalah negatif, sesuatu seperti satu negatif. 626 00:28:10,130 --> 00:28:11,930 Apa yang akan berlaku? 627 00:28:11,930 --> 00:28:14,390 Well, i akan dapat dimulakan kepada satu, 628 00:28:14,390 --> 00:28:19,060 dan kemudian saya akan menjadi kurang daripada atau sama dengan m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Berdirilah. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Yang was-- jangan, mari Nix cerita ini. 633 00:28:29,370 --> 00:28:32,780 Saya tidak bertanya soalan itu, kerana risiko bahawa saya merujuk kepada 634 00:28:32,780 --> 00:28:38,360 tidak akan berlaku kerana saya adalah sentiasa akan menjadi lebih besar OK than--, 635 00:28:38,360 --> 00:28:39,871 Saya menarik balik soalan itu. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Mari kita memberi tumpuan hanya pada bahagian ini di sini. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Kenapa saya mengisytiharkan beberapa di luar gelung? 640 00:28:48,830 --> 00:28:52,010 Notis di talian 49 saya telah diisytiharkan i di dalam gelung, 641 00:28:52,010 --> 00:28:54,950 tetapi talian 48 saya telah diisytiharkan beberapa luar. 642 00:28:54,950 --> 00:28:55,695 Yeah. 643 00:28:55,695 --> 00:28:56,611 PENONTON: [didengar]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 SPEAKER 1: Pasti. 646 00:28:59,400 --> 00:29:03,360 Jadi pertama sekali saya pasti tidak mahu mengaku dan memulakan jumlah 647 00:29:03,360 --> 00:29:06,130 kepada sifar bahagian dalam gelung pada setiap lelaran, 648 00:29:06,130 --> 00:29:09,370 kerana ini jelas akan mengalahkan tujuan menjumlahkan nombor. 649 00:29:09,370 --> 00:29:11,770 Saya akan sentiasa berubah nilai kembali ke sifar. 650 00:29:11,770 --> 00:29:17,992 Dan juga, apa yang lain lebih sukar difahami Sebab bagi yang demikian keputusan reka bentuk yang sama? 651 00:29:17,992 --> 00:29:18,954 Yeah. 652 00:29:18,954 --> 00:29:20,279 >> PENONTON: [didengar]. 653 00:29:20,279 --> 00:29:21,070 SPEAKER 1: Tepat sekali. 654 00:29:21,070 --> 00:29:24,060 Saya mahu mengaksesnya di luar gelung terlalu kepada apa line? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 Pada 53. 657 00:29:26,400 --> 00:29:29,910 Dan berdasarkan peraturan kami ibu jari daripada beberapa ceramah yang lalu, 658 00:29:29,910 --> 00:29:33,680 pembolehubah adalah scoped, benar-benar, kepada pendakap kerinting yang merangkumi mereka. 659 00:29:33,680 --> 00:29:38,190 Jadi, jika saya tidak mengisytiharkan jumlah wang yang di dalam ini pendakap kerinting luar, 660 00:29:38,190 --> 00:29:40,250 Saya tidak boleh menggunakan ia dalam talian 53. 661 00:29:40,250 --> 00:29:43,160 Dengan kata lain, jika saya mengisytiharkan jumlah wang di sini, atau dalam 662 00:29:43,160 --> 00:29:45,410 Untuk gelung, saya tidak dapat mengaksesnya di 53. 663 00:29:45,410 --> 00:29:47,150 Pembolehubah yang berkesan akan hilang. 664 00:29:47,150 --> 00:29:48,579 Jadi beberapa sebab di sana. 665 00:29:48,579 --> 00:29:50,370 Tetapi sekarang mari kita kembali dan lihat apa yang berlaku. 666 00:29:50,370 --> 00:29:51,730 Jadi sigma mendapat dipanggil. 667 00:29:51,730 --> 00:29:55,640 Ia menambah sehingga 1 plus 2, atau 1 plus 2 campur 3, dan kemudian mengembalikan nilai, 668 00:29:55,640 --> 00:29:59,660 kedai-kedai dalam jawapan, dan printf sini Sebab itulah saya melihat pada skrin. 669 00:29:59,660 --> 00:30:03,079 Jadi ini adalah apa yang kita akan memanggil lelaran pendekatan, di mana lelaran hanya 670 00:30:03,079 --> 00:30:03,870 bermakna menggunakan gelung. 671 00:30:03,870 --> 00:30:06,900 A Untuk gelung, gelung Walaupun, Do Walaupun gelung, hanya melakukan sesuatu sekali lagi 672 00:30:06,900 --> 00:30:08,380 dan lagi dan lagi. 673 00:30:08,380 --> 00:30:13,505 >> Tetapi sigma adalah jenis fungsi kemas di bahawa saya boleh melaksanakannya berbeza. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Apa tentang perkara ini, yang hanya untuk jenis sejuk, 676 00:30:19,120 --> 00:30:21,880 biarlah saya benar-benar menghapuskan daripada banyak gangguan 677 00:30:21,880 --> 00:30:24,380 kerana fungsi ini adalah benar-benar agak mudah. 678 00:30:24,380 --> 00:30:27,780 Mari kita meraut ke bawah hanya kepada garis empat teras yang 679 00:30:27,780 --> 00:30:30,410 dan menghapuskan semua komen dan pendakap kerinting. 680 00:30:30,410 --> 00:30:34,334 Ini adalah jenis yang fikiran-bertiup pelaksanaan alternatif. 681 00:30:34,334 --> 00:30:37,250 Baiklah, mungkin tidak keberatan-bertiup, tetapi ia jenis seksi, hak semua, 682 00:30:37,250 --> 00:30:39,920 melihat ini banyak lagi ringkas. 683 00:30:39,920 --> 00:30:43,120 Dengan hanya empat baris kod, Saya pertama mempunyai cek kewarasan ini. 684 00:30:43,120 --> 00:30:45,732 Jika m adalah kurang daripada atau sama dengan sifar, sigma tidak masuk akal. 685 00:30:45,732 --> 00:30:48,190 Ia hanya sepatutnya berada di kes ini untuk nombor positif, 686 00:30:48,190 --> 00:30:50,340 jadi saya hanya akan kembali sifar sewenang-wenangnya 687 00:30:50,340 --> 00:30:53,210 supaya kita sekurang-kurangnya mempunyai beberapa yang dikenali sebagai kes asas. 688 00:30:53,210 --> 00:30:54,430 >> Tetapi di sini kecantikan. 689 00:30:54,430 --> 00:30:59,930 Keseluruhan dari idea ini, menambah nombor dari 1 hingga n, atau m dalam kes ini, 690 00:30:59,930 --> 00:31:02,630 boleh dilakukan dengan jenis menolak tanggungjawab. 691 00:31:02,630 --> 00:31:04,947 Nah, apa adalah jumlah 1 hingga m? 692 00:31:04,947 --> 00:31:05,780 Nah, anda tahu apa? 693 00:31:05,780 --> 00:31:11,949 Ia adalah sama seperti jumlah m dicampur dengan jumlah 1 hingga m tolak 1. 694 00:31:11,949 --> 00:31:12,740 Baik anda tahu apa? 695 00:31:12,740 --> 00:31:13,940 Apa sigma m tolak 1? 696 00:31:13,940 --> 00:31:17,860 Nah, jika anda jenis ini mengikuti secara logik, ia adalah sama seperti m tolak 1 697 00:31:17,860 --> 00:31:21,415 ditambah sigma m tolak 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Jadi, anda boleh jenis just-- ini adalah seperti, jika anda hanya 700 00:31:26,012 --> 00:31:28,220 cuba untuk menyakitkan hati rakan dan mereka tanya satu soalan, 701 00:31:28,220 --> 00:31:31,344 anda jenis bertindak balas dengan soalan, anda boleh menyimpan jenis menolak tanggungjawab. 702 00:31:31,344 --> 00:31:34,560 Tetapi apa yang penting adalah bahawa jika anda menyimpan membuat soalan yang lebih kecil dan lebih kecil 703 00:31:34,560 --> 00:31:36,910 dan lebih kecil, anda tidak bertanya apa yang sigma 704 00:31:36,910 --> 00:31:39,116 n, apa sigma daripada n, apa sigma n? 705 00:31:39,116 --> 00:31:40,990 Anda meminta apa yang sigma n, apa sigma 706 00:31:40,990 --> 00:31:42,839 n tolak 1, apa yang sigma n tolak 2? 707 00:31:42,839 --> 00:31:44,880 Akhirnya soalan anda akan menjadi apa? 708 00:31:44,880 --> 00:31:50,250 Apakah sigma satu atau sifar, beberapa nilai yang sangat kecil, 709 00:31:50,250 --> 00:31:52,220 dan sebaik sahaja anda mendapatkan itu, rakan anda, 710 00:31:52,220 --> 00:31:54,350 anda tidak akan meminta soalan yang sama sekali lagi, 711 00:31:54,350 --> 00:31:55,975 anda hanya akan berkata, oh ia sifar. 712 00:31:55,975 --> 00:31:58,490 Kami selesai bermain seperti ini permainan kitaran bodoh. 713 00:31:58,490 --> 00:32:02,950 >> Jadi rekursi adalah perbuatan yang pengaturcaraan fungsi yang memanggil dirinya. 714 00:32:02,950 --> 00:32:06,630 Program ini, apabila disusun dan menjalankan, adalah akan berkelakuan dengan cara yang sama, 715 00:32:06,630 --> 00:32:09,620 tetapi apa yang penting adalah bahawa di dalam fungsi yang dikenali sebagai sigma, 716 00:32:09,620 --> 00:32:13,150 terdapat satu baris kod mana kita memanggil diri kita sendiri, 717 00:32:13,150 --> 00:32:14,980 yang biasanya akan menjadi buruk. 718 00:32:14,980 --> 00:32:21,160 Sebagai contoh, bagaimana jika saya pertama disusun ini, sehingga membuat sigma-- 719 00:32:21,160 --> 00:32:22,710 membuat sigma 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Integer positif, sila, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Jadi apa fungsi yang seolah-olah berkenaan, berdasarkan satu ujian, betul. 723 00:32:30,810 --> 00:32:34,917 Tetapi bagaimana jika saya mendapatkan sedikit berbahaya dan memadam kes asas yang dipanggil, 724 00:32:34,917 --> 00:32:37,750 dan hanya berkata, dan saya hanya membuat ini lebih rumit daripada ia. 725 00:32:37,750 --> 00:32:42,450 Mari kita mengira sigma dengan mengambil m dan kemudian menambah 726 00:32:42,450 --> 00:32:44,564 dalam sigma m tolak satu? 727 00:32:44,564 --> 00:32:45,980 Nah, apa yang akan berlaku di sini? 728 00:32:45,980 --> 00:32:47,140 Mari kita zum keluar. 729 00:32:47,140 --> 00:32:52,920 Mari kita susun semula program ini, menyimpannya, susun semula program ini, 730 00:32:52,920 --> 00:33:00,450 dan kemudian bersedia ./sigma-1 zoom dalam, memasukkan integer positif sila, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Berapa ramai daripada anda sanggup untuk Mengakulah untuk melihat bahawa? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Jadi ini boleh berlaku untuk beberapa sebab, 735 00:33:06,690 --> 00:33:09,148 dan terus terang minggu ini kami akan memberi anda lebih banyak daripada mereka. 736 00:33:09,148 --> 00:33:11,780 Tetapi dalam kes ini, cuba dengan alasan ke belakang 737 00:33:11,780 --> 00:33:14,430 apa yang mungkin berlaku di sini? 738 00:33:14,430 --> 00:33:17,400 Segmentasi bersalah, kita berkata lalu masa, merujuk kepada segmen memori. 739 00:33:17,400 --> 00:33:18,690 Sesuatu yang buruk berlaku. 740 00:33:18,690 --> 00:33:21,550 Tetapi apa yang ia mekanikal yang pergi serba salah 741 00:33:21,550 --> 00:33:25,000 sini kerana pemecatan saya itu yang dikenali sebagai kes asas, 742 00:33:25,000 --> 00:33:26,870 di mana saya mengembalikan nilai keras berkod? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Apa yang anda fikir yang salah? 745 00:33:30,460 --> 00:33:31,219 Yeah. 746 00:33:31,219 --> 00:33:32,135 >> PENONTON: [didengar]. 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 Soalan yang baik. 750 00:33:37,550 --> 00:33:39,508 Jadi saiz bilangan bahawa saya telah merumuskan 751 00:33:39,508 --> 00:33:41,920 mendapat begitu besar bahawa ia melebihi saiz ruang memori. 752 00:33:41,920 --> 00:33:44,640 Idea yang baik, tetapi tidak pada asasnya akan menyebabkan kemalangan. 753 00:33:44,640 --> 00:33:48,230 Yang mungkin menyebabkan limpahan integer, di mana bit hanya terbalik 754 00:33:48,230 --> 00:33:51,760 dan kemudian kita kesilapan yang benar-benar besar seperti nombor untuk nombor negatif, 755 00:33:51,760 --> 00:33:53,260 tetapi itu sendiri tidak akan menyebabkan kemalangan. 756 00:33:53,260 --> 00:33:55,509 Kerana pada akhir hari int adalah masih 32 bit. 757 00:33:55,509 --> 00:33:57,640 Anda tidak akan sengaja mencuri sedikit ke-33. 758 00:33:57,640 --> 00:33:58,431 Tetapi pemikiran yang baik. 759 00:33:58,431 --> 00:33:58,984 Yeah. 760 00:33:58,984 --> 00:33:59,900 >> PENONTON: [didengar]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 SPEAKER 1: Kaedah ini tidak pernah berhenti berlari, 763 00:34:02,300 --> 00:34:06,658 dan sememangnya ia memanggil sendiri lagi dan lagi dan lagi dan lagi 764 00:34:06,658 --> 00:34:08,449 dan sekali lagi, dan tiada fungsi-fungsi yang pernah 765 00:34:08,449 --> 00:34:13,310 selesai kerana talian tunggal mereka kod panggilan dirinya sendiri sekali lagi dan sekali lagi 766 00:34:13,310 --> 00:34:14,219 dan lagi. 767 00:34:14,219 --> 00:34:16,080 Dan apa yang benar-benar berlaku di sini, dan kini kita 768 00:34:16,080 --> 00:34:18,100 jenis ini boleh menarik bergambar. 769 00:34:18,100 --> 00:34:20,899 Biar saya pergi ke satu gambar hanya seketika. 770 00:34:20,899 --> 00:34:22,940 Ini adalah gambar, yang akhirnya akan daging keluar 771 00:34:22,940 --> 00:34:26,336 dengan lebih terperinci, daripada apa yang berlaku di di dalam memori komputer anda. 772 00:34:26,336 --> 00:34:28,460 Dan ternyata bahawa pada bahagian bawah gambar ini 773 00:34:28,460 --> 00:34:29,709 adalah sesuatu yang dinamakan tindanan. 774 00:34:29,709 --> 00:34:31,920 Ini adalah sebahagian daripada ingatan, sebahagian RAM, 775 00:34:31,920 --> 00:34:33,920 yang yang hanya digunakan bila-bila masa fungsi dipanggil. 776 00:34:33,920 --> 00:34:36,239 Bila-bila masa anda, programmer, memanggil fungsi, 777 00:34:36,239 --> 00:34:38,860 sistem operasi, seperti Mac OS, Windows atau Linux, 778 00:34:38,860 --> 00:34:41,920 menangkap sekumpulan bait, mungkin beberapa kilobytes, mungkin beberapa megabait 779 00:34:41,920 --> 00:34:44,590 ingatan, tangan mereka kepada anda, dan kemudian membolehkan 780 00:34:44,590 --> 00:34:47,650 anda menjalankan fungsi anda menggunakan apa pembolehubah yang anda perlukan. 781 00:34:47,650 --> 00:34:50,699 Dan jika anda kemudian memanggil lagi fungsi dan fungsi lain, 782 00:34:50,699 --> 00:34:53,590 anda mendapat satu lagi sebahagian daripada memori dan satu lagi keping ingatan. 783 00:34:53,590 --> 00:34:57,090 >> Dan sesungguhnya, jika ini dulang hijau dari Annenberg mewakili memori itu, 784 00:34:57,090 --> 00:34:59,870 di sini adalah apa yang berlaku pertama kali anda memanggil fungsi sigma. 785 00:34:59,870 --> 00:35:04,510 Ia seperti meletakkan dulang seperti ini pada apa yang pada mulanya stack kosong. 786 00:35:04,510 --> 00:35:07,142 Tetapi jika dulang yang panggilan sendiri, jadi untuk bercakap, 787 00:35:07,142 --> 00:35:08,850 memanggil contoh lain daripada sigma, itu 788 00:35:08,850 --> 00:35:11,640 seperti bertanya sistem operasi, aduh, perlu memori yang lebih sedikit, 789 00:35:11,640 --> 00:35:12,520 memberi saya itu. 790 00:35:12,520 --> 00:35:14,840 Dan kemudian ia akan bertimbun di atas. 791 00:35:14,840 --> 00:35:18,030 Tetapi apa yang penting di sini ialah dulang pertama masih ada, 792 00:35:18,030 --> 00:35:20,620 kerana dia digunakan dulang kedua ini. 793 00:35:20,620 --> 00:35:23,500 Sekarang sementara itu, sigma panggilan sigma, itu seperti meminta lebih banyak memori. 794 00:35:23,500 --> 00:35:25,830 Dapat bertimbun di sini. 795 00:35:25,830 --> 00:35:29,350 sigma panggilan sigma, itu lain dulang yang mendapat bertimbun di sini. 796 00:35:29,350 --> 00:35:32,942 Dan jika anda terus melakukan perkara ini, akhirnya, jenis peta visual ini 797 00:35:32,942 --> 00:35:35,525 carta itu, apa yang akan berlaku dengan timbunan dulang? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Ia akan melebihi jumlah yang memori komputer anda mempunyai. 800 00:35:41,160 --> 00:35:45,790 Dan sebaik sahaja dulang hijau ini melebihi garisan mendatar 801 00:35:45,790 --> 00:35:49,410 di atas timbunan dan ke atas perkataan timbunan, yang kita akan kembali ke dalam masa depan, 802 00:35:49,410 --> 00:35:50,410 bahawa adalah satu perkara yang tidak baik. 803 00:35:50,410 --> 00:35:52,810 Timbunan itu yang berbeza segmen ingatan, 804 00:35:52,810 --> 00:35:55,190 dan jika anda membiarkan ini dulang cerucuk dan cerucuk pada, 805 00:35:55,190 --> 00:35:57,800 anda akan melebihi segmen anda sendiri ingatan, 806 00:35:57,800 --> 00:36:00,420 dan program yang memang akan crash. 807 00:36:00,420 --> 00:36:02,930 >> Sekarang sebagai diketepikan, idea ini daripada rekursi, oleh itu, 808 00:36:02,930 --> 00:36:06,500 dengan jelas boleh membawa kepada masalah, tetapi ia tidak semestinya sesuatu yang buruk. 809 00:36:06,500 --> 00:36:08,840 Kerana menganggap, selepas semua, how-- dan mungkin 810 00:36:08,840 --> 00:36:11,700 ini mengambil masa untuk membiasakan diri untuk --how elegan atau bagaimana mudah 811 00:36:11,700 --> 00:36:14,890 bahawa pelaksanaan sigma adalah. 812 00:36:14,890 --> 00:36:17,440 Dan kami tidak akan menggunakan rekursi semua yang banyak dalam CS50, 813 00:36:17,440 --> 00:36:20,780 tetapi dalam CS51, dan benar-benar mana-mana golongan di mana anda memanipulasi struktur data 814 00:36:20,780 --> 00:36:23,640 seperti pokok-pokok, atau pokok-pokok keluarga, yang mempunyai beberapa hierarki, 815 00:36:23,640 --> 00:36:26,000 ia super, super berguna. 816 00:36:26,000 --> 00:36:29,750 Sekarang, sebagai diketepikan, supaya anda sebagai ahli-ahli sains komputer yang bercita-cita 817 00:36:29,750 --> 00:36:33,180 sudah biasa dengan beberapa Google jenaka di dalam, jika anda pergi ke Google 818 00:36:33,180 --> 00:36:36,345 dan anda mencari apakah definisi, berkata, rekursi, masukkan. 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 Sebagai mengetepikan, saya ditarik ke atas beberapa. 822 00:36:42,670 --> 00:36:45,470 Ini adalah seperti 10 minit procrastination pagi ini. 823 00:36:45,470 --> 00:36:52,890 Jika anda juga Google "serong," notis dengan menyengetkan kepala anda slightly-- 824 00:36:52,890 --> 00:36:55,120 dan kemudian satu ini mungkin yang paling kejam sekali 825 00:36:55,120 --> 00:36:57,286 sejak seseorang menghabiskan seperti hari mereka melaksanakan ini 826 00:36:57,286 --> 00:36:59,880 beberapa tahun ago-- datang. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Oh, wait-- itu pepijat. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Jadi berjalan pada salah satu laman web terbesar dunia 831 00:37:11,410 --> 00:37:13,510 adalah ini bodoh sedikit telur Paskah. 832 00:37:13,510 --> 00:37:16,690 Mereka mungkin memakan bilangan nontrivial senarai kod 833 00:37:16,690 --> 00:37:19,280 hanya supaya kita boleh mempunyai perkara yang menyeronokkan kecil seperti itu. 834 00:37:19,280 --> 00:37:22,140 Tetapi sekurang-kurangnya sekarang anda mendapatkan beberapa orang-orang di dalam jenaka. 835 00:37:22,140 --> 00:37:28,330 >> Sekarang mari kita lihat pada beberapa putih terletak kami telah memberitahu lewat, 836 00:37:28,330 --> 00:37:30,707 dan mula mengupas kembali beberapa lapisan teknikal 837 00:37:30,707 --> 00:37:32,790 supaya anda benar-benar memahami apa yang telah berlaku 838 00:37:32,790 --> 00:37:34,860 dan anda boleh memahami beberapa ancaman, 839 00:37:34,860 --> 00:37:38,060 seperti Shellshock, yang kini telah mula menjadi 840 00:37:38,060 --> 00:37:41,110 di barisan hadapan dalam semua orang perhatian, sekurang-kurangnya dalam media. 841 00:37:41,110 --> 00:37:45,810 Jadi di sini adalah fungsi yang sangat mudah yang mengembalikan apa-apa, tidak sah. 842 00:37:45,810 --> 00:37:46,790 Namanya adalah swap. 843 00:37:46,790 --> 00:37:50,880 Ia mengambil masa dalam dua pembolehubah dan ia akan mengembalikan apa-apa. 844 00:37:50,880 --> 00:37:52,260 Mengambil masa dalam a dan b. 845 00:37:52,260 --> 00:37:53,337 Jadi demonstrasi cepat. 846 00:37:53,337 --> 00:37:54,170 Kami dibesarkan ini. 847 00:37:54,170 --> 00:37:56,100 Kita juga mungkin mengambil sedikit memecahkan di sini untuk seketika 848 00:37:56,100 --> 00:37:57,250 dan mempunyai sesuatu yang kecil untuk minum. 849 00:37:57,250 --> 00:38:00,120 Jika seseorang tidak keberatan menyertai saya di sini untuk seketika. 850 00:38:00,120 --> 00:38:01,830 Bagaimana pula dengan anda dalam baju merah? 851 00:38:01,830 --> 00:38:02,335 Marilah naik. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Hanya satu hari ini. 854 00:38:05,260 --> 00:38:06,251 Terima kasih, walaupun. 855 00:38:06,251 --> 00:38:08,000 Baiklah, dan kami mempunyai yang datang di sini? 856 00:38:08,000 --> 00:38:08,660 Apa nama anda? 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 Marilah naik. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Jadi Laura, cabaran yang sangat mudah hari ini. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Nice untuk memenuhi yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Baiklah. 866 00:38:16,910 --> 00:38:21,179 Jadi kita mempunyai sedikit susu di sini dan kita mempunyai beberapa jus oren di sini 867 00:38:21,179 --> 00:38:23,345 dan beberapa cawan yang kita dipinjam daripada Annenberg hari ini. 868 00:38:23,345 --> 00:38:24,178 >> SPEAKER 4: dipinjam. 869 00:38:24,178 --> 00:38:27,240 SPEAKER 1: Dan akan pergi ke depan dan memberi anda setengah gelas ini. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Baiklah. 872 00:38:28,800 --> 00:38:30,750 Dan kami akan memberikan separuh segelas susu. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Oh, dan hanya supaya anda boleh ingat apa ini adalah seperti, 875 00:38:35,890 --> 00:38:38,860 Saya teringat untuk membawa ini dan pada hari ini. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Okay. 878 00:38:42,530 --> 00:38:45,470 Jika anda tidak keberatan, mari kita lihat, kita boleh meletakkan mereka ke atas kaca mata anda sendiri 879 00:38:45,470 --> 00:38:46,560 jika anda mahu. 880 00:38:46,560 --> 00:38:48,710 Ini akan dunia dari mata Laura itu. 881 00:38:48,710 --> 00:38:49,210 Baiklah. 882 00:38:49,210 --> 00:38:53,820 Jadi matlamat anda, dengan dua cawan cecair di sini, susu dan jus oren, 883 00:38:53,820 --> 00:38:58,370 adalah menukar dua kandungan supaya jus oren masuk ke dalam cawan susu 884 00:38:58,370 --> 00:39:00,710 dan susu yang masuk ke dalam cawan jus oren. 885 00:39:00,710 --> 00:39:02,359 >> SPEAKER 4: Adakah saya mendapatkan cawan yang lain? 886 00:39:02,359 --> 00:39:05,650 SPEAKER 1: Saya amat gembira anda bertanya, walaupun ia akan menjadi rakaman jauh lebih baik 887 00:39:05,650 --> 00:39:06,710 jika anda tidak meminta. 888 00:39:06,710 --> 00:39:10,620 Tetapi ya, kita boleh menawarkan anda satu pertiga cawan yang kosong, sudah tentu. 889 00:39:10,620 --> 00:39:11,120 Baiklah. 890 00:39:11,120 --> 00:39:12,300 Jadi menukar kandungan di sana. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Very nice. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Sangat baik. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Anda lakukan ini amat berhati-hati. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 Dan langkah tiga. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Baiklah. 901 00:39:31,350 --> 00:39:31,930 Cemerlang. 902 00:39:31,930 --> 00:39:33,930 Satu pusingan besar tepukan akan menjadi baik untuk Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Baiklah. 905 00:39:37,000 --> 00:39:40,790 Kami mempunyai hadiah perpisahan sedikit untuk anda, tetapi biarlah saya mengambil ini. 906 00:39:40,790 --> 00:39:42,620 Terima kasih banyak. 907 00:39:42,620 --> 00:39:46,170 Jadi contoh yang mudah, walaupun, untuk menunjukkan bahawa jika anda melakukan 908 00:39:46,170 --> 00:39:48,300 ingin tukar kandungan dua bekas, 909 00:39:48,300 --> 00:39:52,360 atau mari kita memanggil mereka pembolehubah, anda memerlukan penyimpanan sementara 910 00:39:52,360 --> 00:39:56,710 untuk mengadakan satu kandungan dalam berbuat bahawa anda sebenarnya boleh melakukan swap. 911 00:39:56,710 --> 00:40:01,790 Jadi sesungguhnya, kod sumber ini di sini di C adalah wakil betul-betul itu. 912 00:40:01,790 --> 00:40:06,340 Jika jus oren adalah satu dan susu adalah b, dan kami mahu menukar kedua-dua, 913 00:40:06,340 --> 00:40:08,990 anda boleh mencuba sesuatu yang kreatif dengan menuang satu ke yang lain, 914 00:40:08,990 --> 00:40:11,031 tetapi itu mungkin tidak akan berakhir terutamanya dengan baik. 915 00:40:11,031 --> 00:40:15,260 Dan supaya kita menggunakan cawan ketiga, panggilan ia RMT, T-M-P oleh konvensyen, 916 00:40:15,260 --> 00:40:19,370 dan meletakkan kandungan OJ dalam itu, kemudian menukar satu cawan, 917 00:40:19,370 --> 00:40:22,610 kemudian meletakkan ke dalam OJ cawan asal, dengan itu 918 00:40:22,610 --> 00:40:25,320 mencapai, tepat seperti yang Laura lakukan, swap. 919 00:40:25,320 --> 00:40:26,850 >> Jadi mari kita melakukan perkara tersebut. 920 00:40:26,850 --> 00:40:30,110 Biar saya pergi ke hadapan dan membuka sehingga satu contoh itu 921 00:40:30,110 --> 00:40:32,720 sebenarnya dipanggil "tidak swap, "kerana ini bukan 922 00:40:32,720 --> 00:40:36,180 sebagai hanya dilakukan kerana anda mungkin berfikir. 923 00:40:36,180 --> 00:40:41,190 Jadi, dalam program ini, melihat bahawa Saya menggunakan stdio.h, kawan lama kami. 924 00:40:41,190 --> 00:40:43,130 Saya mempunyai prototaip untuk swap di sana, yang 925 00:40:43,130 --> 00:40:45,450 ertinya pelaksanaannya ini mungkin ke bawah di bawah, 926 00:40:45,450 --> 00:40:48,050 dan mari kita lihat apa ini utama program yang akan lakukan untuk saya. 927 00:40:48,050 --> 00:40:52,020 Saya pertama mengisytiharkan int x mendapat satu, dan int y mendapat dua. 928 00:40:52,020 --> 00:40:54,930 Jadi memikirkan mereka sebagai OJ dan susu masing-masing. 929 00:40:54,930 --> 00:40:57,100 Dan kemudian saya hanya mempunyai printf berkata x ialah 930 00:40:57,100 --> 00:41:00,120 dan y adalah ini, supaya saya boleh visual melihat apa yang berlaku. 931 00:41:00,120 --> 00:41:03,810 Kemudian saya telah printf mendakwa bahawa saya bertukar-tukar kedua-dua, 932 00:41:03,810 --> 00:41:07,100 dan kemudian saya mencetak mendakwa bahawa mereka ditukar, 933 00:41:07,100 --> 00:41:09,300 dan saya mencetak x dan y lagi. 934 00:41:09,300 --> 00:41:13,010 Jadi turun di sini di swap adalah apa Laura lakukan, 935 00:41:13,010 --> 00:41:16,240 dan apa yang kita lihat pada skrin sebentar tadi. 936 00:41:16,240 --> 00:41:19,380 >> Jadi mari kita pergi ke depan dan menjadi sangat kecewa. 937 00:41:19,380 --> 00:41:24,690 Janganlah swap, dan menjalankan tiada swap, zoom di atas output di sini. 938 00:41:24,690 --> 00:41:28,320 Masukkan x adalah 1, y ialah 2, Pertukaran ditukar. 939 00:41:28,320 --> 00:41:32,700 masih x 1, y dan masih 2. 940 00:41:32,700 --> 00:41:37,630 Jadi walaupun, terus terang, ini kelihatan betul-betul suka, walaupun lebih teknikal, 941 00:41:37,630 --> 00:41:40,730 apa Laura lakukan, tidak kelihatan untuk bekerja. 942 00:41:40,730 --> 00:41:42,130 Jadi mengapa yang? 943 00:41:42,130 --> 00:41:46,630 Nah, ternyata bahawa apabila kita menyediakan program seperti ini 944 00:41:46,630 --> 00:41:51,590 yang kedua-dua utama, yang diketengahkan di sini, dan kemudian fungsi lain, seperti swap, 945 00:41:51,590 --> 00:41:54,230 menekankan di sini, yang ia memanggil, dunia 946 00:41:54,230 --> 00:41:57,030 kelihatan sesuatu yang kecil seperti dulang ini sebentar tadi. 947 00:41:57,030 --> 00:42:00,440 Apabila utama pertama mendapat dipanggil, itu seperti bertanya sistem operasi 948 00:42:00,440 --> 00:42:04,030 untuk sedikit memori untuk mana-mana tempat pembolehubah seperti x dan y yang mempunyai utama, 949 00:42:04,030 --> 00:42:05,660 dan mereka berakhir di sana. 950 00:42:05,660 --> 00:42:10,920 Tetapi jika panggilan utama swap, dan utama pas untuk menukar dua hujah, a dan b, 951 00:42:10,920 --> 00:42:16,410 jus oren dan susu, ia tidak suka menyerahkan jus oren dan susu 952 00:42:16,410 --> 00:42:17,500 untuk Laura. 953 00:42:17,500 --> 00:42:21,300 Apa komputer tidak, adakah pas salinan jus oren 954 00:42:21,300 --> 00:42:27,110 dan salinan susu untuk Laura, supaya apa yang akhirnya di dalam dulang ini 955 00:42:27,110 --> 00:42:32,510 adalah satu nilai dan dua, atau OJ dan susu, tetapi salinannya, 956 00:42:32,510 --> 00:42:34,790 supaya pada ketika ini dalam cerita itu, terdapat 957 00:42:34,790 --> 00:42:36,930 adalah OJ dan susu dalam setiap dulang ini. 958 00:42:36,930 --> 00:42:39,260 Ada satu dan dua dalam setiap dulang ini, 959 00:42:39,260 --> 00:42:41,720 dan fungsi swap ini memang bekerja. 960 00:42:41,720 --> 00:42:46,090 Ia bertukar-tukar mereka dalam dulang kedua paling atas, 961 00:42:46,090 --> 00:42:48,147 tetapi bertukar-tukar yang tidak mempunyai kesan. 962 00:42:48,147 --> 00:42:49,980 Dan berdasarkan beberapa prinsip asas kita kena 963 00:42:49,980 --> 00:42:52,970 bercakap tentang sebelum ini, dan sesungguhnya hanya beberapa minit yang lalu, apa yang 964 00:42:52,970 --> 00:42:58,770 mungkin menjelaskan mengapa berubah a dan b di dalam swap 965 00:42:58,770 --> 00:43:05,560 mempunyai kesan ke atas x dan y, walaupun Saya lulus x dan y dengan fungsi swap. 966 00:43:05,560 --> 00:43:08,750 Apa perkataan utama di sini bahawa simplistically mungkin menjelaskan? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Saya rasa saya mendengar ia di sini? 969 00:43:12,627 --> 00:43:13,335 PENONTON: Return. 970 00:43:13,335 --> 00:43:14,085 SPEAKER 1: Kembali? 971 00:43:14,085 --> 00:43:14,590 Tidak kembali. 972 00:43:14,590 --> 00:43:15,895 Mari kita pergi dengan satu yang lain. 973 00:43:15,895 --> 00:43:16,395 Apa itu? 974 00:43:16,395 --> 00:43:17,080 >> PENONTON: [didengar]. 975 00:43:17,080 --> 00:43:20,000 >> SPEAKER 1: OK, jadi kita boleh return-- membuat kerja kembali dalam cerita, 976 00:43:20,000 --> 00:43:21,914 tetapi ada penjelasan yang lebih mudah. 977 00:43:21,914 --> 00:43:22,580 PENONTON: Skop. 978 00:43:22,580 --> 00:43:23,288 SPEAKER 1: Skop. 979 00:43:23,288 --> 00:43:24,300 Saya akan mengambil skop. 980 00:43:24,300 --> 00:43:27,290 Jadi skop, ingat di mana x dan y kami diisytiharkan. 981 00:43:27,290 --> 00:43:30,840 Mereka diisytiharkan dalam daripada hak utama di sini. 982 00:43:30,840 --> 00:43:33,200 a dan b, sementara itu, adalah berkesan diisytiharkan 983 00:43:33,200 --> 00:43:35,930 bahagian dalam swap, tidak cukup di pendakap kerinting tetapi masih 984 00:43:35,930 --> 00:43:37,690 di kawasan umum swap. 985 00:43:37,690 --> 00:43:40,560 Dan memang, a dan b hanya wujud di dalam dulang ini 986 00:43:40,560 --> 00:43:44,850 dari Annenberg, ini sebahagian kedua kod. 987 00:43:44,850 --> 00:43:49,500 Jadi, kita memang berubah salinan, tetapi itu tidak benar-benar semua yang membantu. 988 00:43:49,500 --> 00:43:52,190 >> Jadi mari kita lihat tahap yang sedikit lebih rendah ini. 989 00:43:52,190 --> 00:43:55,430 Saya akan kembali ke Direktori Sumber, 990 00:43:55,430 --> 00:43:58,330 dan saya akan pertama zum di sini, dan hanya 991 00:43:58,330 --> 00:44:02,290 mengesahkan bahawa saya dalam ini tetingkap terminal yang lebih besar, 992 00:44:02,290 --> 00:44:04,430 program ini masih berkelakuan seperti itu. 993 00:44:04,430 --> 00:44:06,840 Katakan sekarang ini tidak sengaja. 994 00:44:06,840 --> 00:44:10,090 Jelas sekali saya mahu swap untuk kerja, jadi ia berasa seperti pepijat. 995 00:44:10,090 --> 00:44:12,780 Sekarang saya boleh mula menambah banyak printf untuk kod saya, 996 00:44:12,780 --> 00:44:16,010 mencetak x di sini, y lebih di sini, di sini, b di sini. 997 00:44:16,010 --> 00:44:18,220 Tetapi terus terang, itu mungkin apa yang anda telah lakukan untuk beberapa minggu 998 00:44:18,220 --> 00:44:20,190 sekarang, dalam waktu pejabat dan di rumah apabila bekerja 999 00:44:20,190 --> 00:44:22,150 pada psets cuba mencari beberapa bug. 1000 00:44:22,150 --> 00:44:25,560 Tetapi anda akan lihat, jika anda tidak mempunyai sudah, masalah yang menetapkan tiga memperkenalkan anda 1001 00:44:25,560 --> 00:44:31,630 kepada perintah yang dipanggil GDB, mana GDB, GNU penyahpepijat, 1002 00:44:31,630 --> 00:44:34,040 mempunyai sendiri sejumlah besar ciri-ciri yang benar-benar boleh 1003 00:44:34,040 --> 00:44:38,160 mari kita memahami keadaan seperti ini, tetapi ia amat lebih, 1004 00:44:38,160 --> 00:44:39,940 menyelesaikan masalah dan mencari bug. 1005 00:44:39,940 --> 00:44:40,940 Jadi saya akan melakukan ini. 1006 00:44:40,940 --> 00:44:44,770 Daripada ./noswap, saya bukan akan menjalankan GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Dalam erti kata lain, saya akan berjalan saya program tidak Bash, kawan baru kami 1009 00:44:51,200 --> 00:44:51,850 hari ini. 1010 00:44:51,850 --> 00:44:53,970 Saya akan berjalan saya program noswap dalam 1011 00:44:53,970 --> 00:44:56,900 program ini selain dikenali sebagai GDB, yang debugger, yang 1012 00:44:56,900 --> 00:45:01,035 adalah satu program yang direka untuk membantu anda manusia zaman dan menghapuskan bug. 1013 00:45:01,035 --> 00:45:03,410 Jadi jika saya memukul Main di sini, ada jumlah kejam teks 1014 00:45:03,410 --> 00:45:04,868 bahawa anda benar-benar tidak perlu dibaca. 1015 00:45:04,868 --> 00:45:07,290 Ia pada dasarnya gangguan dari segera, yang 1016 00:45:07,290 --> 00:45:10,030 Saya akan melanda Kawalan-L bangun di atas sana. 1017 00:45:10,030 --> 00:45:11,800 Ini adalah segera GDB itu. 1018 00:45:11,800 --> 00:45:15,550 Jika saya mahu menjalankan program ini sekarang, kerana ini kunci cheat sedikit pada hari ini 1019 00:45:15,550 --> 00:45:21,860 slaid menunjukkan, Run adalah yang pertama menyuruh kami bermaksud untuk memperkenalkan. 1020 00:45:21,860 --> 00:45:25,150 Dan saya hanya akan menaip berjalan di sini di dalam GDB, 1021 00:45:25,150 --> 00:45:26,811 dan sememangnya ia berlari program saya. 1022 00:45:26,811 --> 00:45:29,310 Sekarang ada beberapa tambahan output skrin seperti ini, 1023 00:45:29,310 --> 00:45:31,910 tetapi itu hanya menjadi GDB dubur dan memberitahu kita apa yang sedang berlaku. 1024 00:45:31,910 --> 00:45:34,451 Anda tidak benar-benar perlu bimbang mengenai butiran ini sekarang. 1025 00:45:34,451 --> 00:45:36,890 Tetapi apa yang benar-benar sejuk tentang GDB, jika saya melakukan ini again-- 1026 00:45:36,890 --> 00:45:42,100 Kawalan-L membersihkan screen-- biarlah saya pergi hadapan dan jenis "memecahkan utama," dengan itu, 1027 00:45:42,100 --> 00:45:45,743 apabila saya tekan Enter, menetapkan apa yang dipanggil titik rehat di noswap.c, 1028 00:45:45,743 --> 00:45:51,270 talian 16, yang mana GDB digambarkan program saya sebenarnya 1029 00:45:51,270 --> 00:45:53,070 adalah, fungsi saya sebenarnya. 1030 00:45:53,070 --> 00:45:55,070 Ini kita akan mengabaikan untuk sekarang tetapi itu alamat 1031 00:45:55,070 --> 00:45:57,310 dalam ingatan khusus fungsi ini. 1032 00:45:57,310 --> 00:46:00,240 Jadi sekarang apabila saya menaip berlari, perhatikan apa yang sejuk di sini. 1033 00:46:00,240 --> 00:46:05,650 Program ni memecah di garisan I memberitahu GDB untuk berhenti seketika di pelaksanaan. 1034 00:46:05,650 --> 00:46:09,850 Jadi saya tidak perlu kini menukar kod saya, menambah beberapa printf ini, susun semula ia, jalankan lagi 1035 00:46:09,850 --> 00:46:13,300 ia, menukar, menambah beberapa printf ini, menyimpannya, susun semula ia, menjalankannya. 1036 00:46:13,300 --> 00:46:18,100 Saya hanya boleh berjalan melalui program saya langkah demi langkah demi langkah pada kelajuan manusia, 1037 00:46:18,100 --> 00:46:20,880 tidak sama jenis Intel-bahagian dalam kelajuan. 1038 00:46:20,880 --> 00:46:24,580 >> Jadi sekarang perhatikan baris ini muncul di sini, dan jika saya kembali 1039 00:46:24,580 --> 00:46:27,800 untuk program saya dalam gedit, melihat bahawa yang sebenarnya 1040 00:46:27,800 --> 00:46:29,280 baris pertama kod. 1041 00:46:29,280 --> 00:46:31,240 Ada talian 16 dalam gedit. 1042 00:46:31,240 --> 00:46:34,610 Ada talian 16 dalam GDB, dan juga walaupun muka hitam dan putih ini 1043 00:46:34,610 --> 00:46:37,760 tidak hampir sebagai pengguna mesra, ini bermakna 1044 00:46:37,760 --> 00:46:41,680 bahawa 16 talian belum dilaksanakan lagi, tetapi ia akan menjadi. 1045 00:46:41,680 --> 00:46:46,220 Jadi memang saya menaip cetak x, tidak printf, hanya cetak x, 1046 00:46:46,220 --> 00:46:50,730 Saya mendapat beberapa nilai palsu terdapat sifar, kerana x belum dimulakan lagi. 1047 00:46:50,730 --> 00:46:54,760 Jadi saya akan menaip depan, atau, jika anda mahu menjadi mewah, hanya n untuk seterusnya. 1048 00:46:54,760 --> 00:46:59,090 Tetapi apabila saya menaip seterusnya memasuki, kini notis ia bergerak ke baris 17. 1049 00:46:59,090 --> 00:47:02,840 Jadi secara logiknya, jika saya telah dilaksanakan talian 16 dan saya taip cetak x, 1050 00:47:02,840 --> 00:47:03,640 apa yang perlu saya lihat? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Satu. 1053 00:47:05,520 --> 00:47:07,820 >> Dan sekarang ini diakui mengelirukan. 1054 00:47:07,820 --> 00:47:11,260 $ 2 adalah hanya satu cara mewah daripada, jika anda ingin merujuk kepada nilai yang kemudian, 1055 00:47:11,260 --> 00:47:12,510 anda boleh berkata "dolar menandatangani dua." 1056 00:47:12,510 --> 00:47:13,480 Ia seperti rujukan kembali. 1057 00:47:13,480 --> 00:47:14,570 Tetapi untuk sekarang, hanya tidak mengendahkannya. 1058 00:47:14,570 --> 00:47:17,070 Apa yang menarik adalah apa yang di sebelah kanan tanda yang sama. 1059 00:47:17,070 --> 00:47:21,000 Dan sekarang saya menaip datang lagi dan y cetak, saya akan melihat 2. 1060 00:47:21,000 --> 00:47:23,870 Saya juga kini boleh mencetak x lagi, dan terus-terang, 1061 00:47:23,870 --> 00:47:27,130 jika saya mendapat sedikit keliru untuk di mana saya, saya boleh menaip senarai untuk senarai 1062 00:47:27,130 --> 00:47:30,590 dan hanya melihat beberapa konteks sekitar titik Saya sebenarnya di. 1063 00:47:30,590 --> 00:47:35,180 Dan sekarang saya boleh menaip akan datang, dan ada x ialah 1. 1064 00:47:35,180 --> 00:47:36,300 Sekarang saya menaip depan. 1065 00:47:36,300 --> 00:47:37,710 Oh, y ialah 2. 1066 00:47:37,710 --> 00:47:40,750 Dan sekali lagi, ia mengelirukan, kerana output GDB ini 1067 00:47:40,750 --> 00:47:43,044 sedang berbaur dengan output saya sendiri. 1068 00:47:43,044 --> 00:47:45,710 Tetapi jika anda ingat, dengan sambil mengerling ke belakang dan sebagainya di kod anda 1069 00:47:45,710 --> 00:47:47,740 atau meletakkan ia keluar sebelah menyebelah mungkin, anda akan 1070 00:47:47,740 --> 00:47:51,020 melihat yang benar-benar saya hanya melangkah melalui program saya. 1071 00:47:51,020 --> 00:47:54,620 >> Tetapi melihat apa yang berlaku seterusnya, secara literal. 1072 00:47:54,620 --> 00:47:56,380 Berikut adalah garis 22. 1073 00:47:56,380 --> 00:48:01,315 Biar saya pergi ke ia, dengan itu beralih hingga 23, dan jika saya mencetak x sekarang, masih satu. 1074 00:48:01,315 --> 00:48:03,890 Dan jika saya mencetak y sekarang, masih satu. 1075 00:48:03,890 --> 00:48:05,820 Jadi ini tidak adalah satu latihan yang berguna. 1076 00:48:05,820 --> 00:48:07,450 Jadi mari kita buat semula ini. 1077 00:48:07,450 --> 00:48:10,069 Biar saya naik semula ke top dan jenis jangka lagi. 1078 00:48:10,069 --> 00:48:12,110 Dan ia berkata program ini yang yang yang debugged 1079 00:48:12,110 --> 00:48:14,109 telah bermula sudah, bermula dari awal. 1080 00:48:14,109 --> 00:48:15,420 Ya, mari kita buat ini lagi. 1081 00:48:15,420 --> 00:48:22,000 Dan kali ini mari kita buat akan datang, akan datang, akan datang, akan datang, akan datang, 1082 00:48:22,000 --> 00:48:24,180 tetapi kini hal-hal yang menarik. 1083 00:48:24,180 --> 00:48:27,760 Sekarang saya mahu melangkah ke swap, jadi saya tidak menaip depan. 1084 00:48:27,760 --> 00:48:34,380 Saya menaip langkah, dan kini menyedarinya telah meningkat saya untuk talian noswap.c 33. 1085 00:48:34,380 --> 00:48:37,240 Jika saya kembali ke gedit, apa talian 33? 1086 00:48:37,240 --> 00:48:40,500 Itu yang pertama sebenar baris kod bahagian dalam swap. 1087 00:48:40,500 --> 00:48:44,150 Yang bagus, kerana sekarang saya boleh jenis mencucuk sekitar dan mendapatkan ingin tahu 1088 00:48:44,150 --> 00:48:46,052 tentang apa yang berlaku benar-benar di sana. 1089 00:48:46,052 --> 00:48:46,760 Biar saya mencetak tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Wah. 1092 00:48:48,800 --> 00:48:51,438 Mengapa tmp mempunyai beberapa gila, nilai sampah palsu? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 PENONTON: Ia belum dimulakan. 1095 00:48:56,120 --> 00:48:57,150 SPEAKER 1: Ia belum dimulakan. 1096 00:48:57,150 --> 00:49:00,270 Dan sesungguhnya, apabila anda menjalankan program, anda diberi sejumlah besar memori 1097 00:49:00,270 --> 00:49:03,392 oleh sistem operasi, tetapi anda tidak dimulakan apa-apa nilai, 1098 00:49:03,392 --> 00:49:05,600 jadi apa sahaja bit anda lihat di sini, walaupun ia 1099 00:49:05,600 --> 00:49:07,770 negatif ini gila besar nombor, hanya bermakna 1100 00:49:07,770 --> 00:49:10,750 bahawa mereka adalah sisa-sisa dari beberapa penggunaan sebelumnya RAM itu, 1101 00:49:10,750 --> 00:49:13,050 walaupun saya tidak mempunyai diri saya diperlukan lagi. 1102 00:49:13,050 --> 00:49:17,086 Jadi sekarang saya akan pergi ke depan dan jenis akan datang, dan jika saya kini taip cetak tmp, 1103 00:49:17,086 --> 00:49:17,835 apa yang perlu saya lihat? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Apa sahaja nilai yang adalah, adalah hujah yang pertama, hanya 1106 00:49:23,360 --> 00:49:25,550 seperti x adalah yang pertama perkara yang diluluskan pada, 1107 00:49:25,550 --> 00:49:30,450 jadi dan x perlu yang sama, jadi tmp mencetak perlu mencetak saya satu. 1108 00:49:30,450 --> 00:49:36,360 >> Jadi apa yang anda akan melihat dalam set masalah tiga adalah tutorial macam pada GDB, 1109 00:49:36,360 --> 00:49:40,020 tetapi sedar bahawa ini adalah permulaan daripada lihat alat yang akan benar-benar 1110 00:49:40,020 --> 00:49:42,774 membantu anda menyelesaikan masalah begitu banyak lebih berkesan. 1111 00:49:42,774 --> 00:49:44,690 Apa yang kita akhirnya akan lakukan pada hari Rabu 1112 00:49:44,690 --> 00:49:48,180 yang mula mengupas kembali beberapa lapisan dan mengeluarkan beberapa roda latihan. 1113 00:49:48,180 --> 00:49:50,496 Itulah rentetan perkara yang dipanggil kita telah menggunakan untuk beberapa waktu, 1114 00:49:50,496 --> 00:49:53,370 kita akan perlahan-lahan mengambil yang jauh daripada anda dan mula bercakap tentang 1115 00:49:53,370 --> 00:49:55,725 sesuatu yang lebih esoterically dikenali sebagai char *, 1116 00:49:55,725 --> 00:49:59,550 tetapi kita akan berbuat baik ini dan perlahan-lahan pada mulanya, walaupun petunjuk, 1117 00:49:59,550 --> 00:50:02,730 kerana mereka dipanggil, boleh melakukan beberapa perkara yang sangat buruk jika disalahgunakan, 1118 00:50:02,730 --> 00:50:06,040 dengan melihat pada claymation sedikit daripada rakan kami Nick Parlante dari Stanford 1119 00:50:06,040 --> 00:50:09,670 University, seorang profesor dalam komputer sains yang meletakkan bersama-sama pralihat ini 1120 00:50:09,670 --> 00:50:11,075 daripada apa yang akan datang Rabu ini. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [VIDEO MAIN SEMULA] 1123 00:50:13,400 --> 00:50:13,900 -Hey, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Bangun. 1126 00:50:15,780 --> 00:50:17,240 Ia adalah masa untuk pointer menyeronokkan. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> -Apa Itu? 1129 00:50:19,350 --> 00:50:21,150 Belajar mengenai petunjuk? 1130 00:50:21,150 --> 00:50:22,050 Oh, goody! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [VIDEO AKHIR MAIN SEMULA] 1133 00:50:23,730 --> 00:50:25,396 SPEAKER 1: Yang menanti anda pada hari Rabu. 1134 00:50:25,396 --> 00:50:26,440 Kami akan melihat anda kemudian. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO MAIN SEMULA] 1136 00:50:27,106 --> 00:50:30,420 -Dan Sekarang, Pemikiran Deep, oleh Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> -Mengapa kita belajar C? 1139 00:50:35,900 --> 00:50:36,785 Mengapa tidak + A? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Ketawa] 1142 00:50:40,910 --> 00:50:42,160 >> [VIDEO AKHIR MAIN SEMULA]