1 00:00:00,000 --> 00:00:12,040 >> [Musik zu spielen] 2 00:00:12,040 --> 00:00:16,460 >> Sprecher 1: Alles klar, das ist CS50, und dies ist der Beginn der vierten Woche, 3 00:00:16,460 --> 00:00:20,420 Und wie Sie vielleicht gehört haben oder zu lesen, hat sich die Welt wurde zu Ende. 4 00:00:20,420 --> 00:00:23,520 Gehen rund um das Internet wurde Wissen und Bewusstsein 5 00:00:23,520 --> 00:00:27,100 eines Fehlers in einem Programm, ein Programmiersprache namens Bash. 6 00:00:27,100 --> 00:00:32,729 Dies wurde wunderbar Marken wie Shellshock oder der Bash-Tür, 7 00:00:32,729 --> 00:00:35,485 aber Artikel wie diese waren nicht selten. 8 00:00:35,485 --> 00:00:38,807 Und in der Tat sind viele von ihnen bringen Erinnerungen an Heartbleed, 9 00:00:38,807 --> 00:00:41,640 die Sie in die bemerkt haben drücken Sie wieder im vergangenen Frühjahr, die 10 00:00:41,640 --> 00:00:43,980 war ebenfalls ziemlich dramatisch. 11 00:00:43,980 --> 00:00:47,110 Nun die von Ihnen hier heute, wie viele von Ihnen haben, 12 00:00:47,110 --> 00:00:50,330 auch wenn Sie nicht verstehen, was es ist alles über, von Shellshock gehört? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Alles klar, und wie viele von euch haben Computer, die anfällig sind? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, sollte es viel, viel mehr Hände sein bis jetzt, aus Gründen, die wir sehen werden. 17 00:01:00,250 --> 00:01:02,580 >> Lassen Sie uns einen Blick an, was nun schon in den Medien 18 00:01:02,580 --> 00:01:05,304 und dann erklären, es ein bisschen hier für uns technisch. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> Sprecher 2: Sicherheitsexperten haben warnte davor, dass ein schwerwiegender Fehler könnte 21 00:01:11,250 --> 00:01:15,650 etwa, um Hunderte von Einfluss Millionen der weltweit Surfer. 22 00:01:15,650 --> 00:01:20,600 Also, was genau ist der Fehler, der gewesen ist Shellshock genannt, und was tut sie? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Nun, Shellshock ist auch bekannt als die Bash Fehler, die Software nutzt es. 25 00:01:28,910 --> 00:01:33,230 Hacker nutzen das Virus zu scannen anfällig Systeme mit Linux und Unix 26 00:01:33,230 --> 00:01:36,300 Betriebssysteme und dann zu infizieren. 27 00:01:36,300 --> 00:01:38,730 Bash ist ein Kommandozeilen-Shell. 28 00:01:38,730 --> 00:01:43,460 Dadurch können Benutzer Befehle an starten Programme und Funktionen in Software 29 00:01:43,460 --> 00:01:45,250 durch Eingabe von Text. 30 00:01:45,250 --> 00:01:49,980 Es ist in der Regel von Programmierern verwendet, und sollten nicht geöffnet werden, um den Rest der Welt, 31 00:01:49,980 --> 00:01:51,590 obwohl Shellshock ändert, dass. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Nun, worringly einige Analysten warnen, es könnte ein größere Bedrohung sein, 34 00:01:57,910 --> 00:02:01,580 weil Shellshock ermöglicht die vollständige Steuerung von einer infizierten Maschine, 35 00:02:01,580 --> 00:02:06,030 wohingegen Heartbleed nur erlaubt, Hacker auf Computer auszuspionieren. 36 00:02:06,030 --> 00:02:09,130 Es ist so ernst, es ist wurde eine 10 bewertet von 10 37 00:02:09,130 --> 00:02:11,900 für die Schwere von der National Vulnerability Database. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 3.2 aller Web-Server sind bei Risiko, darunter auch einige Mac-Computern. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Nun, stellen Sie sicher, Ihre Systeme zu patchen jetzt. 42 00:02:25,600 --> 00:02:29,330 Jeder Hosting einer Website läuft die betroffenen Betriebssysteme 43 00:02:29,330 --> 00:02:31,800 sollten Maßnahmen so bald wie möglich erfolgen. 44 00:02:31,800 --> 00:02:35,390 Wer es sich leisten kann sollte es aussehen zu deren Überwachung und Web-Anwendung 45 00:02:35,390 --> 00:02:37,355 Firewalls, um für etwaige Angriffe achten. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 SPRECHER 3: Das Schlimmste passieren könnte ist, 48 00:02:41,770 --> 00:02:45,080 dass jemand Code schreiben, dass würde automatisch gehen und scannen 49 00:02:45,080 --> 00:02:48,280 das Internet und beeinflussen würden alle Rechner. 50 00:02:48,280 --> 00:02:50,710 Und wenn sie das tun, gut, das Schlimmste, was sie tun könnten, 51 00:02:50,710 --> 00:02:53,300 ist einfach alles zu löschen, oder herunter die Seiten nach unten. 52 00:02:53,300 --> 00:02:55,360 So konnten wir sehen, Schaden von diesem Punkt aus gesehen, 53 00:02:55,360 --> 00:02:58,300 wo wir böswillige Menschen haben , die nur entscheiden, um Chaos verursachen 54 00:02:58,300 --> 00:03:02,534 indem Systeme nach unten oder Löschen Dateien und solche Dinge. 55 00:03:02,534 --> 00:03:05,200 Sprecher 2: Einige sagen, das ist eine der am schwierigsten zu mess 56 00:03:05,200 --> 00:03:08,080 Fehler in Jahren, und es kann Wochen dauern oder sogar 57 00:03:08,080 --> 00:03:10,820 Monate, um festzustellen, seine endgültige Wirkung. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> Sprecher 1: Also all das ist wahr, aber der Spass an der Sache ist, die fast alle 60 00:03:15,560 --> 00:03:18,330 der Bilder die Sie gerade gesehen haben, außer vielleicht der Tastatur, 61 00:03:18,330 --> 00:03:20,930 hat nichts damit zu tun, der Fehler auch immer. 62 00:03:20,930 --> 00:03:23,960 Server und Leitungen usw., Es ist eine Art tangential bezogen, 63 00:03:23,960 --> 00:03:27,410 aber im Kern ist es eigentlich ziemlich vertraut, was ist denn hier los. 64 00:03:27,410 --> 00:03:30,050 In der Tat, lassen Sie mich in zu gehen unsere CS50-Appliance. 65 00:03:30,050 --> 00:03:32,910 Lassen Sie mich gehen Sie vor und maximieren das Terminal-Fenster hier. 66 00:03:32,910 --> 00:03:36,020 Und euch habe mit diesem, oder die Embedded-Version davon, 67 00:03:36,020 --> 00:03:39,460 in gedit, um Programme zu schreiben, Befehle eingeben kann, und so weiter, 68 00:03:39,460 --> 00:03:43,690 und dies ist tatsächlich, und hat seit Wochen, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Dies ist die Bourne-again shell, Das ist nur eine andere Art zu sagen, 70 00:03:46,890 --> 00:03:50,220 Dies ist ein Programm, das eine hat blinkt Aufforderung effektiv, 71 00:03:50,220 --> 00:03:51,970 dass sitzt da und wartet für die Eingabe für Sie. 72 00:03:51,970 --> 00:03:53,920 Und es ist der Befehl Zeilenschnittstelle, über die 73 00:03:53,920 --> 00:03:57,650 Sie Jungs haben läuft Befehle und schließlich der Zusammenstellung und dann läuft 74 00:03:57,650 --> 00:03:58,400 Programme. 75 00:03:58,400 --> 00:04:01,320 >> Aber ist auch ein Bash-Programmierung Sprache im folgenden Sinn. 76 00:04:01,320 --> 00:04:05,460 Sie wissen, dass es Befehle wie cd und ls und auch klirren und andere, 77 00:04:05,460 --> 00:04:09,580 aber Sie können Ihre eigene Befehle definieren durch Umsetzung in Bash. 78 00:04:09,580 --> 00:04:11,420 Jetzt sind wir es nicht gewohnt, gehen sehr ins Detail 79 00:04:11,420 --> 00:04:16,089 um die Programmiersprache Bash, aber weiß zum Beispiel, dass in dem Moment, 80 00:04:16,089 --> 00:04:17,607 es gibt keinen Befehl namens "Hallo." 81 00:04:17,607 --> 00:04:19,440 So kann gefunden werden, eines dieser Pakete. 82 00:04:19,440 --> 00:04:20,856 Es ist nicht auf meinem Computer installiert. 83 00:04:20,856 --> 00:04:21,870 Fragen Sie Ihren Administrator. 84 00:04:21,870 --> 00:04:26,030 Aber wenn ich es, ein Programm zu sein, als "Hallo" in der Bash oder auf meine Aufforderung, 85 00:04:26,030 --> 00:04:30,810 Ich kann tatsächlich nutzen Syntax Das ist ganz wie C. Es ist nicht ganz das gleiche, 86 00:04:30,810 --> 00:04:35,020 aber es ist ziemlich ähnlich sieht ein Funktion, wenn auch einige Details fehlen. 87 00:04:35,020 --> 00:04:38,090 Nichts scheint zu geschehen, aber jetzt, wenn ich schreibe "Hallo" 88 00:04:38,090 --> 00:04:40,960 Sie können tatsächlich schreib eine Programm, nicht in C, nicht in Java, 89 00:04:40,960 --> 00:04:44,280 nicht in einer anderen Programmiersprache Sprache, aber in der Bash selbst. 90 00:04:44,280 --> 00:04:47,630 >> Jetzt ist hier der Schlüssel, dass ich schrieb der Name, den ich wollte diesen neuen Befehl zu geben, 91 00:04:47,630 --> 00:04:50,820 und die Klammern sind auch Symbolisch dafür eine Funktion. 92 00:04:50,820 --> 00:04:54,010 Nebenbei können Sie auch Spaß machen Dinge, und in der Tat, auch auf Mac OS, 93 00:04:54,010 --> 00:04:55,620 Dies ist ein Programm namens Klemme. 94 00:04:55,620 --> 00:04:58,800 Es kommt in jeder der integrierten Computer, der einen Mac in diesem Raum hat, 95 00:04:58,800 --> 00:05:03,640 und Sie ähnliche Dinge in Mac tun können OS, aber Sie können mehr darüber hinausgehen. 96 00:05:03,640 --> 00:05:07,110 Und das ist ein wenig tangential, aber es ist eine Art von Spaß. 97 00:05:07,110 --> 00:05:09,715 Ich wurde heute Morgen daran erinnert, wenn man dies durch, 98 00:05:09,715 --> 00:05:13,279 von einem kleinen Spiel, das ich verwendet, um zu spielen mit einem der CS50 ehemaligen TFs 99 00:05:13,279 --> 00:05:16,570 wobei jede Mal, wenn er weg von zu Fuß würde seine Tastatur mit seinem Bildschirm entsperrt, 100 00:05:16,570 --> 00:05:23,611 Ich würde einen Befehl auszuführen wie this-- "Hallo sagen." 101 00:05:23,611 --> 00:05:26,610 Und jetzt keine Zeit, kam er zurück sein Tastatur, nachdem ich den Bildschirm gelöscht 102 00:05:26,610 --> 00:05:27,985 und er würde sich hinsetzen, versuchen, einige Arbeit zu tun, 103 00:05:27,985 --> 00:05:29,250 Liste den Inhalt seiner directory-- 104 00:05:29,250 --> 00:05:29,510 >> [AUDIO PLAYBACK] 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 Hallo. 108 00:05:32,120 --> 00:05:35,030 >> Sprecher 1: Also, in Fairness, es war nicht wirklich "Hallo." 109 00:05:35,030 --> 00:05:36,894 Es war in der Regel etwas verwandter dass-- 110 00:05:36,894 --> 00:05:37,560 [AUDIO PLAYBACK] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 Sprecher 1: --that ich would-- so würde seinen Computer 113 00:05:39,320 --> 00:05:42,170 schwören auf ihn jederzeit er tatsächlich saß an seiner Tastatur nach unten. 114 00:05:42,170 --> 00:05:46,265 Und sehr schnell dachte er nicht zu verlassen, seinen Bildschirm entsperrt. 115 00:05:46,265 --> 00:05:48,730 Dies weist jedoch den Sortier dummer Spaß, dass Sie 116 00:05:48,730 --> 00:05:50,210 kann mit so etwas wie Bash haben. 117 00:05:50,210 --> 00:05:52,770 Aber es ist ein wenig mehr ernst, um sicher zu sein, als die. 118 00:05:52,770 --> 00:05:57,235 Und in der Tat ist eine der diese gefährlichsten und lang anhaltende Bugs 119 00:05:57,235 --> 00:05:58,860 das hat wirklich die Welt global getroffen. 120 00:05:58,860 --> 00:06:02,060 Dieser Bug herum gewesen seit rund 20 Jahren 121 00:06:02,060 --> 00:06:05,780 und Sie werden in nur getroffen werden, Moment durch seine relative Einfachheit. 122 00:06:05,780 --> 00:06:07,990 >> Das ist also ein Vertreter befehlen, dass, wenn Sie 123 00:06:07,990 --> 00:06:10,448 besitzen einen Mac, wörtlich jetzt wenn Sie Ihre Deckel geöffnet haben, 124 00:06:10,448 --> 00:06:12,940 Sie können versuchen, die Eingabe in das Programm namens Terminal entfernt. 125 00:06:12,940 --> 00:06:15,410 Terminal ist unter Anwendungen Utilities-- 126 00:06:15,410 --> 00:06:18,790 Für einmal haben Windows-Benutzer nicht Sorgen über diese besondere threat-- 127 00:06:18,790 --> 00:06:22,310 aber diejenigen von Ihnen mit Macs kann schreiben dies in einem Fenster wie ich hier zu tun, 128 00:06:22,310 --> 00:06:24,210 und wenn Sie geben dass in das Programm 129 00:06:24,210 --> 00:06:28,830 genannt Klemme, so wie ich jetzt tun werde, wenn Sie das Wort "verwundbar" 130 00:06:28,830 --> 00:06:32,200 Ihr Computer anfällig für Ausbeutung. 131 00:06:32,200 --> 00:06:33,850 >> Nun, was bedeutet das eigentlich? 132 00:06:33,850 --> 00:06:35,870 Und das ist zugegebenermaßen einige ziemlich verrückte Syntax, 133 00:06:35,870 --> 00:06:39,050 aber lassen Sie uns wenigstens ziehen einige der interessanten Aspekte. 134 00:06:39,050 --> 00:06:42,567 Also, es gibt einige, die Syntax sieht ein wenig vertraut ist, zumindest aus C 135 00:06:42,567 --> 00:06:43,950 und Programmierung im Allgemeinen. 136 00:06:43,950 --> 00:06:47,550 Ich sehe einige Klammern, Semikolons, geschweiften Klammern, und solche, 137 00:06:47,550 --> 00:06:50,820 aber es stellt sich heraus, dass diese dumme Sache hier in gelb 138 00:06:50,820 --> 00:06:53,580 ist im Wesentlichen eine Funktion das macht nichts. 139 00:06:53,580 --> 00:06:57,840 Der Doppelpunkt Mittel nichts tun, und die Semikolon bedeutet aufhören, nichts zu tun. 140 00:06:57,840 --> 00:07:00,250 Also innerhalb von diesen geschweiften Klammern, die Tatsache, 141 00:07:00,250 --> 00:07:02,440 dass ich eine gleich Zeichen links, diese 142 00:07:02,440 --> 00:07:05,500 ist im Wesentlichen die Schaffung ein Befehl oder eine Variable, 143 00:07:05,500 --> 00:07:09,520 x bezeichnet, zugeordnet wird dass gelb Stück Code gibt. 144 00:07:09,520 --> 00:07:14,040 Das könnte so etwas wie "Echo sein hallo "oder" sagen Piepton "oder etwas 145 00:07:14,040 --> 00:07:15,120 die derjenigen. 146 00:07:15,120 --> 00:07:17,780 Beachten Sie aber, wenn Sie Ihre Augen wandern weiter nach rechts, 147 00:07:17,780 --> 00:07:22,150 es gibt mehr zu dieser Linie als nur das Ende dieser Semikolon. 148 00:07:22,150 --> 00:07:25,160 "Echo anfällig", und dann darüber hinaus gibt es noch mehr. 149 00:07:25,160 --> 00:07:26,530 Ein weiteres Semikolon, bash-c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> So lange Rede kurzer Sinn, Diese Codezeile ist 152 00:07:34,050 --> 00:07:36,660 ausreichend für überzeugende ein Computer, ist 153 00:07:36,660 --> 00:07:39,830 anfällig für etwas zu tun dass Sie es tun wollen, 154 00:07:39,830 --> 00:07:44,290 denn es ist ein Bug in der Bash, wobei obwohl Bash sollte aufhören 155 00:07:44,290 --> 00:07:48,980 Lesen Linien Befehl rechts es nach dem gelben Text, 156 00:07:48,980 --> 00:07:52,520 für eine 20-plus-jährigen Bug, Bash wurde tatsächlich lesen 157 00:07:52,520 --> 00:07:56,780 darüber hinaus Semikolon und hübsch viel zu tun, was ihm gesagt wird. 158 00:07:56,780 --> 00:07:59,070 >> Also, was ist die Implikation der, dass letztlich? 159 00:07:59,070 --> 00:08:01,340 Ich sagte nur: "echo hallo" oder "echo anfällig", 160 00:08:01,340 --> 00:08:05,449 aber was, wenn Sie etwas getan tatsächlich bösartig, wie rm-rf *, 161 00:08:05,449 --> 00:08:07,240 die Sie vielleicht nicht je zuvor eingegeben haben, 162 00:08:07,240 --> 00:08:08,920 und ehrlich gesagt werden Sie wahrscheinlich sollte nicht zu früh, 163 00:08:08,920 --> 00:08:10,700 weil Sie ein tun können Menge Schaden mit sich. 164 00:08:10,700 --> 00:08:11,210 Warum? 165 00:08:11,210 --> 00:08:12,990 rm tut, was natürlich? 166 00:08:12,990 --> 00:08:14,270 Entfernt. 167 00:08:14,270 --> 00:08:15,930 * Bedeutet was? 168 00:08:15,930 --> 00:08:16,430 Alle. 169 00:08:16,430 --> 00:08:18,180 Es ist also eine so genannte Joker, so bedeutet 170 00:08:18,180 --> 00:08:20,410 alles löschen in das aktuelle Verzeichnis. 171 00:08:20,410 --> 00:08:23,379 r geschieht, bedeutet rekursiv, was bedeutet, wenn das, was Sie löschen 172 00:08:23,379 --> 00:08:26,420 ist ein Verzeichnis, und im Inneren von dort ist andere Dateien und andere Verzeichnisse, 173 00:08:26,420 --> 00:08:28,950 rekursiv tauchen ein in es und löschen Sie das alles. 174 00:08:28,950 --> 00:08:31,040 Und f ist die schlimmste von allen. 175 00:08:31,040 --> 00:08:32,580 Wer weiß, was f bedeutet hier? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Kraft. 178 00:08:34,360 --> 00:08:37,830 So zwingen Mittel, auch ob dies eine schlechte Idee, 179 00:08:37,830 --> 00:08:40,939 tun es ohne mich aufgefordert für eine weitere Bestätigung. 180 00:08:40,939 --> 00:08:43,230 Also, wissen Sie, lachen wir über , aber ehrlich gesagt, hätte ich wahrscheinlich 181 00:08:43,230 --> 00:08:44,972 Geben Sie diese mehrfach am Tag, weil die Realität 182 00:08:44,972 --> 00:08:47,210 ist, es ist der schnellste Weg, löschen Sie eine ganze Reihe von Sachen. 183 00:08:47,210 --> 00:08:48,590 Aber auch ich habe einige Schäden getan. 184 00:08:48,590 --> 00:08:53,100 >> Aber wenn Sie einen Computer auszutricksen waren in der Definition einige dumme Variable 185 00:08:53,100 --> 00:08:56,810 oder Funktion namens x, aber dann trickst den Computer in der Ausführung 186 00:08:56,810 --> 00:09:00,030 jenseits der Grenzen, dass Funktion, darüber hinaus Semikolon, 187 00:09:00,030 --> 00:09:04,430 Sie könnte in der Tat verleiten einen Computer Ausführung in etwas wie rm-rf 188 00:09:04,430 --> 00:09:07,810 oder die E-Mail-Befehl oder den Befehl Kopieren. 189 00:09:07,810 --> 00:09:11,400 Alles, was Sie mit dem buchstäblich tun können Computer, ob es sich um das Löschen von Dateien, 190 00:09:11,400 --> 00:09:15,350 Erstellen von Dateien, Spamming jemand, Angriff auf einige Server remote, 191 00:09:15,350 --> 00:09:17,190 wenn man es so ausdrücken mit einem Befehl, können Sie 192 00:09:17,190 --> 00:09:19,120 können einen Computer in das Tun, dass Trick. 193 00:09:19,120 --> 00:09:21,510 >> Nun, was ist ein Beispiel für wie Sie dies tun? 194 00:09:21,510 --> 00:09:24,300 Nun, es gibt eine Menge von Computern im Internet läuft Bash. 195 00:09:24,300 --> 00:09:26,390 Alle von uns Mac-Anwender sind unter ihnen. 196 00:09:26,390 --> 00:09:30,390 Viele Linux-Server sind unter sie als gut und Unix-Servern. 197 00:09:30,390 --> 00:09:32,630 Fenster wieder bekommt relativ aus dem Schneider 198 00:09:32,630 --> 00:09:34,590 es sei denn, Sie installiert haben spezielle Software. 199 00:09:34,590 --> 00:09:37,130 Jetzt eine Menge von Servern, für So laufen Web-Server, 200 00:09:37,130 --> 00:09:39,840 und in der Tat Linux ist vielleicht beliebteste Betriebssystem 201 00:09:39,840 --> 00:09:43,060 auf den Computern im Internet laufen , das im Dienste werden Web-Seiten. 202 00:09:43,060 --> 00:09:44,910 Nun, wie wir später sehen in dem Semester, wenn 203 00:09:44,910 --> 00:09:48,470 Sie senden eine Anfrage von Ihre browser-- Chrome, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- auf einem Remote-Server, 205 00:09:50,790 --> 00:09:53,730 es stellt sich heraus, dass, obwohl Sie gerade eingegeben www.example.com, 206 00:09:53,730 --> 00:09:59,590 Ihr Browser das Senden einer Nachricht das ist ein wenig mehr geheimnisvoll, wie diese. 207 00:09:59,590 --> 00:10:01,239 >> Beachten Sie aber, ein wenig etwas seltsam. 208 00:10:01,239 --> 00:10:03,030 Die ersten beiden Zeilen Ich habe noch nie gesehen, 209 00:10:03,030 --> 00:10:04,904 aber sie sehen nicht besonders bedrohlich. 210 00:10:04,904 --> 00:10:08,030 Beachten Sie aber, was ich gestohlen für die dritte Zeile hier. 211 00:10:08,030 --> 00:10:13,390 Wenn ein Angreifer waren, um eine Nachricht zu senden wie dies von seinem Computer 212 00:10:13,390 --> 00:10:17,270 zu einer gefährdeten Mac oder ein anfällig Linux-Server 213 00:10:17,270 --> 00:10:21,580 Die lustige Sache ist, dass Bash, dass kleine, einfache Eingabeaufforderung 214 00:10:21,580 --> 00:10:27,450 ist allgegenwärtig und oft gebrauchte wesentlichen ausführen 215 00:10:27,450 --> 00:10:30,020 Die Inhalte eines Nachricht, die er empfängt. 216 00:10:30,020 --> 00:10:33,490 Und von dieser Logik, können Sie Trick einen Web-Server, damit 217 00:10:33,490 --> 00:10:36,370 durch etwas wie das Senden User-Agent, die in der Regel 218 00:10:36,370 --> 00:10:38,300 soll das sagen nennen Ihres Browsers. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent-Internet Explorer, Firefox User-Agent, diese 220 00:10:42,420 --> 00:10:44,590 ist nur Ihre Browser- Verfahren zur Identifizierung selber. 221 00:10:44,590 --> 00:10:46,605 Aber wenn ein schlechter Kerl sehr Geschickt sagt, mm-mm, bin ich 222 00:10:46,605 --> 00:10:47,930 nicht, Ihnen zu sagen was mein Browser ist, 223 00:10:47,930 --> 00:10:50,888 Ich werde Ihnen stattdessen diese senden kryptisch aussehendes Ding mit einem rm-rf 224 00:10:50,888 --> 00:10:55,840 * In ihm, können Sie buchstäblich ein Trick anfällig Webserver im Internet 225 00:10:55,840 --> 00:10:59,055 in genau diese Ausführung in es zum Löschen aller Dateien. 226 00:10:59,055 --> 00:11:00,930 Und ehrlich gesagt, das ist nicht sogar das Schlimmste. 227 00:11:00,930 --> 00:11:01,763 Sie können nichts tun. 228 00:11:01,763 --> 00:11:04,480 Sie könnten beginnen eine verteilte Denial-of-Service-Angriff 229 00:11:04,480 --> 00:11:07,030 Wenn Sie diese Nachricht gesendet Ganze Trauben von Web-Servern 230 00:11:07,030 --> 00:11:10,256 und hatte dann steigen sie alle, für beispielsweise auf Harvard.edu Servern 231 00:11:10,256 --> 00:11:12,130 und Sie können von Bang sortieren das Heck aus ihnen 232 00:11:12,130 --> 00:11:15,490 durch einen Netzwerkverkehr, war sonst durch diese Bösewicht ausgelöst. 233 00:11:15,490 --> 00:11:18,760 >> Also, lange Rede kurzer Sinn, fast jeder in diesem Raum, die einen Mac besitzt 234 00:11:18,760 --> 00:11:20,240 ist anfällig für diese. 235 00:11:20,240 --> 00:11:24,100 Der Silberstreif am Horizont ist, dass es sei denn, du bist einen Web-Server auf Ihrem Laptop, 236 00:11:24,100 --> 00:11:27,780 und wenn Sie tatsächlich konfiguriert haben es so etwas wie SSH in sie zu ermöglichen, 237 00:11:27,780 --> 00:11:28,670 Sie sind wirklich sicher. 238 00:11:28,670 --> 00:11:31,710 Es ist verletzlich, aber es gibt keine ein Versuch, in den Laptop zu bekommen, 239 00:11:31,710 --> 00:11:33,290 so können Sie sicher sein, Art. 240 00:11:33,290 --> 00:11:36,210 Allerdings wird Apple bald erneuern, ein Update für das. 241 00:11:36,210 --> 00:11:39,660 Die Welt von Linux bereits freigegeben hat eine Reihe von Updates für Fedora und Ubuntu 242 00:11:39,660 --> 00:11:43,790 und anderen Versionen von Linux, und in der Tat Wenn Sie Update 50 in das Gerät laufen, 243 00:11:43,790 --> 00:11:45,930 sogar, dass auch sein aktualisiert und korrigiert. 244 00:11:45,930 --> 00:11:47,764 Aber auch das hat nicht wirklich gefährdet gewesen, 245 00:11:47,764 --> 00:11:49,804 weil, wenn du hast mit dem Gerät gebastelt 246 00:11:49,804 --> 00:11:52,770 und machte Ihren Laptop öffentlich über das Internet, die nicht zugänglich ist 247 00:11:52,770 --> 00:11:54,910 standardmäßig, Sie haben eigentlich schon in Ordnung, weil 248 00:11:54,910 --> 00:11:56,890 der Firewall und andere Techniken. 249 00:11:56,890 --> 00:12:01,000 >> Aber es ist ein extremes Beispiel für einen Fehler dass wir für für buchstäblich 20 gelebt haben 250 00:12:01,000 --> 00:12:04,050 Jahre, und wer weiß, wenn jemand all dieser Zeit hat es gewusst? 251 00:12:04,050 --> 00:12:06,300 Und in der Tat ist einer dieser die grundlegenden Herausforderungen 252 00:12:06,300 --> 00:12:08,690 dass wir in der später sehen Semester über Sicherheit, 253 00:12:08,690 --> 00:12:13,020 ist, dass genau wie in der realen Welt, die Guten sind in der Nachteil. 254 00:12:13,020 --> 00:12:16,500 Um die bösen Jungs draußen zu halten, müssen wir stellen Sie sicher, dass jede Tür abgeschlossen ist, 255 00:12:16,500 --> 00:12:20,340 dass jedes Fenster ist sicher, dass jeder Punkt der Einreise in ein Heim 256 00:12:20,340 --> 00:12:21,980 sicher ist, die bösen Jungs draußen zu halten. 257 00:12:21,980 --> 00:12:26,870 Aber was hat der Bösewicht muss tun, um tatsächlich Kompromisse zu Hause 258 00:12:26,870 --> 00:12:28,200 und stehlen von Ihnen? 259 00:12:28,200 --> 00:12:32,574 Er oder sie muss nur einen entsperrten finden Tür, ein zerbrochenes Fenster, oder etwas 260 00:12:32,574 --> 00:12:35,240 in diese Richtung, und es ist das elbe in Computer-Sicherheit. 261 00:12:35,240 --> 00:12:37,660 Wir können Millionen von schreiben Zeilen Programmcode 262 00:12:37,660 --> 00:12:40,570 und verbringen Hunderte oder Tausende von Stunden damit es richtig zu bekommen, 263 00:12:40,570 --> 00:12:43,370 aber wenn man nur eine machen Fehler in der Korrektheit, 264 00:12:43,370 --> 00:12:47,030 Sie können das gesamte System setzen und in der Tat in diesem Fall das gesamte Internet 265 00:12:47,030 --> 00:12:48,660 und Welt in Gefahr. 266 00:12:48,660 --> 00:12:51,950 >> Also, wenn Sie möchten, um mehr zu erfahren über diese, zu dieser URL finden Sie hier. 267 00:12:51,950 --> 00:12:54,450 Es gibt keine Notwendigkeit für Maßnahmen heute Abend, es sei denn du bist 268 00:12:54,450 --> 00:12:57,116 unter denen, mehr Komfort, dass wurden Ihre eigenen Bahnlauf 269 00:12:57,116 --> 00:12:59,810 Server, in diesem Fall sollten Sie, in der Tat, aktualisieren Sie Ihre Software. 270 00:12:59,810 --> 00:13:03,244 >> Und auch dies ist der Titel des eine Rede, und jetzt ein Papier, 271 00:13:03,244 --> 00:13:05,410 dass wir auf dem verknüpft haben Website natürlich für heute. 272 00:13:05,410 --> 00:13:07,600 Es war von einem anderen namens Ken Thompson, der 273 00:13:07,600 --> 00:13:10,120 wurde die Annahme einer sehr berühmt Auszeichnung in der Informatik, 274 00:13:10,120 --> 00:13:13,495 und er gab diese Rede einige Jahre vor, im Wesentlichen auf dem gleichen Thema. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Fragen die Leute die Frage, Sollten Sie wirklich 277 00:13:20,520 --> 00:13:23,480 Vertrauen, letztlich die Software Sie schon gegeben? 278 00:13:23,480 --> 00:13:26,100 Zum Beispiel, wir haben alle wurden Programme schreiben, 279 00:13:26,100 --> 00:13:27,820 und wir haben die Erstellung sie mit Clang. 280 00:13:27,820 --> 00:13:31,830 Und Ihr Wissen haben Sie geschrieben alle Programme für CS50, wo es 281 00:13:31,830 --> 00:13:35,310 eine Hintertür der Art, ist auch ein Weg dass ein schlechter Kerl, wenn Ihr Programm, 282 00:13:35,310 --> 00:13:37,410 könnte über Ihren Computer übernehmen? 283 00:13:37,410 --> 00:13:38,310 Wahrscheinlich nicht, oder? 284 00:13:38,310 --> 00:13:40,180 Mario, und gierig, und Credit. 285 00:13:40,180 --> 00:13:41,680 Diese sind alle ziemlich kleine Programme. 286 00:13:41,680 --> 00:13:43,910 Sie müssten schön sein schlecht, wenn Sie tatsächlich 287 00:13:43,910 --> 00:13:47,310 machte den ganzen Computer anfällig nach dem Schreiben 10 oder 20 Zeilen Code, 288 00:13:47,310 --> 00:13:49,690 oder zumindest nicht bewusst einige der Auswirkungen auf die Sicherheit. 289 00:13:49,690 --> 00:13:52,023 Jetzt sage ich, dass scherzhaft, aber wir werden heute zu sehen 290 00:13:52,023 --> 00:13:54,600 und in dieser Woche ist es eigentlich wirklich, wirklich einfach 291 00:13:54,600 --> 00:13:57,980 schlecht zu sein und auch Kurzprogramme anfällig. 292 00:13:57,980 --> 00:14:02,880 >> Aber für jetzt, zumindest, erkennen , dass die Frage, die hier gefragt 293 00:14:02,880 --> 00:14:04,850 Clang ist etwa in einem Compiler. 294 00:14:04,850 --> 00:14:08,360 Warum haben wir vertrauensvolle Clang für die letzten zwei oder drei Wochen? 295 00:14:08,360 --> 00:14:12,650 Wer zu sagen, dass wer auch immer schrieb Clang ist nicht eine "if" Bedingung dort haben 296 00:14:12,650 --> 00:14:17,680 dass im Wesentlichen injiziert einige Nullen und Einsen in jedem Programm kompiliert 297 00:14:17,680 --> 00:14:21,180 das würde lassen ihn oder sie Zugang Ihren Computer, wenn Sie schlafen 298 00:14:21,180 --> 00:14:23,580 und Ihr Laptop-Deckel ist geöffnet und Ihr Computer läuft? 299 00:14:23,580 --> 00:14:24,080 Oder? 300 00:14:24,080 --> 00:14:28,350 Wir haben diese Art von Ehre-System rechts Jetzt, wo wir vertrauen darauf, dass Clang ist echt. 301 00:14:28,350 --> 00:14:30,000 Sie vertrauen darauf, dass das Gerät echt. 302 00:14:30,000 --> 00:14:34,430 Sie vertrauen darauf, dass buchstäblich jedes Programm auf Ihrem Mac oder PC vertrauenswürdig ist. 303 00:14:34,430 --> 00:14:37,510 Und als diese einfache Fehler vermuten lässt, auch wenn es nicht bösartig, 304 00:14:37,510 --> 00:14:40,580 Das ist absolut nicht wahrscheinlich der Fall sein wird. 305 00:14:40,580 --> 00:14:42,350 >> So sollten Sie Angst, wie die Hölle sein. 306 00:14:42,350 --> 00:14:45,560 Ehrlich gesagt, gibt es keine einfache Lösung für dieses andere 307 00:14:45,560 --> 00:14:48,185 als eine Art gesellschaftliche Bewusstsein der zunehmenden Komplexität 308 00:14:48,185 --> 00:14:50,310 dass wir auf den Bau unsere EDV-Systeme, 309 00:14:50,310 --> 00:14:53,740 und wie immer anfälliger wir könnten sehr gut sein. 310 00:14:53,740 --> 00:14:55,570 >> Jetzt mit dieser sagte, Breakout. 311 00:14:55,570 --> 00:14:59,889 Breakout ist so eingestellt Problem drei, und Breakout ist ein Spiel von gestern 312 00:14:59,889 --> 00:15:02,180 dass Sie sich vielleicht erinnern, aber für uns in Frage stellte drei, 313 00:15:02,180 --> 00:15:04,450 es erlaubt uns, nehmen die Dinge wieder eine Kerbe 314 00:15:04,450 --> 00:15:08,880 so dass, wenn wir Programme schreiben, auch in einem Terminal-Fenster wie dieses, 315 00:15:08,880 --> 00:15:14,670 wir tatsächlich laufen letztlich grafische Programme nicht 316 00:15:14,670 --> 00:15:17,800 anders als die, die wir hatten Zugriff auf die im Scratch. 317 00:15:17,800 --> 00:15:20,910 Das ist also der Mitarbeiter Umsetzung der Breakout, 318 00:15:20,910 --> 00:15:23,930 Das ist gerade das Mauerbruch Spiel, dass Sie Ihr Paddel wieder bewegen 319 00:15:23,930 --> 00:15:27,590 und her, und du den Ball zu schlagen gegen die bunten Steine ​​bis oben. 320 00:15:27,590 --> 00:15:30,020 Also das bringt uns Art zurück, wo 321 00:15:30,020 --> 00:15:33,180 Wir waren in der Lage, sehr schnell mit Scratch, und jetzt mit C, 322 00:15:33,180 --> 00:15:35,800 die Umsetzung unserer eigenen grafische Benutzeroberflächen. 323 00:15:35,800 --> 00:15:38,960 >> Aber mehr als das, diese Problem stellt der erste Satz 324 00:15:38,960 --> 00:15:41,000 , in dem wir geben Sie sind ein Haufen von Code. 325 00:15:41,000 --> 00:15:43,940 Und in der Tat, ich bringe explizite die Aufmerksamkeit auf das, weil vor allem 326 00:15:43,940 --> 00:15:47,090 für die weniger komfortabel, diese Problem eingestellt, zumindest auf den ersten Blick 327 00:15:47,090 --> 00:15:49,170 wird sich wie fühlen wir eine Kerbe genommen haben oben. 328 00:15:49,170 --> 00:15:51,540 Weil wir euch gegeben, Für einige der Such 329 00:15:51,540 --> 00:15:54,930 und Sortierprobleme in der pSoll, ein Haufen von Code, den wir geschrieben, 330 00:15:54,930 --> 00:15:56,680 und ein paar Kommentare sagen "zu tun" 331 00:15:56,680 --> 00:15:58,221 wo man bis in die Lücken zu füllen. 332 00:15:58,221 --> 00:16:00,020 Also nicht zu gruselig, aber es ist das erste Mal, 333 00:16:00,020 --> 00:16:03,370 wir Gabe Sie Code, den Sie brauchen zuerst lesen, zu verstehen und dann zu addieren 334 00:16:03,370 --> 00:16:04,290 und füllen Sie es. 335 00:16:04,290 --> 00:16:05,940 >> Und dann mit Breakout, wir werden das gleiche tun, 336 00:16:05,940 --> 00:16:08,740 geben Sie ein paar Dutzend mehr Linien Code, der, ehrlich gesagt, geben Sie 337 00:16:08,740 --> 00:16:11,490 eine Menge von dem Rahmen für das Spiel, aber halt 338 00:16:11,490 --> 00:16:14,304 der Umsetzung der Steine und die Kugel und die Paddel, 339 00:16:14,304 --> 00:16:15,970 aber wir haben einige andere Features zu implementieren. 340 00:16:15,970 --> 00:16:18,280 Und auch, dass auf den ersten Blick wieder vor allem, wenn weniger komfortabel, 341 00:16:18,280 --> 00:16:21,480 vielleicht besonders entmutigend und Sie denken, es gibt so viele neue Funktionen 342 00:16:21,480 --> 00:16:24,070 Sie, Ihre Meinung zu wickeln müssen um, und das ist wahr. 343 00:16:24,070 --> 00:16:26,281 Aber bedenken Sie, es ist ganz wie Scratch. 344 00:16:26,281 --> 00:16:28,780 Chancen sind Sie nicht alle verwenden die Puzzleteile in Scratch. 345 00:16:28,780 --> 00:16:31,120 Chancen sind Sie nicht darauf zu wickeln Ihre Meinung rund um alle von ihnen 346 00:16:31,120 --> 00:16:33,617 weil alle dauerte es war ein schnellen Blick zu verstehen, oh, 347 00:16:33,617 --> 00:16:35,450 das ist, was ich tun kann mit diesem Puzzle-Stück. 348 00:16:35,450 --> 00:16:38,260 Und in der Tat, in Problem eingestellt 3 spec, werden wir Sie darauf hinweisen 349 00:16:38,260 --> 00:16:41,370 bei der Dokumentation, dass Will stellen Ihnen einige neue Funktionen, 350 00:16:41,370 --> 00:16:43,570 und schließlich die Programmier Konstrukte, die Sie verwenden. 351 00:16:43,570 --> 00:16:47,610 Bedingungen, Schleifen, Variablen und Funktionen 352 00:16:47,610 --> 00:16:50,720 identisch zu sein, was wir bisher gesehen. 353 00:16:50,720 --> 00:16:53,560 >> Also in der Tat, was wir geben Sie einige Beispiel-Code ist, dass 354 00:16:53,560 --> 00:16:56,110 lässt Sie ein Fenster erstellen das sieht nicht anders als diese, 355 00:16:56,110 --> 00:16:59,540 und schließlich machen es zu etwas ganz wie diese. 356 00:16:59,540 --> 00:17:02,250 So profitieren Sie von CS50, diskutieren Bürozeiten und mehr, 357 00:17:02,250 --> 00:17:05,290 und Trost in der Tatsache, dass die Menge an Code, den Sie haben, zu schreiben 358 00:17:05,290 --> 00:17:06,760 ist eigentlich gar nicht so viel. 359 00:17:06,760 --> 00:17:10,359 Die erste Herausforderung ist nur zu akklimatisieren Sie sich eine Code haben wir geschrieben. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Sie haben Fragen zu pset3, Shellshock, oder anders? 362 00:17:15,810 --> 00:17:19,226 >> ZIELGRUPPE: Es schien, als durch mit Breakout 363 00:17:19,226 --> 00:17:22,154 dass der Code fast eine objektorientierte Stil, 364 00:17:22,154 --> 00:17:24,675 aber ich dachte, war ein C objektorientierten Programms. 365 00:17:24,675 --> 00:17:26,050 Sprecher 1: Eine ausgezeichnete Frage. 366 00:17:26,050 --> 00:17:28,258 So in der Suche durch die Verteilung Code, der Code 367 00:17:28,258 --> 00:17:30,180 wir pset3 schrieb, für diejenigen, vertraut, es 368 00:17:30,180 --> 00:17:32,230 sieht aus wie es ist ein wenig objektorientiert. 369 00:17:32,230 --> 00:17:33,800 Kurze Antwort ist, es ist. 370 00:17:33,800 --> 00:17:38,130 Es ist eine Annäherung, wie Sie möglicherweise mit objektorientierten Code zu tun 371 00:17:38,130 --> 00:17:41,850 eine Sprache wie C, aber es ist noch letztlich Verfahrens. 372 00:17:41,850 --> 00:17:44,900 Es sind keine Methoden innerhalb der die Variablen, wie Sie sehen werden. 373 00:17:44,900 --> 00:17:46,180 Es ist aber erinnert, daß. 374 00:17:46,180 --> 00:17:48,780 Und wir werden diese Funktion wieder zu sehen wenn wir in PHP und JavaScript zu erhalten 375 00:17:48,780 --> 00:17:49,946 gegen Ende des Semesters. 376 00:17:49,946 --> 00:17:53,667 Aber jetzt halten sie für ein Hauch von dem, was noch kommen wird. 377 00:17:53,667 --> 00:17:54,250 Gute Frage. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 In Ordnung. 380 00:17:56,550 --> 00:17:59,730 So verschmelzen Art war, wie wir links die Dinge beim letzten Mal. 381 00:17:59,730 --> 00:18:03,250 Und verschmelzen Art war kühl in der Sinn, dass es so viel schneller, 382 00:18:03,250 --> 00:18:07,100 zumindest an den flüchtigen Tests wir haben in der vergangenen Woche, als, sagen wir, Blase 383 00:18:07,100 --> 00:18:08,710 Sortieren, Auswahl Art, Insertion Sort. 384 00:18:08,710 --> 00:18:11,780 Und was war ordentlich zu ist nur wie prägnant und sauber 385 00:18:11,780 --> 00:18:12,810 Sie können es zum Ausdruck bringen. 386 00:18:12,810 --> 00:18:15,840 Und was haben wir sagen, es war ein oberer von der Laufzeit der Zusammenführungs gebunden 387 00:18:15,840 --> 00:18:16,340 sortieren? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Ja? 390 00:18:18,495 --> 00:18:19,360 >> ZIELGRUPPE: n log n? 391 00:18:19,360 --> 00:18:20,819 >> Sprecher 1: n log n, richtig. n log n. 392 00:18:20,819 --> 00:18:23,776 Und wir werden wieder zu dem, was kommen, dass wirklich bedeutet oder woher das kommt, 393 00:18:23,776 --> 00:18:25,570 aber das war besser als das, was Laufzeit 394 00:18:25,570 --> 00:18:28,440 dass wir für die Blasen sah Auswahl und Insertion Sort? 395 00:18:28,440 --> 00:18:30,610 So n quadriert. n im Quadrat größer ist als diese, 396 00:18:30,610 --> 00:18:34,650 und selbst wenn es nicht ganz offensichtlich ist, wissen, dass log n kleiner als n ist, 397 00:18:34,650 --> 00:18:36,910 Wenn Sie also n-mal tun etwas kleiner als n ist, 398 00:18:36,910 --> 00:18:38,680 es geht um weniger als n quadriert werden. 399 00:18:38,680 --> 00:18:40,130 Es ist ein bisschen der Intuition gibt. 400 00:18:40,130 --> 00:18:42,190 Aber wir einen Preis bezahlt für diese. 401 00:18:42,190 --> 00:18:47,000 Es war schneller, aber ein Thema, das gestartet letzte Woche war dieser Kompromiss entstehen. 402 00:18:47,000 --> 00:18:49,804 Ich habe eine bessere Leistung Zeit weise, aber was 403 00:18:49,804 --> 00:18:52,470 musste ich auf der anderen verbringen Seits wird, um zu erreichen, dass? 404 00:18:52,470 --> 00:18:53,591 >> ZIELGRUPPE: Speicher. 405 00:18:53,591 --> 00:18:54,465 Sprecher 1: noch einmal sagen? 406 00:18:54,465 --> 00:18:55,173 ZIELGRUPPE: Speicher. 407 00:18:55,173 --> 00:18:57,040 Sprecher 1: Speicher oder Raum im Allgemeinen. 408 00:18:57,040 --> 00:18:59,040 Und es war nicht super mit unseren Menschen offensichtlich, 409 00:18:59,040 --> 00:19:02,240 aber daran erinnern, dass unsere Freiwilligen freuten Schritt und Schritt 410 00:19:02,240 --> 00:19:04,780 zurück, als ob es ein Array hier, und als ob es 411 00:19:04,780 --> 00:19:07,130 ein zweites Feld, dass hier sie nutzen könnten, weil wir 412 00:19:07,130 --> 00:19:09,080 benötigte irgendwo, diese Leute zusammenzuführen. 413 00:19:09,080 --> 00:19:11,480 Wir konnten nicht einfach tauschen sie an Ort und Stelle. 414 00:19:11,480 --> 00:19:13,800 So verschmelzen Art Hebelwirkung ist mehr Platz, die 415 00:19:13,800 --> 00:19:15,620 wir haben nicht mit Notwendigkeit die anderen Algorithmen, 416 00:19:15,620 --> 00:19:17,410 aber der Vorteil ist, dass es viel schneller. 417 00:19:17,410 --> 00:19:20,780 Und ehrlich gesagt, in der realen Welt Raum diese days-- RAM, Festplatte space-- 418 00:19:20,780 --> 00:19:25,030 ist relativ billig, und so ist das nicht unbedingt eine schlechte Sache. 419 00:19:25,030 --> 00:19:28,320 >> Werfen wir also einen kurzen Blick, ein wenig mehr methodisch, was wir getan haben 420 00:19:28,320 --> 00:19:30,220 und warum wir sagten, dass sie n log n. 421 00:19:30,220 --> 00:19:33,260 Also hier sind die acht Zahlen und die acht Freiwilligen hatten wir beim letzten Mal. 422 00:19:33,260 --> 00:19:35,718 Und das erste, was Merge Sortieren sagte uns zu tun war, was? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 ZIELGRUPPE: Teilen in zwei. 425 00:19:38,010 --> 00:19:38,663 Sprecher 1: noch einmal sagen? 426 00:19:38,663 --> 00:19:39,650 ZIELGRUPPE: Teilen in zwei. 427 00:19:39,650 --> 00:19:40,610 Sprecher 1: Teilen Sie in zwei, rechts. 428 00:19:40,610 --> 00:19:42,818 Dies erinnert sehr an das Telefonbuch, der Kluft 429 00:19:42,818 --> 00:19:44,220 und erobern im Allgemeinen. 430 00:19:44,220 --> 00:19:45,640 Also haben wir uns mit der linken Hälfte. 431 00:19:45,640 --> 00:19:48,700 Und dann, sobald wir gesagt, sortieren Die linke Hälfte der Elemente, 432 00:19:48,700 --> 00:19:49,690 Was haben wir als nächstes sagen? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 Sortieren Sie die linke Hälfte des linken Hälfte, die es uns ermöglicht,, 435 00:19:54,860 --> 00:19:57,570 nach der Teilung in zwei, konzentrieren sich auf vier und zwei. 436 00:19:57,570 --> 00:20:01,280 >> Wie sehen Sie jetzt eine Liste zu sortieren, in gelb, zwei von der Größe, mit Merge Sort? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Nun teilen sie in zwei Hälften, und sortieren die linke Hälfte. 439 00:20:04,580 --> 00:20:07,100 Und das war, wo die Dinge habe ein wenig dumm kurz. 440 00:20:07,100 --> 00:20:10,720 Wie sehen Sie eine Liste, die ist eine Art von Größe ein, wie dieser hier, Nummer vier? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Es ist sortiert. 443 00:20:13,210 --> 00:20:14,200 Sie sind fertig. 444 00:20:14,200 --> 00:20:17,300 >> Aber dann, wie Sie eine Liste sortieren Größe ein, wenn es die Nummer zwei? 445 00:20:17,300 --> 00:20:21,640 Nun, dasselbe, aber jetzt, was war das dritten und der entscheidende Schritt in Merge Sort? 446 00:20:21,640 --> 00:20:24,020 Sie musste die linke verschmelzen Hälfte und die rechte Hälfte. 447 00:20:24,020 --> 00:20:26,580 Und wenn wir das täten, haben wir uns an vier, haben wir uns zwei. 448 00:20:26,580 --> 00:20:28,750 Wir entschieden uns alle Rechte, offensichtlich zwei kommt zuerst, 449 00:20:28,750 --> 00:20:31,840 Also haben wir zwei in der Platz, gefolgt von vier. 450 00:20:31,840 --> 00:20:35,010 Und jetzt haben Sie, um Art von Rücklauf, und dies ist eine Art von charakteristischen 451 00:20:35,010 --> 00:20:37,570 eines Algorithmus wie Merge Sortieren, zurückspulen im Speicher. 452 00:20:37,570 --> 00:20:40,240 Was war die nächste Zeile von der Geschichte? 453 00:20:40,240 --> 00:20:41,780 Was sollte ich auf die sich weiter? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Die rechte Hälfte des linken Hälfte, die sechs und acht. 456 00:20:47,350 --> 00:20:50,320 >> Also lassen Sie mich nur durch diesen Schritt ohne darauf herumzureiten, den Punkt zu viel. 457 00:20:50,320 --> 00:20:53,330 Sechs und acht, dann sechs ist sortiert, acht sortiert ist. 458 00:20:53,330 --> 00:20:57,190 Verschmelzen sie zusammen wie das, und jetzt der nächste große Schritt 459 00:20:57,190 --> 00:21:00,990 ist natürlich sortieren die rechte Hälfte aus der erste Schritt des Algorithmus. 460 00:21:00,990 --> 00:21:02,870 Also konzentrieren wir uns auf ein, drei, sieben, fünf. 461 00:21:02,870 --> 00:21:04,540 Wir konzentrieren uns dann auf der linken Hälfte. 462 00:21:04,540 --> 00:21:09,400 Die linke Hälfte, dass die rechte Hälfte des dass dann in einem und drei verschmelzen. 463 00:21:09,400 --> 00:21:13,100 Dann die rechte Hälfte, dann links die Hälfte davon, dann die rechte Hälfte. 464 00:21:13,100 --> 00:21:15,985 Verschmelzen sie in, und was nun Schritt bleibt? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Zusammenführen der großen linken Hälfte und die große rechte Hälfte, so geht man dort unten, 467 00:21:22,460 --> 00:21:27,330 dann zwei, dann drei, dann vier, anschließend fünf, dann sechs, dann sieben, dann acht. 468 00:21:27,330 --> 00:21:31,990 >> So, jetzt, warum ist dies letztlich offenbart, vor allem, wenn n und Logarithmen mehr 469 00:21:31,990 --> 00:21:35,487 generell eher entkommen Sie, zumindest in der jüngsten Vergangenheit? 470 00:21:35,487 --> 00:21:37,070 Nun, beachten Sie die Höhe dieser Sache. 471 00:21:37,070 --> 00:21:41,230 Wir hatten acht Elemente, und wir geteilt durch zwei, durch zwei, durch zwei. 472 00:21:41,230 --> 00:21:44,590 So melden Sie sich zwei von acht Basis gibt uns drei. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 Und glauben Sie mir, dass, wenn ein wenig verschwommen auf die. 475 00:21:48,540 --> 00:21:54,710 Aber anmelden Basis zwei von acht ist drei, so haben wir drei Schichten der Zusammenführung getan. 476 00:21:54,710 --> 00:21:57,170 Und wenn wir zusammengeführt Elemente, wie viele Elemente 477 00:21:57,170 --> 00:21:58,950 haben wir uns auf jede dieser Zeilen? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Insgesamt n, oder? 480 00:22:01,437 --> 00:22:04,020 Da die obere Reihe zusammenzuführen, auch wenn wir es Stück für Stück, 481 00:22:04,020 --> 00:22:05,990 wir letztlich berührt jede Zahl einmal. 482 00:22:05,990 --> 00:22:09,054 Und in der zweiten Reihe, um mischen Sie die Listen der Größe zwei, 483 00:22:09,054 --> 00:22:10,470 wir mussten jedes Element einmal zu berühren. 484 00:22:10,470 --> 00:22:12,690 Und dann ist hier wirklich eindeutig in der letzten Reihe, 485 00:22:12,690 --> 00:22:15,430 wir hatten für jeden der zu berühren Elemente einmal, sondern nur einmal, 486 00:22:15,430 --> 00:22:18,400 so liegt hierin also, unsere n log n. 487 00:22:18,400 --> 00:22:21,780 >> Und jetzt, nur um die Dinge ein wenig zu machen mehr formale nur für einen Moment, wenn Sie 488 00:22:21,780 --> 00:22:24,260 waren jetzt analysieren diese bei einer Art von höherem Niveau 489 00:22:24,260 --> 00:22:28,340 und versuchen, zu entscheiden, wie gut können Sie über das Ausdrücken gehen 490 00:22:28,340 --> 00:22:31,780 die Laufzeit des Algorithmus einfach durch einen Blick auf sie und nicht 491 00:22:31,780 --> 00:22:33,590 durch die Verwendung eines konstruiertes Beispiel? 492 00:22:33,590 --> 00:22:36,590 Nun, wie viel Zeit würden Sie sagen, ein Schritt, wie dies in gelb nehmen würde, 493 00:22:36,590 --> 00:22:37,173 wenn n <2 zurück? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Das ist ein großes O, was? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Also ich sehe ein, so einen Schritt, vielleicht zwei Schritte, weil es, wenn 498 00:22:44,540 --> 00:22:47,110 und dann wieder, aber es ist konstante Zeit, oder? 499 00:22:47,110 --> 00:22:49,960 Also sagten wir O (1), und das ist , wie ich dies zum Ausdruck bringen. 500 00:22:49,960 --> 00:22:51,480 T, nur Laufzeit sein. 501 00:22:51,480 --> 00:22:54,150 N die Größe des Eingangs, so T (n), nur eine andere Art 502 00:22:54,150 --> 00:22:56,330 zu sagen, die Lauf Zeit gegebene Eingabe der Größe n 503 00:22:56,330 --> 00:23:00,220 wird sich in der Größenordnung sein konstanter Zeit in O (1). 504 00:23:00,220 --> 00:23:01,970 >> Aber sonst, was ist das? 505 00:23:01,970 --> 00:23:05,660 Wie würden Sie das zum Ausdruck bringen Laufzeit dieser gelben Linie? 506 00:23:05,660 --> 00:23:06,250 T von was? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Sie können hier Art betrügen und meine Frage beantworten zyklisch. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Also, wenn die Laufzeit in wir generell nur sagen, ist T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 Und jetzt sind Sie Art von Tochern hier und sagen, gut, nur die linke Hälfte zu sortieren, 513 00:23:22,490 --> 00:23:23,920 und dann sortieren, die rechte Hälfte. 514 00:23:23,920 --> 00:23:27,520 Wie können wir symbolisch die Laufzeit dieser gelben Linie? 515 00:23:27,520 --> 00:23:28,020 T von was? 516 00:23:28,020 --> 00:23:29,360 Was ist die Größe des Eingangs? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n mehr als zwei. 519 00:23:31,057 --> 00:23:32,140 Warum ich nicht einfach sagen Sie das? 520 00:23:32,140 --> 00:23:36,449 Und dies ist ein weiterer T (n / 2) und dann wieder, wenn ich Zusammenführen von zwei sortierten Hälften, 521 00:23:36,449 --> 00:23:38,615 wie viele Elemente werde ich zu haben, um zu berühren insgesamt? 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 So kann ich das zum Ausdruck bringen, nur um Art von Phantasie, 525 00:23:42,790 --> 00:23:44,430 als die Laufzeit im Allgemeinen. 526 00:23:44,430 --> 00:23:51,140 T (n) ist nur die Laufzeit T (n / 2), und T (n / 2), linke Hälfte und eine rechte Hälfte, 527 00:23:51,140 --> 00:23:55,360 und O (n), das ist wahrscheinlich n Schritten, aber vielleicht, wenn ich mit zwei Fingern, 528 00:23:55,360 --> 00:23:57,960 es doppelt so viele Schritte, aber es ist linear. 529 00:23:57,960 --> 00:24:00,440 Es ist eine Reihe von Schritten das ist ein Faktor von n, 530 00:24:00,440 --> 00:24:02,270 so könnten wir dies als dies zum Ausdruck bringen. 531 00:24:02,270 --> 00:24:05,550 Und das ist, wo wir jetzt zu Punt Rückseite unseres Hochschulmathematiklehrbuch 532 00:24:05,550 --> 00:24:10,290 wir sind schließlich, dass Rezidiv endet diese gleich, n-mal log n, 533 00:24:10,290 --> 00:24:12,530 wenn Sie tatsächlich tun out die Mathematik mehr formal. 534 00:24:12,530 --> 00:24:13,950 >> Also das ist nur zwei Perspektiven. 535 00:24:13,950 --> 00:24:17,500 Eine zahlenmäßig mit einem hartcodierte repräsentatives Beispiel 536 00:24:17,500 --> 00:24:21,140 mit acht Zahlen und eine weitere allgemeinen Blick auf, wie wir dort ankamen. 537 00:24:21,140 --> 00:24:25,670 Aber was ist wirklich interessant hier ist wieder dieser Begriff des Radsports. 538 00:24:25,670 --> 00:24:26,900 Ich bin nicht mit for-Schleifen. 539 00:24:26,900 --> 00:24:29,860 Ich bin eine Art der Definition etwas in Bezug auf sich selbst, 540 00:24:29,860 --> 00:24:31,950 nicht nur mit diesem mathematische Funktion, 541 00:24:31,950 --> 00:24:34,860 sondern auch in Bezug auf dieses Pseudo-Code. 542 00:24:34,860 --> 00:24:38,260 Diese Pseudo-Code ist rekursiv daß zwei der Linien 543 00:24:38,260 --> 00:24:42,310 wird im Wesentlichen sagen sie zu gehen verwenden selbst zu lösen eine kleinere 544 00:24:42,310 --> 00:24:45,400 Problem der kleineren Größe, und dann wieder und wieder 545 00:24:45,400 --> 00:24:48,820 und wieder, bis wir es Whittle bis zu diesem so genannten Basisfall. 546 00:24:48,820 --> 00:24:52,810 >> Lassen Sie uns also tatsächlich zeichnen Sie eine überzeugende Mitnehmen von dieser wie folgt. 547 00:24:52,810 --> 00:24:58,420 Lassen Sie mich in gedit gehen und ein Blick auf einige der heutigen Quellcode, 548 00:24:58,420 --> 00:24:59,930 insbesondere dieses Beispiel hier. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, die offenbar fügt die Zahlen eins bis n. 550 00:25:03,709 --> 00:25:05,750 Also mal sehen, was ist vertraut und ungewohnt hier. 551 00:25:05,750 --> 00:25:08,690 Zuerst müssen wir ein paar enthält, also nichts Neues. 552 00:25:08,690 --> 00:25:09,190 Prototyp. 553 00:25:09,190 --> 00:25:11,370 Ich bin ein wenig dunstig auf das nach einigen Tagen, 554 00:25:11,370 --> 00:25:13,790 aber was wir sagen, ein Prototyp einer Funktion? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 ZIELGRUPPE: [unverständlich]. 557 00:25:16,015 --> 00:25:16,905 Sprecher 1: Was ist das? 558 00:25:16,905 --> 00:25:17,800 ZIELGRUPPE: Wir verkünden es. 559 00:25:17,800 --> 00:25:18,883 Sprecher 1: Wir verkünden es. 560 00:25:18,883 --> 00:25:22,290 So können Sie unterrichten Clang, hey, nicht die tatsächliche Umsetzung dieser noch 561 00:25:22,290 --> 00:25:25,740 aber irgendwo in dieser Datei, vermutlich, sein wird eine Funktion aufgerufen, was? 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 Und das ist nur ein Versprechen, das es wird so aussehen. 565 00:25:30,540 --> 00:25:33,720 Es geht um eine ganze Zahl als nehmen input-- und ich kann mehr explizit sein 566 00:25:33,720 --> 00:25:36,570 und sagen, int n --und es ist werde ein int zurück, 567 00:25:36,570 --> 00:25:39,900 aber Semikolon Mittel, mm, ich werde umgehen zur Umsetzung dieses ein wenig später. 568 00:25:39,900 --> 00:25:40,989 Auch hier ist Clang dumm. 569 00:25:40,989 --> 00:25:43,280 Es ist nur zu wissen, was Sie sagen, es von oben nach unten, 570 00:25:43,280 --> 00:25:45,765 so müssen wir zumindest geben es ist ein Hinweis darauf, was noch kommen wird. 571 00:25:45,765 --> 00:25:47,330 >> Jetzt schauen wir uns hier Haupt. 572 00:25:47,330 --> 00:25:50,040 Lassen Sie nach unten scrollen und hier sehen, welche Haupt tut. 573 00:25:50,040 --> 00:25:53,780 Es ist nicht so lange von einer Funktion und in der Tat das Konstrukt ist hier vertraut. 574 00:25:53,780 --> 00:25:57,590 Ich erkläre, eine Variable n und dann Ich die Benutzer zu belästigen immer wieder 575 00:25:57,590 --> 00:26:01,880 für eine positive ganze Zahl mit getInt, und einzige Ausgang aus dieser Schleife 576 00:26:01,880 --> 00:26:03,280 sobald der Benutzer erfüllt werden. 577 00:26:03,280 --> 00:26:05,670 Tun, während wir verwendet haben belästigen die Benutzer auf diese Weise. 578 00:26:05,670 --> 00:26:06,670 Nun ist dies interessant. 579 00:26:06,670 --> 00:26:08,510 Ich erkläre, einen int als "Antwort". 580 00:26:08,510 --> 00:26:11,420 Ich, es ist der Rückgabewert zuweisen einer Funktion namens "Sigma". 581 00:26:11,420 --> 00:26:15,200 Ich weiß nicht, was das noch tut, aber Ich erinnere mich noch vor einem Moment erklärt. 582 00:26:15,200 --> 00:26:18,310 Und dann bin ich in die Weitergabe Wert, den der Benutzer eingegeben in, n, 583 00:26:18,310 --> 00:26:20,420 und dann melde ich die Antwort. 584 00:26:20,420 --> 00:26:22,260 Nun lassen Sie blättern zurück nur für einen Moment. 585 00:26:22,260 --> 00:26:28,620 Lassen Sie uns gehen Sie in dieses Verzeichnis, machen Sigma 0, und tatsächlich dieses Programm ausführen 586 00:26:28,620 --> 00:26:30,490 und sehen, was passiert. 587 00:26:30,490 --> 00:26:35,930 Also, wenn ich voran gehen und laufen Dieses Programm, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 und ich tippe auf eine positive integer wie zwei, Sigma, 589 00:26:40,139 --> 00:26:43,180 wie die griechische Symbol bedeutet, ist nur gehen, um von summieren sich alle Zahlen 590 00:26:43,180 --> 00:26:44,320 Null bis zu zwei. 591 00:26:44,320 --> 00:26:46,560 Also 0 plus 1 plus 2. 592 00:26:46,560 --> 00:26:48,830 So sollte dies hoffentlich geben Sie mir 3. 593 00:26:48,830 --> 00:26:49,750 Das ist alles, es tut. 594 00:26:49,750 --> 00:26:52,690 Und ähnlich, wenn ich dies wieder und ich gebe sie die Nummer drei, 595 00:26:52,690 --> 00:26:56,721 das ist 3 plus 2, das ist also 5, plus 1 sollte mir 6. 596 00:26:56,721 --> 00:26:59,470 Und dann, wenn ich wirklich verrückt und Anfang, der in größeren Zahlen, 597 00:26:59,470 --> 00:27:01,290 sollte es mir geben größer und größer Summen. 598 00:27:01,290 --> 00:27:02,250 Also das ist alles. 599 00:27:02,250 --> 00:27:04,010 >> Also, was hat Sigma aus? 600 00:27:04,010 --> 00:27:05,430 Nun, es ist ziemlich einfach. 601 00:27:05,430 --> 00:27:08,940 Es ist, wie wir umgesetzt haben, könnte dies für die letzten paar Wochen. 602 00:27:08,940 --> 00:27:11,120 "Int" wird sich der Rückgabetyp sein. 603 00:27:11,120 --> 00:27:14,330 Sigma ist der Name, und es dauert eine Variable m statt n. 604 00:27:14,330 --> 00:27:15,940 Ich werde das ändern, bis oben. 605 00:27:15,940 --> 00:27:17,340 Dann ist dies nur eine Plausibilitätsprüfung. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Wir werden gleich sehen, warum. 608 00:27:19,950 --> 00:27:24,220 Jetzt erkläre ich eine weitere Variable, Summe, initialisieren Sie ihn auf Null. 609 00:27:24,220 --> 00:27:28,140 Dann habe ich diese For-Schleife Iterieren offenbar zur Klarheit 610 00:27:28,140 --> 00:27:33,810 von i = 1 auf bis zu einem = m, das ist, was auch immer der Benutzer eingegeben wird, und dann habe ich 611 00:27:33,810 --> 00:27:35,690 erhöhen die Summe wie diese. 612 00:27:35,690 --> 00:27:37,360 Und dann die Summe zurück. 613 00:27:37,360 --> 00:27:38,440 >> So ein paar Fragen. 614 00:27:38,440 --> 00:27:42,370 Eins, behaupte ich in meinem Kommentar, dass dies vermeidet Risiko einer Endlosschleife. 615 00:27:42,370 --> 00:27:45,620 Warum sollte in einer negativen Zahl vorbei induziert werden, eine Endlos-Schleife? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> ZIELGRUPPE: Du wirst nie m zu erreichen. 618 00:27:51,290 --> 00:27:52,880 >> Sprecher 1: m erreichen Nie. 619 00:27:52,880 --> 00:27:55,880 Aber m übergeben wird, so lassen Sie uns ein einfaches Beispiel. 620 00:27:55,880 --> 00:27:58,510 Wenn m in den durchlaufenen Benutzer als negative. 621 00:27:58,510 --> 00:28:00,059 Unabhängig von Haupt. 622 00:28:00,059 --> 00:28:01,850 Haupt schützt uns vor dies zu, so bin ich nur 623 00:28:01,850 --> 00:28:04,680 als wirklich anal mit Sigma, um auch sicherstellen, dass 624 00:28:04,680 --> 00:28:06,540 daß die Eingabe nicht negativ sein. 625 00:28:06,540 --> 00:28:10,130 Also, wenn m negativ ist, so etwas wie negative. 626 00:28:10,130 --> 00:28:11,930 Was wird passieren? 627 00:28:11,930 --> 00:28:14,390 Nun, ich werde einem initialisiert, 628 00:28:14,390 --> 00:28:19,060 und dann habe ich sein wird weniger als oder gleich m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Stehen zu. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Dass was-- die nicht zulassen, Lassen Sie uns diese Geschichte nix. 633 00:28:29,370 --> 00:28:32,780 Ich habe nicht diese Frage stellen, denn das Risiko, dass ich in Anspielung auf 634 00:28:32,780 --> 00:28:38,360 wird nicht passieren, weil ich es immer werde größer sein than-- OK, 635 00:28:38,360 --> 00:28:39,871 Ich zurückziehen, dass die Frage. 636 00:28:39,871 --> 00:28:40,370 Ok. 637 00:28:40,370 --> 00:28:42,030 Konzentrieren wir uns nur auf diesen Teil hier. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Warum habe ich einige erklären außerhalb der Schleife? 640 00:28:48,830 --> 00:28:52,010 Bekanntmachung über die Linie 49 habe ich Innenseite der Schleife deklariert i, 641 00:28:52,010 --> 00:28:54,950 aber ich habe 48 Online- erklärt etwas außerhalb. 642 00:28:54,950 --> 00:28:55,695 Ja. 643 00:28:55,695 --> 00:28:56,611 ZIELGRUPPE: [unverständlich]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 Sprecher 1: Sicher. 646 00:28:59,400 --> 00:29:03,360 Also in erster Linie ich sicher nicht wollen, zu erklären und zu initialisieren Summe 647 00:29:03,360 --> 00:29:06,130 Null innerhalb des Schleife bei jeder Iteration, 648 00:29:06,130 --> 00:29:09,370 denn dies würde klar die Niederlage der Zweck der Addition der Zahlen. 649 00:29:09,370 --> 00:29:11,770 Ich würde ständig ändern der Wert auf Null zurück. 650 00:29:11,770 --> 00:29:17,992 Und auch, was ist eine andere, geheimnisvollen Grund für den gleichen Design-Entscheidung? 651 00:29:17,992 --> 00:29:18,954 Ja. 652 00:29:18,954 --> 00:29:20,279 >> ZIELGRUPPE: [unverständlich]. 653 00:29:20,279 --> 00:29:21,070 Sprecher 1: Genau. 654 00:29:21,070 --> 00:29:24,060 Ich will es außerhalb zugreifen der Schleife zu, auf welcher Linie? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 53. 657 00:29:26,400 --> 00:29:29,910 Und auf unserer Faustregel auf der Basis von ein paar Vorlesungen vor, 658 00:29:29,910 --> 00:29:33,680 Variablen sind Bereiche, und wirklich, um die geschweiften Klammern, die sie umfassen. 659 00:29:33,680 --> 00:29:38,190 Also, wenn ich nicht innerhalb erklären Summe dieser äußeren geschweiften Klammern, 660 00:29:38,190 --> 00:29:40,250 Ich kann ihn nicht in Zeile 53. 661 00:29:40,250 --> 00:29:43,160 Anders gesagt, wenn ich erklärte, Summe hier, oder sogar innerhalb der 662 00:29:43,160 --> 00:29:45,410 For-Schleife, konnte ich nicht darauf zugreifen in 53. 663 00:29:45,410 --> 00:29:47,150 Die Variable würde effektiv verschwunden sein. 664 00:29:47,150 --> 00:29:48,579 So ein paar Gründe gibt. 665 00:29:48,579 --> 00:29:50,370 Aber jetzt zurück gehen lassen und sehen, was passiert. 666 00:29:50,370 --> 00:29:51,730 So Sigma aufgerufen wird. 667 00:29:51,730 --> 00:29:55,640 Es summiert sich 1 sowie 2, oder 1 plus 2 plus 3, und gibt dann den Wert, 668 00:29:55,640 --> 00:29:59,660 speichert es in der Antwort, und hier printf Deshalb habe ich sehe auf dem Bildschirm. 669 00:29:59,660 --> 00:30:03,079 Also das ist, was wir nennen eine iterative Ansatz, bei dem nur Iteration 670 00:30:03,079 --> 00:30:03,870 bedeutet, mit einer Schleife. 671 00:30:03,870 --> 00:30:06,900 Eine For-Schleife, einer While-Schleife, ein Do While Schleife, nur etwas wieder zu tun 672 00:30:06,900 --> 00:30:08,380 und immer wieder. 673 00:30:08,380 --> 00:30:13,505 >> Aber Sigma ist eine Art ordentlich Funktion in dass ich es anders umzusetzen. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Was ist dieses, das nur um irgendwie cool, 676 00:30:19,120 --> 00:30:21,880 lassen Sie mich wirklich loswerden eine Menge Ablenkung 677 00:30:21,880 --> 00:30:24,380 Da diese Funktion ist eigentlich ganz einfach. 678 00:30:24,380 --> 00:30:27,780 Lassen Sie es nach unten schnitzen nur zu den vier Kernlinien 679 00:30:27,780 --> 00:30:30,410 und loszuwerden alle Kommentare und geschweiften Klammern. 680 00:30:30,410 --> 00:30:34,334 Dies ist eine Art Geist weht alternative Implementierung. 681 00:30:34,334 --> 00:30:37,250 Alles klar, vielleicht nichts dagegen weht, aber es ist irgendwie sexy, alles in Ordnung, 682 00:30:37,250 --> 00:30:39,920 auf diese so viel mehr kurz und bündig zu suchen. 683 00:30:39,920 --> 00:30:43,120 Mit nur vier Zeilen Code, Ich habe zuerst diese Plausibilitätsprüfung. 684 00:30:43,120 --> 00:30:45,732 Wenn m kleiner als oder gleich ist Null, macht Sigma keinen Sinn. 685 00:30:45,732 --> 00:30:48,190 Es ist nur angeblich in sein dieser Fall für positive Zahlen, 686 00:30:48,190 --> 00:30:50,340 so bin ich gerade dabei, Null zurück willkürlich 687 00:30:50,340 --> 00:30:53,210 so dass man zumindest einige so genannte Basisfall. 688 00:30:53,210 --> 00:30:54,430 >> Aber hier ist die Schönheit. 689 00:30:54,430 --> 00:30:59,930 Die Gesamtheit dieser Idee, indem die Zahlen von 1 bis n oder m in diesem Fall 690 00:30:59,930 --> 00:31:02,630 kann durch Art von den schwarzen Peter zuschieben geführt werden. 691 00:31:02,630 --> 00:31:04,947 Nun, was ist die Summe von 1 bis m? 692 00:31:04,947 --> 00:31:05,780 Nun, wissen Sie was? 693 00:31:05,780 --> 00:31:11,949 Es ist die gleiche wie die Summe von m und die Summe von 1 bis M minus 1 ist. 694 00:31:11,949 --> 00:31:12,740 Nun wissen Sie was? 695 00:31:12,740 --> 00:31:13,940 Was ist der Sigma-m minus 1? 696 00:31:13,940 --> 00:31:17,860 Nun, wenn Sie diese Art von folgen logisch, es ist das gleiche wie m minus 1 697 00:31:17,860 --> 00:31:21,415 Plus Sigma von minus 2 m. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Können Sie so freundlich von just-- das ist wie, wenn Sie gerade sind 700 00:31:26,012 --> 00:31:28,220 versucht, einen Freund zu ärgern und sie dir eine Frage stellen, 701 00:31:28,220 --> 00:31:31,344 Sie Art reagieren mit einer Frage, Sie können Art halten den schwarzen Peter zuschieben. 702 00:31:31,344 --> 00:31:34,560 Aber was ist Schlüssel ist, dass, wenn Sie zu halten macht die Frage immer kleiner 703 00:31:34,560 --> 00:31:36,910 und kleiner, sind Sie nicht zu fragen, was ist Sigma 704 00:31:36,910 --> 00:31:39,116 n, was ist der Sigma- n, was ist sigma n? 705 00:31:39,116 --> 00:31:40,990 Sie fragen, was ist Sigma-n, was ist Sigma 706 00:31:40,990 --> 00:31:42,839 n minus 1, was ist sigma n minus 2? 707 00:31:42,839 --> 00:31:44,880 Schließlich Ihre Frage wird, was zu werden? 708 00:31:44,880 --> 00:31:50,250 Was Sigma eines oder Null, einige sehr kleinen Wert, 709 00:31:50,250 --> 00:31:52,220 und sobald Sie bekommen, dass, Ihr Freund, 710 00:31:52,220 --> 00:31:54,350 Sie sind nicht zu fragen die gleiche Frage wieder, 711 00:31:54,350 --> 00:31:55,975 Sie gerade gehen zu sagen, oh, es ist null. 712 00:31:55,975 --> 00:31:58,490 Wir sind fertig spielen diese Art dumme zyklischen Spiel. 713 00:31:58,490 --> 00:32:02,950 >> So Rekursion ist die Handlung in der Programmierung einer Funktion, die sich selbst. 714 00:32:02,950 --> 00:32:06,630 Dieses Programm, wenn kompiliert und ausgeführt wird, ist gehen, genau die gleiche Art und Weise zu verhalten, 715 00:32:06,630 --> 00:32:09,620 aber was ist Schlüssel ist, dass im Inneren einer Funktion namens Sigma, 716 00:32:09,620 --> 00:32:13,150 gibt es eine Code-Zeile bei wir uns selbst fordern, 717 00:32:13,150 --> 00:32:14,980 die normalerweise schlecht sein würde. 718 00:32:14,980 --> 00:32:21,160 Zum Beispiel, was ist, wenn ich zum ersten Mal Diese zusammengestellt, so stellen sigma-- 719 00:32:21,160 --> 00:32:22,710 machen Sigma-1-./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Positive ganze Zahl, bitte, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Also, was die Funktion scheint , bezogen auf einen Test korrigieren. 723 00:32:30,810 --> 00:32:34,917 Aber was, wenn ich ein wenig gefährlich und die so genannte Basisfall zu löschen, 724 00:32:34,917 --> 00:32:37,750 und einfach sagen, auch ich mache nur dies komplizierter als es ist. 725 00:32:37,750 --> 00:32:42,450 Lassen Sie uns einfach berechnen die Sigma- indem m und dann die Zugabe 726 00:32:42,450 --> 00:32:44,564 Sigma in der m minus eins? 727 00:32:44,564 --> 00:32:45,980 Nun, was ist hier geschehen? 728 00:32:45,980 --> 00:32:47,140 Lassen Sie uns zu verkleinern. 729 00:32:47,140 --> 00:32:52,920 Lassen Sie das Programm neu zu kompilieren, speichern, kompilieren Sie das Programm, 730 00:32:52,920 --> 00:33:00,450 und dann bereit ./sigma-1 Zoomen, Geben Sie bitte positive ganze Zahl, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Wie viele von Ihnen bereit sind um zu sehen, erzähl ihm, dass? 733 00:33:04,430 --> 00:33:04,950 >> Ok. 734 00:33:04,950 --> 00:33:06,690 So kann dies für passieren eine Reihe von Gründen, 735 00:33:06,690 --> 00:33:09,148 und ehrlich gesagt in dieser Woche sind wir über Sie mehr von ihnen zu geben. 736 00:33:09,148 --> 00:33:11,780 Aber in diesem Fall versuchen rückwärts Vernunft 737 00:33:11,780 --> 00:33:14,430 was könnte hier passiert sein? 738 00:33:14,430 --> 00:33:17,400 Segmentation fault, sagten wir zuletzt Zeit bezieht sich auf ein Segment des Speichers. 739 00:33:17,400 --> 00:33:18,690 Etwas Schlimmes passiert. 740 00:33:18,690 --> 00:33:21,550 Aber was war es mechanisch, die schief ging 741 00:33:21,550 --> 00:33:25,000 hier wegen meiner Entfernung dieser so genannten Basisfall, 742 00:33:25,000 --> 00:33:26,870 wo ich wieder einen hart codierten Wert? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Was denken Sie, ist schief gelaufen? 745 00:33:30,460 --> 00:33:31,219 Ja. 746 00:33:31,219 --> 00:33:32,135 >> ZIELGRUPPE: [unverständlich]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 Sprecher 1: Ah. 749 00:33:36,970 --> 00:33:37,550 Gute Frage. 750 00:33:37,550 --> 00:33:39,508 So dass die Größe der Zahl dass ich der Zusammenfassung 751 00:33:39,508 --> 00:33:41,920 war so groß, dass es überschritten die Größe des Speicherplatzes. 752 00:33:41,920 --> 00:33:44,640 Gute Idee, aber nicht grundlegend gehen zu einem Absturz führen. 753 00:33:44,640 --> 00:33:48,230 Das könnte dazu führen, Integer-Überlauf, wo die Bits nur umdrehen 754 00:33:48,230 --> 00:33:51,760 und dann Fehler, den wir eine wirklich große Nummer wie eine negative Zahl, 755 00:33:51,760 --> 00:33:53,260 aber, dass selbst führt nicht zu einem Absturz. 756 00:33:53,260 --> 00:33:55,509 Da am Ende der Tag ein int ist immer noch 32 Bit. 757 00:33:55,509 --> 00:33:57,640 Sie sind nicht zu gehen versehentlich stehlen ein 33. Bit. 758 00:33:57,640 --> 00:33:58,431 Aber ein guter Gedanke. 759 00:33:58,431 --> 00:33:58,984 Ja. 760 00:33:58,984 --> 00:33:59,900 >> ZIELGRUPPE: [unverständlich]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 Sprecher 1: Die Methode nie mehr läuft, 763 00:34:02,300 --> 00:34:06,658 und in der Tat selbst nennt es wieder und wieder und wieder und wieder 764 00:34:06,658 --> 00:34:08,449 wieder, und keiner diese Funktionen je 765 00:34:08,449 --> 00:34:13,310 beenden, weil ihre einzige Zeile Code ruft them wieder und wieder 766 00:34:13,310 --> 00:34:14,219 und wieder. 767 00:34:14,219 --> 00:34:16,080 Und was ist wirklich geschieht hier, und jetzt sind wir 768 00:34:16,080 --> 00:34:18,100 kann diese Art von bildhaft zu zeichnen. 769 00:34:18,100 --> 00:34:20,899 Lassen Sie mich gehen über eine Bild für einen Moment. 770 00:34:20,899 --> 00:34:22,940 Dies ist ein Bild, dass schließlich Fleisch aus 771 00:34:22,940 --> 00:34:26,336 genauer, was los ist innerhalb des Arbeitsspeichers Ihres Computers. 772 00:34:26,336 --> 00:34:28,460 Und es stellt sich heraus, dass auf die Unterseite des Bildes 773 00:34:28,460 --> 00:34:29,709 ist etwas, genannt Stack. 774 00:34:29,709 --> 00:34:31,920 Dies ist ein Stück Erinnerung, ein Stück von RAM, 775 00:34:31,920 --> 00:34:33,920 das ist nur jederzeit benutzt eine Funktion aufgerufen wird. 776 00:34:33,920 --> 00:34:36,239 Jedes Mal, wenn ein Programmierer, eine Funktion aufrufen, 777 00:34:36,239 --> 00:34:38,860 das Betriebssystem, wie Mac OS, Windows oder Linux, 778 00:34:38,860 --> 00:34:41,920 greift ein Bündel von Bytes, vielleicht ein wenige Kilobyte, vielleicht paar Megabyte 779 00:34:41,920 --> 00:34:44,590 Speicher, gibt sie für Sie, und dann lässt 780 00:34:44,590 --> 00:34:47,650 Sie Ihre Funktion mit laufen was auch immer Sie brauchen, Variablen. 781 00:34:47,650 --> 00:34:50,699 Und wenn Sie dann rufen Sie eine andere Funktion und eine andere Funktion, 782 00:34:50,699 --> 00:34:53,590 Sie noch ein Stück Erinnerung erhalten und ein weiteres Stück der Erinnerung. 783 00:34:53,590 --> 00:34:57,090 >> Und in der Tat, wenn dieser grünen Schalen von Annenberg vertreten, dass der Speicher, 784 00:34:57,090 --> 00:34:59,870 hier ist was passiert, die erste Zeit, die Sie Funktion Sigma nennen. 785 00:34:59,870 --> 00:35:04,510 Es ist wie wenn man ein Fach wie dieses auf, was zunächst ein leerer Stapel. 786 00:35:04,510 --> 00:35:07,142 Aber dann, wenn das Fach nennt sich, so zu sprechen, 787 00:35:07,142 --> 00:35:08,850 Aufruf einer anderen Instanz Sigma, das 788 00:35:08,850 --> 00:35:11,640 wie zu fragen, das Betriebssystem, ooh, brauchen ein wenig mehr Speicher, 789 00:35:11,640 --> 00:35:12,520 geben mir das. 790 00:35:12,520 --> 00:35:14,840 Und dann wird es auf auf der Oberseite aufgetürmt. 791 00:35:14,840 --> 00:35:18,030 Aber was ist der Schlüssel hier ist, dass die erste Schale ist noch da, 792 00:35:18,030 --> 00:35:20,620 weil er aufgerufen diese zweite Fach. 793 00:35:20,620 --> 00:35:23,500 Jetzt inzwischen Sigma Sigma nennen, das ist wie zu fragen, für mehr Speicher. 794 00:35:23,500 --> 00:35:25,830 Wird auf hier aufgetürmt. 795 00:35:25,830 --> 00:35:29,350 Sigma Sigma nennen, das ist eine andere Fach, das hier aufgetürmt wird. 796 00:35:29,350 --> 00:35:32,942 Und wenn Sie dies tun, immer, schließlich, Art der Karte dieses visuelle 797 00:35:32,942 --> 00:35:35,525 auf diese Karte, ist was zu gehen passieren den Stapel von Ablagen? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Es geht um den Betrag übersteigen Speicher auf Ihrem Computer. 800 00:35:41,160 --> 00:35:45,790 Und sobald dieser grünen Schale die horizontale Linie überschreitet 801 00:35:45,790 --> 00:35:49,410 Stapel oben und über diesem Wort Haufen, die wir wieder in der Zukunft kommen, 802 00:35:49,410 --> 00:35:50,410 das ist eine schlechte Sache. 803 00:35:50,410 --> 00:35:52,810 Der Haufen ist eine andere Speichersegment, 804 00:35:52,810 --> 00:35:55,190 und wenn Sie diese lassen Tabletts Stapel und Haufen auf, 805 00:35:55,190 --> 00:35:57,800 Sie gehen zu übersteigen sind Ihre eigenen Speichersegment, 806 00:35:57,800 --> 00:36:00,420 und ein Programm ist in der Tat werde abstürzen. 807 00:36:00,420 --> 00:36:02,930 >> Jetzt als beiseite, dieser Idee Rekursion daher 808 00:36:02,930 --> 00:36:06,500 Deutlich zu Problemen führen, aber es ist nicht unbedingt eine schlechte Sache. 809 00:36:06,500 --> 00:36:08,840 Da betrachten, nach alle, und vielleicht how-- 810 00:36:08,840 --> 00:36:11,700 Dies dauert einige gewöhnungs zu --Wie elegant oder wie einfach 811 00:36:11,700 --> 00:36:14,890 dass die Umsetzung des Sigma war. 812 00:36:14,890 --> 00:36:17,440 Und wir sind nicht zu verwenden, Rekursion, dass alle viel in CS50, 813 00:36:17,440 --> 00:36:20,780 aber in CS51, und wirklich jede Klasse wo man Datenstrukturen manipulieren 814 00:36:20,780 --> 00:36:23,640 wie Bäume oder Familienstammbäume, dass eine gewisse Hierarchie, 815 00:36:23,640 --> 00:36:26,000 es ist super, super nützlich. 816 00:36:26,000 --> 00:36:29,750 Jetzt, als zur Seite, so dass Sie als angehende Informatiker 817 00:36:29,750 --> 00:36:33,180 sind mit einigen von Google vertraut Insider-Witze, wenn Sie zu Google 818 00:36:33,180 --> 00:36:36,345 und Sie sehen, was ist der Definition von, sagen wir, Rekursion, geben. 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 Nebenbei, zog ich ein paar. 822 00:36:42,670 --> 00:36:45,470 Das war wie 10 Minuten Zaudern an diesem Morgen. 823 00:36:45,470 --> 00:36:52,890 Wenn Sie auch Google "schief", Bekanntmachung durch Neigen Sie Ihren Kopf slightly-- 824 00:36:52,890 --> 00:36:55,120 und dann ist dies eine vielleicht grausamsten aller 825 00:36:55,120 --> 00:36:57,286 da jemand wie verbrachte ihren Tag der Umsetzung dieser 826 00:36:57,286 --> 00:36:59,880 einige Jahre ago-- kommen. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Oh, das ist wait-- ein Fehler. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Also auf einen der Lauf größten Websites weltweit 831 00:37:11,410 --> 00:37:13,510 sind diese dummen kleinen Ostereier. 832 00:37:13,510 --> 00:37:16,690 Sie verbrauchen wahrscheinlich ein triviale Anzahl von Codezeilen 833 00:37:16,690 --> 00:37:19,280 gerade so, dass wir haben können wenig Spaß Dinge. 834 00:37:19,280 --> 00:37:22,140 Aber zumindest jetzt erhalten Sie einige dieser Insider-Witze. 835 00:37:22,140 --> 00:37:28,330 >> Werfen wir nun einen Blick auf einige der White Lies haben wir in der letzten Zeit erzählt wurde, 836 00:37:28,330 --> 00:37:30,707 und beginnen zu schälen zurück einige Schichten technisch 837 00:37:30,707 --> 00:37:32,790 so dass Sie wirklich verstehen, was los war 838 00:37:32,790 --> 00:37:34,860 und Sie verstehen können einige der Bedrohungen, 839 00:37:34,860 --> 00:37:38,060 wie Shellshock, dass haben nun begonnen, sich 840 00:37:38,060 --> 00:37:41,110 an der Spitze der jeder Aufmerksamkeit, zumindest in den Medien. 841 00:37:41,110 --> 00:37:45,810 So, hier ist eine sehr einfache Funktion dass nichts zurückgibt, ungültig. 842 00:37:45,810 --> 00:37:46,790 Sein Name ist Swap. 843 00:37:46,790 --> 00:37:50,880 Es dauert in zwei Variablen und es gibt nichts zurück. 844 00:37:50,880 --> 00:37:52,260 Nimmt in a und b. 845 00:37:52,260 --> 00:37:53,337 So eine schnelle Demonstration. 846 00:37:53,337 --> 00:37:54,170 Wir brachten diese auf. 847 00:37:54,170 --> 00:37:56,100 Wir könnten genauso gut ein wenig dauern brechen hier für einen Moment 848 00:37:56,100 --> 00:37:57,250 und haben ein wenig etwas zu trinken. 849 00:37:57,250 --> 00:38:00,120 Wenn jemand hätte nichts dagegen Beitritt mich hier nur für einen Moment. 850 00:38:00,120 --> 00:38:01,830 Wie über Sie in der kastanienbraunen T-Shirt? 851 00:38:01,830 --> 00:38:02,335 Komm auf. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Nur die ein heute. 854 00:38:05,260 --> 00:38:06,251 Vielen Dank, dass Sie, wenn. 855 00:38:06,251 --> 00:38:08,000 Alles in Ordnung, und wir haben kommen, die hier? 856 00:38:08,000 --> 00:38:08,660 Wie heißen Sie? 857 00:38:08,660 --> 00:38:09,360 >> Lautsprecher 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> Sprecher 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Komm auf. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 So Laura, sehr einfache Herausforderung heute. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Schön, yo erfüllen. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 In Ordnung. 866 00:38:16,910 --> 00:38:21,179 Also haben wir etwas Milch über hier und wir haben etwas Orangensaft hier 867 00:38:21,179 --> 00:38:23,345 und einige Tassen, die wir von Annenberg ausgeliehen heute. 868 00:38:23,345 --> 00:38:24,178 >> Lautsprecher 4: entlehnt. 869 00:38:24,178 --> 00:38:27,240 Sprecher 1: Und er ging voran gehen und geben Sie ein halbes Glas davon. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 In Ordnung. 872 00:38:28,800 --> 00:38:30,750 Und wir werden Sie die Hälfte geben ein Glas Milch. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Ach ja, und nur so, dass man daran erinnern, was das war, wie, 875 00:38:35,890 --> 00:38:38,860 Ich erinnerte mich an zu bringen, Diese und heute. 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 Wenn Sie nichts dagegen hätte, mal sehen, wir können sie über die eigene Brille aufsetzen 879 00:38:45,470 --> 00:38:46,560 falls Sie es wollen. 880 00:38:46,560 --> 00:38:48,710 Das wird die Welt von Lauras Augen sein. 881 00:38:48,710 --> 00:38:49,210 In Ordnung. 882 00:38:49,210 --> 00:38:53,820 Ihr Ziel so, da zwei Tassen Hier Flüssigkeit, Milch und Orangensaft, 883 00:38:53,820 --> 00:38:58,370 wird die beiden Inhalte zu tauschen, so dass die Orangensaft geht in die Milch Tasse 884 00:38:58,370 --> 00:39:00,710 und die Milch geht in der Orangensaft Tasse. 885 00:39:00,710 --> 00:39:02,359 >> Lautsprecher 4: Bekomme ich noch eine Tasse? 886 00:39:02,359 --> 00:39:05,650 Sprecher 1: Ich bin so froh, dass du gefragt, wenn auch es wäre viel besser Material haben 887 00:39:05,650 --> 00:39:06,710 wenn du nicht gefragt. 888 00:39:06,710 --> 00:39:10,620 Aber ja, wir bieten Ihnen eine dritte Tasse, die leer ist, natürlich. 889 00:39:10,620 --> 00:39:11,120 In Ordnung. 890 00:39:11,120 --> 00:39:12,300 So tauschen Sie die Inhalte dort. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Sehr schön. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Sehr gut. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Sie tun dies bemerkenswert sorgfältig. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 Und Schritt drei. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 In Ordnung. 901 00:39:31,350 --> 00:39:31,930 Ausgezeichnet. 902 00:39:31,930 --> 00:39:33,930 Ein großer Applaus wäre gut für Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 In Ordnung. 905 00:39:37,000 --> 00:39:40,790 Wir haben ein kleines Abschiedsgeschenk für Sie, aber lassen Sie mich diese zu nehmen. 906 00:39:40,790 --> 00:39:42,620 Vielen Dank. 907 00:39:42,620 --> 00:39:46,170 So ein einfaches Beispiel, obwohl, zu zeigen, dass, wenn Sie tun 908 00:39:46,170 --> 00:39:48,300 möchten den Inhalt tauschen aus zwei Behältnissen, 909 00:39:48,300 --> 00:39:52,360 oder nennen wir sie Variablen, Sie einige Zwischenlagerung müssen 910 00:39:52,360 --> 00:39:56,710 einem der Inhalt so Bühne dass Sie tatsächlich die Swap. 911 00:39:56,710 --> 00:40:01,790 Also in der Tat, diese Quellcode hier in C ist repräsentativ für genau dies. 912 00:40:01,790 --> 00:40:06,340 Wenn der Orangensaft war und die Milch war b, und wir, die beiden tauschen wollte, 913 00:40:06,340 --> 00:40:08,990 Sie könnten versuchen, etwas Kreatives durch Gießen einen in die andere, 914 00:40:08,990 --> 00:40:11,031 Aber das wäre wohl nicht Ende besonders gut. 915 00:40:11,031 --> 00:40:15,260 Und so nutzen wir eine dritte Tasse, Call es tmp, T-M-P durch Konvention, 916 00:40:15,260 --> 00:40:19,370 und legte den Inhalt der OJ in das, dann tauschen Sie eine Tasse, 917 00:40:19,370 --> 00:40:22,610 dann die in der OJ Original Tasse, wodurch 918 00:40:22,610 --> 00:40:25,320 erreichen, genau so, wie Laura hat, die Swap. 919 00:40:25,320 --> 00:40:26,850 >> Lassen Sie uns also genau das zu tun. 920 00:40:26,850 --> 00:40:30,110 Lassen Sie mich gehen Sie vor und öffnen bis ein Beispiel, das ist 921 00:40:30,110 --> 00:40:32,720 eigentlich "nicht tauschen ", denn dies ist nicht 922 00:40:32,720 --> 00:40:36,180 so einfach getan, wie Sie vielleicht denken. 923 00:40:36,180 --> 00:40:41,190 Also in diesem Programm, feststellen, dass Ich bin mit stdio.h, unser alter Freund. 924 00:40:41,190 --> 00:40:43,130 Ich habe den Prototyp für Swap da oben, die 925 00:40:43,130 --> 00:40:45,450 bedeutet, ihm die Umsetzung wahrscheinlich unten, 926 00:40:45,450 --> 00:40:48,050 und lassen Sie uns sehen, was das Haupt Programm geht für mich zu tun. 927 00:40:48,050 --> 00:40:52,020 Ich zuerst erklären, int x bekommt eine, und int y bekommt zwei. 928 00:40:52,020 --> 00:40:54,930 Also denken Sie an jene, die als OJ und Milch sind. 929 00:40:54,930 --> 00:40:57,100 Und dann habe ich nur eine printf sagen x ist dies 930 00:40:57,100 --> 00:41:00,120 und y ist das, nur so kann ich visuell zu sehen, was los ist. 931 00:41:00,120 --> 00:41:03,810 Dann habe ich printf behauptet dass ich Vertauschen der beiden, 932 00:41:03,810 --> 00:41:07,100 und dann habe ich ein ausdrucken behaupten, dass sie ausgelagert sind, 933 00:41:07,100 --> 00:41:09,300 und ich ausdrucken x und y wieder. 934 00:41:09,300 --> 00:41:13,010 Also hier unten in Swap ist genau das, was Laura tat, 935 00:41:13,010 --> 00:41:16,240 und genau das, was wir auf sah der Bildschirm vor einem Augenblick. 936 00:41:16,240 --> 00:41:19,380 >> Also lassen Sie uns weitermachen und bitter enttäuscht sein. 937 00:41:19,380 --> 00:41:24,690 Machen Sie keinen Tausch, und führen Sie keine Swap, Zoom auf den Ausgang hier. 938 00:41:24,690 --> 00:41:28,320 Eingabe x 1 ist, y 2 ist, Austauschen vertauscht. 939 00:41:28,320 --> 00:41:32,700 x ist immer noch 1 ist, und y 2 noch. 940 00:41:32,700 --> 00:41:37,630 Also auch wenn, ehrlich gesagt, das sieht Genau wie, wenn auch technisch, 941 00:41:37,630 --> 00:41:40,730 Laura, was getan hat, nicht zu funktionieren scheint. 942 00:41:40,730 --> 00:41:42,130 Also, warum ist das so? 943 00:41:42,130 --> 00:41:46,630 Nun stellt sich heraus, dass, wenn schreiben wir ein Programm wie dieses 944 00:41:46,630 --> 00:41:51,590 das hat sowohl Haupt, betonte hier, und dann eine andere Funktion, wie Swap, 945 00:41:51,590 --> 00:41:54,230 hier hervorgehoben, die es nennt, die Welt 946 00:41:54,230 --> 00:41:57,030 sieht ein wenig so etwas wie Diese Schalen vor einem Augenblick. 947 00:41:57,030 --> 00:42:00,440 Wenn der Haupt ersten aufgerufen wird, das ist als würde man fragen Betriebssystem 948 00:42:00,440 --> 00:42:04,030 für ein wenig Speicher für jede lokale Variablen wie x und y, die Haupt hat, 949 00:42:04,030 --> 00:42:05,660 und sie am Ende recht. 950 00:42:05,660 --> 00:42:10,920 Aber wenn Haupt Anrufen zu wechseln, und die Haupt geht auf zwei Argumente A und B zu tauschen, 951 00:42:10,920 --> 00:42:16,410 Orangensaft und Milch, es ist nicht wie Übergabe der Orangensaft und die Milch 952 00:42:16,410 --> 00:42:17,500 Laura. 953 00:42:17,500 --> 00:42:21,300 Was ein Computer tut, ist es gibt Kopien der Orangensaft 954 00:42:21,300 --> 00:42:27,110 und Kopien der Milch an Laura, so dass was letztlich innerhalb dieses Fach 955 00:42:27,110 --> 00:42:32,510 ist der Wert eins und zwei, oder OJ und Milch, aber Kopien davon, 956 00:42:32,510 --> 00:42:34,790 so dass an dieser Stelle in der Geschichte, gibt 957 00:42:34,790 --> 00:42:36,930 OJ und Milch in jedem dieser Fächer. 958 00:42:36,930 --> 00:42:39,260 Es gibt eine und eine zwei In jedem dieser Fächer, 959 00:42:39,260 --> 00:42:41,720 und die Swap-Funktion ist in der Tat funktioniert. 960 00:42:41,720 --> 00:42:46,090 Es ist ihnen in Austausch der zweiten obersten Fach, 961 00:42:46,090 --> 00:42:48,147 aber das Swapping hat keine Auswirkungen. 962 00:42:48,147 --> 00:42:49,980 Und auf der Basis nur einige Grundprinzip haben wir 963 00:42:49,980 --> 00:42:52,970 sprach über vor, und zwar gerade vor ein paar Minuten, was 964 00:42:52,970 --> 00:42:58,770 könnte erklären, warum ändern a und b innerhalb der Swap- 965 00:42:58,770 --> 00:43:05,560 keine Wirkung auf x und y, obwohl Ich ging x und y auf die Swap-Funktion. 966 00:43:05,560 --> 00:43:08,750 Was ist hier das Schlüsselwort, dass könnte vereinfachend zu erklären? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Ich glaube, ich habe es hier? 969 00:43:12,627 --> 00:43:13,335 ZIELGRUPPE: Rückkehr. 970 00:43:13,335 --> 00:43:14,085 Sprecher 1: Zurück? 971 00:43:14,085 --> 00:43:14,590 Nicht zurück. 972 00:43:14,590 --> 00:43:15,895 Lassen Sie uns mit einem anderen zu gehen. 973 00:43:15,895 --> 00:43:16,395 Was ist das? 974 00:43:16,395 --> 00:43:17,080 >> ZIELGRUPPE: [unverständlich]. 975 00:43:17,080 --> 00:43:20,000 >> Sprecher 1: OK, also wir konnten return-- Rückkehr machen Arbeit in der Geschichte, 976 00:43:20,000 --> 00:43:21,914 aber es gibt eine noch einfachere Erklärung. 977 00:43:21,914 --> 00:43:22,580 ZIELGRUPPE: Scope. 978 00:43:22,580 --> 00:43:23,288 Sprecher 1: Scope. 979 00:43:23,288 --> 00:43:24,300 Ich werde Umfang zu nehmen. 980 00:43:24,300 --> 00:43:27,290 So Umfang, daran erinnern, wo unsere x und y erklärt. 981 00:43:27,290 --> 00:43:30,840 Sie sind im Inneren erklärt Haupt bis hier. 982 00:43:30,840 --> 00:43:33,200 A und B sind unterdessen wirksam erklärt 983 00:43:33,200 --> 00:43:35,930 innerhalb von Swap, nicht ganz in Die geschweiften Klammern, aber immer noch 984 00:43:35,930 --> 00:43:37,690 in den allgemeinen Bereich der Swap. 985 00:43:37,690 --> 00:43:40,560 Und zwar so, a und b nur in diesem Fach gibt es 986 00:43:40,560 --> 00:43:44,850 von Annenberg, diese zweiten Teil des Codes. 987 00:43:44,850 --> 00:43:49,500 So sind wir in der Tat die Änderung der Kopie, sondern das ist gar nicht so hilfreich. 988 00:43:49,500 --> 00:43:52,190 >> Werfen wir also einen Blick auf dies ein wenig niedrigeren Niveau. 989 00:43:52,190 --> 00:43:55,430 Ich werde wieder in gehen Das Quellverzeichnis, 990 00:43:55,430 --> 00:43:58,330 und ich werde zum ersten Vergrößern hier, und nur 991 00:43:58,330 --> 00:44:02,290 , um zu bestätigen, dass ich in dieser größere Terminal-Fenster, 992 00:44:02,290 --> 00:44:04,430 das Programm ist immer noch verhalten wie die. 993 00:44:04,430 --> 00:44:06,840 Nehmen wir nun an, dass diese ist nicht beabsichtigt. 994 00:44:06,840 --> 00:44:10,090 Klar wollte ich Swap Arbeit, so fühlt es sich wie ein Bug. 995 00:44:10,090 --> 00:44:12,780 Jetzt konnte ich ein Start-Zugabe viel printf auf meine Code, 996 00:44:12,780 --> 00:44:16,010 Ausdrucken x hier, y über hier, ein hier, b hier. 997 00:44:16,010 --> 00:44:18,220 Aber ehrlich gesagt, ist wahrscheinlich, was das Sie haben für ein paar Wochen getan 998 00:44:18,220 --> 00:44:20,190 Jetzt, in der Bürozeiten und zu Hause bei der Arbeit 999 00:44:20,190 --> 00:44:22,150 auf psets versuchen, einige Fehler zu finden. 1000 00:44:22,150 --> 00:44:25,560 Aber Sie werden sehen, wenn Sie nicht bereits haben, dass Problem stellte drei führt Sie 1001 00:44:25,560 --> 00:44:31,630 auf einen Befehl namens GDB, wo GDB, der GNU Debugger, 1002 00:44:31,630 --> 00:44:34,040 hat sich eine ganze Reihe von Funktionen, die eigentlich kann 1003 00:44:34,040 --> 00:44:38,160 lassen uns verstehen, Situationen wie diese, aber mehr zwingend, 1004 00:44:38,160 --> 00:44:39,940 Probleme zu lösen und Fehler finden. 1005 00:44:39,940 --> 00:44:40,940 Also werde ich, dies zu tun. 1006 00:44:40,940 --> 00:44:44,770 Statt der ./noswap, ich bin statt werde GDB ./noswap laufen. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Mit anderen Worten, ich werde laufen meine Programm nicht in Bash, unser neuer Freund 1009 00:44:51,200 --> 00:44:51,850 heute. 1010 00:44:51,850 --> 00:44:53,970 Ich werde laufen meine Programm NOSWAP innen 1011 00:44:53,970 --> 00:44:56,900 dieses andere Programm namens GDB, die ein Debugger, der 1012 00:44:56,900 --> 00:45:01,035 ist ein Programm, das entworfen, um zu helfen Sie finden Menschen und Bugs zu entfernen. 1013 00:45:01,035 --> 00:45:03,410 Also, wenn ich getroffen Führen Sie hier, gibt es ein grausames Textmenge 1014 00:45:03,410 --> 00:45:04,868 dass Sie wirklich nie zu lesen. 1015 00:45:04,868 --> 00:45:07,290 Es ist im Wesentlichen eine Ablenkung von der Eingabeaufforderung, die 1016 00:45:07,290 --> 00:45:10,030 Ich werde Strg-L getroffen aufstehen an der Spitze gibt. 1017 00:45:10,030 --> 00:45:11,800 Dies ist der GDB Aufforderung. 1018 00:45:11,800 --> 00:45:15,550 Wenn ich dieses Programm jetzt laufen, als dieser kleinen Spickzettel auf dem heutigen 1019 00:45:15,550 --> 00:45:21,860 Rutsche schon sagt, ist der erste Run Befehle, die wir einführen soll. 1020 00:45:21,860 --> 00:45:25,150 Und ich werde einfach geben laufen hier innerhalb der GDB, 1021 00:45:25,150 --> 00:45:26,811 und in der Tat lief es mein Programm. 1022 00:45:26,811 --> 00:45:29,310 Jetzt gibt es einige zusätzliche Ausgänge der Bildschirm wie diese, 1023 00:45:29,310 --> 00:45:31,910 aber das ist einfach nur anal GDB und sagen uns, was los ist. 1024 00:45:31,910 --> 00:45:34,451 Sie haben nicht wirklich Sorgen zu machen über diese Details jetzt. 1025 00:45:34,451 --> 00:45:36,890 Aber was ist wirklich cool GDB, diese again-- wenn ich 1026 00:45:36,890 --> 00:45:42,100 Strg-L löscht die screen-- mich gehen lassen vor und geben Sie "brechen Haupt," damit, 1027 00:45:42,100 --> 00:45:45,743 wenn ich drücken Sie die Eingabetaste, Einstellung, was rief ein Haltepunkt an noswap.c, 1028 00:45:45,743 --> 00:45:51,270 Linie 16, die GDB ist, wo heraus mein Programm eigentlich 1029 00:45:51,270 --> 00:45:53,070 ist, eigentlich ist meine Funktion. 1030 00:45:53,070 --> 00:45:55,070 Dies werden wir jetzt ignorieren aber das ist die Adresse 1031 00:45:55,070 --> 00:45:57,310 im Speicher speziell dieser Funktion. 1032 00:45:57,310 --> 00:46:00,240 So, jetzt, wenn ich tippen, bemerken, was ist cool hier. 1033 00:46:00,240 --> 00:46:05,650 Mein Programm bricht an der Linie, die ich sagte GDB, um die Ausführung zu unterbrechen. 1034 00:46:05,650 --> 00:46:09,850 So dass ich nicht haben, um jetzt meinen Code zu ändern, fügen Sie einige printf ist, neu kompilieren, Wiederholung 1035 00:46:09,850 --> 00:46:13,300 es, zu ändern, fügen Sie einige printf ist, speichern, neu kompilieren, führen Sie es. 1036 00:46:13,300 --> 00:46:18,100 Ich kann einfach durch mein Programm laufen Schritt für Schritt für Schritt an die menschliche Geschwindigkeit, 1037 00:46:18,100 --> 00:46:20,880 nicht bei Intel-inside Art von Geschwindigkeit. 1038 00:46:20,880 --> 00:46:24,580 >> So, jetzt feststellen, diese Zeile erscheint hier, und wenn ich zurückgehen 1039 00:46:24,580 --> 00:46:27,800 mein Programm in gedit, feststellen, dass das ist eigentlich 1040 00:46:27,800 --> 00:46:29,280 die erste Zeile Code. 1041 00:46:29,280 --> 00:46:31,240 Es gibt Linie 16 in gedit. 1042 00:46:31,240 --> 00:46:34,610 Es gibt Linie 16 in GDB, und selbst Obwohl diese Schwarz-Weiß-Schnittstelle 1043 00:46:34,610 --> 00:46:37,760 ist nicht annähernd so benutzer freundlich, bedeutet dies, 1044 00:46:37,760 --> 00:46:41,680 diese Linie 16 wurde nicht ausgeführt noch nicht, aber es geht darum, zu sein. 1045 00:46:41,680 --> 00:46:46,220 Also in der Tat, wenn ich schreibe Druck x, nicht printf, nur print x, 1046 00:46:46,220 --> 00:46:50,730 Ich einige gefälschte Wert von Null dorthin zu gelangen, weil x ist noch nicht initialisiert. 1047 00:46:50,730 --> 00:46:54,760 So werde ich zum nächsten geben, oder, wenn man wollen kunstvoll zu sein, nur N für nächste. 1048 00:46:54,760 --> 00:46:59,090 Aber wenn ich schreibe nächste geben, jetzt merken es bewegt sich auf der Linie 17. 1049 00:46:59,090 --> 00:47:02,840 So logisch, wenn ich ausgeführt habe Zeile 16 und ich jetzt geben print x, 1050 00:47:02,840 --> 00:47:03,640 Was muss ich sehen? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 One. 1053 00:47:05,520 --> 00:47:07,820 >> Und jetzt ist dies zwar verwirrend. 1054 00:47:07,820 --> 00:47:11,260 $ 2 ist nur eine andere Art zu, wenn Sie wollen auf diesen Wert später beziehen, 1055 00:47:11,260 --> 00:47:12,510 Sie sagen: "Dollar-Zeichen zwei." 1056 00:47:12,510 --> 00:47:13,480 Es ist wie ein Rückverweis. 1057 00:47:13,480 --> 00:47:14,570 Aber jetzt, einfach ignorieren. 1058 00:47:14,570 --> 00:47:17,070 Was interessant ist, was ist auf der rechten Seite des Gleichheitszeichens. 1059 00:47:17,070 --> 00:47:21,000 Und jetzt, wenn ich als nächstes schreiben wieder und Druck y, sollte ich sehen 2. 1060 00:47:21,000 --> 00:47:23,870 Ich kann auch jetzt drucken x wieder, und ehrlich gesagt, 1061 00:47:23,870 --> 00:47:27,130 wenn ich immer ein wenig verwirrt, wo ich bin, kann ich Liste für Liste geben 1062 00:47:27,130 --> 00:47:30,590 und nur sehen, um einige Kontext der Punkt bin ich tatsächlich an. 1063 00:47:30,590 --> 00:47:35,180 Und jetzt habe ich geben kann Weiter, und gibt x 1 ist. 1064 00:47:35,180 --> 00:47:36,300 Jetzt tippe ich auf Weiter. 1065 00:47:36,300 --> 00:47:37,710 Oh, das ist y 2. 1066 00:47:37,710 --> 00:47:40,750 Und wieder ist es verwirrend, weil GDB Ausgangs 1067 00:47:40,750 --> 00:47:43,044 wird mit eigenen Ausgang vermischt. 1068 00:47:43,044 --> 00:47:45,710 Aber wenn man bedenkt, von Blick hin und her auf den Code 1069 00:47:45,710 --> 00:47:47,740 oder aus über IT-Seite einander vielleicht, werden Sie 1070 00:47:47,740 --> 00:47:51,020 sehen, dass wirklich, ich bin nur Schreiten durch mein Programm. 1071 00:47:51,020 --> 00:47:54,620 >> Beachten Sie aber, was als nächstes passiert, buchstäblich. 1072 00:47:54,620 --> 00:47:56,380 Hier ist Zeile 22. 1073 00:47:56,380 --> 00:48:01,315 Lassen Sie mich über sie gehen und bewegt dadurch auf bis 23, und wenn ich drucken X jetzt, immer noch einer. 1074 00:48:01,315 --> 00:48:03,890 Und wenn ich drucken y jetzt, immer noch einer. 1075 00:48:03,890 --> 00:48:05,820 Das ist also nicht eine nützliche Übung. 1076 00:48:05,820 --> 00:48:07,450 Also lassen Sie uns dies wiederholen. 1077 00:48:07,450 --> 00:48:10,069 Lassen Sie mich zurückgehen bis zu der Top-und Typ Lauf erneut. 1078 00:48:10,069 --> 00:48:12,110 Und es sagt, das Programm das ist gedebuggt 1079 00:48:12,110 --> 00:48:14,109 hat bereits begonnen, vom Beginn gestartet. 1080 00:48:14,109 --> 00:48:15,420 Ja, machen wir das wieder. 1081 00:48:15,420 --> 00:48:22,000 Und dieses Mal wollen wir als nächstes tun, Als nächstes nächstes nächstes nächstes 1082 00:48:22,000 --> 00:48:24,180 aber jetzt die Dinge interessant. 1083 00:48:24,180 --> 00:48:27,760 Jetzt möchte ich in den Schritt Swap, so dass ich nicht neben geben. 1084 00:48:27,760 --> 00:48:34,380 Ich tippe Schritt, und jetzt merkt es hat mich zu noswap.c Linie 33 gesprungen. 1085 00:48:34,380 --> 00:48:37,240 Wenn ich wieder zu gedit, was ist Zeile 33? 1086 00:48:37,240 --> 00:48:40,500 Das ist der erste tatsächliche Codezeile innerhalb Swap. 1087 00:48:40,500 --> 00:48:44,150 Das ist schön, denn jetzt kann ich Art schnüffeln und neugierig 1088 00:48:44,150 --> 00:48:46,052 , was los ist wirklich drin. 1089 00:48:46,052 --> 00:48:46,760 Lassen Sie mich tmp drucken. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Whoa. 1092 00:48:48,800 --> 00:48:51,438 Warum hat tmp einige haben verrückt, gefälschte Müll Wert? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 ZIELGRUPPE: Es wurde nicht initialisiert. 1095 00:48:56,120 --> 00:48:57,150 Sprecher 1: Es wurde nicht initialisiert. 1096 00:48:57,150 --> 00:49:00,270 Und in der Tat, wenn Sie ein Programm ausführen, Sie eine ganze Reihe von Speicher gegeben 1097 00:49:00,270 --> 00:49:03,392 durch das Betriebssystem, aber sie nicht initialisiert alle Werte, 1098 00:49:03,392 --> 00:49:05,600 so was auch immer du bist Bits hier sehen, auch wenn es 1099 00:49:05,600 --> 00:49:07,770 diese verrückte großen negativen Nummer, bedeutet nur, 1100 00:49:07,770 --> 00:49:10,750 dass diejenigen, die Reste von sind einige vorherige Nutzung dieser RAM, 1101 00:49:10,750 --> 00:49:13,050 auch wenn ich nicht mich brauchte es noch nicht. 1102 00:49:13,050 --> 00:49:17,086 So, jetzt werde ich weiter und Art gehen nächsten, und wenn ich jetzt Typ Druck tmp, 1103 00:49:17,086 --> 00:49:17,835 Was muss ich sehen? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Was auch immer der Wert von a war, a ist das erste Argument, nur 1106 00:49:23,360 --> 00:49:25,550 wie x war die erste Ding, das übergeben wird, 1107 00:49:25,550 --> 00:49:30,450 so a und x gleich sein sollten, so drucken tmp sollte mir ein drucken. 1108 00:49:30,450 --> 00:49:36,360 >> Also, was Sie in Problem-Set zu sehen drei ist ein Tutorial von Arten auf GDB, 1109 00:49:36,360 --> 00:49:40,020 aber erkennen, dass dies der Anfang von einem Blick auf ein Tool, das tatsächlich 1110 00:49:40,020 --> 00:49:42,774 Ihnen helfen, Probleme zu lösen so viel effektiver. 1111 00:49:42,774 --> 00:49:44,690 Was wir letztlich werde am Mittwoch zu tun 1112 00:49:44,690 --> 00:49:48,180 wird beginnen, ein paar Schichten wieder ablösen und entfernen Sie einige Stützräder. 1113 00:49:48,180 --> 00:49:50,496 Das Ding namens String, wir für einige Zeit verwendet haben, 1114 00:49:50,496 --> 00:49:53,370 wir werden langsam wegnehmen von Ihnen und sprechen über 1115 00:49:53,370 --> 00:49:55,725 etwas esoterisch als char * bekannt, 1116 00:49:55,725 --> 00:49:59,550 aber wir werden dieses schöne tun und zuerst sanft, obwohl Zeiger, 1117 00:49:59,550 --> 00:50:02,730 wie sie genannt werden, können einige tun sehr schlimme Dinge, wenn missbraucht, 1118 00:50:02,730 --> 00:50:06,040 durch Blick auf ein wenig claymation aus unser Freund Nick Parlante von der Stanford 1119 00:50:06,040 --> 00:50:09,670 Universität, Professor in Computer Wissenschaft, die zusammen diese Vorschau setzen 1120 00:50:09,670 --> 00:50:11,075 von dem, was auf diesem Mittwoch kommen. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [VIDEO PLAYBACK] 1123 00:50:13,400 --> 00:50:13,900 -Hey, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Aufwachen. 1126 00:50:15,780 --> 00:50:17,240 Es ist Zeit für Zeiger Spaß. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> -Was Ist das? 1129 00:50:19,350 --> 00:50:21,150 Erfahren Sie mehr über Zeiger? 1130 00:50:21,150 --> 00:50:22,050 Oh, gute sachen! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END VIDEO PLAYBACK] 1133 00:50:23,730 --> 00:50:25,396 Sprecher 1: Das erwartet Sie am Mittwoch. 1134 00:50:25,396 --> 00:50:26,440 Wir sehen uns dann. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO PLAYBACK] 1136 00:50:27,106 --> 00:50:30,420 -Und Jetzt, Deep Thoughts, Daven von Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> -Warum Lernen wir C? 1139 00:50:35,900 --> 00:50:36,785 Warum nicht A +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Gelächter] 1142 00:50:40,910 --> 00:50:42,160 >> [END VIDEO PLAYBACK]