1 00:00:00,000 --> 00:00:02,270 >> [Comentari: Concurs 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Universitat de Harvard] 3 00:00:04,620 --> 00:00:07,660 [Aquest és CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Benvinguts tots. Aquesta és una ressenya de prova 1. 5 00:00:11,610 --> 00:00:15,040 Així com un descàrrec de responsabilitat, és a dir - vull dir, anem a tractar de cobrir 6 00:00:15,040 --> 00:00:17,770 tant material com sigui possible, però això no vol dir que 7 00:00:17,770 --> 00:00:20,780 anem a cobrir la totalitat de les coses reflectides a la prova 1. 8 00:00:20,780 --> 00:00:25,270 Així que assegureu-vos que vostè també està prenent una ullada a la conferència, seccions, tot el que puguis. 9 00:00:25,270 --> 00:00:28,240 Qüestionari 1 serà dimecres dimecres. 10 00:00:28,240 --> 00:00:33,800 Així que assegureu-vos d'estudiar. Serà, més o menys, com la primera prova 11 00:00:33,800 --> 00:00:36,390 quant al seu format, però que probablement serà molt més difícil. 12 00:00:36,390 --> 00:00:39,600 Si més no, l'any passat quan vaig fer 50, vaig pensar que era molt més difícil. 13 00:00:39,600 --> 00:00:42,410 Així que estudiar molt. 14 00:00:42,410 --> 00:00:45,190 >> Vaig a cobrir les estructures de dades i la codificació Huffman. 15 00:00:45,190 --> 00:00:47,910 Això és una cosa que molta gent pensa que és complex, 16 00:00:47,910 --> 00:00:51,930 però vaig a tractar de fer-ho el més fàcil possible. 17 00:00:51,930 --> 00:00:56,330 En primer lloc, el que volem que sàpiguen per potser 1 és 18 00:00:56,330 --> 00:01:00,970 entendre les descripcions conceptuals de cadascuna de les estructures de dades que presentaré. 19 00:01:00,970 --> 00:01:03,960 Això vol dir que vostè no ha de realment 20 00:01:03,960 --> 00:01:07,020 implementar una taula hash en el seu concurs 1. 21 00:01:07,020 --> 00:01:10,250 No volem que li permet implementar una taula hash sencer, potser anem a tractar 22 00:01:10,250 --> 00:01:13,090 perquè s'implementi algunes funcions, 23 00:01:13,090 --> 00:01:16,940 les operacions més comuns, però no farem que s'implementi tot. 24 00:01:16,940 --> 00:01:21,010 Així que és important que vostè entengui el concepte darrere de cada estructura de dades 25 00:01:21,010 --> 00:01:23,510 i també que vostè és capaç de codi en C, 26 00:01:23,510 --> 00:01:27,880 només les operacions més comuns que tenen per a cada estructura de dades. 27 00:01:27,880 --> 00:01:30,090 I també podrà revisar els punters i estructures, 28 00:01:30,090 --> 00:01:33,470 perquè apareixen molt en aquestes estructures de dades. 29 00:01:33,470 --> 00:01:37,380 >> En primer lloc, les llistes enllaçades. Les llistes enllaçades són en realitat molt similars a les matrius, 30 00:01:37,380 --> 00:01:39,930 però la diferència entre una llista enllaçada i una matriu, 31 00:01:39,930 --> 00:01:45,160 primer de tot, és que una llista enllaçada té una mida molt flexible, 32 00:01:45,160 --> 00:01:50,060 mentre que a les matrius el que has de triar una mida molt gran per a la matriu, 33 00:01:50,060 --> 00:01:53,710 així que vostè sap que vostè serà capaç d'emmagatzemar totes les dades en la matriu, 34 00:01:53,710 --> 00:01:59,370 o has de fer servir malloc per tenir una longitud flexible de la matriu. 35 00:01:59,370 --> 00:02:03,680 En les llistes enllaçades és molt fàcil d'obtenir només més elements, 36 00:02:03,680 --> 00:02:07,210 posar més elements en la llista enllaçada o treure elements. 37 00:02:07,210 --> 00:02:09,370 I, de fet, si vostè no desitja que la llista vinculada a classificar, 38 00:02:09,370 --> 00:02:13,950 vostè pot buscar i eliminar elements en temps constant, 39 00:02:13,950 --> 00:02:16,800 pel que O (1) vegada, així que és molt convenient. 40 00:02:16,800 --> 00:02:20,660 Només has de tenir cura de recordar sempre a malloc i lliure dels nodes, 41 00:02:20,660 --> 00:02:25,510 perquè si no ho fa, tindrà pèrdues de memòria. 42 00:02:25,510 --> 00:02:31,480 Així llistes vinculades - la definició d'un node és igual que el que tenim aquí. 43 00:02:31,480 --> 00:02:35,110 Vaig posar int n, però pot emmagatzemar les dades que desitgi. 44 00:02:35,110 --> 00:02:37,280 Així que si voleu emmagatzemar una cadena, que està bé. 45 00:02:37,280 --> 00:02:41,690 Per emmagatzemar una estructura, que està bé, un doble, el que vulguis. 46 00:02:41,690 --> 00:02:44,630 Acabo de posar int n dels exemples aquí. 47 00:02:44,630 --> 00:02:46,800 I vostè té un punter al següent node. 48 00:02:46,800 --> 00:02:51,940 Així que, bàsicament, una llista enllaçada té algunes dades, i després apunta al següent node. 49 00:02:51,940 --> 00:02:56,710 Si és l'últim element de la llista enllaçada, que va a apuntar a NULL. 50 00:02:56,710 --> 00:02:59,060 Així que aquest és un exemple d'una llista enllaçada. 51 00:02:59,250 --> 00:03:05,960 >> Bé, ara anem a veure el que hem de fer si vull inserir un element en una llista enllaçada. 52 00:03:05,960 --> 00:03:08,810 En primer lloc, una inserció de la funció serà de tipus void 53 00:03:08,810 --> 00:03:11,350 perquè jo no vull tornar res. 54 00:03:11,350 --> 00:03:14,200 I em vaig a prendre un int com a argument, 55 00:03:14,200 --> 00:03:17,090 perquè vull saber el que vull inserir. 56 00:03:17,090 --> 00:03:21,840 Llavors, què és el primer que he de fer? Bé, hauria malloc a nodo_nuevo, 57 00:03:21,840 --> 00:03:24,240 pel que és la primera línia. 58 00:03:24,240 --> 00:03:27,580 Estic creant un nou node a posar en una llista enllaçada. 59 00:03:27,580 --> 00:03:32,360 Llavors, què puc fer? Bé, sabem que a les nostres implementacions de llistes enllaçades 60 00:03:32,360 --> 00:03:38,180 a classe, sempre posem el cap com una variable global. 61 00:03:38,180 --> 00:03:41,800 Així que el que podem fer és canviar el cap. 62 00:03:41,800 --> 00:03:44,300 Puc fer aquest nou node serà el nou cap, 63 00:03:44,300 --> 00:03:46,670 i que va a apuntar al capdavant anterior. 64 00:03:46,670 --> 00:03:50,390 Com podem fer això? El primer que he de fer 65 00:03:50,390 --> 00:03:54,770 és canviar la 'n' al nou node al valor, 66 00:03:54,770 --> 00:03:57,530 que va ser passat a la funció. 67 00:03:57,530 --> 00:04:01,050 Llavors és nodo_nuevo proper serà el cap. 68 00:04:01,050 --> 00:04:05,800 El cap serà nodo_nuevo. Així que és bastant simple. 69 00:04:05,800 --> 00:04:10,090 Per eliminar un node, podem fer-ho així - 70 00:04:10,090 --> 00:04:14,790 Una manera com podríem fer, és a dir, 71 00:04:14,790 --> 00:04:18,160 bé, si volia eliminar, per exemple, 3, 72 00:04:18,160 --> 00:04:24,850 el que podria fer és simplement apunt al node anterior 73 00:04:24,850 --> 00:04:27,580 al següent node de 3. 74 00:04:27,580 --> 00:04:29,400 Així que m'acaba de fer una cosa així. 75 00:04:29,400 --> 00:04:33,400 Però quin és el problema de fer això? 76 00:04:33,400 --> 00:04:37,400 Tinc una pèrdua de memòria, així que no tenen accés al nombre 3 més. 77 00:04:37,400 --> 00:04:42,480 El problema amb això és que jo no seré capaç d'alliberar aquest node. 78 00:04:42,480 --> 00:04:45,360 Vaig a tenir pèrdua de memòria i (inintel · ligible) em va a odiar. 79 00:04:45,360 --> 00:04:49,370 Així que en comptes de fer això, probablement hauria de tenir un punter temporal. 80 00:04:49,370 --> 00:04:53,210 Així que vaig posar temp. Es va a apuntar al node que vull esborrar. 81 00:04:53,210 --> 00:04:58,170 I llavors em puc moure els nodes anteriors a punt al següent node 82 00:04:58,170 --> 00:05:00,390 del node que vull esborrar. 83 00:05:00,390 --> 00:05:02,730 I, finalment, puc alliberar el punter. 84 00:05:02,730 --> 00:05:07,480 He de alliberar el punter que he creat allà mateix? 85 00:05:07,480 --> 00:05:09,560 Jo no he de, només perquè - 86 00:05:09,560 --> 00:05:13,430 la diferència és que aquest node s'ha creat usant malloc, 87 00:05:13,430 --> 00:05:17,280 pel que és en el munt, mentre aquest estava declarat com un interruptor NULL a la pila. 88 00:05:17,280 --> 00:05:20,000 Així que no he de alliberar-lo. 89 00:05:20,000 --> 00:05:22,030 >> Okay. Així que ara anem a parlar de les piles. 90 00:05:22,030 --> 00:05:24,680 Les piles són força senzills. 91 00:05:24,680 --> 00:05:29,540 Vam fer piles i cues a la classe simplement utilitzant matrius, 92 00:05:29,540 --> 00:05:32,820 però vostè ha d'estar familiaritzat - acaba de ser conscients 93 00:05:32,820 --> 00:05:40,740 que també es pot fer piles de cues mitjançant llistes enllaçades també. 94 00:05:40,740 --> 00:05:44,460 Així que si vostè té una matriu, el que seria una pila? 95 00:05:44,460 --> 00:05:46,810 Una pila, en primer lloc, haurà de tenir una mida. 96 00:05:46,810 --> 00:05:49,950 Vostè ha de guardar el que és la mida de la pila que té en aquests moments. 97 00:05:49,950 --> 00:05:52,980 I també tindria una matriu, en aquest cas dels nombres, 98 00:05:52,980 --> 00:05:55,120 però si vostè vol, pot ser una matriu 99 00:05:55,120 --> 00:06:00,380 de cadenes, una matriu d'estructura, qualsevol cosa que desitgis emmagatzemar. 100 00:06:00,380 --> 00:06:03,240 Sobre la pila: La diferència entre una pila i una llista enllaçada 101 00:06:03,240 --> 00:06:08,590 és que a la pila només té accés l'últim element que es va posar a la pila. 102 00:06:08,590 --> 00:06:11,770 Es crida l'última entrada, primera sortida. 103 00:06:11,770 --> 00:06:15,090 Igual que vostè té una pila de safates, 104 00:06:15,090 --> 00:06:17,670 si vostè posa una safata a la part superior de la pila, 105 00:06:17,670 --> 00:06:22,670 has d'eliminar aquesta safata primers a tenir accés a les altres safates. 106 00:06:22,670 --> 00:06:26,310 És el mateix amb les piles. 107 00:06:26,310 --> 00:06:31,220 Així que si jo vull, per exemple, afegir un element a una pila, què he de fer? 108 00:06:31,220 --> 00:06:34,070 Es diu empenta, i és bastant senzill. 109 00:06:34,070 --> 00:06:37,130 El primer que has de fer és comprovar si la mida de la pila 110 00:06:37,130 --> 00:06:40,150 no és més gran o igual a la capacitat de la pila. 111 00:06:40,150 --> 00:06:45,810 Perquè si vostè ja està en plena capacitat, no es pot afegir res més. 112 00:06:45,810 --> 00:06:51,140 I llavors, si no és així, només has d'afegir l'element a la pila. 113 00:06:51,140 --> 00:06:54,530 I, finalment, incrementar la mida. Així que és bastant senzill. 114 00:06:54,530 --> 00:06:57,140 Així que simplement afegir el número 2. 115 00:06:57,140 --> 00:07:00,350 I si vull fer esclatar, el que significa que vull treure 116 00:07:00,350 --> 00:07:03,870 l'últim element que s'ha afegit i retorna el valor de l'element, 117 00:07:03,870 --> 00:07:09,180 la primera cosa que he de comprovar és que la pila no és buida. 118 00:07:09,180 --> 00:07:11,510 Perquè si està buit, no puc tornar res. 119 00:07:11,510 --> 00:07:14,820 En aquest cas, estic tornant -1. 120 00:07:14,820 --> 00:07:18,960 En cas contrari, vaig a disminuir la mida de l'especificació, 121 00:07:18,960 --> 00:07:22,510 i tornar els números (s.size). 122 00:07:22,510 --> 00:07:27,230 Per què disminuir la mida i després torneu s.size? 123 00:07:27,230 --> 00:07:30,930 És perquè, en aquest cas, l'especificació té mida 4, 124 00:07:30,930 --> 00:07:33,810 i vull tornar el quart element, no? 125 00:07:33,810 --> 00:07:36,030 Però, què és l'índex del quart element? Tres. 126 00:07:36,030 --> 00:07:44,510 Ja que la mida - serà 3, no puc tornar s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 perquè és 3. Així que és només l'índex. 128 00:07:48,410 --> 00:07:50,380 >> Ara cues. Les cues són més o menys la mateixa cosa. 129 00:07:50,380 --> 00:07:54,950 L'única diferència és que en comptes de tenir l'última entrada, primera sortida, 130 00:07:54,950 --> 00:07:57,480 vostè ha primer que entra, primer que surt. 131 00:07:57,480 --> 00:07:59,460 Probablement si vostè està esperant per anar a un concert, 132 00:07:59,460 --> 00:08:04,260 que no seria feliç si tingués una pila en lloc d'una cua. 133 00:08:04,260 --> 00:08:07,730 En ser l'última persona a arribar seria la primera persona a entrar al concert. 134 00:08:07,730 --> 00:08:09,760 Vostè probablement no seria feliç. 135 00:08:09,760 --> 00:08:15,020 A la cua, la primera persona a entrar és també la primera persona a sortir. 136 00:08:15,020 --> 00:08:18,720 Així que en la definició d'una cua, a més de tenir la mida de la matriu, 137 00:08:18,720 --> 00:08:23,360 també cal tenir el cap, que és l'índex del cap de la pila. 138 00:08:23,360 --> 00:08:29,000 Així que el primer element en aquests moments. 139 00:08:29,000 --> 00:08:32,710 Enqueue és el mateix que l'empenta per a piles. 140 00:08:32,710 --> 00:08:34,980 Si vostè era molt ingenu, vostè acaba de dir, 141 00:08:34,980 --> 00:08:39,289 bo, jo puc fer exactament el mateix que jo vaig fer per empènyer. 142 00:08:39,289 --> 00:08:44,030 Jo només puc comprovar si no és més enllà de la capacitat. 143 00:08:44,030 --> 00:08:48,760 Si és així, torneu falsa, en cas contrari només puc exportar el nou valor 144 00:08:48,760 --> 00:08:50,630 i després incrementar la mida. 145 00:08:50,630 --> 00:08:52,750 Però per què està malament? 146 00:08:52,750 --> 00:08:55,010 Vegem aquest exemple. 147 00:08:55,010 --> 00:08:57,020 Estic tractant de posar en cua un munt de coses, 148 00:08:57,020 --> 00:08:58,390 i després em vaig a treure de la cua i posar en cua. 149 00:08:58,390 --> 00:09:00,550 Hi ha un munt d'ordres, però és molt simple. 150 00:09:00,550 --> 00:09:04,790 Vaig a posar en cua 5, de manera que afegir 5 i després 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, i després vull treure de la cua alguna cosa, 152 00:09:09,310 --> 00:09:12,000 el que significa que em vaig a treure el primer element. 153 00:09:12,000 --> 00:09:14,640 Així que em vaig a treure el número 3, no? 154 00:09:14,640 --> 00:09:17,320 El primer element. Okay. 155 00:09:17,320 --> 00:09:21,450 Ara bé, si jo tracte de posar en cua una mica més, el que va a succeir? 156 00:09:21,450 --> 00:09:24,290 D'acord amb la meva aplicació, 157 00:09:24,290 --> 00:09:31,040 Anava a posar el següent número de la q.size índex. 158 00:09:31,040 --> 00:09:35,140 En aquest cas, la mida és 8, 159 00:09:35,140 --> 00:09:38,640 pel que l'índex de 8 estarà aquí en l'última posició. 160 00:09:38,640 --> 00:09:43,900 Si tracte de posar en cua 1 aquí, jo estaria d'sobreescriure l'última posició 161 00:09:43,900 --> 00:09:45,870 amb el número 1, que és completament equivocat. 162 00:09:45,870 --> 00:09:49,870 El que vull fer és embolicar al voltant i veu a la primera posició. 163 00:09:49,870 --> 00:09:52,870 Potser vostè acaba de dir, bé, he de comprovar 164 00:09:52,870 --> 00:09:55,600 si puc realment posar una mica allà. 165 00:09:55,600 --> 00:09:58,560 Si no, jo només dic, oh, la nova capacitat plena 166 00:09:58,560 --> 00:10:02,010 és en realitat la capacitat - 1, i no es pot posar un element allà. 167 00:10:02,010 --> 00:10:06,150 Però quin és el problema? El problema és que si només Dequeue tot aquí 168 00:10:06,150 --> 00:10:08,240 i llavors intento afegir alguna cosa més, seria just dir, 169 00:10:08,240 --> 00:10:11,210 així, vostè estava en plena capacitat, que és 0. 170 00:10:11,210 --> 00:10:13,620 Així que la seva cua s'ha anat. 171 00:10:13,620 --> 00:10:16,990 Vostè ha de embolicar al voltant, i una manera d'embolicar al voltant 172 00:10:16,990 --> 00:10:22,040 que vostès apreses en conjunts de processadors i altres visionaris estava usant mod. 173 00:10:22,040 --> 00:10:29,090 Pots provar a casa per entendre per què vostè faria q.size + q.head 174 00:10:29,090 --> 00:10:31,080 capacitat mod, però si revises aquí, 175 00:10:31,080 --> 00:10:34,760 podem veure que funciona. 176 00:10:34,760 --> 00:10:37,760 Així, en l'últim exemple, q.size era agost 177 00:10:37,760 --> 00:10:47,590 i el cap va ser d'1, perquè va ser aquesta posició aquí de la matriu. 178 00:10:47,590 --> 00:10:51,970 Així que serà 8 + 1, 9. Capacitat Mod 9 seria 0. 179 00:10:51,970 --> 00:10:56,640 Aniria a l'índex 0. Estarem en la posició correcta. 180 00:10:56,640 --> 00:10:59,750 I a continuació, proveu la cua a casa. 181 00:10:59,750 --> 00:11:04,950 Algunes coses importants: tractar d'entendre la diferència entre una pila i una cua. 182 00:11:04,950 --> 00:11:11,620 A casa, tracti d'obtenir molt familiaritzat amb la implementació de posada en cua, treure de la cua, empenta i pop. 183 00:11:11,620 --> 00:11:16,560 I també entendre quan pot utilitzar cada un d'ells. 184 00:11:16,560 --> 00:11:22,830 >> Així que relaxa't durant 10 segons amb un munt de Pokémons. 185 00:11:22,830 --> 00:11:26,080 I ara tornarem a les estructures de dades. 186 00:11:26,080 --> 00:11:29,770 Taules hash. Un munt de gent estava espantada de les taules hash. 187 00:11:29,770 --> 00:11:33,650 en problemes 6, corrector ortogràfic. 188 00:11:33,650 --> 00:11:35,980 Les taules hash i tries, molta gent s'espanta d'ells. 189 00:11:35,980 --> 00:11:38,540 Ells pensen que són tan difícil d'entendre. Sí? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Butlletí de problemes 5. >> Butlletí de problemes 5, si. Gràcies Rob. 191 00:11:41,490 --> 00:11:43,370 Sí Sis era Huff n 'Puff, si. 192 00:11:43,370 --> 00:11:49,340 Problemes 5 va ser corrector ortogràfic, i ha hagut d'utilitzar una taula hash o una oportunitat. 193 00:11:49,340 --> 00:11:55,360 Molta gent va pensar que eren molt difícils d'entendre, però són en realitat força simple. 194 00:11:55,360 --> 00:12:01,290 Què és una taula hash, bàsicament? Una taula hash és un conjunt de llistes enllaçades. 195 00:12:01,290 --> 00:12:06,730 L'única diferència entre una matriu i una taula hash 196 00:12:06,730 --> 00:12:09,730 és que a la taula hash té alguna cosa que es diu una funció hash. 197 00:12:09,730 --> 00:12:12,080 Què és una funció hash? 198 00:12:12,080 --> 00:12:13,970 No sé si vostès poden llegir aquí. 199 00:12:13,970 --> 00:12:16,090 Aquest és un exemple d'una taula hash. 200 00:12:16,090 --> 00:12:19,220 Així es pot veure que té una matriu amb 31 elements. 201 00:12:19,220 --> 00:12:22,440 I el que fem en una taula hash es té una funció hash 202 00:12:22,440 --> 00:12:26,660 que es va a traduir una clau, cada int a un índex. 203 00:12:26,660 --> 00:12:31,740 Si, per exemple, si vull triar per B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Jo posaria B. Harrison en les meves funcions de hash, 205 00:12:34,190 --> 00:12:36,960 i la funció hash tornaria 24. 206 00:12:36,960 --> 00:12:40,930 Així que sé que vull per emmagatzemar B. Harrison en 24. 207 00:12:40,930 --> 00:12:46,580 Així que aquesta és la diferència entre simplement tenir un conjunt i amb una taula hash. 208 00:12:46,580 --> 00:12:48,740 A la taula hash tindrà una funció que es dirà 209 00:12:48,740 --> 00:12:54,740 on emmagatzemar les dades que voleu emmagatzemar. 210 00:12:54,740 --> 00:12:57,040 Per a la funció de hash, que vol buscar una funció hash 211 00:12:57,040 --> 00:13:00,600 és determinista i ben distribuïda. 212 00:13:00,600 --> 00:13:07,810 Com es pot veure aquí, veurà que moltes de les dades que jo volia a la botiga era en realitat 19 213 00:13:07,810 --> 00:13:12,470 en comptes d'usar 31 i 30 i 29, que eren tots de forma gratuïta. 214 00:13:12,470 --> 00:13:16,920 Així que la funció hash que vaig usar no estava molt ben distribuïda. 215 00:13:16,920 --> 00:13:20,710 Quan diem ben distribuïts, vol dir que volem tenir, 216 00:13:20,710 --> 00:13:26,520 més o menys, almenys 1 o 2 per a cada un dels - 217 00:13:26,520 --> 00:13:32,190 com, una diferència d'1 o 2 per a cada un dels índexs en les matrius. 218 00:13:32,190 --> 00:13:43,950 Vostè vol tenir, més o menys, el mateix nombre d'elements en cada llista enllaçada de la matriu. 219 00:13:43,950 --> 00:13:48,600 I és fàcil de comprovar si és vàlid en la taula hash, veure com les taules hash. 220 00:13:48,600 --> 00:13:51,770 >> Llavors arbres. Aquest és un arbre. 221 00:13:51,770 --> 00:13:56,400 Arbres en ciències de la computació estan a l'inrevés, per alguna raó. 222 00:13:56,400 --> 00:14:00,150 Així que aquí tens l'arrel de l'arbre i després les fulles. 223 00:14:00,150 --> 00:14:05,630 Vostè només ha de conèixer la nomenclatura dels pares i el nen. 224 00:14:05,630 --> 00:14:12,880 Cada node té els seus nens, que són els nodes que estan sota la matriu. 225 00:14:12,880 --> 00:14:19,660 Així, per exemple, 2 serà el pare de 3 i per l'altre nen allà, 226 00:14:19,660 --> 00:14:25,290 mentre que el 3 serà el pare de 1 i els altres nens que hi són. 227 00:14:25,290 --> 00:14:29,990 I 1 serà un fill de 3, i així successivament. 228 00:14:29,990 --> 00:14:34,610 Tenim alguna cosa molt més interessant, es diu un arbre de cerca binària, 229 00:14:34,610 --> 00:14:39,040 en la qual tots els valors de la dreta d'un node 230 00:14:39,040 --> 00:14:41,660 estaran a la dreta, a la dreta aquí - a la dreta, 231 00:14:41,660 --> 00:14:46,780 seran més gran que l'element a l'arrel. 232 00:14:46,780 --> 00:14:49,780 Així que si tinc el número 5 aquí, tots els elements de la dreta 233 00:14:49,780 --> 00:14:51,940 seran més gran que 5, i al costat esquerre 234 00:14:51,940 --> 00:14:56,770 tots els elements seran inferior a 5. 235 00:14:56,770 --> 00:14:58,780 Per què és útil? 236 00:14:58,780 --> 00:15:01,660 Bé, si jo vull comprovar si el número 7 ja és aquí, per exemple, 237 00:15:01,660 --> 00:15:05,960 Acabo d'anar a 5 primer i jo vaig a veure, és 7 més o menys de 5? 238 00:15:05,960 --> 00:15:09,540 És més, així que sé que va a haver d'estar a la dreta de l'arbre. 239 00:15:09,540 --> 00:15:13,980 Així que tinc molt menys coses a veure. 240 00:15:13,980 --> 00:15:19,520 En l'aplicació d'un arbre de cerca binària, el node, només vaig a haver de disposar de dades, 241 00:15:19,520 --> 00:15:21,750 així int n; vostè també podria tenir una cadena 242 00:15:21,750 --> 00:15:23,630 o qualsevol cosa que volguessis. 243 00:15:23,630 --> 00:15:28,100 Només has de tenir cura en la definició del que sigui més gran, el que sigui menor. 244 00:15:28,100 --> 00:15:30,390 Així que si vostè tenia cordes, per exemple, es podria definir 245 00:15:30,390 --> 00:15:34,690 que totes aquestes coses a la dreta tindran major longitud, 246 00:15:34,690 --> 00:15:40,940 l'esquerra tindran longituds inferiors, pel que és realment depèn de tu. 247 00:15:40,940 --> 00:15:44,930 >> Com puc aplicar per trobar BST? 248 00:15:44,930 --> 00:15:47,840 El primer que haurem de fer és comprovar si l'arrel és NULL. 249 00:15:47,840 --> 00:15:50,920 Si és NULL, vol dir que la cosa no està allà 250 00:15:50,920 --> 00:15:53,330 perquè no tenen ni tan sols un arbre, no? 251 00:15:53,330 --> 00:15:55,790 Així que torno falsa. 252 00:15:55,790 --> 00:15:58,740 En cas contrari, vaig a comprovar si el nombre és més gran 253 00:15:58,740 --> 00:16:01,720 que el valor en l'arrel. 254 00:16:01,720 --> 00:16:04,250 Vaig a tractar de trobar l'element de la dreta 255 00:16:04,250 --> 00:16:08,590 l'arbre. 256 00:16:08,590 --> 00:16:11,310 Ja veus que estic fent servir aquí la recursivitat. 257 00:16:11,310 --> 00:16:14,150 I després, si és menys, vaig a mirar a l'esquerra. 258 00:16:14,150 --> 00:16:18,330 I, finalment, en cas contrari, si no és menys o no major, 259 00:16:18,330 --> 00:16:20,660 això significa que és el valor en si. 260 00:16:20,660 --> 00:16:23,010 Així que em torno cert. 261 00:16:23,010 --> 00:16:26,360 Vostè pot veure aquí que vaig fer servir si, si, si. 262 00:16:26,360 --> 00:16:30,820 I recorda, en prova 0, vam tenir un problema que tenia, si, si, si, 263 00:16:30,820 --> 00:16:32,780 i que se suposa que trobar la ineficiència, 264 00:16:32,780 --> 00:16:35,180 i la ineficiència va ser que va utilitzar si. 265 00:16:35,180 --> 00:16:39,060 Hauries d'haver usat si, else if, else if i else. 266 00:16:39,060 --> 00:16:44,240 Per tant, he d'utilitzar else if i else if i més aquí? 267 00:16:44,240 --> 00:16:46,200 Algú - Sí? 268 00:16:46,200 --> 00:16:51,140 [Parlant d'Estudiants, inaudible] 269 00:16:51,140 --> 00:16:53,480 És perfecte. Així que està dient que no importa, 270 00:16:53,480 --> 00:16:55,930 només perquè la ineficiència que teníem abans 271 00:16:55,930 --> 00:16:59,550 va ser que pel fet que, potser, si alguna condició se satisfà, 272 00:16:59,550 --> 00:17:03,570 el que ha portat a terme una acció, però després anaves a comprovar totes les altres condicions. 273 00:17:03,570 --> 00:17:06,319 Però en aquest cas, va tornar immediatament, pel que no importa. 274 00:17:06,319 --> 00:17:09,220 Així que vostè no ha de fer servir else if. 275 00:17:09,220 --> 00:17:11,740 >> I, finalment, parlarem d'intents, 276 00:17:11,740 --> 00:17:13,800 que és de tots favorit. 277 00:17:13,800 --> 00:17:15,980 Un try és un arbre de matrius. 278 00:17:15,980 --> 00:17:20,369 És molt ràpid per buscar valors, sinó que utilitza una gran quantitat de memòria. 279 00:17:20,369 --> 00:17:22,530 I és en general per filtrar les paraules, així que quan vostè 280 00:17:22,530 --> 00:17:27,920 desitgi implementar, per exemple, no sé, com un llibre de telèfon al seu telèfon 281 00:17:27,920 --> 00:17:30,440 i vol ser capaç d'escriure B 282 00:17:30,440 --> 00:17:32,510 i només tenen els noms de les persones que tenen B. 283 00:17:32,510 --> 00:17:37,960 És molt fàcil d'implementar que l'ús d'un intent, per exemple. 284 00:17:37,960 --> 00:17:39,820 Com es defineix un node en una oportunitat? 285 00:17:39,820 --> 00:17:43,910 Vostè només ha de tenir un bool que serà is_word. 286 00:17:43,910 --> 00:17:48,660 Això representa que l'ús de tots els caràcters abans d'aquest node, 287 00:17:48,660 --> 00:17:51,920 que van ser capaços de formar una paraula, 288 00:17:51,920 --> 00:17:57,230 i llavors vostè té una matriu de punters a nodes. 289 00:17:57,230 --> 00:18:03,120 Pots veure que tenim una sèrie de nodes pare, de manera que el node * array? Sí? 290 00:18:03,120 --> 00:18:06,050 Així que anem a veure com funcionarà. Per a la correcció ortogràfica, 291 00:18:06,050 --> 00:18:08,230 tenim una sèrie de 27 elements, 292 00:18:08,230 --> 00:18:12,150 perquè tenim totes les cartes més l'apòstrof. 293 00:18:12,150 --> 00:18:17,800 Abans que aquí només vaig a utilitzar 2 perquè vull ser capaç d'escriure a la pissarra. 294 00:18:17,800 --> 00:18:20,230 Okay. Així que aquest és un exemple d'un intent. 295 00:18:20,230 --> 00:18:25,600 Si acabo de definir el primer node, vaig a tenir una matriu de 2 elements 296 00:18:25,600 --> 00:18:29,290 que són 2 punters a NULL, així que només cal posar 'a' i 'b'. 297 00:18:29,290 --> 00:18:32,430 I jo vaig a tenir un bool que diu is_word. 298 00:18:32,430 --> 00:18:34,420 Serà fals per al primer, 299 00:18:34,420 --> 00:18:37,370 només perquè, abans que vostè no té cap caràcter. 300 00:18:37,370 --> 00:18:40,900 Així que una paraula buida no és una paraula. Pel que és fals. 301 00:18:40,900 --> 00:18:46,320 Si vull afegir 'a' a aquest diccionari, què hauria de fer? 302 00:18:46,320 --> 00:18:49,760 Només vull que malloc un nou node per 'a', 303 00:18:49,760 --> 00:18:54,630 i després afegir la seva paraula de veritat. 304 00:18:54,630 --> 00:19:00,180 Pel que només representa que l'haver 'a' serà veritat. Té sentit? 305 00:19:00,180 --> 00:19:04,120 Llavors, si vull afegir 'ba', hauré de malloc 1 per a 'b', 306 00:19:04,120 --> 00:19:07,550 i després vaig a configurar el booleà a false, 307 00:19:07,550 --> 00:19:10,160 perquè 'b' per si mateix no és una paraula. 308 00:19:10,160 --> 00:19:13,010 Llavors vaig a malloc altre per 'a', de manera que "ba ', 309 00:19:13,010 --> 00:19:16,290 i després vaig a crear és una paraula de veritat. 310 00:19:16,290 --> 00:19:18,950 Perquè 'ba' és una paraula. 311 00:19:18,950 --> 00:19:21,910 I llavors, si vull veure si 'b' es troba en aquest diccionari, 312 00:19:21,910 --> 00:19:26,730 Jo només puc anar a la primera, 'b'. Caic, i jo miro és la paraula, i diu falsa. 313 00:19:26,730 --> 00:19:30,110 Així que no és una paraula. Si jo vull comprovar 'ba', 314 00:19:30,110 --> 00:19:38,010 Vaig a la primera, 'b', i després vaig a la 'a', i veig cert, pel que és una paraula. Té sentit? 315 00:19:38,010 --> 00:19:41,950 Un munt de gent es confongui per intents. No? 316 00:19:41,950 --> 00:19:44,740 >> Finalment, la codificació de Huffman. La codificació de Huffman és molt útil 317 00:19:44,740 --> 00:19:47,550 per estalviar memòria i comprimir arxius de text, 318 00:19:47,550 --> 00:19:52,270 només perquè un munt de vegades que utilitzi 'a' i 'e', ​​per exemple, 319 00:19:52,270 --> 00:19:57,710 en els seus documents, però no sé si vostès utilitzar 'q' o 'z' com a molt. 320 00:19:57,710 --> 00:20:02,040 Tenir sols 1 byte per a cada caràcter individual, 321 00:20:02,040 --> 00:20:08,520 tots i cada un - els 256 caràcters que tenim a la taula ASCII no és molt òptima, 322 00:20:08,520 --> 00:20:11,410 només perquè hi ha alguns caràcters que s'utilitzen molt més, 323 00:20:11,410 --> 00:20:15,180 pel que és millor fer servir menys memòria per a aquells. 324 00:20:15,180 --> 00:20:17,560 Com s'utilitza la codificació de Huffman? 325 00:20:17,560 --> 00:20:20,010 Hem de fer un arbre de Huffman. 326 00:20:20,010 --> 00:20:23,370  Un arbre de Huffman té nodes 327 00:20:23,370 --> 00:20:27,760 que tenen un símbol que serà com, 'a', 'b', 'c', la carta, 328 00:20:27,760 --> 00:20:32,990 la lletra que vostè té, una freqüència que és la freqüència que apareix la paraula en el text, 329 00:20:32,990 --> 00:20:36,280 que estigués creant l'arbre de Huffman per, 330 00:20:36,280 --> 00:20:41,800 i tot seguit, un node que es va a punt a l'esquerra de l'arbre de Huffman 331 00:20:41,800 --> 00:20:47,210 i un altre node que es va a assenyalar a la dreta. Així com un arbre. 332 00:20:47,210 --> 00:20:49,440 Com es construeix un arbre de Huffman? 333 00:20:49,440 --> 00:20:54,020 Vostè va a escollir als 2 nodes que tenen les freqüències més baixes. 334 00:20:54,020 --> 00:20:56,490 Si vostè té un llaç que va a recollir els 2 nodes 335 00:20:56,490 --> 00:20:59,870 que tenen els valors ASCII més baixos també. 336 00:20:59,870 --> 00:21:02,420 Llavors vostè va a crear un nou arbre dels 2 nodes 337 00:21:02,420 --> 00:21:08,030 que tindrà la freqüència combinada en el node principal. 338 00:21:08,030 --> 00:21:13,240 I després et vas a treure els 2 fills de la selva 339 00:21:13,240 --> 00:21:15,570 i reemplaçar amb els pares. 340 00:21:15,570 --> 00:21:18,930 I vostè va a repetir fins que només té 1 arbre al bosc. 341 00:21:18,930 --> 00:21:23,840 Així que anem a veure com ho faria un arbre de Huffman per ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Vostè pot veure aquí que totes les lletres tenen freqüència 1 a excepció de 'A', que té la freqüència 2. 343 00:21:29,220 --> 00:21:34,090 Així que he creat nodes per a totes les cartes que poso en ordre de valor ASCII i freqüència. 344 00:21:34,090 --> 00:21:40,090 Així que si vull crear el primer arbre, serà per 'L' i 'm'. 345 00:21:40,090 --> 00:21:43,100 Així que és aquí. La freqüència del parell serà 2 346 00:21:43,100 --> 00:21:49,470 perquè és 1 + 1, llavors el proper 2 amb les freqüències més baixes són 'I' i 'Z'. 347 00:21:49,470 --> 00:21:53,180 I després he de ser tots ells - tenen una freqüència de 2. 348 00:21:53,180 --> 00:22:00,470 Així que quins són els que tenen el valor ASCII baix per a la pròxima? 349 00:22:00,470 --> 00:22:04,830 'A' i 'L'. Així que crec el nou node, 350 00:22:04,830 --> 00:22:09,930 i, finalment, és 4 i 2, pel que 2 estarà a l'esquerra. 351 00:22:09,930 --> 00:22:12,430 I aquest és l'arbre de Huffman. 352 00:22:12,430 --> 00:22:16,060 Llavors, si vull escriure alguna cosa de text, 353 00:22:16,060 --> 00:22:24,440 com en binari per convertir text, utilitzant l'arbre de Huffman és molt fàcil. 354 00:22:24,440 --> 00:22:30,220 Per exemple, si jo dic que el pas a l'esquerra és un 0 i movent-se a la dreta hi ha un 1, 355 00:22:30,220 --> 00:22:32,410 Què és això d'anar a representar? 356 00:22:32,410 --> 00:22:35,530 Així com 1, 1, tan a la dreta, a la dreta, 357 00:22:35,530 --> 00:22:40,370 i després 0, de manera que seria l'esquerra L, i després 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Així 1, 0, de manera que només 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 I a continuació, 0, 1, de manera que 'Z'. 360 00:22:47,540 --> 00:22:52,170 I a continuació, 1, 0, 0 - no. 361 00:22:52,170 --> 00:22:56,780 0, 0 serà 'I', per mandrós. 362 00:22:56,780 --> 00:23:06,060 Així que això és tot per a mi, Rob va a prendre el relleu. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Així, la setmana 7 coses. 364 00:23:08,400 --> 00:23:11,390 Tenim molt per anar molt ràpid. 365 00:23:11,390 --> 00:23:13,430 Operadors bit a bit de desbordament de memòria intermèdia, 366 00:23:13,430 --> 00:23:16,760 Biblioteca CS50, a continuació, HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 En definitiva, com 15 a 20 minuts. 368 00:23:20,990 --> 00:23:24,330 Operadors bit a bit. Hi ha 6 d'ells que vostè necessita saber. 369 00:23:24,330 --> 00:23:31,200 Bit a bit i bit a bit OR, XOR, desplaçament a l'esquerra, desplaçament a la dreta, i no. 370 00:23:31,200 --> 00:23:35,420 Desplaçament a la dreta i no només va veure en la conferència en absolut. 371 00:23:35,420 --> 00:23:40,480 Anem a repassar ràpidament aquí, però és bo saber que aquests són els 6 que existeixen. 372 00:23:40,480 --> 00:23:45,070 Recordeu que els operadors bit a bit són com quan fas 3 + 4. 373 00:23:45,070 --> 00:23:49,420 No està tractant amb el binari de 3 i 4. 374 00:23:49,420 --> 00:23:56,550 Amb els operadors bit a bit en realitat s'està tractant amb els bits individuals dels números 3 i 4. 375 00:23:56,550 --> 00:23:59,120 >> Així que el primer que direm és bit a bit no, 376 00:23:59,120 --> 00:24:02,340 i tot el que fa és girar tots els bits. 377 00:24:02,340 --> 00:24:05,500 Així que aquí, si vostè està escrivint això en C, vostè ho escrigui 378 00:24:05,500 --> 00:24:09,380 com ~ 11011 o el que sigui, podria escriure se sent ~ 4, 379 00:24:09,380 --> 00:24:12,970 i llavors seria voltejar la representació binària de 4. 380 00:24:12,970 --> 00:24:24,800 Així que aquí, ~ d'un nombre binari 1101101 es va a donar la volta exactament tots els de 1 a 0 dels 0 i l'1 de. 381 00:24:24,800 --> 00:24:27,600 Com dic allà, l'ús freqüent d'aquesta, 382 00:24:27,600 --> 00:24:30,830 i ho veurem en una estona, és com volem arribar a algun nombre 383 00:24:30,830 --> 00:24:35,460 on tots els bits són 1, a excepció d'un d'ells. 384 00:24:35,460 --> 00:24:38,560 Així que en general és més fàcil expressar el nombre 385 00:24:38,560 --> 00:24:40,630 on es troba a què sol bit, 386 00:24:40,630 --> 00:24:44,650 i després prendre el ~ de la mateixa, de manera que cada altre bit està establert a excepció d'aquell. 387 00:24:44,650 --> 00:24:50,300 Així que això és el que utilitzarem més en una estona. 388 00:24:50,300 --> 00:24:58,220 >> OR bit a bit. Aquí hi ha 2 nombres binaris, i aquests 2 números 389 00:24:58,220 --> 00:25:00,780 són prou representativa, ja que representen cada possible 390 00:25:00,780 --> 00:25:07,290 combinació de bits que pot ser que hagi d'operar. 391 00:25:07,290 --> 00:25:13,540 Aquí, quan or'd cada bit, només anem a comparar directament cap avall. 392 00:25:13,540 --> 00:25:15,410 Així que a la banda esquerra tenim un 1 i 1 gen. 393 00:25:15,410 --> 00:25:20,510 Quan bit a bit | aquests, què vaig a rebre? Una. 394 00:25:20,510 --> 00:25:25,320 Llavors bit a bit | 0 i 1 em donarà? Una. 395 00:25:25,320 --> 00:25:27,840 Bit a bit 1 i 0 que serà el mateix, un. 396 00:25:27,840 --> 00:25:31,880 Bit a bit 0 | 0 em donarà 0. 397 00:25:31,880 --> 00:25:37,300 Així que l'únic cas en el que em surt és 0 en el 0 | 0 cas. 398 00:25:37,300 --> 00:25:40,020 I es pot pensar que igual que els seus alcaldes lògiques. 399 00:25:40,020 --> 00:25:44,830 Així que si vostè pensa en 1 com a veritable i 0 com a fals, el mateix s'aplica aquí. 400 00:25:44,830 --> 00:25:50,040 Tan cert o veritable és veritable, veritable o fals és veritat. 401 00:25:50,040 --> 00:25:57,150 Fals o veritable és veritable, fals o fals és l'únic que en realitat és fals. 402 00:25:57,150 --> 00:26:00,100 Aquí està l'exemple que vostè ha de saber 403 00:26:00,100 --> 00:26:05,160 com un bon exemple de quan es fan servir els operadors bit a bit. 404 00:26:05,160 --> 00:26:08,660 Aquí si nosaltres o 'A' majúscula amb OX20, 405 00:26:08,660 --> 00:26:11,830 i anem a veure això en un segon, tenim alguna cosa. 406 00:26:11,830 --> 00:26:16,020 I si nosaltres o minúscula "a" amb OX20, vam aconseguir alguna cosa. 407 00:26:16,020 --> 00:26:26,750 Així que anem a tirar cap amunt la taula ASCII. 408 00:26:26,750 --> 00:26:34,000 Okay. Aquí veiem que 'A' és - 409 00:26:34,000 --> 00:26:36,920 aquí tenim 'A' és decimal 65. 410 00:26:36,920 --> 00:26:45,120 Però aniré amb hexadecimal, que és Ox41. 411 00:26:45,120 --> 00:26:48,280 Estic bastant segur que ho vam veure a classe. Crec que hem vist a classe 412 00:26:48,280 --> 00:26:52,730 que és bastant fàcil de convertir de hexadecimal a binari. 413 00:26:52,730 --> 00:26:55,280 Així que aquí, si vull posar 4 en binari, 414 00:26:55,280 --> 00:26:59,550 això és només serà 0100. 415 00:26:59,550 --> 00:27:03,620 Aquest és el lloc d'1, el lloc de 2, lloc de 4, així que això és 4. 416 00:27:03,620 --> 00:27:08,550 Llavors puc dividir 1 en binari, el que serà 0001. 417 00:27:08,550 --> 00:27:14,280 I així, aquesta serà la representació de 'A' en binari. 418 00:27:14,280 --> 00:27:22,720 Prenent en minúscula 'a', ara es va a ser Ox61, 419 00:27:22,720 --> 00:27:27,050 on, dividint aquests cap amunt en el seu binari, de manera que un 6 - 420 00:27:27,050 --> 00:27:37,830 Anem a fer-ho realitat - no hi ha una goma d'esborrar? Esborrany. 421 00:27:37,830 --> 00:27:48,220 Ox61. Així dividir 6 en binari serà 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 I la divisió 1 serà 0001. 423 00:27:54,610 --> 00:27:56,520 Quant a la diferència entre aquests 2, 424 00:27:56,520 --> 00:28:04,250 veiem que l'única diferència entre una minúscula i una 'A' majúscula és això d'un sol bit. 425 00:28:04,250 --> 00:28:11,810 Així que tornant a aquí - bé. 426 00:28:11,810 --> 00:28:15,920 Tornant a aquí, si ens fixem en el que el bit OX20 és, 427 00:28:15,920 --> 00:28:22,210 així que separar OX20 en el seu binari, 428 00:28:22,210 --> 00:28:27,310 és 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, l'única part que s'estableix aquest bit és que ens ocupa, 430 00:28:33,470 --> 00:28:38,210 amb el canvi entre el capital i minúscules 'a'. 431 00:28:38,210 --> 00:28:47,610 Si jo o 'A', que és aquest, 'A', 432 00:28:47,610 --> 00:28:50,580 si jo o 'A' amb OX20, 433 00:28:50,580 --> 00:28:53,490 Què vaig a rebre? 434 00:28:53,490 --> 00:28:58,960 [Estudiant, inaudible] >> minúscula "a", perquè va a voltejar aquest bit a 1. 435 00:28:58,960 --> 00:29:04,170 I si jo o 'a' amb OX20, què vaig a rebre? 436 00:29:04,170 --> 00:29:08,780 Canviar a minúscula una, perquè just oring 'a' amb OX20, 437 00:29:08,780 --> 00:29:14,580 Jo només seré oring aquesta sol bit a 1, és ja un 1, pel que no importa. 438 00:29:14,580 --> 00:29:17,960 Així que arribar 'a' i 'a'. 439 00:29:17,960 --> 00:29:24,820 >> Bit a bit i. Un cop més, podem pensar en això com la nostra contrapart lògica i. 440 00:29:24,820 --> 00:29:28,180 A la part esquerra tenim cert i veritable. 441 00:29:28,180 --> 00:29:31,160 Serà veritat, i per a tots els casos, 442 00:29:31,160 --> 00:29:36,270 fals i vertader o fals i veritable, o fals i fals, 443 00:29:36,270 --> 00:29:38,550 cap d'aquestes coses són certes. 444 00:29:38,550 --> 00:29:44,170 Així que el que acabem rebent és 1000. 445 00:29:44,170 --> 00:29:48,830 Així que ara, aquí, aquí és on m'he utilitzat amb l'operador de confiança no, 446 00:29:48,830 --> 00:29:52,230 on vam tenir OX20. 447 00:29:52,230 --> 00:29:54,350 Així que això és OX20. 448 00:29:54,350 --> 00:29:59,570 Ara el que vull fer, bit a bit ~ de OX20. 449 00:29:59,570 --> 00:30:03,600 Això va a voltejar tots els bits. 450 00:30:03,600 --> 00:30:09,330 Així que tinc 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 I pel que 'A' AND amb ~ OX20 em donarà el que? 452 00:30:18,940 --> 00:30:22,430 L'única part que realment hem de pensar és en aquest, 453 00:30:22,430 --> 00:30:26,020 ja que, si tots aquests bits s'estableixen a 1, 454 00:30:26,020 --> 00:30:29,000 llavors anem a aconseguir exactament el 'A' era, 455 00:30:29,000 --> 00:30:31,260 llevat de, possiblement, el que això és poc. 456 00:30:31,260 --> 00:30:34,460 Perquè si fos un 1, ara que serà establert en un 0, 457 00:30:34,460 --> 00:30:39,810 perquè sigui el que sigui, AND amb això serà 0. 458 00:30:39,810 --> 00:30:43,280 Llavors, què és 'A' i ~ OX20 em donarà? 459 00:30:43,280 --> 00:30:48,200 [Els alumnes responen, inaudible] >> I el que és 'a' i - és 'A'. 460 00:30:48,200 --> 00:30:52,170 I el que és 'a' i ~ OX20 em donarà? 461 00:30:52,170 --> 00:30:56,720 'A.' Com que aquest és actualment gener 1. 462 00:30:56,720 --> 00:30:59,570 Anding amb aquest 0 farà que sigui un 0, 463 00:30:59,570 --> 00:31:02,530 i ara anem a obtenir una 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Tots dos són 'A', i per últim però no menys important d'aquest tipus, 465 00:31:06,600 --> 00:31:10,830 tenim XOR. És molt semblant o, 466 00:31:10,830 --> 00:31:14,400 llevat que significa exclusivament o. 467 00:31:14,400 --> 00:31:18,420 Això és com el que se sol pensar en com o en el món real. 468 00:31:18,420 --> 00:31:23,190 Així ho fa bé 'x' o 'i', però no ambdós. 469 00:31:23,190 --> 00:31:28,700 Aquí 1 ^ 1 serà 0. 470 00:31:28,700 --> 00:31:33,650 Perquè és veritat, això és - no funciona tan bé amb la lògica de vertader i fals 471 00:31:33,650 --> 00:31:37,150 com a nivell de bits i jo fer, 472 00:31:37,150 --> 00:31:40,100 però cert ^ veritable és fals. 473 00:31:40,100 --> 00:31:44,810 Perquè només volem tornar true si només un d'ells és cert. 474 00:31:44,810 --> 00:31:50,950 Així que 1 ^ 1 és 0. Què passa amb 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 És 1. 1 ^ 0 és 1, 0 ^ 0 és 0. 476 00:31:56,010 --> 00:32:03,890 Així que en totes les circumstàncies, 0 bit a bit 0 alguna cosa serà 0. 477 00:32:03,890 --> 00:32:10,270 1 bit a bit o alguna cosa 0 0 1 bit a bit, 478 00:32:10,270 --> 00:32:14,660 si és | o ^, serà un 1, i si és i serà 0. 479 00:32:14,660 --> 00:32:20,850 I l'únic cas en què 1 bit a bit 1 és 1 no és exclusiva amb o. 480 00:32:20,850 --> 00:32:24,580 Això és 0110. 481 00:32:24,580 --> 00:32:36,520 Així que aquí ara, usant XOR - així que estem de tornada als 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ OX20 és aquests 2 bits que estem comparant. 483 00:32:43,480 --> 00:32:50,020 Així que un 1 ^ 0 em donarà una què? Un un. 484 00:32:50,020 --> 00:32:58,430 'A' ^ OX20 em donarà? Canviar a minúscula un. 485 00:32:58,430 --> 00:33:04,010 'A' ^ OX20 em donarà? Capital A. 486 00:33:04,010 --> 00:33:09,310 Perquè el que sigui que està fent, aquesta operació XOR amb OX20 487 00:33:09,310 --> 00:33:15,380 està invertit efectivament sigui el que és poc. 488 00:33:15,380 --> 00:33:21,240 Si això és un 0, ara es convertirà en un 1. 489 00:33:21,240 --> 00:33:26,160 Atès que aquest és un 1, 1 ^ 1 és 0. 490 00:33:26,160 --> 00:33:33,280 Així que el nostre 'a' s'ha convertit en 'A', i el nostre 'A' s'ha convertit en 'a'. 491 00:33:33,280 --> 00:33:36,910 Així XOR és una manera molt convenient de simplement donar la volta al cas. 492 00:33:36,910 --> 00:33:39,960 El que desitja és iterar sobre una cadena de lletres 493 00:33:39,960 --> 00:33:44,330 i alternar el cas de cada personatge, 494 00:33:44,330 --> 00:33:50,680 simplement XOR tot amb OX20. 495 00:33:50,680 --> 00:33:55,220 >> Ara ens queda torn. Desplaçament a l'esquerra és només va a, bàsicament, 496 00:33:55,220 --> 00:34:01,250 empènyer tots els números en, o cap a l'esquerra, i introduïu 0 de darrere d'ells. 497 00:34:01,250 --> 00:34:05,550 Així que aquí tenim 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Anem a empènyer març del 0 per la dreta, 499 00:34:08,560 --> 00:34:13,580 i obtenim 01.101.000. 500 00:34:13,580 --> 00:34:16,380 En termes no binaris, 501 00:34:16,380 --> 00:34:24,699 veiem que el que realment es tracta 13 esquerra amb desplaçament de 3, el que ens dóna 104. 502 00:34:24,699 --> 00:34:32,530 Així desplaçament esquerra, veiem aquí, x << i és bàsicament x * 2 ^ i. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 és 8, de manera que 13 * 8 és 104. 504 00:34:40,139 --> 00:34:45,679 Si només penses en binari, en general, com cada dígit, 505 00:34:45,679 --> 00:34:49,530 si partim de la dreta, que és el lloc de l'1, llavors el lloc del 2 i després el lloc del 4. 506 00:34:49,530 --> 00:34:51,330 Així empenyent a 0 de la dreta, 507 00:34:51,330 --> 00:34:55,080 només estem empenyent les coses que eren al lloc del 4 al lloc del 8, 508 00:34:55,080 --> 00:34:57,920 i les coses que eren al lloc del 8 al lloc de la 16. 509 00:34:57,920 --> 00:35:01,280 Cada torn només es multiplica per 2. Sí? 510 00:35:01,280 --> 00:35:05,210 [Estudiant] Què passa si vas canviar per 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Si vas canviar per 5 vostè acaba de perdre dígits. 512 00:35:10,790 --> 00:35:15,410 Inevitablement, és la mateixa cosa. Igual, els sencers són només 32 bits 513 00:35:15,410 --> 00:35:20,750 així que si vostè afegeix 2 realment grans sencers, simplement no cap en un enter. 514 00:35:20,750 --> 00:35:23,660 Pel que és el mateix aquí. Si vas canviar per 5, 515 00:35:23,660 --> 00:35:25,650 ens tornaríem a perdre aquesta. 516 00:35:25,650 --> 00:35:28,820 I això és una cosa del que vull dir amb "més o menys" 517 00:35:28,820 --> 00:35:37,470 on si vostè canvia massa, perds bits. 518 00:35:37,470 --> 00:35:39,830 >> Desplaçament a la dreta serà tot el contrari, 519 00:35:39,830 --> 00:35:43,090 on anem a empènyer 0 de fora de la final, 520 00:35:43,090 --> 00:35:48,400 i per als nostres propòsits, ompli 0 del de l'esquerra. 521 00:35:48,400 --> 00:35:52,910 Així que fent això, estem bàsicament revertir el que ja havíem fet. 522 00:35:52,910 --> 00:35:57,780 I veiem que els tres de 0 a la dreta només s'han caigut, 523 00:35:57,780 --> 00:36:02,020 i hem empès el 1101 fins al final a la dreta. 524 00:36:02,020 --> 00:36:08,380 Això està fent 104 >> 3, que és, efectivament, x / 2 ^ I. 525 00:36:08,380 --> 00:36:11,200 Així que ara, aquí, és una idea similar. 526 00:36:11,200 --> 00:36:18,720 Per què és només aproximadament x / 2 ^ i, i en realitat no x / 2 ^ i? 527 00:36:18,720 --> 00:36:22,240 Perquè si jo havia canviat per 4, m'hauria perdut, un 1. 528 00:36:22,240 --> 00:36:25,950 Bàsicament, el que pensa de, només cal pensar en la divisió entera en general. 529 00:36:25,950 --> 00:36:31,070 Així que, com 5/2 és 2. No és 2,5. 530 00:36:31,070 --> 00:36:35,000 És la mateixa idea aquí. En dividir per 2, 531 00:36:35,000 --> 00:36:39,910 podem perdre coses estranyes en el camí. 532 00:36:39,910 --> 00:36:43,870 Així que ara - això és tot per bit a bit. Això és tot el que necessita saber. 533 00:36:43,870 --> 00:36:46,340 Recorda els casos d'ús que vam veure a classe, 534 00:36:46,340 --> 00:36:49,340 com una màscara de bits és útil per als operadors bit a bit, 535 00:36:49,340 --> 00:36:53,220 o els utilitza per a les màscares de bits. 536 00:36:53,220 --> 00:36:58,620 Les lletres majúscules i minúscules, les conversions, és un exemple molt prototípic. 537 00:36:58,620 --> 00:37:01,640 >> Bé, així que els atacs de desbordament de memòria intermèdia. 538 00:37:01,640 --> 00:37:05,110 Algú es recorda del que estava malament amb aquesta funció? 539 00:37:05,110 --> 00:37:10,140 Avís declarem un arranjament de 12 bytes, 12 caràcters, 540 00:37:10,140 --> 00:37:18,510 i després copiem al nostre buffer de 12 caràcters tota la barra de cadena. 541 00:37:18,510 --> 00:37:25,080 Llavors quin és el problema aquí? 542 00:37:25,080 --> 00:37:32,270 El nombre màgic 12 hauria d'aparèixer gairebé immediatament com - per què 12? 543 00:37:32,270 --> 00:37:35,050 Què passa si la barra passa a ser més de 12 caràcters? 544 00:37:35,050 --> 00:37:41,200 Què passa si la barra és de milions de caràcters? 545 00:37:41,200 --> 00:37:46,010 Aquí la qüestió és memcpy. Si la barra és el temps suficient, 546 00:37:46,010 --> 00:37:50,330 s'acaba del tot - 'c', 'c' no li importa que es tractava de només 12 caràcters; 547 00:37:50,330 --> 00:37:53,280 'C' no li importa que no pot cabre que molts bytes. 548 00:37:53,280 --> 00:37:58,250 Es sobreescriurà tot sol char, els 12 bytes que hem assignat per a això, 549 00:37:58,250 --> 00:38:01,830 i tot el passat a la memòria que en realitat no pertanyen a aquest buffer 550 00:38:01,830 --> 00:38:06,520 de manera que la barra de cadena és. 551 00:38:06,520 --> 00:38:09,780 Així que aquesta era la imatge que vam veure a classe 552 00:38:09,780 --> 00:38:12,220 on tenim la nostra pila creixia. 553 00:38:12,220 --> 00:38:16,040 Vostè ha d'estar acostumat a aquestes fotos o familiaritzar-se amb ells de nou. 554 00:38:16,040 --> 00:38:21,260 Hem nostra pila creixia, les adreces de memòria comencen a 0 a la part superior 555 00:38:21,260 --> 00:38:26,270 i créixer fins agradaria 4000000000 a la part inferior. 556 00:38:26,270 --> 00:38:28,820 Tenim la nostra array 'c' en algun lloc de la memòria, 557 00:38:28,820 --> 00:38:32,260 llavors tenim el nostre punter al bar just sota d'ella, 558 00:38:32,260 --> 00:38:38,720 i després tenim aquest punter guardat a la nostra adreça de retorn i de la pica de la rutina dels pares. 559 00:38:38,720 --> 00:38:40,800 Recorda el que la direcció de retorn és? 560 00:38:40,800 --> 00:38:45,360 És quan principal crida a una funció foo, crida a una barra de funcions, 561 00:38:45,360 --> 00:38:48,100 inevitablement, bar devolucions. 562 00:38:48,100 --> 00:38:52,610 Així que quan els rendiments de barres, el que necessiten saber que va a foo, que el va anomenar. 563 00:38:52,610 --> 00:39:01,360 Així que la direcció de retorn és la direcció de la funció que ha de tornar a quan es retorna la funció. 564 00:39:01,360 --> 00:39:05,830 La raó per la qual és important per als atacs de desbordament de memòria intermèdia és perquè, convenientment, 565 00:39:05,830 --> 00:39:09,580 hackers els agrada canviar això remet. 566 00:39:09,580 --> 00:39:14,950 En comptes de tornar a foo, vaig a tornar a on el hacker vol que vagi de nou a. 567 00:39:14,950 --> 00:39:17,760 I, convenientment, on el hacker sovint vol tornar a 568 00:39:17,760 --> 00:39:22,400 és el principi de la memòria intermèdia que teníem originalment. 569 00:39:22,400 --> 00:39:26,170 Així que adonar-se, de nou, Little Indian. 570 00:39:26,170 --> 00:39:28,490 L'aparell és un exemple d'un sistema indi de Little, 571 00:39:28,490 --> 00:39:34,140 de manera que un nombre enter o un punter s'emmagatzema amb els bytes invertits. 572 00:39:34,140 --> 00:39:38,980 Així que aquí veiem - és això? Sí 573 00:39:38,980 --> 00:39:45,660 Veiem Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Recordeu que els dígits hexadecimals? 575 00:39:48,250 --> 00:39:50,640 Nosaltres no invertim els dígits hexadecimals a Little Indian, 576 00:39:50,640 --> 00:39:56,110 perquè 2 dígits hexadecimals representen un sol byte, i revertir els bytes. 577 00:39:56,110 --> 00:40:00,300 És per això que nosaltres no emmagatzemem, com, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Emmagatzemem, en el seu lloc, cada parell de 2 dígits, començant des de la dreta. 579 00:40:07,520 --> 00:40:10,880 Aquesta direcció es refereix a la direcció d'inici 580 00:40:10,880 --> 00:40:15,190 del nostre buffer que realment volíem copiar en en el primer lloc. 581 00:40:15,190 --> 00:40:19,230 La raó que és útil és perquè, i si l'atacant 582 00:40:19,230 --> 00:40:24,100 succeït a, en lloc de tenir una cadena que només era 583 00:40:24,100 --> 00:40:27,060 una cadena inofensiva com el seu nom o alguna cosa, 584 00:40:27,060 --> 00:40:33,900 I si, en canvi, que la cadena van ser només alguns de codi arbitrari 585 00:40:33,900 --> 00:40:38,610 que feien el que volien que fes? 586 00:40:38,610 --> 00:40:45,630 Perquè poguessin - no puc pensar en cap codi cool. 587 00:40:45,630 --> 00:40:47,780 Podria ser qualsevol cosa, però. Qualsevol codi desastrós. 588 00:40:47,780 --> 00:40:51,440 Si volguessin, podrien simplement fer alguna cosa en falles s, però això no tindria sentit. 589 00:40:51,440 --> 00:40:54,950 En general, ho fan per hackejar el sistema. 590 00:40:54,950 --> 00:40:59,930 >> Okay. Biblioteca CS50. 591 00:40:59,930 --> 00:41:04,800 És a dir, bàsicament, getInt, getString, totes aquelles funcions que li proporciona. 592 00:41:04,800 --> 00:41:10,630 Així que tenim char * cadena, i aquesta és l'abstracció que ens van impressionar molt 593 00:41:10,630 --> 00:41:12,450 en algun moment durant el semestre. 594 00:41:12,450 --> 00:41:18,220 Recordi que una cadena és només un conjunt de caràcters. 595 00:41:18,220 --> 00:41:23,240 Així que aquí veiem una versió abreujada de getString. 596 00:41:23,240 --> 00:41:25,920 Vostè ha de mirar cap enrere en el que cal recordar com s'aplica realment. 597 00:41:25,920 --> 00:41:30,950 Els detalls clau són, notem que obtenim en un sol caràcter alhora 598 00:41:30,950 --> 00:41:34,570 de la norma, la qual cosa és el mateix que nosaltres amb el teclat. 599 00:41:34,570 --> 00:41:37,890 Així que un sol caràcter alhora, i si aconseguim massa caràcters, 600 00:41:37,890 --> 00:41:40,580 pel que si n + 1 és més gran que la capacitat, 601 00:41:40,580 --> 00:41:44,140 llavors hem d'augmentar la capacitat de la nostra memòria intermèdia. 602 00:41:44,140 --> 00:41:47,780 Així que aquí estem duplicant la mida del nostre buffer. 603 00:41:47,780 --> 00:41:51,840 I això segueix endavant, inserim el caràcter en el nostre buffer 604 00:41:51,840 --> 00:41:56,220 fins que rebem una nova línia o al final de l'arxiu o el que sigui, 605 00:41:56,220 --> 00:41:59,380 en aquest cas, hem acabat amb la cadena i després el veritable getString 606 00:41:59,380 --> 00:42:05,120 contreu la memòria, com si ens van donar massa memòria que va a anar cap enrere i reduir una mica. 607 00:42:05,120 --> 00:42:08,830 Així que no vam demostrar això, però la idea principal és 608 00:42:08,830 --> 00:42:11,960 que ha de llegir en un sol caràcter alhora. 609 00:42:11,960 --> 00:42:17,140 No s'acaba de llegir en tota una cosa alhora, 610 00:42:17,140 --> 00:42:19,550 causa que la seva memòria intermèdia és només d'una certa mida. 611 00:42:19,550 --> 00:42:26,590 Així que si la cadena que intenta introduir a la memòria intermèdia és massa gran, llavors es desbordi. 612 00:42:26,590 --> 00:42:28,940 Així que aquí ens prevenim que només la lectura en un sol caràcter 613 00:42:28,940 --> 00:42:33,750 alhora i cada vegada més cada vegada que necessitem. 614 00:42:33,750 --> 00:42:40,270 Així getInt i les altres funcions de la biblioteca CS50 tendeixen a utilitzar getString 615 00:42:40,270 --> 00:42:42,310 en les seves implementacions. 616 00:42:42,310 --> 00:42:45,370 Així que vaig posar en relleu les coses importants aquí. 617 00:42:45,370 --> 00:42:49,460 Crida getString per obtenir una cadena. 618 00:42:49,460 --> 00:42:51,710 Si getString no va tornar a la memòria, 619 00:42:51,710 --> 00:42:54,270 recordeu que getString mallocs alguna cosa, així que cada vegada que es diu a getString 620 00:42:54,270 --> 00:42:57,820 vostè no ha de (inintel · ligible) gratis aquesta cadena que et donaven. 621 00:42:57,820 --> 00:43:02,870 Així que aquí, si no aconseguia malloc alguna cosa, tornem INT_MAX només com una bandera que, 622 00:43:02,870 --> 00:43:05,650 bé, no estàvem realment capaços d'obtenir un nombre enter. 623 00:43:05,650 --> 00:43:10,830 Vostè ha d'ignorar ho torno a tu, o 624 00:43:10,830 --> 00:43:15,540 vostè no ha de tractar això com una entrada vàlida. 625 00:43:15,540 --> 00:43:21,360 Finalment, en el cas que van tenir èxit, utilitzem sscanf amb aquesta bandera especial, 626 00:43:21,360 --> 00:43:23,820 el que significa, primer que coincideixi amb un nombre enter, 627 00:43:23,820 --> 00:43:26,770 llavors coincidir qualsevol caràcter després d'aquest sencer. 628 00:43:26,770 --> 00:43:29,070 Així notem que volem que sigui igual a 1. 629 00:43:29,070 --> 00:43:32,940 Així que torna sscanf quants partits si van fer amb èxit? 630 00:43:32,940 --> 00:43:37,010 Es retornarà 1 si coincideix amb èxit un nombre enter, 631 00:43:37,010 --> 00:43:40,890 retornarà 0 si no ha coincidit amb un enter, i ha de tornar 2 632 00:43:40,890 --> 00:43:45,920 si coincideix amb un nombre enter seguit d'una mica de caràcter. 633 00:43:45,920 --> 00:43:49,780 Així notem que la recomprobació si igualem qualsevol cosa menys 1. 634 00:43:49,780 --> 00:43:55,230 Així que si entrem en 1, 2, 3, C, o 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 a continuació, 1, 2, 3 que s'emmagatzema en el nombre sencer, 636 00:43:57,400 --> 00:43:59,620 X seria s'emmagatzemen en el caràcter, 637 00:43:59,620 --> 00:44:06,410 sscanf tornarien 2, i ens agradaria tornar a intentar, perquè només volem un sencer. 638 00:44:06,410 --> 00:44:09,810 >> Bufar ràpidament a través d'HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language és l'estructura i la semàntica de la web. 640 00:44:15,340 --> 00:44:19,960 Aquí està l'exemple de la conferència on tenim etiquetes HTML. 641 00:44:19,960 --> 00:44:22,110 Tenim etiquetes del cap, les etiquetes de cos, 642 00:44:22,110 --> 00:44:27,770 tenim exemples d'etiquetes buides on en realitat no tenen un inici i tancament d'etiquetes, 643 00:44:27,770 --> 00:44:30,820 només tenim enllaç i la imatge. 644 00:44:30,820 --> 00:44:38,480 No hi ha tancament d'imatge de la placa, només hi ha una única etiqueta que porta a terme tot el que l'etiqueta ha de fer. 645 00:44:38,480 --> 00:44:41,950 L'enllaç és un exemple, veurem com es vincula a CSS, 646 00:44:41,950 --> 00:44:45,910 el guió és un exemple de com es vincula a un JavaScript extern. 647 00:44:45,910 --> 00:44:53,100 És bastant senzill, i recorda, HTML no és un llenguatge de programació. 648 00:44:53,100 --> 00:44:58,250 En aquest sentit, recorda com es defineixi un formulari o almenys el que això faria? 649 00:44:58,250 --> 00:45:01,740 Manera té una acció i un mètode. 650 00:45:01,740 --> 00:45:06,210 Els mètodes que vostè només alguna vegada veure són GET i POST. 651 00:45:06,210 --> 00:45:09,040 Així s'obté és la versió en la qual ho aconsegueix lloc en la URL. 652 00:45:09,040 --> 00:45:11,680 POST és on no es posa a la URL. 653 00:45:11,680 --> 00:45:18,520 En el seu lloc, totes les dades del formulari s'insereix més ocult en la petició HTTP. 654 00:45:18,520 --> 00:45:22,390 Així que aquí, l'acció defineix on va la petició HTTP. 655 00:45:22,390 --> 00:45:27,490 On se'n va és google.com / categoria. 656 00:45:27,490 --> 00:45:32,890 Mètode. Recordeu que les diferències entre GET i POST, 657 00:45:32,890 --> 00:45:37,200 i, acaba de dir com un exemple, si vol marcar alguna cosa. 658 00:45:37,200 --> 00:45:40,660 Vostè mai serà capaç de marcar un URL PAL 659 00:45:40,660 --> 00:45:44,970 perquè les dades no està inclòs en l'URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, ara, és el Protocol de transferència d'hipertext. 661 00:45:49,790 --> 00:45:54,080 El Protocol de transferència d'hipertext, que es pot esperar per transferir 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, i ho fa. 663 00:45:57,710 --> 00:46:00,170 Però també transfereix les imatges que trobi a la web, 664 00:46:00,170 --> 00:46:05,400 cap tipus de descàrrega que realitzi comencen com una sol · licitud HTTP. 665 00:46:05,400 --> 00:46:10,350 Així que HTTP és només el llenguatge de la World Wide Web. 666 00:46:10,350 --> 00:46:15,610 I aquí cal reconèixer aquest tipus d'una sol · licitud HTTP. 667 00:46:15,610 --> 00:46:19,300 Aquí HTTP/1.1 al costat només diu que aquesta és la versió 668 00:46:19,300 --> 00:46:21,570 del protocol que estic fent servir. 669 00:46:21,570 --> 00:46:25,770 És gairebé sempre serà HTTP/1.1, ja ho veuràs. 670 00:46:25,770 --> 00:46:30,110 Llavors veiem que aquest va ser GET, sent l'alternativa POST, que es poden veure. 671 00:46:30,110 --> 00:46:40,790 I l'adreça que jo estava tractant de visitar era www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Així que recordi que aquest, el signe d'interrogació q = bla, bla, bla, 673 00:46:44,240 --> 00:46:49,040 és el tipus de coses que s'envia per un formulari. 674 00:46:49,040 --> 00:46:51,830 La resposta podria tornar a mi seria alguna cosa com això. 675 00:46:51,830 --> 00:46:54,050 Un cop més, començant pel protocol, el qual serà això, 676 00:46:54,050 --> 00:46:59,190 seguit pel codi d'estat. Aquí és 200 OK. 677 00:46:59,190 --> 00:47:05,060 I, finalment, la pàgina web que en realitat vaig demanar serà seguit. 678 00:47:05,060 --> 00:47:08,210 La possible codi d'estat que pot veure, i vostè ha de saber diversos d'ells. 679 00:47:08,210 --> 00:47:12,770 200 OK és probable que hagi vist abans. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 no trobat, Error 500 Internal Server 681 00:47:17,830 --> 00:47:22,140 és en general si vostè va a un lloc web i algun element no funciona o es bloqueja el seu codi PHP, 682 00:47:22,140 --> 00:47:24,930 mentre que en l'aparell que tenim que el rectangle ataronjat gran 683 00:47:24,930 --> 00:47:27,830 que ve i diu, com, alguna cosa està malament, aquest codi no funciona 684 00:47:27,830 --> 00:47:30,380 o de mal aquesta funció. 685 00:47:30,380 --> 00:47:33,230 En general, els llocs web no volen el teu permís quines funcions són realment dolent, 686 00:47:33,230 --> 00:47:37,880 així que en comptes d'això només et donen 500 errors interns del servidor. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP és 1 capa sota HTTP. 688 00:47:43,050 --> 00:47:47,550 Recordeu que no hi ha Internet fora de la World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Igual que si vostè juga un joc en línia que no passa a través d'HTTP, 690 00:47:52,270 --> 00:47:55,740 que va a través d'un diferent - que encara està utilitzant l'Internet, 691 00:47:55,740 --> 00:47:58,900 però no utilitza HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP és només un exemple de protocol basat en TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP significa literalment Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Cada ordinador té una adreça IP, sinó que són aquestes coses de 4 dígits 695 00:48:11,500 --> 00:48:16,510 com 192.168.2.1, o el que sigui, això tendeix a ser un local. 696 00:48:16,510 --> 00:48:23,390 Però aquest és el patró d'una adreça IP. 697 00:48:23,390 --> 00:48:29,060 Així que el DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 això és el que es tradueix coses com google.com en una adreça IP real. 699 00:48:33,410 --> 00:48:37,700 Així que si vostè escriu que l'adreça IP en una adreça URL, 700 00:48:37,700 --> 00:48:40,850 que portaria a Google, però que tendeixen a no recordar aquestes coses. 701 00:48:40,850 --> 00:48:45,470 Vostè tendeix a recordar google.com en lloc. 702 00:48:45,470 --> 00:48:51,560 L'últim que tenim és els ports, en els quals aquesta és la part de TCP IP. 703 00:48:51,560 --> 00:48:54,880 TCP fa més. Pensa, com, vostè té el navegador web en funcionament. 704 00:48:54,880 --> 00:48:58,670 Potser vostè té alguna aplicació de correu electrònic en funcionament; 705 00:48:58,670 --> 00:49:02,150 potser vostè té algun altre programa que utilitza el funcionament d'Internet. 706 00:49:02,150 --> 00:49:05,090 Tots ells necessiten tenir accés a Internet, 707 00:49:05,090 --> 00:49:08,100 però l'equip només té 1 targeta WiFi o el que sigui. 708 00:49:08,100 --> 00:49:10,780 Així que els ports són la forma en què som capaços de dividir 709 00:49:10,780 --> 00:49:13,550 com aquestes aplicacions són capaços d'utilitzar Internet. 710 00:49:13,550 --> 00:49:17,230 Cada aplicació obté 1 port específic que pugui escoltar en, 711 00:49:17,230 --> 00:49:19,670 i per defecte, HTTP utilitza el port 80. 712 00:49:19,670 --> 00:49:22,410 Alguns serveis de correu electrònic utilitzen 25. 713 00:49:22,410 --> 00:49:24,490 Els números baixos tendeixen a ser reservats. 714 00:49:24,490 --> 00:49:29,270 Vostè està en general capaços d'obtenir nombres més alts-un per si mateix. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Pàgines web Nosaltres estil amb CSS, no amb HTML. 717 00:49:36,030 --> 00:49:38,440 Hi ha 3 llocs que vostè pot posar el seu CSS. 718 00:49:38,440 --> 00:49:46,300 Pot ser en línia, entre les etiquetes d'estil, o en un arxiu completament separat i després vinculat polz 719 00:49:46,300 --> 00:49:48,470 I aquí és només un exemple de CSS. 720 00:49:48,470 --> 00:49:50,450 Vostè ha de reconèixer aquest patró, 721 00:49:50,450 --> 00:49:54,310 on el primer exemple és que estem igualant l'etiqueta body, 722 00:49:54,310 --> 00:49:56,680 i aquí estem centrant el cos de l'etiqueta. 723 00:49:56,680 --> 00:50:00,420 El segon exemple, estem igualant la cosa 724 00:50:00,420 --> 00:50:04,740 amb identificador de peu de pàgina, i estem aplicant alguns estils a això. 725 00:50:04,740 --> 00:50:07,310 Cal notar que els ID de peu de pàgina de text s'alinea a l'esquerra, 726 00:50:07,310 --> 00:50:09,840 mentre que el centre del cos de text-a línia. 727 00:50:09,840 --> 00:50:13,180 Peu de pàgina està dins del cos. 728 00:50:13,180 --> 00:50:16,470 Serà, en canvi, text-align esquerra, tot i que el cos diu centre text-align. 729 00:50:16,470 --> 00:50:18,880 Aquesta és tota la part de connexió en cascada d'ella. 730 00:50:18,880 --> 00:50:22,110 Vostè pot tenir - es pot especificar estils per al cos, 731 00:50:22,110 --> 00:50:25,320 i llavors les coses en el cos que poden especificar estils més específics, 732 00:50:25,320 --> 00:50:28,160 i les coses funcionen com s'espera. 733 00:50:28,160 --> 00:50:34,420 Especificadors CSS més específics tenen prioritat. 734 00:50:34,420 --> 00:50:46,140 Crec que això és tot. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Hola a tots. Si tan sols pogués aconseguir la seva atenció. 736 00:50:49,260 --> 00:50:53,990 Sóc Ali i jo vaig a anar a través de PHP i SQL molt ràpid. 737 00:50:53,990 --> 00:51:00,310 Així que podem començar. PHP és l'acrònim de PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 I com tots vostès han de saber, és un llenguatge de script del costat del servidor, 739 00:51:03,730 --> 00:51:06,800 i el fem servir per al back-end dels llocs web, 740 00:51:06,800 --> 00:51:12,540 i com ho fa un munt dels càlculs, la part de darrere de les escenes. 741 00:51:12,540 --> 00:51:17,510 Sintaxi. No és com C, sorpresa, sorpresa. 742 00:51:17,510 --> 00:51:22,060 Sempre ha de començar amb ell, si vostè pot veure, el - no puc seguir endavant. 743 00:51:22,060 --> 00:51:31,340 Vostè pot veure el que necessita els nous tipus d'aparells ortopèdics i llavors també necessitarà el php?. 744 00:51:31,340 --> 00:51:35,780 Això sempre és com cal enquadrar el text PHP, el codi PHP. 745 00:51:35,780 --> 00:51:39,180 Per tant, no pot ser només com C, en què tipus de posar-la en primer lloc. 746 00:51:39,180 --> 00:51:42,290 Has de sempre envolten. 747 00:51:42,290 --> 00:51:47,610 I ara, la sintaxi és important que totes les variables han de començar amb el caràcter $. 748 00:51:47,610 --> 00:51:49,490 Que ha de fer quan vostè els està definint, que cal fer-ho 749 00:51:49,490 --> 00:51:51,860 quan et refereixes a ells més endavant. 750 00:51:51,860 --> 00:51:56,510 Sempre es necessita que $. És el seu nou millor amic, bastant. 751 00:51:56,510 --> 00:52:01,690 No - a diferència de C, no cal posar el tipus de tipus de variable que és. 752 00:52:01,690 --> 00:52:04,940 Així, mentre que vostè no necessita els $, vostè no ha de posar, com, 753 00:52:04,940 --> 00:52:09,470 int x o cadena i, etcètera, etcètera. 754 00:52:09,470 --> 00:52:11,490 Així que una lleugera diferència. 755 00:52:11,490 --> 00:52:15,590 Com a resultat d'això, vol dir que PHP és un tipus dèbilment. 756 00:52:15,590 --> 00:52:19,310 PHP és un llenguatge de tipus feble, i feblement ha introduït variables. 757 00:52:19,310 --> 00:52:24,020 En altres paraules, això significa que vostè pot canviar entre els diferents tipus de tipus de variables. 758 00:52:24,020 --> 00:52:27,230 Pot emmagatzemar el número 1 com un int, 759 00:52:27,230 --> 00:52:29,650 es pot emmagatzemar com una cadena, i es pot emmagatzemar com un flotador, 760 00:52:29,650 --> 00:52:33,550 i tot serà que el número 1. 761 00:52:33,550 --> 00:52:36,080 Tot i que vostè està emmagatzemant en diferents formes, 762 00:52:36,080 --> 00:52:39,120 segueix sent - els tipus de variables segueixen mantenint en el final. 763 00:52:39,120 --> 00:52:41,540 Així que si vostè mira aquí, si vostè recorda de PSET 7, 764 00:52:41,540 --> 00:52:43,500 molts de vostès probablement tenia problemes amb això. 765 00:52:43,500 --> 00:52:47,280 Dos signes d'igual, 3 signes d'igual, 4 signes d'igual. 766 00:52:47,280 --> 00:52:49,990 Està bé, no hi ha 4 signes d'igual, però hi ha 2 i 3. 767 00:52:49,990 --> 00:52:53,320 Utilitza 2 signes d'igual per comprovar els valors. 768 00:52:53,320 --> 00:52:55,830 Es pot comprovar a través de tipus. 769 00:52:55,830 --> 00:52:58,770 Així que si vostè pot veure en el primer exemple, 770 00:52:58,770 --> 00:53:02,210 Tinc num_string == num_int. 771 00:53:02,210 --> 00:53:06,710 Així que el seu int i la seva cadena són tant, tècnicament, 1, 772 00:53:06,710 --> 00:53:10,790 però són diferents tipus. No obstant això, per als dobles iguals, encara passarà. 773 00:53:10,790 --> 00:53:15,510 No obstant això, per als iguals triples, comprova valor, així com els diferents tipus. 774 00:53:15,510 --> 00:53:18,760 Això vol dir que no passarà en aquest segon cas aquí, 775 00:53:18,760 --> 00:53:22,350 on s'està utilitzant 3 signes igual al seu lloc. 776 00:53:22,350 --> 00:53:26,590 Així que això és una gran diferència, que tots han mostrat ara. 777 00:53:26,590 --> 00:53:31,570 >> String concatenació és una altra cosa de gran abast que pot utilitzar en PHP. 778 00:53:31,570 --> 00:53:34,080 És bàsicament aquesta notació de punt a mà, 779 00:53:34,080 --> 00:53:36,230 i així és com es pot enllaçar les cadenes juntes. 780 00:53:36,230 --> 00:53:40,800 Així que si vostè té gat i tens gos, i vol posar les 2 cadenes juntes, 781 00:53:40,800 --> 00:53:44,080 vostè pot utilitzar l'època, i això és una espècie de com funciona. 782 00:53:44,080 --> 00:53:46,660 També es pot simplement col · locar un al costat de l'altre, 783 00:53:46,660 --> 00:53:49,030 com es pot veure aquí en l'exemple de sota, 784 00:53:49,030 --> 00:53:51,610 on he fet cadena 1, espai corda 2. 785 00:53:51,610 --> 00:53:56,930 PHP sabrà que ha de substituir com a tal. 786 00:53:56,930 --> 00:53:59,780 Arrays. Ara bé, en PHP, hi ha 2 tipus de matrius. 787 00:53:59,780 --> 00:54:03,180 Vostè pot tenir matrius regulars, i vostè també pot tenir matrius associatives, 788 00:54:03,180 --> 00:54:06,040 i anirem a través d'ells en aquest moment. 789 00:54:06,040 --> 00:54:08,280 Matrius regulars són simplement això en C, 790 00:54:08,280 --> 00:54:11,240 i pel que té índexs que estan numerades. 791 00:54:11,240 --> 00:54:13,160 En aquest moment només crearem una i posar - 792 00:54:13,160 --> 00:54:15,500 així que aquesta és la forma de crear una matriu buida, llavors anem a 793 00:54:15,500 --> 00:54:17,310 posat en el nombre d'índex 0. 794 00:54:17,310 --> 00:54:19,200 Anem a posar el número 6, el valor 6. 795 00:54:19,200 --> 00:54:21,500 Es pot veure a la part inferior aquí. 796 00:54:21,500 --> 00:54:24,240 D'on està - en el nombre d'índex 1 ens posarem del valor 4, 797 00:54:24,240 --> 00:54:26,720 i així que vostè pot veure que hi ha un 6, hi ha un 4, 798 00:54:26,720 --> 00:54:29,160 i llavors com que estem imprimint coses, 799 00:54:29,160 --> 00:54:33,550 quan intentem i imprimim el valor emmagatzemat en el nombre d'índex 0, 800 00:54:33,550 --> 00:54:36,900 llavors veurem el valor 6 imprimir-los. ¿D'acord? 801 00:54:36,900 --> 00:54:40,160 Així que això és matrius regulars per a vostè. 802 00:54:40,160 --> 00:54:42,750 Una altra manera també es pot afegir coses a les matrius normals ara 803 00:54:42,750 --> 00:54:44,780 és que només pot annexar al final. 804 00:54:44,780 --> 00:54:47,240 Això vol dir que vostè no ha d'especificar l'índex específic. 805 00:54:47,240 --> 00:54:51,000 Pot consultar el nombre i, a continuació, en els claudàtors no hi ha cap índex especificat. 806 00:54:51,000 --> 00:54:56,270 I sabrà - PHP sabrà a poc afegir-lo a la final de la llista, el següent lloc lliure. 807 00:54:56,270 --> 00:54:59,190 Així es pot veure la 1 a la dreta allà en aquell punt 0, 808 00:54:59,190 --> 00:55:02,690 el 2 va ser allà mateix, en el primer acte. 809 00:55:02,690 --> 00:55:04,690 El 3 va - s'afegeix allà també. 810 00:55:04,690 --> 00:55:06,720 Així que aquest tipus de té sentit. Només estàs constantment afegint que, 811 00:55:06,720 --> 00:55:09,360 i després, quan estem fent ressò de l'índex de número 1, 812 00:55:09,360 --> 00:55:13,080 s'imprimirà el valor 2. 813 00:55:13,080 --> 00:55:16,800 >> Després tenim les matrius que són matrius associatives. 814 00:55:16,800 --> 00:55:19,370 Les matrius associatives, en lloc de tenir índexs numèrics, 815 00:55:19,370 --> 00:55:23,630 el que fan és, han índexs que estan per cadena. 816 00:55:23,630 --> 00:55:25,670 Es pot veure, en lloc de - Em vaig desfer de tots aquests índexs numèrics, 817 00:55:25,670 --> 00:55:32,140 i ara és clave1, key2, key3, i estan entre cometes dobles per significar que són totes les cadenes. 818 00:55:32,140 --> 00:55:34,470 Així que podem tenir un exemple d'això. 819 00:55:34,470 --> 00:55:38,790 L'exemple d'això és que tenim el tf, i aquest és el nom de l'índex. 820 00:55:38,790 --> 00:55:42,030 Ens posarem "Ali", com el nom, en l'índex, les calories consumides, 821 00:55:42,030 --> 00:55:47,640 podem posar un int aquesta vegada en lloc d'una cadena, 822 00:55:47,640 --> 00:55:52,240 i després als gustos d'índex, podem posar tota una matriu dins d'ella. 823 00:55:52,240 --> 00:55:55,490 Així que això és una mena de - és un concepte similar a la forma en què teníem 824 00:55:55,490 --> 00:55:58,930 índexs amb els números, però ara podem canviar els índexs d'al voltant 825 00:55:58,930 --> 00:56:03,890 de tenir-los com cadenes en lloc. 826 00:56:03,890 --> 00:56:06,070 També pot fer això, a més de només fer-ho de forma individual, 827 00:56:06,070 --> 00:56:09,400 vostè pot fer-ho tot en un sol tros. Així es pot veure que tf de la matriu, 828 00:56:09,400 --> 00:56:13,350 i després ens vam anar a tots vam posar en un joc gegant de claudàtor. 829 00:56:13,350 --> 00:56:15,220 Així que pot accelerar les coses. 830 00:56:15,220 --> 00:56:19,730 Es tracta més d'una elecció estilística que no. 831 00:56:19,730 --> 00:56:21,550 També tenim llaços. 832 00:56:21,550 --> 00:56:26,020 En C tenim llaços que funcionen d'aquesta manera. 833 00:56:26,020 --> 00:56:29,690 Vam tenir la nostra matriu, i ens vam anar des de l'índex 0 fins al final de la llista, 834 00:56:29,690 --> 00:56:31,740 i imprimim tot, oi? 835 00:56:31,740 --> 00:56:33,880 Excepte el problema és, per a matrius associatives, 836 00:56:33,880 --> 00:56:36,610 no sabem necessàriament els índexs numèrics 837 00:56:36,610 --> 00:56:39,610 perquè ara tenim els índexs de les cadenes. 838 00:56:39,610 --> 00:56:44,800 Ara fem servir bucles foreach, que, de nou, que va utilitzar amb sort en PSET juliol. 839 00:56:44,800 --> 00:56:48,930 Bucles foreach s'acaba de conèixer cada part de la llista. 840 00:56:48,930 --> 00:56:52,450 I no ha de saber exactament l'índex numèric que vostè té. 841 00:56:52,450 --> 00:56:56,490 Pel que té la sintaxi foreach, així que és foreach, es posa la matriu. 842 00:56:56,490 --> 00:57:00,430 Així que el meu matriu s'anomena conjunt de processadors, i després com, la paraula com, 843 00:57:00,430 --> 00:57:04,530 i després es posa aquesta variable temporal local que es va a utilitzar 844 00:57:04,530 --> 00:57:10,690 només per l'acció específica que sostindrà el concret - 845 00:57:10,690 --> 00:57:14,770 una instància o una secció de la matriu. 846 00:57:14,770 --> 00:57:18,350 Num PSET celebrarà 1, i després potser es durà a terme el número 6, 847 00:57:18,350 --> 00:57:20,410 i després es durà a terme el número 2. 848 00:57:20,410 --> 00:57:26,630 Però està garantit que passar per cada valor únic que està en la matriu. 849 00:57:26,630 --> 00:57:30,530 Funcions útils que vostè ha de saber en PHP són el requerir, 850 00:57:30,530 --> 00:57:35,880 de manera que s'assegura que vostè està incloent alguns arxius, ressò, sortida, buit. 851 00:57:35,880 --> 00:57:40,490 Li recomano que miri PSET 7 i mirar aquestes funcions. 852 00:57:40,490 --> 00:57:42,810 Podria ser necessari conèixer aquells, 853 00:57:42,810 --> 00:57:47,060 així que sens dubte sap el que és, exactament, els que tots estem fent. 854 00:57:47,060 --> 00:57:50,080 >> I ara anem a anar a través d'abast molt ràpidament. 855 00:57:50,080 --> 00:57:53,490 En l'abast, PHP és una mena de cosa covard, a diferència de C, 856 00:57:53,490 --> 00:57:56,170 de manera que només anem a anar a través d'ell ràpidament. 857 00:57:56,170 --> 00:57:58,930 Així que diguem que vam començar en aquesta fletxa que tenim allà. 858 00:57:58,930 --> 00:58:02,900 I anem a començar amb $ i. Així que la variable 'i' serà 0, 859 00:58:02,900 --> 00:58:06,730 i només seguirem imprimint gran quadre blanc d'allà. 860 00:58:06,730 --> 00:58:09,220 Anem a començar amb i0, i després repetirem ella. 861 00:58:09,220 --> 00:58:12,670 Així que aquí està el 0. 862 00:58:12,670 --> 00:58:15,210 I després anem a incrementar-lo en el bucle per, 863 00:58:15,210 --> 00:58:17,810 i després que serà el valor d'1. 864 00:58:17,810 --> 00:58:20,070 Un d'ells és menor de 3, pel que passarà a través d'aquest bucle, 865 00:58:20,070 --> 00:58:23,230 i després anem a veure-ho imprès de nou. 866 00:58:23,230 --> 00:58:25,520 Anem a incrementar de nou a 2, 867 00:58:25,520 --> 00:58:29,860 i 2 és menor que 3, pel que et passarà el bucle for, i voleu imprimir la 2. 868 00:58:29,860 --> 00:58:35,100 Llavors se li nota que 3 no és menor que 3, així que vas a trencar fora del bucle for. 869 00:58:35,100 --> 00:58:40,050 Així que ara que hem acabat i, a continuació, entrarem en AFunction. 870 00:58:40,050 --> 00:58:45,010 Okay. Així que cal assenyalar que aquesta variable que hem creat, 871 00:58:45,010 --> 00:58:48,270 la variable 'i', no està en l'àmbit local. 872 00:58:48,270 --> 00:58:50,280 Això significa que no és local per al bucle, 873 00:58:50,280 --> 00:58:58,060 i que la variable que encara pot accedir i canviar després, i encara serà eficaç. 874 00:58:58,060 --> 00:59:02,160 Així que si vas a la funció ara, veuràs que també utilitzem la variable 'i', 875 00:59:02,160 --> 00:59:05,320 i incrementarem 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Es podria pensar que, en un primer moment, en base de C, que és una còpia de la variable 'i'. 877 00:59:09,410 --> 00:59:12,830 És una cosa totalment diferent, la qual cosa és correcte. 878 00:59:12,830 --> 00:59:16,560 Així que quan imprimim, anem a imprimir 'i' + +, que es va a imprimir que 4, 879 00:59:16,560 --> 00:59:19,640 i després anem a - ho sento. 880 00:59:19,640 --> 00:59:22,030 Llavors anem a acabar d'aquesta funció, 881 00:59:22,030 --> 00:59:24,820 i nosaltres estarem on la fletxa és en aquests moments. 882 00:59:24,820 --> 00:59:29,190 Això vol dir que llavors, però, tot i que la funció canvia el valor de 'i', 883 00:59:29,190 --> 00:59:32,620 no va canviar fora de la funció, 884 00:59:32,620 --> 00:59:35,060 pel fet que la funció té un àmbit d'aplicació separada. 885 00:59:35,060 --> 00:59:38,960 Això vol dir que quan ens fem ressò de 'i', no ha canviat en l'àmbit de la funció, 886 00:59:38,960 --> 00:59:43,660 i així, anem a imprimir 3 de nou. 887 00:59:43,660 --> 00:59:47,520 Diferents coses sobre l'abast en PHP que en C. 888 00:59:47,520 --> 00:59:51,130 >> Ara en PHP i HTML. 889 00:59:51,130 --> 00:59:53,510 PHP és usat per fer pàgines web dinàmiques. 890 00:59:53,510 --> 00:59:58,660 És una cosa que fa que les coses diferent. 891 00:59:58,660 --> 01:00:02,090 Tenim diferent d'HTML. 892 01:00:02,090 --> 01:00:05,230 Amb HTML, sempre només tenim la mateixa cosa estàtica, com la forma de Rob va mostrar, 893 01:00:05,230 --> 01:00:09,370 mentre que PHP, pot canviar les coses en funció de qui és l'usuari. 894 01:00:09,370 --> 01:00:11,830 Així que si tinc això, he, "ha iniciat la sessió com -" i després el nom, 895 01:00:11,830 --> 01:00:14,420 i puc canviar el nom. Així que ara el nom és Josep, 896 01:00:14,420 --> 01:00:18,880 i té el "Quant a mi", però després també pot canviar el nom a tenir Tommy. 897 01:00:18,880 --> 01:00:21,700 I això seria una cosa diferent. 898 01:00:21,700 --> 01:00:23,840 Així que també podem canviar les coses diferents sobre ell, 899 01:00:23,840 --> 01:00:27,070 i es mostrarà un contingut diferent en funció del nom. 900 01:00:27,070 --> 01:00:31,430 Així que PHP pot tipus de canviar el que està passant al seu lloc web. 901 01:00:31,430 --> 01:00:33,540 El mateix dic. No obstant això, tingueu en compte que tenen un contingut diferent, 902 01:00:33,540 --> 01:00:38,870 tot i que vostè està tècnicament encara accedint aquesta mateixa pàgina web a la superfície. 903 01:00:38,870 --> 01:00:43,450 Generació d'HTML. Hi ha 2 maneres diferents que vostè pot fer això. 904 01:00:43,450 --> 01:00:48,980 Així que anem a passar per això en aquest moment. La primera manera és, vostè té - si, ho sento. 905 01:00:48,980 --> 01:00:51,150 Pel que només té el seu habitual cicle for a PHP, 906 01:00:51,150 --> 01:00:56,270 i després li trobo a PHP i trec HTML. 907 01:00:56,270 --> 01:00:58,720 Usant el que Rob li va mostrar d'escriptura HTML 908 01:00:58,720 --> 01:01:04,030 i després utilitzant la impressió PHP simplement imprimir per a la pàgina web. 909 01:01:04,030 --> 01:01:09,520 La forma alternativa és fer-ho com si se separa el PHP i el codi HTML. 910 01:01:09,520 --> 01:01:11,940 Així que vostè pot tenir una línia de PHP que s'inicia el bucle for, 911 01:01:11,940 --> 01:01:16,020 llavors vostè pot tenir la línia de l'HTML en una cosa separada, 912 01:01:16,020 --> 01:01:19,700 i després s'acaba el bucle, de nou, amb un PHP. 913 01:01:19,700 --> 01:01:21,800 Així que és una espècie de separar a terme. 914 01:01:21,800 --> 01:01:24,020 Al costat esquerre, pot ser que vostè tingui tota la - 915 01:01:24,020 --> 01:01:26,360 és només 1 tros de PHP. 916 01:01:26,360 --> 01:01:28,510 A la dreta es pot veure que té una línia de PHP, 917 01:01:28,510 --> 01:01:32,540 disposa d'una línia d'HTML, i té una línia de PHP de nou. 918 01:01:32,540 --> 01:01:36,870 Així que el separa cap a fora en el que estan fent. 919 01:01:36,870 --> 01:01:39,330 I se li nota que de qualsevol manera, per a qualsevol d'ells, 920 01:01:39,330 --> 01:01:41,980 encara imprimeixen la imatge, la imatge, la imatge, 921 01:01:41,980 --> 01:01:44,540 de manera que l'HTML encara s'imprimeix la mateixa manera. 922 01:01:44,540 --> 01:01:49,870 I llavors vostè encara veu les 3 imatges apareixen al seu lloc web. 923 01:01:49,870 --> 01:01:52,820 Així que és de 2 maneres diferents de fer el mateix. 924 01:01:52,820 --> 01:01:55,060 >> Ara tenim formularis i sol · licituds. Com Rob li va mostrar, 925 01:01:55,060 --> 01:01:59,400 hi ha formes d'HTML, i nosaltres simplement brisa a través d'això. 926 01:01:59,400 --> 01:02:02,040 Vostè té una acció i té un mètode, i la seva acció 927 01:02:02,040 --> 01:02:04,350 amable de la seva part en la qual va a enviar es nota, i el mètode és si 928 01:02:04,350 --> 01:02:06,960 que serà un GET o POST. 929 01:02:06,960 --> 01:02:11,220 I una petició GET, com va dir Rob, vol dir que vostè va a posar en un formulari 930 01:02:11,220 --> 01:02:15,760 i veuràs com un URL, mentre que una petició POST que no veurà en una URL. 931 01:02:15,760 --> 01:02:17,840 Així que una lleugera diferència. 932 01:02:17,840 --> 01:02:19,950 Tanmateix, una cosa que és una cosa similar 933 01:02:19,950 --> 01:02:22,560 és que POST i GET són igualment insegur. 934 01:02:22,560 --> 01:02:26,430 Així que vostè pot pensar que només perquè vostè no ho veu a la URL, 935 01:02:26,430 --> 01:02:28,790 això significa que el POST és més segur, 936 01:02:28,790 --> 01:02:34,420 però encara es pot veure en els teus galetes en la informació que vostè està enviant. 937 01:02:34,420 --> 01:02:38,260 Així que no crec que al voltant d'un o de l'altre. 938 01:02:38,260 --> 01:02:42,160 Una altra cosa a tenir en compte és que vostè també té variables de secció. 939 01:02:42,160 --> 01:02:45,850 Vostès utilitzen això en PSET 7 per obtenir la seva informació de ID d'usuari. 940 01:02:45,850 --> 01:02:48,550 El que va passar és que es pot utilitzar aquesta matriu associativa, 941 01:02:48,550 --> 01:02:53,310 la $ _SESSION, i després vostè és capaç d'accedir a diferents coses 942 01:02:53,310 --> 01:02:57,720 i emmagatzemar les coses diferents a través de les pàgines. 943 01:02:57,720 --> 01:03:00,750 >> L'última cosa és que tenim SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 i aquest és un llenguatge de programació per gestionar bases de dades. 945 01:03:04,360 --> 01:03:08,220 Què, exactament, són les bases de dades? Són col · leccions de taules, 946 01:03:08,220 --> 01:03:10,630 i cada taula pot tenir el mateix gènere d'objectes. 947 01:03:10,630 --> 01:03:14,990 Així que vam tenir una taula d'usuaris en el seu conjunt de processadors finances. 948 01:03:14,990 --> 01:03:20,610 I per què són útils? Perquè és una forma d'emmagatzemar permanentment informació. 949 01:03:20,610 --> 01:03:22,840 És una forma de seguiment de les coses i la gestió de les coses 950 01:03:22,840 --> 01:03:25,890 i de fet de veure que en diferents pàgines i fer el seguiment. 951 01:03:25,890 --> 01:03:29,930 Mentre que si vostè acaba de guardar en aquell moment immediat 952 01:03:29,930 --> 01:03:33,720 i després usar-lo més tard, vostè no serà capaç d'accedir a qualsevol cosa que t'has estalviat. 953 01:03:33,720 --> 01:03:37,660 Tenim 4 coses principals que utilitzem per les ordres SQL. 954 01:03:37,660 --> 01:03:40,190 Tenim seleccionar, inserir, eliminar i actualitzar. 955 01:03:40,190 --> 01:03:42,880 Aquests són realment importants perquè sàpiguen del seu concurs. 956 01:03:42,880 --> 01:03:45,990 >> Anirem ràpidament sobre Seleccionem aquests moments. 957 01:03:45,990 --> 01:03:48,540 Bàsicament, vostè està seleccionant les files d'una base de dades. 958 01:03:48,540 --> 01:03:52,400 Així que si tens, aquí - 959 01:03:52,400 --> 01:03:56,740 tenim aquestes 2 coses diferents, i volem seleccionar de la taula de classes 960 01:03:56,740 --> 01:04:01,480 on impressionant - on a la columna impressionant el valor és 1. 961 01:04:01,480 --> 01:04:04,460 Així que vostè pot veure aquí, tenim aquestes 2 coses del nom de la classe, 962 01:04:04,460 --> 01:04:08,490 CS50 i Stat110, i comptem amb els identificadors de classe i el lema. 963 01:04:08,490 --> 01:04:13,150 Així que volem seleccionar tota aquesta informació. 964 01:04:13,150 --> 01:04:17,480 A continuació es pot veure aquí que és una espècie d'escollir d'aquesta columna impressionant, 965 01:04:17,480 --> 01:04:25,170 on totes les coses són 1, i després té la classe d'identificació, nom de la classe i el lema que es pot escollir. 966 01:04:25,170 --> 01:04:28,100 Com és exactament el que fa això en el codi? Vostè ha de fer servir PHP. 967 01:04:28,100 --> 01:04:33,830 Així que és una espècie de com PHP i SQL estan relacionats entre si. 968 01:04:33,830 --> 01:04:38,130 Ara tenim el nostre codi, i utilitzarem la nostra funció de consulta 969 01:04:38,130 --> 01:04:41,370 com ho vam fer a PSET 7, i que anem a executar la consulta SQL. 970 01:04:41,370 --> 01:04:43,870 Llavors tindrem - 971 01:04:43,870 --> 01:04:46,280 sempre hem de comprovar si la triple fila igual si és fals. 972 01:04:46,280 --> 01:04:49,010 Així que de nou, que desitja comprovar el tipus i el valor, 973 01:04:49,010 --> 01:04:53,880 i després, si no funciona, llavors vostè vol demanar disculpes, com de costum, com ho vam fer en PSET juliol. 974 01:04:53,880 --> 01:04:55,870 En cas contrari, vostè vol recórrer tot amb aquells útil 975 01:04:55,870 --> 01:04:59,410 foreach bucle que ens vam anar de nou. 976 01:04:59,410 --> 01:05:01,280 Ara que estem recorrent i hem fet més enllà, 977 01:05:01,280 --> 01:05:05,080 suposarem que la nostra consulta passar, ara tenim el nostre bucle foreach. 978 01:05:05,080 --> 01:05:11,050 I la primera fila que té, així que aquí està la fila, aquí, sinó que està en caixa. 979 01:05:11,050 --> 01:05:14,010 Es va a imprimir tota la informació que s'ha tornat. 980 01:05:14,010 --> 01:05:18,070 Així que voleu imprimir a la part inferior "Vols aprendre HTML?" 981 01:05:18,070 --> 01:05:23,370 Després es va a anar a la següent fila, perquè està completa la primera bucle for, 982 01:05:23,370 --> 01:05:26,510 i pel que també va a imprimir la segona línia de la mateixa, 983 01:05:26,510 --> 01:05:32,120 que serà STAT110, trobar tots els moments. 984 01:05:32,120 --> 01:05:34,290 >> Una última cosa és en SQL vulnerabilitats. 985 01:05:34,290 --> 01:05:37,300 Sé que David es va referir a això una mica en la conferència. 986 01:05:37,300 --> 01:05:40,730 Vostè pot llegir més tard. És realment graciós. 987 01:05:40,730 --> 01:05:45,320 Injecció SQL és una mena de cosa difícil. 988 01:05:45,320 --> 01:05:49,890 Diguem que vostè acaba d'enganxar aquestes variables a la dreta a la consulta, 989 01:05:49,890 --> 01:05:52,290 com es pot veure a la primera línia. 990 01:05:52,290 --> 01:05:54,520 Per tant, sembla estar bé, oi? No ets més que posar el nom d'usuari 991 01:05:54,520 --> 01:05:58,820 i una contrasenya per a la consulta de SQL, i vostè vol enviar fora i obtenir el que està en la taula de dades. 992 01:05:58,820 --> 01:06:01,450 Això sembla bastant simple. Així que diguem que algú posa en, 993 01:06:01,450 --> 01:06:04,910 per a la contrasenya, aquest o el text aquí - 994 01:06:04,910 --> 01:06:06,780 en realitat hauria d'estar en el quadre vermell. 995 01:06:06,780 --> 01:06:11,920 Així que diguem que posen aquesta contrasenya en - que és el que entren. 996 01:06:11,920 --> 01:06:16,520 Així que estan posant o "1" = 1. 997 01:06:16,520 --> 01:06:20,880 És una mena de contrasenya ximple tenir. 998 01:06:20,880 --> 01:06:25,070 Ara anem a reemplaçar en consells, es tingui en compte que en aquesta consulta SQL ara, 999 01:06:25,070 --> 01:06:29,090 s'avalua com sempre és cert, perquè se li nota que 1000 01:06:29,090 --> 01:06:32,240 pots consulta SQL seleccionar tota aquesta informació 1001 01:06:32,240 --> 01:06:35,420 o simplement pot tenir 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Així que sempre es va a avaluar true. 1003 01:06:41,030 --> 01:06:46,610 Això no va a treballar de veritat, perquè això significa que el hacker pot entrar al sistema. 1004 01:06:46,610 --> 01:06:49,300 La solució a això és que vostè ha de fer servir el sistema de DOP, 1005 01:06:49,300 --> 01:06:51,360 el que significa que vostè ha d'utilitzar signes d'interrogació, 1006 01:06:51,360 --> 01:06:53,350 que és el que vostès utilitzen en PSET 7, 1007 01:06:53,350 --> 01:06:57,620 on es va a utilitzar un signe d'interrogació en lloc d'en la qual desitja posar alguna cosa, 1008 01:06:57,620 --> 01:07:01,430 i després et vas a tenir una coma, i després vostè tindrà després, 1009 01:07:01,430 --> 01:07:07,610 després de la seva cadena, les diferents variables que desitja substituir en el seu signe d'interrogació. 1010 01:07:07,610 --> 01:07:10,330 Així podràs notar aquí que ara tinc aquests signes d'interrogació vermell. 1011 01:07:10,330 --> 01:07:15,420 Després vaig posar les variables després de les cadenes, així que sé de substituir en aquest ordre després. 1012 01:07:15,420 --> 01:07:18,470 Això s'ha d'assegurar que si algú ho fa així, 1013 01:07:18,470 --> 01:07:24,050 i tenen la o 1 = 1 situació, que s'assegurarà, 1014 01:07:24,050 --> 01:07:30,490 a la part final, assegureu-vos que en realitat no trencar la consulta SQL. 1015 01:07:30,490 --> 01:07:33,660 Molt bé, així que això és tot, un remolí de PHP i SQL. 1016 01:07:33,660 --> 01:07:41,520 Molta sort a tots vostès, i ara a Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Bé tothom. És hora de repassar alguns JavaScript 1018 01:07:44,270 --> 01:07:48,840 i algunes altres coses molt ràpidament, així que no tenen que fins aquesta nit. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Sí JavaScript és una mena de cosa fresca, suposadament. 1020 01:07:56,930 --> 01:07:59,090 Les coses que realment necessita saber sobre JavaScript, és com 1021 01:07:59,090 --> 01:08:03,810 Al final del costat del client del que la seva aplicació web estarà fent. 1022 01:08:03,810 --> 01:08:08,280 Hi ha algunes coses que simplement no vol fer-se càrrec de tot el temps en el costat del servidor. 1023 01:08:08,280 --> 01:08:12,880 Totes les petites interaccions, destacant una cosa, fer desaparèixer alguna cosa. 1024 01:08:12,880 --> 01:08:15,340 Segur que no vull haver de parlar amb el seu servidor tot el temps per això. 1025 01:08:15,340 --> 01:08:18,069 I alguns dels que ni tan sols és possible fer-ho al costat del servidor. 1026 01:08:18,069 --> 01:08:21,899 És per això que necessitem alguna cosa com JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Coses interessants sobre JavaScript: és tipus dinàmics. 1028 01:08:24,359 --> 01:08:27,149 El que això significa és que el seu programa no necessita saber 1029 01:08:27,149 --> 01:08:30,970 Què, exactament, les variables són quan escrius a terme. 1030 01:08:30,970 --> 01:08:34,510 Serà només una espècie de figura cap a fora segons s'executa. 1031 01:08:34,510 --> 01:08:37,520 Altres coses que són millor d'això: És un llenguatge de claudàtor, 1032 01:08:37,520 --> 01:08:41,359 el que significa que la sintaxi és similar a C i PHP. 1033 01:08:41,359 --> 01:08:47,050 Vostè no ha de fer molt de la represa quan estàs aprenent JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Aquí tenim una mica de JavaScript. 1035 01:08:49,180 --> 01:08:52,560 L'interessant aquí és que, si ens fixem en ell, 1036 01:08:52,560 --> 01:08:56,330 tenim una mica de JavaScript allà mateix, a l'etiqueta del cap. 1037 01:08:56,330 --> 01:08:59,479 El que és no és, bàsicament, només cal incloure un arxiu JavaScript. 1038 01:08:59,479 --> 01:09:02,260 Aquesta és una manera que vostè pot incloure el Javascript al seu programa. 1039 01:09:02,260 --> 01:09:06,910 A continuació, el segon poc és en realitat una mica de JavaScript inline, 1040 01:09:06,910 --> 01:09:10,790 molt similar a un estil en línia amb CSS, 1041 01:09:10,790 --> 01:09:16,180 i només estàs escrivint una mica de codi molt ràpidament allà. 1042 01:09:16,180 --> 01:09:18,120 JavaScript té arrays. 1043 01:09:18,120 --> 01:09:20,850 Només una altra manera de mantenir les dades del voltant, molt útil. 1044 01:09:20,850 --> 01:09:25,180 Molt agradable i fàcil de sintaxi. 1045 01:09:25,180 --> 01:09:29,870 Utilitzeu claudàtors per accedir a tot i mantenir tot junt. 1046 01:09:29,870 --> 01:09:35,020 Res massa complex. 1047 01:09:35,020 --> 01:09:38,630 El millor de JavaScript i llenguatges de scripting en general 1048 01:09:38,630 --> 01:09:40,920 és que vostè no ha de preocupar sobre mides de matriu. 1049 01:09:40,920 --> 01:09:43,880 Vostè només pot utilitzar array.length i realitzar un seguiment de la mateixa, 1050 01:09:43,880 --> 01:09:46,960 i també l'arranjament pot augmentar o disminuir a mesura que ho necessiti. 1051 01:09:46,960 --> 01:09:49,279 Així que vostè ni tan sols ha de preocupar-se per cap tipus de, 1052 01:09:49,279 --> 01:09:57,050 oh no, he de assignar més coses, o alguna cosa per l'estil. 1053 01:09:57,050 --> 01:10:00,090 >> L'interessant aquí és que JavaScript té alguna cosa que es diu objectes. 1054 01:10:00,090 --> 01:10:04,800 És un llenguatge orientat a objectes, de manera que el que té és, en essència, 1055 01:10:04,800 --> 01:10:10,100 una forma d'agrupar dades en conjunt, alguna cosa similar a una estructura, 1056 01:10:10,100 --> 01:10:17,280 però es pot accedir com una estructura o en una sintaxi de matrius associatives. 1057 01:10:17,280 --> 01:10:22,520 És bastant simple i el que pot fer amb això és agrupar dades en conjunt 1058 01:10:22,520 --> 01:10:24,810 si vostè té un munt de dades que està relacionat. 1059 01:10:24,810 --> 01:10:26,850 Perquè és tot el que necessita per descriure un cotxe, 1060 01:10:26,850 --> 01:10:29,050 vostè no necessita tenir en un munt de diferents llocs. 1061 01:10:29,050 --> 01:10:35,300 Vostè només pot enganxar en 1 objecte en JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Com vostè probablement sap, la iteració és una d'aquestes tasques tedioses. 1063 01:10:39,090 --> 01:10:43,810 Vostè acaba de fer-ho a través d'una altra vegada. Vostè necessita parlar amb tots els objectes al cotxe, 1064 01:10:43,810 --> 01:10:47,340 o si ha d'anar a través de tots els elements d'una llista o alguna cosa per l'estil. 1065 01:10:47,340 --> 01:10:51,770 Així JavaScript té, similar a PHP, una sintaxi foreach. 1066 01:10:51,770 --> 01:10:54,590 En aquest cas, és una al bucle. 1067 01:10:54,590 --> 01:10:57,300 Vostè voleu utilitzar aquest només en els objectes. 1068 01:10:57,300 --> 01:11:01,030 Hi ha alguns problemes que es produeixen si s'utilitza aquest a una matriu. 1069 01:11:01,030 --> 01:11:03,750 En general, és una d'aquestes coses, però, que és molt útil, 1070 01:11:03,750 --> 01:11:06,590 perquè s'elimina una gran quantitat de despeses generals 1071 01:11:06,590 --> 01:11:10,270 perquè vostè no ha de llençar tot el que troba al seu objecte per si mateix. 1072 01:11:10,270 --> 01:11:12,300 No ha de recordar tots els noms de les tecles. 1073 01:11:12,300 --> 01:11:18,270 Vostè només una mena d'obtenir de nou en aquesta sintaxi. 1074 01:11:18,270 --> 01:11:21,500 En això, per, el que desitja recordar 1075 01:11:21,500 --> 01:11:27,180 que et van a donar volta totes les tecles, d'una manera molt similar a la taula de hash. 1076 01:11:27,180 --> 01:11:30,880 Si et recordes d'això, quan vol posar en una cadena que podria treure alguna cosa 1077 01:11:30,880 --> 01:11:33,840 que tindrien un valor associat amb ell. 1078 01:11:33,840 --> 01:11:36,360 El que pot fer amb això és que es pot dir, d'acord, 1079 01:11:36,360 --> 01:11:42,120 Vaig posar en un cotxe, i li vaig trucar un Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Així que vostè pot posar a la cadena de Ferrari de nou més tard, i vostè pot aconseguir això. 1081 01:11:45,290 --> 01:11:50,000 I vostè pot fer això en un bucle, amb l'en el bucle. 1082 01:11:50,000 --> 01:11:53,320 Així que més sobre els objectes. La clau d'això cal recordar 1083 01:11:53,320 --> 01:12:00,340 és que es pot utilitzar l'estructura objecte com sintaxi quan vulguis amb ells, 1084 01:12:00,340 --> 01:12:04,590 excepte si el que vas a utilitzar com una cadena no és un nom de variable vàlid. 1085 01:12:04,590 --> 01:12:07,650 Així que si ens fixem en que no tenim clau amb espais. 1086 01:12:07,650 --> 01:12:12,500 Bé, si hagués de posar object.key, espai, amb, espai, espais, 1087 01:12:12,500 --> 01:12:15,320 que simplement no tindria sentit sintàcticament. 1088 01:12:15,320 --> 01:12:22,730 Pel que només pot fer això amb aquest tipus de sintaxi de suport. 1089 01:12:22,730 --> 01:12:26,520 >> També Javascript és molt àmbit-savi PHP. 1090 01:12:26,520 --> 01:12:29,050 Tens 2 maneres d'abordar l'abast. 1091 01:12:29,050 --> 01:12:31,960 No es pot tenir la var davant d'una variable, 1092 01:12:31,960 --> 01:12:34,060 i això només significa que és global. 1093 01:12:34,060 --> 01:12:37,050 Es pot veure des de qualsevol lloc. Fins i tot si anés a posar això en una sentència if, 1094 01:12:37,050 --> 01:12:42,430 en qualsevol altre lloc en el codi després d'aquest punt es podia veure aquesta variable. 1095 01:12:42,430 --> 01:12:46,730 Una altra cosa, però, és amb el var limitada per a qualsevol funció que vostè està dins 1096 01:12:46,730 --> 01:12:48,870 Si no està en una funció, bé, és global. 1097 01:12:48,870 --> 01:12:53,900 Però si vostè està en una funció que és només visible dins d'aquesta funció. 1098 01:12:53,900 --> 01:12:56,420 Jo no tinc un exemple, però si. És una d'aquelles coses on 1099 01:12:56,420 --> 01:12:59,900 vostè pot gestionar les variables que vostè vol ser global, 1100 01:12:59,900 --> 01:13:03,810 quines són les variables que desitja ser local, però sí que cal anar amb compte amb això, 1101 01:13:03,810 --> 01:13:06,890 perquè vostè no té el tipus de control de gra fi que es fa en C, 1102 01:13:06,890 --> 01:13:15,820 on si alguna cosa es declara en un bucle, que va a romandre en aquest bucle. 1103 01:13:15,820 --> 01:13:18,790 El que realment es preocupen per Javascript per la manipulació pàgines web, no? 1104 01:13:18,790 --> 01:13:21,800 Vull dir, és per això que estem fent això. 1105 01:13:21,800 --> 01:13:23,840 >> Per fer això, fem servir una cosa anomenada DOM. 1106 01:13:23,840 --> 01:13:25,850 El Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Bàsicament, el que fa és que pren tot el seu HTML 1108 01:13:29,430 --> 01:13:34,110 i models cap a fora en un munt d'objectes que estan niats uns dins dels altres. 1109 01:13:34,110 --> 01:13:37,080 Comences amb alguna cosa com això. 1110 01:13:37,080 --> 01:13:44,770 Vostè té, a la dreta per a mi, un munt de codi per aquí que és una mena de - 1111 01:13:44,770 --> 01:13:46,640 Es podria pensar que seria molt difícil de manipular, 1112 01:13:46,640 --> 01:13:48,700 perquè estaries va a analitzar a través d'un munt de text 1113 01:13:48,700 --> 01:13:52,080 i tenir a peça a part coses. I què si no s'ha formatat correctament? 1114 01:13:52,080 --> 01:13:54,880 Les coses dolentes que succeiria. 1115 01:13:54,880 --> 01:13:58,140 Així que JavaScript s'encarrega d'això per a vostè, i vostè té una estructura de dades molt bé, 1116 01:13:58,140 --> 01:14:01,390 com el de l'esquerra, en el qual només té un document, 1117 01:14:01,390 --> 01:14:03,530 ia l'interior que vostè té alguna cosa que es diu HTML, 1118 01:14:03,530 --> 01:14:05,600 ia l'interior que té un cap i un cos, 1119 01:14:05,600 --> 01:14:08,420 i dins d'aquesta cap que tens un títol, etcètera, etcètera, etcètera. 1120 01:14:08,420 --> 01:14:11,810 Això simplifica la manipulació d'una pàgina web perquè sigui més just, 1121 01:14:11,810 --> 01:14:14,190 oh, jo només vull parlar amb aquest objecte. 1122 01:14:14,190 --> 01:14:21,340 Ordenar d'una manera molt similar que parlaria amb un altre objecte que et vas fer. 1123 01:14:21,340 --> 01:14:25,980 Com he dit, tot el DOM està en l'objecte de document. 1124 01:14:25,980 --> 01:14:29,290 O és simplement un lloc i després es pot anar dins d'ella per trobar les coses, 1125 01:14:29,290 --> 01:14:33,880 i vostè pot fer-ho - aquest és el vell estil de fer que, allà dalt, 1126 01:14:33,880 --> 01:14:38,130 en el qual fer document.getElementById, i després el nom, 1127 01:14:38,130 --> 01:14:42,420 i com vostè pot dir probablement, això es torna molt difícil de manejar després d'un temps. 1128 01:14:42,420 --> 01:14:44,480 Així que és probable que no vols fer això. És per això que tenim 1129 01:14:44,480 --> 01:14:48,760 el següent que parlarem després d'això. 1130 01:14:48,760 --> 01:14:52,510 La clau aquí és que, d'acord, vostè té tots aquests elements, no? 1131 01:14:52,510 --> 01:14:56,400 Així que potser pugui canviar el color d'alguna cosa quan es carrega la pàgina. 1132 01:14:56,400 --> 01:14:58,380 I què? Què passa si el meu usuari fa clic en alguna cosa? 1133 01:14:58,380 --> 01:15:00,540 Jo vull que faci alguna cosa interessant quan facin clic en alguna cosa. 1134 01:15:00,540 --> 01:15:02,600 És per això que tenim esdeveniments. 1135 01:15:02,600 --> 01:15:05,330 Vostè pot, bàsicament, trobar qualsevol element en el seu DOM, 1136 01:15:05,330 --> 01:15:08,560 i després diuen, escolta. Quan això càrrega o algú fa clic, 1137 01:15:08,560 --> 01:15:11,410 o quan el ratolí sobre ella, fan alguna cosa amb ell. 1138 01:15:11,410 --> 01:15:15,330 I el que tenim és, vostè té les funcions que s'encarreguen d'això per a vostè. 1139 01:15:15,330 --> 01:15:17,980 Aquestes funcions són controladors d'esdeveniments. 1140 01:15:17,980 --> 01:15:20,440 Què they're - és només una forma elegant de dir, 1141 01:15:20,440 --> 01:15:23,500 aquesta funció només s'executa quan l'esdeveniment passa. 1142 01:15:23,500 --> 01:15:28,070 Per tant, controla l'esdeveniment que es produeix. 1143 01:15:28,070 --> 01:15:30,810 Així és com se li dissenyar un controlador d'esdeveniments. 1144 01:15:30,810 --> 01:15:34,750 Tinc una mica de botó, i quan fa clic, explota. 1145 01:15:34,750 --> 01:15:40,560 Així que no feu clic al botó. 1146 01:15:40,560 --> 01:15:42,910 Aquesta és una manera d'acostar-s'hi, no? 1147 01:15:42,910 --> 01:15:46,430 Vostè té una etiqueta de botó, i en fer clic vostè té una cadena que diu, 1148 01:15:46,430 --> 01:15:50,460 oh, per cert, ho faig de l'explosió per a mi. 1149 01:15:50,460 --> 01:15:53,990 En cas contrari, és com un botó normal que acaba de fer. 1150 01:15:53,990 --> 01:15:56,550 També es pot fer d'una altra manera, 1151 01:15:56,550 --> 01:16:02,770 agafant l'element DOM, però anem a guardar que després parlem de jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: És una llibreria que és cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Es pot utilitzar en gairebé qualsevol cosa. 1154 01:16:09,580 --> 01:16:12,090 I només et dóna un munt d'eines per treballar. 1155 01:16:12,090 --> 01:16:15,850 A causa JavaScript, mentre que de gran abast, no té totes les eines que necessita 1156 01:16:15,850 --> 01:16:20,550 fora de la caixa per fer front realment una aplicació web és possible que vulgueu fer. 1157 01:16:20,550 --> 01:16:24,650 Pel que simplifica molt les coses, et dóna un munt de funcions 1158 01:16:24,650 --> 01:16:28,760 fora de la caixa que normalment ha d'escriure vostè mateix, una i altra vegada i una altra. 1159 01:16:28,760 --> 01:16:31,600 I només fa les coses molt simples. 1160 01:16:31,600 --> 01:16:35,780 Vostè també té selectors, que li permeten prendre tots aquests elements 1161 01:16:35,780 --> 01:16:42,800 de la seva DOM molt més simplement, en lloc d'haver d'utilitzar aquestes trucades de funció molt llargs. 1162 01:16:42,800 --> 01:16:46,630 Més sobre aquests selectors. Vostè té, allà vostè té, diguem 1163 01:16:46,630 --> 01:16:49,800 Vull aconseguir un element amb l'ID "roca." 1164 01:16:49,800 --> 01:16:56,450 Doncs bé, en jQuery, és només $ i després una cadena que té una lliura, i després "roca." 1165 01:16:56,450 --> 01:17:01,960 És molt simple i molt més ràpida que la forma tradicional de JavaScript d'abordar aquest problema. 1166 01:17:01,960 --> 01:17:06,120 I vostè té coses similars per a les classes i tipus d'elements. 1167 01:17:06,120 --> 01:17:08,140 jQuery és - una de les característiques interessants és que més o menys pots comprimir 1168 01:17:08,140 --> 01:17:14,350 baix de les seves consultes en el seu DOM molt, molt ràpid. 1169 01:17:14,350 --> 01:17:18,980 Ara estem de tornada a la gestió d'esdeveniments, i això és com manejaria un esdeveniment en jQuery. 1170 01:17:18,980 --> 01:17:23,090 Així que el que anem aquí és que estem dient, està bé. Tinc una etiqueta script, oi? 1171 01:17:23,090 --> 01:17:25,400 Així que tinc aquesta línia de JavaScript. 1172 01:17:25,400 --> 01:17:27,750 El que farem és que direm, està bé. 1173 01:17:27,750 --> 01:17:30,860 Quan el document estigui llest, el que significa que ha estat carregat el document, 1174 01:17:30,860 --> 01:17:34,660 anirem a aquesta funció, i que anem a dir, està bé, 1175 01:17:34,660 --> 01:17:37,060 aquesta funció està realment fent una altra cosa. 1176 01:17:37,060 --> 01:17:42,320 És, bàsicament, dient: bé, porta-me'n l'element amb l'ID "myid." 1177 01:17:42,320 --> 01:17:47,960 I a continuació, donar a aquest un gestor de funció que s'executa quan es fa clic. 1178 01:17:47,960 --> 01:17:49,820 Bàsicament el que fa és, es diu, està bé. 1179 01:17:49,820 --> 01:17:52,630 La pàgina es carrega, així que vaig al, de trobar aquest element, 1180 01:17:52,630 --> 01:17:56,420 donar-li aquest controlador d'esdeveniments, i que bàsicament estableix la seva pàgina per a vostè. 1181 01:17:56,420 --> 01:18:00,520 I així és com es vol pensar en la gestió d'esdeveniments. 1182 01:18:00,520 --> 01:18:06,310 El que vol és pensar, bé, quan passa alguna cosa, què és el que vull que passi? 1183 01:18:06,310 --> 01:18:10,520 No vol pensar, bé, jo necessito per assegurar-se que les converses aquesta cosa a aquesta cosa, 1184 01:18:10,520 --> 01:18:14,660 aquesta cosa, bla, bla, bla, perquè el que vol és parlar cosa en termes d'esdeveniments. 1185 01:18:14,660 --> 01:18:17,650 Quan això passa, això succeeix. Quan això succeeix, això succeeix. 1186 01:18:17,650 --> 01:18:20,240 I si les coses es desencadenen altres coses, això és genial. 1187 01:18:20,240 --> 01:18:22,150 Però no vol tractar de fer complicat codi 1188 01:18:22,150 --> 01:18:24,130 on vostè està desencadenant múltiples coses alhora, 1189 01:18:24,130 --> 01:18:28,860 perquè només donarem un mal de cap. 1190 01:18:28,860 --> 01:18:32,340 >> Molt bé. Ara podem obtenir la nostra pàgina de controlar esdeveniments, 1191 01:18:32,340 --> 01:18:35,640 però diguem que el meu usuari fa clic a un botó. 1192 01:18:35,640 --> 01:18:38,040 Què passa si vull enviar aquesta petició de tornada al servidor, 1193 01:18:38,040 --> 01:18:41,100 però jo no vull tornar a carregar la pàgina, perquè haver de recarregar una nova pàgina 1194 01:18:41,100 --> 01:18:44,390 cada vegada que posa una mica avorrit, i per què ho necessito 1195 01:18:44,390 --> 01:18:47,430 per desplegar la capçalera de nou, i el peu de pàgina de nou, 1196 01:18:47,430 --> 01:18:49,670 i tots els elements de la pàgina de nou 1197 01:18:49,670 --> 01:18:53,180 per refrescar la salutació o el temps? 1198 01:18:53,180 --> 01:18:55,290 Així que és per això que tenim una cosa així com l'Ajax. 1199 01:18:55,290 --> 01:18:59,150 El que podem fer aquí amb l'Ajax és el que podem dir, està bé, 1200 01:18:59,150 --> 01:19:01,290 Vull enviar algunes dades al servidor, 1201 01:19:01,290 --> 01:19:04,010 i vull obtenir una resposta de tornada així que puc actualitzar la meva pàgina, 1202 01:19:04,010 --> 01:19:12,120 o potser només fer algun càlcul algorítmic que no mostra necessàriament res a l'usuari. 1203 01:19:12,120 --> 01:19:15,500 Què necessites per fer això? Bé, vostè necessita un URL que necessita parlar. 1204 01:19:15,500 --> 01:19:18,650 El seu servidor no pot màgicament escoltar en no-res. 1205 01:19:18,650 --> 01:19:21,960 Vostè necessita tenir un lloc específic que va a enviar aquestes dades a. 1206 01:19:21,960 --> 01:19:26,240 I també hi ha algunes dades per enviar, o potser és una consulta sense dades. 1207 01:19:26,240 --> 01:19:31,380 L'únic que vol fer ping de nou al servidor i dir, hey, estic viu, o alguna cosa així. 1208 01:19:31,380 --> 01:19:35,150 I llavors vostè vol una funció que bàsicament maneja amb èxit. 1209 01:19:35,150 --> 01:19:38,250 Diguem que vostè torni alguna informació del seu servidor, 1210 01:19:38,250 --> 01:19:42,960 i desitja canviar el càrrec de l'usuari a la seva pàgina. 1211 01:19:42,960 --> 01:19:44,930 Així es podrien obtenir la informació de nou, 1212 01:19:44,930 --> 01:19:48,860 i vostè hauria d'empènyer a la pantalla. 1213 01:19:48,860 --> 01:19:51,170 El que passa és que quan la pàgina està a punt, 1214 01:19:51,170 --> 01:19:56,500 es crea un en funció de clic en aquest botó anomenat benvinguda. 1215 01:19:56,500 --> 01:19:58,810 El que això fa és llavors, quan es prem el botó, 1216 01:19:58,810 --> 01:20:03,700 parles amb greetings.php, vostè fa una petició POST, 1217 01:20:03,700 --> 01:20:07,290 i vostè diu, hey, dóna'm una mica de la teva pàgina. 1218 01:20:07,290 --> 01:20:09,890 Realment no necessitem descriure això, però greetings.php, 1219 01:20:09,890 --> 01:20:12,480 direm, li dóna l'esquena "hola món". 1220 01:20:12,480 --> 01:20:15,650 Així que tornem això "hola món", i en cas d'èxit d'aquest, 1221 01:20:15,650 --> 01:20:20,730 suposant que res surti malament, llavors ens anem a aquest lloc de destinació 1222 01:20:20,730 --> 01:20:25,720 que hem especificat i només mantenim la resposta allà. 1223 01:20:25,720 --> 01:20:31,560 I aquesta és una forma molt senzilla de configurar una consulta d'Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Molt ràpidament, Rob espècie d'esmentar això ja, 1225 01:20:34,340 --> 01:20:37,170 les coses poden anar malament, les coses dolentes poden succeir, 1226 01:20:37,170 --> 01:20:42,660 pel que desitja que es familiaritzi amb aquests codis de resposta HTTP. 1227 01:20:42,660 --> 01:20:46,030 El que es tracta són només, com, 200, tot va sortir bé. 1228 01:20:46,030 --> 01:20:48,670 Una altra cosa, les coses dolentes que va passar. 1229 01:20:48,670 --> 01:20:50,790 En general és el que vol recordar. 1230 01:20:50,790 --> 01:20:53,440 Però és bo saber que tots aquests. 1231 01:20:53,440 --> 01:20:55,970 I, finalment, un cop hem passat per tot això, 1232 01:20:55,970 --> 01:20:58,680 hem de parlar molt ràpidament sobre el disseny, 1233 01:20:58,680 --> 01:21:00,620 i després podem deixar que tots vostès es vagin. 1234 01:21:00,620 --> 01:21:03,410 Disseny. Les coses que vulguis recordar. 1235 01:21:03,410 --> 01:21:06,950 Feu-vos aquestes preguntes: Qui va a utilitzar això? 1236 01:21:06,950 --> 01:21:09,580 Què estaran utilitzant per? Què els importa als meus usuaris sobre? 1237 01:21:09,580 --> 01:21:11,750 El que no els importa? 1238 01:21:11,750 --> 01:21:14,500 Vostè simplement no vol fer una aplicació i deixar que només creixen 1239 01:21:14,500 --> 01:21:18,270 i convertir-se en el gegant, que tot el consumeix que ni tan sols es pot acabar. 1240 01:21:18,270 --> 01:21:23,900 Vols tenir metes discretes i plans i coses que vol tractar. 1241 01:21:23,900 --> 01:21:29,000 Que sigui sense esforç. Tot això diu, bàsicament, 1242 01:21:29,000 --> 01:21:34,950 fer més fàcil per a l'usuari per usar-lo, no el converteixen en un gegant de la bombolla de text com aquesta diapositiva és, en realitat. 1243 01:21:34,950 --> 01:21:38,020 El que vol és que sigui una cosa on és molt fàcil perquè algú vagi en 1244 01:21:38,020 --> 01:21:40,800 i fan el que volen fer. 1245 01:21:40,800 --> 01:21:42,920 No vull que hagin de navegar 5 pàgines 1246 01:21:42,920 --> 01:21:45,460 per arribar a la seva funció principal del seu lloc. 1247 01:21:45,460 --> 01:21:49,290 Si Google té 5 pàgines abans que fins i tot podria buscar alguna cosa, 1248 01:21:49,290 --> 01:21:53,080 ningú ho faria servir. 1249 01:21:53,080 --> 01:21:55,890 I, finalment, prototip de paper, grup focal. 1250 01:21:55,890 --> 01:21:59,220 Tenir un bon disseny i pràctiques de prova. 1251 01:21:59,220 --> 01:22:00,730 Només perquè vostè pensa que funciona per a vostè, 1252 01:22:00,730 --> 01:22:04,860 no vol dir que pensin els altres funciona. 1253 01:22:04,860 --> 01:22:14,490 Però sí, això és tot. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]