1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. MALAN: In Ordnung. 3 00:00:12,900 --> 00:00:16,790 Also willkommen in der ersten CS50 Obduktion für ein Quiz. 4 00:00:16,790 --> 00:00:18,340 Wir dachten, wir würden einweihen diese Tradition in diesem Jahr. 5 00:00:18,340 --> 00:00:20,960 Und das wird eine Chance sein durch die gehen 6 00:00:20,960 --> 00:00:22,220 Lösungen zum Quiz. 7 00:00:22,220 --> 00:00:26,160 Und wir beschleunigen oder verlangsamen Basis auf Interesse derer hier. 8 00:00:26,160 --> 00:00:29,730 >> So sind Sie wahrscheinlich hier, weil Sie interessiert, wie könnten Sie haben oder 9 00:00:29,730 --> 00:00:31,170 sollten einige beantwortet haben dieser Probleme. 10 00:00:31,170 --> 00:00:33,300 Also, warum nicht wir einen Blick in diesem Abschnitt zuerst? 11 00:00:33,300 --> 00:00:34,450 So bekommen Saiten. 12 00:00:34,450 --> 00:00:37,600 Dies gab drei verschiedene Versionen eines Programms, war schließlich 13 00:00:37,600 --> 00:00:39,650 soll eine Zeichenfolge von einem Benutzer zu bekommen. 14 00:00:39,650 --> 00:00:42,530 Ob es tat, war links an Ihnen zu bestimmen. 15 00:00:42,530 --> 00:00:45,150 >> Und wir fragten in Frage 0, nehme an, dass die Version 1 ist 16 00:00:45,150 --> 00:00:46,400 kompiliert und ausgeführt. 17 00:00:46,400 --> 00:00:48,860 Warum könnte das Programm abstürzt? 18 00:00:48,860 --> 00:00:51,150 Auf den ersten Blick, irgendwelche Vorschläge , warum? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Ja. 21 00:00:54,489 --> 00:00:59,260 >> ZIELGRUPPE: Also ich erinnere mich, diese in eine vorherige Beispiel der Blick auf die 22 00:00:59,260 --> 00:01:05,506 char * s und zu sehen, den Scan der s-und sehen, denn es ist ein Zeiger, wie 23 00:01:05,506 --> 00:01:07,971 hat es sich auf, was Sie in gescannt? 24 00:01:07,971 --> 00:01:10,940 Ist es s oder die Adresse von s? 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. MALAN: OK. 26 00:01:11,180 --> 00:01:11,480 Gut. 27 00:01:11,480 --> 00:01:14,830 So sind letztlich die Quelle eines Problems vermutlich werde reduzieren 28 00:01:14,830 --> 00:01:16,210 auf diese Variable s. 29 00:01:16,210 --> 00:01:17,280 Und es ist in der Tat eine Variable. 30 00:01:17,280 --> 00:01:19,900 Der Datentyp dieser Variablen ist char *, was bedeutet, es wird 31 00:01:19,900 --> 00:01:22,570 enthalten die Adresse eines Zeichens. 32 00:01:22,570 --> 00:01:23,850 Und darin liegt die Einsicht. 33 00:01:23,850 --> 00:01:28,330 Es wird die Adresse enthalten ein Zeichen oder, allgemeiner, die 34 00:01:28,330 --> 00:01:32,110 Adresse des ersten Zeichens in ein ganzer Block von Zeichen. 35 00:01:32,110 --> 00:01:36,680 >> Aber der Haken ist, dass Scan-s, Zweck in Leben, eine Adresse gegeben und gegeben 36 00:01:36,680 --> 00:01:40,960 ein Format-Code, wie% s lesen eine Zeichenfolge in das Stück 37 00:01:40,960 --> 00:01:42,330 Speicher an dieser Adresse. 38 00:01:42,330 --> 00:01:46,040 Aber weil es keine Gleichheitszeichen vor Semikolon, dass auf der ersten 39 00:01:46,040 --> 00:01:49,310 Code-Zeile, weil wir nicht wirklich zuteilen beliebigen Speicher mit 40 00:01:49,310 --> 00:01:53,020 malloc, denn es kam nicht wirklich zuteilen ein Array mit einer gewissen Größe, die alle 41 00:01:53,020 --> 00:01:57,620 Sie tun, ist das Lesen der Benutzer- Tastatureingaben in eine komplette 42 00:01:57,620 --> 00:02:00,490 Müll-Wert, der ist in s standardmäßig. 43 00:02:00,490 --> 00:02:04,480 Also Chancen sind Sie gehen zu abstürzt, sind, wenn dass Adresse nicht einfach so passieren 44 00:02:04,480 --> 00:02:08,009 ein Wert, der du sein kannst, in der Tat, zu schreiben. 45 00:02:08,009 --> 00:02:10,889 So schlecht, nicht zu vergeben Ihr Gedächtnis gibt. 46 00:02:10,889 --> 00:02:13,150 >> So in Frage 1, fragten wir, nehme an, dass die Version 2 ist 47 00:02:13,150 --> 00:02:14,230 kompiliert und ausgeführt. 48 00:02:14,230 --> 00:02:15,900 Warum könnte das Programm abstürzt? 49 00:02:15,900 --> 00:02:17,990 Also dieses ist weniger fehlerbehaftet. 50 00:02:17,990 --> 00:02:21,470 Und es gibt wirklich nur eine offensichtliche Weise, wo man 51 00:02:21,470 --> 00:02:22,810 auslösen segfault hier. 52 00:02:22,810 --> 00:02:23,730 Und das ist thematisch. 53 00:02:23,730 --> 00:02:28,180 Jedes Mal, wenn wir mit c in Erinnerung, was könnten Sie tun, um einen Speicherzugriffsfehler herbei 54 00:02:28,180 --> 00:02:30,718 Version 2? 55 00:02:30,718 --> 00:02:35,560 >> ZIELGRUPPE: Wenn Sie diese Eingabe in verwenden ein String, der länger als 49 ist 56 00:02:35,560 --> 00:02:35,975 Zeichen. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. MALAN: Genau. 58 00:02:37,260 --> 00:02:41,420 Jedes Mal, wenn Sie etwas fester Länge sehen wenn es um eine Anordnung kommt, Ihre 59 00:02:41,420 --> 00:02:44,650 Radar sollte gehen, dass dies sein problematisch, wenn Sie nicht die Überprüfung sind die 60 00:02:44,650 --> 00:02:45,810 Grenzen eines Arrays. 61 00:02:45,810 --> 00:02:46,650 Und das ist das Problem hier. 62 00:02:46,650 --> 00:02:47,910 Wir sind immer noch mit scanf. 63 00:02:47,910 --> 00:02:52,200 Wir sind immer noch mit% s, was bedeutet, versuchen um eine Zeichenfolge vom Benutzer gelesen. 64 00:02:52,200 --> 00:02:56,300 Das wird in s gelesen werden, die, An diesem Punkt ist effektiv die 65 00:02:56,300 --> 00:02:58,570 Adresse eines Teil des Speichers oder dessen Äquivalent. 66 00:02:58,570 --> 00:03:02,080 Es ist der Name eines Arrays der Zeichen-Speicher. 67 00:03:02,080 --> 00:03:07,610 >> Aber genau das, wenn Sie einen String lesen das ist länger als 49 Zeichen, 49 68 00:03:07,610 --> 00:03:10,440 weil man Platz für den umgekehrten Schrägstrich müssen 0, wirst du zum Überlaufen 69 00:03:10,440 --> 00:03:11,390 dass Puffer. 70 00:03:11,390 --> 00:03:16,410 Und Sie vielleicht Glück haben und in der Lage, einen 51. Charakter, 52., 53.. 71 00:03:16,410 --> 00:03:18,560 Aber irgendwann, das Betriebssystem wird sagen, nein. 72 00:03:18,560 --> 00:03:21,270 Dies ist definitiv nicht Speicher dürfen Sie zu berühren. 73 00:03:21,270 --> 00:03:23,380 Und das Programm wird sich abstürzt. 74 00:03:23,380 --> 00:03:26,650 >> Also gibt, sollten die Heuristik beliebig sein Zeit, die Sie feste Länge haben, müssen Sie 75 00:03:26,650 --> 00:03:30,150 um sicherzustellen, dass Sie die Überprüfung der Länge von was auch immer es ist, Sie versuchen, 76 00:03:30,150 --> 00:03:31,090 in sie zu lesen. 77 00:03:31,090 --> 00:03:35,110 >> ZIELGRUPPE: Also zu lösen, könnten Sie eine Erklärung Überprüfung tatsächlich gehabt haben 78 00:03:35,110 --> 00:03:37,140 ist die Länge größer oder kleiner als? 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. MALAN: Unbedingt. 80 00:03:37,730 --> 00:03:41,706 Sie müssen nur eine Bedingung , die sagt, wenn die - 81 00:03:41,706 --> 00:03:46,080 oder vielmehr muss man nicht unbedingt wissen im Voraus, wie viele Zeichen der 82 00:03:46,080 --> 00:03:49,060 Benutzer wird sich geben, weil Sie haben Huhn und das Ei. 83 00:03:49,060 --> 00:03:51,860 Nicht, bis Sie es mit scanf gelesen habe können Sie herausfinden, wie lang es ist. 84 00:03:51,860 --> 00:03:54,500 Aber an diesem Punkt, ist es zu spät, weil Sie bereits in lesen 85 00:03:54,500 --> 00:03:55,710 einige Speicherblock. 86 00:03:55,710 --> 00:03:59,590 So nebenbei, die CS50-Bibliothek vermeidet diese Frage überhaupt, Rückruf 87 00:03:59,590 --> 00:04:01,060 durch die Verwendung fgetc. 88 00:04:01,060 --> 00:04:05,390 Und es liest ein Zeichen in einer Zeit, Zehenspitzen zusammen, wohl wissend, dass Sie 89 00:04:05,390 --> 00:04:08,060 können ein Zeichen, wenn nicht überlaufen Sie lesen ein zu einer Zeit. 90 00:04:08,060 --> 00:04:11,580 >> Der Haken ist mit getstring Rückruf dass wir uns immer wieder neu Größe 91 00:04:11,580 --> 00:04:13,590 dass Teil des Speichers, die ist nur ein Schmerz. 92 00:04:13,590 --> 00:04:15,310 Es ist eine Menge von Zeilen Code, um das zu tun. 93 00:04:15,310 --> 00:04:18,779 So wäre ein weiterer Ansatz sein tatsächlich eine Cousine, so 94 00:04:18,779 --> 00:04:19,790 zu sprechen, von scanf. 95 00:04:19,790 --> 00:04:22,820 Es gibt Varianten einer Menge von diesen Funktionen, die tatsächlich überprüfen 96 00:04:22,820 --> 00:04:25,870 Länge, wie viele Zeichen Sie können maximal lesen. 97 00:04:25,870 --> 00:04:29,430 Und man konnte angeben, nicht lesen mehr als 50 Zeichen. 98 00:04:29,430 --> 00:04:34,110 Damit wäre ein weiterer Ansatz sein, aber weniger entgegen von größeren Eingängen. 99 00:04:34,110 --> 00:04:37,040 >> Also Frage 2 fragt, nehme diese Version 3 kompiliert und ausgeführt. 100 00:04:37,040 --> 00:04:39,960 Woran kann das Programm abstürzt? 101 00:04:39,960 --> 00:04:42,650 Also das ist eigentlich das gleiche beantworten, obwohl es 102 00:04:42,650 --> 00:04:43,590 sieht ein wenig schicker. 103 00:04:43,590 --> 00:04:46,440 Wir verwenden malloc, die wie fühlt sich wir geben uns mehr Möglichkeiten. 104 00:04:46,440 --> 00:04:48,030 Und dann sind wir zu befreien, dass Speicher am Ende. 105 00:04:48,030 --> 00:04:49,580 Es ist immer noch nur 50 Byte Speicherplatz. 106 00:04:49,580 --> 00:04:53,620 So könnten wir immer noch versuchen zu lesen in 51, 52, 1000 Bytes. 107 00:04:53,620 --> 00:04:55,830 Es wird für abstürzt genau dem gleichen Grund. 108 00:04:55,830 --> 00:04:57,530 >> Aber es ist ein weiterer Grund. 109 00:04:57,530 --> 00:05:03,890 Was sonst könnte Rück neben malloc die Adresse eines Speicherstück? 110 00:05:03,890 --> 00:05:04,920 Es könnte null zurück. 111 00:05:04,920 --> 00:05:07,560 Und weil wir nicht für die Überprüfung dass wir vielleicht etwas tun 112 00:05:07,560 --> 00:05:11,350 dumm aus einem anderen Grund, der ist, dass wir könnten sagen, scanf, lesen 113 00:05:11,350 --> 00:05:16,050 die Benutzereingabe von der Tastatur 0 in Lage, AKA null. 114 00:05:16,050 --> 00:05:18,890 Und das auch, wird auf jeden Fall Auslöser einer Schutzverletzung. 115 00:05:18,890 --> 00:05:21,590 Also für den Zweck des Quiz ist, würden wir entweder von denen als angenommen 116 00:05:21,590 --> 00:05:22,740 triftigen Grund. 117 00:05:22,740 --> 00:05:23,420 Einer ist identisch. 118 00:05:23,420 --> 00:05:25,720 Man ist ein wenig differenzierter. 119 00:05:25,720 --> 00:05:28,975 >> Schließlich, in Bezug auf die Programm Speichernutzung, wie die Version 2 zu tun und 120 00:05:28,975 --> 00:05:30,350 Version 3 unterscheiden? 121 00:05:30,350 --> 00:05:35,070 Also für das, was es wert ist, sahen wir einen scheinbar endlosen Vorrat an möglichen 122 00:05:35,070 --> 00:05:35,770 Antworten. 123 00:05:35,770 --> 00:05:39,300 Und unter den Antworten der Menschen, was wir waren hoffen, aber wir anderen akzeptiert 124 00:05:39,300 --> 00:05:42,250 Dinge, war eine Erwähnung der Tatsache, dass die Version 2 wird mit 125 00:05:42,250 --> 00:05:44,560 die sogenannten Stack. 126 00:05:44,560 --> 00:05:46,710 Version 3 wird mit dem Heap. 127 00:05:46,710 --> 00:05:50,060 Und funktionell, tut dies nicht wirklich machen, dass alle viel von einem Unterschied. 128 00:05:50,060 --> 00:05:54,040 Am Ende des Tages sind wir immer noch nur immer 50 Byte Speicherplatz. 129 00:05:54,040 --> 00:05:56,640 >> Aber das war eine der möglichen Antworten dass wir auf der Suche. 130 00:05:56,640 --> 00:05:59,730 Aber Sie werden sehen, wie Sie Ihre Quiz bekommen zurück von der TF, dass wir das gemacht haben 131 00:05:59,730 --> 00:06:04,330 anderen Diskussionen akzeptieren ihre unterschiedlichen Verwendungen von Speicher auch. 132 00:06:04,330 --> 00:06:08,600 Aber Stack und Heap gewesen wäre eine einfache Antwort mit zu gehen. 133 00:06:08,600 --> 00:06:11,150 Haben Sie Fragen? 134 00:06:11,150 --> 00:06:12,400 Ich gebe dir Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: Also Problem 4. 137 00:06:20,210 --> 00:06:21,985 Dies ist die eine, wo Sie hatte zu füllen in der Anzahl der Bytes von allen 138 00:06:21,985 --> 00:06:23,460 Diese verschiedenen Arten verwendet. 139 00:06:23,460 --> 00:06:24,830 Also erste, was wir sehen. 140 00:06:24,830 --> 00:06:27,930 Angenommen, ein 32-Bit-Architektur, wie dieses Gerät CS50. 141 00:06:27,930 --> 00:06:33,530 Also eine der grundlegenden Dinge über 32-Bit-Architekturen, die uns sagt, dass 142 00:06:33,530 --> 00:06:37,490 genau, wie groß ein Zeiger geht in der Architektur. 143 00:06:37,490 --> 00:06:43,020 >> Also sofort, wir wissen, dass jede Zeiger Typ 32 Bits oder 4 Bytes. 144 00:06:43,020 --> 00:06:46,010 So suchen Sie in dieser Tabelle ein Knoten * ist ein Zeiger-Typ. 145 00:06:46,010 --> 00:06:47,250 Das wird 4 Bytes. 146 00:06:47,250 --> 00:06:51,640 Struct Knoten *, das ist buchstäblich identisch mit Knoten Stern. 147 00:06:51,640 --> 00:06:53,590 Und damit geht um 4 Bytes. 148 00:06:53,590 --> 00:06:58,270 String, so dass es nicht wie ein noch Zeiger, aber die typedef ein 149 00:06:58,270 --> 00:07:01,590 String ist nur ein char *, die ist ein Zeiger-Typ. 150 00:07:01,590 --> 00:07:03,550 Also das wird 4 Bytes. 151 00:07:03,550 --> 00:07:06,150 >> Also diese drei sind alle 4 Bytes. 152 00:07:06,150 --> 00:07:09,350 Jetzt, Knoten und Schüler sind ein wenig komplizierter. 153 00:07:09,350 --> 00:07:15,160 So suchen Sie in Knoten und Schüler, sehen wir Knoten nach einer ganzen Zahl und einem Zeiger. 154 00:07:15,160 --> 00:07:18,050 Und Schüler zwei Zeiger darin. 155 00:07:18,050 --> 00:07:23,340 So dass zumindest für unseren Fall hier der Weg dass wir am Ende der Berechnung der Größe der 156 00:07:23,340 --> 00:07:27,020 Diese Struktur ist nur hinzufügen, bis alles das ist in der Struktur. 157 00:07:27,020 --> 00:07:30,690 >> Also für Knoten, haben wir eine ganze Zahl, das ist 4 Bytes. 158 00:07:30,690 --> 00:07:32,830 Wir haben einen Zeiger, der 4 Bytes ist. 159 00:07:32,830 --> 00:07:35,820 Und so ein Knoten wird zu nehmen 8 Byte. 160 00:07:35,820 --> 00:07:39,490 Und ebenso für Studenten, haben wir ein Zeiger, der 4 Byte und ein anderer ist 161 00:07:39,490 --> 00:07:40,770 Zeiger, der 4 Bytes ist. 162 00:07:40,770 --> 00:07:43,180 Also das geht zu Ende Sein bis 8 Byte. 163 00:07:43,180 --> 00:07:45,480 So Knoten und Schüler sind 8 Byte. 164 00:07:45,480 --> 00:07:48,950 Und diese drei sind alle 4 Bytes. 165 00:07:48,950 --> 00:07:50,240 Fragen dazu? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Ja. 168 00:07:54,990 --> 00:07:58,413 >> ZIELGRUPPE: Ist es ein 64-Bit- Architektur, würde das 169 00:07:58,413 --> 00:07:59,880 verdoppeln alle? 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: Es würde nicht verdoppeln alle. 171 00:08:01,790 --> 00:08:05,830 Also 64-Bit-Architektur, sie, wieder, Veränderungen, die grundlegende Sache, dass ein 172 00:08:05,830 --> 00:08:08,910 Zeiger ist jetzt 64 Bit. 173 00:08:08,910 --> 00:08:09,290 Ja. 174 00:08:09,290 --> 00:08:10,930 So ist ein Zeiger 8 Byte. 175 00:08:10,930 --> 00:08:15,420 Also diese, die 4 Bytes waren gehen, um 8 Bytes sein. 176 00:08:15,420 --> 00:08:18,617 Ein Student, der zwei Zeiger war, Nun, jetzt es geht um 177 00:08:18,617 --> 00:08:19,800 werden 8 Byte, 8 Byte. 178 00:08:19,800 --> 00:08:21,980 Es wird zu 16 Byte zu machen. 179 00:08:21,980 --> 00:08:25,710 >> Aber ein Knoten noch 4 Bytes. 180 00:08:25,710 --> 00:08:27,800 So wird dieser Zeiger 8 Byte. 181 00:08:27,800 --> 00:08:28,930 Das ist 4 Bytes. 182 00:08:28,930 --> 00:08:30,870 So ein Knoten ist nur noch 12 Bytes. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Alle anderen Fragen auf, dass man? 185 00:08:39,280 --> 00:08:44,500 Also das nächste, das sind die HTTP-Statuscodes. 186 00:08:44,500 --> 00:08:48,000 Und Sie nach Umständen zu beschreiben, hatte unter denen diese Macht 187 00:08:48,000 --> 00:08:49,810 an Sie zurückgegeben werden. 188 00:08:49,810 --> 00:08:56,730 ein Problem, das ich hörte einige Studenten ist, dass sie versuchte, die 189 00:08:56,730 --> 00:08:58,950 Fehler auf Ende des Auftraggebers. 190 00:08:58,950 --> 00:09:02,320 Also, wenn wir versuchen, den Antrag zu stellen an den Server, geht etwas 191 00:09:02,320 --> 00:09:03,820 falsch an unserem Ende. 192 00:09:03,820 --> 00:09:07,660 Aber im allgemeinen sind diese Codes , die vom Server zurückgegeben. 193 00:09:07,660 --> 00:09:11,720 Also, um herauszufinden, was los ist wollen wir falsch oder richtig auf dem Server, 194 00:09:11,720 --> 00:09:14,280 bewirkt, dass diese Dinge zurückgegeben werden. 195 00:09:14,280 --> 00:09:18,670 Warum könnte ein Server zurück Statuscode 200? 196 00:09:18,670 --> 00:09:19,920 Irgendwelche Gedanken? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Ja. 199 00:09:23,730 --> 00:09:27,850 So etwas erfolgreich der Antrag ging durch. 200 00:09:27,850 --> 00:09:30,260 Und sie sind in der Lage, zurück was auch immer Sie fragte nach. 201 00:09:30,260 --> 00:09:32,240 So war alles in Ordnung. 202 00:09:32,240 --> 00:09:35,662 Was etwa 302 gefunden? 203 00:09:35,662 --> 00:09:36,618 Ja. 204 00:09:36,618 --> 00:09:39,008 >> ZIELGRUPPE: Der Server war auf der Suche für das, was Sie angefordert haben. 205 00:09:39,008 --> 00:09:40,442 Aber es konnte ihn nicht finden. 206 00:09:40,442 --> 00:09:42,850 Es gibt also ein Fehler. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: So war der Server suchen, was Sie wollten. 208 00:09:47,720 --> 00:09:51,682 Also einfach hier suchen, 302 gefunden, es war in der Lage, es zu finden. 209 00:09:51,682 --> 00:09:53,035 >> ZIELGRUPPE: Tut mir leid. 210 00:09:53,035 --> 00:09:54,388 Gefunden bedeutet, dass sie tat es. 211 00:09:54,388 --> 00:09:55,638 Entschuldigung. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: Also 302 gefunden. 214 00:10:00,160 --> 00:10:02,350 Der Server ist in der Lage zu finden was Sie wollten. 215 00:10:02,350 --> 00:10:04,640 >> ZIELGRUPPE: Aber es ist nicht angezeigt oder? 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: Die Differenz zwischen Diese 302 und 200 ist, dass es 217 00:10:08,180 --> 00:10:09,280 weiß, was Sie wollen. 218 00:10:09,280 --> 00:10:12,000 Aber es ist nicht genau, wo Sie wollte fragen. 219 00:10:12,000 --> 00:10:14,580 Also 302 ist ein typisches Umleitung. 220 00:10:14,580 --> 00:10:16,510 So haben Sie eine Seite angefordert. 221 00:10:16,510 --> 00:10:19,590 Es weiß, oh, ich will um Ihnen diese zurück. 222 00:10:19,590 --> 00:10:21,070 Dies ist jedoch in einer anderen URL. 223 00:10:21,070 --> 00:10:23,534 Also hey, die Sie tatsächlich wollen, dass diese. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. MALAN: Es ist ein Stück, das die gab, dass wir euch eine Umleitung 225 00:10:26,950 --> 00:10:30,830 Funktion, die die Kopffunktion verwendet daß wiederum ausgedruckt Lage, 226 00:10:30,830 --> 00:10:34,110 Doppelpunkt und dann die URL, auf die Sie den Benutzer zurückweisen möchten. 227 00:10:34,110 --> 00:10:37,480 Auch wenn Sie nicht sehen, 302 es ausdrücklich, dass das, was PHP 228 00:10:37,480 --> 00:10:41,550 würde magisch als Header einfügen sagen, genau das, was Rob sagte, dass es - 229 00:10:41,550 --> 00:10:41,930 gefunden. 230 00:10:41,930 --> 00:10:43,180 Aber hier gehen statt. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB BOWDEN: OK. 233 00:10:46,160 --> 00:10:47,630 So was über 403 verboten? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> ZIELGRUPPE: Ich denke, es ist, dass der Server ist im Grunde sagen, dass der Client 236 00:10:57,120 --> 00:10:59,970 kann nicht auf die Startseite. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: Also ja. 238 00:11:03,260 --> 00:11:07,670 Nun, wir waren die typische Antwort erwarten ist so etwas wie die Dateien 239 00:11:07,670 --> 00:11:08,920 nicht angemessen chmodded. 240 00:11:08,920 --> 00:11:11,590 Das ist wahrscheinlich, unter welchen Umständen Sie sah. 241 00:11:11,590 --> 00:11:18,920 Aber es gibt einen Grund dafür, dass der Client Schuld könnte hier sein. 242 00:11:18,920 --> 00:11:20,440 Es gibt tatsächlich ein weiteres Status-Code - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Das sind also sehr ähnlich. 245 00:11:22,820 --> 00:11:24,590 >> 401 ein. 246 00:11:24,590 --> 00:11:26,130 Und 403 ist untersagt. 247 00:11:26,130 --> 00:11:31,890 Und so unberechtigten Sie ausschließlich bekommen, wenn Sie nicht eingeloggt 248 00:11:31,890 --> 00:11:34,520 Aber der Anmeldung könnte bedeuten, dass Sie berechtigt sind. 249 00:11:34,520 --> 00:11:37,930 Aber wenn Sie bereits eingeloggt, und Sie noch nicht über die Berechtigung, dann 250 00:11:37,930 --> 00:11:40,140 können Sie auch verboten. 251 00:11:40,140 --> 00:11:45,320 Also, wenn Sie eingeloggt sind und müssen nicht Genehmigung ist auch verboten 252 00:11:45,320 --> 00:11:47,164 etwas, das man bekommen kann. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. MALAN: Und der Mechanismus, durch welche diese Probleme sind in der Regel 254 00:11:48,900 --> 00:11:53,100 gelöst, auf dem Server über welchen Befehl? 255 00:11:53,100 --> 00:11:57,700 Chmod, wenn es in der Tat ein Berechtigungen Ausgabe auf die Datei oder das Verzeichnis. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: Dann 404 nicht gefunden. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Ja. 259 00:12:03,470 --> 00:12:10,150 Also im Gegensatz zu 302, wo es nicht genau wo Sie fragen, aber es weiß, was 260 00:12:10,150 --> 00:12:12,710 Sie wollen, nur hat es diese keine Ahnung, was Sie wollen. 261 00:12:12,710 --> 00:12:15,648 Und Sie anfordern, etwas gültig. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Ich bin eine Teekanne und dann 500 internen Server. 264 00:12:22,310 --> 00:12:24,870 Also, warum sollten Sie das her? 265 00:12:24,870 --> 00:12:26,120 >> So abstürzt - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Ich eigentlich nicht wissen, die Einstufung Standard für diese. 268 00:12:30,640 --> 00:12:34,850 Aber wenn Ihre PHP-Code hatte etwas falsch daran, in der Theorie, könnte es 269 00:12:34,850 --> 00:12:39,650 tatsächlich abstürzt, in welchem ​​Fall diese 500 Internal Server Error, etwas, 270 00:12:39,650 --> 00:12:41,400 ist falsch mit Ihrem Server des Konfiguration. 271 00:12:41,400 --> 00:12:44,320 Oder gibt es eine Syntax-Fehler in der PHP-Code. 272 00:12:44,320 --> 00:12:46,095 Oder etwas Schlimmes vor sich geht. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. MALAN: Wir haben sehen segfault unter die Antworten ein paar Leute. 274 00:12:48,320 --> 00:12:49,490 Und technisch könnte es passieren. 275 00:12:49,490 --> 00:12:53,820 Aber das wäre ein PHP, das Programm sein geschrieben von anderen Menschen, eigentlich 276 00:12:53,820 --> 00:12:57,790 segfaulted, die nur, wenn diese Personen oben geschraubt und schrieb fehlerhaften Code in 277 00:12:57,790 --> 00:13:00,680 ihre Dolmetscher würde PHP selbst abstürzt. 278 00:13:00,680 --> 00:13:06,460 Also auch wenn 500 ist wie eine Schutzverletzung im Geiste, ist es fast immer der 279 00:13:06,460 --> 00:13:10,490 Ergebnis einer Konfigurationsdatei Ausgabe mit Ihrem Web-Server oder, wie Rob sagte, 280 00:13:10,490 --> 00:13:13,200 Syntaxfehler, wie Sie hat ein Angebot nicht zu schließen. 281 00:13:13,200 --> 00:13:16,180 Oder Sie ein Semikolon irgendwo verloren. 282 00:13:16,180 --> 00:13:23,677 >> ZIELGRUPPE: Also für den Shuttle pset, ich denken, wenn ich es tat, wenn ich das angeklickt 283 00:13:23,677 --> 00:13:26,300 Browser, aber nichts kam, was sie weiße Seite aufgerufen. 284 00:13:26,300 --> 00:13:28,056 Aber es war wegen der Codes. 285 00:13:28,056 --> 00:13:29,440 Ich glaube, das war kein JavaScript, oder? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Ja. 287 00:13:29,770 --> 00:13:31,180 >> ZIELGRUPPE: Würde das Fehler noch kommen? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Also würden Sie nicht bekommen haben dieser Fehler, weil alles 289 00:13:34,290 --> 00:13:36,930 aus Sicht der Web-Server war völlig in Ordnung. 290 00:13:36,930 --> 00:13:39,090 Aber Sie angefordert index.html. 291 00:13:39,090 --> 00:13:42,000 Sie beantragt shuttle.js und service.js. 292 00:13:42,000 --> 00:13:44,580 Und es war in der Lage, erfolgreich zurück an euch alle diese Dinge - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Es ist nur, wenn Ihr Browser versucht, interpretieren den JavaScript-Code, 296 00:13:49,330 --> 00:13:51,370 es ist wie, warten, ist dies nicht gültigen JavaScript-Fehler. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Noch Fragen? 299 00:13:58,210 --> 00:14:00,750 Gut. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. MALAN: Also das nächste Sie war die Nummer 11. 301 00:14:04,120 --> 00:14:07,610 Und 11 war der schrecklichste für eine Menge Leute. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 So ist die wichtigste Sache, hier zu beachten war, dass dies in der Tat zu 304 00:14:18,570 --> 00:14:19,840 ein doppelt verketteten Liste. 305 00:14:19,840 --> 00:14:23,160 Aber das war nicht das gleiche wie im letzten Jahr doppelt verknüpfte Liste Problem, 306 00:14:23,160 --> 00:14:27,170 die nicht geben, haben Sie den Vorbehalt, dass die Liste könnte in der Tat sein, unsortiert. 307 00:14:27,170 --> 00:14:29,640 >> Also die Tatsache, dass die Liste war unsortiert und die Tatsache, dass das Wort war 308 00:14:29,640 --> 00:14:32,930 unterstrichen es bedeutet wurde, um zu vermitteln dass dies tatsächlich eine Vereinfachung 309 00:14:32,930 --> 00:14:35,430 von dem, was sonst gewesen wäre, eine größere Herausforderung Problem 310 00:14:35,430 --> 00:14:36,600 und eine längere. 311 00:14:36,600 --> 00:14:40,760 So war ein häufiger Fehler, hier zu setzen haben im vergangenen Jahr die Lösung auf ein 312 00:14:40,760 --> 00:14:45,580 Pager und dann einfach blind zu kopieren, dass sich wie die Antwort, die die richtige ist 313 00:14:45,580 --> 00:14:48,520 Antwort auf eine andere Frage im Geiste. 314 00:14:48,520 --> 00:14:51,340 Aber die Feinheiten hier waren wie folgt. 315 00:14:51,340 --> 00:14:55,200 >> So eine haben wir ein Knoten deklariert und in üblicher Weise definiert. 316 00:14:55,200 --> 00:14:59,230 Dann definiert man eine Liste der global sein Zeiger mit null initialisiert. 317 00:14:59,230 --> 00:15:02,150 Dann anscheinend gibt es zwei Funktionen wir haben Prototypen für hier, einfügen 318 00:15:02,150 --> 00:15:03,240 und zu entfernen. 319 00:15:03,240 --> 00:15:06,600 Und dann haben wir hier einige Beispiel-Code zu tun, ein paar von Insertionen. 320 00:15:06,600 --> 00:15:09,930 Und dann bitten wir Sie, vervollständigen die Umsetzung des Einsatzes unten dergestalt 321 00:15:09,930 --> 00:15:14,380 eine Möglichkeit, dass es in die Liste eingefügt n in konstanter Zeit, unterstrich auch, 322 00:15:14,380 --> 00:15:15,730 auch wenn bereits vorhanden ist. 323 00:15:15,730 --> 00:15:20,600 >> So ist die Schönheit des Seins in der Lage, einfügen in konstanten Zeit ist, dass es bedeutet, 324 00:15:20,600 --> 00:15:23,060 dass Sie einfügen müssen der neue Knoten, wo? 325 00:15:23,060 --> 00:15:23,690 In der Front. 326 00:15:23,690 --> 00:15:27,760 So ist es eliminiert, Gott sei Dank, wenigstens einer der Fälle, die erfordern 327 00:15:27,760 --> 00:15:30,520 noch mehr Zeilen Code, wie damals, im letzten Jahr und auch in der Klasse, wenn wir 328 00:15:30,520 --> 00:15:34,040 durch diese Art der Sache gesprochen mit Menschen und mit einigen 329 00:15:34,040 --> 00:15:35,250 verbale Pseudo-Code. 330 00:15:35,250 --> 00:15:39,190 Also in der Lösung hier, mal überspringen zu, dass, nur um eine visuelle auf haben 331 00:15:39,190 --> 00:15:40,480 der Bildschirm. 332 00:15:40,480 --> 00:15:42,230 >> Beachten Sie, dass wir tun, die folgenden. 333 00:15:42,230 --> 00:15:45,140 Und auch feststellen, das andere Vereinfachung war, dass auch wenn es 334 00:15:45,140 --> 00:15:48,280 bereits vorhanden ist, so bedeutet dies, auch wenn die Zahl ist schon da, du kannst 335 00:15:48,280 --> 00:15:50,280 einfach blind ein anderes einfügen Kopie. 336 00:15:50,280 --> 00:15:52,560 Und das auch, sollte ein sein Vereinfachung, so dass Sie könnte 337 00:15:52,560 --> 00:15:54,940 konzentrieren, wirklich, einige der mehr intellektuell interessante Teil und 338 00:15:54,940 --> 00:15:58,090 nicht nur einige zusätzliche Fehlerprüfung Angesichts der begrenzten Zeit. 339 00:15:58,090 --> 00:16:02,880 >> Also in diesem Probenlösung, weisen wir einen Zeiger auf die linke 340 00:16:02,880 --> 00:16:04,510 Seite hier zu einem Knoten. 341 00:16:04,510 --> 00:16:07,190 Jetzt merke, dass die Zeiger, so Rob sagte, ist nur 32 Bit. 342 00:16:07,190 --> 00:16:09,060 Und es muss nicht tatsächlich enthalten eine Adresse, bis Sie 343 00:16:09,060 --> 00:16:09,970 weisen Sie die Adresse. 344 00:16:09,970 --> 00:16:13,220 Und das tun wir auf der rechten Seite über malloc. 345 00:16:13,220 --> 00:16:16,550 Wie ein guter Bürger, überprüfen wir, dass malloc nicht tatsächlich null, so dass 346 00:16:16,550 --> 00:16:18,690 wir nicht versehentlich zu erstellen ein segfault hier. 347 00:16:18,690 --> 00:16:22,840 Und jedes Mal, wenn Sie malloc im Leben verwenden, sollte die Überprüfung werden für null, damit 348 00:16:22,840 --> 00:16:24,090 Sie haben einen subtilen Bug. 349 00:16:24,090 --> 00:16:28,460 >> Dann initialisieren wir, dass von null Zuweisen von n und vorherigen und nächsten. 350 00:16:28,460 --> 00:16:32,450 Und in diesem Fall hier, I initialisiert vorherige Null ist, weil diese neue 351 00:16:32,450 --> 00:16:34,780 Knoten wird der neue sein Anfang meiner Liste. 352 00:16:34,780 --> 00:16:37,050 Also es geht um sein nichts vor ihr. 353 00:16:37,050 --> 00:16:42,010 Und ich möchte die wesentlichen anhängen vorhandene Liste auf den neuen Knoten durch 354 00:16:42,010 --> 00:16:44,700 Einstellung neben sich selbst gleich auflisten. 355 00:16:44,700 --> 00:16:47,120 Aber ich bin nicht nur noch nicht fertig. 356 00:16:47,120 --> 00:16:51,780 Also, wenn die Liste selbst bereits existierte, und es mindestens einen Knoten 357 00:16:51,780 --> 00:16:57,070 bereits vorhanden, wenn dies die Liste hier und ich setzen Sie einen neuen Knoten hier, ich 358 00:16:57,070 --> 00:17:01,840 müssen sicherstellen, dass meine ehemaligen Knoten weist nach hinten, um meine neuen Knoten, 359 00:17:01,840 --> 00:17:04,260 denn dies ist wiederum ein doppelt verketteten Liste. 360 00:17:04,260 --> 00:17:05,460 >> Also machen wir eine Plausibilitätsprüfung. 361 00:17:05,460 --> 00:17:10,109 Wenn Liste ist nicht null, wenn es bereits einen oder mehrere Knoten gibt, dann 362 00:17:10,109 --> 00:17:12,470 hinzufügen, dass Rückbezug sozusagen. 363 00:17:12,470 --> 00:17:15,420 Und dann das letzte, was wir brauchen zu tun, ist eigentlich die globale aktualisieren 364 00:17:15,420 --> 00:17:20,329 Variablenliste selbst zu Punkt zu diesem neuen Knoten. 365 00:17:20,329 --> 00:17:21,790 Ja. 366 00:17:21,790 --> 00:17:26,579 >> ZUSCHAUER: In der Mauspfeil [Unverständlich] gleich null ist, geht das 367 00:17:26,579 --> 00:17:30,420 befassen sich mit der Liste, weil die Liste ist null? 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. MALAN: Nö. 369 00:17:30,596 --> 00:17:34,500 Das ist einfach, mich als pro-aktiv Vorsicht, dass, wenn das ist mein 370 00:17:34,500 --> 00:17:38,730 ursprünglichen Liste mit vielleicht einigen mehr Knoten hier und ich meine Einsetzen 371 00:17:38,730 --> 00:17:42,380 neuen Knoten hier, es geht nichts mehr hier zu sein. 372 00:17:42,380 --> 00:17:44,720 Und ich möchte, dass die Idee zu erfassen indem Sie den vorherigen 373 00:17:44,720 --> 00:17:47,740 null auf dem neuen Knoten. 374 00:17:47,740 --> 00:17:51,410 Und vermutlich, wenn mein Code korrekt ist und es gibt keinen anderen Weg zu legen 375 00:17:51,410 --> 00:17:54,970 außer dieser Funktionsknoten, vermutlich bereits, auch wenn Liste 376 00:17:54,970 --> 00:18:00,090 einen oder mehrere Knoten in der es vermutlich die Liste der erste Knoten haben würde 377 00:18:00,090 --> 00:18:02,750 vorherige Zeiger von null sich. 378 00:18:02,750 --> 00:18:03,550 >> ZIELGRUPPE: Und nur ein Follow-up. 379 00:18:03,550 --> 00:18:08,139 Der Grund, warum Sie setzen Zeiger neben Gleichen Liste wird Sie machen den Zeiger sind 380 00:18:08,139 --> 00:18:13,579 Liste vor, dass es zeigen auf die nächste, ich denke - 381 00:18:13,579 --> 00:18:14,980 Ich tun nicht - 382 00:18:14,980 --> 00:18:15,450 nur nennt? 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. MALAN: Genau. 384 00:18:16,400 --> 00:18:19,400 Und so wollen wir zwei Fällen tatsächlich der Ansicht hier wirklich, auch wenn die 385 00:18:19,400 --> 00:18:22,070 Bestellung werden wir sie prüfen, ist nicht ziemlich der gleiche wie der Code. 386 00:18:22,070 --> 00:18:26,250 Sondern auf einem hohen Niveau, wenn diese für Liste, und dies ist ein 32-Bit- 387 00:18:26,250 --> 00:18:29,560 Zeiger, ist die einfachste Szenario dass dies standardmäßig Null. 388 00:18:29,560 --> 00:18:33,010 Und angenommen, ich möchte die einfügen Nummer 50 war die erste Nummer. 389 00:18:33,010 --> 00:18:37,640 Also werde ich weitermachen und zuweisen ein Knoten, die gehen zu enthalten 390 00:18:37,640 --> 00:18:38,770 drei Felder - 391 00:18:38,770 --> 00:18:42,070 n, vorherigen und nächsten. 392 00:18:42,070 --> 00:18:44,580 >> Ich werde die Nummer 50 gesetzt hier, da dies n sein. 393 00:18:44,580 --> 00:18:46,130 Das wird der nächste sein. 394 00:18:46,130 --> 00:18:48,530 Und dies wird sein vorheriges. 395 00:18:48,530 --> 00:18:50,910 Und so was kann ich in diesem Fall tun? 396 00:18:50,910 --> 00:18:53,900 Nun, ich habe gerade Linie 1 hier. 397 00:18:53,900 --> 00:18:55,400 Pointer n n bekommt. 398 00:18:55,400 --> 00:18:57,740 Ich bin dann zu sagen, frühere bekommen sollte null. 399 00:18:57,740 --> 00:18:59,470 Es wird also null sein. 400 00:18:59,470 --> 00:19:01,365 Dann werde ich als nächstes sagen wird, um die Liste zu bekommen. 401 00:19:01,365 --> 00:19:05,150 >> Und das funktioniert nur gut aus. 402 00:19:05,150 --> 00:19:06,500 Dies ist null. 403 00:19:06,500 --> 00:19:10,620 Und so sage ich, der neue Knoten der nächsten Feld sollte bekommen, was das ist. 404 00:19:10,620 --> 00:19:12,570 Damit setzt ein weiteres null da. 405 00:19:12,570 --> 00:19:14,510 Und dann das letzte, was Ich habe hier überprüfen. 406 00:19:14,510 --> 00:19:17,870 Wenn Liste ist nicht gleich null, aber es ist gleich null, so dass wir überspringen 407 00:19:17,870 --> 00:19:18,470 insgesamt. 408 00:19:18,470 --> 00:19:23,520 Und so alles, was ich als nächstes tun ist Liste bekommt Zeiger, der bildhaft führt 409 00:19:23,520 --> 00:19:25,570 ein Bild so. 410 00:19:25,570 --> 00:19:26,620 Also das ist ein Szenario. 411 00:19:26,620 --> 00:19:30,490 >> Und die eine, die Sie wurden zu fragen Insbesondere ist eine Situation wie dieser, 412 00:19:30,490 --> 00:19:33,190 wo wir bereits eine Ein-Knoten-Liste. 413 00:19:33,190 --> 00:19:36,240 Und wenn ich wieder in der ursprünglichen Problemstellung, der nächste wir werden 414 00:19:36,240 --> 00:19:39,320 legen sagen wir 34 ist, nur für die um der Diskussion willen. 415 00:19:39,320 --> 00:19:46,210 Also werde ich einfach nur bequem hinweisen, dass hier. 416 00:19:46,210 --> 00:19:47,540 Ich habe gerade malloced. 417 00:19:47,540 --> 00:19:49,310 Nehmen wir an, ich bin Überprüfung auf null. 418 00:19:49,310 --> 00:19:51,870 >> Nun, ich werde zu initialisieren n 34 ist. 419 00:19:51,870 --> 00:19:53,040 Und dies wird n sein. 420 00:19:53,040 --> 00:19:54,670 Das wird der nächste sein. 421 00:19:54,670 --> 00:19:57,100 Und dies wird sein vorheriges. 422 00:19:57,100 --> 00:19:59,370 Lassen Sie uns sicherstellen, dass ich nicht erhalten diese nach hinten. 423 00:19:59,370 --> 00:20:01,110 Zurück kommt zuerst in der Definition. 424 00:20:01,110 --> 00:20:03,070 Lassen Sie mich dies zu beheben. 425 00:20:03,070 --> 00:20:04,410 Dies ist vorherige. 426 00:20:04,410 --> 00:20:05,780 Dies ist der nächste. 427 00:20:05,780 --> 00:20:08,620 Auch wenn diese identisch sind, wir halten es konsistent. 428 00:20:08,620 --> 00:20:09,450 >> Vorherige. 429 00:20:09,450 --> 00:20:11,030 Dies ist der nächste. 430 00:20:11,030 --> 00:20:16,310 Also ich habe gerade malloced meine Anmerkung, geprüft für null zugeordnet, 34 in den Knoten. 431 00:20:16,310 --> 00:20:17,570 Zurück bekommt null. 432 00:20:17,570 --> 00:20:19,480 Also das gibt mir, dass. 433 00:20:19,480 --> 00:20:21,010 Weiter erhält Liste. 434 00:20:21,010 --> 00:20:22,370 So ist diese Liste. 435 00:20:22,370 --> 00:20:26,520 Also das ist jetzt die gleiche wie diese Zeichnung Pfeil, so daß sie auf einen Punkt 436 00:20:26,520 --> 00:20:27,940 in der gleichen. 437 00:20:27,940 --> 00:20:30,400 Und dann werde ich prüfen, ob Liste nicht gleich null. 438 00:20:30,400 --> 00:20:31,740 Und es ist diesmal nicht. 439 00:20:31,740 --> 00:20:35,580 Dann werde ich um Liste zu tun vorherige bekommt Zeiger. 440 00:20:35,580 --> 00:20:39,700 >> So Liste previous bekommt PTR. 441 00:20:39,700 --> 00:20:44,300 So hat dies die Wirkung der Umsetzung eine grafische Pfeil hier. 442 00:20:44,300 --> 00:20:46,930 Und das ist immer ein wenig gewellt, die Linien. 443 00:20:46,930 --> 00:20:50,780 Und dann, endlich, ich aktualisieren Liste zu Punkt auf Zeiger. 444 00:20:50,780 --> 00:20:55,560 So, jetzt deutet dies auf diesem Kerl. 445 00:20:55,560 --> 00:20:57,170 Und jetzt machen wir einen schnellen Plausibilitätsprüfung. 446 00:20:57,170 --> 00:20:59,470 >> Hier ist die Liste, das ist, die globale Variable. 447 00:20:59,470 --> 00:21:02,850 Der erste Knoten ist in der Tat 34, weil Ich bin nach dieser Pfeil. 448 00:21:02,850 --> 00:21:05,210 Und das ist richtig, weil ich Einsatz am Anfang der Liste 449 00:21:05,210 --> 00:21:06,070 Alle neuen Knoten. 450 00:21:06,070 --> 00:21:08,860 Seine nächste Feld führt mich zu diesem Kerl. 451 00:21:08,860 --> 00:21:10,710 Wenn ich weitermachen, schlug ich nächste ist null. 452 00:21:10,710 --> 00:21:11,760 Also gibt es keine Liste mehr. 453 00:21:11,760 --> 00:21:14,460 Wenn ich auf früheren, bekomme ich zurück, wo ich erwarte. 454 00:21:14,460 --> 00:21:16,435 >> So gibt es immer noch ein paar Hinweise, offensichtlich zu manipulieren. 455 00:21:16,435 --> 00:21:19,870 Aber die Tatsache, dass man Ihnen sagte, zu tun dies in konstanter Zeit bedeutet, dass Sie nur 456 00:21:19,870 --> 00:21:22,910 eine endliche Anzahl von Dingen dürfen Sie zu tun. 457 00:21:22,910 --> 00:21:24,290 Und was ist diese Zahl? 458 00:21:24,290 --> 00:21:25,185 Es könnte ein Schritt sein. 459 00:21:25,185 --> 00:21:25,700 Es könnte zwei sein. 460 00:21:25,700 --> 00:21:26,820 Es könnte 1000 Stufen. 461 00:21:26,820 --> 00:21:30,500 Aber es ist endlich, das heißt, Sie können nicht haben jede Art von looping los 462 00:21:30,500 --> 00:21:32,010 hier, keine Rekursion, keine Schleifen. 463 00:21:32,010 --> 00:21:37,390 Es ist gerade zu hart codierte Linien Code, wie wir in diesem Beispiel. 464 00:21:37,390 --> 00:21:42,330 >> Also das nächste Problem 12 hat uns gebeten, runden die Implementierung von remove 465 00:21:42,330 --> 00:21:46,740 unten in der Weise, dass es entfernt n aus der Liste in linearer Zeit. 466 00:21:46,740 --> 00:21:48,740 So haben Sie ein wenig mehr haben Spielraum jetzt. 467 00:21:48,740 --> 00:21:52,380 Sie können davon ausgehen, dass n, falls vorhanden in der Liste, wird anwesend sein 468 00:21:52,380 --> 00:21:53,340 nicht mehr als einmal. 469 00:21:53,340 --> 00:21:56,770 Und das auch sein soll ein Quiz-basierten vereinfachenden Annahme, so 470 00:21:56,770 --> 00:21:59,780 dass, wenn Sie die Zahl 50 irgendwo zu finden in der Liste, können Sie nicht auch tun 471 00:21:59,780 --> 00:22:02,890 haben, um über weiter Sorgen laufen, auf der Suche nach allen möglichen 472 00:22:02,890 --> 00:22:06,990 Kopie von 50, die gerade übertragen würde in eine Einzelheit in begrenzter Zeit. 473 00:22:06,990 --> 00:22:10,460 >> Also mit entfernen, auf jeden Fall war dies eine anspruchsvoller und mehr 474 00:22:10,460 --> 00:22:11,640 Code zu schreiben. 475 00:22:11,640 --> 00:22:14,990 Aber auf den ersten Blick, ehrlich gesagt, könnte es Blick überwältigend und wie etwas 476 00:22:14,990 --> 00:22:17,060 es gibt keine Möglichkeit, Sie haben könnten kommen mit einem Quiz auf. 477 00:22:17,060 --> 00:22:22,450 Aber wenn wir uns auf die einzelnen Schritte, Hoffentlich wird es plötzlich 478 00:22:22,450 --> 00:22:26,060 schlagen Sie, dass jede dieser einzelnen Schritte macht offensichtlich Sinn 479 00:22:26,060 --> 00:22:27,080 im Rückblick. 480 00:22:27,080 --> 00:22:28,200 Werfen wir also einen Blick. 481 00:22:28,200 --> 00:22:32,570 >> Also zuerst initialisieren wir Zeiger Liste zu sein sich. 482 00:22:32,570 --> 00:22:36,040 Weil ich will, die lineare Zeit, dass Mittel Ich werde einige Schleife haben. 483 00:22:36,040 --> 00:22:39,730 Und ein üblicher Weg, um über die laufen Knoten in einer Listenstruktur oder jede Art 484 00:22:39,730 --> 00:22:43,860 der Struktur iterativ zu nehmen ein Zeiger auf der Vorderseite des Daten 485 00:22:43,860 --> 00:22:46,990 Struktur und dann starten Sie einfach die Aktualisierung es und gehen Sie Ihren Weg 486 00:22:46,990 --> 00:22:48,650 durch die Datenstruktur. 487 00:22:48,650 --> 00:22:50,040 Also werde ich genau das tun. 488 00:22:50,040 --> 00:22:54,260 >> Während Zeiger, meine temporäre Variable, nicht gleich null, lassen 489 00:22:54,260 --> 00:22:55,660 gehen Sie vor und überprüfen. 490 00:22:55,660 --> 00:22:56,910 Habe ich Glück? 491 00:22:56,910 --> 00:23:01,740 Ist das Feld in der n Knoten Ich bin derzeit suchen gleich der 492 00:23:01,740 --> 00:23:03,380 Zahl ich suche? 493 00:23:03,380 --> 00:23:05,410 Und wenn ja, wollen wir etwas tun. 494 00:23:05,410 --> 00:23:10,020 Nun merkt das, wenn die Bedingung umgibt die gesamte 495 00:23:10,020 --> 00:23:11,520 folgende Zeilen Code. 496 00:23:11,520 --> 00:23:14,610 Das ist das einzige, was mich interessiert - Finden einer Zahl in Frage. 497 00:23:14,610 --> 00:23:18,010 Also gibt es keine andere, die vereinfacht Dinge konzeptionell ein wenig. 498 00:23:18,010 --> 00:23:22,040 >> Aber jetzt wurde mir klar, und haben Sie vielleicht nur erkannte dies nach dem Denken 499 00:23:22,040 --> 00:23:24,720 es durch ein Bit, gibt es eigentlich zwei Fälle hier. 500 00:23:24,720 --> 00:23:28,060 Einer ist, wo der Knoten bei der Anfang der Liste, die eine ist 501 00:23:28,060 --> 00:23:31,040 wenig ärgerlich, denn das ist eine Sonderfall, weil Sie zu tun haben 502 00:23:31,040 --> 00:23:33,340 mit diesem Ding, was Nur Anomalie. 503 00:23:33,340 --> 00:23:35,720 Überall sonst in der Liste, es ist die gleiche Sache. 504 00:23:35,720 --> 00:23:38,050 Es gibt einen vorherigen Knoten und eine nächste Knoten vorherigen Knoten, nächsten Knoten. 505 00:23:38,050 --> 00:23:40,940 Aber dieser Kerl ist ein kleines Special wenn er am Anfang. 506 00:23:40,940 --> 00:23:48,710 >> Also, wenn der Zeiger entspricht der Liste selbst, so dass, wenn ich am Anfang des 507 00:23:48,710 --> 00:23:53,960 die Liste und ich habe n gefunden, ich brauche , um ein paar Dinge zu tun. 508 00:23:53,960 --> 00:23:59,230 Man, ich brauche, um die Liste zu ändern weisen auf das nächste Feld, 50. 509 00:23:59,230 --> 00:24:01,270 So nehme an, dass ich versuche 34 zu entfernen. 510 00:24:01,270 --> 00:24:03,560 Also dieser Kerl muss gehen weg in nur einem Augenblick. 511 00:24:03,560 --> 00:24:07,210 >> , Liste, so werde ich sagen, wird nächste Zeiger. 512 00:24:07,210 --> 00:24:08,570 Nun, das ist Zeiger. 513 00:24:08,570 --> 00:24:10,360 Weiter zeigt sich hier. 514 00:24:10,360 --> 00:24:17,470 Also das ändert sich dieses Pfeil rechts jetzt um auf diesem Kerl hier zeigen. 515 00:24:17,470 --> 00:24:19,580 Nun, denkt daran, wir haben eine temporäre Variable ist. 516 00:24:19,580 --> 00:24:23,520 So haben wir nicht alle verwaisten Knoten, weil ich auch diesen Kerl in meinem 517 00:24:23,520 --> 00:24:25,010 Implementierung von remove. 518 00:24:25,010 --> 00:24:29,600 So jetzt, wenn Liste selbst nicht null ist, Ich muss ein wenig etwas zu beheben. 519 00:24:29,600 --> 00:24:32,690 >> Ich muss jetzt dafür sorgen, dass dieser Pfeil, die zuvor zeigen wird 520 00:24:32,690 --> 00:24:36,830 50 bis 34, hat das alles weg, weil, wenn ich versuche, loszuwerden 521 00:24:36,830 --> 00:24:41,910 von 34, 50 besser nicht halten jede Art von Rückverweis, um es als das 522 00:24:41,910 --> 00:24:42,820 Pfeil vorgeschlagen. 523 00:24:42,820 --> 00:24:44,820 Also habe ich nur diese Zeile. 524 00:24:44,820 --> 00:24:46,520 Also dann bin ich fertig. 525 00:24:46,520 --> 00:24:48,040 Dieser Fall ist eigentlich recht einfach. 526 00:24:48,040 --> 00:24:51,010 Hacken Sie den Kopf der Liste ist relativ einfach. 527 00:24:51,010 --> 00:24:52,980 >> Leider gibt es diese ärgerlich else-Block. 528 00:24:52,980 --> 00:24:56,170 So, jetzt habe ich den Fall zu prüfen, wo gibt es etwas in der Mitte. 529 00:24:56,170 --> 00:24:59,880 Aber es ist nicht zu schrecklich, außer Syntax wie diese. 530 00:24:59,880 --> 00:25:03,080 Also, wenn ich nicht am Anfang der Liste, ich bin irgendwo in der Mitte. 531 00:25:03,080 --> 00:25:08,160 Und diese Linie hier ist zu sagen, Start Zu welcher Knoten, den Sie gerade sind. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Zum nächsten Feld des vorherigen Knotens und zeigen, dass am Zeiger. 534 00:25:18,550 --> 00:25:20,390 >> Wir tun dies bildhaft. 535 00:25:20,390 --> 00:25:21,640 Das wurde immer komplizierter. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Also, wenn ich eine frühere Felder hier - wir tun dies - neben Felder hier. 538 00:25:37,990 --> 00:25:41,200 Ich werde meine Zeiger eher vereinfachen als ziehe eine ganze Reihe von 539 00:25:41,200 --> 00:25:45,710 Dinge hin und her, kreuz und quer einander. 540 00:25:45,710 --> 00:25:50,870 Und nun lassen Sie uns einfach sagen, das ist 1, 2, 3 zum Zwecke der Diskussion, auch 541 00:25:50,870 --> 00:25:53,410 obwohl das nicht eine Linie mit das Problem in Frage. 542 00:25:53,410 --> 00:25:55,900 >> Also hier ist meine verketteten Liste. 543 00:25:55,900 --> 00:25:59,300 Ich versuche, zwei in diese zu entfernen bestimmte Version der Geschichte. 544 00:25:59,300 --> 00:26:01,960 Also ich habe Zeiger aktualisiert werden, um diesen Kerl zeigt. 545 00:26:01,960 --> 00:26:03,315 Das ist also PTR. 546 00:26:03,315 --> 00:26:04,530 Er hat hier zeigt. 547 00:26:04,530 --> 00:26:07,170 Dies ist die Liste, die vorhanden weltweit als zuvor. 548 00:26:07,170 --> 00:26:09,200 Und er zeigt hier, egal was. 549 00:26:09,200 --> 00:26:10,800 Und jetzt versuche ich, zwei zu entfernen. 550 00:26:10,800 --> 00:26:13,850 >> Also, wenn Zeiger wird hier zeigen, ich bin gehen, um zu folgen, offenbar, die 551 00:26:13,850 --> 00:26:17,110 vorherige Zeiger, die mich bei 1 setzt. 552 00:26:17,110 --> 00:26:22,290 Ich bin dann zu sagen, dass der nächste Feld, das bringt mich auf, dies zu 553 00:26:22,290 --> 00:26:25,410 Box hier, wird sich gleich Zeiger neben. 554 00:26:25,410 --> 00:26:28,400 Also, wenn dieser Zeiger ist diese nächste. 555 00:26:28,400 --> 00:26:31,840 Das bedeutet, dass diese Bedürfnisse Pfeil zu diesem Kerl zeigen. 556 00:26:31,840 --> 00:26:35,140 >> Also, was das Codezeile muss nur getan ist ein bisschen dafür. 557 00:26:35,140 --> 00:26:37,500 Und nun, das ist wie ein Blick Schritt in die richtige Richtung. 558 00:26:37,500 --> 00:26:41,390 Wir wollen im Wesentlichen bis 2 snip von der Mitte der 1 und 3. 559 00:26:41,390 --> 00:26:44,400 So macht es Sinn, dass wir wollen, Route diesen Zeiger um ihn herum. 560 00:26:44,400 --> 00:26:50,400 Also das nächste Zeile prüft, ob Zeiger nächste nicht null ist, gibt es 561 00:26:50,400 --> 00:26:54,200 jemand tatsächlich rechts von 2, das bedeutet, dass wir auch zu tun haben, 562 00:26:54,200 --> 00:26:55,850 ein wenig schnippeln hier. 563 00:26:55,850 --> 00:27:00,590 >> Also ich muss jetzt diesen Zeiger folgen und aktualisieren Sie die vorherigen Zeiger auf 564 00:27:00,590 --> 00:27:05,410 dieser Kerl, ein wenig von einer do Umgehung hier den Punkt hier. 565 00:27:05,410 --> 00:27:07,100 Und nun, das ist optisch schön. 566 00:27:07,100 --> 00:27:11,930 Es ist ein wenig chaotisch, dass es in Niemand zeigt auf die zwei nicht mehr. 567 00:27:11,930 --> 00:27:13,600 2 nach links zeigt. 568 00:27:13,600 --> 00:27:14,980 Und 2 nach rechts zeigt. 569 00:27:14,980 --> 00:27:17,480 Aber er kann machen, was er will, weil er ist dabei, befreit zu werden. 570 00:27:17,480 --> 00:27:19,480 Und es spielt keine Rolle, was diese Werte nicht mehr. 571 00:27:19,480 --> 00:27:23,040 >> Was wichtig ist, dass die verbleibende Jungs sind über Routing 572 00:27:23,040 --> 00:27:24,280 und unter ihm jetzt. 573 00:27:24,280 --> 00:27:25,810 Und in der Tat ist das, was wir als nächstes tun. 574 00:27:25,810 --> 00:27:29,360 Wir geben Zeiger, der bedeutet, dass wir sagen, die Betriebssystem, sind Sie herzlich willkommen 575 00:27:29,360 --> 00:27:30,906 dies zurückfordern. 576 00:27:30,906 --> 00:27:34,900 Und dann endlich, wir zurückkehren. 577 00:27:34,900 --> 00:27:37,220 Else implizit, wenn wir noch nicht zurückgegeben, 578 00:27:37,220 --> 00:27:38,290 wir müssen weiter suchen. 579 00:27:38,290 --> 00:27:41,485 So entspricht Zeiger Zeiger neben nur bedeutet bewegen diesen Kerl hier. 580 00:27:41,485 --> 00:27:42,600 Bewegen Sie diesen Kerl hier. 581 00:27:42,600 --> 00:27:45,400 Bewegen Sie diesen Kerl hier, wenn in der Tat, wir haben die Nummer nicht finden 582 00:27:45,400 --> 00:27:46,960 wir suchen noch auf der Suche. 583 00:27:46,960 --> 00:27:49,630 >> Also ehrlich gesagt, sieht es ganz überwältigend, denke ich, auf den ersten 584 00:27:49,630 --> 00:27:52,180 Blick, vor allem, wenn Sie kämpfte mit diesem während des Quiz dann sehen, 585 00:27:52,180 --> 00:27:52,850 so etwas. 586 00:27:52,850 --> 00:27:55,050 Und Sie selbst auf die Schulter klopfen. 587 00:27:55,050 --> 00:27:57,080 Nun, es gibt keinen Weg, ich hätte kommen mit, dass auf dem Quiz. 588 00:27:57,080 --> 00:28:00,470 Aber ich würde behaupten, Sie können, wenn Sie brechen es nach unten in diese einzelnen 589 00:28:00,470 --> 00:28:04,400 Fällen und nur zu Fuß durch sorgfältig, wenn auch, zugegeben, unter 590 00:28:04,400 --> 00:28:06,300 stressigen Umständen. 591 00:28:06,300 --> 00:28:09,470 >> Gott sei Dank, das Bild gemacht alles, was glücklicher. 592 00:28:09,470 --> 00:28:11,050 Sie könnten dies in zeichnen eine beliebige Anzahl von Möglichkeiten. 593 00:28:11,050 --> 00:28:12,760 Sie müssen nicht um die kreuz und quer zu tun Sache hier. 594 00:28:12,760 --> 00:28:14,520 Man könnte es mit gerade tun Zeilen wie diese. 595 00:28:14,520 --> 00:28:18,790 Aber der Kern des Problems, in Generell war zu erkennen, dass die 596 00:28:18,790 --> 00:28:22,060 Bild am Ende sollte ein wenig aussehen so etwas wie dies, weil 597 00:28:22,060 --> 00:28:25,030 konstante Zeit angedeutet, dass Sie zu halten Störungen und Störungen und Verklemmen der 598 00:28:25,030 --> 00:28:29,900 neue Knoten zu Beginn auf der Liste. 599 00:28:29,900 --> 00:28:31,960 Haben Sie Fragen? 600 00:28:31,960 --> 00:28:34,565 Die wohl größte Herausforderung sicherlich die Codierung Fragen. 601 00:28:34,565 --> 00:28:37,690 >> ZIELGRUPPE: Also ist die Liste ähnlich Kopf in den vorherigen Beispielen. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. MALAN: Genau, genau. 603 00:28:39,640 --> 00:28:43,130 Nur ein anderer Name für eine globale Variable. 604 00:28:43,130 --> 00:28:44,380 World wide was? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB BOWDEN: OK. 607 00:28:49,730 --> 00:28:52,020 Das ist also die eine, wo man hatte, den Absatz zu schreiben. 608 00:28:52,020 --> 00:28:56,060 Einige Leute schrieb Essays für diese Frage. 609 00:28:56,060 --> 00:29:00,230 Aber Sie müssen nur diese sechs Begriffe verwenden um zu beschreiben, was passiert, wenn 610 00:29:00,230 --> 00:29:02,440 Sie versuchen, facebook.com kontaktieren. 611 00:29:02,440 --> 00:29:07,930 Also werde ich nur durch den Prozess sprechen mit all diesen Bedingungen. 612 00:29:07,930 --> 00:29:11,290 Also in unserem Browser, geben wir facebook.com und drücken Sie Enter. 613 00:29:11,290 --> 00:29:17,280 Also unsere Browser geht um ein Konstrukt HTTP verlangen, dass es sich auf senden 614 00:29:17,280 --> 00:29:22,220 durch einen Prozess zu Facebook für Auf Facebook, um uns mit der Antwort 615 00:29:22,220 --> 00:29:24,450 HTML seiner Seite. 616 00:29:24,450 --> 00:29:28,800 >> Also, was ist der Prozess, durch die der HTTP-Anforderung 617 00:29:28,800 --> 00:29:30,730 tatsächlich bekommt zu Facebook? 618 00:29:30,730 --> 00:29:32,790 Also zuerst müssen wir übersetzen Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Also nur der Name Facebook.com gegeben, wo tatsächlich die HTTP-Anfrage 620 00:29:38,780 --> 00:29:39,940 gehen müssen? 621 00:29:39,940 --> 00:29:44,120 Also müssen wir übersetzen Facebook.com zu einer IP-Adresse, die eindeutig 622 00:29:44,120 --> 00:29:47,620 identifiziert, was wir eigentlich Maschine wollen, um diese Anforderung zu senden. 623 00:29:47,620 --> 00:29:49,310 Ihr Laptop verfügt über eine IP-Adresse. 624 00:29:49,310 --> 00:29:52,240 Alles, was mit dem Internet verbunden hat eine IP-Adresse. 625 00:29:52,240 --> 00:29:59,030 >> So DNS, Domain Name System, ist, dass was los ist, um die Übersetzung zu behandeln 626 00:29:59,030 --> 00:30:03,750 facebook.com aus einer IP-Adresse, die Sie wirklich wollen, zu kontaktieren. 627 00:30:03,750 --> 00:30:08,075 Also haben wir die DNS-Server zu kontaktieren und sagen wir, was ist facebook.com? 628 00:30:08,075 --> 00:30:16,560 Er sagt, oh, es ist die IP-Adresse 190,212 etwas, etwas, etwas. 629 00:30:16,560 --> 00:30:16,900 Gut. 630 00:30:16,900 --> 00:30:18,850 Jetzt weiß ich, welche Maschine Ich möchte zu kontaktieren. 631 00:30:18,850 --> 00:30:22,360 >> Also dann können Sie Ihre HTTP-Anfrage senden über dieser Maschine. 632 00:30:22,360 --> 00:30:24,140 Also, wie kommt es zu dieser Maschine? 633 00:30:24,140 --> 00:30:27,200 Nun, der Antrag geht von Router zu Router Prellen. 634 00:30:27,200 --> 00:30:32,630 Denken Sie daran, die beispielsweise in der Klasse, wo sahen wir tatsächlich die Route, die der 635 00:30:32,630 --> 00:30:35,340 Pakete nahm, als wir versuchten, zu kommunizieren. 636 00:30:35,340 --> 00:30:38,460 Wir sahen es über den Atlantik springen Ozean an einem Punkt oder was auch immer. 637 00:30:38,460 --> 00:30:42,820 >> Also der letzte Term-Port. 638 00:30:42,820 --> 00:30:46,520 Also das ist jetzt auf Ihrem Computer. 639 00:30:46,520 --> 00:30:49,970 Sie können mehrere Dinge haben derzeit die Kommunikation mit dem Internet. 640 00:30:49,970 --> 00:30:53,730 So kann ich laufen, sagen wir, Skype. 641 00:30:53,730 --> 00:30:55,670 Ich hätte einen Web-Browser geöffnet. 642 00:30:55,670 --> 00:30:59,010 Ich könnte so etwas haben, dass torren-Dateien. 643 00:30:59,010 --> 00:31:00,880 Also alle diese Dinge sind Kommunizieren mit dem 644 00:31:00,880 --> 00:31:02,600 Internet in irgendeiner Weise. 645 00:31:02,600 --> 00:31:08,070 >> Also, wenn Ihr Computer einige Daten erhält aus dem Internet, wie funktioniert es 646 00:31:08,070 --> 00:31:10,130 wissen, welche Anwendung tatsächlich will, dass die Daten? 647 00:31:10,130 --> 00:31:12,610 Woher weiß er, ob diese besondere Daten für die bedeutete, 648 00:31:12,610 --> 00:31:16,070 torren Anwendung im Gegensatz auf dem Web-Browser? 649 00:31:16,070 --> 00:31:20,980 Also das ist der Zweck der Häfen in das Alle diese Anwendungen haben 650 00:31:20,980 --> 00:31:22,720 behauptete einen Port auf Ihrem Computer. 651 00:31:22,720 --> 00:31:27,580 Also Ihr Web-Browser sagt, hey, Ich bin auf Port 1000 hört. 652 00:31:27,580 --> 00:31:32,240 Und Ihre torren Programm sagt, Ich bin auf Port 3000 hört. 653 00:31:32,240 --> 00:31:34,770 Und Skype sagt, ich bin mit Port 4000. 654 00:31:34,770 --> 00:31:41,950 >> Also, wenn Sie einige Daten zu bekommen, die gehört eine dieser Anwendungen, die Daten 655 00:31:41,950 --> 00:31:45,510 mit welchem ​​Port markiert es tatsächlich sollte zusammen gesendet werden. 656 00:31:45,510 --> 00:31:47,950 Also das sagt, oh, ich gehöre auf Port 1000. 657 00:31:47,950 --> 00:31:50,950 Ich weiß, dann muss ich diese weiterleiten entlang auf meiner Web-Browser. 658 00:31:50,950 --> 00:31:56,440 Also der Grund, es ist hier von Bedeutung ist, dass Web-Server sind in der Regel 659 00:31:56,440 --> 00:31:58,240 hören auf Port 80. 660 00:31:58,240 --> 00:32:02,420 Also, wenn ich Facebook.com kontaktieren, ich bin Kommunikation mit einigen Maschine. 661 00:32:02,420 --> 00:32:06,390 Aber ich muss sagen, welcher Anschluss, dass Maschine möchte ich mit zu kommunizieren. 662 00:32:06,390 --> 00:32:09,160 Und Web-Server sind in der Regel Port 80. 663 00:32:09,160 --> 00:32:14,010 >> Wenn sie wollten, könnten sie es eingestellt bis so listet es als auf Port 7000. 664 00:32:14,010 --> 00:32:19,090 Und dann in einem Web-Browser, konnte ich manuell eingeben Facebook.com: 7000 bis 665 00:32:19,090 --> 00:32:24,600 senden die Anfrage an Port 7000 der Facebook-Web-Server. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. MALAN: Und in diesem Fall, auch wenn wir nicht verlangen, dass die Menschen 667 00:32:26,820 --> 00:32:30,000 erwähne das, in diesem Fall, welchen Port würde der Antrag tatsächlich gehen? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Versuchen Sie es erneut. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Genau. 672 00:32:44,300 --> 00:32:47,960 Suchen Sie nicht nach, aber eine Subtilität das ist es keiner der Letzte. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: Also die HTTPS, da es hören, die speziell für die 674 00:32:51,770 --> 00:32:55,180 verschlüsselt, es ist auf Port 4430. 675 00:32:55,180 --> 00:32:57,680 >> ZIELGRUPPE: Und E-Mails sind 25, oder? 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. MALAN: Outbound E-Mails, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Ich weiß nicht einmal die meisten wissen die - all die unteren sind in der Regel 678 00:33:03,760 --> 00:33:06,310 für Dinge vorbehalten. 679 00:33:06,310 --> 00:33:09,260 Ich denke, alles unter 1024 ist reserviert. 680 00:33:09,260 --> 00:33:13,450 >> ZIELGRUPPE: Warum haben Sie sagen, 3 war die falsche Nummer? 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Weil in einer IP-Adresse, es gibt vier Gruppen von Ziffern. 682 00:33:18,820 --> 00:33:21,090 Und sie sind von 0 bis 255. 683 00:33:21,090 --> 00:33:28,060 So 192.168.2.1 ist eine gemeinsame lokalen Netz IP-Adresse. 684 00:33:28,060 --> 00:33:30,840 Beachten Sie, alle, die weniger als 255 sind. 685 00:33:30,840 --> 00:33:33,570 Also, wenn ich mit 300 gestartet wird, dass konnte nicht möglicherweise 686 00:33:33,570 --> 00:33:35,210 eine der Zahlen. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. MALAN: Aber das dumme Clip aus - war es CSI, wo sie ein 688 00:33:38,170 --> 00:33:39,970 Zahl, die zu groß war für die IP-Adresse. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Sie haben Fragen dazu? 691 00:33:46,110 --> 00:33:51,710 Der nächste, so dass komplette Veränderung in Thema, aber wir haben diese PHP-Array für 692 00:33:51,710 --> 00:33:53,270 die Häuser in der Quad. 693 00:33:53,270 --> 00:33:56,360 Und wir haben eine ungeordnete Liste. 694 00:33:56,360 --> 00:33:59,550 Und wir jedes Listenelement ausdrucken möchten nur das Haus Namen enthält. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 So haben wir eine foreach-Schleife. 697 00:34:11,870 --> 00:34:17,540 Also denken Sie daran, die Syntax ist foreach Array als Element im Array. 698 00:34:17,540 --> 00:34:22,360 So durch jede Iteration der Schleife, Haus wird auf einem der nehmen 699 00:34:22,360 --> 00:34:24,060 Werte innerhalb des Arrays. 700 00:34:24,060 --> 00:34:26,530 >> Bei der ersten Iteration, Haus Cabot Haus sein wird. 701 00:34:26,530 --> 00:34:30,370 Auf einer zweiten Iteration Haus wird Courier sein Haus und so weiter. 702 00:34:30,370 --> 00:34:34,370 Also für jeden Quad als Haus, wir sind nur gehen, um zu drucken - 703 00:34:34,370 --> 00:34:37,250 Sie könnte auch hallte haben - 704 00:34:37,250 --> 00:34:42,199 das Listenelement und dann der Name des Hauses und schließen Sie dann das Listenelement. 705 00:34:42,199 --> 00:34:45,210 Die geschweiften Klammern sind hier optional. 706 00:34:45,210 --> 00:34:49,480 >> Und dann sagte, dass wir auch in der Frage selbst, denken Sie daran, schließen Sie die 707 00:34:49,480 --> 00:34:50,770 ungeordnete Liste-Tag. 708 00:34:50,770 --> 00:34:53,949 Also müssen wir PHP-Modus zu verlassen um dies zu tun. 709 00:34:53,949 --> 00:35:00,280 Oder wir haben hallte könnte die schließen ungeordnete Liste-Tag. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. MALAN: Auch gut hier würde gewesen, eine alte Schule für eine Nutzung 711 00:35:02,380 --> 00:35:07,340 Schleife mit einem $ i = 0 0 und zählt mit zu herauszufinden, die Länge des Strahlen. 712 00:35:07,340 --> 00:35:09,240 Völlig auch in Ordnung, nur etwas wortreicher. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> ZIELGRUPPE: Also, wenn Sie im Begriff waren, [Unverständlich], würden Sie tun - 715 00:35:14,742 --> 00:35:16,734 Ich vergesse, was die Schleife [unverständlich] ist. 716 00:35:16,734 --> 00:35:21,380 Würden Sie $ Quad Halterung i? 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. MALAN: Genau. 718 00:35:21,850 --> 00:35:23,100 Ja, genau. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: Sonst noch was? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. MALAN: In Ordnung. 723 00:35:32,010 --> 00:35:32,300 Trade-offs. 724 00:35:32,300 --> 00:35:38,290 Es gab also Bündel von Antworten kann jeder von diesen. 725 00:35:38,290 --> 00:35:40,510 Wir waren eigentlich nur auf der Suche nach etwas Zwingendes für ein auf dem Kopf und 726 00:35:40,510 --> 00:35:41,100 eine Kehrseite. 727 00:35:41,100 --> 00:35:44,830 Und Nummer 16 fragte, Validierung Nutzer Eingangs Client-Seite, wie mit JavaScript 728 00:35:44,830 --> 00:35:47,280 anstelle der Server-Seite, wie mit PHP. 729 00:35:47,280 --> 00:35:49,450 Also, was ist ein auf dem Kopf von Dabei Client-Seite? 730 00:35:49,450 --> 00:35:53,780 >> Nun, das ist eines der Dinge, die wir vorgeschlagen dass Sie Wartezeit zu reduzieren, da Sie 731 00:35:53,780 --> 00:35:56,750 nicht zu stören, die in Kontakt Server, die einige Minuten dauern kann 732 00:35:56,750 --> 00:36:00,390 Millisekunden oder sogar ein paar Sekunden dass durch die Vermeidung und nur 733 00:36:00,390 --> 00:36:04,670 Validierung Nutzer zur Client-Seite durch Auslösung eines auf-submit Handler und 734 00:36:04,670 --> 00:36:06,650 nur die Kontrolle, haben sie geben etwas für Name? 735 00:36:06,650 --> 00:36:08,080 Haben sie etwas zu geben in für E-Mail-Adresse? 736 00:36:08,080 --> 00:36:10,950 Haben sie wählen Sie ein Studentenwohnheim aus das Dropdown-Menü? 737 00:36:10,950 --> 00:36:14,360 >> Sie können sie sofortiges Feedback geben mit der Gigahertz-Computer 738 00:36:14,360 --> 00:36:16,770 oder was auch immer sie haben, das ist tatsächlich auf ihrem Schreibtisch. 739 00:36:16,770 --> 00:36:19,310 So ist es nur eine bessere Benutzer erleben in der Regel. 740 00:36:19,310 --> 00:36:24,460 Aber eine Kehrseite des Tuns Client-Seite Validierung, wenn Sie es tun, auch ohne 741 00:36:24,460 --> 00:36:29,860 Dabei serverseitige Validierung ist, dass Äusserste, was man weiß, CS50 kommen 742 00:36:29,860 --> 00:36:33,980 dass man einfach alle Daten, die Sie wollen senden einem Server eine beliebige Anzahl von Möglichkeiten. 743 00:36:33,980 --> 00:36:37,030 Ehrlich gesagt, in fast jedem Browser, können Sie Klicken Sie um in die Einstellungen und nur 744 00:36:37,030 --> 00:36:40,110 JavaScript auszuschalten, das würde daher, deaktivieren Sie jede Form von 745 00:36:40,110 --> 00:36:41,080 Validierung. 746 00:36:41,080 --> 00:36:44,460 >> Aber Sie könnten auch daran erinnern, dass auch ich haben einige obskure Dinge in der Klasse mit 747 00:36:44,460 --> 00:36:47,790 telnet und eigentlich vorgibt, ein Browser durch Senden get 748 00:36:47,790 --> 00:36:49,240 Anforderungen an einen Server. 749 00:36:49,240 --> 00:36:51,030 Und das ist sicherlich nicht mit einem beliebigen JavaScript. 750 00:36:51,030 --> 00:36:53,290 Das ist nur mir der Eingabe von Befehlen an einer Tastatur. 751 00:36:53,290 --> 00:36:57,410 Also wirklich, jeder Programmierer innerhalb genug Komfort mit der Web-und HTTP 752 00:36:57,410 --> 00:37:01,690 könnten Daten senden, was er oder sie will zu einem Server ohne Validierung. 753 00:37:01,690 --> 00:37:05,470 Und wenn der Server nicht auch die Überprüfung, haben sie mir einen Namen zu geben, ist 754 00:37:05,470 --> 00:37:08,930 dies tatsächlich eine gültige E-Mail-Adresse, tat sie wählen, ein Wohnheim, könnten Sie am Ende 755 00:37:08,930 --> 00:37:12,800 bis Einfügen gefälschte oder einfach nur leere Daten in Ihre Datenbank, die wahrscheinlich 756 00:37:12,800 --> 00:37:15,450 wird nicht eine gute Sache sein, wenn Sie wurden unter der Annahme, es war da. 757 00:37:15,450 --> 00:37:16,770 >> Also das ist eine lästige Realität. 758 00:37:16,770 --> 00:37:19,890 Aber im allgemeinen clientseitige Validierung ist groß. 759 00:37:19,890 --> 00:37:21,810 Es bedeutet aber zweimal so viel Arbeit. 760 00:37:21,810 --> 00:37:25,970 Obwohl es existieren verschiedene Bibliotheken, JavaScript-Bibliotheken für 761 00:37:25,970 --> 00:37:28,830 Beispiel, die so viel zu machen, weniger Kopfschmerzen. 762 00:37:28,830 --> 00:37:31,940 Und Sie können einige der Code wiederverwenden Server-Side-, Client-Seite. 763 00:37:31,940 --> 00:37:35,980 Aber schon klar, dass es in der Regel zusätzliche Arbeit. 764 00:37:35,980 --> 00:37:36,415 Ja. 765 00:37:36,415 --> 00:37:37,792 >> ZIELGRUPPE: Also, wenn wir nur die weniger sicher - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. MALAN: [lacht] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Diese sind immer schwieriger diejenigen zu entscheiden. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN: Das wäre angenommen. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. MALAN: Was? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: ich dieses Problem geschaffen. 772 00:37:45,810 --> 00:37:46,735 Das wäre akzeptiert worden. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. MALAN: Ja. 774 00:37:47,220 --> 00:37:47,830 >> ZIELGRUPPE: Kühle. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: Aber haben wir nicht akzeptieren für die erste - 776 00:37:51,770 --> 00:37:53,630 gut, das, was wir suchen, ist etwas, wie Sie nicht zu haben, 777 00:37:53,630 --> 00:37:55,270 Kommunikation mit dem Server. 778 00:37:55,270 --> 00:37:58,355 Wir haben nicht einfach akzeptieren schneller. 779 00:37:58,355 --> 00:38:00,080 >> PUBLIKUM: Was ist mit Sie Seite nicht neu laden? 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Ja. 781 00:38:00,430 --> 00:38:03,000 Das war eine akzeptierte Antwort. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. MALAN: Alles, wo wir fühlten uns es war eher als nicht wahrscheinlich 783 00:38:06,300 --> 00:38:09,780 dass Sie wussten, was Sie waren sagen, das ist eine schwierige 784 00:38:09,780 --> 00:38:13,500 Linie manchmal ziehen. 785 00:38:13,500 --> 00:38:16,000 Mit einer verketteten Liste statt einer Anordnung zur Aufrechterhaltung eines 786 00:38:16,000 --> 00:38:17,590 sortierte Liste von ganzen Zahlen. 787 00:38:17,590 --> 00:38:21,000 Also ein auf dem Kopf zitieren wir oft mit verknüpften Listen, die motiviert ihre ganze 788 00:38:21,000 --> 00:38:22,370 Einführung war man Dynamik bekommen. 789 00:38:22,370 --> 00:38:23,030 Sie können wachsen. 790 00:38:23,030 --> 00:38:23,950 Sie können schrumpfen. 791 00:38:23,950 --> 00:38:27,370 So müssen Sie nicht haben, um durch den Reifen springen mehr Speicher tatsächlich schaffen 792 00:38:27,370 --> 00:38:28,140 mit einem Array. 793 00:38:28,140 --> 00:38:30,310 Oder Sie müssen nicht nur sagen, sorry, Benutzer. 794 00:38:30,310 --> 00:38:31,410 Das Array gefüllt ist. 795 00:38:31,410 --> 00:38:35,850 So dynamische Wachstum der Liste. 796 00:38:35,850 --> 00:38:37,210 Ein Nachteil ist aber der verbundenen Listen? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> ZIELGRUPPE: Es ist linear. 799 00:38:43,356 --> 00:38:45,800 Die Suche auf verketteten Liste ist linear statt dessen, was Sie sich einloggen 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. MALAN: Genau. 801 00:38:46,360 --> 00:38:50,160 Die Suche auf einer verketteten Liste ist linear, auch wenn es sortiert, da kann man 802 00:38:50,160 --> 00:38:53,170 nur folgendermaßen Semmelbrösel, diese Zeiger vom Beginn der Liste 803 00:38:53,170 --> 00:38:53,570 bis zum Ende. 804 00:38:53,570 --> 00:38:57,970 Sie können nicht nutzen, wahlfreien Zugriff und also binäre Suche, auch wenn es 805 00:38:57,970 --> 00:39:00,740 sortiert, dass man zu tun mit einem Array. 806 00:39:00,740 --> 00:39:02,390 Und es gibt auch eine andere Kosten. 807 00:39:02,390 --> 00:39:02,966 Ja. 808 00:39:02,966 --> 00:39:03,800 >> ZIELGRUPPE: Speicher ineffizient? 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. MALAN: Ja. 810 00:39:04,130 --> 00:39:06,940 Nun, das würde ich nicht unbedingt sagen ineffizient. 811 00:39:06,940 --> 00:39:10,110 Aber es kostet Sie mehr Speicher, weil du 32 Bit für jeden Bedarf 812 00:39:10,110 --> 00:39:13,400 Knoten für den zusätzlichen Zeiger, um dest für eine einfach verkettete Liste. 813 00:39:13,400 --> 00:39:16,660 Nun, wenn Sie nur ganze Zahlen und Speicherung Sie hinzufügen den Zeiger sind, ist, dass 814 00:39:16,660 --> 00:39:17,830 tatsächlich Art von nicht-trivial. 815 00:39:17,830 --> 00:39:19,340 Es ist eine Verdoppelung der Menge an Speicher. 816 00:39:19,340 --> 00:39:22,330 Aber in Wirklichkeit, wenn Sie die Speicherung sind ein verkettete Liste von Strukturen, die haben könnte 817 00:39:22,330 --> 00:39:25,540 8 Bytes, 16 Bytes, noch mehr als das, vielleicht ist es weniger 818 00:39:25,540 --> 00:39:26,500 eines Grenzkosten. 819 00:39:26,500 --> 00:39:28,320 Aber es ist eine Kosten dennoch. 820 00:39:28,320 --> 00:39:31,880 Also entweder von denen hätte war fein wie Nachteile. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Mit PHP anstatt C zu schreiben ein Befehlszeilenprogramm. 823 00:39:36,100 --> 00:39:41,890 So, hier ist es oft schneller sich für eine Sprache wie PHP oder Ruby oder Python. 824 00:39:41,890 --> 00:39:43,700 Sie müssen nur schnell öffnen bis einem Texteditor. 825 00:39:43,700 --> 00:39:45,900 Sie haben viel mehr Funktionen zur Verfügung. 826 00:39:45,900 --> 00:39:49,325 PHP hat die Küchenspüle von Funktionen, wohingegen in C, Sie 827 00:39:49,325 --> 00:39:50,420 haben sehr, sehr wenig. 828 00:39:50,420 --> 00:39:53,820 In der Tat, die Jungs wissen, auf die harte Tour dass Sie nicht haben, Hash-Tabellen. 829 00:39:53,820 --> 00:39:55,000 Sie müssen nicht Listen verknüpft haben. 830 00:39:55,000 --> 00:39:57,470 Wenn Sie diejenigen wollen, müssen Sie setzen sie sich. 831 00:39:57,470 --> 00:40:00,950 >> So ein Kurspotenzial von PHP oder wirklich jede interpretierte Sprache ist die Schnelligkeit 832 00:40:00,950 --> 00:40:02,920 mit dem Sie Code schreiben. 833 00:40:02,920 --> 00:40:06,660 Aber ein Nachteil, sahen wir, als ich schnell eine Misspeller Schlag 834 00:40:06,660 --> 00:40:11,780 Umsetzung in der Vorlesung mit PHP, ist dass die Verwendung einer übersetzten Sprache 835 00:40:11,780 --> 00:40:13,570 ist in der Regel langsamer. 836 00:40:13,570 --> 00:40:18,420 Und wir sahen, dass nachweislich ein Erhöhung in der Zeit von 0,3 Sekunden bis 3 837 00:40:18,420 --> 00:40:24,440 Sekunden wegen der Auslegung dass tatsächlich passiert. 838 00:40:24,440 --> 00:40:27,060 >> Ein weiterer Vorteil war, dass Sie nicht zu kompilieren. 839 00:40:27,060 --> 00:40:30,130 Also es beschleunigt auch die Entwicklung nebenbei bemerkt, weil Sie nicht haben, 840 00:40:30,130 --> 00:40:31,360 zwei Schritte, um ein Programm. 841 00:40:31,360 --> 00:40:32,140 Sie haben nur eine. 842 00:40:32,140 --> 00:40:35,260 Und so, das ist ziemlich überzeugende als auch. 843 00:40:35,260 --> 00:40:38,450 Mit einer SQL-Datenbank statt eine CSV-Datei, um Daten zu speichern. 844 00:40:38,450 --> 00:40:40,230 So SQL-Datenbank ist für pset7 verwendet. 845 00:40:40,230 --> 00:40:42,060 CSV-Dateien, die Sie nicht viel nutzen. 846 00:40:42,060 --> 00:40:45,960 Aber du hast es so verwendet, indirekt in pset7 auch durch Gespräche mit Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Aber CSV ist wie eine Excel-Datei, sondern super einfach, in der die Spalten 848 00:40:49,330 --> 00:40:54,010 nur durch Komma abgegrenzt innen eines ansonsten Textdatei. 849 00:40:54,010 --> 00:40:56,740 Und mit einer SQL-Datenbank ein wenig mehr überzeugend. 850 00:40:56,740 --> 00:41:00,060 Es ist ein auf dem Kopf, weil Sie die Dinge wie auswählen und einfügen und löschen. 851 00:41:00,060 --> 00:41:03,790 Und Sie erhalten, vermutlich, Indizes, MySQL und andere Datenbanken, wie 852 00:41:03,790 --> 00:41:07,510 Oracle, bauen für Sie in Erinnerung, die bedeutet, dass Ihr wählen ist wahrscheinlich nicht 853 00:41:07,510 --> 00:41:09,000 werde linear von oben nach unten sein. 854 00:41:09,000 --> 00:41:11,300 Es ist eigentlich los, um etwas zu sein wie binäre Suche oder etwas 855 00:41:11,300 --> 00:41:12,520 im Geiste. 856 00:41:12,520 --> 00:41:13,930 So sind sie in der Regel schneller. 857 00:41:13,930 --> 00:41:16,040 >> Aber ein Nachteil ist, dass es ist nur mehr Arbeit. 858 00:41:16,040 --> 00:41:16,730 Es ist mehr Aufwand. 859 00:41:16,730 --> 00:41:18,140 Sie haben zu den Datenbanken zu verstehen. 860 00:41:18,140 --> 00:41:18,940 Sie haben, um es einzurichten. 861 00:41:18,940 --> 00:41:20,840 Sie benötigen einen Server zu laufen die Datenbank auf. 862 00:41:20,840 --> 00:41:22,750 Sie müssen verstehen, wie es zu konfigurieren. 863 00:41:22,750 --> 00:41:24,930 Das sind also nur diese Arten von Kompromissen. 864 00:41:24,930 --> 00:41:27,860 Während eine CSV-Datei, können Sie schaffen sie mit gedit. 865 00:41:27,860 --> 00:41:28,770 Und du bist gut zu gehen. 866 00:41:28,770 --> 00:41:31,550 Es gibt keine Komplexität darüber hinaus. 867 00:41:31,550 --> 00:41:34,870 >> Verwendung eines Trie anstelle einer Hashtabelle mit separater Verkettung zu speichern ein 868 00:41:34,870 --> 00:41:37,490 Wörterbuch der Wörter erinnert von pset5. 869 00:41:37,490 --> 00:41:42,480 So versucht ein auf den Kopf, in der Theorie zumindest ist was? 870 00:41:42,480 --> 00:41:46,380 Constant Zeit, zumindest wenn Sie Hashing von jedem der einzelnen 871 00:41:46,380 --> 00:41:48,990 Buchstaben in einem Wort, wie Sie könnte für pset5 haben. 872 00:41:48,990 --> 00:41:52,720 Das könnte fünf Hashes, sechs sein Hashes, wenn es fünf oder sechs 873 00:41:52,720 --> 00:41:53,900 Buchstaben in dem Wort. 874 00:41:53,900 --> 00:41:54,580 Und das ist ziemlich gut. 875 00:41:54,580 --> 00:41:56,910 Und wenn es auf eine obere Grenze, wie Ihre Worte lang sein könnte, ist, dass 876 00:41:56,910 --> 00:41:59,320 tatsächlich asymptotisch konstante Zeit. 877 00:41:59,320 --> 00:42:05,180 >> Während eine Hash-Tabelle mit separater Verkettung, das Problem, dass es mit 878 00:42:05,180 --> 00:42:09,070 Art der Datenstruktur ist, dass der Leistung der Algorithmen in der Regel 879 00:42:09,070 --> 00:42:12,700 abhängig von der Anzahl von Dingen bereits in der Datenstruktur. 880 00:42:12,700 --> 00:42:15,660 Und das ist definitiv der Fall mit Ketten, wobei die mehr Sachen, die man setzen 881 00:42:15,660 --> 00:42:18,800 in einer Hash-Tabelle, die mehr denen Ketten gehen, was im schlimmsten bedeutet 882 00:42:18,800 --> 00:42:21,960 Fall das, was Sie vielleicht gesucht werden ist ganz am Ende einer 883 00:42:21,960 --> 00:42:26,000 dieser Ketten, die effektiv obliegt in etwas linear. 884 00:42:26,000 --> 00:42:29,450 >> Jetzt, in der Praxis könnte es absolut der Fall, dass eine Hash-Tabelle ist mit 885 00:42:29,450 --> 00:42:32,820 Ketten schneller ist als eine entsprechende Trie Umsetzung. 886 00:42:32,820 --> 00:42:35,570 Aber das ist aus verschiedenen Gründen, unter sind die Versuche verwenden eine ganze Reihe von 887 00:42:35,570 --> 00:42:39,240 Speicher Das kann in der Tat langsam Dinge unten, weil Sie nicht bekommen, schön 888 00:42:39,240 --> 00:42:42,410 Vorteile der so genannte Caching, wo die Dinge, die nahe beieinander liegen 889 00:42:42,410 --> 00:42:45,420 im Speicher zugegriffen werden kann häufig schneller. 890 00:42:45,420 --> 00:42:48,180 Und manchmal kann man mit zu kommen eine wirklich gute Hash-Funktion. 891 00:42:48,180 --> 00:42:51,060 Auch wenn Sie ein bisschen verschwenden Speicher, könnte man in der Tat in der Lage, 892 00:42:51,060 --> 00:42:54,430 schnell und nicht die Dinge finden, so schlecht, wie linear. 893 00:42:54,430 --> 00:42:58,410 >> Also kurz gesagt, es war nicht unbedingt mit irgendwelchem ​​eine oder sogar zwei 894 00:42:58,410 --> 00:43:00,050 bestimmte Dinge, die wir gesucht haben. 895 00:43:00,050 --> 00:43:03,080 Wirklich alles, was überzeugend als oben und unten 896 00:43:03,080 --> 00:43:04,800 allgemein unser Auge gefangen. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: Also für den Kopf, wir haben nicht selbst akzeptieren "schneller." Sie 898 00:43:11,840 --> 00:43:14,540 musste etwas darüber zu sagen. 899 00:43:14,540 --> 00:43:17,910 Selbst wenn man theoretisch schneller, sagte, wir wussten, dass Sie Art verstanden 900 00:43:17,910 --> 00:43:19,470 dass es 0 von 1. 901 00:43:19,470 --> 00:43:22,820 Und Hash-Tabelle, in der Theorie, nicht 0 von 1. 902 00:43:22,820 --> 00:43:26,550 Die Erwähnung nichts über Laufzeit in der Regel haben Sie die Punkte. 903 00:43:26,550 --> 00:43:32,640 Aber "schneller", die meisten Lösungen auf die große Tafel, die versucht waren, wurden 904 00:43:32,640 --> 00:43:34,990 objektiv langsamer als Lösungen waren, dass Hash-Tabellen. 905 00:43:34,990 --> 00:43:37,250 So schneller an und für sich ist nicht wirklich wahr. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> DAVID J. MALAN: Dom de dom dom. 908 00:43:44,380 --> 00:43:46,686 Ich bin wahrscheinlich der einzige, der erkennt, das ist, wie das ist zu vermuten, 909 00:43:46,686 --> 00:43:47,500 ausgesprochen werden, oder? 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: Ich hatte wirklich keine Ahnung. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. MALAN: Es machte Sinn in meinem Kopf. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: Ich mache diese. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Das ist also die eine, wo man ziehen musste das Diagramm ähnlich wie Sie vielleicht 916 00:44:04,243 --> 00:44:06,040 haben auf früheren Prüfungen gesehen. 917 00:44:06,040 --> 00:44:12,200 Also lasst uns einfach, dies zu betrachten. 918 00:44:12,200 --> 00:44:18,170 So aus dem HTML-Knoten haben wir zwei Kinder, der Kopf und der Körper. 919 00:44:18,170 --> 00:44:20,570 Also haben wir verzweigen - Kopf und Körper. 920 00:44:20,570 --> 00:44:22,280 Der Kopf hat eine Titel-Tag. 921 00:44:22,280 --> 00:44:23,710 So haben wir einen Titel. 922 00:44:23,710 --> 00:44:28,450 >> Nun, die eine Sache, eine Menge Leute vergessen ist, dass diese Textknoten sind 923 00:44:28,450 --> 00:44:30,430 Elemente innerhalb dieses Baumes. 924 00:44:30,430 --> 00:44:36,260 Also hier passieren wir sie als Ovale zeichnen um sie von diesen zu unterscheiden 925 00:44:36,260 --> 00:44:37,380 Knotentypen. 926 00:44:37,380 --> 00:44:41,450 Aber Mitteilung auch hier haben wir oben, Mitte und unten wird am Ende als 927 00:44:41,450 --> 00:44:42,560 Textknoten. 928 00:44:42,560 --> 00:44:46,250 So vergessen die war etwas einer gemeinsamen Fehler. 929 00:44:46,250 --> 00:44:48,770 >> Der Körper hat drei Kinder - diese drei divs. 930 00:44:48,770 --> 00:44:53,340 So div, div, div und dann der Text Knoten Kinder dieser divs. 931 00:44:53,340 --> 00:44:55,900 Das ist ziemlich viel es für diese Fragen. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. MALAN: Und es ist bemerkenswert, auch wenn wir uns nicht auf diese wohnen 933 00:44:57,860 --> 00:45:01,040 Details in der Zeit verbringen wir auf JavaScript, dass die Bestellung der Fall ist, in 934 00:45:01,040 --> 00:45:02,290 Tatsächlich Angelegenheit technisch. 935 00:45:02,290 --> 00:45:06,330 Also, wenn Kopf kommt, bevor der Körper in HTML, dann sollte es die erscheinen 936 00:45:06,330 --> 00:45:08,860 in der aktuellen DOM links des Körpers. 937 00:45:08,860 --> 00:45:12,265 Dass sein ist in der Regel nur FYI, so genannten Dokument um, wo 938 00:45:12,265 --> 00:45:13,260 es nicht egal. 939 00:45:13,260 --> 00:45:17,470 Und wenn du die Implementierung eines Parsers ein Programm, das HTML in Gebäude liest 940 00:45:17,470 --> 00:45:20,960 auf den Baum im Speicher, um ehrlich zu sein, das ist wohl intuitiv, was Sie 941 00:45:20,960 --> 00:45:24,720 tun es trotzdem - von oben nach unten, von links nach rechts. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Fragen dazu? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Sollte ich das nächste? 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. MALAN: Sicher. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Das ist also der Pufferüberlauf Angriff Frage. 948 00:45:39,320 --> 00:45:43,740 Die Hauptsache ist, hier zu erkennen ist, na ja, wie könnte ein Gegner Trick 949 00:45:43,740 --> 00:45:46,170 dieses Programm in der Ausführung beliebigen Code? 950 00:45:46,170 --> 00:45:51,860 So argv1 die erste Befehlszeile Argument zu diesem Programm, das sein kann 951 00:45:51,860 --> 00:45:53,920 beliebig lange. 952 00:45:53,920 --> 00:45:59,160 Aber hier sind wir mit memcpy kopieren argv1, die hier ist bar. 953 00:45:59,160 --> 00:46:00,165 Wir übergeben Sie als Argument. 954 00:46:00,165 --> 00:46:02,050 Und so ist es unter den Namen bar. 955 00:46:02,050 --> 00:46:08,040 >> Also sind wir memcpying bar in diesen Puffer c. 956 00:46:08,040 --> 00:46:09,400 Wie viele Bytes zu kopieren wir? 957 00:46:09,400 --> 00:46:14,040 Nun jedoch viele Bytes Bar passiert, verwenden, die Länge dieses Argument. 958 00:46:14,040 --> 00:46:17,930 Aber c ist nur 12 Byte breit. 959 00:46:17,930 --> 00:46:22,280 Wenn wir also eine Befehlszeile ein Argument das ist mehr als 12 Bytes, wir sind 960 00:46:22,280 --> 00:46:25,470 werde diese überlaufen insbesondere Puffer. 961 00:46:25,470 --> 00:46:31,000 Nun, wie könnte ein Gegner auszutricksen die programmieren, beliebigen Code auszuführen? 962 00:46:31,000 --> 00:46:34,910 >> Also denken Sie daran, dass hier Haupt ruft foo. 963 00:46:34,910 --> 00:46:37,340 Und so ist, dann Haupt Anrufe foo. 964 00:46:37,340 --> 00:46:40,408 Ziehen wir dies. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 So haben wir unsere Stack. 967 00:46:46,990 --> 00:46:49,090 Und hat ein Hauptstapelrahmen an der Unterseite. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 An einem gewissen Punkt, foo Haupt Anrufe. 970 00:46:53,250 --> 00:46:55,390 Nun, sofort, foo Haupt Anrufe. 971 00:46:55,390 --> 00:46:57,130 Und so foo bekommt seinen eigenen Stack-Frame. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Jetzt, an einem gewissen Punkt, foo wird, um zurückzukehren. 974 00:47:02,220 --> 00:47:06,810 Und ging foo Renditen, müssen wir wissen, an welche Codezeile innerhalb der Haupt wir 975 00:47:06,810 --> 00:47:10,610 waren, um zu wissen, wo wir sollten in Haupt wieder aufzunehmen. 976 00:47:10,610 --> 00:47:13,100 Wir können foo aus einer ganzen nennen Haufen von verschiedenen Orten. 977 00:47:13,100 --> 00:47:14,620 Wie können wir wissen, wo sie zurückkehren? 978 00:47:14,620 --> 00:47:16,460 Nun müssen wir, dass irgendwo zu speichern. 979 00:47:16,460 --> 00:47:23,010 >> Also irgendwo hier rechts herum, speichern wir wo wir noch einmal zurück 980 00:47:23,010 --> 00:47:24,070 foo Renditen. 981 00:47:24,070 --> 00:47:26,350 Und das ist die Absenderadresse. 982 00:47:26,350 --> 00:47:30,490 So, wie ein Gegner könnte nutzen hierfür ist die Tatsache, dass 983 00:47:30,490 --> 00:47:37,550 dieser Puffer c gespeichert ist, lassen Sie uns sagen, hier ist c. 984 00:47:37,550 --> 00:47:39,690 Also haben wir 12 Bytes für c bekam. 985 00:47:39,690 --> 00:47:40,540 Dies ist c. 986 00:47:40,540 --> 00:47:43,030 Und das ist Stapelring foo. 987 00:47:43,030 --> 00:47:49,970 Also, wenn der böswillige Benutzer mehr geht Bytes als 12, oder sie einen Befehl eingeben 988 00:47:49,970 --> 00:47:54,570 Zeilenargument, die länger als 12 ist Zeichen, dann werden wir 989 00:47:54,570 --> 00:47:57,540 diesen Puffer überlaufen. 990 00:47:57,540 --> 00:47:59,910 >> Wir können weitermachen. 991 00:47:59,910 --> 00:48:02,220 Und irgendwann, weit gehen wir genug, dass wir beginnen 992 00:48:02,220 --> 00:48:05,120 Überschreiben Sie diese Absender-Adresse. 993 00:48:05,120 --> 00:48:08,310 Also, wenn wir die Rücksprungadresse zu überschreiben, Dies bedeutet, dass, wenn foo 994 00:48:08,310 --> 00:48:14,220 Renditen, sind wir dorthin, wo die Rückkehr böswilliger Benutzer sagt es von 995 00:48:14,220 --> 00:48:19,490 was es Wert eingegeben wird, gleichgültig mit welchen Zeichen, die der Benutzer eingegeben werden. 996 00:48:19,490 --> 00:48:24,320 Und so, wenn der böswillige Benutzer wird besonders klug, er kann dies 997 00:48:24,320 --> 00:48:29,255 zurück zu irgendwo in der printDef Funktion oder irgendwo in der malloc 998 00:48:29,255 --> 00:48:31,830 Funktion, nur irgendwo willkürlich. 999 00:48:31,830 --> 00:48:38,420 >> Aber auch klüger ist, was, wenn er der Benutzer zurückkehrt, genau hier. 1000 00:48:38,420 --> 00:48:41,920 Und dann Ausführen starten diese als Codezeilen. 1001 00:48:41,920 --> 00:48:46,610 Also an diesem Punkt, der Benutzer eingeben kann was er will in dieser Region. 1002 00:48:46,610 --> 00:48:52,210 Und er hat die komplette Kontrolle über das Programm. 1003 00:48:52,210 --> 00:48:53,460 Fragen dazu? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Also komplett die nächste Frage ist die Neuimplementierung von foo in einer Weise 1006 00:49:00,970 --> 00:49:02,620 dass es nicht mehr anfällig. 1007 00:49:02,620 --> 00:49:03,870 >> Also gibt es ein paar Möglichkeiten Sie könnte das getan haben. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Wir haben immer noch nur c wobei der Länge 12. 1010 00:49:13,330 --> 00:49:16,480 Man könnte dies geändert haben als Teil der Lösung. 1011 00:49:16,480 --> 00:49:18,930 Wir haben auch einen Scheck zu machen Bar war sicher nicht null ist. 1012 00:49:18,930 --> 00:49:24,460 Obwohl Sie nicht brauchen dass für die volle Punktzahl. 1013 00:49:24,460 --> 00:49:27,690 Also sind wir die erste Prüfung String-Länge-Bar. 1014 00:49:27,690 --> 00:49:31,650 Wenn es mehr als 12, dann nicht tatsächlich tun die Kopie. 1015 00:49:31,650 --> 00:49:33,010 Also das ist ein Weg, es zu reparieren. 1016 00:49:33,010 --> 00:49:36,750 >> Eine weitere Möglichkeit der Fixierung ist es anstelle c mit der Länge nur 12, lassen Sie es 1017 00:49:36,750 --> 00:49:39,310 werden der Länge strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Eine weitere Möglichkeit der Fixierung ist eigentlich nur, um zurückzukehren. 1019 00:49:43,370 --> 00:49:46,690 Also, wenn Sie hatte gerade losgeworden alle dieses, wenn Sie hatte gerade alle gelöscht 1020 00:49:46,690 --> 00:49:51,830 Zeilen Code, würden Sie bekommen haben volle Punktzahl, da diese Funktion 1021 00:49:51,830 --> 00:49:54,150 nicht wirklich etwas zu erreichen. 1022 00:49:54,150 --> 00:49:57,650 Es ist das Kopieren der Befehlszeile Argument in eine Array in 1023 00:49:57,650 --> 00:49:59,960 seine lokalen Stack-Frame. 1024 00:49:59,960 --> 00:50:01,310 Und dann die Sache zurück. 1025 00:50:01,310 --> 00:50:04,020 Und was auch immer es versierter ist weg. 1026 00:50:04,020 --> 00:50:09,740 Also Rückkehr war auch eine ausreichende Weg, um die volle Punktzahl. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. MALAN: Nicht ganz der Geist der die Frage, aber die pro akzeptabel 1028 00:50:13,425 --> 00:50:15,580 spec dennoch. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Fragen zu einem der das? 1030 00:50:18,260 --> 00:50:22,270 Die eine Sache, dass Sie mindestens benötigt, um Code kompiliert haben. 1031 00:50:22,270 --> 00:50:24,810 Also auch wenn Sie nicht technisch anfällig, wenn der Code nicht 1032 00:50:24,810 --> 00:50:29,130 kompilieren, können wir nicht akzeptieren wollten, dass. 1033 00:50:29,130 --> 00:50:31,350 Keine Fragen? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. MALAN: Wollen Sie , diesen Titel zu sagen? 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: Nein 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. MALAN: Also in diesem, diese war entweder gute oder schlechte Nachrichten. 1038 00:50:40,470 --> 00:50:43,870 Dies ist buchstäblich das gleiche Problem als erste Quiz. 1039 00:50:43,870 --> 00:50:46,140 Und es ist fast die gleiche Problem pset1. 1040 00:50:46,140 --> 00:50:49,980 Aber es wurde bewusst vereinfacht, um sein eine einfachere Pyramide, eine, die sein können, 1041 00:50:49,980 --> 00:50:52,330 mit einem leicht gelöst einfacher Iteration. 1042 00:50:52,330 --> 00:50:55,680 Und wirklich, was wir auf immer hier war nicht so sehr die Logik, 1043 00:50:55,680 --> 00:50:58,100 weil wahrscheinlich zu diesem Zeitpunkt, sind Sie mehr Komfort als Sie waren, 1044 00:50:58,100 --> 00:51:01,850 in der ersten Woche mit for-Schleifen oder warum Loops, aber wirklich auseinander zu necken, dass 1045 00:51:01,850 --> 00:51:04,790 Sie ein wenig bequem mit der sind Vorstellung, dass PHP ist nicht nur über das, was 1046 00:51:04,790 --> 00:51:05,290 Programmierung. 1047 00:51:05,290 --> 00:51:07,820 Es kann tatsächlich als eine Sprache verwendet werden, Befehlszeilenprogramme schreiben. 1048 00:51:07,820 --> 00:51:10,060 >> Und in der Tat ist das, was wir versuchten, Ihre Aufmerksamkeit zu zeichnen. 1049 00:51:10,060 --> 00:51:12,060 Dies ist ein Kommandozeilen-PHP-Programm. 1050 00:51:12,060 --> 00:51:16,690 Also C-Code hier, während korrekt in C, nicht für PHP zu korrigieren. 1051 00:51:16,690 --> 00:51:17,940 Aber der Code ist wirklich das gleiche. 1052 00:51:17,940 --> 00:51:21,720 Wenn Sie die Lösungen für Quiz vergleichen 0 gegen ein Quiz, werden Sie feststellen, dass 1053 00:51:21,720 --> 00:51:25,630 es ist fast identisch mit Ausnahme einige Dollar-Zeichen und für die 1054 00:51:25,630 --> 00:51:27,250 Fehlen eines Datentyps. 1055 00:51:27,250 --> 00:51:31,720 Insbesondere dann, wenn wir einen Blick hier, Sie werden sehen, dass wir durchlaufen, in diesem 1056 00:51:31,720 --> 00:51:33,730 Fall von 1 bis 7 durch. 1057 00:51:33,730 --> 00:51:34,910 >> Wir hätten es getan haben 0 Index. 1058 00:51:34,910 --> 00:51:37,320 Aber manchmal denke ich, es ist nur mental leichter, über Dinge zu denken 1059 00:51:37,320 --> 00:51:38,200 von 1 bis 7. 1060 00:51:38,200 --> 00:51:40,300 Wenn Sie einen Block, dann zwei Blöcke, dann drei, dann 1061 00:51:40,300 --> 00:51:41,770 Punkt, Punkt, Punkt sieben. 1062 00:51:41,770 --> 00:51:45,960 Wir haben j auf 1 initialisiert und dann zählen auf bis zu i. 1063 00:51:45,960 --> 00:51:48,150 Und hier ist alles ansonsten identisch. 1064 00:51:48,150 --> 00:51:49,790 Aber bemerkenswert sind ein paar Dinge. 1065 00:51:49,790 --> 00:51:53,230 Wir geben Ihnen diese beiden Zeilen, diese erste ein, goofily als Kram genannt 1066 00:51:53,230 --> 00:51:54,560 für scharfe Knall. 1067 00:51:54,560 --> 00:51:58,770 Und dass, nur gibt den Pfad, der Ordner, in dem ein Programm sein kann 1068 00:51:58,770 --> 00:52:02,160 festgestellt, dass Sie verwenden möchten um diese Datei zu interpretieren. 1069 00:52:02,160 --> 00:52:04,710 >> Und dann die Linie nach, dass der bedeutet natürlich, geben Sie PHP-Modus. 1070 00:52:04,710 --> 00:52:07,740 Und die Zeile ganz unten bedeutet Ausfahrt PHP-Modus. 1071 00:52:07,740 --> 00:52:09,740 Und das funktioniert im Allgemeinen mit interpretierte Sprachen. 1072 00:52:09,740 --> 00:52:14,370 Es ist irgendwie ärgerlich, wenn Sie schreiben, eine Programm in einer Datei namens foo.php. 1073 00:52:14,370 --> 00:52:17,320 Und dann die Benutzer müssen nur erinnern, OK, um dieses Programm ausführen, ich 1074 00:52:17,320 --> 00:52:22,320 auf den Typ "php foo.php Raum." Art von ärgerlich, wenn sonst nichts. 1075 00:52:22,320 --> 00:52:25,270 Und es zeigt auch, dass das Programm ist in PHP, das ist nicht alles geschrieben 1076 00:52:25,270 --> 00:52:27,060 das Beleuchten des Benutzers. 1077 00:52:27,060 --> 00:52:30,100 >> So können Sie die. Php ganz zu entfernen Rückruf von Vortrag. 1078 00:52:30,100 --> 00:52:35,690 Und Sie können tatsächlich tun. / Foo, wenn Sie es, indem sie es chmodded haben 1079 00:52:35,690 --> 00:52:36,500 ausführbaren Datei. 1080 00:52:36,500 --> 00:52:39,630 So chmod a + x foo wäre getan. 1081 00:52:39,630 --> 00:52:41,460 Und wenn Sie auch den Kram hier hinzufügen. 1082 00:52:41,460 --> 00:52:45,320 Aber wirklich, war das Problem immer bei Ausdruck von etwas. 1083 00:52:45,320 --> 00:52:51,100 Kein HTML, kein C-Code-Sicherheit, nur einige PHP. 1084 00:52:51,100 --> 00:52:54,100 So Milo dann in Problem 25 zurück. 1085 00:52:54,100 --> 00:52:58,050 Und in 25, wurden Sie die folgenden gegeben Skelett-Code, der eine war 1086 00:52:58,050 --> 00:52:59,730 ziemlich einfache Web-Seite. 1087 00:52:59,730 --> 00:53:04,230 Und die saftigen Teil HTML-weise war nach unten Hier, wo wir innerhalb des Körpers haben 1088 00:53:04,230 --> 00:53:09,160 eine Form, die eindeutige ID der Eingänge hat innerhalb dessen war zwei Eingänge, einen 1089 00:53:09,160 --> 00:53:11,950 mit einer Idee des Namens, eines mit einer Idee der Taste. 1090 00:53:11,950 --> 00:53:14,240 >> Die erste war Typ Text, der zweite vom Typ einreichen. 1091 00:53:14,240 --> 00:53:16,930 Und so haben wir euch eigentlich mehr Zutaten als man benötigt, nur so 1092 00:53:16,930 --> 00:53:19,230 ihr hattet Optionen, mit denen um dieses Problem zu lösen. 1093 00:53:19,230 --> 00:53:21,130 Sie müssen nicht unbedingt brauchen alle diese IDs. 1094 00:53:21,130 --> 00:53:23,580 Aber es ermöglicht Ihnen zu lösen sie auf unterschiedliche Weise. 1095 00:53:23,580 --> 00:53:27,050 Und an der Spitze, feststellen, dass Das Ziel war es, auslösen 1096 00:53:27,050 --> 00:53:27,960 ein Fenster wie diese - 1097 00:53:27,960 --> 00:53:28,780 Hallo, Milo! - 1098 00:53:28,780 --> 00:53:31,270 Pop-up im Browser mit die Super-einfach, wenn 1099 00:53:31,270 --> 00:53:33,190 nicht hässlich, Alarm-Funktion. 1100 00:53:33,190 --> 00:53:37,480 Und so, letztlich läuft es darauf hinaus konzeptionell irgendwie Hören für 1101 00:53:37,480 --> 00:53:41,290 Einreichungen des Formulars Client-Seite , Nicht die Server-Seite, irgendwie 1102 00:53:41,290 --> 00:53:45,640 reagiert auf diese Vorlage durch packte den Wert, den der Benutzer eingegeben 1103 00:53:45,640 --> 00:53:50,120 in dem Namensfeld, und dann Anzeige in den Körper einer Warnung. 1104 00:53:50,120 --> 00:53:53,460 >> So ein Weg, dies zu tun ist mit jQuery, die ein wenig aussieht 1105 00:53:53,460 --> 00:53:56,880 syntaktisch verwirrend auf den ersten. 1106 00:53:56,880 --> 00:54:00,760 Sie können dies mit reinem DOM-Code zu tun - document.getelement nach ID. 1107 00:54:00,760 --> 00:54:02,530 Aber lassen Sie uns einen Blick auf diese Version. 1108 00:54:02,530 --> 00:54:05,110 Ich habe ein paar wichtige Linien zuerst. 1109 00:54:05,110 --> 00:54:09,460 So ein, haben wir diese Linie, das ist, identisch, was man gesehen haben 1110 00:54:09,460 --> 00:54:13,830 in, glaube ich, form2.html aus der Klasse 9 in der Woche. 1111 00:54:13,830 --> 00:54:16,960 Und das ist nur zu sagen, führen der folgende Code, wenn 1112 00:54:16,960 --> 00:54:18,430 das Dokument ist fertig. 1113 00:54:18,430 --> 00:54:21,770 Da dies nur wichtig, weil HTML-Seiten werden oben zu lesen 1114 00:54:21,770 --> 00:54:23,280 unten, von links nach rechts. 1115 00:54:23,280 --> 00:54:27,910 >> Und deshalb, wenn Sie versuchen zu tun, etwas in Code hier oben bis zu einem gewissen DOM 1116 00:54:27,910 --> 00:54:31,560 Element, einige HTML-Tag, das ist nach unten hier, bist du es tun zu früh, 1117 00:54:31,560 --> 00:54:34,220 weil dies nicht sogar in den Speicher gelesen wurden. 1118 00:54:34,220 --> 00:54:37,740 So sagen diese document.ready Linie, wir sagen, 1119 00:54:37,740 --> 00:54:39,040 hier ist ein Code, Browser. 1120 00:54:39,040 --> 00:54:42,440 Aber nicht ausführen Sie dies, bis die ganze Dokument fertig ist, ist, dass die DOM 1121 00:54:42,440 --> 00:54:44,320 Baum im Speicher vorhanden ist. 1122 00:54:44,320 --> 00:54:47,110 Dieser ist ein wenig mehr einfach, wenn ein syntaktisch 1123 00:54:47,110 --> 00:54:51,890 bisschen anders, wo ich sage, Halte das HTML-Element, dessen einzigartige 1124 00:54:51,890 --> 00:54:53,560 Kennung ist Eingänge. 1125 00:54:53,560 --> 00:54:56,220 Das ist, was die Hash-Tag bezeichnet, die eindeutige ID. 1126 00:54:56,220 --> 00:54:58,070 Und dann rufe ich. Einreichen. 1127 00:54:58,070 --> 00:55:01,660 >> So. Einreichen hier ist eine Funktion, sonst als ein Verfahren bekannt, das 1128 00:55:01,660 --> 00:55:05,850 innerhalb des Objekts auf der linken Seite gibt, dass ich nicht zu markieren. 1129 00:55:05,850 --> 00:55:08,990 Also, wenn Sie denken, der Eingänge als Objekt in Erinnerung - und in der Tat ist es. 1130 00:55:08,990 --> 00:55:10,440 Es ist ein Knoten in einem Baum - 1131 00:55:10,440 --> 00:55:16,580 . Einreichen Einrichtung, wenn diese Form mit Diese ID wird vorgelegt, führen 1132 00:55:16,580 --> 00:55:17,700 Mit dem folgenden Code. 1133 00:55:17,700 --> 00:55:20,290 Ich weiß nicht, was der Name der Funktion ist, dass ich die Ausführung. 1134 00:55:20,290 --> 00:55:23,760 So, hier bin ich mit, wie früher, was ist genannte Lambda-Funktion oder eine 1135 00:55:23,760 --> 00:55:24,720 anonyme Funktion. 1136 00:55:24,720 --> 00:55:27,640 Es ist gar nicht intellektuell interessante anders als es keinen Namen hat, 1137 00:55:27,640 --> 00:55:30,220 das ist gut, wenn Sie nur sind jemals, es einmal anzurufen. 1138 00:55:30,220 --> 00:55:34,490 Und innen gibt habe ich eigentlich umgehen die Vorlage des Formulars. 1139 00:55:34,490 --> 00:55:36,810 Ich zuerst eine Variable deklarieren Wert genannt. 1140 00:55:36,810 --> 00:55:40,610 Und was ist dann die Wirkung dieser hervorgehobene Teil jetzt hier? 1141 00:55:40,610 --> 00:55:44,755 Was bedeutet, dass bei einem zu tun hohem Niveau für mich? 1142 00:55:44,755 --> 00:55:48,539 >> Zielgruppe: IT bekommt den Wert, den die Benutzer nicht in der unten stehenden HTML-Code. 1143 00:55:48,539 --> 00:55:50,920 Es wird diese ID und dann findet den Wert der IT. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. MALAN: Genau. 1145 00:55:51,590 --> 00:55:54,300 Es packt die Knoten, deren einzigartige Kennung ist der Name. 1146 00:55:54,300 --> 00:55:56,900 Es wird der Wert darin, die ist vermutlich, was der Benutzer 1147 00:55:56,900 --> 00:55:58,190 eingegeben selbst zu tragen. 1148 00:55:58,190 --> 00:56:01,020 Und dann speichert er, dass in der Variable namens Wert. 1149 00:56:01,020 --> 00:56:03,720 Nebenbei haben Sie auch könnte dies getan, ein wenig anders. 1150 00:56:03,720 --> 00:56:09,250 Indem er etwas völlig akzeptabel var Wert liegen wird 1151 00:56:09,250 --> 00:56:10,500 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 Und deshalb ist es ein wenig langweilig, nicht mit jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Name". Wert. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 So völlig akzeptabel. 1157 00:56:19,620 --> 00:56:22,770 Verschiedene Möglichkeiten, dies zu tun. jQuery nur neigt dazu, ein wenig mehr sein, prägnant und 1158 00:56:22,770 --> 00:56:25,230 definitiv mehr beliebt unter Programmierern. 1159 00:56:25,230 --> 00:56:27,590 >> Nun, ich mache ein bisschen Verstand zu überprüfen, weil in das Problem 1160 00:56:27,590 --> 00:56:30,820 Aussage, die wir ausdrücklich gesagt, wenn der Benutzer hat noch nicht eingegeben seine 1161 00:56:30,820 --> 00:56:32,580 Namen, eine Benachrichtigung nicht zeigen. 1162 00:56:32,580 --> 00:56:35,390 Aber man kann für das überprüfen, indem Sie einfach Kontrolle für die leere Zeichenfolge für eine 1163 00:56:35,390 --> 00:56:37,850 Zitat-Zitat Ende, wenn es nichts wirklich da. 1164 00:56:37,850 --> 00:56:40,880 Aber wenn es nicht gleich quote-unquote, Ich möchte Warnungen rufen. 1165 00:56:40,880 --> 00:56:45,610 Und das Interessante dabei ist, dass wir sind mit den Plus-Operator, der 1166 00:56:45,610 --> 00:56:48,130 tut, was in JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Verketten. 1168 00:56:48,740 --> 00:56:50,690 So ist es wie PHPs Punkt-Operator. 1169 00:56:50,690 --> 00:56:52,820 Gleiche Idee, etwas andere Syntax. 1170 00:56:52,820 --> 00:56:55,280 Und ich bin nur der Erstellung der Zeichenfolge, Sie sah auf dem Screenshot - 1171 00:56:55,280 --> 00:56:57,750 Hallo, so und so. 1172 00:56:57,750 --> 00:56:59,200 >> Und dann das letzte Detail ist diese. 1173 00:56:59,200 --> 00:57:04,970 Warum habe ich falsch innen zurück dieser anonymen Funktion? 1174 00:57:04,970 --> 00:57:07,420 >> ZIELGRUPPE: Es gibt keinen Wert. 1175 00:57:07,420 --> 00:57:09,380 Sie steckte es in Form. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Es sagt nur, wenn der Wert nicht gleich leer, dann tun Sie es. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Es war eine leere in dieser Vorlage. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. MALAN: OK. 1181 00:57:21,170 --> 00:57:21,640 Aber vorsichtig. 1182 00:57:21,640 --> 00:57:22,830 Es ist niemand anderes hier. 1183 00:57:22,830 --> 00:57:25,510 Und das return false außerhalb der if-Bedingungen. 1184 00:57:25,510 --> 00:57:29,470 Also das hervorgehobene Zeile, return false, führt, egal was, wenn 1185 00:57:29,470 --> 00:57:32,310 das Formular abgeschickt wird. 1186 00:57:32,310 --> 00:57:36,810 Was false zurück innerhalb dieses Event-Handler, wie es heißt, 1187 00:57:36,810 --> 00:57:38,450 die Veranstaltung in Frage als Vorlage? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> ZIELGRUPPE: Weil es nur einmal. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. MALAN: nur einmal passiert. 1191 00:57:45,320 --> 00:57:46,821 Nicht ganz. 1192 00:57:46,821 --> 00:57:47,292 Ja? 1193 00:57:47,292 --> 00:57:50,589 >> ZIELGRUPPE: Es verhindert, dass das Formular von Vorlage auf das Standardverhalten, 1194 00:57:50,589 --> 00:57:52,480 was die Seite neu zu laden machen würde. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. MALAN: Genau. 1196 00:57:53,110 --> 00:57:56,490 Also ich bin Überlastung der Begriff hier einreichen, weil ich sage, ist die Form 1197 00:57:56,490 --> 00:57:57,670 eingereicht werden. 1198 00:57:57,670 --> 00:58:02,240 Aber, wie Sie vorschlagen, ist es eigentlich nicht wurde im wahrsten HTTP Weg übermittelt. 1199 00:58:02,240 --> 00:58:06,870 Wenn Sie auf Absenden, weil Sie auf unserer onSubmit Handler, wir Abfangen 1200 00:58:06,870 --> 00:58:09,040 dass Form Vorlage so zu sprechen. 1201 00:58:09,040 --> 00:58:11,290 Wir sind dann unser Ding mit JavaScript-Code. 1202 00:58:11,290 --> 00:58:14,070 Aber ich bin bewusst false zurück, weil das, was ich will nicht geschehen ein 1203 00:58:14,070 --> 00:58:18,430 Bruchteil einer Sekunde später ist für die ganze Form sich auf die Bahn abgegeben werden 1204 00:58:18,430 --> 00:58:22,800 Server mit Schlüssel-Wert-Paare durch Veränderung die URL, die so etwas wie 1205 00:58:22,800 --> 00:58:26,180 q = Katzen oder was auch immer wir getan haben, zum Beispiel in der Klasse. 1206 00:58:26,180 --> 00:58:29,640 Ich glaube nicht, dass das passiert, weil gibt es keinen Server für diese Abhör 1207 00:58:29,640 --> 00:58:30,690 bilden Unterwerfung. 1208 00:58:30,690 --> 00:58:32,320 Es ist rein in JavaScript-Code. 1209 00:58:32,320 --> 00:58:35,760 Und das ist, warum ich noch nicht einmal eine action-Attribut auf meiner Form, weil ich 1210 00:58:35,760 --> 00:58:38,870 nicht für dieses beabsichtigen, immer auf den Server zu gehen. 1211 00:58:38,870 --> 00:58:40,780 >> So ist es, die eingereicht. 1212 00:58:40,780 --> 00:58:44,340 Aber wir Abfangen diese Form Einreichung und verhindern, dass die Standard- 1213 00:58:44,340 --> 00:58:47,477 Verhalten, das eigentlich gehen den ganzen Weg auf den Server. 1214 00:58:47,477 --> 00:58:48,730 >> ZIELGRUPPE: So halten es Client-Seite. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. MALAN: Halten es Client-Seite. 1216 00:58:49,780 --> 00:58:51,030 Genau richtig. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Weiter oben war mein oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB BOWDEN: OK. 1221 00:59:00,430 --> 00:59:04,990 So war diese erste Frage in der Regel rau für die Menschen. 1222 00:59:04,990 --> 00:59:07,270 Obwohl die späteren ging besser. 1223 00:59:07,270 --> 00:59:12,260 Sie hatten also die richtigen Daten wählen Typen für beide Säulen. 1224 00:59:12,260 --> 00:59:17,750 Und beide von diesen haben einige Dinge über sie, dass 1225 00:59:17,750 --> 00:59:20,620 machen die Wahl schwer. 1226 00:59:20,620 --> 00:59:24,430 So int war keine gültige Geben Sie für Nummer. 1227 00:59:24,430 --> 00:59:29,410 Der Grund dafür ist eine 12-stellige Konto Nummer, ist ein int nicht groß genug, um 1228 00:59:29,410 --> 00:59:31,070 Gesamt speichern Ziffern. 1229 00:59:31,070 --> 00:59:36,570 So würde eine gültige Wahl eine große gewesen sein int, wenn Sie wissen, dass passiert. 1230 00:59:36,570 --> 00:59:42,090 Eine andere Wahl hätte ein char-Feld der Länge 12. 1231 00:59:42,090 --> 00:59:44,560 Also entweder von denen würde gearbeitet haben. 1232 00:59:44,560 --> 00:59:46,100 Int nicht. 1233 00:59:46,100 --> 00:59:50,170 >> Jetzt, Balance, denken Sie zurück an pset7. 1234 00:59:50,170 --> 00:59:59,540 So haben wir speziell Dezimalstelle auf speichern Sie den Wert von Aktien oder - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID J. MALAN: Cash. 1236 01:00:00,550 --> 01:00:01,060 >> ROB BOWDEN: Cash. 1237 01:00:01,060 --> 01:00:05,710 Wir verwendeten Dezimalzahl, die Menge an zu speichern Geld, das der Benutzer derzeit. 1238 01:00:05,710 --> 01:00:10,950 Also der Grund, warum wir das tun, ist weil, denken Sie daran, die Schwimmer. 1239 01:00:10,950 --> 01:00:12,480 Es gibt in Gleitkomma-Präzision. 1240 01:00:12,480 --> 01:00:18,200 Es kann nicht genau das Geld speichern Werte wie wir wollen hier. 1241 01:00:18,200 --> 01:00:23,630 So Dezimalzahl ist in der Lage, genau Store etwas, sagen wir, zwei Dezimalstellen. 1242 01:00:23,630 --> 01:00:27,630 Das ist, warum Balance, sie wollen wir Dezimal-und nicht schwimmen zu können. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. MALAN: Und auch, auch, obwohl das wäre vielleicht klug in anderen 1244 01:00:30,230 --> 01:00:32,760 Zusammenhängen zu denken, vielleicht ist eine Chance für einen int. 1245 01:00:32,760 --> 01:00:34,420 Ich werde einfach im Auge behalten Dinge in ein paar Cent. 1246 01:00:34,420 --> 01:00:38,670 Da haben wir gezeigt, explizit die Standard Wert des Seins 100.00, dass 1247 01:00:38,670 --> 01:00:40,380 heißt, es könnte nur ein int sein. 1248 01:00:40,380 --> 01:00:45,310 Und noch eine Zahl mit Subtilität zu war, dass es nicht gemeint 1249 01:00:45,310 --> 01:00:46,180 um eine Fangfrage sein. 1250 01:00:46,180 --> 01:00:49,860 Aber daran erinnern, dass ein int in MySQL, wie in C, zumindest in der 1251 01:00:49,860 --> 01:00:51,440 Gerät ist 32-Bit. 1252 01:00:51,440 --> 01:00:53,960 Und auch wenn wir nicht erwarten, dass Sie genau wissen, wie viele Stellen, die 1253 01:00:53,960 --> 01:00:56,910 Mittel, nicht daran erinnern, dass die größte Zahl Sie potentiell darstellen kann 1254 01:00:56,910 --> 01:01:00,710 mit einem 32-Bit-Zahl ist in etwa, was? 1255 01:01:00,710 --> 01:01:02,760 >> Welche Nummer haben wir immer sagen? 1256 01:01:02,760 --> 01:01:04,530 2 bis 32, die in etwa das, was ist? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Sie müssen nicht genau wissen. 1259 01:01:08,780 --> 01:01:10,580 Aber grob ist hilfreich im Leben. 1260 01:01:10,580 --> 01:01:12,200 Es ist rund 4 Milliarden Euro. 1261 01:01:12,200 --> 01:01:14,430 Also haben wir gesagt, dass ein paar mal. 1262 01:01:14,430 --> 01:01:16,360 Ich weiß, ich habe das ein paar Mal gesagt. 1263 01:01:16,360 --> 01:01:17,670 Und es ist rund 4 Milliarden Euro. 1264 01:01:17,670 --> 01:01:19,710 Und das ist eine gute Regel Faust wissen. 1265 01:01:19,710 --> 01:01:21,880 Wenn Sie 8-Bit-, 256 haben ist die magische Zahl. 1266 01:01:21,880 --> 01:01:24,160 Wenn Sie 32 Bit, 4 haben Milliarden geben oder nehmen. 1267 01:01:24,160 --> 01:01:27,140 Also, wenn Sie nur auf 4 Milliarden zu schreiben, Sie werden sehen, dass es weniger Stellen als 1268 01:01:27,140 --> 01:01:30,970 12, was bedeutet, dass es nicht klar Ausdrucks genug zu erfassen ein 1269 01:01:30,970 --> 01:01:34,220 12-stellige Kontonummer. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 So gingen die anderen besser. 1272 01:01:38,520 --> 01:01:40,900 So nehme an, dass die Bank schreibt eine 20 $ monatlich 1273 01:01:40,900 --> 01:01:42,400 Wartungsgebühr auf alle Konten. 1274 01:01:42,400 --> 01:01:45,506 Mit SQL-Abfrage, welche die Bank konnte Abzug $ 20 von jedem Zahl, auch wenn 1275 01:01:45,506 --> 01:01:47,520 es ergeben sich einige negative Salden? 1276 01:01:47,520 --> 01:01:50,380 Also im Grunde gibt es vier Haupttypen von Abfragen - 1277 01:01:50,380 --> 01:01:52,840 einzufügen, wählen, aktualisieren und löschen. 1278 01:01:52,840 --> 01:01:56,080 Also, was tun wir denken, wir sind hier benutzen? 1279 01:01:56,080 --> 01:01:57,000 Aktualisieren. 1280 01:01:57,000 --> 01:01:58,260 >> Werfen wir also einen Blick. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 So, hier sind wir zu aktualisieren. 1283 01:02:05,870 --> 01:02:09,900 Welche Tabelle aktualisieren wir Konten? 1284 01:02:09,900 --> 01:02:11,670 So aktualisieren Konten. 1285 01:02:11,670 --> 01:02:15,390 Und dann die Syntax sagt, was Konten aktualisieren wir? 1286 01:02:15,390 --> 01:02:19,520 Nun, wir Balance-Einstellung gleich die aktuellen Wert von minus 20 Balance. 1287 01:02:19,520 --> 01:02:22,860 So wird dies alle Zeilen aktualisieren von Konten, Subtraktion 1288 01:02:22,860 --> 01:02:26,250 $ 20 aus dem Gleichgewicht. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. MALAN: Ein häufiger Fehler hier auch wenn wir es manchmal verziehen, 1290 01:02:29,260 --> 01:02:32,990 war es eigentlich PHP-Code hier Aufruf der Query-Funktion oder setzen 1291 01:02:32,990 --> 01:02:35,460 Anführungszeichen um alles, dass nicht brauchen, um dort zu sein. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Denken Sie daran, dass MySQL eine eigene Sprache von PHP. 1293 01:02:39,780 --> 01:02:42,410 Wir passieren zu MySQL in PHP zu schreiben. 1294 01:02:42,410 --> 01:02:46,180 Und PHP wird dann Senden über dem MySQL-Server. 1295 01:02:46,180 --> 01:02:51,120 Aber Sie brauchen nicht in PHP, um kommunizieren mit einem MySQL-Server. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. MALAN: Genau. 1297 01:02:51,730 --> 01:02:54,240 Also keine Variablen mit Dollar-Zeichen In diesem Zusammenhang sein. 1298 01:02:54,240 --> 01:02:59,550 Es kann nur die gesamte Mathematik zu tun innerhalb der Datenbank. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Also das nächste. 1301 01:03:01,300 --> 01:03:02,731 Ist das der nächste? 1302 01:03:02,731 --> 01:03:03,210 Ja. 1303 01:03:03,210 --> 01:03:06,570 Also mit welcher SQL-Abfrage, die die Bank Abrufen der Kontonummern der 1304 01:03:06,570 --> 01:03:09,300 reichsten Kunden, die mit Guthaben mehr als 1000? 1305 01:03:09,300 --> 01:03:13,280 Also, welche der vier Arten werden wir hier? 1306 01:03:13,280 --> 01:03:14,430 Wählen Sie. 1307 01:03:14,430 --> 01:03:16,650 So wollen wir auswählen. 1308 01:03:16,650 --> 01:03:17,610 Was wollen wir wählen? 1309 01:03:17,610 --> 01:03:19,380 Welche Spalte wollen wir wählen? 1310 01:03:19,380 --> 01:03:20,970 Wir wollen speziell Nummer zu wählen. 1311 01:03:20,970 --> 01:03:23,910 Aber wenn Sie die Sterne, die wir auch das akzeptiert. 1312 01:03:23,910 --> 01:03:25,820 >> Nummer So wählen Sie aus, welche Tabelle? 1313 01:03:25,820 --> 01:03:26,640 Konten. 1314 01:03:26,640 --> 01:03:28,370 Und dann die Bedingung, die wir wollen? 1315 01:03:28,370 --> 01:03:30,140 Wo Gleichgewicht größer als 1000. 1316 01:03:30,140 --> 01:03:31,720 Wir auch mehr akzeptiert oder gleich. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Letzte. 1319 01:03:36,190 --> 01:03:42,940 Mit SQL-Abfrage, welche die Bank konnte Nähe, das heißt, zu löschen jedes Konto, das 1320 01:03:42,940 --> 01:03:44,480 hat eine Bilanz von 0 $? 1321 01:03:44,480 --> 01:03:47,620 Also, welcher der vier sind wir gehen zu verwenden? 1322 01:03:47,620 --> 01:03:48,320 Löschen. 1323 01:03:48,320 --> 01:03:50,180 So ist die Syntax für das? 1324 01:03:50,180 --> 01:03:51,890 Löschen von welchem ​​Tisch? 1325 01:03:51,890 --> 01:03:53,550 Konten. 1326 01:03:53,550 --> 01:03:55,790 Und dann, auf dem der Zustand wir löschen wollen - 1327 01:03:55,790 --> 01:03:57,280 wo Saldo gleich Null. 1328 01:03:57,280 --> 01:04:03,050 So löschen Sie alle Zeilen aus Konten wobei der Rest Null ist. 1329 01:04:03,050 --> 01:04:04,300 Fragen zu einem von diesen? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Möchten Sie die Warteschlange? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. MALAN: Queue Führer. 1333 01:04:11,200 --> 01:04:17,110 Also in diesem, haben Sie etwas haben wir vertraut Struktur, die wir erkundet ein 1334 01:04:17,110 --> 01:04:20,450 Bit in der Klasse neben der Strukturen, welche ein Daten war 1335 01:04:20,450 --> 01:04:21,910 Struktur im Geiste verwandt. 1336 01:04:21,910 --> 01:04:24,670 Der Unterschied allerdings mit einer Warteschlange dass wir irgendwie daran erinnern, wer 1337 01:04:24,670 --> 01:04:27,900 war am Anfang der Warteschlange, in großer Teil, so dass wir mehr machen 1338 01:04:27,900 --> 01:04:30,530 effizientere Nutzung des Speichers zumindest wenn wir mit einem Array. 1339 01:04:30,530 --> 01:04:35,460 >> Da erinnern, wenn wir ein Array, wenn zum Beispiel ist dies die Front 1340 01:04:35,460 --> 01:04:38,470 die Warteschlange, wenn ich in der Warteschlange bekommen hier und dann jemand in der Leitung wird 1341 01:04:38,470 --> 01:04:42,710 hinter mir, hinter mir, hinter mir, und eine Person aus der Reihe tanzt, können Sie 1342 01:04:42,710 --> 01:04:45,930 könnte, wie wir sahen einige unserer menschlichen Freiwillige in der Klasse, haben alle 1343 01:04:45,930 --> 01:04:47,100 verschieben diese Weise. 1344 01:04:47,100 --> 01:04:50,880 Aber im allgemeinen, nachdem jeder tun etwas ist nicht die beste Nutzung der Zeit 1345 01:04:50,880 --> 01:04:54,600 in einem Programm, weil es bedeutet, dass Ihre Algorithmus in dem, was läuft 1346 01:04:54,600 --> 01:04:56,520 asymptotische Laufzeit? 1347 01:04:56,520 --> 01:04:57,420 Es ist linear. 1348 01:04:57,420 --> 01:04:59,600 >> Und ich fühle mich wie das ist irgendwie dumm. 1349 01:04:59,600 --> 01:05:02,890 Wenn der nächste in der Reihe ist der nächste Person, die angeblich in die zu gehen ist 1350 01:05:02,890 --> 01:05:04,660 speichern, nicht alle haben sie sich zusammen zu bewegen. 1351 01:05:04,660 --> 01:05:08,200 Lassen Sie die Person aus gepflückt werden wenn die Zeit kommt, zum Beispiel. 1352 01:05:08,200 --> 01:05:09,870 So können wir ein wenig Zeit, es zu retten. 1353 01:05:09,870 --> 01:05:14,840 Und so zu tun, aber, dass Mittel dass der Kopf der Schlange oder die 1354 01:05:14,840 --> 01:05:18,060 Anfang der Warteschlange wird zu immer tiefer und tiefer zu bewegen 1355 01:05:18,060 --> 01:05:23,340 in die Reihe und schließlich könnte tatsächlich wickeln um, wenn wir mit ein 1356 01:05:23,340 --> 01:05:25,790 Array, um die Menschen zu speichern in dieser Warteschlange. 1357 01:05:25,790 --> 01:05:28,390 So kann man fast denken, der Array als eine kreisförmige Daten 1358 01:05:28,390 --> 01:05:29,880 Struktur in diesem Sinne. 1359 01:05:29,880 --> 01:05:33,970 >> Also irgendwie muss man den Überblick über die zu halten Größe von ihr oder wirklich das Ende von 1360 01:05:33,970 --> 01:05:36,250 und dann, wenn der Anfang ist. 1361 01:05:36,250 --> 01:05:39,490 So schlagen wir vor, dass Sie erklären, eine solche Warteschlange Berufung 1362 01:05:39,490 --> 01:05:41,330 q es, nur ein Buchstabe. 1363 01:05:41,330 --> 01:05:44,570 Dann schlagen wir vor, dass die Front auf Null und initialisiert die Größe 1364 01:05:44,570 --> 01:05:45,470 auf Null initialisiert werden. 1365 01:05:45,470 --> 01:05:47,770 >> So jetzt gibt es nichts, innerhalb dieser Warteschlange. 1366 01:05:47,770 --> 01:05:50,910 Und wir bitten Sie, füllen Sie bitte den Umsetzung der Enqueue unten in 1367 01:05:50,910 --> 01:05:55,250 derart, dass die Funktion fügt n zu das Ende von q und dann true zurück. 1368 01:05:55,250 --> 01:05:58,690 Aber wenn q voll ist oder negativ, die Funktion sollte anstelle return false. 1369 01:05:58,690 --> 01:06:01,060 Und wir gaben Sie ein paar von Annahmen. 1370 01:06:01,060 --> 01:06:04,320 Aber es sind nicht wirklich funktional relevant ist, existiert nur, dass bool, 1371 01:06:04,320 --> 01:06:06,690 weil technisch nicht tut bool gibt es in C sei denn, Sie sind ein 1372 01:06:06,690 --> 01:06:07,310 bestimmte Header-Datei. 1373 01:06:07,310 --> 01:06:09,350 So, dass war nur sicherstellen, dass es wurden nicht ist das ein Trick 1374 01:06:09,350 --> 01:06:10,940 Frage Art der Sache. 1375 01:06:10,940 --> 01:06:16,280 >> So Enqueue, in der Probe haben wir vorgeschlagen, Lösungen wie folgt realisieren. 1376 01:06:16,280 --> 01:06:20,420 Eins, prüfen wir zuerst die Leichtigkeit, die niedrig hängenden Früchte. 1377 01:06:20,420 --> 01:06:23,820 Wenn die Warteschlange voll ist oder die Zahl, die Sie versuchen zu legen sind weniger 1378 01:06:23,820 --> 01:06:26,380 als Null ist, die wir in die besagte Spezifikation des Problems sollte 1379 01:06:26,380 --> 01:06:30,320 nicht erlaubt sein, denn wir wollen nur nicht-negative Werte, dann sollten Sie 1380 01:06:30,320 --> 01:06:31,640 nur sofort false zurück. 1381 01:06:31,640 --> 01:06:33,820 So einige relativ einfach Fehlerprüfung. 1382 01:06:33,820 --> 01:06:38,720 Wenn Sie aber, dass die tatsächlichen hinzufügen möchten Nummer, um ein wenig zu tun hatten Sie 1383 01:06:38,720 --> 01:06:39,440 Denken Sie hier. 1384 01:06:39,440 --> 01:06:41,330 Und das ist, wo es ein wenig ärgerlich mental, weil man 1385 01:06:41,330 --> 01:06:43,000 herauszufinden, wie man Rundum behandeln. 1386 01:06:43,000 --> 01:06:46,870 >> Aber der Keim der Idee hier ist, dass der Interesse für uns ist, dass Rundum- 1387 01:06:46,870 --> 01:06:51,480 oft bedeutet, modulare Arithmetik und die Mod-Betreiber, die Seiten Prozent, 1388 01:06:51,480 --> 01:06:55,140 wo Sie von einem größeren Wert gehen zurück auf Null und dann eins und zwei und 1389 01:06:55,140 --> 01:06:58,650 drei und dann wieder um auf Null, eins und zwei und drei und so weiter 1390 01:06:58,650 --> 01:06:59,380 wieder. 1391 01:06:59,380 --> 01:07:02,880 So schlagen wir vor, die Art und Weise, dies zu tun ist dass wir indizieren sollen in die 1392 01:07:02,880 --> 01:07:05,850 Array namens Zahlen, bei denen unsere Zahlen liegen. 1393 01:07:05,850 --> 01:07:10,740 Aber um dorthin zu kommen, wollen wir zuerst zu tun was auch immer die Größe der Warteschlange ist aber 1394 01:07:10,740 --> 01:07:14,080 dann hinzufügen, dass unabhängig von der vorne auf der Liste steht. 1395 01:07:14,080 --> 01:07:17,880 Und die Wirkung davon ist, mit uns setzen die richtige Position in der Warteschlange und 1396 01:07:17,880 --> 01:07:20,970 nicht davon ausgehen, dass die erste Person in der Schlange ist am Anfang, was er oder 1397 01:07:20,970 --> 01:07:24,130 sie konnte absolut sein, wenn wir wurden ebenfalls verlagert alle. 1398 01:07:24,130 --> 01:07:26,710 Aber wir sind nur die Schaffung von Arbeit für uns selbst, wenn wir nahmen 1399 01:07:26,710 --> 01:07:27,800 dass bestimmten Weg. 1400 01:07:27,800 --> 01:07:29,330 >> So können wir es relativ einfach zu halten. 1401 01:07:29,330 --> 01:07:32,180 Wir müssen bedenken, dass wir gerade fügte eine int in der Warteschlange. 1402 01:07:32,180 --> 01:07:35,850 Und dann haben wir nur true zurück. 1403 01:07:35,850 --> 01:07:38,560 Inzwischen in dequeue, fragten wir Sie folgendes tun. 1404 01:07:38,560 --> 01:07:42,260 Umsetzung in einer Weise, dass es aus der Warteschlange entfernt, also entfernt und zurückgegeben, 1405 01:07:42,260 --> 01:07:44,190 INT an der Vorderseite Warteschlange. 1406 01:07:44,190 --> 01:07:46,410 Um den int zu entfernen, genügt es, zu vergessen. 1407 01:07:46,410 --> 01:07:47,650 Sie brauchen nicht zu sein Bit überschreiben. 1408 01:07:47,650 --> 01:07:48,820 Also ist es eigentlich noch gibt. 1409 01:07:48,820 --> 01:07:51,930 So wie Daten auf einer Festplatte, wir sind nur ignorieren die Tatsache, 1410 01:07:51,930 --> 01:07:52,970 dass es jetzt dort. 1411 01:07:52,970 --> 01:07:55,520 Und wenn q leer ist, sollten wir stattdessen zurückgeben negativ ein. 1412 01:07:55,520 --> 01:07:56,750 Also das fühlt sich willkürlich. 1413 01:07:56,750 --> 01:08:01,640 Warum zurück minus 1 statt falsch? 1414 01:08:01,640 --> 01:08:02,620 Ja. 1415 01:08:02,620 --> 01:08:05,070 >> ZIELGRUPPE: Q ist die Speicherung positive Werte. 1416 01:08:05,070 --> 01:08:10,950 Da Sie nur positive Werte speichern in der q, negativ ist ein Fehler aufgetreten. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. MALAN: OK, stimmt. 1418 01:08:11,510 --> 01:08:14,850 Also, weil wir nur positive Speicherung Werte oder Null ist, dann ist es in Ordnung, 1419 01:08:14,850 --> 01:08:18,050 Rückkehr einen negativen Wert wie ein Wächter Wert, ein spezielles Symbol. 1420 01:08:18,050 --> 01:08:21,630 Aber du bist Umschreiben der Geschichte gibt, weil der Grund, nur wir sind 1421 01:08:21,630 --> 01:08:25,890 Rückkehr nicht-negative Werte Denn wir wollen 1422 01:08:25,890 --> 01:08:27,670 haben eine Sentinelwert. 1423 01:08:27,670 --> 01:08:32,617 Also genauer gesagt, warum nicht einfach Rückkehr in Fällen von Fehlern falsch? 1424 01:08:32,617 --> 01:08:33,099 Ja. 1425 01:08:33,099 --> 01:08:35,510 >> ZIELGRUPPE: Sie haben versagt um eine ganze Zahl zurück. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. MALAN: Genau. 1427 01:08:36,630 --> 01:08:38,569 Und das ist, wo C bekommt ziemlich Zwangs. 1428 01:08:38,569 --> 01:08:40,590 Wenn Sie sagen, Sie gehen um einen int zurück, Sie haben 1429 01:08:40,590 --> 01:08:41,279 um einen int zurück. 1430 01:08:41,279 --> 01:08:43,689 Sie können nicht schick und beginnen Rückkehr ein bool oder ein Schwimmer oder ein 1431 01:08:43,689 --> 01:08:45,040 String oder so ähnlich. 1432 01:08:45,040 --> 01:08:49,370 Nun, mittlerweile, JavaScript und PHP und einige andere Sprachen können in der Tat, 1433 01:08:49,370 --> 01:08:51,310 Sie haben verschiedene Rück Arten von Werten. 1434 01:08:51,310 --> 01:08:54,819 Und das kann wirklich nützlich sein, wo Sie könnten positive Ganzzahlen, Nullstellen zurückkehren, 1435 01:08:54,819 --> 01:08:59,439 ints negativen oder falsch oder null sogar Fehler zu bedeuten. 1436 01:08:59,439 --> 01:09:01,890 Aber wir haben das nicht Vielseitigkeit in C. 1437 01:09:01,890 --> 01:09:04,569 >> Also mit dequeue, was wir vorschlagen zu tun ist - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Sie können false zurück. 1440 01:09:09,830 --> 01:09:13,189 Es ist nur so, dass falsch ist Hash definieren falsche Null. 1441 01:09:13,189 --> 01:09:16,000 Also, wenn Sie false zurück, Sie zurück Null sind. 1442 01:09:16,000 --> 01:09:25,470 Und Null ist ein gültiger, was in unserem Warteschlange während negative 1 ist nicht, ob 1443 01:09:25,470 --> 01:09:27,000 falsche passiert negative 1 sein. 1444 01:09:27,000 --> 01:09:29,972 Man sollte aber auch nicht brauchen, um das zu wissen. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. MALAN: Das ist warum ich es nicht sagen. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: Aber es war nicht wahr dass man nicht false zurück. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. MALAN: Sicher. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 So dequeue, bemerken wir akzeptieren Erlöschen als Argument. 1450 01:09:44,240 --> 01:09:45,479 Und das ist, weil wir nicht Durch nichts in. 1451 01:09:45,479 --> 01:09:48,359 Wir wollen einfach nur, um das Element zu entfernen an der Vorderseite der Warteschlange. 1452 01:09:48,359 --> 01:09:49,819 Also, wie können wir dabei vorgehen? 1453 01:09:49,819 --> 01:09:51,290 Nun, zunächst wollen wir dies tun schnelle Plausibilitätsprüfung. 1454 01:09:51,290 --> 01:09:53,350 Wenn die Queue-Größe 0 ist, gibt es keine Arbeit zu tun. 1455 01:09:53,350 --> 01:09:54,210 Zurück negativ ein. 1456 01:09:54,210 --> 01:09:54,800 Fertig. 1457 01:09:54,800 --> 01:09:56,340 Also das ist ein paar Zeilen von meinem Programm. 1458 01:09:56,340 --> 01:09:58,180 So bleiben nur vier Zeilen. 1459 01:09:58,180 --> 01:10:01,310 >> So, hier habe sich entscheiden, verringern die Größe. 1460 01:10:01,310 --> 01:10:04,620 Und effektiv Verringern der Größe bedeutet, dass ich vergessen habe 1461 01:10:04,620 --> 01:10:06,010 etwas drin. 1462 01:10:06,010 --> 01:10:09,910 Aber ich habe auch zu aktualisieren, wo die vor den Zahlen sind. 1463 01:10:09,910 --> 01:10:11,620 So, das zu tun, muss ich zwei Dinge tun. 1464 01:10:11,620 --> 01:10:16,390 Muss ich erst einmal, was die Anzahl erinnern ist an der Vorderseite der Warteschlange, 1465 01:10:16,390 --> 01:10:17,860 , weil ich das Ding zurück. 1466 01:10:17,860 --> 01:10:20,910 Also ich möchte nicht versehentlich vergessen über sie und dann überschreiben. 1467 01:10:20,910 --> 01:10:22,840 Ich werde einfach in einen int erinnern. 1468 01:10:22,840 --> 01:10:27,310 >> Und jetzt möchte ich aktualisieren q.front zu q.front eins werden. 1469 01:10:27,310 --> 01:10:30,070 Also, wenn dieser die erste Person in war Linie, nun, ich möchte plus 1 zu tun 1470 01:10:30,070 --> 01:10:31,930 weisen auf die nächste Person in der Schlange. 1471 01:10:31,930 --> 01:10:33,420 Aber ich muss diese Rundum behandeln. 1472 01:10:33,420 --> 01:10:37,270 Und wenn die Kapazität ist eine globale Konstante, das wird mir zu erlauben, stellen Sie sicher, 1473 01:10:37,270 --> 01:10:41,140 als ich auf die letzte Person in Zeile, wird die Modulo-Operation bringen 1474 01:10:41,140 --> 01:10:43,840 mich zurück auf Null bei der Anfang der Warteschlange. 1475 01:10:43,840 --> 01:10:46,050 Und das übernimmt die Rundum hier. 1476 01:10:46,050 --> 01:10:48,950 Und dann gehe ich auf n zurück. 1477 01:10:48,950 --> 01:10:51,530 >> Nun, genau genommen, habe ich nicht müssen n erklären. 1478 01:10:51,530 --> 01:10:53,880 Ich wusste nicht, um es zu packen und speichern vorübergehend, da der Wert 1479 01:10:53,880 --> 01:10:54,740 immer noch da. 1480 01:10:54,740 --> 01:10:57,490 So konnte ich genau die richtige Arithmetik um den ehemaligen Chef zurück 1481 01:10:57,490 --> 01:10:58,450 der Warteschlange. 1482 01:10:58,450 --> 01:11:01,850 Aber ich fühlte mich nur, dass dies mehr klar tatsächlich greifen die int, legte es 1483 01:11:01,850 --> 01:11:04,320 n, und dann wieder, dass der Übersichtlichkeit halber aber 1484 01:11:04,320 --> 01:11:05,735 nicht unbedingt notwendig. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psst. 1487 01:11:12,130 --> 01:11:13,410 Sie sind alle aussprechbar in meinem Kopf. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: Also erste Frage der binäre Baum Problem. 1490 01:11:19,110 --> 01:11:22,140 Also erste Frage ist, sind wir unter diesen Zahlen. 1491 01:11:22,140 --> 01:11:27,160 Und wir irgendwie in sie einfügen wollen Diese Knoten, so dass es ein 1492 01:11:27,160 --> 01:11:30,110 gültig binären Suchbaum. 1493 01:11:30,110 --> 01:11:36,260 So ist die eine Sache, über erinnern binäre Suchbäume ist, dass es nicht 1494 01:11:36,260 --> 01:11:39,800 nur, dass die Sache auf der linken Seite ist geringer und die Sache 1495 01:11:39,800 --> 01:11:41,120 die rechte ist größer. 1496 01:11:41,120 --> 01:11:44,580 Es sein muss, dass die gesamte Struktur auf Links ist weniger und die gesamte Baum 1497 01:11:44,580 --> 01:11:45,740 nach rechts größer. 1498 01:11:45,740 --> 01:11:55,260 >> Also, wenn ich hier 34 an der Spitze, und dann Ich habe hier 20, das ist also gültig, 1499 01:11:55,260 --> 01:11:56,970 weit, weil 34 hier oben. 1500 01:11:56,970 --> 01:11:57,920 20 nach links gehen. 1501 01:11:57,920 --> 01:11:58,950 Also das ist, weniger. 1502 01:11:58,950 --> 01:12:03,640 Aber ich kann nicht dann setzen hier 59, weil obwohl 59 ist auf der rechten Seite von 20, 1503 01:12:03,640 --> 01:12:06,140 es ist immer noch auf der linken Seite der 34. 1504 01:12:06,140 --> 01:12:10,760 Also mit dieser Einschränkung im Hinterkopf, die einfachste Weg, wahrscheinlich die Lösung dieses 1505 01:12:10,760 --> 01:12:14,330 Problem ist es einfach irgendwie dieser Zahlen - 1506 01:12:14,330 --> 01:12:18,720 so 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Und dann legen Sie die von links nach rechts. 1508 01:12:21,640 --> 01:12:23,390 >> Also 20 geht hier. 1509 01:12:23,390 --> 01:12:24,630 34 geht hier. 1510 01:12:24,630 --> 01:12:25,830 36 geht hier. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 Und könnte man auch mit gefunden haben, einige einstecken und zu realisieren, 1513 01:12:34,730 --> 01:12:38,830 oh, warte, ich habe nicht genug Zahlen haben , dies in hier zu füllen. 1514 01:12:38,830 --> 01:12:42,170 Also muss ich, was meine reshift Route Note sein wird. 1515 01:12:42,170 --> 01:12:47,490 Aber beachten Sie, dass in der letzten drei, wenn Sie lesen von links nach rechts, ist es in 1516 01:12:47,490 --> 01:12:48,740 teigender Reihenfolge. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> So, jetzt wollen wir zu erklären, was die Struktur wird für die sein 1519 01:12:56,540 --> 01:12:58,300 Knoten in diesem Baum. 1520 01:12:58,300 --> 01:13:02,720 So was brauchen wir in einem binären Baum? 1521 01:13:02,720 --> 01:13:05,830 Einen Wert vom Typ So haben wir int, so dass einige int-Wert. 1522 01:13:05,830 --> 01:13:07,220 Ich weiß nicht, was wir als es in der Lösung - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Wir brauchen einen Zeiger auf den linken Tochter und ein Zeiger auf das rechte Kind. 1525 01:13:13,570 --> 01:13:17,540 Also, es wird so aussehen. 1526 01:13:17,540 --> 01:13:20,510 Und es wird tatsächlich vor aussehen wann haben die doppelt verknüpfte 1527 01:13:20,510 --> 01:13:25,090 Liste stuff, so Bekanntmachung - 1528 01:13:25,090 --> 01:13:27,860 Ich werde scrollen, um alle die Weg zurück zu Problem 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> So merkt es gleich aussieht, außer wir nur zufällig diese nennen 1531 01:13:36,390 --> 01:13:38,590 unterschiedliche Namen. 1532 01:13:38,590 --> 01:13:41,440 Wir haben noch eine ganze Zahl Wert und zwei Zeigern. 1533 01:13:41,440 --> 01:13:44,850 Es ist nur so, dass anstelle der Behandlung der Zeiger als Hinweis auf die nächste, was 1534 01:13:44,850 --> 01:13:47,955 und die vorherige Sache, wir behandeln die Zeiger auf den linken Nachfolger zeigen 1535 01:13:47,955 --> 01:13:49,205 und rechte Kind. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 Also das ist unsere Struktur-Knoten. 1539 01:13:59,650 --> 01:14:03,920 Und nun, die einzige Funktion, die wir brauchen, um Umsetzung dafür ist, Traverse, die 1540 01:14:03,920 --> 01:14:08,320 wir über den Baum-, Druck gehen wollen aus den Werten der Baum in Ordnung. 1541 01:14:08,320 --> 01:14:15,241 >> So suchen Sie hier, würden wir drucken möchten aus 20, 34, 36, 52, 59 und 106. 1542 01:14:15,241 --> 01:14:17,970 Wie erreichen wir das? 1543 01:14:17,970 --> 01:14:18,890 So ist es ziemlich ähnlich. 1544 01:14:18,890 --> 01:14:22,910 Wenn Sie in der Vergangenheit Prüfung sah das Problem dass Sie ausdrucken wollte 1545 01:14:22,910 --> 01:14:25,940 der ganze Baum mit Komma zwischen alles, war es eigentlich auch 1546 01:14:25,940 --> 01:14:27,320 einfacher. 1547 01:14:27,320 --> 01:14:30,950 So, hier ist die Lösung. 1548 01:14:30,950 --> 01:14:33,110 Das war wesentlich einfacher wenn du es getan hast rekursiv. 1549 01:14:33,110 --> 01:14:36,650 Ich weiß nicht, ob jemand versucht, es iterativ zu tun. 1550 01:14:36,650 --> 01:14:38,340 >> Aber zuerst müssen wir unsere Basisfall. 1551 01:14:38,340 --> 01:14:39,660 Was ist, wenn die Wurzel ist null? 1552 01:14:39,660 --> 01:14:40,610 Dann sind wir nur gehen, um zurückzukehren. 1553 01:14:40,610 --> 01:14:42,300 Wir wollen nicht, etwas zu drucken. 1554 01:14:42,300 --> 01:14:45,940 Else, wir werden durchqueren rekursiv nach unten. 1555 01:14:45,940 --> 01:14:48,140 Drucken Sie die gesamte linke Unterbaum. 1556 01:14:48,140 --> 01:14:51,440 Also alles weniger zu drucken als meine aktuellen Wert. 1557 01:14:51,440 --> 01:14:53,930 Und dann werde ich mich selbst zu drucken. 1558 01:14:53,930 --> 01:14:57,310 Und dann werde ich meine rekursiv gesamten rechten Unterbaum, so dass alles 1559 01:14:57,310 --> 01:14:58,810 größer als mein Wert. 1560 01:14:58,810 --> 01:15:03,870 Und das wird gedruckt alles in Ordnung. 1561 01:15:03,870 --> 01:15:05,860 Fragen wie diese tatsächlich führt das? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> ZIELGRUPPE: Ich habe eine Frage auf die [unverständlich]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: So ein Weg der Annäherung keine rekursiven Problem ist, man denke nur an 1566 01:15:23,550 --> 01:15:26,275 darüber mag man denken, über all die Grenzfälle. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 So betrachten, dass wir wollen Drucken Sie sich dieses ganze Baum. 1569 01:15:38,110 --> 01:15:42,030 Also alles, werden wir den Schwerpunkt auf ist dies insbesondere Knoten - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Die rekursive Aufrufe, so tun wir die, die gerade arbeiten. 1572 01:15:47,420 --> 01:15:54,000 So, hier, dieses rekursiven Aufruf Traverse, die wir ohne darüber nachzudenken 1573 01:15:54,000 --> 01:15:58,640 über sie, nur Durchlaufen des linken drei, sich vorstellen, dass bereits 20 druckt 1574 01:15:58,640 --> 01:16:00,730 und 34 für uns. 1575 01:16:00,730 --> 01:16:03,350 Und dann, wenn wir irgendwann rekursiv rufen Traverse auf die 1576 01:16:03,350 --> 01:16:07,890 rechts, das wird richtig gedruckt 52, 59 und 106 us. 1577 01:16:07,890 --> 01:16:13,620 >> Also da kann 20, 34 zu drucken, und die anderen können drucken, 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 alles, was wir brauchen, um in der Lage zu tun ist Druck uns selbst in der Mitte davon. 1579 01:16:17,180 --> 01:16:21,250 So drucken Sie alles, was vor uns liegt. 1580 01:16:21,250 --> 01:16:27,710 Drucken Sie uns selbst, so der aktuelle Knoten Druck 36, regelmäßige printf und dann 1581 01:16:27,710 --> 01:16:31,170 drucken alles, was uns nach. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. MALAN: Hier Rekursion wird wirklich schön. 1583 01:16:32,730 --> 01:16:36,270 Es ist diese erstaunliche Sprung des Glaubens, wo Sie das kleinste bisschen Arbeit zu tun. 1584 01:16:36,270 --> 01:16:38,460 Und dann lassen Sie jemand sonst den Rest erledigen. 1585 01:16:38,460 --> 01:16:40,180 Und dass jemand anderes ist ironischer Sie. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Also für schwere Pluspunkte, wenn Sie blättern in den Fragen - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: Auf die Fragen? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. MALAN: Und ein wenig nach unten zu die Zahlen, weiß jemand, wo 1590 01:16:53,490 --> 01:16:55,190 diese Zahlen her? 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: Ich habe buchstäblich keine Ahnung. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. MALAN: Sie erscheinen während des Quiz. 1593 01:16:59,794 --> 01:17:01,150 >> ZIELGRUPPE: Sind sie die gleichen Zahlen? 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. MALAN: Diese Zahlen. 1595 01:17:01,910 --> 01:17:03,260 Ein kleines Osterei. 1596 01:17:03,260 --> 01:17:08,100 Also für diejenigen unter Ihnen, Online-Beobachtung an Hause, wenn Sie uns per E-Mail zu sagen, 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net, was die Bedeutung Diese wiederkehrenden von sechs Zahlen sind 1598 01:17:12,680 --> 01:17:18,560 während ein Quiz, werden wir Sie Dusche mit erstaunlicher Aufmerksamkeit in der letzten 1599 01:17:18,560 --> 01:17:21,610 Vortrag und ein Stress-Ball. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Nice, subtil. 1602 01:17:27,790 --> 01:17:29,570 >> ROB BOWDEN: Irgendwelche letzten Fragen über alles, was auf dem Quiz? 1603 01:17:29,570 --> 01:17:32,608