[00:00:02] [REPRODUCCIÓ DE MÚSICA] HANNAH: Hola a tots. Gràcies nois per venir a terme en el clima desagradable per a un concurs revisar sessió. Com vostès saben, concurs un és aquest dimecres. Així que anirem a través d'un munt de temes. DAVIN: Hey, puc dir una cosa molt ràpid? HANNAH: Sí, Davin va a dir alguna cosa molt ràpid. DAVIN: Ho sento. Només molt ràpid, si té preguntes sobre el concurs, pot connectar-se a Internet. Anar a 2.014 qüestionari un, sobre el qüestionari. Té la logística sobre on anar, quan anar. Si vostè està inscrit simultàniament, estem tindrà un concurs de maquillatge a les 5:30. O si vostè em va enviar un problema, vostè té algun un altre problema. Però 05:30 és el maquillatge vegada el dimecres. Però si vostè té preguntes, preguntes generals, línia té tota la logística. Així que tira primer. [00:00:47] HANNAH: Awesome. Així que aquí està la gran llista de temes que anirem a través de l'actualitat. Vaig a cobrir la totalitat de la C coses, que és la primera columna. Així les coses C que cobert després de concurs zero. A partir d'una llista enllaçada, que inclou punters. [00:01:05] Molt bé, així que va veure això en l'última sessió de revisió, així que vaig a anar a través de això és una mica més ràpid. Només aixeca la mà si em vols frenar o tractar alguna cosa més. Però utilitzem llistes enllaçades perquè vam començar a C amb matrius. I matrius són grans, però la problema és que tenen una mida fixa. Les llistes enllaçades ens permeten crear mida dinàmicament les estructures de dades. [00:01:28] I tenim les nostres operacions bàsiques, inserir, eliminar i buscar. I podem fer-ho de inserció en pitjor cas de temps constant si ens posem en el començament mateix. Esborrar i cercar, pitjor cas gran oh de temps n. Així que de nou, només per donar la volta a través d'aquestes imatges, Sé que vam veure aquests últims temps, però nosaltres vol estar al dia de la nostra llista enllaçada mitjançant el seguiment de la cap de la nostra llista enllaçada. Perquè sabem que cadascun dels nostres nodes només va a apuntar a la node següent a la nostra llista enllaçada. [00:01:58] Així que aquesta és la forma en que fem un seguiment. Tot i que aquests no són peces contínues de la memòria, els podem trobar per només seguint les fletxes diferents. Aquí està la nostra estructura per a un node de llista enllaçada. Ho vam veure per última vegada. Tenim el nostre node d'estructura. I té dues propietats. Número u, l'actual valor que desitja emmagatzemar. En aquest cas, es tracta d'un nombre enter. Podria ser una cadena, podria ser un char, el que vulguis. I després, hem de seguir la pista de el següent node a la nostra llista enllaçada. Així que serà un punter al següent node. Si estaves fent recerca, com he dit abans, vostè hauria de seguir les seves fletxes cap avall. Inserció, no perdre d'on la resta de la seva llista és. I voleu redirigir el cap perquè apunti al nostre nou element, que en aquest cas és un, i després un apuntarà per a la resta de la llista enllaçada. Així que de nou, sé que això és una mica mica d'una repetició de la prova de zero. Així que hem de tenir molta cura sobre l'ordre en què es fer aquests assenyalaments, així que no ho fem perdre la pista de la part posterior de la llista. OK, qualsevol pregunta amb simplement enllaçada llistes? Impressionant, OK, fresc. [00:03:06] Així que ara, anirem a alguna cosa només una mica més complicat, doblement enllaçada llistes. Així que a més de mantenir pista de la següent node, també volem fer un seguiment del node anterior. I això ens permet, si som en algun moment de la nostra llista enllaçada, no només anar cap endavant, però també recórrer cap enrere. Perquè com vam veure en una llista simplement enllaçada, si estiguéssim en algun node, i de sobte, vam decidir, En realitat, jo vull anar a el dret node abans de mi, vostè hauria d'anar a per totes el camí de tornada al capdavant i recórrer fins a trobar el node que estava buscant. [00:03:35] Així que això fa que les coses una mica més fàcil que a nosaltres tractant de repetir a través de la nostra llista enllaçada. Però ens obliga a fer un seguiment d'un més punter, de manera que una estrella més node. Molt bé, així que aquí ve la part divertida. Anem a practicar la implementació eliminar les llistes doblement enllaçades. Així que això és una cosa que és joc totalment just per al concurs. Va aparèixer en les proves anteriors. Així que definitivament estar preparat per codificar una mica en C. No oblidis que amb tota aquest divertit PHP i JavaScript, encara hem de recordar fer C. Així que posar al dia que si et sents oxidat. [00:04:12] Molt bé, anem a veure si podem fer això. Acceptar, fresc. Així que anem a tractar editar dreta aquí, i espero que això va segons el previst. Molt bé, algú vol donar-me un suggeriment pel que fa a la forma en què hauria de començar? L'únic cas que sóc decisions és que jo ja tenen una estructura definida, el un que va mostrar en l'última pàgina, en l'última diapositiva. I estic emmagatzemant el cap de la meva vinculat Llista d'alguna punter diu llista. Algú vol em va començar? [00:04:42] AUDIÈNCIA: Pot crear una nova node trucar a través de la llista? [00:04:45] HANNAH: Awesome, per la qual crearem un nou node a arrossegar per la llista. M'agrada això. Vaig a trucar ella punter si això està bé. I on ha de començar originalment? [00:04:57] AUDIÈNCIA: Probablement en el cap de la llista. HANNAH: Beautiful. Volem començar al cap, que Li vaig dir que serà emmagatzemat a la llista. Impressionant. Fins ara, tot bé. I ara, el nostre objectiu és recórrer la llista fins que trobem el node amb valor n que volem eliminar. D'acord? [00:05:13] Així que ara és la part on volem recórrer. Pot algú suggerir un manera de recórrer? [00:05:19] AUDIÈNCIA: Un bucle. [00:05:20] HANNAH: Un bucle. M'encanta. En concret, podem intentar un bucle while. Acceptar, i sabem que hem arribat Al final de la nostra llista quan què? AUDIÈNCIA: Quan punter és nul. HANNAH: Quan punter és nul. Bella, m'encanta. Acceptar, fresc. Així que ho sento si el meu delimitador cotilla és tipus de caure fora de la pantalla. El vam portar de tornada. Acceptar, fresc. Què segueix? [00:05:48] Així que sabem que volem eliminar el node que té un valor n. Així que anem a veure el cas en en realitat ens trobem al nostre node. Llavors, com anava jo a comprovar que? Jo només diria que si punter i, a continuació, si jo que desitgi obtenir el valor de punter, Acabo do fletxa n, és igual a n, el paràmetre que vam donar a aquesta funció, el node que volem eliminar realitat. Qualsevol pregunta de fins fins aquí? Bé. OK, així que ara anem a dibuixar una imatge ràpida al tauler per tal de visualitzar això. [00:06:24] Així que diguem que no és el nostre node encantadora. I té un valor, només vaig a dir quatre. I apunta la següent node a la nostra llista enllaçada. I no hi ha res abans. Així que tenim el nostre anterior apuntant al no-res. En aquest cas, apuntem cap enrere. Bé, només la creació de la meva llista enllaçada per aquí. I tenim una llista que apunta a aquesta estructura, per començar. Vaig a dibuixar un més per A més a més. D'acord. Vaig a assenyalar això endavant. I vaig a assenyalar que un de nou. Vaja, ho sento. Sí, tinc això a l'inrevés. Fes-ho de nou. Bé, allà anem. Molt bé, ho tinc. OK, aquí està la nostra imatge. [00:07:21] Acceptar, pel que volem considerar dos casos. El primer cas és si el node que volem eliminar és en el començament mateix de la nostra llista. I llavors, el segon cas que volem a considerar és si es tracta de qualsevol altre lloc. Entenc que aquesta totalment desordenat dibuix amb tot el meu esborrat, però espero que tractarem de aclarir això amb una mica de codi. [00:07:40] OK, així que anem a cobrir el cas on trobem el nostre node, i és per inici de la nostra llista enllaçada. Algú em dóna un suggeriment aquí quant al Que he de fer per eliminar realment el nostre node? És una mica difícil. D'acord? [00:07:56] AUDIÈNCIA: Vostè ha de prendre la node que seria abans que es i fer que apunti a un que seria després d'ella, i prendre el node que seria després d'ell i fer que apunti al node abans d'ella. HANNAH: Exactament. OK, així que aquest és el cas where-- tenim dos casos. Tenim el cas que el node que estem buscant és la part davantera de la llista. Acceptar i, a continuació el cas que vostè descrit és una altra cosa, no? És un altre lloc a la llista. Així que vostè ha dit, hem de mirar el node anterior, i fer que el node anterior apuntar al següent node. Així que diguem que estem tractant de treure 5 en el meu dibuix molt desordenat per aquí. Volem assegurar-nos que 4 ara apunta a sis. De quatre a sis punts pròxims. I dels sis punts anteriors a quatre. Aquest és el nostre objectiu aquí, oi? Això és el que crec que acaba de dir per allà. [00:08:56] OK, així que anem a aconseguir aquesta primera peça. Anem a fer el que el punter anterior anterior. Així ha d'assenyalar de quatre al costat de què? Exactament, en aquest cas, sis. Així que hem de dir punter, al costat. D'acord? Bé. Així que anem a desfer-nos d'aquesta imatge lletja i tractar de dibuixar un un una mica més agradable. Tenim el nostre cap llista aquí. I que apunta al primer node la nostra llista enllaçada, el que hem dit és de quatre. Aquí està el nostre segon node, cinc. I el nostre tercer node, 6. Només tracte de dibuixar el mateix exacte imatge, només una mica més neta. OK, així que el pròxim quatre originalment apunta a cinc. De cinc a sis punts pròxims. De sis punts anteriors a cinc. I de cinc punts anteriors a quatre. Així que molt millor! Acceptar, fresc. [00:10:04] Així que ara, el que vam fer just aquí, aquesta línia de codi, que diu punter anterior següent, així que què vol dir això? Això vol dir que si estem veient 5, aneu al node anterior, i és el proper ha ara punt a cinc del pròxim. Així que, essencialment, el que està fent és això esborrant aquesta fletxa i el que és saltar dreta sobre cinc. Queda clar? Sé que pot ser una mica dubtós. Veig alguns moviments de cap. Això és bo. Acceptar, fresc. Ara, quin és el següent pas? [00:10:39] He restableix la propera. Ara, que una altra fletxa Què he de canviar? Aquesta d'aquí. De sis anteriors. No volem sis de l'anterior perquè apunti a cinc més. Volem que apunti a quatre. ¿Aquesta imatge té sentit? Així que ara realment podem tenir 5. Així que anem a aquesta peça. Què he de fer abans que jo restablir sis anterior a quatre? ¿Idees allà? [00:11:14] AUDIÈNCIA: Llibertat per als nodes entre ells establint-la en nul? HANNAH: Cool. En definitiva, el nostre objectiu final és serà per alliberar el node. Pel que podem fer això aquí. Punter gratuït. Absolutament. Però fins i tot abans d'això, anem a sol-- nostre dret gol aquí és fixar punter proper anterior igual al punter anterior. Sé que això s'està cobert. OK, anem a take-- fresc. Tot món pot veure aquesta línia de fons? O és molt petita? [00:11:50] Així que abans que executem aquesta línia aquí, volem per assegurar-se que punter pròxim no és nul. Perquè si punter següent és null, quin tipus d'error obtindré quan intento referència a un punter nul? AUDIÈNCIA: culpa Seg. HANNAH: Una fallada s, bonic. OK, així que si això no és null, llavors podrem restablir. I tenim sis punts de nou a quatre. Preguntes fins aquest punt? Sí? [00:12:17] AUDIÈNCIA: En la seva primera if, oi significa tenir la fletxa següent, o [inaudible]? HANNAH: Jo volia dir punter de fletxa n. Així que, bàsicament, el que estic tractant de fer és a dir, el node actual que sóc iteració en el node actual que Estic mirant, estic emmagatzemant en punter. I jo vull saber punter de valor, que en aquest cas és n. I vull veure, és el node que estic buscant per al node que estic amb l'objectiu d'eliminar? Així que per això tenim aquí punter n. [00:12:47] AUDIÈNCIA: Així que la fletxa que va a n, s'estableix el valor i deseu-lo en un node anomenat n? [00:12:55] HANNAH: Així que és com si jo sóc passant per aquesta llista enllaçada i apuntant a cinc. Si vull aconseguir aquest valor, si Vull arribar a aquest nombre, 5, He de fer punter de fletxa n. Refredar? Sí. [00:13:07] AUDIÈNCIA: és n el nom de la variable? HANNAH: Sí. Així que si ens llancem de nou 1 diapositiva, n és el nom del valor dins de la node a la nostra llista enllaçada. I sé que pot ser una mica mica confús perquè també estan demanant la cosa que volem esborrar n. Així que aquí és on que una línia ve. Sí? [00:13:27] AUDIÈNCIA: Què tens [Inaudible] com funcionen? Un punter [inaudible]? [00:13:35] HANNAH: Segur. Estàs parlant de-- quina línia? AUDIÈNCIA: L'última línia [inaudible]. [00:13:44] HANNAH: És clar, a D'acord. Així que donem una ullada a la imatge en Per tractar d'explicar això. Ho sento, per al càmera, la pregunta era podem explicar punter fletxa al costat del punter anterior. OK, així que diguem que estem en cinc i el nostre objectiu és eliminar 05:00. Així punter següent, que d'aquests tres nodes ens dóna això? Això ens porta a la sisena node, oi? [00:14:10] OK, així que ara estem demanant per prèvia dels sis. D'acord? I estem restablint aquesta perquè sigui igual a quatre, que va passar a ser de cinc de l'anterior. Ho sé, és super difícil seguir la pista. Realment recomano dibuixar imatges si tens una pregunta com aquesta. Sí? [00:14:30] AUDIÈNCIA: És la raó per la qual no tenim un [inaudible]? [00:14:37] HANNAH: Exactament. Per tant el dubte era, per què fer nosaltres no necessitem comprovar aquí? Per què no hem de comprovar que punter anterior no és igual a null? I és perquè hem ja separada fora el cas si el punter en el començament mateix. Molt bona pregunta. Alguna cosa més sobre això? Acceptar, fresc. Així que anem a acabar cap amunt. Ja gairebé hem arribat. [00:14:59] I què si està al capdavant? I si en lloc de intentar eliminar 05:00, que realment volíem eliminar 04:00? Què hauria de fer? Bé, vull reiniciar el meu cap per a què? Crit ell cap a fora? AUDIÈNCIA: El que després d'ella. HANNAH: Beautiful. OK, així que volem que enumerem estar apuntant al que el nostre punter següent node és. Bé. I només per la completesa bé, ho faríem que vulgueu comprovar que mentre la nostra llista no és nul, mentre la nostra llista no és buit, llavors volem establir la nostra anterior igual a zero. Pregunta fins ara? A un pas de--? [00:15:53] AUDIÈNCIA: Seria si llista no és igual a null? [00:15:55] HANNAH: Sí, tens tota la raó. Ho sento molt. Està llista no és igual a null. Impressionant. Tractant de portar tot això a la pantalla. És una espècie de caure. Ho sento, nois. I per últim però no menys important, tot que hem de fer és canvi. D'acord. Això va ser molt abarrotat en molt ràpidament. Tome un segon per mirar això una altra vegada. Digues-me si tens alguna pregunta. Sí? [00:16:20] AUDIÈNCIA: Si la llista està en el cap, llavors-- esperar, no importa. [00:16:26] HANNAH: OK, bo. Així que això és si la llista està al capdavant, ho remenem al inserim. Sí? [00:16:31] AUDIÈNCIA: Pot explicar la primera sentència if nou? Si el punter a n és igual a n? HANNAH: Segur. Per això el nostre objectiu de tota aquesta funció és per esborrar el node que té valor n. Així que si ens trobem, ja que estem iteració mitjançant la nostra llista, el node amb el valor de n, que és el que vol eliminar. Així que tot l'esborrat succeeix dins d'aquest gran if. Això té sentit? Fresc. Sí? [00:16:59] AUDIÈNCIA: Potser el que no es pot veure , Però no també necessita una línia per desplaçar-se per la llista? HANNAH: Awesome. Anem a portar això una mica, i anem a llançar aquest dret a la part inferior. Potser el consell hagués estat una mica millor idea. Llavors, com anava jo a moure el punter cap endavant? [00:17:17] AUDIÈNCIA: Punter iguals punter més un. [00:17:20] HANNAH: Beautiful. Així que ens permet continuar la iteració a través. D'acord. AUDIÈNCIA: no hi hauria una cosa? HANNAH: Una vegada més? AUDIÈNCIA: No hauria una cosa després de la gran edat si declaració [inaudible]? HANNAH: Quina part? Ho sento. [00:17:38] AUDIÈNCIA: El recorregut, ¿No hauria d'haver una cosa? HANNAH: Absolutament podria tenir un més. Perquè tinc el dret de retorn allà, vostè no necessita una cosa. Però sí, bona pregunta. Bé, no? AUDIÈNCIA: Podem pensar punter que es mou a través de la llista com prendre en el valor de cada node a la llista? O hem de pensar en ell com tipus de externa a la llista? [00:18:00] HANNAH: Qualsevol dels dos està bé, crec. La forma en què m'imagino que és Dic, OK, estic punter. I aquest sóc jo. Aquesta és la meva mà. Vaig a assenyalar el diferent coses que vull per recórrer. En primer lloc, vaig a assenyalar al capdavant de la llista. I això em diu que sóc va a apuntar a quatre. I així a mi, ser externa a la llista, Puc assenyalar cadascun d'aquests elements. Així que penso en mi mateix com punter. AUDIÈNCIA: Així que quan s'elimina un d'aquests elements, elimina a si mateix, per dir-ho. HANNAH: Exactament. Així s'elimina la cosa vostè està assenyalant. Així, en l'exemple que vam veure on som intentar eliminar 05:00, quan estic apuntant a cinc, Vull esborrar la El que estic assenyalant. Exactament. Sí? AUDIÈNCIA: Ens hem fet càrrec de la cas en què n no és a la llista? HANNAH: Si n no és a la llista? Tot el que passarà és que ets va a recórrer i iterate a través, i després, vas per arribar a ser punter nul, i després vas a fer. [00:18:48] AUDIÈNCIA: Llavors, tenim per tornar alguna cosa? HANNAH: Podríem. La manera que si es defineix aquest funció, només dic que torni anul·larà independentment. Però vostè podria tenir alguna cosa com tornar un enter, i faci que sigui tornar 1 negatiu si falla. Una cosa per l'estil. Preguntes con-- sí? AUDIÈNCIA: [inaudible]? HANNAH: Ho sento? AUDIÈNCIA: [inaudible]? HANNAH: Segur. Així que aquesta és la actual-- una vegada que hem fet tot aquest treball de moure totes aquestes fletxes voltant, tot el nostre objectiu era desfer-se del node que estem buscant. Així que en aquest cas, alliberant punter, si estic apuntant a cinc, és com esborrar aquest node central. Aquesta és la part punter lliure. Això té sentit? [00:19:29] AUDIÈNCIA: Així que fins i tot pensat No [inaudible]? [00:19:31] HANNAH: Així que va assumir al principi vam tenir alguna llista que va ser ya-- havien posat això junts. Així que per tal de construir aquest llista, Van haver [inaudible]. Fresc. Qualsevol altra cosa amb això? Sí? [00:19:46] AUDIÈNCIA: Què passa si la llista no és igual la línia nul·la? [Inaudible]? HANNAH: Just aquí? AUDIÈNCIA: Sí. HANNAH: OK, tot el que estic fent és que m'estic assegurant de que abans de tractar d'eliminar la referència de la llista, abans d'intentar accedir a l'anterior, Jo vull estar segur que no és nul·la pel que no entenc una fallada seg. Fresc. [00:20:08] OK, jo sé que això era bastant molt per passar. Així que aquesta diapositiva serà posat a la seva disposició. Així que vostè pot anar a través d'ell amb més detall. Sí? [00:20:17] AUDIÈNCIA: Per què la llista [inaudible]? HANNAH: Segur. Així llista realment apunta aquest element aquí, el primer element de la llista. Per tant, no pot tenir una anterior. Sí? [00:20:31] AUDIÈNCIA: La punta punter a la mateixa adreça a la memòria? ¿Apunta a la mateixa direcció a la memòria com el node que està assenyalant? [00:20:40] HANNAH: Sí, apunta a aquest node a la memòria. [00:20:43] AUDIÈNCIA: Dret, per la qual quan [inaudible]? [00:20:47] HANNAH: D'alguna manera, sí. D'acord. Molt bé, anem a passar amb això. I si vostè té més preguntes, quedar-se a l'extrem, i podem passar per això una altra vegada. Acceptar, fresc. Ara, hem de seguir endavant per discutir taules, intents, i arbres, que tens súper familiaritzats en p-5 set, corrector ortogràfic. [00:21:04] Així taula hash és només una matriu amb llistes lligades senzilles o doblement enllaçada llistes que surten. Així que tenim algun tipus de matriu associativa. I com sabem quin d'aquests arrays galledes per entrar, utilitzem una funció hash. Així que en aquest cas, pot algú endevinar el que la funció hash seria només sobre la base d'alguns de l'entrada i sortida? [00:21:31] AUDIÈNCIA: Nombre Carta de l'alfabet. HANNAH: Exactament. Només els posa en ordre alfabètic. Tot el que s'inicia amb una A es posa en la primera cubeta. Tot amb un B es posa al segon cub, etc., i així successivament. Impressionant, OK. I una funció de hash és qualsevol funció que té en una paraula i li dirà el que cullerot que pertany a. Així que l'entrada en el nostre array que pertany a. [00:21:55] Així que cada vegada que dono el meu hash de funcionar una paraula, em deu explicar la mateixa col·locar cada vegada. Així que si fem servir la funció hash de la diapositiva anterior on som classificació per la primera lletra de l'alfabet, cada vegada que li dono al meu funció hash "poma" sempre em de retornar 0. Així que si jo tinc una poma per posar en el meu taula hash, si li dono "poma" a la meva funció hash, ha de dir, anar el va posar en va 0. Si estic a la recerca d'una poma al meu taula hash i dic, on Apple podria viu, li demana a la seva funció hash. I diu, aneu a la cullera 0. Bé? Preguntes amb funcions hash? Impressionant. [00:22:34] Aquí és una mica més explicació detallada del que una funció hash podria ser similar. Bé. Ara, el problema de coixinet funcions és en un món ideal, només tindríem una cosa a cada cub. Però, en realitat, no hi ha no només una paraula que comença amb A. No hi ha només una paraula que comença per B. Així en aquest cas, si de sobte aconseguir "baia" i volem posar- en la nostra taula hash, i veiem, oh, no, el banana és ja hi és, què farem? [00:23:03] Bé, tenim dues opcions. La primera opció és sondeig lineal, que només significa anar a buscar la següent cub buit. Aneu a buscar l'entrada següent matriu buida. I només cal posar "baia" allà. Així que sé que se suposa que anar amb plàtan en va un. Però només cal posar en una galleda de tres, perquè debades 3 és buit. Una altra opció és probablement el que s'implementa en el seu p-set, en el qual tingut encadenament separat. Així que cadascun dels seus cubs, cadascun dels elements de la matriu, no només manté una paraules, però en realitat manté un punter a una llista de paraules. Així que si vostè tenia plàtan en la seva taula hash i de sobte et volies afegir baia, cap problema. Només ha d'afegir la baia al final, o per Al principi de la seva llista enllaçada. Acceptar, impressionant. Preguntes amb haixix taules abans que segueixi? [00:23:58] Bé. Els arbres i els tries. OK, així que aquesta era una altra opció per a l'aplicació de diccionari. Es podria haver fet un intent. Així que és un tipus especial d'arbre que es comporta com una taula hash de diversos nivells. Així podràs veure el panorama on es té una matriu que apunta a un munt d'arrays que apunten a un munt d'arrays que apunten a un munt d'arranjaments. I anem a veure exactament el que es veuria en una diapositiva futur. I més en general, un arbre és qualsevol estructura de dades en el qual les dades són organitzada en alguna jerarquia. Llavors, on vam veure que tenim algun tipus d'entesa d'un nivell superior, un nivell superior, 1 següent nivell, un següent nivell. Així que aquest és probablement el més clar amb alguns exemples específics. Així que aquí està el nostre arbre. Es pot veure que té nivells particulars que vam començar amb aquest node arrel, un. I podem anar cap avall a través del nostre arbre. [00:24:50] Un arbre binari és una tipus particular d'arbre. I l'única especificació per a un arbre binari és que cada node té en la majoria de dues fulles. Així que vostè no va a veure cap d'aquests nodes tenen tres o quatre o algun altre nombre de fulls. I després encara més específic és un arbre binari de cerca on cada node a l'esquerra de la node tindrà un valor més petit. I cada valor a la dret serà més gran. Així que si veus 44 és la nostra arrel, a l'esquerra, 11, 22, i 33 són tots menys de la nostra arrel. I a la dreta són tots nombres bigger-- 66, 55 i 77. I aquesta propietat és vàlid en tots els nivells de l'arbre. [00:25:37] Així que quan anem a 22, 11, i 33, sent 11 és menor que 22 i 33 és més gran que 22. I això fa que sigui més fàcil la recerca perquè si estem buscant un nombre, sabem exactament què branca per seguir cap avall. Així que això ha de recordar 01:00 mica de cerca binària. Sí? [00:25:56] AUDIÈNCIA: Així que quan estàs descrivint binari, li va dir que té com a màxim dos fulls? HANNAH: Mm-hm. AUDIÈNCIA: Podria tenir menys? HANNAH: Sí. Així que diguem, per exemple, no tenir un nombre parell de coses i que no podia omplir totes les seves fulles, que està bé si un té un. D'acord? Impressionant. Alguna altra pregunta sobre els arbres? D'acord. [00:26:16] Tornar als nostres països com jo estava parlant voltant d'una mica més d'hora, com tenim aquestes matrius multi-nivell. Així que en aquest cas, vam començar a la part superior. I podem seguir qualsevol paraula donada baix. Així que diguem que volíem buscar Turing. Comencem a T, seguir cap avall a un array que conté O, i segueixi cap avall fins que arribar a aquest petit delta que ens diu, sí, trobem una paraula. És clar en intents? Qualsevol cosa per anar-hi? Sí? AUDIÈNCIA: El símbol del delta d'ocupar espai en l'intent? HANNAH: Sí, així que no ho fa necessàriament tan sols necessita ser un delta. Però necessitem alguna manera de explicar la nostra computer-- ho sento, perquè sapiguem que la RTU no és una paraula. Perquè anem a dir que no tenim aquest concepte d'un delta, aquest concepte de felicitacions, has trobat una paraula, seria anar a través i iterar T-O-R, i després dir, impressionant, el vaig trobar! Ha de ser una paraula. Però en realitat no és. Volem que tot Turing sigui una paraula. Així que hem de tenir alguna cosa en el final que diu, felicitacions, que ha trobat una paraula legítima. AUDIÈNCIA: Així que si vostè tenia com 26 lletres en l'alfabet, vostè realment té 27 tecles en el seu intent? [00:27:24] HANNAH: Awesome, si. Així que en realitat, crec que serà en la següent diapositiva. Ta-da! On si vostè té un node en el seu intent, ets tindrà 27 fills en lloc de 26. Qualsevol pregunta amb això? Sí? AUDIÈNCIA: Per què els països ocupen tan molt espai [inaudible] a mesura que avança? Per què es considera que [inaudible]? HANNAH: Segur. Tornem. La pregunta és, per què són països molt més grans que alguna cosa com una taula hash. Així que per a cada un d'aquests nivells, encara que no es dibuixen aquí, has de tenir els 26 caràcters. I la raó per la qual no es pot dic, oh, però igual que per Turing, I no cal tenir qualsevol dels mateixes coses en el nivell d'U Bé, si de sobte volgués afegir cosa que era com T-H, que havia necessitat de tenir la capacitat d'afegir la paraula. Així, per cada una sola lletra, vostè va a tenir a tenir un munt de matrius que surten. Així que vostè pot veure com es posava molt gran, molt ràpid. Alguna altra pregunta? Bé. Sí? [00:28:29] AUDIÈNCIA: Quan és paï- més ràpid que les taules hash? [00:28:33] HANNAH: Quan són paï- més ràpid que les taules hash? Així que si has tingut una molt funció hash dolent. Així que diguem que jo estava com, aquí està la seva funció hash. No importa el que la paraula em dones, jo sempre estic posarà en ordre l'entrada 0. I així acabem amb només posar tot en una llista llarga vinculat gran. I així, un temps de recerca prendria en el pitjor n si és al final de la nostra llista. Amb l'intent, només hem de iterar a través de les lletres de la paraula. Així que fins i tot si hem afegit un munt Més paraules per al nostre intent, no ens portaria més temps per trobar una paraula en particular. [00:29:09] Tot el que hem de fer és, per exemple, en aquest cas, diguem que estem buscant zoom, ens tornaríem a tenir per repetir Z-O-O-M, quatre lletres. Així que això és només el longitud de la paraula de zoom. No importa quants més paraules que posen en aquest intent. Sempre podem aconseguir- en aquests quatre passos. Impressionant. Sí? [00:29:32] AUDIÈNCIA: Llavors [inaudible] és una matriu, no? [00:29:34] HANNAH: Mm-hm. AUDIÈNCIA: Si ets a la recerca de [inaudible], hauries d'anar a través de seu arsenal per trobar [inaudible]? HANNAH: Segur. AUDIÈNCIA: Això no prenen més temps? HANNAH: Si vaig a dir que la meva matriu és sempre serà A, B, C, D, E, F, G, bla, bla, bla, així que si jo sempre sé que és en el mateix ordre exacte, si jo sempre sé que és en ordre alfabètic, Jo només puc dir que O és el nombre fulano de tal en l'alfabet. Només saltar a aquest lloc. Perquè recorda, amb matrius, podem accedir qualsevol element d'aquesta matriu en constant temps si sabem on estem mirant. Sí? [00:30:09] AUDIÈNCIA: En l'anterior llisqui [inaudible] 27, però 26 per al primer. [00:30:14] HANNAH: Ho sento? [00:30:15] AUDIÈNCIA: No és la primera un 0, de manera que no seria el 26? [00:30:18] HANNAH: És clar, per això quan diem que el 27, que és donarem nosaltres índexs de 0-26. Però si realment comptar aquests cap a fora, que serà 27. Bona pregunta. Una mica més? Sí? [00:30:31] AUDIÈNCIA: Així són paï- més lent que les taules hash? [00:30:34] HANNAH: Tries seran, en teoria, més ràpid que les taules hash però ocupen més memòria. Sí? AUDIÈNCIA: [inaudible]? [00:30:45] HANNAH: Ho sento, no et sento. AUDIÈNCIA: [inaudible]. 0 a 25 li dóna 26. [00:30:54] HANNAH: 0 a 25 faria donar-li 26, dreta. [00:30:56] AUDIÈNCIA: I llavors [inaudible]. HANNAH: Correcte. Així que el nombre que estem especificant és el nombre de coses a la nostra matriu. Així que si tenim 27, és ens donarà 0 fins al 26, que donarà ens espai per, en aquest cas, No estic incloent un apòstrof. Així que estem rebent del 0 al 25 són les primeres 26 lletres de l'alfabet, o les 26 lletres de l'alfabet. I després que el passat cosa, a l'entrada 26, és serà el xec marca o el delta. Una mica més? Impressionant. Vaig perdre el meu espai. Acceptar, fresc. [00:31:31] Així que ja toquem en això. Però la gran compensació entre països i taules hash és que intenta proporcionar, en teoria, constant mirar cap amunt vegades, però utilitzen una gran quantitat de memòria. Molt bé, ara tenim una mica estructures menys complicades, i haurem acabat amb C, i mourem cap a la dreta al llarg. [00:31:49] Així piles, vam veure aquest en la conferència en la qual tenir alguna cosa com un pila de safates on l'última cosa que posar a la pila que està passant per ser el primer que es treu. Així que això és el que realment defineix una pila és que l'últim que es va posar en serà el primer cosa que enlairar-se. I la terminologia que fem servir si ens anem a posar alguna cosa, si anem a afegir alguna cosa a la nostra pila, en diem que empènyer. I si prenem alguna cosa apagat, en diem popping. I si anem a aplicar una pila, ens necessita estar segur de no perdre de vista la mida i la capacitat. Així que el nombre total d'elements que podem sostenir i el nombre actual d'elements que estem duent a terme. [00:32:27] I de forma molt similar, tenim cues. I l'única diferència és en lloc de amb les piles, vam dir l'última cosa que posem en és el primer que ens llevem. Així que amb les cues, la El primer que posem en serà el El primer que ens porti a terme. Així que això és com si vostè és realment fent cua en una botiga i que està sent ajudat, llavors la primera persona de la fila hauria de ser la primera persona a ser ajudat. Així que això seria una cua. [00:32:52] Així que hem de fer un seguiment de la mida, la capacitat, i el cap ja que estem va a portar a tots de la part frontal de la llista en lloc de la part posterior. Les preguntes sobre això? Qualsevol pregunta C que li estan molestant? Les estructures de dades, res d'això divertit? Molt bé, fresc. Així que vaig a lliurar-la a Alison a saltar en una mica més de la programació. [00:33:14] ALISON: Oh, ja veurem. Anem a veure el bé que faig aquí. Bé, vaig a tractar de volar a través d'aquestes coses, nois. Hannah va ser molt fons sobre totes les seves coses. Vaig a tractar de donar que una visió general ràpida ràfega perquè puguem arribar a Davin amb tot les divertides JavaScript i seguretat les coses que potser en realitat volen saber més sobre. [00:33:33] Bé, com va dir Hannah, si vostè té alguna pregunta, Vaig massa ràpid, si us plau, m'ho saber. Vaig a respondre a les preguntes que siguin necessàries. Així que per començar, anem a començar amb probablement una de les primeres coses que va aprendre amb la web programació, permisos. Així chmod, nois hauria d'haver estat mestres en això amb tot el web programació que tens estat fent últimament. És bàsicament una ordre que canvia els permisos o els permisos d'accés dels nostres objectes del sistema d'arxius. Per descomptat, en realitat veure aquests, si estàs tenir cap problema amb ells durant els seus butlletins de problemes, que pugui haver utilitzat ls -l, que és llarg, per obtenir el tipus de vista d'aquest tipus, on realment es visualitzen tots els permisos per a un arxiu. [00:34:16] I en realitat, només anirem a través bastant ràpid només bonica molt el que cada un d'ells significa. Així que hem d aquí, que només representa el directori. Òbviament aquí, veiem rwx, que és de lectura, escriptura, i executable. Aquests també poden ser representats en forma de bits, que anem a entrar a la pàgina següent. Així que cada tríada que vam veure aquí, per la qual cosa és tres tríades. Hem rwx, r res x i r res x per a aquest primer arxiu. És aquesta estructura general. [00:34:49] Així que tenim algun directori. Tenim alguns grups d'usuaris amb aquests permisos. Alguns grup que té aquests permisos, i un món que té un permís. Vostè pot pensar en això com una tríada. Vostè pot pensar en això com tres bits. Així que poden contenir valors en qualsevol lloc des de 0 fins a a 7, que és per què de vegades vam haver fas chmod 600 en comptes de chmod rw el que sigui. Anem a entrar en un exemple allà. Però, bàsicament, es pot pensar d'aquests, ja sigui com només rwx, o es pot pensar en ells com alguns número on aquest primer aquí representa un nombre entre 0 i 7, aquest segon 1 representa un nombre entre 0 i 7, i la tercera representa un nombre entre 0 i 7, OK? [00:35:38] r té un valor de 4. w té un valor de 2, i x té un valor d'1, de manera que aquest permís aquí chmod 700. Perquè en aquest cas aquí, es diu que haver el primer bit no es va bolcar sobre. Així disposem de 4 per a lectura. El segon bit es va encendre per w, que és 2, de manera que ara tenim 6. I el tercer bit s'inverteix en per x, que és 1, pel que tenim 7. I, per descomptat, el nostre grup i el nostre món són cada un 0. Així que aquest és també el equivalent a chmod 700. I sens dubte prova a comprendre el mapatge entre ells. No estic segur de si té pujar en una prova abans, però seria una pregunta que jo podria demanar. [00:36:18] Només una mica anant encara més en chmod aquí, aquí és la molt general estructura d'una trucada chmod. Així que per descomptat, hem chmod aquí. Les referències, el que això es refereix al fet que és que estem donant aquests permisos a o que estem prenent aquests Permisos de distància de. Així que tenim una aquí als permisos, com li hem donat a vostè chmod a + X, com veurem aviat. un sol significa donar a aquests específics permisos a tothom. Donar-los a tots. Pel que podria molt bé tenir o més x o més x g o o més x o múltiple dels mateixos. Així que la primera part és sempre serà referències. Qui som nosaltres donant aquests permisos a, o que estem prenent lluny de? [00:37:03] El segon és l'operador. Així que vostès han tractat sobretot amb avantatge. Això dóna permisos a qualsevol que vostè els està donant, mentre que menys, lògicament, els elimina. Així que res massa terrible allà. I llavors les maneres és el que parlem amb la lectura, escriptura o execució. Així que un plus x significa donar executable permisos a tothom. I després, per descomptat, en la qual arxiu o directori específic. D'acord? Tothom bo amb chmod? No està malament? [00:37:37] OK, així HTML, algun de vostès està edat suficient A-- edat MySpace? Vaig enviar aquesta al meu secció, i, literalment, la meitat de les persones em va mirar com si estigués boig. I jo estava com, nois, no estem tan vell. Vingui. Així HyperText Markup Language, sincerament, és només una forma per a vostè per mostrar certes coses a la web. Així que és un llenguatge de marques. No és un llenguatge de script. No hi ha lògica en ella. És simplement per canviar el Apareix manera una mica. OK, així que això és un important distinció de fer. És considerat com un llenguatge de marques, no és un llenguatge de scripting. [00:38:12] Així que aquí tenim les nostres etiquetes HTML. En aquesta diapositiva són probablement la major part del els que vostè ha de conèixer i ser molt còmode. Així que, òbviament, tenim nostra etiqueta HTML, que designa que tot en entre aquests dos hi haurà HTML. Tenim una mica d'enllaç, que òbviament li donarà un enllaç a una pàgina web externa. Alguns títol, dins del nostre cap aquí. I tenim el nostre cos amb h1, que és una capçalera, per el que va a fer que sigui agradable i en negreta i més gran. I després, tenim alguns p, que és un paràgraf. Probablement hauria de saber i estar familiaritzat amb les coses com la forma d'inserir una imatge, són Hi ha altres classes de capçalera? Definitivament, m'agradaria ser còmode amb div. Així aquests tenen la majoria de les etiquetes que vostè ha d'estar familiaritzat. Però, és clar, com tot a la CS 50, la llista no és exhaustiva. Així que assegureu-vos de posar al dia això. [00:39:08] CSS, per CSS, si algun de vostès miren el meu seminari de fa dues setmanes, és en realitat una forma l'estil de la seva pàgina web? OK, així que tenim un llenguatge de marques. HTML, que s'encarrega de només el text i on podria estar a la pàgina. Però CSS és realment el que fa que sigui bonica. Vostè podria tenir aquests en la seva HTML arxius, però com anem a parlar més tard, Estic bastant segur que podria ser la següent diapositiva, que És una pràctica comuna, i en realitat pràctica que realment ens animem, perquè vostè mantingui els van separar quan parlar de MVC i tot aquest paradigma. Això és realment el que això alimenta. [00:39:42] Així CSS és només una manera de fan que les coses es veuen bastant. Les coses aquí, com cos i #title i .info, aquests són anomenats selectors i el que fan és seleccionar coses específiques dins del seu arxiu HTML i aplicar qualsevol estil, qualsevol classe de coses que desitja, a aquest element específic de la seva web pàgina. Així que aquí tenim una color de fons i un color i una família de fonts que està sent aplicat al que està en el cos. Així que si mirem cap enrere aquí, no s'aplicaria al títol. Només s'aplicaria al que és en aquests selectors cos, d'acord? [00:40:22] Amb el títol aquí, això és serà el mateix, el color del text sent blau només va per afectar el que està dins els selectors de títol. Així com informació aquí, el text serà de color rosa, de qualsevol informació, que està just aquí. Així que l'únic que seria color de rosa en aquesta pàgina és la data, dilluns, novembre 17, 2014. OK, així que CSS és només una manera de tenir més control over-- si? [00:40:48] AUDIÈNCIA: Per què tens utilitzar el hash amb el títol? [00:40:51] HANNAH: Diapositiva següent, prometo! Anem a arribar-hi. Així que és per això que hem de fer servir hash. Així selectors assumeixen tres principals formes de parlar amb vostès sobre. Jo fyou vull aprendre més, hi ha molt per aquí. Hi ha una gran documentació CSS. Hi ha un nom d'etiqueta, que té a veure amb només els seus etiquetes normals en HTML. Així h1, p, div, h2, aquest tipus de coses. I només podem anomenar aquells com és. Així que com veiem aquí amb cos, és una etiqueta normal. Així que podem cos només cal posar quan estem parlant al nostre arxiu CSS. [00:41:26] Amb títol, tota la raó per la qual té aquest hash és que tenim el que és considerat un identificador. Així que una identificació ha de ser sempre únic a la seva pàgina HTML de manera que quan vostè està referint-se a ella, saps que només et refereixes a una cosa específica. Així que en aquest cas aquí, amb el nostre h1 aquí, CS 50 sessió de revisió, tenim un id de títol. Així doncs, per referir-se només a la tros del nostre HTML, fem un títol hash. Només per conveni, els ID es designen amb un hash al davant d'ells. De la mateixa manera, veiem informació que aquí hi ha una classe. I així, la classe amb CSS és designada com una mena de punt o dot el que la classe és. Així que en aquest cas aquí, és informació. [00:42:10] Així que em retracte. Tots dos d'aquests seria rosa per al nostre CSS aquí perquè tots dos tenen una classe d'informació. I en el nostre arxiu CSS, hem designat que qualsevol cosa amb una classe d'info haurà de ser de color rosa. Té això sentit? Sí? [00:42:27] AUDIÈNCIA: Si es va a fer tot en el cos blanc, i després intenta fer alguna cosa al seu interior blau, caldria causar problemes? [00:42:34] HANNAH: Així és CSS fulles d'estil en cascada. Així que qualsevol cosa és cap al part inferior tindrà prioritat. Així que si vostè fa alguna cosa amb el cos, i fas tot el blanc, i més tard canvia el títol o canvia el text dins del cos, sobreescriu això. Així que qualsevol cosa cap a la part inferior tindrà prioritat. Sí? [00:42:56] Audiència: I IDs són únics, però les classes poden ser més? HANNAH: Correcte. Així que els ID han de ser únics, i les classes poden consulteu tantes coses com li agradaria. Alguna altra pregunta? Sí. [00:43:09] AUDIÈNCIA: [inaudible]. Em pregunto si això fa la diferència. HANNAH: Ho sento, ¿Quina era la pregunta? AUDIÈNCIA: Hi ha petites "F" i capital "F." HANNAH: Així que la diferència entre els petits "f" i capital "F" no ha de fer una diferència. Així que "f" serà el 15 de qualsevol manera. Fresc, tota la resta? Tothom bo, CSS? Sí? [00:43:30] AUDIÈNCIA: Ho sento. Es pot tenir una classe i una identificació? [00:43:35] HANNAH: Sí, es pot. Les coses poden tenir tant una classe i un ID. I recomano encaridament provar aquests pel seu compte. CSS vostè aprendrà millor amb només fer alguna cosa, la pàgina web molt simple, l'elaboració d'una mica de CSS, i just veure com interactuen. I obtindrà una molt bona, sentit intuïtiu de com funciona. [00:43:56] Bé, tothom bo amb CSS? Ets tot va a fer bells llocs web amb CSS ara. OK, millors pràctiques, només coses a tenir en compte, les coses que-- és per això que atraquemos que per al dissenyador i tot això. Així que tanca totes les seves etiquetes HTML. Així que si vostè té un cos obert, ha d'haver un cos prop. Si vostè té un apartat obert, ha d'haver un paràgraf a prop. Revisi per veure la seva pàgina valida. Vostès han d'estar molt familiaritzat amb això des p-7 set amb CS 50 finances amb el validador W3. I com vaig dir abans, un dels nostres grans paradigmes es separa el seu estil amb CSS del seu marge de benefici, que és HTML. I després, per descomptat, tenim aquest gran XKCD aquí baix. Yay, alleujament còmic! [00:44:38] Acceptar, TCP / IP. Entre aquests i HTTP, bàsicament són dos protocols. Així que vostè podria pensar d'ells com un conjunt de regles que regeixen la forma en les coses moure a través d'internet. Així de control de transmissió protocol o protocol d'Internet, és només una manera d'assegurar-se que que les dades es posa a on va i que sabem si que mai ens falta de dades. Així que si vostès pensen tornar a la conferència fa un parell de setmanes amb David on vam tenir quatre sobres, que van ser tots comptats com un de quatre, dos quatre, tres de quatre, quatre de 4, això és només un conjunt de regles. Nosaltres vam dir, OK, sempre que estem l'enviament de més d'un paquet, anem a numerar amb el que el nombre és i quants total que es l'usuari ha de rebre. [00:45:19] I això és només el que diu està rebent les dades si es han aconseguit tot, o si alguna cosa es va perdre en el camí. I han de demanar una altra vegada. Això és en realitat un conjunt de regles. Així com es pot pensar en ell, d'acord? I també, que especifica el port, el qual vostès can-- sé durant la conferència, tenien tota una llista de ports. Però nosaltres no els tenim aquí ara mateix. [00:45:41] Protocol de transferència d'hipertext Així és, de nou, és un altre protocol. Així que és un altre conjunt de regles que governar, en aquest cas, com es transfereix l'hipertext. Així que només permet als navegadors parlar amb els servidors web. I com hem dit aquí, és com a presa de contacte humà. És només una forma de governar com el servidor web és va a interactuar amb el navegador. I tenim només un parell d'exemples. Tenim algunes peticions aquí on GET és el mètode. Tenim HTTP 1.1, que és versió de protocol per a nosaltres. I després, l'amfitrió, que és el que en realitat estem tractant d'accedir. I llavors, com es veu aquí, obtenir alguna resposta amb aquest 200 Acceptar com el nostre codi de resposta HTTP. Tenim una gran llista que vaig per aixecar en un segon que vostès han d'estar familiaritzats amb. I nosaltres tenim aquest tipus de contingut de text / HTML, que es limita a dir quin tipus de dades estem rebent des del servidor, d'acord? Aquest amfitrió i aquest tipus de contingut són part de les capçaleres HTTP. Vostè pot tenir pocs o tan poc com necessària per al context del vostè està tractant. De vegades, vostè té un munt de informació procedent del seu servidor. Potser estan sol·licitant molt d'informació de l'usuari. Varia en funció del context. Si ens fixem en CS 50 Estudi, hi ha molt més en això. Però tenim un munt d'aconseguir a través, així que em vaig anar a la dreta per davant si això està bé amb vosaltres? Fresc. Espereu. Definitivament he de tota llista de-- eh! No sé per què això és tot el camí fins aquí. Vaig pensar que literalment vaig mudar mentre estava sitting-- [00:47:15] DAVIN: Vols ensenyar? O vols que t'ho ensenyo? [00:47:17] AUDIÈNCIA: Vaig pensar que podríem simplement mostrar a començar. Vull dir, vostè pot entrar en encara més, però jo va pensar que tenia més sentit des que estava parlant només d'estats HTTP. Així que aquí està la llista completa. Suposo que el que passarà és Davin va a anar-hi més tard. Però hi ha una llista completa un Mostra el gust per venir. Bé, anem a blow-- això va ser un curs intensiu de PHP com cap altre. [00:47:41] Així PHP, preprocessador d'hipertext, és un backronym recursiva, el que significa que va ser nomenat una altra cosa. I després hi havia com, aquest en realitat no té sentit. Així que només nomenen it-- i era un acrònim, de manera que només ho va fer PHP preprocessador d'hipertext, que simplement no té sentit. Història divertida. És un llenguatge de programació. Així que per molt a fer èmfasi que HTML no és un llenguatge de programació, és un llenguatge de marques, PHP és un llenguatge de programació. Com saps que això és perquè no és lògica. Hi ha condicionals. Tenim les variables, mentre que nosaltres tenir cap d'aquestes coses en HTML. [00:48:12] Molt bé, llavors tenim aquesta petita poc aquí que és com un gust de PHP. Així el bàsic, noms de variables començar amb un signe de dòlar. Hi ha molta gent que li agrada. Recorda a nosaltres diners. Tot és genial. Tots volem PHP. Així que no especifiquem 1 Tipus de més de variable. Es determina en temps d'execució. L'intèrpret serà, oh, només haurem de córrer a través, i d'acord amb el context, Anem a veure quins tipus de tipus aquestes variables han de tenir. No hi ha funció principal. Les coses van a funcionar. Vostès amb la seva importació en el seu última p-set, t'adonaràs d'això. No hi havia realment una funció principal. Vostè acaba d'escriure el que que volia passar. I només va succeir. Així que això és PHP per a vostè. [00:48:56] Les matrius són molt similars. Encara tenim aquest suport. Aquí, tenim alguna variable diu arr, i és igual A-- tenim la nostra normalitat notació de claudàtors. I tenim algun valor clau. I la gran diferència entre C i PHP arrays és que podem tenir aquest associate-- podem associar valors a les tecles. Així que en lloc de només tenir una matriu que està indexat pel nombre o la posició d'aquest element de la matriu, en realitat podem associar amb una clau. On podem dir, OK, vull el que sigui valor s'associa amb la fruita. I potser tenim la fruita va anar a plàtan. Així que tornaria plàtan per a nosaltres. [00:49:41] Però bàsicament, el més cosa de gran abast sobre aquest és que si vostès recordin la demostració de la conferència en la qual, bàsicament, abecedari reescriure en PHP, i recerca era-- era realment li agrada, no existeix aquesta clau? Això és molt amable de la potència de la mateixa. Vostè no necessita iterar a través de la seva matriu. No necessita saber el que l'espai que es troba. Podria ser al final o el principi. Com sempre que se sàpiga la clau que està associada amb el valor, PHP només pot escopir aquest valor còpia a la dreta en vostè, ¿d'acord? [00:50:09] I després, també només tenir només perquè pot tenir parells de valors clau no vol dir que vostè hagi de fer. També es pot simplement crear una matriu normal, com aquí, a la part inferior, on és només un, dos, tres, quatre. Aquests són els nostres valors. I de fet, les seves tecles són els índexs. Així que la clau per a una seria zero. La clau per a dues seria un. Així successivament i així successivament, llevat assigna explícitament una clau, vostè podria suposar que el valor és sols el seu índex. Té això sentit per a tothom? No hi ha preguntes? Impressionant. [00:50:38] Acceptar, foreach és una manera de iterar a través de les seves matrius. Així que tenim alguna cosa aquí, només l'estructura general. Així foreach, el nom de la nostra matriu, com ho que voleu marcar cada element en la matriu, i podem fer alguna cosa amb aquest element o amb aquest valor. Així que tenim un exemple aquí. Tenim un associativa matriu amb aquestes dues entrades amb la barra està associada amb foo i qux està associat amb baz. Així tecles són foo i baz. Els valors són bar i qux. Així foreach, tenim la nostra gamma aquí, com el parell de valors clau. Això ens permet l'accés la clau i valor. Potser el que desitja que el valor, en el cas vostè podria fer com arr com $ valor, i llavors s'acaba d'accedir al valor com iterar a través. Però potser, per alguna raó, desitja que la clau, que és per això que vaig triar aquest exemple al seu lloc. Així que en realitat es pot manipular clau i el valor en aquest cas. D'acord? Pregunta? [00:51:41] AUDIÈNCIA: Si volies només manipular la clau, es que has de fer foreach-- [00:51:45] ALISON: Correcte. Així que si volies manipular només la clau, vostè encara necessita aquest sintaxi, perquè si només tenir arr com una cosa, com una cosa, que és suposarà que desitja el valor, no la clau. Així que si mai prou feines té igual arr com, potser això és com $ element, que suposarà que vostè està demanant per només el valor en cada punt. Si voleu explícitament a fer alguna cosa amb la clau, encara que no va a fer qualsevol cosa amb el valor, necessita aquesta estructura que tenim aquí on vostè està demanant explícitament tant per a la clau i el valor. Molt bona pregunta. Una mica més? Fresc. [00:52:27] Molt bé, PHP i HTML. Oh, estem de tornada a la p-7 set de nou. Així que això ha de ser una mica familiar. Així que aquesta és una forma simple d'HTML que té un nom d'entrada de hola. I veiem que tenim el nostre mètode de GET. I si recordem de la nostra p-set, quan es presenti aquesta manera, envia una matriu anomenada $ _GET que té tots aquests inputs o variables de la forma que ha d'estar manipulat en el nostre PHP. Així, en aquest cas, l'usuari posaria en nom seu. Sostenen que. I veiem que tenim una mica de varietat aquí. Tenim la nostra gamma GET. I estem accedint el nom. [00:53:11] Així que diu, està bé, dóna'm el valor que està associada amb el nom, nomenar a ser la clau aquí. I que els mapes directament al que vam dir el nostre nom d'entrada és. Així que això li estava donant la clau del estarà en el seu arsenal aquí. Té això sentit per a tothom? Sí? [00:53:32] AUDIÈNCIA: El nom en GET refereixen a la línia estada en [inaudible]? [00:53:36] ALISON: Es refereix a això aquí. Així que aquest camp aquí, es refereix a aquest nom aquí. Així que això podria haver estat nomenat com el nombre de telèfon, o el que sigui. Aquest nom diu en realitat, el que estàs trucant aquest camp? Com es va a consulteu aquest camp? I aquest nom és com en realitat, estem dient aquest camp es diu nom. Això és el que anem a accedir-hi. [00:53:59] AUDIÈNCIA: Així se sent, nom d'entrada és igual a Bob, i- [00:54:02] ALISON: Correcte, llavors vostè obtindria Bob allà baix. Exactament. Tothom cool? Molt bé, així que realitza front POST, aquestes són les dues formes principals que passem les dades en una petició HTTP. Vostès haurien d'haver vist tots dos amb sort. Així que amb GET, la informació es fa passar a través de la URL. Així que si alguna vegada Google recerques, YouTube, probablement notar una mica de signe d'interrogació. I llavors, totes les paraules que acaba de posar en allà. I PAL passa les dades en el cos del missatge HTTP. Així que a diferència GET, quin tipus de compte que les dades s'oculta per a l'usuari. Però el que és realment important entendre és que això segueix sent tan insegur com GET. L'analogia que m'agrada utilitzar és si que tingui el seu número de compte bancari i ho escrius a l'exterior de un sobre, que és bastant insegur. Si hagués d'escriure en un tros de paper i el va posar dins del sobre, que segueix sent molt insegur perquè tot el que has de fer és obrir que fins i mirar el contingut real del missatge per veure això. Així que això és "ocult", i la gent li agrada Crec que és segur, però no és veritat. I estic segur que ho farà Davin entrar en això més, potser. Però és un important distinció per fer i una cosa molt bona per comprendre. [00:55:15] Acceptar, SQL, Structured Query Language. Totes les coses que que hem vist fins fa poc! Així que és bàsicament dissenyat, òbviament, per a la gestió de dades. Vostès tenien molta experiència amb això en les seves taules amb PHP MyAdmin. I hi ha quatre consultes comuns que volem que vostès sàpiguen. Així que no hi ha actualització, inserció, seleccionar i esborrar. Així que assegura't de saber els realment bé. Anem a anar a través d'ells molt ràpid. [00:55:40] Així que actualitzar, de veritat, com ho es podria pensar que el fa, només actualitza les dades a la base de dades. Així que tenim algun exemple aquí. Aquest és el general estructura d'una consulta d'actualització. Així que actualitzem la taula que estem parlant. I volem establir certa valors, certes columnes igual a valors específics. Així que això només actualitza la taula, el canvi valors en totes les files d'aquest cas. Així que en aquesta d'aquí sota, una real exemple, tenim insert-- ho sento. Això diapositiva avançat sense jo me n'adonés. [00:56:17] Així que aquesta taula d'actualitzacions configurat col1 igual a val1 on és la casa és igual a "adober". El que aquest fa és només canvia, només actualitza aquests valors en llocs específics. Així que en aquest primer, canvia aquests valors de tot a la seva taula, D'acord? Es canviarà aquesta columna per a cada entrada única, per cada filera. Però aquesta on, vostè podria pensar en ell com un qualificador. Així que només canviarà en llocs molt específics. Així que en p-7 set, quan potser actualitzada la quantitat de diners en efectiu que el seu usuari tenia, probablement tenia alguns on ID és igual d'ID de sessió, oi? [00:56:53] Com que no vol canviar la quantitat de diners en efectiu per cada persona que va ser l'ús del seu lloc web. Vostè volia canviar per un persona específica, sent aquesta persona qui estava usant en aquest moment. Dret? OK, així que inserir, inserció certs valors a les taules. Això és com quan estàs la creació d'un nou usuari. L'estructura general aquí està inserir en qualsevol taula estem parlant. Els valors, que són els valors que realment volem inserir. OK, així com el veiem aquí, han inserir a la taula. Això és amb columnes específiques els seus valors correspost. Així que això diu, inserit una nova fila que conté valors val1 i val2 sota aquestes columnes específiques. [00:57:33] Així que potser només vol omplir a la meitat de les coses en aquesta fila. Això és el que aquesta part aquí li permet fer. Et permet en realitat determinar quina part. Sí? [00:57:44] AUDIÈNCIA: Pot vostè només [inaudible] cel·les de la fila [inaudible]? [00:57:52] ALISON: Si només ompli certes parts de la seva fila, la resta de les cèl·lules són només buida. Sempre que els permetin estar buit, no és un problema. Si intenta accedir-hi, és tornarà algun element buit. Però és important saber que en certes taules, Han de ser permès a ser nul. És possible que hagi trobat amb un problema durant la seva p-setembre perquè no deixem cap dels seus valors siguin nuls. Però vostè pot especificar una valor opcional a la seva taula. [00:58:26] OK, seleccioneu, de manera que aquest és només una forma d'aconseguir dades específiques d'una taula en algun identificador que desitgi. Així que seleccioneu estrella de la taula on col és igual a alguna cosa només significa, dóna'm totes les dades associades on aquesta columna específica és cert. Així que l'estrella en aquest cas ho farà tornar tota la fila per a vostè, ¿d'acord? [00:58:49] I llavors, en aquest cas, seleccioneu l'estrella de taula només et dóna tota la taula. I després, eliminar, òbviament, només esborra la fila de la taula. Així que eliminar de la taula, qualsevol taula que estem referència, on alguns específics identificador o alguna condició és vertadera. Sí? [00:59:07] AUDIÈNCIA: Pregunta. Per què s'utilitza doble cotitzacions, i si fer cometes simples o dobles cotitzacions, fa alguna diferència? [00:59:13] ALISON: Les cometes dobles o cometes simples no fa una diferència en SQL. Em va semblar veure una altra pregunta. Sí? [00:59:20] AUDIÈNCIA: No l'afecta el que aconsegueix escapar de la consulta? [00:59:25] ALISON: Rob? [00:59:27] ROB: Què entén vostè per escapat de la consulta? [00:59:31] AUDIÈNCIA: Si algú té un consulta única en forma de-- [00:59:36] ROB: Si algú posar una cometa simple en, llavors tot el temps que estiguis desinfecció la seva entrada, llavors no importa. Però si vostè està utilitzant un sol cita i vostè està incorrectament escapar dels seus inputs, llavors sí, necessiten posar una cometa simple per tal de trencar el seu codi. si fa servir cometes dobles, que necessiten per posar un doble Citant a trencar el codi. Però mentre t'escapes coses correctament, no importa. Només traduirà per al símbol correcte de totes maneres. [00:59:59] AUDIÈNCIA: Què significa escapament? ALISON: Bé, com desinfectant i escapament. L'examen que tenim, el gran XKCD còmic que tiri cap amunt on vostè té, oh-- ROB: És l'última diapositiva. ALISON: És l'última diapositiva, en realitat? Déu meu. Allà anem, perfecte. OK, així que bàsicament, es pot injectar alguna cosa en aquesta consulta SQL on es trenca la seva codi, o com David va mostrar a classe, si tenim alguna sola cita 1 és igual a 1 i si en el nostre codi, simplement copiem directament que a, i tenim una cometa simple que acaba, el que passa és que obtenim alguna expressió que s'avalua a cert que ho farà deixar que algú entri a la base de dades i obtenir dades que ens no volen que ells reben. Així desinfecció de les entrades només significa assegurant que estem escapant aquests personatges i designant com caràcters i no les coses que s'ha de permetre s'ha de prendre literalment com la nostra sentència SQL. [01:01:04] Així que el més gran que hem dit que vostès han d'estar usant eren HTML caràcters especials, que és una cosa que és possible que vulgueu fer una ullada a. Acceptar, eliminar. Els tipus de dades, tot això serà en línia. Ja que hem deixat 15 minuts, estic només va a anar a la dreta a través d'aquest. PHP i SQL, bàsicament es tracta de només vam tenir una funció de consulta que ajudar a protegir contra aquests atacs maliciosos. Així que cada vegada que utilitzi consulta, ens assegurem que les coses van ser desinfectats i altres coses. [01:01:36] MVC és només un paradigma de disseny, així model, vista, controlador. És només una manera de mantenir les coses agradable i dividit de la mateixa manera que tendim a factoritzar codi cap a fora en funcions. Això és només un marc de disseny web que li permet fer el mateix. Vaig a ometre aquest. [01:01:54] Això és una cosa que jo seria súper còmoda amb. És un petit gran taula. Et dóna la funció exemple del model. Només estic passant per això perquè jo realment volen Davin per poder parlar. Si té alguna pregunta, si us plau fóssiu lliure. Vaig a ser aquí després. Només ha de venir a parlar amb mi. Amb això, tenim estats HTTP. I Davin va a bufar a través d'aquest en 15 minuts. Això serà gran. [01:02:17] DAVIN: OK. Uh, el seu micròfon? Sí. Ho sento. ALISON: Manera de preparar-se. DAVIN: No, estic llest. Estic llest. Anem a fer això. Està llest. D'acord. Ho sento. Vessar cafè en mi mateix. No sé si estic més malestar que em veig ximple, o que jo no tinc el cafè més. De tota manera, només un anunci ràpid sobre el full que vostès tenen. Així que aquest full que vostès tenen no és el funcionari el que hi ha al qüestionari. Aquest és l'oficial del que hi ha al qüestionari. A més, en el lloc web, li diem que, OK, això serà al qüestionari. Així que a la petita fulla de trucs que té, no oficial. I hi ha errors en ella. Així que millor no només ha d'utilitzar cegament. Així que sí, això és tot. Així que entrarem en això molt ràpid. [01:03:05] Així estats HTTP. Llavors, què passa quan el pàgina web, tot està bé. Acceptar Tot està bé. Tot torna a vostè de la manera que ho desitgi. Vostè obté un 200 OK. 301, on hem vist que 301 abans? Espera, què passa? Ho sento. Vam veure conferència estany i durant seguretat. Així que durant la seguretat, de manera que si David va teclejar http i després contractar cs50.net, vas a veure 301 es va moure. Per què? Com que va a redirigir vostè automàticament al nostre HTTPS. [01:03:35] Així que 301 es van traslladar, només és bàsicament una redirecció. I vostè pot pensar-hi com aquest. Qualsevol dels estats que comencen amb de 2, aquests són com, OK, tot està bé. Qualsevol dels estats que s'inicien amb 3, aquests són redirecció. Els estats que comencen amb 4, que els mitjans hi ha algun tipus d'error de client. Els estats que comencen amb 5, això és algun tipus d'error al servidor. Així que tipus de trenques els estats així. Així que 304 no sense modificar, pel que en la seva server.c p-sets, així que diguem que vostè cat.html carregat. Tot torna, vostè aconsegueix 200S, OK, genial. [01:04:03] Diguem que vostè és refrescat. Bé, dins d'aquest cat.html, tens un JPEG. Bé, això no és JPEG posarà a carregar. No va a publicar un altre Sol·licitud GET al servidor, i després obtenir tota aquesta informació. Es va a simplement ser: aquesta imatge és serà emmagatzemat en memòria cau en l'equip. I perquè la imatge serà un 304. Així que no ha estat modificat. Si a continuació, tancar, és clar galetes i, a continuació, renovi i tractar de carregar la pàgina de nou, vas a veure 200S. No vas a veure que 304. [01:04:28] 400, sol·licitud incorrecta, béns ràpid, com si anaven a enviar una JSON objecte al servidor i el seu objecte JSON era incorrecta, veuràs una cosa així. 403, prohibit. Quan veure un prohibit? Probablement Probablement? AUDIÈNCIA: Chmod. DAVIN: Chmod, si. Així que vostè no ha establert permisos correctament. 404, no hi ha cap comentari. És que no hi ha. Així que si escriviu l'URL equivocat. 500, error intern del servidor, el servidor probablement no es va configurar correctament. Alguna cosa no en el seu final, però alguna cosa al costat del servidor. I 503? Molta gent va veure 503s en l'última p-set. Quan passarà? Vaig escoltar murmuris. [01:05:05] AUDIÈNCIA: Quan Google decideix que ets un robot. DAVIN: Sí, quan Google decideix vostè és un robot, s'obté 503s. Així que això és una sobrecàrrega. Si ha sol·licitat des del servidor massa, en general és temporal. I la majoria de vostès expliquen d'ell. Així que vesteix 503. És possible que hagi pres una mica ruptura, llavors els 503s van ser, i tot estava bé. [01:05:20] Gabe: Molt ràpid, quan es deixi vostès 500 en conjunt, probablement, aquest últim problema? Sí? [01:05:27] AUDIÈNCIA: En general, si el servidor té un arxiu extraviat o [inaudible] la seva màquina [inaudible]. [01:05:34] Gabe: Pel que podria ser una configuració problema en el seu PHP del vostre servidor. Però podria ser alguna cosa com un punt i coma que el seu oblidar. Si estàs escrivint PHP, una sintaxi incorrecta podria aconseguir alguna cosa així. D'acord? [01:05:46] DAVIN: Cool. Vols que faci només fins AJAX? [01:05:51] Gabe: [inaudible]. DAVIN: OK. Llavors quin és el DOM? Què significa per DOM? [01:05:55] AUDIÈNCIA: model d'objectes de document. DAVIN: Nice. I per què ens agrada? Impressionant. Dret, de manera que només ens permet l'accés l'HTML, accedeixi a la nostra pàgina molt ràpidament. Per què? Com que estem tractant al nostre pàgina, tractant als nostres etiquetes HTML, tractar tot com si fossin objectes. Si els estem tractant com són objectes, llavors, què podem fer? Bé, podem trucar a funcions en ells. I això és important per què? Bé, doncs utilitzarem JavaScript per actualitzar el nostre HTML, actualitzar aquests objectes. Així que si els tractem com a objectes, llavors podem trucar a funcions en ells. Vaig a entrar en això una mica més quan vaig a JavaScript però tots vostès han vist com document.getElementById. Així que el document és la seva element, aconsegueix element d'identificació, pel que anem a cercar per alguna identificació en una etiqueta HTML. I després, pot fer-ho alguna cosa més que això. Per exemple, com document.body, llavors vostè pot afegir nen. Així que vas a trobar el document. Vostè té el document. Trobaràs el cos. Vostè va trobar el cos. I llavors, vas a trucar a alguna funció en ell. Així annexar nen, i pot annexar una mica d'HTML a l'extrem interior del seu cos. Així que, bàsicament, no ets més que tractar-la com un objecte. Vostè està tractant HTML etiquetes com un objecte. I fa que sigui molt fàcil i ràpid per anar a través d'ells. Però també li permet per cridar a funcions en ells així que vostè pot manipular i canviar els elements. [01:07:04] Gabe: Tenint en compte això, per què és tan JavaScript un llenguatge agradable per interactuar amb HTML? Les probabilitats són, quan les persones triaven l'idioma del navegador, pel costat del client, Javascript és realment agradable, que és molt bo en la manipulació d'objectes. I els objectes són una mena de els objectes que apareixen en l'HTML, així que és molt fàcil per a JavaScript fer aquest tipus de manipulació. DAVIN: Nice. Així que aquí és només un exemple. Així que crec que en el concurs de l'any passat, o potser fa dos anys, Li ha demanat per crear un arbre. Així que això és exactament el que fa. Així es comença amb el document. I després que, bàsicament, només cal veure les etiquetes. Així que si ens fixem, ens començar amb una etiqueta HTML. I llavors, s'obté pistes sobre com a fer això sobre la base de la sagnia. Tan amable cap de sucursals fora. Cap a dins, tenim una altra etiqueta de títol. Així doncs, tenim una etiqueta de títol. I dins d'això, tenim una mica de corda. I així representem una cadena en un cercle. I totes les etiquetes estan a les places. [01:07:54] I si ens fixem, si pensar en això com un arbre, i diguem que és HTML un pare, llavors cap i el cos seran germans. Tots dos seran fills d'aquest pare. Així que perquè són dos germans, que són serà una espècie de banda entre si en el nostre model d'arbre. I després, que, bàsicament, fer exactament el mateix. Així que no és difícil, però hem demanat aquest tipus de preguntes abans de la prova. Gabe: Algú té preguntes fins ara? És bo? DAVIN: Cool. JavaScript bé, les coses bones. Així JavaScript, el que és JavaScript? Bé, JavaScript és-- és complicat, però aquests són alguns dels aspectes més destacats que vostè ha de tenir en compte. En primer lloc, està vagament escriu. Què vol dir això? Així que PHP era-- sí, què passa? [01:08:35] AUDIÈNCIA: No ha de explícitament Estat del tipus de variable que és. DAVIN: Perfecte. Així que ell va dir que vostè no ha de explicitar el tipus de variable. Això és exactament correcte. Així que en C, si tingués int i és igual a 50, després en PHP, és com aquest, $ i, és igual a 50. Després, en JavaScript ¿Quina seria la trucada? Var, oi? Seria com var i és igual a 50. Però vostè no ha de ser com, OK, això és un int. OK, això és una cadena. No hi ha necessitat de fer això. És un llenguatge interpretat. Llavors, què significa això? [01:09:04] AUDIÈNCIA: No compilat. [01:09:06] DAVIN: Què no compila vol dir? Sí? [01:09:11] AUDIÈNCIA: No té reestructurar el codi perquè estigui llest per l'equip per executar-lo. És només pren en el moment de l'execució i l'ordinador [inaudible]. DAVIN: Sí, per el que va a passar a través d'un intèrpret. Però tens raó. Així que vostè mai va compilar, oi? Quan vostè estava fent la seva PHP i JavaScript, mai vas cridar compilació. Mai es diu alguna cosa així com fer ni res d'això. Això és perquè s'interpreta. Així que cada vegada que passa pel navegador, que passa a través d'un intèrpret. I això va a interpretar just a temps real immediatament per a vostè. Quins són alguns aspectes positius i negatius a tenir un llenguatge interpretat i que té un llenguatge compilat? Així compiling-- sí, què passa? [01:09:50] AUDIÈNCIA: Interpretat és més lent. DAVIN: En quin sentit? [01:09:57] AUDIÈNCIA: Després compilar, no té fer cap pas addicional per executar que, mentre que aquest [inaudible]. [01:10:04] DAVIN: Dreta, perfecte. Així que el que ha dit és bàsicament que la compilació, de compilació, vostè té una gran quantitat de costos inicials, oi? Vas a compilar. Però després de compilar-lo, el compilador va a optimitzar-lo. Serà ràpid. Es va a bàsicament ser el més ràpid que pot ser. Amb la interpretació, mai haver de cost inicial. Més aviat, serà una mica més lent cada vegada que interpretes. I hauràs de interpretar cada vegada. Així que en lloc de tenir aquest un cost de temps, ara que ets haurà de interpretar cada vegada que la pàgina fa. [01:10:29] Així que els intèrprets són bones perquè vostè no ha de compilar, però són dolents en què cada el temps es carrega la pàgina, és haurà de interpretar aquesta JavaScript. I es va a córrer una mica més lent que si anés a compilar. Permet communicate-- Oh, espera. S'utilitza per manipular el el contingut i l'aparença. Acabem de parlar sobre això. Utilitza el DOM. AJAX, entrarem en AJAX en una mica. I llavors, és el costat del client. Així que PHP és del costat del servidor. JavaScript és el costat del client. Què són positius a això? Diu ella. És més ràpid, oi? Perquè vostè no té A-- és més ràpid. No ha de comunicar amb algun altre dispositiu. Si no ets més que en el seu client, mai estàs va haver d'anar a veure el que hi ha al servidor i després informar o alguna cosa per l'estil. Així costat del client tendeix a ser una mica més ràpid. [01:11:15] Gabe: Sí, però això no vol dir que PHP és més ràpid que JavaScript ni res per l'estil. Corren una mica en la mateixa velocitat, ja que tots dos són llenguatges interpretats. El que és lent aquí hi ha la petició. Així que en realitat estàs passant tot el camí al Brasil per obtenir alguna informació que hi viu. Però PHP i JavaScript, que tipus de córrer a la mateixa velocitat. No és que un és més ràpid que l'altre. Això, també, pregunta amb trampa aquí. Així JavaScript mai es converteix en codi de màquina, veritable o fals? [01:11:47] AUDIÈNCIA: Fals. Gabe: Fals. Ha de convertir-se en màquina codi perquè el codi màquina és l'únic que la màquina entén. Tot i que no està compilat, encara esdevé codi de màquina perquè l'intèrpret és només un programa que va línia per línia i transforma aquesta línia en cosa que l'ordinador entén. D'acord? Fresc. [01:12:08] DAVIN: Aquesta és només una molt bàsica hola programa JavaScript món. Així que no sé si: vostè ha vist això. Però només tens HTML aquí. I en lloc d'haver de posar el codi JavaScript a les etiquetes de script, pel que normalment el va posar al cap. Vostè té etiquetes de script. Se li cauen allà. Tot el que hem fet aquí és que hem vinculat en-- així que ens hem vinculat en un arxiu JavaScript com aquest. I que tots vostès han fet això, oi? Així que quan ho estava utilitzant jQuery i underscore.js en l'última p-set, vostè no té un munt de codi en les etiquetes de script, si cap. Vostè podria fer això, però en el seu lloc estàs vinculant en. I va associar a tal com ho fa amb CSS. Per tant, només fa que sigui més fàcil de llegir pel el seu codi no és com 1.000 línies de llarg amb un munt de funcions que és possible que no utilitzeu. [01:12:52] En el seu lloc, simplement enllaçar a. Es compartimenta ella. És com escriure algun fitxer de capçalera, i a continuació, inclòs l'arxiu de capçalera en C. Penseu en això com aquest. Llavors, què fa això? Bé, això funcionarà. Es va a alertar. Així que vas a aconseguir una mica pop-up anomenada hola món. Una pregunta ràpida, tot just prova de seny, pel que es veu aquí en el cos, dir cos, HTML aquí. Què ve primer? Veig cos, HTML aquí, o què apareix l'alerta en primer lloc? [01:13:19] AUDIÈNCIA: Alerta. [01:13:20] DAVIN: Correcte. Diu alerta. Per què? [01:13:22] AUDIÈNCIA: Perquè vostè anar de dalt a baix. [01:13:24] DAVIN: Sí. Perfecte. Pel que diu, que vagi de dalt inferior, que és absolutament correcte. Vostè va a anar de dalt a baix. I en JavaScript, jQuery, vostè té una funció que és onload similars, o llest, i que diu, OK, espereu fins tot això HTML s'ha carregat. I després, trucar al JavaScript. Perquè no tenim això aquí, el El primer que passarà es va a anar de dalt a baix. Es va a colpejar que JS trucar, que va a alertar. Després que fa clic a D'acord, que alerta desapareix. A continuació es mostrarà que el cos HTML aquí. Niça. [01:13:54] Acceptar, de manera que només molt ràpid, l'escriptura en JavaScript és super ràpid. Per declarar un nom variable var. Així que en C, té int i, vostè té per declarar quin tipus de tipus que és. PHP, $. JavaScript var. Ja parlem d'això. Molt bé, anirem. [01:14:11] Loops, el mateix. És el mateix. Les declaracions de funcions, de manera que igual que ho has vist en C. L'única diferent és així que quan s'arriba a altres llenguatges de programació, com quan es pren 51 proper semestre i que estàs fent amb ocaml, vostè pot ocupar-se de funcions anònimes. Així que això és exactament el que tenim aquí. Així que vostè vol posar en suma, algun tipus de valor de la suma. Però només es podria estar fent un cop. Pel que no vulguis dir funció resum, donar-li una declaració de la funció. En canvi, només l'utilitzen com una funció anònima. I ja has vist aquesta molt. Vostè veurà un exemple de això en un parell de diapositives. Sí, ja veurem. Gabe: Bona pregunta. Quan podria voler utilitzar una funció anònima aquí? Bàsicament, quan vols alguna cosa, com un esdeveniment, a passar. Així que quan el ratolí està fer clic, per exemple, Vols una mica de funció anomenat. Així es passa a l'esdeveniment manipulador, es passa a l'esdeveniment, tipus de, la funció que desitja ser cridat. I el que està passant és com, al final del dia, només un punter a que la instrucció, a la funció. Així que no és com si estiguessis passant tot el codi, tal com un punter a la funció. I llavors, quan algú fa clic al ratolí, a continuació, que es diu a la funció. [01:15:17] DAVIN: matrius, per la qual cosa tenir una declaració de matriu. A continuació, una matriu per posar les coses en. Molt ràpid, el que serà aquesta imprimir? Quin serà el tercer element serà? [01:15:31] AUDIÈNCIA: "JS". [01:15:32] DAVIN: Dret, que seria "JS". Esperi, tornar. Quina és la longitud? [01:15:37] AUDIÈNCIA: Tres. DAVIN: tres, no? Exactament el que vostè pensa. Bé, ara anar. Arrays, pot afegir coses a ells. Així que vostè pot anar més enllà els seus límits inicials. Només és una cosa a tenir en compte. PHP, JavaScript, que estan una mica poc més indulgent en termes de coses d'aquesta manera. Objectes, molt semblant estructures en C, molt com matrius associatives en PHP. Tot el que has tingut experiència amb això. Així JSON, quan estàs passant JSON anada i tornada en p-8 set, aquest és el seu objecte. [01:16:03] Així que sí, exemple, exemple ràpid real. Aquí és un objecte. La forma en què fan referència a aquesta objecte, de manera que només molt ràpid, diguem que jo volia trobar fora, bé, quin és el curs? I pel que el nom de l'objecte aquí és CS50. I després si tingués un associativa matriu, com vaig a fer això? Vaig a estar utilitzant la clau, oi? Així que tinc el nom de la matriu. Tinc suport, cites, clau, cometes finals, suport final, i que farà referència a aquest element dins del meu matriu associativa. Com em vaig referir Per descomptat dins del meu objecte? Algú sap? [01:16:39] AUDIÈNCIA: [inaudible]. [01:16:40] DAVIN: Què passa? AUDIÈNCIA: CS50.course. DAVIN: Dret, si. Així CS50.course. Així que la forma es fa referència a les coses dins d'un objecte JSON és amb un punt. [01:16:48] AUDIÈNCIA: També podeu utilitzar la sintaxi de matrius. [01:16:53] DAVIN: OK, està bé. [01:16:54] Gabe: També podeu fer servir el suport CS50, cadena, com les cometes. AUDIÈNCIA: Crec que és idèntica a PHP. Gabe: És el mateix. DAVIN: Molt bé! Però veurà aquest altres llocs. Sí, així de seguir endavant. Això és el que acabo de dir. Així que en un exemple de JavaScript jQuery. Així que aquest és el meu DOM, oi? Molt ràpid, així que tinc una cap, hola món, cos. Tinc un botó. Diu que "em empenta", de manera que vull per empènyer. I vull fer alguna cosa quan es fa clic en ell. Dret, al costat. [01:17:31] Dret, de manera que aquest és el meu JavaScript. Així que jQuery és només una més fàcil manera d'escriure JavaScript. Així que això, i el que vaig a mostrar el proper, serà jQuery, són idèntics. Així que van a fer les mateixes coses. Només jQuery tendeix a ser una mica més fàcil. La gent tendeix a agradar més. Té un munt de funcionalitats. Així que la gent tendeix a utilitzar jQuery. Tots vostès acostumat jQuery en l'última p-set. Llavors, què va a fer això? Què farà aquest JavaScript-- així això és simplement JavaScript. Què va a fer això? Què va a fer? [01:18:03] Així que primer, es veu la finestra onload. Dret? Així que no hem vist això abans. Així que això va a esperar fins que tota la finestra de càrregues. Així que va a esperar fins la càrrega d'HTML, totes les imatges abans de fer res. Així que diguem que el nostre DOM ha carregat. Tot hi és. Llavors, què passarà? Sí? [01:18:19] AUDIÈNCIA: apareix Button. [01:18:22] DAVIN: El botó està ja allà. Sí, això del botó ja hi és. Però això dirà, Bé, si faig clic al botó, de manera que el botó ja està allà, com l'etiqueta HTML. Esperi, tornar molt ràpid. Aquest avís de dret aquí és serà un botó ja. Ja hi ha un botó. Però llavors, el codi JavaScript etiqueta, aquí, que diu, OK, vull aconseguir element per ID, així botó de cerca es limita a dir, OK, vull per assignar aquesta variable a aquest botó. Així que aquesta variable és només una manera més fàcil d'accedir a aquest botó. I jo dic, està bé, si faig clic que botó, de manera que si faig clic en aquest element, i aquest element es refereix a el botó, si faig clic, llavors vull cridar a una funció. Aquí està un dels anònims funcions que estàvem parlant. [01:19:03] Només ha de trucar alguna funció. Dins d'aquesta funció, bàsicament, cosa que hem vist molt, alerta. Fa clic al botó de cerca. Va a tenir bàsicament un botó. Fer clic. Vostè aconsegueix aquesta alerta. X terme. Això és tot. Sí? [01:19:16] AUDIÈNCIA: Així que si vostè posa el guió [Inaudible], etiqueta de script en el codi HTML? [01:19:21] DAVIN: Vostè pot posar el guió etiqueta directament al cap perquè vostè té aquest onload. És també que té un clic. Així que va a esperar fins fa clic per alguna cosa. Però onload és només per estar segur, per fer càrregues que tot està en el seu HTML per endavant. Sí? Vols dir alguna cosa? [01:19:40] Gabe: [inaudible]. DAVIN: Sí. [01:19:42] AUDIÈNCIA: evita Així onload definir el botó de cerca de variable simplement dient document.getElementById botó de cerca de punts [inaudible]. [01:19:49] DAVIN: Definitivament, però després la seva cadena només es posa enorme. Exactament, així que això és només per fer més fàcil per a vostè, si. Sí? [01:19:56] AUDIÈNCIA: On ens crear window.onload? O document.ready? [01:19:58] DAVIN: Sí, n'hi ha. Sí, es, ho he comprovat. [01:20:02] Gabe: no perquè es preocupen. [01:20:03] DAVIN: OK, així que em vaig per dir-li de totes maneres. Així que, bàsicament, només en general, de manera que window.onload espera fins a la seva DOM, tot el codi HTML, càrregues. Espera fins que la seva càrrega d'imatges. Espera fins que tot càrrega. document.ready, només espera fins que les seves càrregues DOM. Una vegada que l'HTML és tot el que hi ha, un cop DOM hi és, comença a funcionar. Aquesta és l'única diferència. [01:20:23] Gabe: comprovar el seny ràpida aquí. Així això pot ser vist tipus de com una línia de codi, no? Perquè és window.onload és igual a un munt de coses. Quan estigui habilitat llegeix això, cert o falsa, la funció s'executa. Fals. D'acord? El que passa aquí, estàs de pas aquesta funció com una funcions anònimes a window.onload. I després quan es va per aconseguir realment executada? Quan es carrega la finestra. Això és un fet. Així que això és jus t cosa estem parlant d'abans, no? Així que quan passi l'esdeveniment, la funció passa. El mateix amb el onclick. [01:20:59] DAVIN: OK, així que algú va prendre lluny del document.ready. Però aquesta serà la same-- exacta AUDIÈNCIA: El signe del dòlar, que és un document.ready. Això és una drecera. [01:21:07] DAVIN: Oh, que és això? Ok, així que vol dir això? document.ready, accés directe. Però aquest és el mateix que window.onload a excepció de la petita diferència Del que et vaig parlar. I això és jQuery. Així que aquest és exactament el mateix cosa-- això és JavaScript. Això es sol-- algunes persones pensen d'ell com un pes més lleuger, versió elegant que té un munt de funcionalitat que és probable que s'utilitzi. Així que això fa exactament el mateix. [01:21:34] Així que el que assenyalen tipus de. Així que en l'altre exemple, tingut document.getElementById, així que vam tenir aquesta llarga cadena que va a aconseguir l'element pel que té ID. Això es substitueix per aquesta crida aquí. Així es veu el signe de dòlar, després veus cita, hashtag. Hashtag és sempre un selector. Es diu, està bé, això té a veure amb un ID. Quin és el selector per a una classe? [01:21:56] AUDIÈNCIA: Dot. [01:21:57] DAVIN: Dot, dreta. Si només vas a seleccionar una etiqueta, què és? És només l'etiqueta, exactament. I vostè podria utilitzar que aquí, també. [01:22:05] Gabe: I per etiqueta, ens referim com div, per exemple, o el cap. [01:22:08] DAVIN: O cos o p o res d'això, si. Així que aquí, bé, en comptes de dir document.getElementById, això és només la mateixa cosa. Només en jQuery, és més curt. Així que és més simple. Així doncs, no més onclick, només cal fer clic. funció jQuery, trucar a aquesta funció. Alerta és exactament el mateix. Així que és una mica més petit, o poc més curt, una mica de la gent pensa bit-- que és una mica més fàcil d'escriure, una mica més fàcil d'entendre. Però això és jQuery. Un munt de gent una mica poc confós i preocupat i pensen, OK, jQuery és diferent de JavaScript. He de recordar aquests dues coses diferents. Que no és. Vull dir, és diferent sintaxi. Però jQuery és JavaScript. És només una aparença millor versió que podria ser més fàcil entenen que la gent fa servir. Gabe: Sí, per ser honest, que el signe de dòlar que es veu en jQuery, això és només el nom d'una funció que defineix jQuery. No té res d'especial. És només el nom d'una funció, Igual que es podria definir el signe de dòlar. [01:23:03] DAVIN: Sí, així que parlem d'això. Algunes coses útils. Jo estava buscant tornar a les velles proves. En els últims dos qüestionaris, que han va haver d'utilitzar aquest tipus de coses. Així document.ready, per la qual fer que tot estigui carregat abans de començar a fer les coses. Seleccioneu un ID o seleccioneu una classe, que acabava de ser cita dot alguna classe, fi de la cita. Presentar, així que si estàs la presentació d'un formulari i trucada aquesta funció després que el formulari envia. Valor, així que anem a dir que tenia una forma presentació, com un nom d'usuari, un correu electrònic, el que sigui. Vaig tenir un quadre de text. Així que estic escrivint en aquest quadre de text. Bé, si vol aconseguir el valor fora d'aquest quadre de text, utilitzeu punt val. I després, aquí baix, dot HTML és el mateix és com a document de punt getElementById punt innerHTML. Així que això tornarà que el codi HTML d'aquest ID. Aquí, vostè només ha d'utilitzar alguns ID o el que sigui dot HTML. Això arribarà el codi HTML d'aquest element. Si volies llavors canviar això HTML, pot passar alguna cosa. Així que seria com HTML punt, i després a l'interior, de cites, de nou HTML o alguna cosa així. [01:24:05] Gabe: OK, així AJAX. Realment m'agrada entendre AJAX molt bé. Així que us vull nois a AJAX entendre molt bé. Perquè si ho fas, que està bastant anar per entendre tot el que té a veure amb HTTP, PHP, JavaScript perquè tot es reuneix en AJAX. AJAX no és un llenguatge. AJAX és una tècnica. I utilitza un munt de diferents eines. AJAX significa asíncron XML JavaScript. Així el mètode, la llengua, les dades. [01:24:36] Així que l'idioma principal que utilitzem en AJAX per desencadenar tot i per manejar tot més tard és JavaScript. És per això que es relaciona molt a prop de JavaScript. I llavors és asíncrona perquè nosaltres no ho fem tots alhora quan ens estem carregant la pàgina. Això és el que podem fer les coses una mica en paral·lel. La idea principal darrere AJAX és que vols per aconseguir una certa informació específica. Per exemple, quan estàs escrivint nou nom d'usuari quan es registra un nom d'usuari, el meu nom d'usuari és abc123. I després, al final de la manera, has de fer clic a Envia. I havia d'anar al servidor, i després verifiqui si a la base de dades, abc123 que ja hi és. I si ja hi és, diu, nom d'usuari ja a la base de dades. I ells, que han d'omplir tot el formulari de nou. I era molt, molt dolent. [01:25:23] I després la gent diu, Bé, per què no acabem de fer una petita petició HTTP al xec just per veure si aquest usuari està a la base de dades abans que l'usuari havia de presentar tot el formulari? Així, per exemple, quan el usuari acabi d'escriure abc123, anirem al servidor una mica poc i acaba d'obtenir un veritable o fals des del servidor per veure si això és un nom d'usuari vàlid o no. OK, així que això és una de les principals usos d'AJAX avui dia encara. [01:25:49] DAVIN: Així que realment ràpid, en una trucada Ajax a jQuery, que podria significar que vostè vull que sigui síncrona. Vostè no ha de fer això. Però vostè pot fer això. I si el que, què passaria? Bé, per exemple, quan estàs fer arribar les notícies o el que sigui, el seu navegador només va a esperar fins que tota aquesta crida s'ha completat en lloc de deixar que facis una altra les coses bé després de fer clic. [01:26:14] Gabe: No és passar mai més. Déu meu. Ho sento! Sí. "En el passat, el client necessitava petició tot el contingut d'una pàgina web ". Això és el que vaig dir. Ens permet enviar GET o POST addicional peticions sense tenir per recarregar el nostre navegador. Així que al final del dia, estem realment fer una sol·licitud HTTP aquí amb JavaScript. Perquè abans, només utilitzem JavaScript per canviar el codi HTML que ja va arribar. I ara, podem utilitzar-lo per interactuar amb els servidors web, així. La forma en què això succeeix és que tenim el client. Davin és un client. I té tot el codi JavaScript córrer perquè HTML està mut. Javascript és intel·ligent. Així Davin Davin té la seva intel·ligent part i la seva part mut. Ell va a utilitzar la seva banda intel·ligent ara. Ell va a utilitzar JavaScript a la sol·licitud, per exemple, si està en abc123 la base de dades o no. [01:27:04] Així Davin, si us plau, només envieu-me una petició HTTP. Gràcies. Així que acaba d'enviar una petició HTTP. Vostè veu això? I això és només la mateixa manera que s'envia qualsevol sol·licitud HTTP. El navegador, Google Chrome o alguna cosa així, és anem a veure que Davin de tractant d'enviar una petició HTTP, ajudarà hm una mica. I això anirà tot el camí fins al servidor. Ara, el servidor tindrà PHP aquí, o qualsevol altre idioma. Igual que en una petició HTTP normal. És més o menys una petició HTTP normal. [01:27:31] I després, el servidor es dirà, OK, Davin em vol comprovar si aquest abc123 està a la base de dades. Vés a parlar amb el model. El model diu que no és. abc123 és un bon nom d'usuari. I llavors, el lloc web va a utilitzar PHP per fer algun tipus d'arxiu. Podria ser, literalment, només un arxiu que conté "sí" en ella, o "no, o alguna cosa per l'estil. Podria ser qualsevol arxiu. [01:27:54] Podria ser que em vaig a Davin enviar una foto d'un ànec si està a la base de dades i enviar una imatge d'un hàmster si no està a la base de dades. Això seria tipus de mut, però funcionarà. OK, així que envio un ànec a Davin. Davin va aconseguir un ànec. I ara, qui va per manejar l'ànec? Part intel·ligent Davin nou, així JavaScript, oi? JavaScript enviar el sol·licitud i JavaScript que rebrà la sol·licitud i interpretar-la en alguna forma. [01:28:22] I en aquest sentit, que va a dir, OK, si ànec llavors estic bé. Si hàmster, després vaig dir, no, nom d'usuari i existeix a la base de dades. Però en general, no ets va a enviar un ànec. Vas a enviar cosa una mica més intel·ligent. I el que fem servir és XML. I més recentment, utilitzem JSON. JSON és JavaScript Object Notation, que és bàsicament s'obté una tot objecte JavaScript. I el poses en un arxiu, igual que aquest objecte CS50 que vostès van veure. T'ho poses en un arxiu, i l'envia a Davin. [01:28:53] Així que en aquest cas, ho faria fer un objecte JavaScript i dir, hi ha l'usuari, si. O hi ha l'usuari, no. I enviar de nou a ell. I per què JSON? A causa de que la persona que està rebent aquest és utilitzarà JavaScript per manejar la resposta. I JavaScript funciona tan bé perquè es diu JavaScript Object Notation. Dret? Així que es pot cridar a una funció i obtenir aquest bonic objecte de la resposta. I llavors, ell sabrà si que l'usuari està a la base de dades o no. [01:29:22] Així que ja veus, tot el que ve junts a la web, i després hi ha una petició HTTP a i en una resposta HTTP i tot. Així que assegureu-vos de nois entendre aquesta crida AJAX perquè ajuda a entendre tot dels conceptes que estem parlant. [01:29:37] Així que aquí està un exemple d'AJAX amb jQuery. I aquí, ho fem amb get JSON. Així que no estem tractant d'obtenir una imatge d'un gat aquí, o un ànec. Estem tractant d'obtenir un fitxer JSON. I llavors esperem fins es fa, punt fet. Això vol dir que estic esperant la resposta. Pot ser que prengui una mica de temps. Després, es veu una mica de càrrega. Si vostè vol fer que al seu lloc web. Així dot fer, i llavors, què que passa quan es fa? Es passa d'un anònim funció, igual que vam veure abans. A causa fet és un esdeveniment, només com fer clic a un ratolí o el que sigui, per jQuery. Així passa en aquesta funció amb dades, text, estat i jqXHR. I en el fons, això és només algunes variables que es pot utilitzar més endavant per tenir l'estat de la sol·licitud HTTP, les dades que es va per enviar de nou a vostè. Així que vostè pot més endavant interpretar i fer alguna cosa significativa amb ell. I si falla, quan es podria fallar? Bé, quan la petició HTTP dóna És vostè un 500 o alguna cosa així. Llavors, dirà la estat, quin tipus de fallada que va ser, i tot tipus de coses. Vostè ha de assegurar- per manejar tots dos casos, en cas contrari el programa es torna boig. [01:30:42] DAVIN: Així que sí, això és exactament el que va veure en la seva última p-set. L'anomenada real AJAX està en el JSON get. Aquesta és la trucada. I després, punt fet és com comprova si té èxit. Si té èxit, vol fer alguna cosa amb les dades. Tens l'oportunitat de tornar que Sol·licitar dades JSON. Això és el que rep. Així que si vostè recorda de la seva p-set, molts de vostès eren com a suport de dades i o el que sigui, enllaç punt o títol. El que tornarà a partir d'aquest JSON, el els camps es troben en aquest objecte JSON, això és el que està rebent de tornada. Dades és el que està rebent de tornada. Estat del text, cosa que li permet saber el que va passar. I després, el jqXHR, que només la petició HTTP XML jQuery. Això és com un objecte. I després no, igual que Gabe va dir. Gabe: En el nostre petit exemple de abc123 només per comprovar si això és a la base de dades o no, les dades serien una cosa que faria, si existeix el nom d'usuari de punts de dades, que és el que genera el seu PHP per que, si existeix el nom d'usuari de punts de dades, a continuació, Vaig a avisar, usuari nom ja existeix. Si no, jo només vaig a deixar que el usuari segueixi omplint el formulari. Acceptar, la seguretat, fresc. [01:31:50] DAVIN: Em Wanna? [01:31:52] Gabe: M'agrada aquesta. Així que una cosa que em resulta familiar. Ja gairebé hem acabat. Així que això és només l'exemple vostès vam veure a classe. Utilitzava argv1 aquí. Això és com un argument de línia d'ordres. I estem MEM còpia que en un buffer de cos 12. Quin és el problema aquí? Desbordament de memòria intermèdia! Com que tenim un buffer de mida 12. argv1 podria tenir una mida de dos mil milions. Nosaltres no fem cap comprovació de límits. Així que podríem copiar una gran quantitat de memòria. I estarem en particular malament per això. Què podríem fer això molt, molt dolent en aquest cas? Sí? AUDIÈNCIA: Part dels dos mil milions d'coses conté codi executable que torna [Inaudible]. Gabe: Exactament. Així que aquest és el tipus de El que la gent fa servir fer jailbreak a un iPhone, per exemple. Així que aquest tipus de coses. Com que només pot fer que el dispositiu executar qualsevol codi que t'agrada. La solució, de manera que la solució és fàcil. Només has de comprovar els límits. Tu passes per nul·la perquè sempre comprovar NULL quan estem tractant amb cordes. I llavors, es pren el longitud de la cadena abans. I si la cadena la longitud és una cadena vàlida longitud, que està dins 0 i 12, llavors estem bé. [01:33:03] DAVIN: Si no marca per null, molt ràpid, què passarà? Va SEG culpa. Per què serà SEG queixar? A causa de que està trucant strlen en nul. Gabe: Sí. Veritable o fals, fent servir un contrasenya és una bona idea. [01:33:19] AUDIÈNCIA: Fals. [01:33:20] Gabe: Fals. Utilitzeu moltes contrasenyes i grans, els llargs. Icones de cadenat garantir la seguretat. [01:33:26] AUDIÈNCIA: Fals. [01:33:27] Gabe: Fals. Això no vol dir res. És només una icona. SSL protegeix contra una home enmig de l'atac. AUDIÈNCIA: Fals. Gabe: Fals. OK, així que tots els que són falses. Niça. [Inaudible] Vols parlar d'això? El teu torn. DAVIN: Tipus d'atacs, home en el medi. Què és un home enmig de l'atac? AUDIÈNCIA: [inaudible]. DAVIN: Si envia un HTTP sol·licitud, que podria fer això, oi? Però si vostè està enviant HTTPS, que probablement no serà capaç de fer això. Hi ha un munt de punts al llarg de la seva connexió. Vostè té routers. Vostè té servidors DNS. Si algú és capaç físicament veure el que vostè està enviant, per la qual cosa algú és capaç de aconseguir realment entre vostè, el client i el servidor, i és capaç de veure el que va a enviar, es tracta d'un home enmig de l'atac. Així que per veure el que estàs tractant d'obtenir de el servidor, o és capaç de veure- pitjor, vostè podria ser capaç de veure galetes o alguna cosa per l'estil. [01:34:16] Així per exemple, si vostè no està utilitzant SSL, que podria ser capaç de veure les galetes d'identificació de sessió. I això es diu segrest de sessió perquè veu els seus galetes d'identificació, i després és capaç d'anar a aquest lloc web i fer-se passar per vostè. Perquè igual que en PHP, recordeu quan loguejat, què fem? Establim ID de sessió igual a ID. Així que l'identifiqui. És per això que es pot veure la seva cartera i la cartera no de tots els altres. [01:34:38] Bé, si sóc capaç d'aconseguir aquesta galeta, llavors puc iniciar sessió en aquesta pàgina. I llavors, jo només puc veure les teves coses i començar a comprar i vendre coses. Així que això és segrest de sessió. Però no ha de ser A-- poder perquè pot utilitzar l'home al mig de l'atac fins i tot si estan usant SSL. Però no s'ha de ser capaç de fer-ho. Si estan usant SSL, no es pot sessió de segrest. Per què? Perquè tot està encriptat, Oi? si està encriptada, i segueixo sent un home de la mitjà, segueixo tenint les seves dades. Això està bé. Però està encriptada. Així que no puc usar-lo. Així que això és dues. [01:35:09] Molt ràpid, cross site sol·licitud falsificació. Això és només si hi ha un vincle i aquest vincle fa alguna cosa que no creu que hauria de fer. Així, per exemple, si l'enllaç era anar a comprar accions o vendre accions, i no sabia això. Va fer clic a l'enllaç, enviat una sol·licitud, va comprar o venut alguna cosa que que no volies fer. Això és tot. [01:35:25] Cross site scripting, així que aquí, estàs passant enmig de la variable q, en lloc de passar a algun tipus de valor, potser q és com un nom. Així que en lloc de passar q iguals Davin o alguna cosa per l'estil, si vostè no utilitza HTML caràcters especials, si no escapen a aquest per assegurar-se que és Bé, llavors jo podria passar en el seu lloc, diguem que aquí estic dient impressió o alguna cosa per l'estil, llavors jo podria passar aquí una trucada guió. [01:35:51] Així que, en lloc de només aconseguir una variable, Jo després executar aquesta convocatòria guió. Així que dins d'aquesta seqüència de comandaments cridar, què fer? Ubicació de punts de document, que va a canviar la ubicació del document. Així que vaig a redirigir a un altre lloc. Es diu dolent de aquest exemple, molt bo. No es pot pensar en la paraula. I després, el que és encara pitjor és que em vaig a continuació, establir la galeta, que és una mica variables que tinc en aquest lloc web. Vaig a posar-igual a la galeta document punt. Per tant, vaig robar el seu galeta. I jo vaig a redirigir alguna informació a un lloc web que no es deu a accedir-hi. I tot això passa perquè ets no escapa el que has vist. Sí? [01:36:29] AUDIÈNCIA: Així que per fer això en clar, és vulnerable.com que és vulnerable a aquest. Així que pot semblar que enllaç en una determinada pàgina. Algú fa clic, va a vulnerable.com. Vostè té una galeta per vulnerable.com. Diguem Facebook és vulnerable, tan facebook.com. Vostè té la seva galeta de Facebook. El que això està fent, ets va a facebook.com, que està immediatament redirigint a badguy.com, però incloent la informació de la seva galeta. Així que és una redirecció ràpida, però la seva galeta Facebook s'inclou amb la redirecció, i això és el que [inaudible]. Gabe: Sí, hi ha algunes coses molt mitjanes que la gent pot fer si està això. Per exemple, si Facebook va permetre tothom per canviar el nom d'usuari, i no van fer cap comprovacions de validesa, de manera que podria inserir una cosa que JavaScript canvia la seva imatge a un hàmster. I que insereix la mateixa JavaScript a tot el món que veu la seva pàgina. Així que tothom que veu al seu pàgina té la mateixa cosa al nom d'usuari. I perquè és un virus, que s'estengui de manera exponencial. DAVIN: Anem a saltar l'última un, i després hem acabat. Així que aquest és només un altre exemple. Així que això és que no són escapar de la seva taula de SQL. Així que vostè pot caure. ¿Així que vols escapar coses. Aquest va ser l'exemple anterior amb el cross site scripting. Ho sentim vam córrer una mica tard. Demà, ho sento! Demà, tenim horari d'oficina. Així que les hores d'oficina a Cabbot 08: 00-11: 00. Les hores d'oficina són estrictament per a preguntes de la prova.