1 00:00:00,000 --> 00:00:02,270 >> [Review: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] 3 00:00:04,620 --> 00:00:07,660 [Dies ist CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Willkommen alle. Dies ist eine Bewertung für ein Quiz. 5 00:00:11,610 --> 00:00:15,040 So wie ein Haftungsausschluss, das ist - ich meine, wir werden versuchen zu vertuschen 6 00:00:15,040 --> 00:00:17,770 so viel Material wie möglich, aber das bedeutet nicht, dass 7 00:00:17,770 --> 00:00:20,780 wir werden all die Dinge, die in ein Quiz sein kann, zu decken. 8 00:00:20,780 --> 00:00:25,270 So werden Sie sicher, dass Sie auch einen Blick auf Vortrag, Schnitte, alles, was Sie können. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 wird am Mittwoch, den nächsten Mittwoch. 10 00:00:28,240 --> 00:00:33,800 So sicher sein, um zu studieren. Es wird sein, so ziemlich, wie das erste Quiz 11 00:00:33,800 --> 00:00:36,390 in Bezug auf sein Format, aber es ist wahrscheinlich zu sein, viel schwieriger. 12 00:00:36,390 --> 00:00:39,600 Zumindest als ich 50 im letzten Jahr, dachte ich, es war viel schwerer. 13 00:00:39,600 --> 00:00:42,410 So lernen eine Menge. 14 00:00:42,410 --> 00:00:45,190 >> Ich werde Datenstrukturen decken und Huffman-Kodierung. 15 00:00:45,190 --> 00:00:47,910 Dies ist etwas, das eine Menge Leute denken, ist komplex, 16 00:00:47,910 --> 00:00:51,930 aber ich werde versuchen, es so einfach wie möglich zu machen. 17 00:00:51,930 --> 00:00:56,330 Vor allem, was wir wollen euch für ein Quiz wissen, ist, 18 00:00:56,330 --> 00:01:00,970 verstehen die konzeptionellen Beschreibungen der einzelnen Datenstrukturen, die werde ich präsentieren. 19 00:01:00,970 --> 00:01:03,960 Das bedeutet, dass Sie nicht haben, um tatsächlich 20 00:01:03,960 --> 00:01:07,020 Implementierung einer Hash-Tabelle in Ihr Quiz ein. 21 00:01:07,020 --> 00:01:10,250 Wir wollen nicht, dass Sie eine ganze Hash-Tabelle zu implementieren, vielleicht werden wir versuchen 22 00:01:10,250 --> 00:01:13,090 um Ihnen einige Funktionen zu implementieren, 23 00:01:13,090 --> 00:01:16,940 die häufigsten Operationen, aber wir werden nicht gehen, dass Sie alles umzusetzen. 24 00:01:16,940 --> 00:01:21,010 Also ist es wichtig, dass Sie das Konzept hinter jeder Datenstruktur verstehen 25 00:01:21,010 --> 00:01:23,510 und auch, dass Sie in der Lage, in C-Code sind, 26 00:01:23,510 --> 00:01:27,880 nur die häufigsten Operationen, die sie für jede Datenstruktur aufweisen. 27 00:01:27,880 --> 00:01:30,090 Und auch in der Lage, Zeiger und Strukturen überprüft werden, 28 00:01:30,090 --> 00:01:33,470 erscheinen, weil sie eine Menge in diesen Strukturen. 29 00:01:33,470 --> 00:01:37,380 >> Erstes, verkettete Listen. Verkettete Listen sind eigentlich sehr ähnlich wie Arrays, 30 00:01:37,380 --> 00:01:39,930 aber der Unterschied zwischen einer verknüpften Liste und einem Array, 31 00:01:39,930 --> 00:01:45,160 Zuallererst ist, daß eine verknüpfte Liste eine sehr flexible Größe, 32 00:01:45,160 --> 00:01:50,060 während in Arrays muss man entweder einen sehr großen Größe für das Array, 33 00:01:50,060 --> 00:01:53,710 so wissen Sie, dass Sie in der Lage, alle Ihre Daten in diesem Array zu speichern sind, 34 00:01:53,710 --> 00:01:59,370 oder Sie müssen malloc verwenden, um eine flexible Länge von Array. 35 00:01:59,370 --> 00:02:03,680 In verkettete Listen, es ist sehr einfach, nur bekommen mehr Elemente, 36 00:02:03,680 --> 00:02:07,210 setzen mehr Elemente in der Liste zu entfernen oder Elemente. 37 00:02:07,210 --> 00:02:09,370 Und tatsächlich, wenn Sie nicht wollen, dass die verknüpfte Liste, die sortiert werden, 38 00:02:09,370 --> 00:02:13,950 Sie suchen und entfernen Elemente in konstanter Zeit, 39 00:02:13,950 --> 00:02:16,800 so O (1) Zeit, so ist es sehr bequem. 40 00:02:16,800 --> 00:02:20,660 Sie müssen nur darauf achten, immer daran denken, malloc und free die Knoten, 41 00:02:20,660 --> 00:02:25,510 nur weil, wenn Sie nicht tun, werden Sie Speicherlecks haben. 42 00:02:25,510 --> 00:02:31,480 So verknüpften Listen - die Definition eines Knotens ist wie das, was wir haben recht. 43 00:02:31,480 --> 00:02:35,110 Ich habe int n, aber Sie alle Daten, die Sie wollen speichern kann. 44 00:02:35,110 --> 00:02:37,280 Also, wenn Sie einen String speichern wollen, ist es in Ordnung. 45 00:02:37,280 --> 00:02:41,690 Wenn Sie eine Struktur speichern möchten, ist es gut, ein Doppelzimmer, was Sie wollen. 46 00:02:41,690 --> 00:02:44,630 Ich habe nur int n für die Beispiele hier. 47 00:02:44,630 --> 00:02:46,800 Und man hat einen Zeiger auf den nächsten Knoten. 48 00:02:46,800 --> 00:02:51,940 Also, im Grunde eine verbundene Liste hat einige Daten, und dann an den nächsten Knoten zeigt es. 49 00:02:51,940 --> 00:02:56,710 Wenn es das letzte Element in der verketteten Liste, es wird darauf auf NULL. 50 00:02:56,710 --> 00:02:59,060 Also das ist ein Beispiel für eine verkettete Liste. 51 00:02:59,250 --> 00:03:05,960 >> Okay, jetzt mal sehen, was wir tun sollen, wenn ich ein Element in einer verketteten Liste einfügen lassen. 52 00:03:05,960 --> 00:03:08,810 Zunächst wird eine Funktionseinsatz vom Typ void sein 53 00:03:08,810 --> 00:03:11,350 weil ich nicht wollen, etwas zurückzugeben. 54 00:03:11,350 --> 00:03:14,200 Und ich werde einen int als Argument zu nehmen, 55 00:03:14,200 --> 00:03:17,090 weil ich weiß, was ich will einfügen. 56 00:03:17,090 --> 00:03:21,840 Also, was ist das erste, was ich tun soll? Nun, sollte ich auf newNode malloc, 57 00:03:21,840 --> 00:03:24,240 damit ist die erste Zeile. 58 00:03:24,240 --> 00:03:27,580 Ich bin nur die Schaffung eines neuen Knoten in einer verknüpften Liste setzen. 59 00:03:27,580 --> 00:03:32,360 Also, was kann ich tun? Nun, wir wissen, dass in unserer Implementierungen der verbundenen Listen 60 00:03:32,360 --> 00:03:38,180 in der Klasse stellen wir stets den Kopf wie eine globale Variable. 61 00:03:38,180 --> 00:03:41,800 Also, was wir tun können, ist die Veränderung der Kopf. 62 00:03:41,800 --> 00:03:44,300 Ich kann diesen neuen Knoten der neue Kopf, 63 00:03:44,300 --> 00:03:46,670 und es wird, um zur vorherigen Kopf zeigen. 64 00:03:46,670 --> 00:03:50,390 Wie können wir das tun? Das erste, was ich zu tun habe 65 00:03:50,390 --> 00:03:54,770 ist die Veränderung der "n" in den neuen Knoten, um den Wert, 66 00:03:54,770 --> 00:03:57,530 , die an die Funktion übergeben wurde. 67 00:03:57,530 --> 00:04:01,050 Dann ist newNode nächsten wird sich der Kopf sein. 68 00:04:01,050 --> 00:04:05,800 Der Kopf wird zu newNode werden. So ist es ziemlich einfach. 69 00:04:05,800 --> 00:04:10,090 Zum Löschen eines Knotens, können wir es tun, wie - 70 00:04:10,090 --> 00:04:14,790 Eine Möglichkeit könnten wir tun, ist zu sagen, 71 00:04:14,790 --> 00:04:18,160 okay, wenn ich wollte, zu löschen, beispielsweise 3, 72 00:04:18,160 --> 00:04:24,850 was ich tun könnte, ist nur darauf den vorherigen Knoten 73 00:04:24,850 --> 00:04:27,580 an den nächsten Knoten aus 3. 74 00:04:27,580 --> 00:04:29,400 Also würde ich nur so etwas tun. 75 00:04:29,400 --> 00:04:33,400 Aber was ist das Problem dabei, dass? 76 00:04:33,400 --> 00:04:37,400 Ich habe ein Speicherleck, so dass ich keinen Zugang zu der Nummer 3 nicht mehr. 77 00:04:37,400 --> 00:04:42,480 Das Problem dabei ist, dass ich nicht in der Lage, um diesen Knoten zu befreien. 78 00:04:42,480 --> 00:04:45,360 Ich bin zu haben, Speicherverlust und (unverständlich) wird mich hassen. 79 00:04:45,360 --> 00:04:49,370 Also anstatt das zu tun, dass, sollte ich wahrscheinlich eine temporäre Zeiger. 80 00:04:49,370 --> 00:04:53,210 Also habe ich Temperatur. Es wird sich mit dem Knoten, das möchte ich darauf hinweisen löschen. 81 00:04:53,210 --> 00:04:58,170 Und dann kann ich die vorherigen Knoten Punkt zum nächsten Knoten verschieben 82 00:04:58,170 --> 00:05:00,390 des Knotens, das möchte ich löschen. 83 00:05:00,390 --> 00:05:02,730 Und schließlich kann ich den Zeiger zu befreien. 84 00:05:02,730 --> 00:05:07,480 Muss ich, um den Zeiger, dass ich genau dort geschaffen zu befreien? 85 00:05:07,480 --> 00:05:09,560 Ich weiß nicht, nur weil - 86 00:05:09,560 --> 00:05:13,430 der Unterschied ist, dass dieser Knoten wurde mit malloc erstellt, 87 00:05:13,430 --> 00:05:17,280 so ist es in der Halde, während dieser wurde nur als eine NULL-Schalter im Stapel erklärt. 88 00:05:17,280 --> 00:05:20,000 Also ich weiß nicht, um es zu befreien. 89 00:05:20,000 --> 00:05:22,030 >> Ok. So, jetzt lassen Sie uns über Stapel zu sprechen. 90 00:05:22,030 --> 00:05:24,680 Stacks sind ziemlich eindeutig. 91 00:05:24,680 --> 00:05:29,540 Wir haben Stapel und Warteschlangen in der Klasse nur mit Arrays 92 00:05:29,540 --> 00:05:32,820 aber Sie sollten vertraut sein - man muss nur aufpassen 93 00:05:32,820 --> 00:05:40,740 dass Sie auch tun, Stapeln in Warteschlangen mit verknüpften Listen als gut. 94 00:05:40,740 --> 00:05:44,460 Also, wenn Sie ein Feld haben, was wäre ein Stapel sein? 95 00:05:44,460 --> 00:05:46,810 Ein Stapel erstens müssen eine Größe haben. 96 00:05:46,810 --> 00:05:49,950 Sie haben zu speichern, was die Größe des Stapels, die Sie jetzt haben. 97 00:05:49,950 --> 00:05:52,980 Und würde auch ein Array haben, in diesem Fall von Zahlen, 98 00:05:52,980 --> 00:05:55,120 aber wenn Sie wollen, kann es ein Array sein 99 00:05:55,120 --> 00:06:00,380 von Strings, ein Array von struct, alles, was Sie speichern möchten. 100 00:06:00,380 --> 00:06:03,240 Über dem Stapel: Der Unterschied zwischen einem Stapel und einer verknüpften Liste 101 00:06:03,240 --> 00:06:08,590 ist, dass in dem Stapel haben nur Zugang zu dem letzten Element, das in den Stapel gelegt wurde. 102 00:06:08,590 --> 00:06:11,770 Es ist zuletzt genannten, first out. 103 00:06:11,770 --> 00:06:15,090 Genau wie Sie einen Stapel von Schalen haben, 104 00:06:15,090 --> 00:06:17,670 wenn du ein Fach auf der Oberseite des Stapels, 105 00:06:17,670 --> 00:06:22,670 Sie müssen dieses Fach erst zu entfernen, um den Zugang zu den anderen Fächern haben. 106 00:06:22,670 --> 00:06:26,310 Es ist die gleiche Sache mit Stacks. 107 00:06:26,310 --> 00:06:31,220 Also, wenn ich will, zum Beispiel, fügen Sie ein Element auf einem Stapel, was soll ich tun? 108 00:06:31,220 --> 00:06:34,070 Es heißt schieben, und es ist ziemlich einfach. 109 00:06:34,070 --> 00:06:37,130 Das erste, was Sie tun müssen, ist zu überprüfen, ob die Größe des Stapels 110 00:06:37,130 --> 00:06:40,150 nicht größer oder gleich der Kapazität des Stapels. 111 00:06:40,150 --> 00:06:45,810 Denn wenn man schon auf voller Kapazität, kann man nichts mehr hinzufügen. 112 00:06:45,810 --> 00:06:51,140 Und dann, wenn nicht, müssen Sie nur noch das Element auf dem Stapel hinzufügen. 113 00:06:51,140 --> 00:06:54,530 Und schließlich, erhöhen Sie die Größe. So ist es ziemlich einfach. 114 00:06:54,530 --> 00:06:57,140 Also habe ich nur hinzufügen, die Nummer zwei. 115 00:06:57,140 --> 00:07:00,350 Und wenn ich bis Pop, was bedeutet, dass ich entfernen 116 00:07:00,350 --> 00:07:03,870 das letzte Element, das hinzugefügt wurde und den Wert des Elements, 117 00:07:03,870 --> 00:07:09,180 das erste, was ich überprüfen, ist, dass der Stapel nicht leer ist. 118 00:07:09,180 --> 00:07:11,510 Weil, wenn es leer ist, kann ich nichts zurück. 119 00:07:11,510 --> 00:07:14,820 In diesem Fall bin ich der Rückkehr -1. 120 00:07:14,820 --> 00:07:18,960 Ansonsten werde ich die Größe des spec verringern, 121 00:07:18,960 --> 00:07:22,510 und Rücknummern (s.size). 122 00:07:22,510 --> 00:07:27,230 Warum habe ich die Größe verringern und dann wieder s.size? 123 00:07:27,230 --> 00:07:30,930 Es ist, weil in diesem Fall hat das spec Größe 4, 124 00:07:30,930 --> 00:07:33,810 und ich möchte das vierte Element zurück, oder? 125 00:07:33,810 --> 00:07:36,030 Aber was ist der Index des vierten Elements? Drei. 126 00:07:36,030 --> 00:07:44,510 Da ich Größe - wird sich 3 sein kann, kann ich nur zurückgeben s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 weil es drei. So ist es nur der Index. 128 00:07:48,410 --> 00:07:50,380 Jetzt >> Warteschlangen. Warteschlangen sind so ziemlich das Gleiche. 129 00:07:50,380 --> 00:07:54,950 Der einzige Unterschied ist, dass anstelle der mit last in, first out, 130 00:07:54,950 --> 00:07:57,480 Sie haben first in, first out. 131 00:07:57,480 --> 00:07:59,460 Wahrscheinlich, wenn Sie darauf warten, zu einem Konzert gehen sind, 132 00:07:59,460 --> 00:08:04,260 Sie wäre nicht glücklich sein, wenn Sie einen Stapel statt einer Warteschlange hatte. 133 00:08:04,260 --> 00:08:07,730 Als der letzte, der kommen würde, die erste Person, um das Konzert zu betreten. 134 00:08:07,730 --> 00:08:09,760 Sie würden wahrscheinlich nicht glücklich sein. 135 00:08:09,760 --> 00:08:15,020 In der Warteschlange, ist die erste Person, in erhalten auch die erste Person, um aus. 136 00:08:15,020 --> 00:08:18,720 So in der Definition von einer Warteschlange, neben der Größe des Arrays, 137 00:08:18,720 --> 00:08:23,360 Sie haben auch, um den Kopf, die der Index auf den Kopf des Stapels ist zu haben. 138 00:08:23,360 --> 00:08:29,000 Also das erste Element jetzt. 139 00:08:29,000 --> 00:08:32,710 Enqueue ist das gleiche wie Push für Stacks. 140 00:08:32,710 --> 00:08:34,980 Wenn Sie sehr naiv wäre, würde man nur sagen, 141 00:08:34,980 --> 00:08:39,289 Nun, ich kann nur tun, genau das gleiche wie ich für Push taten. 142 00:08:39,289 --> 00:08:44,030 Ich kann einfach überprüfen, wenn es nicht über die Kapazität. 143 00:08:44,030 --> 00:08:48,760 Wenn es ist, ich wieder falsch, sonst kann ich nur den neuen Wert zu exportieren 144 00:08:48,760 --> 00:08:50,630 und dann erhöhen Sie die Größe. 145 00:08:50,630 --> 00:08:52,750 Aber warum ist das falsch? 146 00:08:52,750 --> 00:08:55,010 Mal sehen, dieses Beispiel. 147 00:08:55,010 --> 00:08:57,020 Ich versuche, ein paar Sachen in die Warteschlange, 148 00:08:57,020 --> 00:08:58,390 und dann werde ich aus der Warteschlange entfernt und in die Warteschlange. 149 00:08:58,390 --> 00:09:00,550 Es gibt eine Menge von Befehlen, aber es ist sehr einfach. 150 00:09:00,550 --> 00:09:04,790 Ich werde einreihen 5, so fügen Sie 5, und dann 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, und dann möchte ich etwas aus der Warteschlange entfernt, 152 00:09:09,310 --> 00:09:12,000 was bedeutet, dass ich gehe, um das erste Element entfernen. 153 00:09:12,000 --> 00:09:14,640 Also werde ich die Zahl 3 zu entfernen, oder? 154 00:09:14,640 --> 00:09:17,320 Das erste Element. Okay. 155 00:09:17,320 --> 00:09:21,450 Nun, wenn ich versuche, etwas anderes einzureihen, ist das, was wird passieren? 156 00:09:21,450 --> 00:09:24,290 Nach meiner Umsetzung, 157 00:09:24,290 --> 00:09:31,040 Ich wollte die nächste Nummer in der Index q.size setzen. 158 00:09:31,040 --> 00:09:35,140 In diesem Fall ist die Größe 8, 159 00:09:35,140 --> 00:09:38,640 so der Index 8 wird hier in der letzten Position sein. 160 00:09:38,640 --> 00:09:43,900 Wenn ich versuche, hier einreihen 1, würde ich das Überschreiben der letzten Position 161 00:09:43,900 --> 00:09:45,870 der Zahl 1, die völlig falsch ist. 162 00:09:45,870 --> 00:09:49,870 Was ich tun möchte, ist wickeln um und gehen Sie auf die erste Position. 163 00:09:49,870 --> 00:09:52,870 Vielleicht würden Sie nur sagen, gut, ich habe nur zu prüfen, 164 00:09:52,870 --> 00:09:55,600 wenn ich tatsächlich etwas gebracht dort. 165 00:09:55,600 --> 00:09:58,560 Wenn nicht, ich nur sagen, oh, das neue volle Kapazität 166 00:09:58,560 --> 00:10:02,010 ist eigentlich Kapazität - 1, und ein Element dort nicht stellen können. 167 00:10:02,010 --> 00:10:06,150 Aber was ist das Problem? Das Problem ist, dass, wenn ich einfach alles hier aus der Warteschlange entfernt 168 00:10:06,150 --> 00:10:08,240 und dann versuche ich noch etwas hinzufügen, wäre es nur sagen, 169 00:10:08,240 --> 00:10:11,210 gut, Sie waren voll ausgelastet, die 0 ist. 170 00:10:11,210 --> 00:10:13,620 So Warteschlange ist weg. 171 00:10:13,620 --> 00:10:16,990 Sie haben zu umschlingen, und ein Weg des Umwickeln 172 00:10:16,990 --> 00:10:22,040 Jungs, dass Sie in visionären und andere psets gelernt wurde mit mod. 173 00:10:22,040 --> 00:10:29,090 Sie können es zu Hause versuchen zu verstehen, warum Sie q.size + q.head tun 174 00:10:29,090 --> 00:10:31,080 mod Kapazität, aber wenn man hier zu überprüfen, 175 00:10:31,080 --> 00:10:34,760 können wir sehen, dass es funktioniert. 176 00:10:34,760 --> 00:10:37,760 So im letzten Beispiel, q.size war 8 177 00:10:37,760 --> 00:10:47,590 und der Kopf war ein, weil es diese Position hier der Reihe war. 178 00:10:47,590 --> 00:10:51,970 So wird es 8 + 1, 9 sein. Mod Leistung 9 würde 0 sein. 179 00:10:51,970 --> 00:10:56,640 Es würde dem Index 0 gehen. Wir werden in der richtigen Position sein. 180 00:10:56,640 --> 00:10:59,750 Und dann versuchen, die Warteschlange zu Hause. 181 00:10:59,750 --> 00:11:04,950 Einige wichtige Dinge: versuchen, den Unterschied zwischen einem Stapel und einer Warteschlange zu verstehen. 182 00:11:04,950 --> 00:11:11,620 Zu Hause versuchen, sehr vertraut mit der Umsetzung Enqueue, dequeue, Push-und Pop zu bekommen. 183 00:11:11,620 --> 00:11:16,560 Und auch, wenn Sie verstehen, würde jeder von ihnen. 184 00:11:16,560 --> 00:11:22,830 >> Also mal entspannen 10 Sekunden lang mit einem Bündel von Pokemons. 185 00:11:22,830 --> 00:11:26,080 Und nun zurück zu Datenstrukturen zu gehen. 186 00:11:26,080 --> 00:11:29,770 Hash-Tabellen. Eine Menge Leute hatten Angst, von Hash-Tabellen. 187 00:11:29,770 --> 00:11:33,650 Problem in Satz 6, Rechtschreibprüfung. 188 00:11:33,650 --> 00:11:35,980 Hash-Tabellen und versucht, eine Menge Leute bekommen Angst vor ihnen. 189 00:11:35,980 --> 00:11:38,540 Sie denken, sie sind so schwer zu verstehen. Ja? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problem Set 5. Problem >> Set 5, ja. Dank Rob. 191 00:11:41,490 --> 00:11:43,370 Ja. Sechs war Huff n 'Puff, ja. 192 00:11:43,370 --> 00:11:49,340 Problem 5 wurde eingestellt Rechtschreibprüfung, und man musste entweder eine Hash-Tabelle oder einen Versuch zu verwenden. 193 00:11:49,340 --> 00:11:55,360 Eine Menge Leute dachten, dass sie super schwer zu verstehen waren, aber sie sind eigentlich ziemlich einfach. 194 00:11:55,360 --> 00:12:01,290 Was ist eine Hash-Tabelle, im Grunde? Eine Hash-Tabelle ist eine Reihe von verknüpften Listen. 195 00:12:01,290 --> 00:12:06,730 Der einzige Unterschied zwischen einer Reihe und einer Hash-Tabelle 196 00:12:06,730 --> 00:12:09,730 ist, dass in der Hash-Tabelle, die Sie so etwas wie eine Hash-Funktion haben. 197 00:12:09,730 --> 00:12:12,080 Was ist eine Hash-Funktion? 198 00:12:12,080 --> 00:12:13,970 Ich weiß nicht, ob ihr können Sie hier lesen. 199 00:12:13,970 --> 00:12:16,090 Dies ist ein Beispiel einer Hash-Tabelle. 200 00:12:16,090 --> 00:12:19,220 So können Sie sehen, dass Sie ein Array mit 31 Elementen haben. 201 00:12:19,220 --> 00:12:22,440 Und was wir in einer Hash-Tabelle zu tun haben, ist eine Hash-Funktion 202 00:12:22,440 --> 00:12:26,660 das wird eine Schlüssel übersetzen, int jeweils zu einem Index. 203 00:12:26,660 --> 00:12:31,740 Wenn, zum Beispiel, wenn ich für B. Harrison wählen, 204 00:12:31,740 --> 00:12:34,190 Ich würde B. Harrison in meinem Hash-Funktionen setzen, 205 00:12:34,190 --> 00:12:36,960 und die Hash-Funktion würde 24 zurück. 206 00:12:36,960 --> 00:12:40,930 Also ich weiß, dass ich in 24 B. Harrison speichern. 207 00:12:40,930 --> 00:12:46,580 Also das ist der Unterschied zwischen nur mit einem Array und eine Hash-Tabelle. 208 00:12:46,580 --> 00:12:48,740 In der Hash-Tabelle finden Sie eine Funktion, die gehen, um Ihnen zu sagen haben 209 00:12:48,740 --> 00:12:54,740 wo die Daten, die Sie speichern möchten, speichern. 210 00:12:54,740 --> 00:12:57,040 Für die Hash-Funktion, Sie wollen für eine Hash-Funktion aussehen 211 00:12:57,040 --> 00:13:00,600 das ist deterministischen und gut verteilt. 212 00:13:00,600 --> 00:13:07,810 Wie Sie hier sehen können, sehen Sie, dass ein großer Teil der Daten, die ich zu speichern wollte, war tatsächlich 19 213 00:13:07,810 --> 00:13:12,470 anstelle von 31 und 30 und 29, die alle frei waren. 214 00:13:12,470 --> 00:13:16,920 Also die Hash-Funktion, die ich verwendete, war nicht sehr gut verteilt. 215 00:13:16,920 --> 00:13:20,710 Wenn wir sagen, gut verteilt, bedeutet dies, dass wir haben wollen, 216 00:13:20,710 --> 00:13:26,520 etwa wenigstens 1 oder 2 für jeden der - 217 00:13:26,520 --> 00:13:32,190 wie eine Differenz von 1 oder 2 für jeden der Indizes in den Arrays. 218 00:13:32,190 --> 00:13:43,950 Sie haben wollen, in etwa die gleiche Anzahl von Elementen in jeder verbundenen Liste in der Anordnung. 219 00:13:43,950 --> 00:13:48,600 Und es ist leicht zu überprüfen, ob sie gültig ist in der Hash-Tabelle, sehen Sie als Hash-Tabellen. 220 00:13:48,600 --> 00:13:51,770 Dann >> Bäumen. Dies ist ein Baum. 221 00:13:51,770 --> 00:13:56,400 Bäume in der Informatik sind aus irgendeinem Grund den Kopf. 222 00:13:56,400 --> 00:14:00,150 Also hier haben Sie die Wurzel des Baumes und dann die Blätter. 223 00:14:00,150 --> 00:14:05,630 Sie sollten nur wissen, die Nomenklatur für Eltern und Kind. 224 00:14:05,630 --> 00:14:12,880 Jeder Knoten hat seine Kinder, die die Knoten, die unterhalb des Mutter sind. 225 00:14:12,880 --> 00:14:19,660 Also, zum Beispiel 2 wird sich die Eltern für 3 und für das andere Kind gleich da, 226 00:14:19,660 --> 00:14:25,290 während 3 wird sich die Eltern für ein und die anderen Kinder, die dort sind, sein. 227 00:14:25,290 --> 00:14:29,990 Und 1 bis 3 wird das Kind zu sein, und so weiter. 228 00:14:29,990 --> 00:14:34,610 Wir haben etwas viel interessanter, eine so genannte binäre Suchbaum, 229 00:14:34,610 --> 00:14:39,040 bei dem alle Werte auf der rechten Seite des Knotens 230 00:14:39,040 --> 00:14:41,660 gehen, um auf der rechten Seite, genau hier - auf der rechten Seite 231 00:14:41,660 --> 00:14:46,780 gehen, größer als der in dem Wurzelelement zu sein. 232 00:14:46,780 --> 00:14:49,780 Also wenn ich die Zahl 5 hier alle Elemente auf der rechten 233 00:14:49,780 --> 00:14:51,940 gehen, größer als 5 ist, und auf der linken Seite 234 00:14:51,940 --> 00:14:56,770 alle Elemente gehen, um weniger als 5 sein. 235 00:14:56,770 --> 00:14:58,780 Warum ist das sinnvoll? 236 00:14:58,780 --> 00:15:01,660 Nun, wenn ich will, zu überprüfen, ob die Zahl 7 ist da, zum Beispiel, 237 00:15:01,660 --> 00:15:05,960 Ich habe gerade auf 5 zuerst gehen und ich werde sehen, sieben mehr oder weniger als 5? 238 00:15:05,960 --> 00:15:09,540 Es ist größer, so dass ich weiß, es ist zu haben, um auf der rechten Seite des Baumes. 239 00:15:09,540 --> 00:15:13,980 So habe ich viel weniger Zeug, zu betrachten. 240 00:15:13,980 --> 00:15:19,520 In Umsetzung eines binären Suchbaum, der Knoten, ich bin nur zu haben, um Daten haben, 241 00:15:19,520 --> 00:15:21,750 so int n, man könnte auch einen String 242 00:15:21,750 --> 00:15:23,630 oder alles, was Sie wollten. 243 00:15:23,630 --> 00:15:28,100 Sie müssen nur darauf achten, auf die Definition, was ist, größer zu sein, was weniger. 244 00:15:28,100 --> 00:15:30,390 Also, wenn Sie Zeichenfolgen hatten, zum Beispiel, können Sie definieren könnte 245 00:15:30,390 --> 00:15:34,690 dass all diese Dinge auf der rechten gehen, um größere Länge haben, 246 00:15:34,690 --> 00:15:40,940 links gehen, um unteren Längen haben, so ist es wirklich an Ihnen. 247 00:15:40,940 --> 00:15:44,930 >> Wie kann ich umsetzen finden für BST? 248 00:15:44,930 --> 00:15:47,840 Das erste, was wir tun müssen, ist zu prüfen, ob die Wurzel ist NULL. 249 00:15:47,840 --> 00:15:50,920 Wenn es NULL ist, bedeutet es, dass das, was nicht da ist 250 00:15:50,920 --> 00:15:53,330 weil Sie noch nicht einmal einen Baum, oder? 251 00:15:53,330 --> 00:15:55,790 Also ich wieder falsch. 252 00:15:55,790 --> 00:15:58,740 Ansonsten werde ich prüfen, ob die Zahl größer ist 253 00:15:58,740 --> 00:16:01,720 als der Wert in der Wurzel. 254 00:16:01,720 --> 00:16:04,250 Ich werde versuchen, das Element auf der rechten Seite 255 00:16:04,250 --> 00:16:08,590 des Baumes. 256 00:16:08,590 --> 00:16:11,310 Sie sehen, dass ich mit Rekursion hier. 257 00:16:11,310 --> 00:16:14,150 Und dann, wenn es weniger ist, werde ich auf links zu schauen. 258 00:16:14,150 --> 00:16:18,330 Und schließlich, anders, wenn es nicht weniger oder gar nicht mehr, 259 00:16:18,330 --> 00:16:20,660 es bedeutet, dass es das Wert sich. 260 00:16:20,660 --> 00:16:23,010 Also habe ich nur true zurück. 261 00:16:23,010 --> 00:16:26,360 Sie können hier sehen, dass ich, wenn, wenn, falls verwendet. 262 00:16:26,360 --> 00:16:30,820 Und denken Sie daran, in Quiz-0, wir hatten ein Problem, das hatte, wenn, wenn, wenn, 263 00:16:30,820 --> 00:16:32,780 und Sie sollten die Ineffizienz zu finden, 264 00:16:32,780 --> 00:16:35,180 und die Ineffizienz war, dass man, wenn verwendet. 265 00:16:35,180 --> 00:16:39,060 Sie sollten, wenn sonst, wenn verwendet haben, else if und else. 266 00:16:39,060 --> 00:16:44,240 Also, sollte ich sonst if und else if und else hier? 267 00:16:44,240 --> 00:16:46,200 Hat jemand - ja? 268 00:16:46,200 --> 00:16:51,140 [Schüler sprechen, unverständlich] 269 00:16:51,140 --> 00:16:53,480 Das ist großartig. So ist sie selbst, dass es keine Rolle spielt, 270 00:16:53,480 --> 00:16:55,930 nur weil die Ineffizienz, die wir vorher hatten 271 00:16:55,930 --> 00:16:59,550 war, dass da vielleicht, wenn eine bestimmte Bedingung erfüllt wurde, 272 00:16:59,550 --> 00:17:03,570 so eine Aktion durchgeführt haben, aber dann wollten Sie alle anderen Bedingungen zu überprüfen. 273 00:17:03,570 --> 00:17:06,319 Aber in diesem Fall zurück es sofort, so dass es keine Rolle spielt. 274 00:17:06,319 --> 00:17:09,220 So müssen Sie nicht auf, wenn anderes zu verwenden. 275 00:17:09,220 --> 00:17:11,740 >> Und schließlich, lassen Sie uns darüber sprechen, versucht, 276 00:17:11,740 --> 00:17:13,800 Das ist locker. 277 00:17:13,800 --> 00:17:15,980 Ein Versuch ist ein Baum des Arrays. 278 00:17:15,980 --> 00:17:20,369 Es ist sehr schnell nachschlagen Werte, aber es nutzt eine Menge Speicher. 279 00:17:20,369 --> 00:17:22,530 Und es ist in der Regel, um Wörter zu filtern, so dass, wenn Sie 280 00:17:22,530 --> 00:17:27,920 umsetzen wollen, zum Beispiel, ich weiß nicht, wie ein Telefonbuch im Telefon 281 00:17:27,920 --> 00:17:30,440 und Sie in der Lage sein wollen, Typ B 282 00:17:30,440 --> 00:17:32,510 und einfach nur Namen von Personen, B. haben 283 00:17:32,510 --> 00:17:37,960 Es ist sehr einfach zu implementieren, dass mit einem Versuch, zum Beispiel. 284 00:17:37,960 --> 00:17:39,820 Wie kann man einen Knoten in einem Versuch zu definieren? 285 00:17:39,820 --> 00:17:43,910 Sie müssen nur ein bool, die gehen, um is_word werden müssen. 286 00:17:43,910 --> 00:17:48,660 Das bedeutet, daß mit allen Zeichen vor diesem Knoten, 287 00:17:48,660 --> 00:17:51,920 Sie waren in der Lage, ein Wort zu bilden, 288 00:17:51,920 --> 00:17:57,230 und dann werden Sie ein Array von Zeigern auf Knoten haben. 289 00:17:57,230 --> 00:18:03,120 Können Sie sehen, dass wir eine Reihe von übergeordneten Knoten, also Knoten * Array? Ja? 290 00:18:03,120 --> 00:18:06,050 Also mal sehen, wie das funktionieren wird. Für die Rechtschreibprüfung, 291 00:18:06,050 --> 00:18:08,230 wir haben eine Reihe von 27 Elementen, 292 00:18:08,230 --> 00:18:12,150 denn wir haben alle Buchstaben sowie den Apostroph. 293 00:18:12,150 --> 00:18:17,800 Bevor ich hier werde nur 2 zu verwenden, weil ich in der Lage, an die Tafel zu schreiben. 294 00:18:17,800 --> 00:18:20,230 Okay. Das ist also ein Beispiel für ein Versuch. 295 00:18:20,230 --> 00:18:25,600 Wenn ich nur den ersten Knoten zu definieren, werde ich ein Array von 2 Elemente haben 296 00:18:25,600 --> 00:18:29,290 , die zwei Zeiger auf NULL sind, so dass ich nur setzen 'a' und 'b'. 297 00:18:29,290 --> 00:18:32,430 Und ich werde einen Bool, die is_word sagt. 298 00:18:32,430 --> 00:18:34,420 Es wird false für die erste zu sein, 299 00:18:34,420 --> 00:18:37,370 gerade weil, vor, dass Sie keine Zeichen haben. 300 00:18:37,370 --> 00:18:40,900 So ein leeres Wort ist nicht ein Wort. Es ist also falsch. 301 00:18:40,900 --> 00:18:46,320 Wenn ich 'a' auf dieses Wörterbuch hinzuzufügen, was würde ich tun? 302 00:18:46,320 --> 00:18:49,760 Ich würde einfach nur einen neuen Knoten für 'a' malloc, 303 00:18:49,760 --> 00:18:54,630 und dann sein Wort wahr hinzufügen. 304 00:18:54,630 --> 00:19:00,180 So ist es nur zu, dass mit 'a' wird um wahr zu sein. Sinnvoll? 305 00:19:00,180 --> 00:19:04,120 Dann, wenn ich will 'ba' hinzufügen, ich werde zu malloc 1 für 'b' haben, 306 00:19:04,120 --> 00:19:07,550 und dann werde ich auf false gesetzt den boolean, 307 00:19:07,550 --> 00:19:10,160 weil 'b' selbst ist nicht ein Wort. 308 00:19:10,160 --> 00:19:13,010 Dann werde ich zu einem anderen für 'a', so 'ba' malloc, 309 00:19:13,010 --> 00:19:16,290 und dann werde ich einrichten, es ist ein Wort, das wahr ist. 310 00:19:16,290 --> 00:19:18,950 Weil 'ba' ist ein Wort. 311 00:19:18,950 --> 00:19:21,910 Und dann, wenn ich will, um zu sehen, wenn 'b' ist in diesem Wörterbuch, 312 00:19:21,910 --> 00:19:26,730 Ich kann nur die erste, 'b' zu gehen. Ich gehe nach unten, und ich sehe ist Wort, und es ist falsch, sagt. 313 00:19:26,730 --> 00:19:30,110 Es ist also nicht ein Wort. Wenn ich 'ba' zu überprüfen, 314 00:19:30,110 --> 00:19:38,010 Ich gehe in die erste, 'b' und dann auf 'a', und ich wahr sehen, so dass es ein Wort ist. Sinnvoll? 315 00:19:38,010 --> 00:19:41,950 Eine Menge Leute durch Versuche verwirrt. Nein? 316 00:19:41,950 --> 00:19:44,740 >> Schließlich Huffman-Codierung. Huffman-Kodierung ist sehr nützlich, 317 00:19:44,740 --> 00:19:47,550 um Speicherplatz zu sparen und zu komprimieren, Text-Dateien, 318 00:19:47,550 --> 00:19:52,270 nur weil eine Menge Zeit, die Sie verwenden "a" und "e", zum Beispiel, 319 00:19:52,270 --> 00:19:57,710 in Ihren Dokumenten, aber ich weiß nicht, ob euch verwenden 'q' oder 'z' so viel. 320 00:19:57,710 --> 00:20:02,040 Mit nur 1 Byte für jeden einzelnen Charakter, 321 00:20:02,040 --> 00:20:08,520 jeder einzelne - die 256 Zeichen, die wir in der ASCII-Tabelle haben, ist nicht sehr optimal, 322 00:20:08,520 --> 00:20:11,410 nur weil es einige Zeichen, die Sie viel mehr zu verwenden, 323 00:20:11,410 --> 00:20:15,180 so sollten Sie vielleicht weniger Speicher für die. 324 00:20:15,180 --> 00:20:17,560 Wie kann ich mit Huffman-Kodierung? 325 00:20:17,560 --> 00:20:20,010 Wir müssen einen Huffman-Baum zu tun. 326 00:20:20,010 --> 00:20:23,370  Ein Huffman-Baum hat Knoten 327 00:20:23,370 --> 00:20:27,760 , das ein Symbol, das geht zu wie, 'a', 'b', 'c', der Buchstabe sein müssen, 328 00:20:27,760 --> 00:20:32,990 Schreiben, was auch immer Sie haben, eine Frequenz, die Frequenz, die das Wort im Text erscheint, ist, 329 00:20:32,990 --> 00:20:36,280 Sie schufen die Huffman-Baum für, 330 00:20:36,280 --> 00:20:41,800 und dann ein Knoten, das geht auf der linken Seite der Huffman-Baum zeigen 331 00:20:41,800 --> 00:20:47,210 und ein anderer Knoten, die gehen, um nach rechts zeigen. So einfach wie ein Baum. 332 00:20:47,210 --> 00:20:49,440 Wie kann man einen Huffman-Baum zu bauen? 333 00:20:49,440 --> 00:20:54,020 Du wirst die zwei Knoten, die die niedrigsten Frequenzen haben pflücken. 334 00:20:54,020 --> 00:20:56,490 Wenn Sie eine Krawatte muss man gehen, um die 2-Knoten holen sind 335 00:20:56,490 --> 00:20:59,870 , die die niedrigsten ASCII-Werte als gut. 336 00:20:59,870 --> 00:21:02,420 Dann wirst du einen neuen Baum aus diesen zwei Knoten erstellen 337 00:21:02,420 --> 00:21:08,030 das wird die kombinierte Häufigkeit in der übergeordneten Knoten haben. 338 00:21:08,030 --> 00:21:13,240 Und dann wollen Sie die 2 Kinder aus dem Wald zu entfernen sind 339 00:21:13,240 --> 00:21:15,570 und ersetzen sie durch die Eltern. 340 00:21:15,570 --> 00:21:18,930 Und du wirst zu wiederholen, dass, bis Sie nur noch ein Baum im Wald. 341 00:21:18,930 --> 00:21:23,840 Also mal sehen, wie Sie einen Huffman-Baum für ZAMYLA tun würde. 342 00:21:23,840 --> 00:21:29,220 Sie können hier sehen, dass alle Buchstaben haben Frequenz 1 außer 'A', die Frequenz 2 hat. 343 00:21:29,220 --> 00:21:34,090 Also habe ich Knoten für alle Buchstaben ich in der Reihenfolge der ASCII-Wert und Frequenz. 344 00:21:34,090 --> 00:21:40,090 Also, wenn ich den ersten Baum zu schaffen, wird es mit "L" und "M" sein. 345 00:21:40,090 --> 00:21:43,100 So ist es hier. Die Frequenz des Paars wird 2 sein 346 00:21:43,100 --> 00:21:49,470 denn es ist 1 + 1, dann ist der nächste 2 mit den niedrigsten Frequenzen "Y" und "Z". 347 00:21:49,470 --> 00:21:53,180 Und dann habe ich alle von ihnen sind - haben eine Frequenz von 2. 348 00:21:53,180 --> 00:22:00,470 Also welche sind die, die die niedrigste ASCII-Wert für die nächste einen zu haben sind? 349 00:22:00,470 --> 00:22:04,830 'A' und 'L'. Also habe ich den neuen Knoten zu erstellen, 350 00:22:04,830 --> 00:22:09,930 und schließlich ist es 4 und 2, SO 2 wird auf der linken Seite. 351 00:22:09,930 --> 00:22:12,430 Und das ist der Huffman-Baum. 352 00:22:12,430 --> 00:22:16,060 Dann, wenn ich will, um einen Text zu schreiben, 353 00:22:16,060 --> 00:22:24,440 wie in Binär in Text konvertieren, mit der Huffman-Baum ist sehr einfach. 354 00:22:24,440 --> 00:22:30,220 Zum Beispiel, wenn ich sage, dass eine Bewegung nach links eine 0 ist und sich nach rechts eine 1 ist, 355 00:22:30,220 --> 00:22:32,410 Was ist das los zu vertreten? 356 00:22:32,410 --> 00:22:35,530 So wie 1, 1, so rechts, rechts, 357 00:22:35,530 --> 00:22:40,370 und dann 0, so würde L links, und dann 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Also 1, 0, so dass nur 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 Und 0, 1, so 'Z'. 360 00:22:47,540 --> 00:22:52,170 Und dann 1, 0, 0 - keine. 361 00:22:52,170 --> 00:22:56,780 0, 0 wird 'Y' so faul sein. 362 00:22:56,780 --> 00:23:06,060 Also das ist alles für mich, Rob geht zu übernehmen. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] So, Woche 7 Sachen. 364 00:23:08,400 --> 00:23:11,390 Wir haben viel überstanden wirklich schnell zu gehen. 365 00:23:11,390 --> 00:23:13,430 Bit-Operatoren, Pufferüberlauf 366 00:23:13,430 --> 00:23:16,760 CS50-Bibliothek, dann HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Alle wie in 15 bis 20 Minuten. 368 00:23:20,990 --> 00:23:24,330 Bit-Operatoren. Es gibt sechs von ihnen, dass Sie wissen müssen. 369 00:23:24,330 --> 00:23:31,200 Bitweise und bitweise oder, XOR, Verschiebung nach links, rechte Shift, und nicht. 370 00:23:31,200 --> 00:23:35,420 Rechts zu verschieben und nicht Sie sah kaum in der Vorlesung überhaupt. 371 00:23:35,420 --> 00:23:40,480 Wir werden über sie hier schnell gehen, aber es ist gut zu wissen, dass diese die 6, die es gibt. 372 00:23:40,480 --> 00:23:45,070 Beachten Sie, dass Bit-Operatoren sind wie wenn Sie das tun 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Sie sind nicht mit dem binären von 3 und 4 zu tun haben. 374 00:23:49,420 --> 00:23:56,550 Mit Bit-Operatoren sind Sie eigentlich den Umgang mit den einzelnen Bits der Nummern 3 und 4. 375 00:23:56,550 --> 00:23:59,120 >> Also das erste, das wir sagen, ist nicht bitweise, 376 00:23:59,120 --> 00:24:02,340 und alles was man tut, ist Flip alle Bits. 377 00:24:02,340 --> 00:24:05,500 Also hier, wenn Sie dies in C schreibst, würden Sie nicht schreiben Sie es 378 00:24:05,500 --> 00:24:09,380 als ~ 11011 oder was auch immer, würden Sie schreiben, es gefällt ~ 4, 379 00:24:09,380 --> 00:24:12,970 und dann würde es die binäre Darstellung von 4 kippen. 380 00:24:12,970 --> 00:24:24,800 Also hier, ~ einiger Binärzahl 1101101 wird sich genau Flip Alle 1 auf 0 und alle 0 auf 1 ist. 381 00:24:24,800 --> 00:24:27,600 Wie ich es sagen, der häufige Gebrauch von diesem, 382 00:24:27,600 --> 00:24:30,830 und wir werden es in etwas zu sehen, ist wie wir, kommen mit einigen Nummer ein 383 00:24:30,830 --> 00:24:35,460 in dem alle Bits 1 sind, mit Ausnahme von einer von ihnen. 384 00:24:35,460 --> 00:24:38,560 So ist es in der Regel einfacher, die Zahl auszudrücken 385 00:24:38,560 --> 00:24:40,630 wo nur, dass einzelne Bit gesetzt ist, 386 00:24:40,630 --> 00:24:44,650 und dann die ~ von ihm, so dass jedes andere Bit außer, dass man eingestellt ist. 387 00:24:44,650 --> 00:24:50,300 Also das ist, was wir mehr in ein bisschen zu verwenden. 388 00:24:50,300 --> 00:24:58,220 Oder >> Bitwise. Hier sind zwei binäre Zahlen, und diese zwei Zahlen 389 00:24:58,220 --> 00:25:00,780 sind ziemlich repräsentativ, da sie jeden möglich darzustellen 390 00:25:00,780 --> 00:25:07,290 Kombination von Bits, die Sie brauchen, um arbeiten auf. 391 00:25:07,290 --> 00:25:13,540 Hier wird, wenn ich jedes Bit ODER-verknüpft, wir sind gerade dabei, gerade nach unten zu vergleichen. 392 00:25:13,540 --> 00:25:15,410 So auf der linken Seite haben wir A 1 und A 1. 393 00:25:15,410 --> 00:25:20,510 Wenn ich bitweise | die, was soll ich bekommen? One. 394 00:25:20,510 --> 00:25:25,320 Dann bitweise | 0 und 1 wird mich geben? One. 395 00:25:25,320 --> 00:25:27,840 Bitweise 1 und 0 wird sich die gleiche Sache, sein. 396 00:25:27,840 --> 00:25:31,880 Bitweise 0 | 0 geht mir 0 zu geben. 397 00:25:31,880 --> 00:25:37,300 Also der einzige Fall, wo ich 0 zu erhalten, ist in der 0 | 0 Fall. 398 00:25:37,300 --> 00:25:40,020 Und Sie, dass genau wie Ihre logischen ors denken können. 399 00:25:40,020 --> 00:25:44,830 Also, wenn Sie von 1 als wahr und 0 für falsch zu denken, gilt das Gleiche hier. 400 00:25:44,830 --> 00:25:50,040 So wahr oder wahr ist wahr, richtig oder falsch ist, ist wahr. 401 00:25:50,040 --> 00:25:57,150 Falsch oder wahr ist wahr, falsch oder falsch ist die einzige Sache, die tatsächlich falsch ist. 402 00:25:57,150 --> 00:26:00,100 Hier ist das Beispiel, das Sie wissen sollten 403 00:26:00,100 --> 00:26:05,160 wie ein ziemlich gutes Beispiel, wenn Bit-Operatoren verwendet werden. 404 00:26:05,160 --> 00:26:08,660 Hier, wenn wir oder Kapital 'A' mit OX20, 405 00:26:08,660 --> 00:26:11,830 und wir werden auf diese in einem zweiten Blick, wir haben etwas zu bekommen. 406 00:26:11,830 --> 00:26:16,020 Und wenn wir oder Kleinbuchstaben "a" mit OX20, etwas zu bekommen wir. 407 00:26:16,020 --> 00:26:26,750 Lassen Sie uns also nach oben ziehen ASCII-Tabelle. 408 00:26:26,750 --> 00:26:34,000 Okay. Hier sehen wir, dass 'A' ist - 409 00:26:34,000 --> 00:26:36,920 hier haben wir "A" ist Dezimal 65. 410 00:26:36,920 --> 00:26:45,120 Aber ich werde mit hexadezimal, die Ox41 ist zu gehen. 411 00:26:45,120 --> 00:26:48,280 Ziemlich sicher, dass wir es gesehen in der Klasse. Ich denke, dass wir es in der Klasse sah 412 00:26:48,280 --> 00:26:52,730 , dass es ziemlich einfach zu konvertieren von hexadezimal binär. 413 00:26:52,730 --> 00:26:55,280 Also hier, wenn ich 4 in binäre setzen, 414 00:26:55,280 --> 00:26:59,550 das ist gerade dabei, sein 0100. 415 00:26:59,550 --> 00:27:03,620 Dies ist ein Platz, Platz 2, Platz 4, so ist dies 4. 416 00:27:03,620 --> 00:27:08,550 Dann kann ich in binäre 1, die gehen, um sein 0001 aufgeteilt. 417 00:27:08,550 --> 00:27:14,280 Und so wird sich die Darstellung von 'A' in binär sein. 418 00:27:14,280 --> 00:27:22,720 Unter Kleinbuchstaben 'a', es ist jetzt zu Ox61 sein, 419 00:27:22,720 --> 00:27:27,050 wo diese Aufspaltung in seine binäre, so dass ein 6 - 420 00:27:27,050 --> 00:27:37,830 Lassen Sie es wirklich tun - gibt es kein Radiergummi? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. So spalten 6 in binäre wird zu 0 + 4 + 2 + 0 sein. 422 00:27:48,220 --> 00:27:54,610 Und Aufspaltung 1 wird zu 0001 sein. 423 00:27:54,610 --> 00:27:56,520 Mit Blick auf den Unterschied zwischen diesen 2, 424 00:27:56,520 --> 00:28:04,250 wir sehen, dass der einzige Unterschied zwischen einem Klein und ein großes "A" ist das einzelne Bit. 425 00:28:04,250 --> 00:28:11,810 Also wieder kommen, um hier - okay. 426 00:28:11,810 --> 00:28:15,920 Kommen wir zurück zu hier, wenn wir uns an, was das Bit OX20 ist, 427 00:28:15,920 --> 00:28:22,210 so OX20 Aufspaltung in seine binäre, 428 00:28:22,210 --> 00:28:27,310 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, das einzige Bit, das gesetzt wird, ist das Bit, das wir mit betroffen sind, 430 00:28:33,470 --> 00:28:38,210 mit Wechsel zwischen Groß-und Klein 'A'. 431 00:28:38,210 --> 00:28:47,610 Wenn ich oder 'A', die in diesem einen, 'A' ist, 432 00:28:47,610 --> 00:28:50,580 oder wenn ich 'A' mit OX20, 433 00:28:50,580 --> 00:28:53,490 was soll ich denn bekommen? 434 00:28:53,490 --> 00:28:58,960 [Schüler, unhörbar] >> Kleinbuchstaben "a", denn es geht um dieses Bit auf 1 zu kippen. 435 00:28:58,960 --> 00:29:04,170 Und wenn ich oder 'a' mit OX20, was werde ich bekommen? 436 00:29:04,170 --> 00:29:08,780 Kleinbuchstaben a, weil nur oring 'a' mit OX20, 437 00:29:08,780 --> 00:29:14,580 Ich werde nur zu einer 1 werden oring dieses einzelne Bit, es ist bereits ein, so dass es keine Rolle spielt. 438 00:29:14,580 --> 00:29:17,960 So bekommen wir 'a' und 'a'. 439 00:29:17,960 --> 00:29:24,820 >> Bitweise und. Auch wir dies als unser logisches Gegenstück und denken können. 440 00:29:24,820 --> 00:29:28,180 Auf der linken Seite haben wir true & wahr. 441 00:29:28,180 --> 00:29:31,160 Es wird um wahr zu sein, und für alle Fälle 442 00:29:31,160 --> 00:29:36,270 falsch & wahr oder true & false oder falsch & falsch, 443 00:29:36,270 --> 00:29:38,550 keines dieser Dinge sind wahr. 444 00:29:38,550 --> 00:29:44,170 Also, was wir am Ende immer ist 1000. 445 00:29:44,170 --> 00:29:48,830 So, jetzt, hier, hier, wo ich die treuen bitweise verwendet werden, nicht, 446 00:29:48,830 --> 00:29:52,230 wo wir OX20. 447 00:29:52,230 --> 00:29:54,350 Also das ist OX20. 448 00:29:54,350 --> 00:29:59,570 Nun, was ich tun möchte, bitweise ~ von OX20. 449 00:29:59,570 --> 00:30:03,600 Das wird alle Bits kippen. 450 00:30:03,600 --> 00:30:09,330 So habe ich 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 Und so 'A' mit ~ OX20 wird mir geben, was anded? 452 00:30:18,940 --> 00:30:22,430 Die nur wenig wir wirklich brauchen, um darüber nachzudenken, ist dieses, 453 00:30:22,430 --> 00:30:26,020 Da, wenn alle diese Bits auf 1 gesetzt sind, 454 00:30:26,020 --> 00:30:29,000 dann werden wir genau das bekommen, was "A" war, 455 00:30:29,000 --> 00:30:31,260 außer möglicherweise, was dieses Bit. 456 00:30:31,260 --> 00:30:34,460 Denn wenn es eine 1 war, jetzt läuft es auf eine 0 gesetzt werden, 457 00:30:34,460 --> 00:30:39,810 denn was auch immer das ist, mit anded das wird 0 sein. 458 00:30:39,810 --> 00:30:43,280 Also, was ist 'A' & ~ OX20 werde mir geben? 459 00:30:43,280 --> 00:30:48,200 [Studenten zu beantworten, unhörbar] >> Und was ist 'a' und - es ist 'A'. 460 00:30:48,200 --> 00:30:52,170 Und was ist 'a' & ~ OX20 werde mir geben? 461 00:30:52,170 --> 00:30:56,720 "A." Denn dies ist momentan eine 1 ist. 462 00:30:56,720 --> 00:30:59,570 Anding mit diesem 0 geht, es eine 0 zu machen, 463 00:30:59,570 --> 00:31:02,530 und jetzt sind wir ein 'A' zu erhalten. 464 00:31:02,530 --> 00:31:06,600 >> Beide sind 'A', und nicht zuletzt dieser Art, 465 00:31:06,600 --> 00:31:10,830 wir haben XOR. Es ist sehr ähnlich wie oder, 466 00:31:10,830 --> 00:31:14,400 außer sie ausschließlich oder bedeutet. 467 00:31:14,400 --> 00:31:18,420 Dies ist wie das, was Sie normalerweise denken als oder in der realen Welt. 468 00:31:18,420 --> 00:31:23,190 Sie müssen sich also entweder 'x' oder 'y', aber nicht beides. 469 00:31:23,190 --> 00:31:28,700 Hier ein ^ 1 wird auf 0 gesetzt. 470 00:31:28,700 --> 00:31:33,650 Weil wahre, das ist - es ist nicht so gut mit der logischen wahr und falsch zu arbeiten 471 00:31:33,650 --> 00:31:37,150 als bitweise & und oder tun, 472 00:31:37,150 --> 00:31:40,100 aber wahr ^ true ist falsch. 473 00:31:40,100 --> 00:31:44,810 Denn wir wollen nur true zurück, wenn nur einer von ihnen ist wahr. 474 00:31:44,810 --> 00:31:50,950 Also 1 ^ 1 0 ist. Was ist mit 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Ist ein. 1 ^ 0 1, 0 0 ^ 0 ist. 476 00:31:56,010 --> 00:32:03,890 So unter allen Umständen etwas bitweise 0 0 wird auf 0 gesetzt. 477 00:32:03,890 --> 00:32:10,270 1 bitweise etwas 0 oder 0 bitweise 1, 478 00:32:10,270 --> 00:32:14,660 wenn es | oder ^, wird es eine 1 sein, und wenn es ist und es wird 0 sein. 479 00:32:14,660 --> 00:32:20,850 Und der einzige Fall, in dem ein bitweise 1 nicht 1 ist mit exklusiven oder. 480 00:32:20,850 --> 00:32:24,580 Das ist 0110. 481 00:32:24,580 --> 00:32:36,520 So, hier nun, mit XOR - so sind wir wieder bei 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ OX20 ist diese 2 Bits wir den Vergleich. 483 00:32:43,480 --> 00:32:50,020 So ein 1 ^ 0 wird mich geben, was? A ein. 484 00:32:50,020 --> 00:32:58,430 'A' ^ OX20 wird mich geben? Kleinbuchstaben ein. 485 00:32:58,430 --> 00:33:04,010 'A' ^ OX20 wird mich geben? Kapital A. 486 00:33:04,010 --> 00:33:09,310 Denn was auch immer das tut, diese XOR-Verknüpfung mit OX20 487 00:33:09,310 --> 00:33:15,380 effektiv Spiegeln, was dieses Bit. 488 00:33:15,380 --> 00:33:21,240 Wenn dies eine 0, ist es jetzt zu einem 1 zu werden. 489 00:33:21,240 --> 00:33:26,160 Da dies ein 1 1 ^ 1 0 ist. 490 00:33:26,160 --> 00:33:33,280 Also unsere 'a' hat sich 'A', und unsere 'A' hat sich 'a'. 491 00:33:33,280 --> 00:33:36,910 So XOR ist eine wirklich komfortable Möglichkeit, das Umdrehen der Fall ist. 492 00:33:36,910 --> 00:33:39,960 Sie wollen einfach nur eine Folge von Buchstaben durchlaufen 493 00:33:39,960 --> 00:33:44,330 und wechseln den Fall von jedem einzelnen Charakter, 494 00:33:44,330 --> 00:33:50,680 Sie gerade XOR alles mit OX20. 495 00:33:50,680 --> 00:33:55,220 >> Jetzt haben wir links schieben. Linksverschiebung wird nur gehen, um, im Grunde, 496 00:33:55,220 --> 00:34:01,250 schieben alle Zahlen in oder auf der linken Seite, und legen Sie die 0 hinter ihnen. 497 00:34:01,250 --> 00:34:05,550 So, hier haben wir 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Wir werden 3 0 der von rechts zu schieben, 499 00:34:08,560 --> 00:34:13,580 und wir bekommen 01101000. 500 00:34:13,580 --> 00:34:16,380 In Bezug auf nicht-binäre, 501 00:34:16,380 --> 00:34:24,699 wir sehen, dass das ist wirklich um 13 nach links verschobenen mit 3, die uns 104. 502 00:34:24,699 --> 00:34:32,530 So Linksverschiebung, sehen wir hier, x << y im Grunde x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 8 ist, so 13 * 8 104. 504 00:34:40,139 --> 00:34:45,679 Wenn Sie nur über binäre im Allgemeinen, wie jeder Ziffer, denken 505 00:34:45,679 --> 00:34:49,530 wenn wir von der rechten Seite, ist es der 1er-Stelle, dann das 2er-Platz, dann der 4 Platz. 506 00:34:49,530 --> 00:34:51,330 Also, indem Sie in der 0 von rechts, 507 00:34:51,330 --> 00:34:55,080 wir sind nur schieben Dinge, die in der 4-Platz, um die 8 Platz waren, 508 00:34:55,080 --> 00:34:57,920 und Dinge, die in der 8. Platz, um den 16 Platz waren. 509 00:34:57,920 --> 00:35:01,280 Jede Schicht nur um 2 multipliziert. Ja? 510 00:35:01,280 --> 00:35:05,210 [Schüler] Was passiert, wenn man um 5 verschoben? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Wenn Sie mit 5 verschoben würden Sie nur verlieren Ziffern. 512 00:35:10,790 --> 00:35:15,410 Zwangsläufig ist es die gleiche Sache. Wie, ganze Zahlen sind nur 32 Bit, 513 00:35:15,410 --> 00:35:20,750 Wenn Sie zwei wirklich große Zahlen addieren, es funktioniert einfach nicht in einen Integer passen. 514 00:35:20,750 --> 00:35:23,660 So ist es die gleiche Sache hier. Wenn Sie mit dem 5 verschoben, 515 00:35:23,660 --> 00:35:25,650 würden wir nur verlieren, dass man. 516 00:35:25,650 --> 00:35:28,820 Und das ist irgendwie, was ich mit "grob" 517 00:35:28,820 --> 00:35:37,470 wo, wenn Sie zu weit verschieben, verlieren Sie Bit. 518 00:35:37,470 --> 00:35:39,830 >> Rechtsverschiebung wird sich das Gegenteil sein, 519 00:35:39,830 --> 00:35:43,090 wohin wir gehen, um aus dem Ende des Schubs 0, 520 00:35:43,090 --> 00:35:48,400 und für unsere Zwecke, füllen Sie bitte die 0 von der linken Seite. 521 00:35:48,400 --> 00:35:52,910 Also, dies zu tun, sind wir im Grunde Umkehr, was wir bereits getan hatte. 522 00:35:52,910 --> 00:35:57,780 Und wir sehen, dass die drei 0-en auf der rechten Seite haben gerade abgefallen, 523 00:35:57,780 --> 00:36:02,020 und wir haben die 1101 ganz nach rechts geschoben. 524 00:36:02,020 --> 00:36:08,380 Dies tut 104 >> 3, die ist, effektiv, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 So, jetzt, hier, es ist eine ähnliche Idee. 526 00:36:11,200 --> 00:36:18,720 Warum ist es nur etwa x / 2 ^ y, und nicht die tatsächlich x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Weil, wenn ich um 4 verschoben hatte, würde ich eine 1 verloren haben. 528 00:36:22,240 --> 00:36:25,950 Im Grunde, was Sie denken, nur der Integer-Division denke, im Allgemeinen. 529 00:36:25,950 --> 00:36:31,070 So, wie 5/2 2 ist. Es ist nicht 2.5. 530 00:36:31,070 --> 00:36:35,000 Es ist die gleiche Idee hier. Wenn wir durch 2 teilen, 531 00:36:35,000 --> 00:36:39,910 wir ungeraden Bits auf dem Weg verlieren. 532 00:36:39,910 --> 00:36:43,870 So, jetzt - das ist es für bitweise. Das ist alles, was Sie wissen müssen. 533 00:36:43,870 --> 00:36:46,340 Denken Sie daran, die Anwendungsfälle haben wir in der Klasse sah, 534 00:36:46,340 --> 00:36:49,340 wie eine Bit-Maske ist nützlich für die Bit-Operatoren, 535 00:36:49,340 --> 00:36:53,220 oder Sie können sie für Bit-Masken zu verwenden. 536 00:36:53,220 --> 00:36:58,620 Großbuchstaben und Kleinbuchstaben, Umbauten ist ein ziemlich prototypisches Beispiel. 537 00:36:58,620 --> 00:37:01,640 >> Okay, also Pufferüberlauf-Attacken. 538 00:37:01,640 --> 00:37:05,110 Wer daran erinnern, was mit dieser Funktion war? 539 00:37:05,110 --> 00:37:10,140 Beachten wir ein Array von 12 Bytes, 12 Zeichen, erklärt 540 00:37:10,140 --> 00:37:18,510 und dann kopieren wir in unsere Puffer von 12 Zeichen die gesamte Zeichenfolge bar. 541 00:37:18,510 --> 00:37:25,080 Also, was ist hier das Problem? 542 00:37:25,080 --> 00:37:32,270 Die magische Zahl 12 sollte so ziemlich sofort herausspringen wie - warum 12? 543 00:37:32,270 --> 00:37:35,050 Was ist, wenn bar passiert mit mehr als 12 Zeichen sein? 544 00:37:35,050 --> 00:37:41,200 Was ist, wenn Bar ist Millionen von Zeichen? 545 00:37:41,200 --> 00:37:46,010 Hier das Problem ist memcpy. Wenn Bar ist lang genug, 546 00:37:46,010 --> 00:37:50,330 es wird nur komplett - 'c', 'c' kümmert sich nicht darum, dass es nur 12 Zeichen; 547 00:37:50,330 --> 00:37:53,280 "C" ist es egal, dass es nicht passt, dass viele Bytes. 548 00:37:53,280 --> 00:37:58,250 Es wird nur komplett überschreiben char, die wir für 12 Byte zugeordnet haben, 549 00:37:58,250 --> 00:38:01,830 und alles, was an ihm vorbei in Erinnerung, die nicht wirklich zu diesem Puffer gehören 550 00:38:01,830 --> 00:38:06,520 mit dem, was der String-Bar ist. 551 00:38:06,520 --> 00:38:09,780 Also das war das Bild, wir in der Klasse sah 552 00:38:09,780 --> 00:38:12,220 wo wir unsere Stapel aufwachsen. 553 00:38:12,220 --> 00:38:16,040 Sie sollten auf diese Bilder verwendet werden oder sich wieder mit ihnen vertraut. 554 00:38:16,040 --> 00:38:21,260 Wir haben unsere Stapel aufwuchs, Speicheradressen beginnen bei 0 an der Spitze 555 00:38:21,260 --> 00:38:26,270 und wachsen nach unten am Boden wie 4 Milliarden. 556 00:38:26,270 --> 00:38:28,820 Wir haben unser Angebot 'c' irgendwo im Speicher, 557 00:38:28,820 --> 00:38:32,260 dann haben wir unsere Zeiger nach rechts darunter eine Bar, 558 00:38:32,260 --> 00:38:38,720 und dann haben wir diese gespeichert Rahmenzeiger in unserer Rücksprungadresse und unserer Mutter Routine-Stack. 559 00:38:38,720 --> 00:38:40,800 Denken Sie daran, was der Absender-Adresse ist? 560 00:38:40,800 --> 00:38:45,360 Es ist, wenn Haupt ruft eine Funktion foo, ruft eine Funktionsleiste, 561 00:38:45,360 --> 00:38:48,100 zwangsläufig, Bar Renditen. 562 00:38:48,100 --> 00:38:52,610 Also, wenn bar zurück, müssen sie wissen, dass es zurück zu foo, die sie aufgerufen. 563 00:38:52,610 --> 00:39:01,360 So ist die Absenderadresse ist die Adresse der Funktion, die es hat, wenn auf die Funktion zurückkehrt zurück. 564 00:39:01,360 --> 00:39:05,830 Der Grund, die wichtig für Pufferüberlauf-Attacken ist, weil, bequem, 565 00:39:05,830 --> 00:39:09,580 Hacker betonen, dass die Absender-Adresse zu ändern. 566 00:39:09,580 --> 00:39:14,950 Anstatt zurück zu foo, werde ich zurück, wo der Hacker will, dass ich zurück zu gehen zu gehen. 567 00:39:14,950 --> 00:39:17,760 Und bequem, wo der Hacker will häufig gehen Sie zurück zu 568 00:39:17,760 --> 00:39:22,400 ist der Anfang des Puffers, die wir ursprünglich hatte. 569 00:39:22,400 --> 00:39:26,170 So bemerken, die wieder, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Das Gerät ist ein Beispiel für ein System Little Indian, 571 00:39:28,490 --> 00:39:34,140 so eine ganze Zahl oder ein Zeiger zu den Bytes umgekehrt abgelegt. 572 00:39:34,140 --> 00:39:38,980 So, hier sehen wir - ist das? Ja. 573 00:39:38,980 --> 00:39:45,660 Wir sehen Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Denken Sie an die hexadezimale Ziffern? 575 00:39:48,250 --> 00:39:50,640 Wir sind nicht umgekehrt die hexadezimale Ziffern in Little Indian, 576 00:39:50,640 --> 00:39:56,110 weil zwei hexadezimalen Ziffern bilden ein Byte, und wir umgekehrt die Bytes. 577 00:39:56,110 --> 00:40:00,300 Das ist, warum wir nicht speichern, wie, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Wir speichern, sondern jedes Paar von zwei Ziffern, beginnend von rechts. 579 00:40:07,520 --> 00:40:10,880 Diese Adresse bezieht sich auf die Adresse der Start 580 00:40:10,880 --> 00:40:15,190 der Puffer, die wir eigentlich in der ersten Stelle zu kopieren wollten. 581 00:40:15,190 --> 00:40:19,230 Der Grund ist, die nützlich ist, weil, was ist, wenn der Angreifer 582 00:40:19,230 --> 00:40:24,100 passiert ist, anstatt eine Zeichenfolge, die nur war 583 00:40:24,100 --> 00:40:27,060 eine harmlose Kette von gleichen, ihren Namen oder so etwas, 584 00:40:27,060 --> 00:40:33,900 was ist, wenn statt dessen, dass die String nur einige beliebigen Code waren 585 00:40:33,900 --> 00:40:38,610 das tat, was sie wollten, es zu tun? 586 00:40:38,610 --> 00:40:45,630 So konnten sie - ich kann nicht jeder kühle Code denken. 587 00:40:45,630 --> 00:40:47,780 Es könnte alles sein, wenn. Jede katastrophalen Code. 588 00:40:47,780 --> 00:40:51,440 Wenn sie wollten, könnten sie nur etwas zu seg Fehler machen, aber das wäre sinnlos. 589 00:40:51,440 --> 00:40:54,950 Sie tun es in der Regel, um Ihr System zu hacken. 590 00:40:54,950 --> 00:40:59,930 >> Ok. CS50-Bibliothek. 591 00:40:59,930 --> 00:41:04,800 Dies ist im Grunde getInt, getString, all diese Funktionen, die wir für Sie bereitgestellt. 592 00:41:04,800 --> 00:41:10,630 So haben wir char * string, und das ist die Abstraktion, die wir blies 593 00:41:10,630 --> 00:41:12,450 irgendwann im Laufe des Semesters. 594 00:41:12,450 --> 00:41:18,220 Denken Sie daran, dass ein String nur ein Array von Zeichen. 595 00:41:18,220 --> 00:41:23,240 So, hier sehen wir eine gekürzte Fassung der getString. 596 00:41:23,240 --> 00:41:25,920 Sie sollten es zurück zu erinnern, wie es tatsächlich umgesetzt werden. 597 00:41:25,920 --> 00:41:30,950 Key Details sind, bemerken wir, in einem einzigen Charakter bekommen in einer Zeit, 598 00:41:30,950 --> 00:41:34,570 von in, die genau wie wir die Eingabe über die Tastatur ist Standard. 599 00:41:34,570 --> 00:41:37,890 So ein einzelnes Zeichen in einer Zeit, und wenn wir zu viele Zeichen zu bekommen, 600 00:41:37,890 --> 00:41:40,580 also, wenn n + 1 größer als die Kapazität ist, 601 00:41:40,580 --> 00:41:44,140 dann müssen wir die Kapazität unserer Puffer erhöhen. 602 00:41:44,140 --> 00:41:47,780 So, hier sind wir die Verdoppelung der Größe unseres Puffer. 603 00:41:47,780 --> 00:41:51,840 Und das läuft weiter, die wir in unsere Puffer legen Sie die Zeichen 604 00:41:51,840 --> 00:41:56,220 erhalten, bis wir eine neue Linie oder das Ende der Datei oder was auch immer, 605 00:41:56,220 --> 00:41:59,380 in diesem Fall sind wir mit der Saite und dann die Real getString getan 606 00:41:59,380 --> 00:42:05,120 schrumpft die Erinnerung, wie wenn wir zu viel Speicher zugewiesen, es wird zurück gehen und ein wenig schrumpfen. 607 00:42:05,120 --> 00:42:08,830 Wir wissen also nicht, dass die, aber die Grundidee ist 608 00:42:08,830 --> 00:42:11,960 es muss in einem Zeichen zu einem Zeitpunkt zu lesen. 609 00:42:11,960 --> 00:42:17,140 Es kann nicht nur in einer Sache auf einmal lesen 610 00:42:17,140 --> 00:42:19,550 weil ihre Puffer ist nur mit einer bestimmten Größe. 611 00:42:19,550 --> 00:42:26,590 Also, wenn die Zeichenfolge, die er versucht, in die Puffer einfügen zu groß ist, dann wäre es überläuft. 612 00:42:26,590 --> 00:42:28,940 So, hier zu verhindern, dass wir nur durch Lesen in einem einzelnen Zeichen 613 00:42:28,940 --> 00:42:33,750 zu einer Zeit, und wächst, wenn es nötig ist. 614 00:42:33,750 --> 00:42:40,270 So getInt und die anderen CS50-Bibliotheksfunktionen neigen dazu, getString verwenden 615 00:42:40,270 --> 00:42:42,310 in ihre Implementierungen. 616 00:42:42,310 --> 00:42:45,370 So markierte ich die wichtigen Dinge hier. 617 00:42:45,370 --> 00:42:49,460 Er fordert getString, um einen String zu erhalten. 618 00:42:49,460 --> 00:42:51,710 Wenn getString versäumt, Speicher zurück, 619 00:42:51,710 --> 00:42:54,270 daran erinnern, dass getString mallocs etwas, wenn Sie so zu nennen getString 620 00:42:54,270 --> 00:42:57,820 Sie sollten nicht (unverständlich) kostenlos die Zeichenfolge, die Sie haben. 621 00:42:57,820 --> 00:43:02,870 Also hier, wenn es nicht zu etwas malloc kehren wir INT_MAX als nur eine Fahne, die, 622 00:43:02,870 --> 00:43:05,650 hey, wir waren nicht wirklich in der Lage, eine ganze Zahl zu erhalten. 623 00:43:05,650 --> 00:43:10,830 Sie sollten ignorieren, was ich wieder zu Ihnen, oder 624 00:43:10,830 --> 00:43:15,540 Sie sollten nicht behandeln dies als gültige Eingabe. 625 00:43:15,540 --> 00:43:21,360 Schließlich habe der Annahme, dass erfolgreich zu sein, setzen wir mit dieser speziellen sscanf Flagge, 626 00:43:21,360 --> 00:43:23,820 was bedeutet, zuerst eine ganze Zahl übereinstimmen, 627 00:43:23,820 --> 00:43:26,770 dann alle Zeichen übereinstimmen nach diesem Integer. 628 00:43:26,770 --> 00:43:29,070 So bemerken wir es gleich 1 wollen. 629 00:43:29,070 --> 00:43:32,940 So sscanf gibt zurück, wie viele Spiele gemacht, wenn erfolgreich? 630 00:43:32,940 --> 00:43:37,010 Es gibt 1 zurück, wenn es eine ganze Zahl erfolgreich abgestimmt, 631 00:43:37,010 --> 00:43:40,890 wird es 0 zurück, wenn es nicht eine ganze Zahl übereinstimmt, und es wird 2 zurück 632 00:43:40,890 --> 00:43:45,920 wenn es abgestimmt eine ganze Zahl, gefolgt von einem gewissen Charakter. 633 00:43:45,920 --> 00:43:49,780 So bemerken wir versuchen, wenn wir alles andere als ein Spiel. 634 00:43:49,780 --> 00:43:55,230 Wenn wir also eingetragen 1, 2, 3, C, oder 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 dann 1, 2, 3 würde in der Integer gespeichert werden, 636 00:43:57,400 --> 00:43:59,620 X würde bei der Charakter gespeichert werden, 637 00:43:59,620 --> 00:44:06,410 sscanf würde 2 zurück, und wir versuchen würden, denn wir wollen nur eine ganze Zahl. 638 00:44:06,410 --> 00:44:09,810 Schnell >> weht durch HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 Hypertext Markup Language ist die Struktur und Semantik der Bahn. 640 00:44:15,340 --> 00:44:19,960 Hier ist das Beispiel aus der Vorlesung, wo wir HTML-Tags. 641 00:44:19,960 --> 00:44:22,110 Wir haben Kopf-Tags, Body-Tags, 642 00:44:22,110 --> 00:44:27,770 Wir haben Beispiele für leere Tags, wo wir eigentlich nicht in der Nähe von Start-und-Tag, 643 00:44:27,770 --> 00:44:30,820 wir haben nur Link und Bild. 644 00:44:30,820 --> 00:44:38,480 Es gibt keine Schließ Bild-Tag, es ist nur ein einziger Tag, der alles, was der Tag tun muss, erfüllt. 645 00:44:38,480 --> 00:44:41,950 Der Link ist ein Beispiel, wir werden sehen, wie Sie eine Verknüpfung zu CSS, 646 00:44:41,950 --> 00:44:45,910 das Skript ist ein Beispiel, wie Sie einen Link zu einer externen JavaScript. 647 00:44:45,910 --> 00:44:53,100 Es ist ziemlich einfach, und denken Sie daran, HTML ist keine Programmiersprache. 648 00:44:53,100 --> 00:44:58,250 Hier erinnern, wie Sie ein Formular definieren, oder zumindest, was das tun würde? 649 00:44:58,250 --> 00:45:01,740 Eine solche Form hat eine Klage und ein Verfahren. 650 00:45:01,740 --> 00:45:06,210 Die Methoden, die Sie sehen, sind immer nur GET und POST. 651 00:45:06,210 --> 00:45:09,040 So ist die Version, in der sich das Ding in der URL setzen GET. 652 00:45:09,040 --> 00:45:11,680 POST ist, wo es nicht in der URL setzen. 653 00:45:11,680 --> 00:45:18,520 Stattdessen werden alle Daten aus dem Formular eingefügt wird mehr versteckt in der HTTP-Anfrage. 654 00:45:18,520 --> 00:45:22,390 So, hier, wo die Aktion definiert HTTP-Anfrage geht. 655 00:45:22,390 --> 00:45:27,490 Wo es geht ist google.com / search. 656 00:45:27,490 --> 00:45:32,890 Methode. Denken Sie daran, die Unterschiede zwischen GET und POST, 657 00:45:32,890 --> 00:45:37,200 und, sagen Sie einfach als Beispiel, wenn Sie ein Lesezeichen etwas wollen. 658 00:45:37,200 --> 00:45:40,660 Sie werden nie in der Lage, Lesezeichen für eine POST-URL sein 659 00:45:40,660 --> 00:45:44,970 da die Daten nicht in der URL enthalten. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, jetzt ist Hypertext Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 Das Hypertext Transfer Protocol, würden Sie erwarten es zu übertragen 662 00:45:54,080 --> 00:45:57,710 Hypertext Markup Language, und es funktioniert. 663 00:45:57,710 --> 00:46:00,170 Aber es überträgt auch keine Bilder im Web zu finden, 664 00:46:00,170 --> 00:46:05,400 keine Downloads du anfängst, als HTTP-Anfrage. 665 00:46:05,400 --> 00:46:10,350 So HTTP ist nur die Sprache des World Wide Web. 666 00:46:10,350 --> 00:46:15,610 Und hier müssen Sie diese Art von einer HTTP-Anforderung erkennen. 667 00:46:15,610 --> 00:46:19,300 Hier HTTP/1.1 auf der Seite nur sagt, das ist die Version 668 00:46:19,300 --> 00:46:21,570 des Protokolls Ich bin mit. 669 00:46:21,570 --> 00:46:25,770 Es ist so ziemlich immer zu HTTP/1.1 sein, wie Sie es sehen. 670 00:46:25,770 --> 00:46:30,110 Dann sehen wir, dass dies GET, POST die Alternative sein, dass Sie vielleicht zu sehen. 671 00:46:30,110 --> 00:46:40,790 Und die URL, die ich versucht habe, zu besuchen war www.google.com/search?q = blah, blah, blah. 672 00:46:40,790 --> 00:46:44,240 Also denken Sie daran, dass dies das Fragezeichen q = blah blah blah, 673 00:46:44,240 --> 00:46:49,040 ist die Art von Sachen, die durch eine Form vorgelegt wird. 674 00:46:49,040 --> 00:46:51,830 Die Antwort, es könnte zu mir zurückkehren würde in etwa so aussehen. 675 00:46:51,830 --> 00:46:54,050 Wiederum beginnend mit dem Protokoll, die gehen, um das sein, 676 00:46:54,050 --> 00:46:59,190 gefolgt von dem Statuscode. Hier ist es 200 OK. 677 00:46:59,190 --> 00:47:05,060 Und schließlich, die Web-Seite, die ich tatsächlich gefragt wird folgen. 678 00:47:05,060 --> 00:47:08,210 Die möglichen Status-Code, den Sie vielleicht sehen, und Sie mehrere von ihnen wissen sollten. 679 00:47:08,210 --> 00:47:12,770 200 OK Sie wahrscheinlich gesehen haben. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, 500 Internal Server Error 681 00:47:17,830 --> 00:47:22,140 ist in der Regel, wenn Sie gehen, um eine Website und etwas kaputt ist oder ihre PHP-Code abstürzt, 682 00:47:22,140 --> 00:47:24,930 während in dem Gerät haben wir, dass große Orange Box 683 00:47:24,930 --> 00:47:27,830 das kommt auf und sagt, wie, stimmt etwas nicht, wird dieser Code nicht funktioniert 684 00:47:27,830 --> 00:47:30,380 oder schlechten dieser Funktion. 685 00:47:30,380 --> 00:47:33,230 Normalerweise Websites nicht wollen, dass Sie wissen, was Funktionen sind eigentlich schlecht, 686 00:47:33,230 --> 00:47:37,880 so werden sie, anstatt Ihnen nur 500 Interner Serverfehler. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP ist ein Schicht unter HTTP. 688 00:47:43,050 --> 00:47:47,550 Denken Sie daran, dass es Internet außerhalb des World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Wie, wenn Sie ein Online-Spiel, das nicht über HTTP nicht spielen gehen, 690 00:47:52,270 --> 00:47:55,740 es wird durch eine andere - es ist immer noch über das Internet, 691 00:47:55,740 --> 00:47:58,900 aber es nicht verwendet HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP ist nur ein Beispiel des Protokolls TCP / IP aufgebaut. 693 00:48:02,470 --> 00:48:07,820 IP bedeutet wörtlich Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Jeder Computer hat eine IP-Adresse, sie sind die 4-stellige Dinge 695 00:48:11,500 --> 00:48:16,510 wie 192.168.2.1, oder was auch immer, das dazu neigt, eine lokale sein. 696 00:48:16,510 --> 00:48:23,390 Aber das ist das Muster einer IP-Adresse. 697 00:48:23,390 --> 00:48:29,060 So ist die DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 das ist, was übersetzt Dinge wie google.com auf eine tatsächliche IP-Adresse. 699 00:48:33,410 --> 00:48:37,700 Also, wenn Sie schreiben, dass die IP-Adresse in einer URL, 700 00:48:37,700 --> 00:48:40,850 möchten Sie, dass Google zu bringen, aber Sie neigen dazu, nicht auf diese Dinge zu erinnern. 701 00:48:40,850 --> 00:48:45,470 Sie neigen dazu, statt google.com erinnern. 702 00:48:45,470 --> 00:48:51,560 Das letzte, was wir haben, ist Häfen, wo das ist der Teil des TCP-IP. 703 00:48:51,560 --> 00:48:54,880 TCP tut mehr. Denken Sie darüber nach, wie, Sie Ihren Web-Browser laufen haben. 704 00:48:54,880 --> 00:48:58,670 Vielleicht haben Sie einige E-Mail-Anwendung ausgeführt; 705 00:48:58,670 --> 00:49:02,150 Vielleicht haben Sie ein anderes Programm, das das Internet nutzt Lauf. 706 00:49:02,150 --> 00:49:05,090 Sie alle benötigen Zugriff auf das Internet, 707 00:49:05,090 --> 00:49:08,100 aber Ihr Computer nur über ein WiFi-Karte oder was auch immer. 708 00:49:08,100 --> 00:49:10,780 Also Ports sind der Weg, den wir in der Lage, aufgeteilt 709 00:49:10,780 --> 00:49:13,550 wie diese Anwendungen sind in der Lage, das Internet zu nutzen. 710 00:49:13,550 --> 00:49:17,230 Jede Anwendung wird ein bestimmter Port, dass sie hören auf, 711 00:49:17,230 --> 00:49:19,670 und verwendet standardmäßig HTTP-Port 80. 712 00:49:19,670 --> 00:49:22,410 Einige E-Mail-Dienste verwenden 25. 713 00:49:22,410 --> 00:49:24,490 Die niedrigen nummerierten eher reserviert werden. 714 00:49:24,490 --> 00:49:29,270 Sie sind in der Regel in der Lage, höhere nummerierten für sich selbst zu bekommen. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Wir Stil Webseiten mit CSS, nicht mit HTML. 717 00:49:36,030 --> 00:49:38,440 Es gibt drei Orte, die Sie Ihrem CSS setzen. 718 00:49:38,440 --> 00:49:46,300 Sie kann inline sein, zwischen Stil-Tags oder in einem völlig separaten Datei und dann in. verknüpft 719 00:49:46,300 --> 00:49:48,470 Und hier ist nur ein Beispiel von CSS. 720 00:49:48,470 --> 00:49:50,450 Sie sollten diese Muster zu erkennen, 721 00:49:50,450 --> 00:49:54,310 wo das erste Beispiel ist, dass wir die passenden Body-Tag, 722 00:49:54,310 --> 00:49:56,680 und hier sind wir Zentrierung des Body-Tag. 723 00:49:56,680 --> 00:50:00,420 Das zweite Beispiel, werden wir die Sache pass 724 00:50:00,420 --> 00:50:04,740 mit ID-Footer, und wir die Anwendung einiger Arten zu. 725 00:50:04,740 --> 00:50:07,310 Beachten Sie, dass Text-ID footer richtet nach links, 726 00:50:07,310 --> 00:50:09,840 wohingegen Text-Zentrum richtet. 727 00:50:09,840 --> 00:50:13,180 Footer ist im Inneren des Körpers. 728 00:50:13,180 --> 00:50:16,470 Es wird statt dessen text-align links, auch wenn Körper sagt text-align-Center. 729 00:50:16,470 --> 00:50:18,880 Das ist die ganze Kaskaden Teil davon. 730 00:50:18,880 --> 00:50:22,110 Sie können - Sie können Arten für den Körper anzugeben, 731 00:50:22,110 --> 00:50:25,320 und dann die Dinge in den Körper können Sie spezifischere Stile geben, 732 00:50:25,320 --> 00:50:28,160 und die Dinge funktionieren wie erwartet. 733 00:50:28,160 --> 00:50:34,420 Weitere spezifische CSS-Bezeichner Vorrang. 734 00:50:34,420 --> 00:50:46,140 Ich denke, das ist es. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Hallo alle. Wenn ich nur bekommen Ihre Aufmerksamkeit. 736 00:50:49,260 --> 00:50:53,990 Ich bin Ali und ich werde durch PHP-und SQL-wirklich schnell gehen. 737 00:50:53,990 --> 00:51:00,310 So können wir beginnen. PHP ist die Abkürzung für PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 Und wie Sie alle wissen sollten, ist es eine serverseitige Skriptsprache, 739 00:51:03,730 --> 00:51:06,800 und wir nutzen es für die Back-End von Webseiten, 740 00:51:06,800 --> 00:51:12,540 und wie es macht eine Menge der Berechnungen, die hinter Kulissen Teil. 741 00:51:12,540 --> 00:51:17,510 Syntax. Es ist nicht wie C, Überraschung, Überraschung. 742 00:51:17,510 --> 00:51:22,060 Es hat immer mit dem, wenn man sehen kann, die beginnen - ich kann nicht vorankommen. 743 00:51:22,060 --> 00:51:31,340 Sie können sehen Sie die neuen Arten von Zahnspangen brauchen, und dann müssen Sie auch die? Php. 744 00:51:31,340 --> 00:51:35,780 Das ist immer, wie Sie Ihre PHP Text, PHP-Code Rahmen haben. 745 00:51:35,780 --> 00:51:39,180 So kann es nicht nur wie C, wo Sie Art legte es auf den ersten. 746 00:51:39,180 --> 00:51:42,290 Sie müssen sich immer umgeben. 747 00:51:42,290 --> 00:51:47,610 Und jetzt ist der Haupt Syntax, dass alle Variablen müssen mit dem Zeichen $ beginnen. 748 00:51:47,610 --> 00:51:49,490 Sie müssen es tun, wenn Sie sie zu definieren, Sie müssen es tun 749 00:51:49,490 --> 00:51:51,860 wenn Sie sich beziehen, um sie später auf. 750 00:51:51,860 --> 00:51:56,510 Sie müssen immer, dass $. Es ist Ihr neuer bester Freund, ziemlich viel. 751 00:51:56,510 --> 00:52:01,690 Sie müssen nicht - im Gegensatz zu C, brauchen Sie nicht zu setzen, welche Art von Variablentyp es ist. 752 00:52:01,690 --> 00:52:04,940 So, während Sie brauchen die $ zu tun, brauchen Sie nicht zu setzen, wie, 753 00:52:04,940 --> 00:52:09,470 int x oder y String, etcetera, etcetera. 754 00:52:09,470 --> 00:52:11,490 Also ein kleiner Unterschied. 755 00:52:11,490 --> 00:52:15,590 Als ein Ergebnis davon ist, bedeutet dies, dass PHP eine schwach-Typ. 756 00:52:15,590 --> 00:52:19,310 PHP ist eine Art Sprache schwach, und es hat schwach typisierte Variablen. 757 00:52:19,310 --> 00:52:24,020 In anderen Worten bedeutet das, dass man zwischen verschiedenen Arten von Variablentypen wechseln. 758 00:52:24,020 --> 00:52:27,230 Sie können Ihre Nummer 1 als int zu speichern, 759 00:52:27,230 --> 00:52:29,650 Sie sie als String speichern kann, und Sie können es als Schwimmer speichern, 760 00:52:29,650 --> 00:52:33,550 und es werden alle, dass die Nummer 1 sein. 761 00:52:33,550 --> 00:52:36,080 Auch wenn Sie es speichern in verschiedenen Formen, 762 00:52:36,080 --> 00:52:39,120 es ist immer noch - die Variablentypen halten sich noch am Ende. 763 00:52:39,120 --> 00:52:41,540 Also, wenn Sie schauen hier, wenn Sie sich erinnern von pset 7, 764 00:52:41,540 --> 00:52:43,500 viele von Ihnen wahrscheinlich hatte Probleme mit diesem. 765 00:52:43,500 --> 00:52:47,280 Zwei gleiche Zeichen, Gleichheitszeichen 3, 4 Gleichheitszeichen. 766 00:52:47,280 --> 00:52:49,990 Okay, es gibt keine 4 Gleichheitszeichen, aber es gibt 2 und 3. 767 00:52:49,990 --> 00:52:53,320 Mit zwei Gleichheitszeichen, um die Werte zu überprüfen. 768 00:52:53,320 --> 00:52:55,830 Es kann über Arten zu überprüfen. 769 00:52:55,830 --> 00:52:58,770 Also, wenn Sie beim ersten Beispiel sehen können, 770 00:52:58,770 --> 00:53:02,210 Ich habe num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Also Ihr int und Ihre Schnur sind, sowohl technisch, 1, 772 00:53:06,710 --> 00:53:10,790 aber sie sind verschiedene Typen. Aber für die Doppel-Gleichen, wird es immer noch passieren. 773 00:53:10,790 --> 00:53:15,510 Doch für die Dreifach-Gleichen, prüft es Wert sowie die verschiedenen Arten. 774 00:53:15,510 --> 00:53:18,760 Das bedeutet, dass es nicht geht, in diesem zweiten Fall hier passieren, 775 00:53:18,760 --> 00:53:22,350 wo Sie mit 3 Gleichheitszeichen anstelle bist. 776 00:53:22,350 --> 00:53:26,590 Also das ist ein großer Unterschied, dass Sie alle haben jetzt gezeigt. 777 00:53:26,590 --> 00:53:31,570 >> String-Verkettung ist ein weiteres leistungsfähiges, was Sie in PHP verwenden können. 778 00:53:31,570 --> 00:53:34,080 Es ist im Grunde nur diese handliche Punktnotation, 779 00:53:34,080 --> 00:53:36,230 und das ist, wie Sie Zeichenfolgen zusammen binden können. 780 00:53:36,230 --> 00:53:40,800 Also, wenn Sie Katze und Hund haben Sie, und Sie die 2 Strings zusammen setzen wollen, 781 00:53:40,800 --> 00:53:44,080 Sie können die Zeit nutzen, und das ist eine Art, wie es funktioniert. 782 00:53:44,080 --> 00:53:46,660 Sie können auch einfach legen Sie sie nebeneinander, 783 00:53:46,660 --> 00:53:49,030 wie Sie hier in der unteren Beispiel sehen können, 784 00:53:49,030 --> 00:53:51,610 wo ich String 1, Raum 2 echo String. 785 00:53:51,610 --> 00:53:56,930 PHP wird wissen, sie als solche zu ersetzen. 786 00:53:56,930 --> 00:53:59,780 Arrays. Jetzt, in PHP gibt es zwei verschiedene Arten von Arrays. 787 00:53:59,780 --> 00:54:03,180 Sie können regelmäßige Anordnungen haben, und Sie können auch assoziative Arrays, 788 00:54:03,180 --> 00:54:06,040 und wir werden durch sie jetzt gehen. 789 00:54:06,040 --> 00:54:08,280 Regelmäßige Arrays sind gerade diese in C, 790 00:54:08,280 --> 00:54:11,240 und so haben Sie Indizes, die nummeriert sind. 791 00:54:11,240 --> 00:54:13,160 Momentan sind wir gerade dabei, eine zu erstellen und - 792 00:54:13,160 --> 00:54:15,500 so ist dies, wie wir ein leeres Array, dann werden wir 793 00:54:15,500 --> 00:54:17,310 setzen in die Indexnummer 0. 794 00:54:17,310 --> 00:54:19,200 Wir werden die Nummer 6, den Wert 6 gesetzt. 795 00:54:19,200 --> 00:54:21,500 Sie können es an der Unterseite finden Sie hier. 796 00:54:21,500 --> 00:54:24,240 Where's - bei Index-Nummer 1 werden wir Wert legen Nummer 4, 797 00:54:24,240 --> 00:54:26,720 und damit Sie sehen können gibt es eine 6, gibt es eine 4, 798 00:54:26,720 --> 00:54:29,160 und dann als wir Druck Dinge, 799 00:54:29,160 --> 00:54:33,550 wenn wir versuchen, und drucken Sie das an der Indexnummer 0 gespeicherten Wert, 800 00:54:33,550 --> 00:54:36,900 dann werden wir den Wert 6 wird gedruckt zu sehen. Cool? 801 00:54:36,900 --> 00:54:40,160 Also das ist, regelmäßige Anordnungen für Sie. 802 00:54:40,160 --> 00:54:42,750 Eine weitere Möglichkeit, auch Dinge, um regelmäßige Anordnungen jetzt hinzufügen 803 00:54:42,750 --> 00:54:44,780 ist man einfach hängen Sie sie am Ende. 804 00:54:44,780 --> 00:54:47,240 Das bedeutet, dass Sie nicht haben, um die spezifischen Index angeben. 805 00:54:47,240 --> 00:54:51,000 Sie können sehen, Nummer, und dann in den eckigen Klammern gibt es kein Index angegeben. 806 00:54:51,000 --> 00:54:56,270 Und sie wird wissen - PHP weiß, um es bis zum Ende der Liste, die nächste freie Stelle nur hinzufügen. 807 00:54:56,270 --> 00:54:59,190 So haben Sie die 1 genau dort an dieser Stelle 0 sehen können, 808 00:54:59,190 --> 00:55:02,690 die 2 ging genau dort an der ersten Stelle. 809 00:55:02,690 --> 00:55:04,690 Das 3 geht - ist auch dort aufgenommen. 810 00:55:04,690 --> 00:55:06,720 Also diese Art von Sinn macht. Du bist einfach nur ständig um sie, 811 00:55:06,720 --> 00:55:09,360 und dann, wenn wir Echo der Index der Nummer 1, 812 00:55:09,360 --> 00:55:13,080 er ausdruckt, den Wert 2. 813 00:55:13,080 --> 00:55:16,800 >> Dann haben wir Arrays, die assoziative Arrays sind. 814 00:55:16,800 --> 00:55:19,370 Assoziative Arrays, anstatt numerische Indizes 815 00:55:19,370 --> 00:55:23,630 was sie tun, ist, sie von Indizes, die Zeichenfolge sind zu haben. 816 00:55:23,630 --> 00:55:25,670 Sie können sehen, statt - ich habe all diese Anzahl Indizes zu befreien, 817 00:55:25,670 --> 00:55:32,140 und jetzt ist es Tasten 1, 2, key3, und sie sind in Anführungszeichen zu bedeuten, dass sie alle Saiten. 818 00:55:32,140 --> 00:55:34,470 So können wir ein Beispiel dafür haben. 819 00:55:34,470 --> 00:55:38,790 Das Beispiel dafür ist, dass wir die tf, und das ist der Indexname. 820 00:55:38,790 --> 00:55:42,030 Wir werden, wie der Name setzen "Ali", bei dem Index, Kalorien gegessen, 821 00:55:42,030 --> 00:55:47,640 Wir können ein int anstelle einer Zeichenfolge setzen dieses Mal, 822 00:55:47,640 --> 00:55:52,240 und dann bei den Index gefällt, können wir eine ganze Reihe in der es genommen. 823 00:55:52,240 --> 00:55:55,490 Also das ist eine Art - es ist ein ähnliches Konzept, wie wir 824 00:55:55,490 --> 00:55:58,930 Indizes mit Zahlen, aber jetzt können wir die Indizes drehen 825 00:55:58,930 --> 00:56:03,890 um sie als Zeichenfolgen statt zu haben. 826 00:56:03,890 --> 00:56:06,070 Sie können dies auch tun, außer nur tun es individuell, 827 00:56:06,070 --> 00:56:09,400 Sie alles in einem Stück machen kann. So können Sie diese tf des Arrays sehen 828 00:56:09,400 --> 00:56:13,350 und dann setzen wir sie alle in einem riesigen eckige Klammer gesetzt. 829 00:56:13,350 --> 00:56:15,220 Damit kann die Dinge zu beschleunigen. 830 00:56:15,220 --> 00:56:19,730 Es ist mehr als eine stilistische Wahl nicht. 831 00:56:19,730 --> 00:56:21,550 Wir haben auch Loops. 832 00:56:21,550 --> 00:56:26,020 In C haben wir Schleifen, wie diese funktionieren. 833 00:56:26,020 --> 00:56:29,690 Wir hatten unser Angebot, und wir an das Ende der Liste ging von Index 0, 834 00:56:29,690 --> 00:56:31,740 und wir drucken alles, oder? 835 00:56:31,740 --> 00:56:33,880 Außer das Problem ist, für assoziative Arrays, 836 00:56:33,880 --> 00:56:36,610 wir wissen nicht unbedingt, diese numerische Indizes 837 00:56:36,610 --> 00:56:39,610 denn jetzt haben wir die Zeichenfolge Indizes. 838 00:56:39,610 --> 00:56:44,800 Jetzt verwenden wir foreach-Schleifen, die wiederum, Sie hoffentlich in pset 7 verwendet. 839 00:56:44,800 --> 00:56:48,930 Foreach-Schleifen wird nur jedes einzelne Teil der Liste kennen. 840 00:56:48,930 --> 00:56:52,450 Und es muss nicht exakt die numerischen Index, die Sie kennen. 841 00:56:52,450 --> 00:56:56,490 So haben Sie die foreach-Syntax, so ist es foreach, setzen Sie das Array. 842 00:56:56,490 --> 00:57:00,430 Also mein Array heißt pset und dann als, das Wort, 843 00:57:00,430 --> 00:57:04,530 und dann können Sie diese lokale temporäre Variable, die Sie verwenden sind gestellt 844 00:57:04,530 --> 00:57:10,690 nur für die spezifische Sache, die gehen, die spezifische zu halten ist - 845 00:57:10,690 --> 00:57:14,770 eine Instanz oder ein Abschnitt des Arrays. 846 00:57:14,770 --> 00:57:18,350 Pset num halten wird 1, und dann ist es vielleicht die Zahl 6 zu halten, 847 00:57:18,350 --> 00:57:20,410 und dann wird es die Nummer 2 zu halten. 848 00:57:20,410 --> 00:57:26,630 Aber es ist garantiert durch jeden einzelnen Wert, der im Array ist zu gehen. 849 00:57:26,630 --> 00:57:30,530 Nützliche Funktionen, die Sie in PHP wissen, sind die erfordern, 850 00:57:30,530 --> 00:57:35,880 das macht sicher, dass Sie auch bestimmte Dateien sind, Echo, Ausfahrt leer. 851 00:57:35,880 --> 00:57:40,490 Ich empfehle Ihnen bei pset 7 sehen und schauen Sie sich diese Funktionen. 852 00:57:40,490 --> 00:57:42,810 Unter Umständen müssen Sie diejenigen kennen, 853 00:57:42,810 --> 00:57:47,060 so würde ich auf jeden Fall wissen, was genau die sind alle tun. 854 00:57:47,060 --> 00:57:50,080 >> Und jetzt werden wir durch Umfang wirklich schnell gehen. 855 00:57:50,080 --> 00:57:53,490 Im Anwendungsbereich, ist PHP Art von einem funky Sache, im Gegensatz zu C, 856 00:57:53,490 --> 00:57:56,170 und so haben wir gerade gehen, um durch sie schnell gehen. 857 00:57:56,170 --> 00:57:58,930 Also sagen wir, wir beginnen an diesem Pfeil, die wir dort haben. 858 00:57:58,930 --> 00:58:02,900 Und wir werden mit $ i starten. So wird die Variable 'i' wird zu 0, 859 00:58:02,900 --> 00:58:06,730 und wir sind gerade dabei, ihn zu drucken in dem großen weißen Box auf dort zu halten. 860 00:58:06,730 --> 00:58:09,220 Wir werden mit i0 zu starten, und dann werden wir es Echo. 861 00:58:09,220 --> 00:58:12,670 So gibt es die 0. 862 00:58:12,670 --> 00:58:15,210 Und dann werden wir ihm von der for-Schleife zu erhöhen, 863 00:58:15,210 --> 00:58:17,810 und dann es geht um den Wert 1 sein. 864 00:58:17,810 --> 00:58:20,070 Man ist weniger als 3, also wird es durch die for-Schleife übergeben, 865 00:58:20,070 --> 00:58:23,230 und dann werden wir sehen, es wieder gedruckt. 866 00:58:23,230 --> 00:58:25,520 Wir werden es wieder erhöhen zu 2, 867 00:58:25,520 --> 00:58:29,860 und 2 ist kleiner als 3, so dass es dann die for-Schleife übergeben, und es wird die 2 drucken. 868 00:58:29,860 --> 00:58:35,100 Dann werden Sie beachten Sie, dass 3 nicht weniger als 3, so dass wir von der for-Schleife zu brechen. 869 00:58:35,100 --> 00:58:40,050 So, jetzt haben wir verlassen, und dann werden wir in aFunction gehen. 870 00:58:40,050 --> 00:58:45,010 Okay. So haben Sie zu beachten, dass diese Variable, die wir geschaffen haben, 871 00:58:45,010 --> 00:58:48,270 das 'i' variable, nicht lokal Gültigkeitsbereich. 872 00:58:48,270 --> 00:58:50,280 Das bedeutet, dass es nicht für die Schleife lokal, 873 00:58:50,280 --> 00:58:58,060 und Variable, die wir können immer noch auf und ändern danach, und es wird immer noch wirksam sein. 874 00:58:58,060 --> 00:59:02,160 Also, wenn Sie nun in der Funktion gehen, werden Sie sehen, dass wir auch die "i"-Variable verwenden, 875 00:59:02,160 --> 00:59:05,320 und wir werden zu erhöhen 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Sie würden denken, auf den ersten, bezogen auf C, dass das ist eine Kopie der "i"-Variable. 877 00:59:09,410 --> 00:59:12,830 Es ist eine ganz andere Sache, was richtig ist. 878 00:59:12,830 --> 00:59:16,560 Also, wenn wir es drucken, wir gehen zu drucken 'i' + +, die gehen, um zu drucken, dass 4, 879 00:59:16,560 --> 00:59:19,640 Entschuldigung - und dann sind wir los. 880 00:59:19,640 --> 00:59:22,030 Dann werden wir aus dieser Funktion zu beenden, 881 00:59:22,030 --> 00:59:24,820 und wir werden dort sein, wo dieser Pfeil ist jetzt. 882 00:59:24,820 --> 00:59:29,190 Das bedeutet, dass dann aber, auch wenn die Funktion verändert den Wert von "i", 883 00:59:29,190 --> 00:59:32,620 es hat nicht außerhalb der Funktion zu ändern, 884 00:59:32,620 --> 00:59:35,060 da die Funktion hat einen separaten Rahmen. 885 00:59:35,060 --> 00:59:38,960 Das bedeutet, dass, wenn wir echo 'i', hat es nicht in den Geltungsbereich der Funktion verändert, 886 00:59:38,960 --> 00:59:43,660 und so ist, dann werden wir Sie erneut zu drucken 3. 887 00:59:43,660 --> 00:59:47,520 Verschiedene Dinge über Umfang in PHP als in C. 888 00:59:47,520 --> 00:59:51,130 >> Jetzt in PHP und HTML. 889 00:59:51,130 --> 00:59:53,510 PHP wird verwendet, Webseiten dynamischer zu gestalten. 890 00:59:53,510 --> 00:59:58,660 Es Art von macht die Dinge anders. 891 00:59:58,660 --> 01:00:02,090 Wir haben es anders als HTML. 892 01:00:02,090 --> 01:00:05,230 Mit HTML, haben wir immer nur die gleiche statische Sache, wie, wie Rob zeigte, 893 01:00:05,230 --> 01:00:09,370 wohingegen PHP, können Sie die Dinge, die auf der Basis der Benutzer zu ändern. 894 01:00:09,370 --> 01:00:11,830 Also wenn ich das, ich habe: "Sie sind angemeldet -" und dann den Namen, 895 01:00:11,830 --> 01:00:14,420 und ich kann den Namen ändern. So jetzt der Name ist Josef, 896 01:00:14,420 --> 01:00:18,880 und es hat die "über mich", aber dann kann ich auch den Namen ändern, um Tommy zu haben. 897 01:00:18,880 --> 01:00:21,700 Und das wäre eine andere Sache sein. 898 01:00:21,700 --> 01:00:23,840 So, dann können wir auch verschiedene Dinge über ihn zu ändern, 899 01:00:23,840 --> 01:00:27,070 und es wird unterschiedliche Inhalte zeigen, die auf dem Namen. 900 01:00:27,070 --> 01:00:31,430 So können PHP Art ändern, was ist los in Ihrer Webseite ein. 901 01:00:31,430 --> 01:00:33,540 Same here. Dennoch ist zu beachten, dass sie unterschiedliche Inhalte haben, 902 01:00:33,540 --> 01:00:38,870 obwohl Sie sind technisch immer noch Zugriff auf diese Web-Seite auf der Oberfläche. 903 01:00:38,870 --> 01:00:43,450 Generieren von HTML. Es gibt 2 verschiedene Möglichkeiten, wie Sie dies tun können. 904 01:00:43,450 --> 01:00:48,980 Also werden wir durch dieses Recht jetzt gehen. Der erste Weg ist, Sie haben - ja, sorry. 905 01:00:48,980 --> 01:00:51,150 So müssen Sie nur noch Ihre regelmäßigen for-Schleife in PHP, 906 01:00:51,150 --> 01:00:56,270 und dann können Sie in PHP echo und Sie HTML aus Echo. 907 01:00:56,270 --> 01:00:58,720 Mit Rob zeigte, was Sie von HTML-Skript 908 01:00:58,720 --> 01:01:04,030 und dann mit dem PHP-Druck nur drucken Sie es aus, um die Web-Seite. 909 01:01:04,030 --> 01:01:09,520 Der alternative Weg ist, es zu tun, als ob Sie die PHP und HTML zu trennen. 910 01:01:09,520 --> 01:01:11,940 So können Sie eine Zeile PHP, die die for-Schleife beginnt zu haben, 911 01:01:11,940 --> 01:01:16,020 dann können Sie die Linie der HTML-Code in einem separaten Sache zu haben, 912 01:01:16,020 --> 01:01:19,700 und dann die Schleife zu beenden, wieder mit einem PHP. 913 01:01:19,700 --> 01:01:21,800 So ist es irgendwie trennen Sie es heraus. 914 01:01:21,800 --> 01:01:24,020 Auf der linken Seite können Sie, dass Sie alle - 915 01:01:24,020 --> 01:01:26,360 es ist nur ein Stück von PHP. 916 01:01:26,360 --> 01:01:28,510 Auf der rechten Seite können Sie sehen, dass Sie eine Reihe von PHP haben, 917 01:01:28,510 --> 01:01:32,540 Sie haben eine Reihe von HTML, und Sie haben eine Zeile PHP wieder haben. 918 01:01:32,540 --> 01:01:36,870 So trennt sie sich in das, was sie tun. 919 01:01:36,870 --> 01:01:39,330 Und Sie werden feststellen, dass so oder so, für eine von ihnen, 920 01:01:39,330 --> 01:01:41,980 sie immer noch drucken Sie das Bild, das Bild, das Bild, 921 01:01:41,980 --> 01:01:44,540 so still, dass HTML wird genauso gedruckt. 922 01:01:44,540 --> 01:01:49,870 Und dann wird man noch die 3 Bilder zeigen, bis auf Ihrer Webseite ein. 923 01:01:49,870 --> 01:01:52,820 So ist es zwei verschiedene Möglichkeiten, das Gleiche zu tun. 924 01:01:52,820 --> 01:01:55,060 >> Jetzt haben wir Formulare und Anträge. Als Rob zeigte Ihnen, 925 01:01:55,060 --> 01:01:59,400 gibt es Formen von HTML, und wir werden gerade durch diese Brise. 926 01:01:59,400 --> 01:02:02,040 Sie haben eine Aktion und eine Methode zu haben, und Ihre Aktion 927 01:02:02,040 --> 01:02:04,350 Art zeigt Ihnen, wo Sie gehen, sie zu senden sind, und die Methode ist, ob 928 01:02:04,350 --> 01:02:06,960 es geht um ein GET-oder POST sein. 929 01:02:06,960 --> 01:02:11,220 Und eine GET-Anfrage, als Rob sagte, bedeutet, dass Sie gehen, um es in eine Form gebracht sind 930 01:02:11,220 --> 01:02:15,760 und du wirst es als URL sehen, während eine POST-Anfrage werden Sie nicht in einer URL zu sehen. 931 01:02:15,760 --> 01:02:17,840 Also ein kleiner Unterschied. 932 01:02:17,840 --> 01:02:19,950 Allerdings ist eine Sache, die eine ähnliche Sache ist 933 01:02:19,950 --> 01:02:22,560 ist, dass POST und GET sind gleichermaßen verunsichert. 934 01:02:22,560 --> 01:02:26,430 So können Sie denken, dass, nur weil Sie nicht in der URL sehen es nicht, 935 01:02:26,430 --> 01:02:28,790 das bedeutet, dass der POST ist sicherer, 936 01:02:28,790 --> 01:02:34,420 Sie können aber immer noch in Ihrem Cookies sehen es in den Informationen, die Sie senden. 937 01:02:34,420 --> 01:02:38,260 Also nicht darüber nachdenken, dass der eine oder andere. 938 01:02:38,260 --> 01:02:42,160 Eine andere Sache zu beachten ist, dass Sie auch Abschnitt Variablen. 939 01:02:42,160 --> 01:02:45,850 Ihr Jungs verwendet, um dieses in pset 7 bis Ihre Benutzer-ID Informationen zu erhalten. 940 01:02:45,850 --> 01:02:48,550 Was geschah, war, dass Sie dieses assoziativen Arrays zu verwenden, 941 01:02:48,550 --> 01:02:53,310 die $ _SESSION, und dann sind Sie in der Lage, verschiedene Dinge zugreifen 942 01:02:53,310 --> 01:02:57,720 und speichern Sie verschiedene Dinge über die Seiten. 943 01:02:57,720 --> 01:03:00,750 >> Letzte Sache ist, dass wir SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 und dies ist eine Programmiersprache, um Datenbanken zu verwalten. 945 01:03:04,360 --> 01:03:08,220 Was genau sind Datenbanken? Sie sind Sammlungen von Tabellen, 946 01:03:08,220 --> 01:03:10,630 und jede Tabelle können ähnliche Arten von Objekten haben. 947 01:03:10,630 --> 01:03:14,990 So hatten wir eine Tabelle der Benutzer in Ihre Finanzen pset. 948 01:03:14,990 --> 01:03:20,610 Und warum sind sie nützlich? Denn es ist ein Weg, der Informationen dauerhaft speichern. 949 01:03:20,610 --> 01:03:22,840 Es ist ein Weg der Verfolgung und Verwaltung Dinge Dinge 950 01:03:22,840 --> 01:03:25,890 und tatsächlich sehen, es auf verschiedenen Seiten und die Verfolgung. 951 01:03:25,890 --> 01:03:29,930 Während, wenn Sie speichern sie gerade in diesem Moment ein unmittelbarer 952 01:03:29,930 --> 01:03:33,720 und dann später nutzen, werden Sie nicht in der Lage, alles, was Sie gespeichert haben zugreifen. 953 01:03:33,720 --> 01:03:37,660 Wir haben 4 wichtigsten Dinge, die wir für SQL-Befehle. 954 01:03:37,660 --> 01:03:40,190 Wir müssen wählen, einfügen, löschen und aktualisieren. 955 01:03:40,190 --> 01:03:42,880 Das sind wirklich wichtig für euch, für Ihre Quiz wissen. 956 01:03:42,880 --> 01:03:45,990 >> Wir werden schnell über jetzt gehen wählen. 957 01:03:45,990 --> 01:03:48,540 Grundsätzlich können Sie die Auswahl von Zeilen aus einer Datenbank sind. 958 01:03:48,540 --> 01:03:52,400 Also, wenn Sie, genau hier - 959 01:03:52,400 --> 01:03:56,740 wir haben diese zwei verschiedene Dinge sind, und wir wollen von der Klassen-Tabelle auswählen 960 01:03:56,740 --> 01:04:01,480 wo awesome - wo in der Spalte genial der Wert 1 ist. 961 01:04:01,480 --> 01:04:04,460 So können Sie hier sehen können, haben wir diese zwei Dinge von Klassenname, 962 01:04:04,460 --> 01:04:08,490 CS50 und Stat110, und wir haben die Klassen-IDs und der Slogan. 963 01:04:08,490 --> 01:04:13,150 So wollen wir all diese Informationen aus. 964 01:04:13,150 --> 01:04:17,480 Dann sind Sie hier sehen können, dass es Art der Kommissionierung aus dieser genial Spalte 965 01:04:17,480 --> 01:04:25,170 wo all die Dinge ein, und dann die Klassen-ID, Klassennamen und Slogan, dass es heraus hat. 966 01:04:25,170 --> 01:04:28,100 Wie genau macht man das im Code zu tun? Sie müssen PHP zu verwenden. 967 01:04:28,100 --> 01:04:33,830 Also das ist eine Art, wie PHP und SQL sind miteinander verwandt. 968 01:04:33,830 --> 01:04:38,130 Jetzt haben wir unseren Code, und wir werden unsere Abfrage-Funktion verwenden 969 01:04:38,130 --> 01:04:41,370 wie wir in pset 7, und wir werden die SQL-Abfrage. 970 01:04:41,370 --> 01:04:43,870 Dann sind wir zu haben - 971 01:04:43,870 --> 01:04:46,280 müssen wir immer, wenn Zeile Triple gleich, wenn falsche überprüfen. 972 01:04:46,280 --> 01:04:49,010 , Um die Art und den Wert überprüfen Also noch einmal, Sie wollen, 973 01:04:49,010 --> 01:04:53,880 und dann, wenn es nicht funktioniert, dann können Sie sich zu entschuldigen, wie üblich, wie wir in pset 7 haben wollen. 974 01:04:53,880 --> 01:04:55,870 Ansonsten, durch alles, was mit diesen handlichen möchten Sie eine Schleife 975 01:04:55,870 --> 01:04:59,410 foreach-Schleifen, dass wir gingen gerade über. 976 01:04:59,410 --> 01:05:01,280 Jetzt, da wir durch Schleifen und wir haben es Vergangenheit gemacht haben, 977 01:05:01,280 --> 01:05:05,080 nehmen wir an, dass unsere Abfrage übergeben, haben wir jetzt unsere foreach-Schleife. 978 01:05:05,080 --> 01:05:11,050 Und die erste Zeile, die es hat, also hier ist die Reihe, rechts hier, es ist eingerahmt. 979 01:05:11,050 --> 01:05:14,010 Es wird alle Informationen, die es bekommen ausdrucken. 980 01:05:14,010 --> 01:05:18,070 Also, es wird am Ende ausdrucken "Wollen Sie HTML lernen?" 981 01:05:18,070 --> 01:05:23,370 Dann, es wird in die nächste Zeile zu gehen, weil es die erste for-Schleife beendet ist, 982 01:05:23,370 --> 01:05:26,510 und so ist, dann es geht um drucken Sie die zweite Zeile von ihm, 983 01:05:26,510 --> 01:05:32,120 die gehen, um STAT110 sein, Finden Sie alle Moments. 984 01:05:32,120 --> 01:05:34,290 >> Eine letzte Sache ist, die auf SQL Schwachstellen. 985 01:05:34,290 --> 01:05:37,300 Ich weiß, dass David berührte diese ein wenig in der Vorlesung. 986 01:05:37,300 --> 01:05:40,730 Sie können diese später zu lesen. Es ist wirklich lustig. 987 01:05:40,730 --> 01:05:45,320 SQL Injection ist eine Art heikle Sache. 988 01:05:45,320 --> 01:05:49,890 Lassen Sie uns sagen, dass Sie nur diese Variablen kleben rechts in Ihrer Abfrage 989 01:05:49,890 --> 01:05:52,290 wie Sie in dieser ersten Zeile sehen können. 990 01:05:52,290 --> 01:05:54,520 So scheint es in Ordnung, oder? Sie sind gerade dabei, den Benutzernamen 991 01:05:54,520 --> 01:05:58,820 und Passwort, um Ihre SQL-Abfrage, und Sie es aus und versenden bekommen, was in der Datentabelle ist möchten. 992 01:05:58,820 --> 01:06:01,450 Das scheint ziemlich einfach. So können sagen, jemand stellt in, 993 01:06:01,450 --> 01:06:04,910 für das Passwort, diese oder Text hier - 994 01:06:04,910 --> 01:06:06,780 sollte eigentlich in der roten Box sein. 995 01:06:06,780 --> 01:06:11,920 Also lassen Sie uns sagen, dass sie setzen, dass Passwort in - das ist, was sie eingeben. 996 01:06:11,920 --> 01:06:16,520 Also sie setzen oder "1" = 1 ist. 997 01:06:16,520 --> 01:06:20,880 Ein bisschen eine dumme vergessen zu lassen. 998 01:06:20,880 --> 01:06:25,070 Nun wollen wir ersetzen sie nur in, und Sie werden jetzt beachten Sie, dass in dieser SQL-Abfrage, 999 01:06:25,070 --> 01:06:29,090 wertet, um immer wahr, weil Sie werden bemerken, dass 1000 01:06:29,090 --> 01:06:32,240 Sie können SQL-Abfrage wählen Sie alle diese Informationen 1001 01:06:32,240 --> 01:06:35,420 oder Sie können einfach nur 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Damit wird immer auf true zu evaluieren. 1003 01:06:41,030 --> 01:06:46,610 Das wird nicht wirklich funktionieren, weil das bedeutet, dass der Hacker in Ihr System zu brechen. 1004 01:06:46,610 --> 01:06:49,300 Die Lösung hierfür ist, dass Sie die PDO-System benutzen, haben, 1005 01:06:49,300 --> 01:06:51,360 was bedeutet, dass Sie Fragezeichen verwenden, 1006 01:06:51,360 --> 01:06:53,350 das ist, was euch in pset 7 verwendet wird, 1007 01:06:53,350 --> 01:06:57,620 wohin Sie gehen, um ein Fragezeichen im Ort, wo man etwas setzen wollen zu verwenden, 1008 01:06:57,620 --> 01:07:01,430 und dann wirst du ein Komma, und dann werden Sie danach haben, 1009 01:07:01,430 --> 01:07:07,610 nach der Schnur, die verschiedenen Variablen, die Sie in Ihre Fragezeichen zu ersetzen. 1010 01:07:07,610 --> 01:07:10,330 So werden Sie hier zu beachten, dass ich jetzt diese roten Fragezeichen. 1011 01:07:10,330 --> 01:07:15,420 Dann legte ich die Variablen nach meiner Saiten, damit ich weiß, sie in dieser Reihenfolge danach ersetzen. 1012 01:07:15,420 --> 01:07:18,470 Das wird dafür sorgen, dass wenn jemand es so, 1013 01:07:18,470 --> 01:07:24,050 und sie haben die 1 = 1 oder Situation, die sicherstellen wird, 1014 01:07:24,050 --> 01:07:30,490 im Backend, stellen Sie sicher, dass es nicht tatsächlich die SQL-Abfrage zu brechen. 1015 01:07:30,490 --> 01:07:33,660 Okay, das ist ziemlich viel es, ein Wirbelwind von PHP und SQL. 1016 01:07:33,660 --> 01:07:41,520 Viel Glück an euch alle, und jetzt zu Erz. 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Okay, alle. Zeit zu gehen über einige JavaScript 1018 01:07:44,270 --> 01:07:48,840 und einige andere Dinge sehr schnell, so dass wir nicht halten Sie sich heute Abend. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Ja. JavaScript ist eine Art coole Sache, angeblich. 1020 01:07:56,930 --> 01:07:59,090 Die Dinge, die Sie wirklich brauchen, um über JavaScript wissen, ist es ein bisschen wie 1021 01:07:59,090 --> 01:08:03,810 die clientseitige Ende, was Ihre Web-App wird zu tun. 1022 01:08:03,810 --> 01:08:08,280 Es gibt einige Dinge, die Sie wollen einfach nicht, um all der Zeit auf der Server-Seite zu nehmen. 1023 01:08:08,280 --> 01:08:12,880 All die kleinen Interaktionen, Hervorhebung eine Sache, so etwas verschwinden. 1024 01:08:12,880 --> 01:08:15,340 Sie wollen wirklich nicht zu Ihrem Server reden die ganze Zeit dafür zu haben. 1025 01:08:15,340 --> 01:08:18,069 Und einige, dass es nicht einmal möglich, auf der Server-Seite zu tun. 1026 01:08:18,069 --> 01:08:21,899 Das ist, warum wir so etwas brauchen JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Coole Dinge über JavaScript: Es wird dynamisch typisiert. 1028 01:08:24,359 --> 01:08:27,149 Was dies bedeutet, ist, dass Ihr Programm nicht wissen müssen 1029 01:08:27,149 --> 01:08:30,970 was genau sind die Variablen, wenn Sie schreiben es aus. 1030 01:08:30,970 --> 01:08:34,510 Es wird nur eine Art Reim darauf machen, wie es läuft. 1031 01:08:34,510 --> 01:08:37,520 Andere Dinge, die es zu kühl sind: Es ist eine geschweifte Klammer Sprache, 1032 01:08:37,520 --> 01:08:41,359 was bedeutet, die Syntax ist ähnlich zu C und PHP. 1033 01:08:41,359 --> 01:08:47,050 Sie haben nicht zu viel Nacharbeit zu tun, wenn Sie lernen JavaScript sind. 1034 01:08:47,050 --> 01:08:49,180 Hier haben wir ein wenig JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Interessante Sache hier ist, dass, wenn man es betrachtet, 1036 01:08:52,560 --> 01:08:56,330 wir haben ein bisschen von JavaScript direkt in der Kopf-Tag. 1037 01:08:56,330 --> 01:08:59,479 Was tut, ist im Grunde nur eine JavaScript-Datei enthalten. 1038 01:08:59,479 --> 01:09:02,260 Dies ist eine Möglichkeit, Sie JavaScript in Ihr Programm aufzunehmen. 1039 01:09:02,260 --> 01:09:06,910 Dann ist die zweite etwas tatsächlich einige Inline-JavaScript 1040 01:09:06,910 --> 01:09:10,790 sehr ähnlich zu einem Inline-Stil mit CSS 1041 01:09:10,790 --> 01:09:16,180 und du bist nur einen Code schreiben sehr schnell dort. 1042 01:09:16,180 --> 01:09:18,120 JavaScript muss Arrays. 1043 01:09:18,120 --> 01:09:20,850 Nur ein weiterer Weg, um Daten herum zu halten, sehr nützlich. 1044 01:09:20,850 --> 01:09:25,180 Sehr schöne und einfache Syntax. 1045 01:09:25,180 --> 01:09:29,870 Sie eckige Klammern, alles zugreifen und halten alles zusammen. 1046 01:09:29,870 --> 01:09:35,020 Nichts zu komplex. 1047 01:09:35,020 --> 01:09:38,630 Die kühle Sache über JavaScript-und Scripting-Sprachen im Allgemeinen 1048 01:09:38,630 --> 01:09:40,920 ist, dass Sie nicht haben, um über Feldgrößen zu kümmern. 1049 01:09:40,920 --> 01:09:43,880 Sie können nur array.length und verfolgen es, 1050 01:09:43,880 --> 01:09:46,960 und auch das Array wachsen oder schrumpfen, wie Sie es brauchen. 1051 01:09:46,960 --> 01:09:49,279 So müssen Sie auch brauchen, um über jede Art von Sorgen, 1052 01:09:49,279 --> 01:09:57,050 oh nein, ich muss mehr Dinge, oder so etwas zuzuweisen. 1053 01:09:57,050 --> 01:10:00,090 >> Die coole Sache hier ist, dass JavaScript hat etwas Objekte genannt. 1054 01:10:00,090 --> 01:10:04,800 Es ist eine objektorientierte Sprache, was es hat, ist im Wesentlichen 1055 01:10:04,800 --> 01:10:10,100 eine Möglichkeit für Sie, um Gruppendaten zusammen, ähnlich wie eine Struktur, 1056 01:10:10,100 --> 01:10:17,280 aber man kann es wie eine Struktur oder in einem assoziativen Array Syntax zugreifen können. 1057 01:10:17,280 --> 01:10:22,520 Es ist ziemlich einfach, und was Sie tun können, mit diesem zusammen ist Gruppendaten 1058 01:10:22,520 --> 01:10:24,810 wenn Sie eine Reihe von Daten, die im Zusammenhang ist zu haben. 1059 01:10:24,810 --> 01:10:26,850 Weil es all das, was Sie beschreiben, ein Auto benötigen, 1060 01:10:26,850 --> 01:10:29,050 Sie brauchen nicht, um es in einer Reihe von verschiedenen Orten haben. 1061 01:10:29,050 --> 01:10:35,300 Sie können nur kleben sie in ein Objekt in JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Wie Sie wahrscheinlich wissen, ist das Durchlaufen eines dieser lästigen Aufgaben. 1063 01:10:39,090 --> 01:10:43,810 Sie tun es nur etwas über eine immer wieder. Sie müssen sich an jedem Objekt im Auto zu sprechen, 1064 01:10:43,810 --> 01:10:47,340 oder Sie müssen über jedes Element in einer Liste oder so ähnlich gehen. 1065 01:10:47,340 --> 01:10:51,770 So JavaScript muss, ähnlich wie bei PHP, einer foreach-Syntax. 1066 01:10:51,770 --> 01:10:54,590 In diesem Fall ist es eine für die in-Schleife. 1067 01:10:54,590 --> 01:10:57,300 Sie wollen diese nur für Objekte zu verwenden. 1068 01:10:57,300 --> 01:11:01,030 Es gibt einige Probleme, die, wenn Sie diese auf Arrays auftreten. 1069 01:11:01,030 --> 01:11:03,750 Es ist in der Regel eines der Dinge, obwohl, das ist sehr nützlich, 1070 01:11:03,750 --> 01:11:06,590 weil Sie eine Menge Overhead beseitigen 1071 01:11:06,590 --> 01:11:10,270 weil Sie nicht haben, um alles, was in Ihrem Objekt selbst hochzuziehen. 1072 01:11:10,270 --> 01:11:12,300 Sie müssen nicht alle wichtigen Namen erinnern. 1073 01:11:12,300 --> 01:11:18,270 Sie einfach irgendwie bekommen sie zurück in dieser Syntax. 1074 01:11:18,270 --> 01:11:21,500 In diesem, für, Sie wollen einfach nur daran zu erinnern, 1075 01:11:21,500 --> 01:11:27,180 dass Sie immer wieder sind alle Schlüssel, in einer sehr ähnlichen Weise zu Tisch Hash. 1076 01:11:27,180 --> 01:11:30,880 Wenn Sie sich erinnern, dass aus, wenn Sie in einem String setzen würde, Sie könnten etwas raus 1077 01:11:30,880 --> 01:11:33,840 das wäre eine zugehörige Wert mit ihm haben. 1078 01:11:33,840 --> 01:11:36,360 Was man damit machen kann, ist man sagen kann, okay, 1079 01:11:36,360 --> 01:11:42,120 Ich habe in einem Auto, und ich nannte es ein Ferrari. 1080 01:11:42,120 --> 01:11:45,290 So können Sie in der Zeichenfolge Ferrari später wieder setzen kann, und Sie können die raus. 1081 01:11:45,290 --> 01:11:50,000 Und Sie können, dass in einer Schleife zu tun, mit dem in-Schleife. 1082 01:11:50,000 --> 01:11:53,320 Also einfach mehr über Objekte. Das Wichtigste von dem aus Sie sich merken müssen, 1083 01:11:53,320 --> 01:12:00,340 ist, dass man das Objekt Struktur ähnliche Syntax verwenden, wann immer Sie wollen, mit diesen, 1084 01:12:00,340 --> 01:12:04,590 außer wenn das, was Sie gehen, um als String verwenden ist kein gültiger Variablenname. 1085 01:12:04,590 --> 01:12:07,650 Also, wenn Sie an dieser dort zu suchen, haben wir Schlüssel mit Leerzeichen. 1086 01:12:07,650 --> 01:12:12,500 Nun, wenn Sie object.key gestellt waren, Raum, mit, Raum, Räume, 1087 01:12:12,500 --> 01:12:15,320 dass wäre einfach nicht sinnvoll, syntaktisch. 1088 01:12:15,320 --> 01:12:22,730 So können nur Sie, dass mit dieser Art von Klammer-Syntax zu tun. 1089 01:12:22,730 --> 01:12:26,520 >> Auch ist JavaScript sehr Umfang weise zu PHP. 1090 01:12:26,520 --> 01:12:29,050 Sie haben 2 Möglichkeiten der Adressierung Umfang. 1091 01:12:29,050 --> 01:12:31,960 Sie können nicht die var vor einem variablen, 1092 01:12:31,960 --> 01:12:34,060 und das bedeutet nur, das ist global. 1093 01:12:34,060 --> 01:12:37,050 Sie können es von überall zu sehen. Auch wenn Sie dies in einer if-Anweisung gesetzt waren, 1094 01:12:37,050 --> 01:12:42,430 anderswo im Code nach diesem Punkt könnte man diese Variable zu sehen. 1095 01:12:42,430 --> 01:12:46,730 Eine andere Sache ist aber, mit der var, es ist begrenzt, was auch immer Sie sind in. Funktion 1096 01:12:46,730 --> 01:12:48,870 Wenn Sie nicht in einer Funktion sind, gut, es ist global. 1097 01:12:48,870 --> 01:12:53,900 Aber wenn du in einer Funktion gibt es nur innerhalb dieser Funktion sichtbar. 1098 01:12:53,900 --> 01:12:56,420 Ich habe nicht ein Beispiel, aber, ja. Es ist eines dieser Dinge, wo 1099 01:12:56,420 --> 01:12:59,900 Sie verwalten können, welche Variablen Sie globale sein wollen, 1100 01:12:59,900 --> 01:13:03,810 welche Variablen Sie wollen lokal zu sein, aber Sie müssen vorsichtig sein, über diese zu sein, 1101 01:13:03,810 --> 01:13:06,890 weil Sie nicht über die Art der Feinkorn Kontrolle, die Sie in C, 1102 01:13:06,890 --> 01:13:15,820 wo, wenn etwas in eine for-Schleife deklariert, es geht um, dass zur Laufenden zu bleiben. 1103 01:13:15,820 --> 01:13:18,790 Das, was wir eigentlich egal, über die Verwendung von JavaScript manipuliert Web-Seiten, oder? 1104 01:13:18,790 --> 01:13:21,800 Ich meine, das ist, warum wir das tun. 1105 01:13:21,800 --> 01:13:23,840 >> Um das zu tun, haben wir so etwas wie das DOM zu verwenden. 1106 01:13:23,840 --> 01:13:25,850 Das Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Im Grunde, was es tut, ist es nimmt alle Ihre HTML 1108 01:13:29,430 --> 01:13:34,110 und Modelle es in einen Haufen von Objekten, die ineinander verschachtelt sind. 1109 01:13:34,110 --> 01:13:37,080 Sie beginnen mit so etwas. 1110 01:13:37,080 --> 01:13:44,770 Sie haben auf der rechten Seite für mich, eine Reihe von Code gibt, ist irgendwie - 1111 01:13:44,770 --> 01:13:46,640 Sie würden denken, das wäre sehr schwer zu manipulieren, 1112 01:13:46,640 --> 01:13:48,700 denn Sie würden durch ein Bündel von Text Parsen 1113 01:13:48,700 --> 01:13:52,080 und mit zu Stück auseinander Dinge. Und was, wenn es nicht korrekt formatiert? 1114 01:13:52,080 --> 01:13:54,880 Schlimme Dinge passieren würde. 1115 01:13:54,880 --> 01:13:58,140 So JavaScript erledigt dies für Sie, und Sie haben eine schöne Datenstruktur zu erhalten, 1116 01:13:58,140 --> 01:14:01,390 wie die, die zu meiner Linken, wo Sie nur noch ein Dokument, 1117 01:14:01,390 --> 01:14:03,530 und innen, dass Sie so etwas wie HTML, 1118 01:14:03,530 --> 01:14:05,600 und innen, dass Sie einen Kopf und einen Körper, 1119 01:14:05,600 --> 01:14:08,420 und innerhalb dieser Kopf Sie einen Titel haben, etcetera, etcetera, etcetera. 1120 01:14:08,420 --> 01:14:11,810 Dies vereinfacht die Manipulation einer Web-Seite, so dass es nur, 1121 01:14:11,810 --> 01:14:14,190 oh, ich will nur auf dieses Objekt sprechen. 1122 01:14:14,190 --> 01:14:21,340 Sortieren von einer sehr ähnlichen Weise würden Sie zu einem anderen Objekt, das Sie selbst gemacht zu sprechen. 1123 01:14:21,340 --> 01:14:25,980 Wie ich schon sagte, ist alles, das DOM-Objekt im Dokument. 1124 01:14:25,980 --> 01:14:29,290 Entweder ist es nur an einer Stelle und dann kann man in ihm gehen, um Dinge zu finden, 1125 01:14:29,290 --> 01:14:33,880 und Sie können es tun - das ist der alte Stil, es zu tun, da oben, 1126 01:14:33,880 --> 01:14:38,130 wo Sie tun document.getElementById, und dann den Namen, 1127 01:14:38,130 --> 01:14:42,420 und wie Sie wahrscheinlich sagen kann, erhält diese nach einer Weile sehr unhandlich. 1128 01:14:42,420 --> 01:14:44,480 So haben Sie wahrscheinlich nicht wollen, das zu tun. Das ist, warum wir 1129 01:14:44,480 --> 01:14:48,760 das nächste, was wir gehen danach zu reden. 1130 01:14:48,760 --> 01:14:52,510 Das Wichtigste dabei ist, dass alles in Ordnung, Sie haben all diese Elemente, richtig? 1131 01:14:52,510 --> 01:14:56,400 Also vielleicht kann ich die Farbe etwas, wenn die Seite geladen ändern. 1132 01:14:56,400 --> 01:14:58,380 So what? Was, wenn mein Benutzer klickt auf etwas? 1133 01:14:58,380 --> 01:15:00,540 Ich will es etwas Interessantes zu tun, wenn sie auf etwas. 1134 01:15:00,540 --> 01:15:02,600 Das ist, warum wir Veranstaltungen. 1135 01:15:02,600 --> 01:15:05,330 Sie können, im Grunde, finden jedes Element in Ihrem DOM, 1136 01:15:05,330 --> 01:15:08,560 und dann sagen, hey. Wenn diese lädt oder jemand klickt, 1137 01:15:08,560 --> 01:15:11,410 oder wenn sie die Maus über sie, tun Sie etwas mit ihm. 1138 01:15:11,410 --> 01:15:15,330 Und was Sie haben, ist, können Sie Funktionen, die diese verarbeiten für Sie haben. 1139 01:15:15,330 --> 01:15:17,980 Diese Funktionen sind Event-Handler. 1140 01:15:17,980 --> 01:15:20,440 Was sie sind - es ist nur eine andere Art zu sagen, 1141 01:15:20,440 --> 01:15:23,500 Diese Funktion wird nur ausgeführt, wenn dieses Ereignis passiert. 1142 01:15:23,500 --> 01:15:28,070 So ist es das Ereignis behandelt, die auftritt. 1143 01:15:28,070 --> 01:15:30,810 Dies ist, wie Sie das Layout einen Event-Handler. 1144 01:15:30,810 --> 01:15:34,750 Ich habe eine Taste, und wenn Sie darauf klicken, explodiert sie. 1145 01:15:34,750 --> 01:15:40,560 Also klicken Sie nicht auf die Taste. 1146 01:15:40,560 --> 01:15:42,910 Dies ist eine Möglichkeit der Annäherung, nicht wahr? 1147 01:15:42,910 --> 01:15:46,430 Sie haben eine Taste-Tag, und klicken Sie auf eine Zeichenfolge, die sagt haben, 1148 01:15:46,430 --> 01:15:50,460 oh, übrigens, ich mache diesen explodierenden Sache für mich. 1149 01:15:50,460 --> 01:15:53,990 Ansonsten ist es wie eine normale Taste, die Sie gerade gemacht. 1150 01:15:53,990 --> 01:15:56,550 Sie können dies auch tun, einen anderen Weg, 1151 01:15:56,550 --> 01:16:02,770 durch Greifen das DOM-Element, aber das sparen wir uns, nachdem wir über jQuery sprechen. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Es ist eine Bibliothek, die Cross-Browser ist. 1153 01:16:07,580 --> 01:16:09,580 Sie können es in so ziemlich alles zu verwenden. 1154 01:16:09,580 --> 01:16:12,090 Und es gibt dir nur eine Menge von Werkzeugen, mit zu arbeiten. 1155 01:16:12,090 --> 01:16:15,850 Da JavaScript, während kraftvoll, nicht alle Werkzeuge, die Sie brauchen 1156 01:16:15,850 --> 01:16:20,550 aus der Box, um eine Web-App wirklich angehen möchten Sie vielleicht zu tun. 1157 01:16:20,550 --> 01:16:24,650 So vereinfacht es eine Menge Dinge, gibt Ihnen eine Menge von Funktionen 1158 01:16:24,650 --> 01:16:28,760 aus der Box, die Sie normalerweise haben, um sich wieder zu schreiben, über und über und über. 1159 01:16:28,760 --> 01:16:31,600 Und macht die Dinge sehr einfach. 1160 01:16:31,600 --> 01:16:35,780 Sie haben auch Selektoren, die Sie alle jene Elemente herausnehmen lassen 1161 01:16:35,780 --> 01:16:42,800 von Ihrem DOM viel einfacher, anstatt diese sehr lange Funktionsaufrufe zu verwenden. 1162 01:16:42,800 --> 01:16:46,630 Mehr über diese Selektoren. Sie haben, dort haben Sie, sagen wir, 1163 01:16:46,630 --> 01:16:49,800 Ich möchte ein Element mit der ID zu bekommen "rock". 1164 01:16:49,800 --> 01:16:56,450 Nun, in jQuery, es ist nur $ und dann eine Zeichenkette, die ein Pfund hat, und dann "rock". 1165 01:16:56,450 --> 01:17:01,960 Es ist sehr einfach und viel schneller als die traditionelle JavaScript Weg, um dieses Problem. 1166 01:17:01,960 --> 01:17:06,120 Und Sie haben ähnliche Dinge für Klassen und Elementtypen. 1167 01:17:06,120 --> 01:17:08,140 jQuery ist - eine der coolen Features ist, können Sie eine Art zu komprimieren 1168 01:17:08,140 --> 01:17:14,350 Sie Ihre Anfragen an das DOM sehr, sehr schnell. 1169 01:17:14,350 --> 01:17:18,980 Jetzt sind wir zurück zu Event-Handling, und dies ist, wie würden Sie eine Veranstaltung in jQuery zu behandeln. 1170 01:17:18,980 --> 01:17:23,090 Also, was wir hier los ist, wir sagen, alles in Ordnung. Ich habe ein Script-Tag, oder? 1171 01:17:23,090 --> 01:17:25,400 Also ich habe diese Inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Was wir tun werden ist, dass wir sagen, alles in Ordnung. 1173 01:17:27,750 --> 01:17:30,860 Wenn das Dokument fertig ist, was bedeutet, dass das Dokument geladen ist, 1174 01:17:30,860 --> 01:17:34,660 werden wir gehen in dieser Funktion, und wir sagen, okay, 1175 01:17:34,660 --> 01:17:37,060 Diese Funktion ist eigentlich etwas anderes zu tun. 1176 01:17:37,060 --> 01:17:42,320 Es ist im Grunde sagen, alles in Ordnung, hol mir das Element mit der ID "myid." 1177 01:17:42,320 --> 01:17:47,960 Und dann geben diese eine Funktion Handler, wenn Sie darauf klicken ausführt. 1178 01:17:47,960 --> 01:17:49,820 Im Grunde, was das bedeutet ist, heißt es, alles in Ordnung. 1179 01:17:49,820 --> 01:17:52,630 Die Seite wird geladen, so werde ich in, finden Sie dieses Element, 1180 01:17:52,630 --> 01:17:56,420 geben Sie diese Ereignishandler, und es im Grunde stellt Ihre Seite für Sie. 1181 01:17:56,420 --> 01:18:00,520 Und das ist, wie Sie über die Ereignisbehandlung denken. 1182 01:18:00,520 --> 01:18:06,310 Sie wollen einfach nur zu denken, okay, wenn etwas eintritt, was will ich passieren? 1183 01:18:06,310 --> 01:18:10,520 Sie wollen nicht zu denken, okay, ich muss sicher, dass diese Sache im Gespräch mit dieser Sache zu machen, 1184 01:18:10,520 --> 01:18:14,660 diese Sache blah blah blah, weil Sie nur wollen, was in Bezug auf die Ereignisse zu sprechen. 1185 01:18:14,660 --> 01:18:17,650 Wenn dies geschieht, so geschieht dies. Wenn dies geschieht, passiert es, dass. 1186 01:18:17,650 --> 01:18:20,240 Und wenn es andere Dinge auslösen, das ist toll. 1187 01:18:20,240 --> 01:18:22,150 Aber Sie wollen nicht zu versuchen und tun komplizierten Code 1188 01:18:22,150 --> 01:18:24,130 wo man triggert mehrere Dinge zur gleichen Zeit, 1189 01:18:24,130 --> 01:18:28,860 weil Sie gerade dabei, sich ein Kopfschmerz zu geben. 1190 01:18:28,860 --> 01:18:32,340 >> Alles klar. Jetzt können wir unsere Seite, um Ereignisse zu verarbeiten, 1191 01:18:32,340 --> 01:18:35,640 aber sagen wir mal meine Benutzer auf eine Schaltfläche klickt. 1192 01:18:35,640 --> 01:18:38,040 Was ist, wenn ich möchte, dass die Anfrage zurück an den Server zu senden, 1193 01:18:38,040 --> 01:18:41,100 aber ich will nicht, um die Seite neu zu laden, da mit, eine neue Seite laden 1194 01:18:41,100 --> 01:18:44,390 jedes Mal bekommt Art von langweilig, und warum muss ich 1195 01:18:44,390 --> 01:18:47,430 um den Header wieder nach unten ziehen und die Fußzeile wieder 1196 01:18:47,430 --> 01:18:49,670 und alle Elemente der Seite erneut 1197 01:18:49,670 --> 01:18:53,180 nur, um die Begrüßung oder die Zeit, zu aktualisieren? 1198 01:18:53,180 --> 01:18:55,290 Also das ist, warum wir so etwas wie Ajax haben. 1199 01:18:55,290 --> 01:18:59,150 Was wir hier mit Ajax zu tun ist, können wir sagen, okay, 1200 01:18:59,150 --> 01:19:01,290 Ich möchte einige Daten an den Server zu senden, 1201 01:19:01,290 --> 01:19:04,010 und ich möchte eine Antwort zurück zu bekommen, damit ich meine Seite zu aktualisieren, 1202 01:19:04,010 --> 01:19:12,120 oder vielleicht auch nur tun einige algorithmische Berechnung, die nicht unbedingt zeigen, ist alles, was für den Benutzer. 1203 01:19:12,120 --> 01:19:15,500 Was wollen Sie dies tun? Nun müssen Sie eine URL, die Sie sprechen müssen. 1204 01:19:15,500 --> 01:19:18,650 Ihr Server kann nicht nur magisch aus dem Nichts hören. 1205 01:19:18,650 --> 01:19:21,960 Sie müssen einen bestimmten Ort Sie diese Daten an haben. 1206 01:19:21,960 --> 01:19:26,240 Und Sie müssen auch einige Daten zu schicken, oder vielleicht ist es ein datenlosen Abfrage. 1207 01:19:26,240 --> 01:19:31,380 Sie wollen einfach nur zurück an den Server anpingen und sagen, hey, am Leben, oder so ähnlich, dass ich bin. 1208 01:19:31,380 --> 01:19:35,150 Und dann hast du eine Funktion, die im Grunde mit Erfolg behandelt werden soll. 1209 01:19:35,150 --> 01:19:38,250 Angenommen, Sie haben einige Informationen wieder vom Server, 1210 01:19:38,250 --> 01:19:42,960 und Sie wollen den Titel des Benutzers auf ihrer Seite ändern möchten. 1211 01:19:42,960 --> 01:19:44,930 So können Sie die Informationen zurück bekommen würde, 1212 01:19:44,930 --> 01:19:48,860 und Sie würden, dass auf den Bildschirm zu schieben. 1213 01:19:48,860 --> 01:19:51,170 Was passiert, ist, wenn die Seite fertig ist, 1214 01:19:51,170 --> 01:19:56,500 Sie auf eine Funktion zu erstellen, klicken Sie für diese Schaltfläche namens Anmeldefenster. 1215 01:19:56,500 --> 01:19:58,810 Was dies dann tut, ist, dass, wenn Taste gedrückt wird, 1216 01:19:58,810 --> 01:20:03,700 Sie greetings.php zu sprechen, eine POST-Anforderung machen Sie, 1217 01:20:03,700 --> 01:20:07,290 und Sie sagen, hey, hol mir etwas von Ihrer Seite. 1218 01:20:07,290 --> 01:20:09,890 Wir wissen nicht wirklich brauchen, um zu beschreiben, aber greetings.php, 1219 01:20:09,890 --> 01:20:12,480 lasst uns einfach sagen, gibt zurück "Hallo Welt". 1220 01:20:12,480 --> 01:20:15,650 Also zurück bekommen wir diese "Hallo Welt", und auf den Erfolg dieser, 1221 01:20:15,650 --> 01:20:20,730 unter der Annahme, nichts schief geht, dann werden wir nur an diese Ziel Platz zu gehen 1222 01:20:20,730 --> 01:20:25,720 dass wir angegeben und wir nur halten die Antwort dort. 1223 01:20:25,720 --> 01:20:31,560 Und das ist eine sehr einfache Möglichkeit der Einrichtung eines Ajax-Abfrage. 1224 01:20:31,560 --> 01:20:34,340 >> Sehr schnell, Rob Art erwähnte dies bereits, 1225 01:20:34,340 --> 01:20:37,170 Dinge schief gehen, können schlimme Dinge passieren, 1226 01:20:37,170 --> 01:20:42,660 so dass Sie sich mit diesen HTTP-Antwortcodes vertraut machen wollen. 1227 01:20:42,660 --> 01:20:46,030 Was diese sind nur, wie, 200, ging alles okay. 1228 01:20:46,030 --> 01:20:48,670 Etwas anderes, schlimme Dinge passiert. 1229 01:20:48,670 --> 01:20:50,790 Es ist in der Regel das, was Sie sich erinnern wollen. 1230 01:20:50,790 --> 01:20:53,440 Aber es ist schön, all diese kennen. 1231 01:20:53,440 --> 01:20:55,970 Und schließlich, sobald wir durch all das weg, 1232 01:20:55,970 --> 01:20:58,680 wir müssen sehr schnell über Design zu sprechen, 1233 01:20:58,680 --> 01:21:00,620 und dann können wir euch alle verlassen. 1234 01:21:00,620 --> 01:21:03,410 Design. Dinge, die Sie sich erinnern wollen. 1235 01:21:03,410 --> 01:21:06,950 Stellen Sie sich folgende Fragen: Wer werden Sie mit diesem? 1236 01:21:06,950 --> 01:21:09,580 Was werden sie eingesetzt? Was meine Nutzer kümmern? 1237 01:21:09,580 --> 01:21:11,750 Was sie nicht zu kümmern? 1238 01:21:11,750 --> 01:21:14,500 Sie wollen einfach nicht, um eine App zu machen und lassen Sie sie einfach wachsen 1239 01:21:14,500 --> 01:21:18,270 und werden diese riesige, alles verzehr Sache, die Sie nicht einmal beenden kann. 1240 01:21:18,270 --> 01:21:23,900 Sie wollen diskrete Ziele und Pläne und Dinge, die Sie ansprechen wollen. 1241 01:21:23,900 --> 01:21:29,000 Machen Sie es mühelos. All dies erklärt, im Grunde 1242 01:21:29,000 --> 01:21:34,950 machen es dem Anwender leicht, es zu benutzen, machen Sie es nicht ein riesiger Klecks Text wie dieser Folie ist, eigentlich. 1243 01:21:34,950 --> 01:21:38,020 Sie wollen nur, dass es etwas, wo es sehr einfach für jemanden, gehen in sein 1244 01:21:38,020 --> 01:21:40,800 und tun, was sie tun wollen. 1245 01:21:40,800 --> 01:21:42,920 Sie wollen nicht, sie zu haben, um 5 Seiten navigieren 1246 01:21:42,920 --> 01:21:45,460 , um Ihre Hauptfunktion Ihrer Website. 1247 01:21:45,460 --> 01:21:49,290 Wenn Google hatte vor 5 Seiten könnten Sie sogar etwas zu suchen, 1248 01:21:49,290 --> 01:21:53,080 niemand es verwenden würden. 1249 01:21:53,080 --> 01:21:55,890 Und schließlich, Papier-Prototyp, Fokusgruppe. 1250 01:21:55,890 --> 01:21:59,220 Haben Sie gute Design und Testverfahren. 1251 01:21:59,220 --> 01:22:00,730 Nur weil Sie denken, dass es für Sie arbeitet, 1252 01:22:00,730 --> 01:22:04,860 bedeutet nicht, dass jemand denkt, dass es funktioniert. 1253 01:22:04,860 --> 01:22:14,490 Aber ja, das ist es. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]