[00:00:02] [Muusika mängib] HANNAH: Tere, kõigile. Aitäh poisid nii palju tulemas in vastik ilm viktoriin üks vaadata istungil. Nagu te teate, viktoriin üks on sel kolmapäeval. Nii et me läheme läbi hunnik teemasid. DAVIN: Kuule, ma oskan öelda midagi reaalset kiire? HANNAH: Jah, Davin siin toimub midagi öelda reaalne kiire. DAVIN: Sorry. Just reaalne kiire, kui teil on küsimusi viktoriini, võite minna online. Mine 2014 viktoriini üks umbes viktoriini. See sai logistika umbes kuhu minna, millal minna. Kui oled üheaegselt kaasatud, me oleme läheb on meik viktoriin 5:30. Või kui sina oled minu läkitanud küsimus, teil on mõni muu probleem. Aga 05:30 on make-up aeg kolmapäeval. Aga kui teil on küsimusi, üldisi küsimusi, Internetis on kõik logistika. Nii et vaadata seal esimene. [00:00:47] HANNAH: Awesome. Nii et siin on suur teemade loetelu et me läheme läbi täna. Ma lähen, et katta kõik C kraami, mis seisneb selles, et esimeses veerus. Nii C värk, et me kaetud pärast viktoriini null. Alustades seotud nimekirja, mis sisaldab viiteid. [00:01:05] Olgu, nii et me nägime seda Viimase läbivaatamise istungil nii et ma lähen läbi see on natuke kiirem. Just tõsta oma käsi, kui sa tahad mind aeglustada või tegeleda millegi veelgi. Aga me kasutame ahelloendid sest meil alanud C massiivid. Ja massiivid on suur, kuid Probleem on selles, nad on kindla suurusega. Ahelloendid võimaldab meil luua dünaamiliselt muutuva suuruse andmestruktuurid. [00:01:28] Ja meil on meie põhilisi toiminguid, lisada, kustutada ja otsida. Ja me saame teha insert sisse Halvimal juhul konstantset aega kui me lihtsalt pane see alguses. Kustuta ja otsida, halvimal Juhul suur oh n korda. Nii jälle, lihtsalt klapp kaudu neid pilte, Ma tean, et me nägime neid viimast korda, kuid me soovite jälgida meie seotud nimekirja hoides silma peal pea meie seotud nimekirja. Kuna me teame, et iga üks meie sõlmed lihtsalt läheb osutavad Järgmine sõlm meie seotud nimekirja. [00:01:58] Nii et see, kuidas me jälgida. Kuigi need ei ole pideva tükki mälu leiame neid lihtsalt pärast erinevad nooled. Siin on meie struktuur jaoks seotud nimekirja sõlme. Me nägime seda viimast korda. Meil on struct node. Ja tal on kaks omadused. Number üks, tegelik väärtus tahame salvestada. Sel juhul on täisarv. See võib olla string, siis võiks olema char, mida iganes sa tahad. Ja siis on meil jälgida Järgmine sõlm meie seotud nimekirja. Nii et saab olema kursor järgmisele sõlme. Kui sa olid lihtsalt teeme Otsingu nagu ma enne ütlesin, sa pead järgima oma nooltega. Täiendus, siis oleks jälgida kus ülejäänud oma nimekirja on. Ja sa tahad suunata juht näidata meie uus element, mis sel juhul on üks, ja siis üks punkt ülejäänud ahelloendid. Nii jälle, ma tean, et see on natuke natuke korda alates viktoriin null. Seega peame olema väga ettevaatlik umbes et kus me kas need pointings nii et me ei Kadottaa tagasi nimekirja. OK, mingeid küsimusi lihtsalt üksi ahelloendid? Awesome, OK, lahe. [00:03:06] Nüüd me läheme peale midagi lihtsalt veidi keerulisem, kahekordselt seotud nimekirju. Nii et lisaks hoides teele järgmise sõlme, tahame ka jälgida Eelmise sõlme. Ja see võimaldab meil, kui me mingil hetkel meie seotud nimekirja, mitte ainult minna edasi, kuid Samuti itereerima tagasi. Sest nagu me nägime üksikult seotud nimekirja, Kui olime mõned sõlme, ja äkki oleme otsustanud, tegelikult, ma tahan minna sõlme vahetult enne mind, sa pead minema kõik Teel tagasi pea ja itereerima läbi kuni olete leidnud sõlme, mida otsisite. [00:03:35] Nii et see teeb asjad veidi lihtsamaks, sest me oleme püüab itereerima meie seotud nimekirja. Aga see nõuab meilt jälgida ühe rohkem pointer, nii ühe sõlme star. Olgu, nii siin on lõbus osa. Me läheme harjutama rakendamisel kõrvaldama kahekordselt seotud nimekirju. Nii et see on midagi, mis on täiesti aus mäng viktoriini. See näitas üles viimase viktoriine. Nii kindlasti valmis koodi natuke C. Ära unusta, et kõik Sel lõbus PHP ja JavaScript, meil on veel meeles teha C. Nii värskendada, et kui te ei tunne roostes. [00:04:12] Olgu, vaatame, kas me saame seda teha. OK, lahe. Nii et me läheme püüdma muuta otse siin ja loodetavasti see läheb nagu plaanitud. Olgu, keegi ei taha mulle anda soovitus, kuidas ma peaks alustama? Ainult eeldusel, ma olen tegemisel on see, et ma juba on määratletud struktuuri, üks I näitas viimasel leheküljel, viimasel slide. Ja ma ladustamiseks pea minu seotud nimekiri mõned pointer nimetatakse nimekirja. Kas keegi tahtma mind hakkas? [00:04:42] Sihtrühm: Kas teil luua uus sõlme helistada läbi nimekirja? [00:04:45] HANNAH: Awesome, nii me ei kavatse luua uus sõlm roomama läbi nimekirja. Mulle meeldib, et. Ma lihtsalt nimetame seda pointer, kui see on OK. Ja kui see peaks esialgu alustada? [00:04:57] Sihtrühm: ilmselt juht nimekirja. HANNAH: Beautiful. Me tahame alustada eesotsas, mis Ma ütlesin, saab olema salvestatud nimekirja. Awesome. Siiani nii hea. Ja nüüd, meie eesmärk on itereerima läbi nimekirja kuni leiame sõlm väärtus n, et me tahame kustutada. OK? [00:05:13] Nüüd on osa, kus tahame kinnitada, läbi. Kas keegi soovitada viis itereerima kaudu? [00:05:19] Sihtrühm: loop. [00:05:20] HANNAH: loop. Ma armastan seda. Täpsemalt saame proovida samas silmus. OK, ja me teame, et oleme jõudnud lõpus meie nimekirjas kui see, mida? Sihtrühm: Kui osuti on null. HANNAH: Kui osuti on null. Ilus, ma armastan seda. OK, lahe. Nii kahju, kui minu piirikasti traksidega on selline allakukkumist ekraani. Tõime selle tagasi. OK, lahe. Mis edasi? [00:05:48] Nii et me teame, et me tahame kustutada sõlme, mis on väärtus n. Nii saab leida juhul, kui me tegelikult leida meie sõlme. Niisiis, kuidas ma kontrollin seda? Ma tahaks lihtsalt öelda, kui pointer, ja siis, kui ma tahad raha välja pointer, Ma lihtsalt nool n, võrdub n parameeter et me andsime selle funktsiooni sõlme, et me tahame tegelikult kustutada. Küsimused kuni here? Hea küll. OK, nii et nüüd joonistame kiire pilt laual, et seda visualiseerida. [00:06:24] Ütleme, et seal on meie armas sõlme. Ja see on väärtus, ma lihtsalt öelda, neli. Ja see viitab järgmine sõlme meie seotud nimekirja. Ja seal on midagi enne seda. Nii et meil on meie eelmise osutades midagi. Sel juhul juhime tahapoole. OK, lihtsalt luues oma seotud nimekirja siin. Ja meil on nimekiri, mis osutab Selle struktuuri alustada. Ma joonistan ühe rohkem Täiendavalt. OK. Ma punkti sellele edasi. Ja ma rõhutada, et üks tagasi. Oih, vabandust. Jah, sain selle tagasi. Kas see uuesti. OK, seal me läheme. Olgu, sain aru. OK, siin on meie pilt. [00:07:21] OK, nii et me tahame uurida kahte juhtumit. Esimesel juhul on siis, kui sõlme tahame kustutada on algusest peale meie nimekirjas. Ja siis teisel juhul, et me tahame kaaluda, on, kas see on kusagil mujal. Ma saan aru, et see täiesti räpane juhtides kogu oma Kustutamise kuid loodetavasti me proovime selgeks teha mõned koodi. [00:07:40] OK, nii et vaatame, mida rakendatakse juhul kus leidsime meie sõlme, ja see on päris alustada meie seotud nimekirja. Keegi mulle soovitus siin, et mida Ma peaks tegema, et tegelikult eemaldada meie sõlme? See on natuke keeruline. OK? [00:07:56] Sihtrühm: Sa pead võtma node et oleks enne selle ja teha see käsk üks, mis oleks pärast seda, ja võtta sõlme oleks pärast ja teha see viidata sõlme enne seda. HANNAH: Täpselt. OK, nii et see on nii where-- meil kahel juhul. Meil on juhul, kui sõlme, et me otsime on esiküljel nimekirja. OK, ja siis nii, et teil Kirjeldatud viisil, eks? See on kusagil mujal nimekirja. Nii et sa ütlesid, peame vaadata sõlme eelmise, ja teha eelmise sõlme osutavad järgmise sõlme. Ütleme, et me oleme püüab välja võtta viie minu väga räpane joonistus siin. Me tahame veenduda, et Nelja nüüd juhib kuue. Nelja järgmise aspekti kuue. Ja kuue eelmise punkte neli. See on meie eesmärk siin, eks? See on see, mida ma arvan, et sa just ütles seal. [00:08:56] OK, nii et lähme, et esimene tükk. Teeme olla Eelmise pointer eelmise. Nii nelja järgmise tuleks juhtida sellele, mida? Täpselt, sel juhul, kui kuus. Nii et me peaks ütlema pointer kõrval. OK? Hea küll. Nii saab vabaneda sellest kole pilt ja proovige juhtida veidi kenamaks üks. Meil on meie nimekirjas pea siin. Ja mis osutab esimese sõlme Meie seotud nimekirja, mida me ütlesime, on neli. Siin on meie teine ​​sõlm, viis. Ja meie kolmanda sõlme kuus. Just üritanud juhtida täpselt sama pilt, natuke puhtamalt. OK, nii et nelja järgmise Algselt juhib viie. Viis järgmise võrra kuus. Kuus eelmise punkte viis. Ja viis eelmist punkti neli. Nii palju ilusam! OK, lahe. [00:10:04] Nüüd, mida me tegime lihtsalt siin, see koodirida, mis ütleb pointer eelmise Järgmisel, seega mida see tähendab? See tähendab, et kui me vaatame viie Eelmise sõlme, ja see on järgmine peaks nüüd punkt viie järgmise. Nii et sisuliselt, mis see teeb on mis on kustutamisel see nool ja teha see vahele jätta õigus üle viie. Kas on selge? Ma tean, et võib olla natuke pealiskaudsed. Ma näen mõnda head noogutab. See on hea. OK, lahe. Nüüd, mis on järgmine samm? [00:10:39] Olen reset kõrval. Nüüd, mida teised nool ma pean muutma? See üks on siin. Kuus eelmine. Me ei taha kuus eelmise juhtida viis enam. Me tahame, et juhtida kuni nelja. Kas see pilt on mõtet? Nüüd me saame tegelikult võtta viis läbi. Nii lähme, et tükk. Mida ma peaksin tegema, enne kui ma reset kuus eelmise nelja? Kõik ideed on? [00:11:14] Sihtrühm: Tasuta sõlme vahel neid seades selle tühjaks? HANNAH: Cool. Kindlasti on meie lõppeesmärk on saab olema vaba sõlme. Nii et me ei saa seda teha siin. Tasuta pointer. Absoluutselt. Kuid isegi enne seda, olgem lihtsalt-- meie eesmärk õigus siin on määrata kursori järgmise Eelmise võrdne pointer eelmise. Tean, et see muutub kaetud. Okei, Vőta lahe. Kas kõik näevad seda alumine rida? Või on see super väike? [00:11:50] Nii et enne me ellu see rida siin, me tahame veenduda, et pointer kõrval ei ole null. Sest kui osuti kõrval on null, millist viga ma saan kui ma üritan viide nullviida? Sihtrühm: seg süü. HANNAH: seg süü, ilus. OK, nii et kui see pole null, siis on võimalik taastada. Ja meil on kuus punkti jälle neli. Küsimused kuni selle hetkeni? Jah? [00:12:17] Sihtrühm: Oma esimesel kui avaldus, kas sa tähendab, et on nool Järgmise või [kuuldamatu]? HANNAH: Ma mõtlesin pointer nool n. Ühesõnaga, mida ma üritan teha on öelda, aktiivse sõlme, et ma olen iterating üle, aktiivse sõlme, et Otsin, ma salvestamine pointer. Ja ma tahan teada Osuti väärtus, mis antud juhul on n. Ja ma tahan näha, on sõlme Otsin sõlme Mind, mille eesmärk on kustutada? Nii et miks meil siin pointer n. [00:12:47] Sihtrühm: Nii nool läheb n, siis väärtuse määramiseks ja hoidke seda sõlme nimetatakse n? [00:12:55] HANNAH: Nii et see on nagu siis, kui ma olen läbimas see seotud nimekirja ja osutades viis. Kui ma tahan saada, et raha, kui Ma tahan saada, et number, 5 Mida ma pean tegema pointer nool n. Cool? Jah. [00:13:07] Sihtrühm: N muutuja nimi? HANNAH: Jah. Nii et kui me klapp võrra tagasi slide, n on nimi väärtusest sees sõlme meie seotud nimekirja. Ja ma tean, et see võib natuke natuke segane, sest meil on ka kutsuvad asi et me tahame kustutada n. Nii et kui see üks rida pärineb. Jah? [00:13:27] Sihtrühm: Mida on teil [Kuuldamatu], kuidas nad töötavad? Osuti [kuuldamatu]? [00:13:35] HANNAH: Sure. Räägid about-- mis line? Sihtrühm: viimane rida [kuuldamatu]. [00:13:44] HANNAH: Muidugi, OK. Nii vaatame pilti Selleks, et proovida seda seletada. Mul on kahju, et Kaamera oli küsimus saame selgitada pointer noolt pointer eelmise. OK, nii et ütleme me oleme viie ja meie eesmärk on kustutada viis. Nii pointer kõrval, mis nende kolm sõlmede kas see meile annab? See toob meid kuues sõlme, eks? [00:14:10] OK, nii et nüüd me palume kuue eelmise. OK? Ja me ennistamist seda olema võrdne neli, mis juhtus viis eelmist. Ma tean, et see on super raske jälgida. Ma tõesti soovitan joonistada pilte Kui teil tekib küsimus niimoodi. Jah? [00:14:30] Sihtrühm: Kas põhjusel, et meil ei ole [kuuldamatu]? [00:14:37] HANNAH: Täpselt. Nii et küsimus oli, miks me ei vaja vaadata siin? Miks me ei vaja kontrollida, et pointer eelmise ei võrdu tühjaks? Ja see on sellepärast, et me oleme Juba eraldada Juhul kui Osuti alguses. Väga hea küsimus. Midagi muud selles küsimuses? OK, lahe. Nii saab lõpetada see üles. Me oleme peaaegu kohal. [00:14:59] Mis siis, kui see on peas? Mis siis, kui selle asemel, et poistamisyrityksen viis, me tegelikult tahtsime kustutada neli? Mida ma pean tegema? Noh, ma tahan, et taastada oma peas, mida? Shout it out? Sihtrühm: ühe pärast seda. HANNAH: Beautiful. OK, nii et me tahame nimekirja, mida osutavad mis iganes meie pointer järgmise sõlme on. Väga hea. Ja just täielikkuse on sake, oleksime soovite kontrollida, et niikaua kui meie nimekirja ei ole null, niikaua meie loetelu ei ole tühi, siis soovitakse seada meie eelmise võrdne null. Küsimus nii palju? Üks samm eemal algus--? [00:15:53] Sihtrühm: Kas oleks, kui loetelu ei ole võrdne null? [00:15:55] HANNAH: Jah, sa oled täiesti õigus. Mul on nii kahju. Kas see loetelu ei ole võrdne null. Awesome. Proovin tuua see kõik ekraanil. See on selline kukkuda. Vabandame, poisid. Ja last but not least, kõik me peame tegema, on tagasi. OK. See oli palju Täpötäysi tõesti kiiresti. Võtke teine ​​otsima selle üle. Ütle mulle, kui teil on mingeid küsimusi. Jah? [00:16:20] Sihtrühm: Kui nimekirjas on pea, then-- oodake, nevermind. [00:16:26] HANNAH: OK, hea. Nii et see on siis, kui nimekirja eesotsas, meil eemaldage see, et ükskõik, mida me sisestatud. Jah? [00:16:31] Sihtrühm: Kas oskate selgitada Esimene, kui avalduse jälle? Kui kursor n on võrdne n? HANNAH: Sure. Nii et meie eesmärk kogu see funktsioon on kustutada sõlme, mis on väärtus n. Nii et kui me leiame, nagu me oleme iterating läbi meie nimekirjas, sõlme väärtusega n, mis on üks soovime kustutada. Nii kõik kustutamist juhtub sees nii suur, kui avaldus. Kas see on mõistlik? Külm. Jah? [00:16:59] Sihtrühm: Võib-olla sa lihtsalt ei näe seda, aga sa ei vaja ka rida jaoks sirvimisel? HANNAH: Awesome. Toome selle üles natuke, ja me visata, et õige põhjas. Võibolla pardal oleks olen olnud veidi parem mõte. Niisiis, kuidas ma liigun pointer edasi? [00:17:17] Sihtrühm: Pointer võrdub pointer pluss üks. [00:17:20] HANNAH: Beautiful. Nii, mis võimaldab meil jätkata iterating kaudu. OK. Sihtrühm: Kas poleks seal olla muud? HANNAH: Veel üks kord? Sihtrühm: siis ei tekiks muidu pärast suur vana kui avaldus [kuuldamatu]? HANNAH: Milline osa? Mul on kahju. [00:17:38] Sihtrühm: läbipääsusüsteemid, ei tohiks seal olla muud? HANNAH: Sa absoluutselt võiks olla teine. Sest mul on tagasipöördumise õigust seal, sa ei pea muud. Aga jah, hea küsimus. OK, jah? Sihtrühm: Kas me mõtleme pointer mis liigub läbi nimekirja nagu võttes väärtuse Iga sõlme nimekirja? Või peaksime arvan et kui omamoodi välise nimekirja? [00:18:00] HANNAH: kas üks on hea, ma arvan. Kuidas ma kujutan ette, et on Ma ütlen, OK, ma olen pointer. Ja see on minu jaoks. See on minu poolt. Ma lähen viitavad erinevad asju, mida ma tahan kinnitada, läbi. Esiteks, ma lähen juhtida juht nimekirja. Ja see ütleb mulle, ma olen läheb viitavad neli. Ja nii me, olles väljaspool nimekirja, Ma ei viita ükski kõnealustest elementidest. Nii et ma mõtlen ennast pointer. Sihtrühm: Nii et kui kustutad üks neist osadest, kustutate ise, kui nii võib öelda. HANNAH: Täpselt. Nii et sa kustutada asi sa osutades. Nii näiteks, et nägime, kus me oleme poistamisyrityksen viis, kui ma osutades viis, Ma tahan kustutada asi, mida ma olen viidates. Täpselt õige. Jah? Sihtrühm: Kas me oleme hoolitsenud Kui n ei ole nimekirjas? HANNAH: Kui n ei ole nimekirjas? Kõik, mis juhtub, on sul läheb itereerima läbi ja Kerrata läbi ja siis sa lähed saada kursoriga on null, ja siis sa lähed teha. [00:18:48] Sihtrühm: Nii et meil on tagasi midagi? HANNAH: võiksime. Nii, et kui on määratletud käesoleva funktsioon, ma lihtsalt ütlen, et see liigub tühistada sõltumata. Aga te oleksite midagi nagu naasmist täisarv, ja on see tagasi negatiivne 1, kui see ei õnnestu. Midagi sellist. Küsimused with-- jah? Sihtrühm: [kuuldamatu]? HANNAH: Vabandust? Sihtrühm: [kuuldamatu]? HANNAH: Sure. Nii et actual-- Kui oleme kõik teinud seda tööd liikuvate kõik need nooled ümber, kogu meie Eesmärk oli vabaneda sõlme et me otsime. Nii sel juhul, vabastades pointer, kui ma osutades viis, see on nagu kustutades selle keskel sõlm. See on tasuta pointer osa. Mis mõtet? [00:19:29] Sihtrühm: Nii et isegi mõelnud sa ei [kuuldamatu]? [00:19:31] HANNAH: Nii et me eeldada alguses meil oli nimekiri, mis oli already-- nad olid seda kokku panema. Nii et ehitada see nimekiri, nad vist [kuuldamatu]. Külm. Midagi muud on? Jah? [00:19:46] Sihtrühm: Mida teha, kui nimekiri ei võrdu null rida? [Kuuldamatu]? HANNAH: Right here? Sihtrühm: Jah. HANNAH: OK, kõik, mida ma teen on ma lihtsalt hoolitsedes et enne kui ma püüan dereference nimekirja, Enne üritan pääseda eelmise, Ma tahan veenduda, et see ei ole null nii et ma ei saa seg süü. Külm. [00:20:08] OK, ma tean, et see oli üsna palju läbi saama. Nii et see slide on teinud teile kättesaadavaks. Nii saab läbida seda üksikasjalikumalt. Jah? [00:20:17] Sihtrühm: Miks nimekirja [kuuldamatu]? HANNAH: Sure. Nii nimekirja tõesti osutab see element siin, Esimene element nimekirjas. Seega ei saa eelmise. Jah? [00:20:31] Sihtrühm: Kas pointer punkti samale aadressile mälu? Kas see viitavad samale aadress mällu sõlme et see osutab? [00:20:40] HANNAH: Jah, see juhib Käesoleva sõlme mälus. [00:20:43] Sihtrühm: Õigus, nii kui sa [kuuldamatu]? [00:20:47] HANNAH: Mõnes mõttes jah. OK. Olgu, liigume koos selle. Ja kui sul on veel küsimusi, kinni umbes aasta lõpus, ja me saame selle uuesti läbi. OK, lahe. Nüüd saame edasi liikuda hash tabeleid, katseid ja puud, mis sul on super tuttav p-set viis, speller. [00:21:04] Nii hash tabelis on lihtsalt massiivi üksikult ahelloendid või kahekordselt ahelloendid tulevad välja sellest. Nii et meil on mingisugune on assotsiatiivne massiiv. Ja kuidas me teame, mis nende massiivid ämbrid sattuda, me kasutame hash funktsiooni. Nii sel juhul, kas keegi guess what hash funktsiooni oleks vaid põhinevad mõned sisend ja väljund? [00:21:31] Sihtrühm: Kiri arv tähestikku. HANNAH: Täpselt. See lihtsalt paneb neid tähestikulises järjekorras. Kõik, mis algab Pannakse esimene ämber. Kõik koos B pannakse Teine ämber, nii edasi ja nii edasi. Awesome, OK. Ja hash funktsiooni on igal funktsioon, mis võtab sõna ja ütleb teile, mida Sajab see kuulub. Nii et mis kande meie massiivi see kuulub. [00:21:55] Nii et iga kord, kui ma annaksin oma räsifunktsioon sõna see peaks mulle öelda sama pane iga kord. Nii et kui me kasutame hash funktsiooni Eelmise slaidi kus me sorteerimine Esimene täht, iga kord kui ma annaksin oma hash funktsiooni "apple" see peaks alati andma mulle tagasi 0. Nii et kui mul on õun panna minu hash tabelit, kui ma annan "apple" minu hash funktsiooni see peaks ütlema, mine pane see ämber 0. Kui ma otsin apple minu hash tabelis ja ma ütlen, kus võiks apple live, küsite teie hash funktsiooni. Ja ta ütleb, minge kopp 0. Kõik on korras? Küsimused koos räsifunktsioonid? Awesome. [00:22:34] Siin on veidi rohkem üksikasjalik selgitus mida hash funktsiooni tunduda. Hea küll. Nüüd probleem hash funktsioonid on ideaalses maailmas, me oleks vaid üks asi iga ämber. Aga tegelikult pole mitte ainult üks sõna mis algab A. Seal ei ole ainult üks sõna, mis algab B. Nii sel juhul, kui me äkki saan "marja" ja me tahame panna meie hash tabelit, ja me näeme, oh ei, banaan on juba olemas, mida me teeme? [00:23:03] Noh, meil on kaks võimalust. Esimene võimalus on lineaarne katsetamine, mis tähendab lihtsalt minna leida Järgmise tühi ämber. Mine leida järgmise tühja massiivi sisenemist. Ja lihtsalt panna "marja" seal. Nii et ma tean, et see peaks minna banaani kopp üks. Aga pane see kopp kolm, sest kopp kolm on tühi. Teine võimalus on ilmselt mida rakendada Teie p-set, kuhu oli eraldi ühendamine. Nii iga oma ämbrid, iga oma massiivi elemente, ei ole üksnes ühe sõna, kuid tegelikult omab viit sõnu. Nii et kui teil on olnud banaani oma hash tabelis ja äkki tahtis lisada marja-, pole probleemi. Lihtsalt lisada marja lõpuni või Alguses oma seotud nimekirja. OK, awesome. Küsimused koos hash tabelid, enne kui me minna? [00:23:58] Hea küll. Puud ja proovib. OK, nii et see oli veel üks võimalus rakendamise sõnastik. Sa oleks võinud proovida. Nii et see on eriline puu käitub nagu mitmetasandiline hash tabelis. Nii näete pildil kui teil on massiivi juhib kamp massiivid Sel hetkel kamp massiivid Sel hetkel kamp massiivid. Ja me näeme täpselt, et näeksid tulevikus slide. Ja üldisemalt tree on lihtsalt mingi andmestruktuuri kus on andmed korraldati mõnes hierarhia. Nii et kui me nägime me oleme mingisugune arusaam on tipptasemel, järgmisele tasandile, järgmisele tasandile, järgmisele tasandile. Nii et see on tõenäoliselt kõige selgem mõned konkreetsed näited. Nii et siin on meie puu. Te näete, et see on teatud tasemeni et hakkame koos, et juurtipust üks. Ja me võime minna läbi meie puu. [00:24:50] Kahendpuud teatud tüüpi puu. Ja ainus spetsifikatsioon jaoks Binääripuu on, et iga sõlm on maksimaalselt kahe lehed. Nii et te ei kavatse näe sõlmed on kolm või neli või mõne muu lehtede hulk. Ja siis veelgi täpsem on kahendotsingupuu kus iga sõlme vasakul sõlme läheb on väärtus väiksem. Ja iga väärtus õigus saab olema suurem. Nii et kui sa näed 44 on meie juure, vasakule, 11, 22, ja 33 kõik vähem kui meie juure. Ja paremal on kõik numbrid bigger-- 66, 55, ja 77. Ja selle pakkumisega kehtib igal tasandil puu. [00:25:37] Nii et kui me minna 22, 11, ja 33, veel 11 on väiksem kui 22 ja 33 on suurem kui 22. Ja see lihtsustab otsing sest kui me otsime number, me teame täpselt, mis filiaali järgida alla. Nii et see peaks teile meelde tuletada natuke Kahendotsingupuu. Jah? [00:25:56] Sihtrühm: Nii et kui sa oled kirjeldades binaarne, sa ütlesid, et see on kõige rohkem kahe lehed? HANNAH: Mm-hm. Sihtrühm: Kas see on vähem? HANNAH: Jah. Ütleme näiteks, siis ei olnud isegi mitmeid asju ja sa ei saa täita kõik teie lehed, on see hea, kui üks on üks. OK? Awesome. Muid küsimusi puud? OK. [00:26:16] Tagasi meie üritab nagu ma rääkisin umbes natuke varem, kuidas meil need mitmetasandiline massiivid. Nii et kui hakkame ülaosas. Ja meil on võimalik jälgida kõiki antud sõna alla. Ütleme, et me tahame otsima Turing. Alustame kell T, järgige selle alla array, mis sisaldab U, ja järgige seda all, kuni me jõuda see väike delta, mis ütleb meile, et jah, olete leidnud sõna. Selge on üritab? Midagi sinna minema? Jah? Sihtrühm: Kas sümbol delta on hõivata ruumi sees proovida? HANNAH: Jah, nii see ei ole pruugi isegi pead olema delta. Aga me peame kuidagi öelda meie computer-- kahju, nii et me teame, et TUR ei ole sõna. Sest oletame, et meil ei olnud Selle mõiste delta, selle mõiste õnnitlused, olete leidnud sõna, see läheks läbi ja kinnitada, T-U-R, ja siis öelda, awesome, ma leidsin selle! See peab olema sõna. Aga see on tõesti ei ole. Me tahame kogu Turing olla sõna. Nii et me peame midagi on lõpuks, mis ütleb, õnnitlused, olete leidnud õigustatud sõna. Sihtrühm: Nii et kui teil on olnud nagu 26 tähte tähestikus, Te tegelikult on 27 võtmeid proovida? [00:27:24] HANNAH: Awesome, jah. Seega tegelikult ma arvan, et toimub järgmise slaidi. Ta-da! Kus kui teil on sõlme oma proovida, sa oled läheb on 27 last asemel 26. Kõik küsimused on? Jah? Sihtrühm: Miks üritab alustada nii palju ruumi [kuuldamatu] lähete? Miks on nii, loetakse [kuuldamatu]? HANNAH: Sure. Lähme tagasi. Küsimus on selles, miks on üritab nii palju suurem kui midagi hash tabelis. Nii iga nimetatud tasemed, isegi kui nad ei tõmmata, sul olema kõik 26 tähemärki. Ja sel põhjusel, et te ei saa öelda, oh, kuid nagu Turing, I ei pea olema ühegi nimetatud samu asju tasandil U. Noh, kui äkki sa tahtsid lisada midagi, mis oli, nagu T-H, sa pead olema võime lisada, et sõna. Nii iga üksik täht, sa lähed on on kamp massiivid tulevad välja sellest. Nii et näete, kuidas ta tahaks saada tõesti suur, väga kiiresti. Muid küsimusi? Hea küll. Jah? [00:28:29] Sihtrühm: Millal proovib kiiremini kui hash tabeleid? [00:28:33] HANNAH: Millal proovib kiiremini kui hash tabeleid? Nii et kui teil oli tõesti halb hash funktsiooni. Ütleme, et ma olin nagu, siin on sinu hash funktsiooni. Ükskõik mis sõna sa annad mulle, ma olen alati läheb pane see massiiv kanne 0. Ja nii me lõpuks lihtsalt paneb kõik üks suur pikk seotud nimekirja. Ja nii lookup aega võtaks halvimal n, kas see on päris lõpus meie nimekirja. Mis proovida, me peame lihtsalt itereerima kirjade kaudu sõna. Nii et isegi kui lisasime kamp rohkem sõnu meie proovida, see ei vii meid enam leida eriti sõna. [00:29:09] Kõik me peame tegema, on ette Näiteks sellisel juhul oletame, et me otsime zoom, me lihtsalt peame Käi Z-O-O-M, neli tähte. Nii et lihtsalt pikkus sõna zoom. See ei ole tähtis, kui palju rohkem sõnu me paneme selle proovida. Me ei saa alati seda neis neljas etapis. Awesome. Jah? [00:29:32] Sihtrühm: Nii [kuuldamatu] on massiiv, eks? [00:29:34] HANNAH: Mm-hm. Sihtrühm: Kui sa oled otsin [kuuldamatu] sa pead läbi minema Sinu massiivi leida [kuuldamatu]? HANNAH: Sure. Sihtrühm: Kas see ei võta rohkem aega? HANNAH: Kui ma lähen öelda, et minu massiiv on alati saab olema A, B, C, D, E, F, G, blah blah blah, nii et kui ma alati tean, et see samas täpses järjekorras, kui ma alati tean, et see tähestiku järjekorras Võin ainult öelda, O on number nii ja nii tähestikus. Just hüpata selle koha jaoks. Sest mäletan, koos massiivid, suudame mis tahes osa, et massiivi pidevas ajal, kui me teame, kus me otsime. Jah? [00:30:09] Sihtrühm: On eelmise lükake [kuuldamatu] 27, kuid 26 esimene. [00:30:14] HANNAH: Vabandust? [00:30:15] Sihtrühm: ei ole esimene üks 0, seega kas ei oleks 26? [00:30:18] HANNAH: Muidugi, nii et kui me ütleme, 27, mis on läheb meile indeksite 0 kuni 26. Aga kui sa tegelikult loota need välja, et see saab olema 27. Hea küsimus. Veel midagi? Jah? [00:30:31] Sihtrühm: Nii on proovib aeglasem kui hash tabeleid? [00:30:34] HANNAH: Püüab ei kavatse olla, in Teoreetiliselt kiirem kui hash tabeleid kuid võtab rohkem mälu. Jah? Sihtrühm: [kuuldamatu]? [00:30:45] HANNAH: Vabandust, ma ei kuule sind. Sihtrühm: [kuuldamatu]. 0-25 annab sulle 26. [00:30:54] HANNAH: 0-25 oleks teile 26, eks. [00:30:56] Sihtrühm: Ja siis [kuuldamatu]. HANNAH: Right. Nii arvu me täpsustatakse on mitmeid asju meie massiivi. Nii et kui meil on 27, siis on annan meil 0 läbi 26, mis annab meile ruumi, sel juhul Ma ei sh ülakoma. Nii et me lähme 0 kuni 25 on esimese 26 tähestiku tähti, või kõik 26 tähestiku tähti. Ja siis, et viimase asi sisenemisel 26, on saab olema kontrolli kaubamärgi või delta. Veel midagi? Awesome. Kaotasin oma ruumi. OK, lahe. [00:31:31] Nii et me juba puudutanud seda. Aga suur kompromiss vahel üritab ja hash tabeleid on see, et katseid nähakse Teoreetiliselt pidev otsida korda, kuid kasutada kogu palju mälu. Olgu, nüüd on meil veidi vähem keerulisi struktuure, ja me teha koos C, ja me liikuda paremale mööda. [00:31:49] Nii korstnad, nägime seda loeng, kus te on midagi virna, kus Viimane asi, mida sa paned korstnat läheb olla esimene asi, mida sa startida. Nii et see, mis tegelikult määrab stack on see, et viimane asi, mida sa panna saab olema esimene asi, mida startida. Ja terminoloogia, mida me kasutame kui me ei kavatse panna midagi, kui me ei kavatse midagi lisada Meie korstna, kutsume me seda lükates. Ja kui me võtame midagi off, me nimetame seda popping. Ja kui me läheme rakendada korstna, me tuleb kindlasti jälgida nii suuruse ja võimsusega. Nii koguarvust elemendid saame hoida ja praegune arv elemente et meie valduses. [00:32:27] Ja väga sarnaselt, meil on järjekorrad. Ja ainus erinevus on selle asemel korstnad, me ütlesime viimane asi, me panna on esimene asi, mida me startida. Nii järjekorrad Esimene asi, mida me esitame läheb Esimene asi, mida me välja võtta. Nii et see on nagu kui sa oled tegelikult vooder üles poodi ja sa oled aidatakse, siis esimene inimene line peaks olema esimene inimene, kes on aidanud. Nii et oleks järjekorda. [00:32:52] Seega on meil vaja jälgida suurus, võimsus, ja pea, sest me oleme aega võtab kõik off ees loetelu asemel tagasi. Küsimused, mis? Iga C küsimused, mis on häirib teid? Andmestruktuurid, ükskõik mis lõbusaid asju? Olgu, lahe. Nii et ma selle üle, et Alison on hüpata mõned programmeerimine. [00:33:14] ALISON: Oh, me näeme. Me näeme, kui hästi ma teen siin. OK, ma lähen, et proovida ja sõita läbi selle kraami, poisid. Hannah läks väga in sügavus on kõik tema asjad. Ma lähen püüan anda Teile kiire lööklaine ülevaade nii et saame Davin kõik lõbus JavaScript ja julgeoleku asju et äkki sa tegelikult tahad rohkem kuulda. [00:33:33] OK, kui Hannah ütles, kui teil on küsimusi, Ma lähen liiga kiiresti, siis palun andke teada. Ma vastan küsimustele vastavalt vajadusele. Nii alustada, me ei kavatse alustada ilmselt üks esimesi asju sa õppisid koos web programmeerimine, õigused. Nii chmod, kutid oleks pidanud meistrite juures see kõik veebis programmeerimine, et olete teinud viimasel ajal. See on põhimõtteliselt lihtsalt käsku mis muudab load või kasutusõigused Meie failisüsteemi objektide kohta. Muidugi, tegelikult vaadake neid, kui sa oled ilma igasuguste probleemideta nende ajal teie probleem komplekti, mida olete kasutanud ls -l, mis on pikk, saada vaade selline nagu see, kus te tegelikult näha kõike Faili kasutusõiguse. [00:34:16] Ja tõesti, me lihtsalt läheb minema läbi päris kiiresti lihtsalt ilus palju, mida kõik need tähendavad. Nii oleme päeva siin, mis lihtsalt seisab kataloogi. Ilmselt just siin näeme rwx, mis on loetav, kirjutatav ja täidetavad. Need võivad samuti olla esindatud bitti, mida me võtame arvesse järgmisel lehel. Nii iga triaad, et me nägime siin, nii et see on kolm kolmikut. Oleme rwx, r midagi x ja r midagi x selle esimese faili. See on see üldine struktuur. [00:34:49] Nii et meil on mõned kataloog. Meil on mõned grupid Nende õigused. Mõned grupp, mis on need õigused, ja maailmas, mis on loata. Sa ei mõtle neid nagu kolmkõla. Sa ei mõtle neid kolm bitti. Nii nad oskavad väärtused kuskil 0 kuni 7, mistõttu mõnikord meil oli sa chmod 600 asemel chmod rw iganes. Me võtame arvesse näiteks seal. Aga põhimõtteliselt, sa ei mõtle Nende kas lihtsalt rwx, või sa ei mõtle neid mõned number, kui see esimene siin esindab mitmeid vahel 0 ja 7, seda teine esindab mitmeid vahel 0 ja 7, ning kolmas tähistab number 0 kuni 7, OK? [00:35:38] r väärtus on 4. w väärtus on 2 ja x väärtus on 1, mistõttu see luba siin oleks chmod 700. Kuna selles asjas, siis ütleb, et me on esimene natuke seal on keerata. Nii et meil on 4 lugemiseks. Teine natuke on keerata edasi w, mis on 2, nii et nüüd on meil 6. Ja kolmas bitt keerata x, mis on 1, seega saame seitse. Ja muidugi meie grupi ja meie maailmas on iga 0. Nii on see ka samaväärne chmod 700. Ja ma tahaksin kindlasti proovida mõista kaardistamise vahel. Ma ei ole kindel, kas see on tulla viktoriini enne, kuid see oleks küsimus, mida ma küsida. [00:36:18] Natuke läheb veel sügavamale chmod siin, siin on väga üldine struktuuri chmod kõne. Nii et loomulikult oleme chmod siin. Viiteid, mis viitab see on Kes me oleme andes nende õigusi või kes me võttes neid load ära. Nii et meil on siin õigused, nagu me oleme teile chmod pluss x, nagu me näeme varsti. tähendab lihtsalt anda need konkreetsed õigused kõigile. Anna neile kõigile. Nii võib väga hästi olla u pluss x või g pluss x või o pluss x või mitu sätestatut. Nii et esimene osa on alati saab olema viiteid. Kes me oleme andes neid õigusi, või kes me võttes neid eemal? [00:37:03] Teine on operaator. Nii kutid on kõige rohkem tegelenud pluss. See annab õigusi kes sa oled, mis annab neile, arvestades miinus loogiliselt eemaldab need. Nii midagi liiga kohutav seal. Ja siis režiimid on see, mida me rääkisime koos lugemine, kirjutamine, või täidesaatva. Nii pluss x tähendab anda käivitatava õigused kõigile. Ja seejärel, muidugi, mille konkreetse faili või kataloogi. OK? Igaüks hea chmod? Mitte liiga halb? [00:37:37] OK, nii HTML, keegi teist on piisavalt vana mina-- MySpace vanus? Saatsin selle minu jagu, ja sõna otseses mõttes pool inimest vaatas mind nagu ma olin hull. Ja ma olin nagu, poisid, me ei ole nii vana. Tule nüüd. Nii HyperText Markup Language, see on ausalt lihtsalt viis, kuidas saate näidata teatud asju veebis. Nii et see on märgistuskeel. See ei ole skript keel. Ei ole loogiline ta. On lihtsalt muuta tee midagi ekraanile. OK, nii et on oluline vahet teha. Seda peetakse märkekeeles ei skript keel. [00:38:12] Nii et siin on meil HTML teeke. Sellel slaidil on ilmselt kõige need, mida tuleb tuttav ja tõesti rahul. Nii et ilmselt on meil Meie HTML tag, mis määrab, et kõik Nende kahe on HTML. Meil on mõned link, mis loomulikult annan teile link välisele veebilehele. Mõned pealkiri, mis meie pea siin. Ja meil on meie keha h1, mis on kaudu, nii et teen selle kena ja julge ja suuremaks. Ja siis on meil mõned p, mis on lõikes. Sa peaksid ilmselt teadma, ja oskama asju nagu kuidas sa lisada pildi, on on muid päise klassi? Ma oleks kindlasti rahul div. Nii et need on enamus silte et siis peaks olema tuttav. Aga muidugi, nagu kõik muugi CS 50, loetelu ei ole ammendav. Seega veenduge, et värskendada seda. [00:39:08] CSS, nii CSS, kui keegi teile vaadata minu seminar kaks nädalat tagasi, on tõesti ainult viis stiilis oma veebilehele? OK, nii et meil on mõned märgistuskeel. HTML, mis hoolitseb vaid teksti ja kus võiks olla lehel. Aga CSS on tõesti see, mida teeb see päris. Sa oleks võinud need oma HTML faile, kuid kui me räägime hiljem Ma olen päris kindel, et see võiks olla järgmine slaid, see on tavaks, ja tegelikult Praktikas, et me tõesti julgustada, teil hoida neid lahutada, kui me rääkida MVC ja et kogu paradigma. See on tõesti, mida see toidab. [00:39:42] Nii CSS on lihtsalt võimalus teha asju vaadata päris. Asju siin, nagu keha ja #title ja .info, need on nn lülitid ja mida nad on need valida kindlaid asju jooksul oma HTML faili ja kohaldada sõltumata stiil, olenemata omamoodi asju, mida sa tahad, selle konkreetse osa veebi lehel. Nii et siin on meil taustavärvi ja värv ja fondipere mis kuramuse rakendada kõik, mis on organismile. Nii et kui me vaatasime siia tagasi, siis ei kohaldata pealkiri. Oleks kohaldatakse üksnes sellega, mis on Nende keha valijad, OK? [00:40:22] Mis pealkiri siin, see on saab olema sama asi, teksti värvi on sinine on ainult kavatse mõjutada, mis on sees title valijad. Nagu ka info siin Teksti on roosa, olenemata tema info, mis on siinsamas. Nii et ainus asi, mis oleks roosa lehel on kuupäev, esmaspäev, november 17, 2014. OK, nii et CSS on lihtsalt võimalus on rohkem kontrolli over-- jah? [00:40:48] Sihtrühm: Miks sa pead kasutada hash tiitliga? [00:40:51] HANNAH: Järgmine slaid, luban! Me saame seal. Nii et see on põhjus, miks me peame kasutama hash. Nii valijad võtta kolm peamist vorme, mis me räägime kutid kohta. Ma FTe tahad rohkem, seal on palju seal. Seal on suur CSS dokumendid. Seal on silt, mis on seotud lihtsalt oma tavaline silte HTML. Nii h1, p, div, H2, seda sorti asju. Ja me saame nimetada need nagu on. Nii nagu me näeme siin keha, see on normaalne tag. Nii saame lihtsalt panna keha kui me räägime meie CSS faili. [00:41:26] Mis pealkiri, kogu põhjus, miks me on see hash on meil, mida on loetakse ID. Nii ID peaks olema alati unikaalne oma HTML-lehe nii et kui sa oled sellele viitavad, siis tean, et sa oled ainult viidates ühe konkreetse asja. Nii et kui siin, meie h1 siin, CS 50 läbivaatamise istungil meil on id pealkiri. Nii et lihtsalt viidata, et tükike meie HTML, teeme hash pealkiri. Just tavapäraselt ID on määratud koos hash nende ees. Samamoodi näeme info siin klassis. Ja nii klassi CSS on määratud dot klassi või dot iganes see klass on. Nii et kui siin, see on info. [00:42:10] Nii et ma seda tagasi võtta. Mõlemad oleks roosa meie CSS siin sest nad mõlemad on klass info. Ja meie CSS faili, oleme määratud et midagi klassi info peab olema roosa. Kas on mõtet? Jah? [00:42:27] Sihtrühm: Kui sa olid teha kõik organismis valge, ja siis te üritate teha midagi sees sinine, kas see põhjustada probleeme? [00:42:34] HANNAH: Nii CSS on kaskaadlaadistiku. Mida iganes on poole alt ülimuslik. Nii et kui sa midagi keha, ja teete kõike valge, ja siis hiljem muudad pealkirja või muudad teksti keha, see kirjutab, et. Nii midagi poole alt ülimuslik. Jah? [00:42:56] Sihtrühm: Ja ID on unikaalne, kuid klassidel võivad olla rohkem? HANNAH: Right. Nii tähised peavad olema kordumatu ning Klassid võivad viitavad nii palju asju kui soovite. Muid küsimusi? Jah. [00:43:09] Sihtrühm: [kuuldamatu]. Ma ei tea, kas mis muudab erinevus. HANNAH: Mul on kahju, milline oli küsimus? Sihtrühm: Seal on väike "F" ja kapitali "F." HANNAH: Nii vahe vahel väike "f" ja kapitali "F" ei tohiks midagi muuta. Nii "f" on 15 kas nii. Cool, midagi muud? Igaüks hea, CSS? Jah? [00:43:30] Sihtrühm: Sorry. Kas teil on klassi ja ID? [00:43:35] HANNAH: Jah, saate küll. Asjad võivad olla nii klassi ja ID. Ja ma väga soovitada katsetamise ise. CSS õpid paremini lihtsalt muutes midagi, väga lihtne veebileht, koostamisel mõned CSS ja lihtsalt näha, kuidas nad suhtlevad. Ja saate omandada väga hea, intuitiivne tunne, kuidas see toimib. [00:43:56] OK, kõik hea CSS? Sa oled kõik kavatse teha ilus veebilehed CSS nüüd. OK, heade tavade, vaid asjad, mida meeles pidada, asjad selle-- see on põhjus, miks me dokki sa disainer ja tühi-tähi. Nii sulgeda kõik oma HTML teeke. Nii et kui teil on avatud keha, seal peaks olema tihe keha. Kui teil on avatud punkt, seal peaks olema tihe lõikes. Kontrollige, et näha oma lehele kinnitab. Kutid peaks olema väga tuttav Selle p-seatud seitse CS 50 rahandus koos W3 validator. Ja nagu ma enne ütlesin, üks meie suur paradigmad on eraldades oma stiili CSS oma juurdehindlus, mis on HTML. Ja siis muidugi on meil see suur XKCD siin. Jee, Comic Relief! [00:44:38] OK, TCP / IP. Nende vahel ja HTTP, Põhimõtteliselt on nad mõlemad protokolle. Nii võid lihtsalt mõelda neist reeglistik mis reguleerivad, kuidas asjad liikuda kogu internet. Nii Käigukang protokolli või Internet Protocol, on lihtsalt võimalus veenduda, et andmeid saab, kuhu ta läheb ja et me ei tea, kui me kunagi puuduvad andmed. Nii et kui te mehed arvavad tagasi loengu Paar nädalat tagasi David kus meil oli neli ümbrikud, nad kõik olid nummerdatud nagu üks neljast, kaks neljast kolm neljast neli neli, see on lihtsalt reeglistik. Me ütlesime, OK, kui me oleme saates rohkem kui üks pakett, me number see, mida number on ja kui palju kokku, et kasutaja peaks saama. [00:45:19] Ja see on lihtsalt ütlen kes võtab andmeid kas nad on saanud kõik, või kui midagi kadus mööda teed. Ja neil on vaja küsida seda uuesti. See on tõesti ainult reeglistik. See, kuidas sa ei mõtle seda, OK? Ja ka see määrab port, mis kutid can-- Tean ajal loeng, neil oli kogu sadamate nimekirja. Aga meil ei ole neid siin praegu. [00:45:41] Nii hüperteksti edastamise protokoll on jällegi see on teine ​​protokoll. Nii et see on veel eeskirjad mis reguleerivad, sel juhul kuidas hüperteksti üle. Nii see lihtsalt võimaldab brauserid rääkida web servereid. Ja nagu me siin ütles, et see on nagu inimese tagasisidega. See on lihtsalt nii, et reguleerida kuidas veebiserver läheb suhelda oma brauserit. Ja meil on vaid paar näidet. Meil on mõned taotlused siin kus GET meetodiga. Meil on HTTP 1.1, mis on protokolli versioon meile. Ja siis, host, mis on see, mida me tegelikult püüab kasutada. Ja siis, kui sa näed siin oleme saaksin vastuse selle 200 OK, kui meie HTTP vastust koodiga. Meil on suur nimekiri Ma lähen tõmba ühes sekundis et kutid peaks olema tuttav. Ja meil on selle sisu tüübi tekst / HTML, lihtsalt ütleb, millist tüüpi andmeid me saamist serverist, OK? See host ja selle sisu tüübi on osa HTTP päised. Sul võib olla nii vähe või nii vähe kui vajalikud kontekstis mida olete tegelevad. Mõnikord on teil palju tulevat infot oma server. Võib-olla nad taotlevad palju Teabe kasutaja. See varieerub sõltuvalt kontekstist. Kui te vaatate CS 50 Study, seal on palju rohkem seda. Aga meil on palju, et saada läbi, nii et ma lähen et lase käia, kui see on OK teiega? Külm. Hoia edasi. Ma saan kindlasti, et terve nimekirja of-- huh! Ma ei tea, miks see nii on kogu tee siia. Ma arvasin, et sõna otseses mõttes kolis see, kui ma olin sitting-- [00:47:15] DAVIN: Kas sa tahad seda õpetada? Või sa tahad, et seda õpetada? [00:47:17] Sihtrühm: Ma arvasin, et me võiksime lihtsalt näidata neid alustada. Ma mõtlen, et sa ei saa minna neid veelgi, aga ma arvasin, et see mõttekam, sest ma lihtsalt räägime HTTP staatused. Nii et siin on kogu nimekirja. Ma arvan, mida juhtub on Davin läheb minema neid hiljem. Aga seal on terve nimekiri, eelvaate maitse tulla. OK, me ei kavatse blow-- see läheb olema PHP kiirkursuse miski muu. [00:47:41] Nii PHP, hüperteksti preprotsessoris see on rekursiivne backronym, mis tähendab, et see sai nimeks midagi muud. Ja siis nad olid nagu see ei ole tegelikult mõtet. Nii nad lihtsalt nimega it-- ja see oli akronüüm, et nad just seda PHP hyper eeltöötluse, mis lihtsalt ei ole mõtet. Fun lugu. See on programmeerimiskeelt. Nii palju kui ma rõhutada, et HTML ei ole programmeerimiskeel, see on märgistuskeel, PHP on programmeerimiskeelt. Kuidas sa tead, et see on sest seal on loogika. On conditionals. Meil on muutujad, arvestades, et me pole ühtegi neist asjadest HTML. [00:48:12] Olgu siis meil on see veidi natuke siin see on nagu maitse PHP. Nii põhitõdesid, muutujate nimed Alustame dollari märk. Paljud inimesed meeldib. Tuletab meile raha. See kõik on tore. Me kõik tahame PHP. Nii et me ei täpsusta muutuja tüüp enam. See määratakse töötamise ajal. Tõlk olema, oh, me lihtsalt joosta, ja olenevalt kontekstist, me näeme, milliseid tüüpe need muutujad olema. Ei ole peamine ülesanne. Asjad lihtsalt joosta. Kutid oma impordi- oma viimase p-set, märkad seda. Seal ei olnud tõesti põhiülesanne. Sa lihtsalt kirjutasin, mida sa tahtsid juhtuda. Ja see lihtsalt selline juhtus. Nii et PHP jaoks. [00:48:56] Massiivid on väga sarnased. Meil on veel see sulg. Siin on mõned muutuja nimetatakse arr, ja see on võrdne mina-- meil on normaalne sulg märke. Ja meil on mõned põhiväärtus. Ja suur erinevus vahel C ja PHP massiivid on see, et me ei ole seda associate-- seostab väärtused võtmed. Nii et selle asemel, et lihtsalt võttes massiivi indekseeritud mitmeid või positsiooni selle elemendi massiivi, me saame tegelikult seostab seda võtit. Kui me ei saa öelda, OK, ma tahan iganes väärtus on seotud puu. Ja võib-olla on meil puu läks banaan. Nii ta tahaks tagasi banaan meile. [00:49:41] Aga põhimõtteliselt, kõige võimas asi see on see, et kui te poisid mäletavad demo on loeng, kus me põhiliselt kirjutasin speller PHP, ja see was-- lookup oli tõesti lihtsalt meeldib, see võti olemas? See on tõesti selline võimsus seda. Sa ei pea itereerima läbi oma valikut. Sa ei pea teadma mida ruumi see on. See võiks olla aasta lõpus või alguses. Niikaua kui sa tead võti mis on seotud raha, PHP lihtsalt sülitada, et väärtus õigus tagasi saada sind, OK? [00:50:09] Ja siis on meil ka lihtsalt on lihtsalt sellepärast, et me võib olla põhiväärtus paari ei tähenda, sa pead. Võite ka lihtsalt luua tavaline massiiv nagu siin, allosas, kus see on üks, kaks, kolm, neli. Need on meie väärtused. Ja tegelikult, nende juurde on indeksid. Nii klahvi üks null. Võtme kahe oleks üks. Nii edasi ja nii edasi, välja arvatud juhul, Te olete ise määrata võtme, siis võiks eeldada, et väärtus on lihtsalt oma indeks. Kas on mõtet kõigile? Ühtegi küsimust ei ole? Awesome. [00:50:38] OK, foreach on viis itereerima läbi oma massiivid. Nii et meil on siin midagi, lihtsalt üldine struktuur. Nii foreach nimi Meie massiiv, kui mis tahes soovite helistada iga element oma massiiv, ja me saame teha midagi et element või selle väärtust. Nii et meil on näiteks siin. Meil on assotsiatiivne massiivi Nende kahe kirje baariga olla seotud foo ja qux olla seotud baz. Nii võtmed on suva ja baz. Väärtused on baar ja qux. Nii foreach on meil hulgaliselt siin, nagu põhiväärtus paari. See võimaldab meil juurdepääs nii võti ja väärtus. Võib-olla sa lihtsalt tahad väärtus, mille puhul võid lihtsalt meeldib arr kui $ väärtus, ja siis lihtsalt tutvumise väärtus kui itereerima kaudu. Aga võib-olla mingil Seetõttu soovite võti, mistõttu Valisin Selle näite asemel. Nii saab tegelikult manipuleerida ja väärtuse antud juhul. OK? Küsimus? [00:51:41] Sihtrühm: Kui sa tahad lihtsalt manipuleerida võti, mis mida sa pead tegema foreach-- [00:51:45] ALISON: Right. Nii et kui sa tahad manipuleerida lihtsalt klahvi siis oleks siiski vaja süntaks, sest kui sa lihtsalt on arr midagi, üks asi, see on läheb endale soovid väärtust, mitte võtit. Nii et kui te olete kunagi lihtsalt nagu arr nii, äkki see on nagu $ element, see saab eeldada, et sa seda küsid vaid raha igas punktis. Kui teil selgesõnaliselt soovi midagi võtmega, isegi kui sa ei kavatse midagi teha raha, sa pead selle struktuuri et meil on siin kuhu selgesõnaliselt küsida nii võti ja väärtus. Hea küsimus. Veel midagi? Külm. [00:52:27] Olgu, PHP ja HTML. Oh, me oleme tagasi p-pani seitse uuesti. Nii et see peaks vaatama natuke tuttav. Nii et see on mõned lihtsad HTML kujul et on mingi sisend nimi tere. Ja me näeme meil on meetod GET. Ja kui me mäletame meie p-set, kui see vorm esitatakse, ta saadab massiivi nimega $ _GET, mis on kõik need sisendid või muutujate kujul, mis peaks olema manipuleerida meie PHP. Nii sel juhul alla paneks oma nime. Nad väidavad seda. Ja me näeme, et me saaksin massiivi siin. Meil on GET massiivi. Ja me tutvumise nimi. [00:53:11] Nii ütleb, et OK, anna mulle väärtus, mis on seotud nime, nimi on võti siin. Ja mis seob otseselt sellele, mida me ütlesime meie panus nimi on. Nii et see andis teile oluline, millises saab olema sinu rida siin. Kas on mõtet kõigile? Jah? [00:53:32] Sihtrühm: Kas nime SAADA suunata lilla joon [kuuldamatu]? [00:53:36] ALISON: See viitab sellele siin. Nii selles valdkonnas siinsamas, see viitab sellele nimi. Nii et see oleks võinud oma nime nagu telefoninumber, või mis iganes. See nimi tegelikult ütleb, mida sa helistad selles valdkonnas? Kuidas sul läheb viitavad selles valdkonnas? Ja see nimi on tegelikult meeldib, me oleme öeldes selles valdkonnas on nn nime. See, kuidas me kavatseme seda kasutada. [00:53:59] Sihtrühm: Nii see välja näeb, input nimi võrdub Bob, and-- [00:54:02] ALISON: Õigus, siis saaksin Bob seal. Täpselt. Igaüks lahe? Olgu, nii et olge versus POST, need on kaks peamist võimalust et võtame andmeid HTTP taotluse. Kutid oleks pidanud nägema Mõlema loodetavasti. Nii GET teave läbib URL. Nii et kui te kunagi teha Google otsinguid, YouTube, saate ilmselt märgata küsimärk. Ja siis kõik need sõnad et sa lihtsalt panna sinna. Ja POST läbib andmeid HTTP sõnumi kehas. Nii et erinevalt SAADA, siis millist kaaluda et andmed on kasutaja eest peidetud. Aga mis on tegelikult oluline mõista on see, et see on ikka sama ebakindel kui saad. Analoogselt Mulle meeldib kasutada on, kui sa pead oma pangakonto number ja sa kirjutad seda väljaspool ümbrikus, see on päris ohtlik. Kui sa olid kirjutage see tükk paber ja pane see ümbrikusse, see on ikka tõesti ohtlik, sest kõik mida sa pead tegema, on avada see üles ja vaadata täitekoguse Sõnumi näha. Nii et see on "peidetud" ja inimestele meeldib arvan, et see turvaline, kuid see tõesti ei ole. Ja ma olen kindel Davin hakkab sattuda, et rohkem, võibolla. Aga see on oluline vahet teha ja midagi tõeliselt head mõista. [00:55:15] OK, SQL, Structured Query Language. Kõik asjad, mis oleme näinud nii hiljuti! Nii et see on põhimõtteliselt ainult projekteeritud, Ilmselt juhtimiseks andmeid. Kutid oli palju kogemusi seda oma tabelid PHP MyAdmin. Ja seal on neli päringut et me tahame kutid teada. Nii et uuendada, lisada, valida ja kustutada. Nii et sa tead neid väga hästi. Me läheme nende kaudu väga kiiresti. [00:55:40] Nii uuendada, tõesti, kui see, mida võite arvata see, see lihtsalt uuendab andmeid oma andmebaasi. Nii et meil on mõned näiteks siin. See on üldiselt struktuuri uuendus päring. Nii et me update tabelis et me räägime. Ja me tahame kehtestada teatud väärtusi, teatud veerud võrdne konkreetsed väärtused. Nii see lihtsalt uuendab tabel, muutes väärtusi kõikides ridades sel juhul. Nii et see siin, tegeliku Näiteks on meil insert-- vabandust. See slide arenenud ilma minuta märkamata. [00:56:17] Nii et see uuendused tabeli col1 võrdne et VAL1 kus maja võrdub "Currier." Mis see üks teeb, on see muudab ainult, vaid ajakohastab neid väärtusi teatud kohtades. Nii selles esimene, see muudab need väärtused kõike oma lauda OK? See saab muuta veerus iga kirje iga ühele reale. Aga see, kui sa võiksid ma arvan et kui täpsustava. Nii et see on ainult kavatse muuta see väga spetsiifilistes kohtades. Nii p-pani seitse, kui võibolla uuendatud summa raha et teie kasutaja olnud, siis ilmselt oli mõned kus ID võrdub sessiooni ID, eks? [00:56:53] Sest sa ei taha muuta selle rahasumma iga isik, kes kasutas oma kodulehel. Sa tahtsid, et muuta see üheks konkreetse isikuga, et isik on kes oli kasutanud seda sel ajal. Õigus? OK, nii et sisestada, sisesta teatud väärtuste tabelid. See on nagu siis, kui sa oled luua täiesti uus kasutaja. Üldstruktuuri siin on lisada mis tahes tabelis me räägime. Väärtused, mis on väärtused, mis me tegelikult tahame lisada. OK, nii nagu me näeme siin, me on lisada tabelisse. See on konkreetsed sambad nende vastas väärtusi. Nii et see ütleb, sisesta uus rida, mis sisaldab väärtused VAL1 ja VAL2 alla need konkreetsed sambad. [00:57:33] Nii et äkki tahad ainult täita välja pool asju selles reas. Just see osa siin saab teha. See võimaldab teil tegelikult määrata, milline osa. Jah? [00:57:44] Sihtrühm: Kas sa ainult [kuuldamatu] rea lahtrid [kuuldamatu]? [00:57:52] ALISON: Kui teil on ainult täita teatud osa oma rida, Ülejäänud need rakud on vaid tühi. Niikaua kui teil võimaldada neil tühi, see ei ole probleem. Kui püüad pääseda neile, et see on läheb tagasi mõned tühjad element. Kuid on oluline teada et teatud tabelid, neid tuleks lubada null. Võib-olla olete sattunud Probleem ajal oma p-set sest me ei lase ühtegi oma väärtusi olla null. Aga sa võid täpsustada vabatahtlik väärtust oma lauale. [00:58:26] OK, valige, nii et see on lihtsalt võimalus saada konkreetseid andmeid tabel mõned tunnus, mis sa tahad. Nii valida star tabelist, kus col võrdub midagi lihtsalt tähendab, anna mulle kõik andmed, mis on seotud kus vastavad veerus on tõsi. Nii star sel juhul tagasi kogu rida teile, OK? [00:58:49] Ja siis, antud juhul valige täht tabelis lihtsalt annab teile kogu tabeli. Ja siis kustutage muidugi, see lihtsalt kustutab rida tabelist. Nii kustutada tabelist, mis tahes laua me oleme viitamine, kus teatud tunnus või mõni tingimus on tõene. Jah? [00:59:07] Sihtrühm: Küsimus. Miks sa Kahekordse hinnapakkumisi ja kas te teha jutumärkide või ühe hinnapakkumisi, see teeb vahe? [00:59:13] ALISON: jutumärkide või ülakoma ei tee vahet SQL. Ma arvasin, et ma nägin teist küsimust. Jah? [00:59:20] Sihtrühm: Kas see ei mõjuta mida saab põgenenud päringu? [00:59:25] ALISON: Rob? [00:59:27] ROB: Mida sa mõtled põgenenud päringu? [00:59:31] Sihtrühm: Kui keegi on ühe päringu vorm of-- [00:59:36] ROB: Kui keegi pane ülakoma aastal, siis kui sa oled desinfitseerimist sisestuse siis see ei ole oluline. Aga kui sa kasutad ühte koguaeg ja sa oled valesti põgenevad oma sisendid, siis jah, nad vajavad panna ülakoma murdmiseks oma koodi. kui te kasutate jutumärgid, nad tuleb panna topelt Tsiteerin murda koodi. Aga nii kaua kui sa põgeneda asju õigesti, see ei ole oluline. See on lihtsalt läheb tõlkida õige sümbol niikuinii. [00:59:59] Sihtrühm: Mis põgeneda tähendab? ALISON: Noh, nagu desinfitseerimiskemikaale ja põgeneda. Eksam, et meil on, suur XKCD koomiline, et nad tõmba, kus sa pead, oh-- ROB: See on viimase slaidi. ALISON: See on viimase slaidi tõesti? Oh my god. Seal me läheme, täiuslik. OK, nii et põhimõtteliselt saab süstida midagi sinna SQL päring kui see puruneb oma koodi või kui David näitas klassis, kui meil on üksikud quote 1 võrdub 1, ja kui meie koodi me lihtsalt otse kopeerida, et, ja meil on lõppenud ülakoma, Mis juhtub, on meil saada mõned väljend, mis tulemus on tõsi, mis las keegi siseneda meie andmebaasi ja saada andmeid, et me ei taha neid saada. Nii desinfitseerimist sisendite tähendab lihtsalt hoolitsedes et me pääseks nende tegelased ja nende valimiseks kui sümbolit, mitte asju et tuleks lubada võtta sõna-sõnalt meie SQL. [01:01:04] Nii suur asi, et me ütlesime et kutid tuleks kasutada olid HTML erilist tähemärki, mis on midagi et te võiksite heita pilgu. OK, kustutada. Andmetüübid, see kõik on võrgus. Kuna meil on 15 minutit aega, ma olen lihtsalt läheb minema otse läbi selle. PHP ja SQL, põhimõtteliselt on see lihtsalt pidime päringu funktsiooni, mis aitas kaitsta Nende pahatahtlike rünnakute eest. Nii et kui te kasutate Küsimus, olime hoolitsedes et asjad desinfitseeritakse ja tühi-tähi. [01:01:36] MVC on lihtsalt disain paradigma nii mudeli arvates kontroller. See on lihtsalt viis hoida asju kena ja lahku samamoodi et meil on kombeks tegur välja kood funktsioone. See on lihtsalt web design raamistik mis võimaldab teil teha sama asja. Ma lähen jäta see. [01:01:54] See on midagi, mida ma oleks super mugav koos. See on väga vähe laual. See annab sulle funktsioon Näiteks mudel. Ma lihtsalt läbimas seda, sest ma tõesti tahad Davin suutma rääkida. Kui teil on küsimusi, vastake. Ma olen siin pärast. Tule minuga rääkida. Mis, et meil on HTTP staatused. Ja Davin läheb löök läbi selle 15 minutiga. See saab olema suur. [01:02:17] DAVIN: OK. Uh, mikrofon? Jah. Vabandust. ALISON: viis valmistada. DAVIN: Ei, ma olen valmis. Ma olen valmis. Teeme seda. See on valmis. OK. Vabandust. Ma voolanud kohvi ise. Ma ei tea, kas ma olen rohkem ärritunud, et ma vaatan rumal, või et ma ei pea kohvi enam. Igatahes, lihtsalt kiire teadaanne umbes lehel kutid on. Nii et see leht teiega on ei ole ametlik Mis on viktoriini. See on ametlik Mis on viktoriini. Samuti veebilehel, siis rääkige sa, OK, see on viktoriini. Nii vähe petma lehte sul on, ei ole ametnik. Ja seal on vigu ta. Nii parem mitte ainult pimesi kasutada. Nii et jah, see on nii. Nii lähme sinna reaalne kiire. [01:03:05] Nii HTTP staatused. Mis juhtub, kui kodulehel, et kõik on korras. Kõik on OK. Kõik tuleb tagasi sa, kuidas sa tahad seda. Sa saad 200 OK. 301, kus me oleme näinud, et 301 enne? Oota, mis toimub? Vabandust. Nägime i tina loengu ajal turvalisust. Nii käigus turvalisus, nii et kui David sisestatud http ja siis minna üritas cs50.net, sa lähed, et näha 301 liigutada. Miks? Sest see läheb ümber automaatselt meie HTTPS. [01:03:35] Nii 301 liigutada, vaid see on põhimõtteliselt ümbersuunamist. Ja sa ei mõtle selle peale niimoodi. Iga seisunditest, mis algavad 2-ndatel, need on nagu OK, kõik on OK. Iga seisunditest, et alustada 3, need on ümbersuunamist. Staatused mis algavad 4, et vahendid seal on mingi kliendi viga. Staatused mis algavad 5 see on mingi serveri viga. Nii et sa selline lõhkuda staatused niimoodi. Nii 304 ei ole muudetud, nii et teie server.c p-komplekti, nii oletame, et sul koormatud cat.html. Kõik tuleb tagasi, saad 200s, OK, tore. [01:04:03] Oletame, et sa värskendatakse seda. Noh, sees, et cat.html, teil on JPEG. Noh, et JPEG ei ole hakka uuesti laadida. Sa ei kavatse kirjutada uut GET taotluse serverile, ja siis saad kogu selle info tagasi. See saab lihtsalt olema--, et pilt on saab olema puhverdatud oma masinale. Ja nii, et pilt on 304. Nii, et see ei ole muudetud. Kui seejärel sulgeda, selge küpsised ja seejärel värskendage ja proovige laadida, et leht uuesti, sa lähed, et näha 200s. Sa ei lähe näha, et 304. [01:04:28] 400, halb taotluse reaalne kiire, nagu siis, kui te ei kavatse saata JSON objekti server ja teie JSON eesmärgiks oli vale, näete midagi sellist. 403, keelatud. Kui soovite näha keelatud? Tõenäoliselt Tõenäoliselt? Sihtrühm: Chmod. DAVIN: Chmod, jah. Nii et sa ei ole määranud load korrektselt. 404, ei leitud. See lihtsalt ei ole olemas. Nii et kui sa kirjutad vale URL. 500 internal server viga, server Ilmselt ei olnud õiged. Midagi ei oma lõppu, kuid midagi serveri poolel. Ja 503? Paljud inimesed nägid 503s viimase p-set. Millal see juhtus? Kuulsin sosistab. [01:05:05] Sihtrühm: Kui Google otsustab oled robot. DAVIN: Jah, kui Google otsustab Sa oled robot, saad 503s. Nii et see on liiga palju. Kui oled serverilt liiga palju, see on tavaliselt ajutised. Ja enamik oled märganud seda. Nii nägid 503. Te olete võtnud vähe pausi, siis 503s läks ja kõik oli korras. [01:05:20] Gabe: Real kiire, kui te poisid saada 500 ilmselt see viimane probleem seada? Jah? [01:05:27] Sihtrühm: Tavaliselt, kui server on fail vales kohas või [kuuldamatu] oma masin [kuuldamatu]. [01:05:34] Gabe: Nii et see võib olla konfiguratsiooni küsimus oma PHP serveris. Aga see võib olla lihtsalt midagi nagu semikooloniga, et teie unustasin. Kui sa kirjutad PHP, mõned vale süntaks võib sulle midagi sellist. OK? [01:05:46] DAVIN: Cool. Kas sa tahad, et ma lihtsalt kuni AJAX? [01:05:51] Gabe: [kuuldamatu]. DAVIN: OK. Mis siis DOM? Mis DOM seista? [01:05:55] Sihtrühm: Document Object Model. DAVIN: Nice. Ja miks see meile meeldib? Awesome. Õige, nii see lihtsalt võimaldab meil juurdepääs HTML, juurdepääs meie lehel väga kiiresti. Miks? Kuna me ravivad meie lehekülg, kus ravitakse meie HTML tags, ravivad kõik sest kui nad objektid. Kui me neid koheldakse nagu nad esemeid, siis mida me saame teha? Noh, võib helistada funktsioone neile. Ja see on oluline, siis miks? Noh, kuna me ei kavatse kasutada JavaScript uuendada meie HTML, uuendada objektid. Nii et kui me kohtleme neid nagu objekte, siis saame helistada funktsioone neile. Ma lähen sinna vähe rohkem kui ma minema JavaScript, aga te olete kõik näinud nagu document.getElementById. Nii dokument on oma element, saada osa ID, nii et sa lähed otsima mõned ID HTML tag. Ja siis, mida saate teha midagi muud, mis. Näiteks nagu document.body, siis saab lisada lapse. Nii et sa lähed leida dokumenti. Sul on dokumendi. Sa lähed leida keha. Sa leidsid keha. Ja siis sa lähed helistada mõne funktsiooni ta. Nii lisab laps, ja te saate lisada mõned HTML koridori lõpus sees oma keha. Ühesõnaga, sa oled lihtsalt käsitledes seda nagu objekt. Sa ravivad HTML sildid nagu objekt. Ja see on väga lihtne ja kiire minna nende kaudu. Aga see võimaldab ka helistada funktsioone neile nii saab manipuleerida ja muuta elemente. [01:07:04] Gabe: Arvestades seda, miks on JavaScript sellised kena keeles suhelda HTML? Koefitsiendid on, kui inimesed olid valinud keelt brauser, kliendi poolel JavaScript on tõesti kena, see on tõesti hea käitlemise objektide kohta. Ja objektid on selline nagu objektid, mis esinevad HTML, nii et see on väga lihtne JavaScript mida teha, et selline käitlemine. DAVIN: Nice. Nii et siin on lihtsalt näide. Nii et ma arvan, et eelmise aasta viktoriin, või äkki kaks aastat tagasi, me küsis teil luua puu. Nii et see on täpselt, mida sa teha. Nii et sa hakata läbi dokumendi. Ja siis sa põhimõtteliselt lihtsalt pilk sildid. Nii et kui sa vaatad, siis Alustame HTML tag. Ja siis sa saad vihjeid selle kohta, kuidas Selleks põhineb taandus. Nii pea sellist hargneb. Toas pea, meil on teine ​​silt pealkiri. Niisiis, meil on pealkiri tag. Ja sees, et meil on mõned string. Ja nii me esindame string ringi. Ja kõik sildid on väljakud. [01:07:54] Ja kui sa vaatad, kui me Mõtle seda kui puu ja oletame, et HTML on vanem, siis pea ja keha ei kavatse olla õed-vennad. Nad mõlemad saab olema lapsed, et lapsevanem. Nii, sest nad on nii õed-vennad, nad saab olema omamoodi kõrval teineteist nii puu mudel. Ja siis sa põhimõtteliselt teha täpselt sama asi. Nii ei ole raske, kuid oleme palunud küsimused nagu seda enne mängust. Gabe: Kas keegi Küsimuste nii palju? Kas see on hea? DAVIN: Cool. JavaScript, OK, hea kraam. Nii JavaScript, mida on JavaScript? Noh, JavaScript on-- see on keeruline, kuid need on mõned olulisemad sündmused et sa peaksid meeles pidama. Esiteks, see on lõdvalt kirjutatud. Mida see tähendab? Nii PHP was-- jah, mis toimub? [01:08:35] Sihtrühm: Sa ei pea otseselt riik, millist tüüpi muutuja on. DAVIN: Perfect. Siis ta ütles, et sa ei pea selgesõnaliselt, millist tüüpi muutuja. See on täpselt õige. Nii C, kui mul oli int i võrdub 50, siis PHP, see on nagu see, $ i, võrdub 50. Siis JavaScript, milline oleks kõne olla? Var, eks? Oleks nagu var i võrdub 50. Aga sa ei pea olema nagu, OK, see on int. OK, see on string. Ei ole vaja teha. See on tõlgendatud keeles. Mida see tähendab? [01:09:04] Sihtrühm: ei koguta. [01:09:06] DAVIN: Mis ei koostatud tähendab? Jah? [01:09:11] Sihtrühm: Sa ei pea ümber koodi saada see valmis arvuti käivitada. See on lihtsalt võetud ajal täitmise ja arvuti [kuuldamatu]. DAVIN: Jah, nii see läheb läbi tõlgi. Aga sa oled täpselt õige. Nii et te ei saa kunagi koostada, eks? Kui sa teed oma PHP ja JavaScript koodi sa ei helistanud kompileerida. Sa ei helistanud midagi teha või midagi sellist. Ongi, sest see on tõlgendanud. Nii et iga kord, kui ta läheb läbi brauseri, see läheb läbi tõlgi. Ja see läheb seda tõlgendada lihtsalt reaalajas kohe teie jaoks. Millised on mõned positiivsed ja negatiivsed võttes tõlgendada keel ja millel on koostatud keeles? Nii compiling-- jah, mis toimub? [01:09:50] Sihtrühm: tõlgenduses on aeglasem. DAVIN: Mis mõttes? [01:09:57] Sihtrühm: Kui olete koostada, sa ei pea teha mingeid täiendavaid meetmeid, et täita see, et see [kuuldamatu]. [01:10:04] DAVIN: Õigus, täiuslik. Nii et mida sa ütlesid on põhimõtteliselt, et koostamine, kui sa koguda, teil on palju eelkulud, eks? Sa lähed kompileerida. Aga pärast seda, kui ta kompileerida, tõlkija läheb optimeerida. See saab olema kiire. See saab põhimõtteliselt tuleb nii kiiresti kui võimalik. Suulise, kunagi on, et algsetele kuludele. Pigem läheb veidi aeglasemalt iga kord, kui seda tõlgendada. Ja sa lähed pea tõlgendavad seda iga kord. Seega ei pea seda üks ajakulu, nüüd sa oled läheb on seda tõlgendada iga kord lehekülg muudab. [01:10:29] Nii tõlgid on hea, sest sa ei pea kompileerida, kuid nad on halvad, et iga ajalt leht laeb, see on läheb on tõlgendab seda JavaScript. Ja see läheb joosta veidi aeglasem kui kui sa olid kompileerida. Võimaldab communicate-- oh oota. Kasutatud manipuleerida sisu ja välimus. Me lihtsalt rääkisime sellest. Ta kasutab DOM. AJAX, me võtame arvesse AJAX natuke. Ja siis, et see on kliendi poolel. Nii PHP on serveripoolne. JavaScript on kliendi poolel. Mis on positiivne, et? Ta ütleb seda. See on kiirem, eks? Sest sa ei pea mina-- see on kiirem. Sa ei pea suhtlema mõne muu seadmega. Kui sa oled lihtsalt oma klient, sa oled kunagi läheb minema ja näha, mis on serveris ja siis aru või midagi sellist. Nii kliendi poolel kipub natuke kiiremini. [01:11:15] Gabe: Jah, aga see ei tähenda, PHP on kiiremini JavaScript või midagi muud sarnased. Nad juhivad liiki samal kiirus, sest nad on nii tõlgendada keeles. Asi, mis on aeglane siin on taotluse. Nii et sa oled tegelikult toimub kogu tee üle Brasiilia et saaksin teavet et seal elab. Aga PHP ja JavaScript, nad selline sõidetud sama kiirusega. See ei ole, et üks on kiiremini kui teine. See ka, nipiga küsimus siit. Nii JavaScript ei hakkaks kunagi masinkoodi, õige või vale? [01:11:47] Sihtrühm: False. Gabe: False. See peab muutuma masina koodi, kuna masin koodi Ainuke asi, masin mõistab. Kuigi see ei ole koostatud, see ikka saab masina koodi sest tõlk on lihtsalt programm, mis läheb rida-realt ja muundab selle rida midagi arvuti aru saab. OK? Külm. [01:12:08] DAVIN: Siin on lihtsalt väga lihtne hello world JavaScript programm. Nii et ma ei tea, kui-- olete näinud seda. Aga sa lihtsalt pead HTML siin. Ja selle asemel, et tegelikult paneb JavaScript script silte nii et sa tavaliselt pane see pähe. Sul on script sildid. Viska sinna. Kõik me oleme teinud siin me oleme seotud in-- nii et me oleme omavahel seotud JavaScript faili niimoodi. Ja te olete kõik teinud, eks? Nii et kui sa kasutad jQuery ja underscore.js viimase p-set, sa ei pea tonni koodi üles Stsenaariumi sildid, kuni oma peaga. Sa võid seda teha, kuid selle asemel sa oled lihtsalt sidudes selle. Ja sa sidudes seda Just nagu sa teha CSS. Nii see lihtsalt muudab lugemise lihtsamaks nii koodi ei meeldi 1000 rida pikk tonni funktsioone, mis sa ei pruugi olla kasutades. [01:12:52] Selle asemel, sa lihtsalt ühendada see. See compartmentalizes ta. See on nagu kirjalikult mõned header fail ja Seejärel sealhulgas päisefail C. Mõtle seda lihtsalt niimoodi. Mida see teeb? Noh, see läheb jooksma. See saab hoiatada. Nii et sa lähed, et saada natuke pop-up nimetatakse hello world. Kiire küsimus, vaid terve mõistuse kontrolli, nii näed siit organismis, öelda keha, HTML siin. Mis tuleb esimesena? Kas ma näen keha, HTML siin või ma näen alert esimesena? [01:13:19] Sihtrühm: Alert. [01:13:20] DAVIN: Right. Ta ütleb, et teate. Miks? [01:13:22] Sihtrühm: Sest sa minna ülevalt alla. [01:13:24] DAVIN: Jah. Perfect. Siis ta ütleb, lähed ülevalt alt, mis on täiesti õige. Sa lähed minema ülevalt alla. Ja JavaScript, jQuery, pead funktsioon, mis on nagu onload või valmis, ja mis ütleb, OK, oodake, kuni kõik see HTML on koormatud. Ja siis helistage JavaScript. Kuna meil ei ole, et siin Kõige esimene asi, mis juhtub on see saab minna ülevalt alla. See saab löögi, et JS helistada, et see saab hoiatada. Pärast seda, kui klõpsad OK, et alert kaob. Siis läheb näidata sa keha HTML siin. Nice. [01:13:54] OK, nii lihtsalt reaalne kiire, kirjalikult JavaScript on super kiire. Selleks, et tunnistada muutuja, var nimi. Nii C, teil on int i, siis on kuulutada, millist tüüpi ta on. PHP, $. JavaScript, var. Me rääkisime sellest. Hea küll, lähme. [01:14:11] Loops, sama asi. Sama asi. Funktsioon deklaratsioonid, nii nagu oled näinud C. Ainuke asi, erinev on nii et kui saad teiste programmeerimiskeelte, nagu siis, kui te võtate 51 järgmine semester ja sa teed koos ocaml, saab tegeleda anonüümseks funktsioone. Nii see on täpselt, mida sa pead siin. Nii et sa tahad panna summa, mingi summa raha. Aga te võite ainult siis tee seda üks kord. Nii et sa ei taha seda nimetada funktsiooni Kokkuvõttes annab see funktsioon deklaratsiooni. Selle asemel, et kasutada tuleb lihtsalt see anonüümse funktsiooni. Ja sa oled näinud seda palju. Näete näide Selle paari slaidid. Jah, me näeme. Gabe: Hea küsimus. Kui oleks, mida soovid kasutada anonüümne funktsioon siin? Põhimõtteliselt, kui sa tahad midagi, nagu juhul juhtuda. Nii et kui hiir on klõpsatud, näiteks sa tahad funktsiooni nimetatakse. Nii te kaotate korral handler, siis läheb üritus, selline funktsioon, mis sa tahad olla nn. Ja mida sa möödaminnes on nagu lõpus Päeva lihtsalt kursor et juhistes, funktsioon. Nii see ei meeldi sa möödaminnes kogu kood, nagu kursor funktsiooni. Ja siis, kui keegi klõpsab hiir, siis selle funktsiooni saab nn. [01:15:17] DAVIN: massiivid, siis on massiiv deklaratsiooni. Siis massiivi panna asjad. Real kiire, siis mida see välja printida? Mida kolmas element olla? [01:15:31] Sihtrühm: "JS". [01:15:32] DAVIN: Parem oleks "JS". Oota, mine tagasi. Mis on pikkus? [01:15:37] Sihtrühm: Kolm. DAVIN: Kolm, eks? Täpselt, mida sa arvad. OK, nüüd minna. Massiivid, võite lisada neile asju. Nii et sa ei saa minna kaugemale esialgse piire. Lihtsalt midagi, mida meeles pidada. PHP, JavaScript, et nad on vähe natuke rohkem andestav poolest asjad niimoodi. Objektid, väga meeldib struktuurideks C, väga palju nagu assotsiatiivne massiivid PHP. Te olete kõik olnud kogemusi sellega. Nii JSON, kui sa möödaminnes JSON edasi-tagasi p-set kaheksa, see on sinu eesmärk. [01:16:03] Nii et jah, näiteks reaalne kiire näide. Siin on objekti. Kuidas sa viide selle objekti, nii lihtsalt reaalne kiire, oletame, et ma tahtsin leida välja, OK, mis on muidugi? Ja nii objekti nimi siin on CS50. Ja siis kui mul oli assotsiatiivne massiiv, kuidas ma seda teen? Ma tulen võtme abil, eks? Nii et mul on nimi massiivi. Mul on sulg, hinnapakkumisi, võti, lõpuks hinnapakkumisi, lõpuks sulg, ja mis viide, et element sees minu assotsiatiivne massiiv. Kuidas viidatud Muidugi sees minu eesmärk? Kas keegi teab? [01:16:39] Sihtrühm: [kuuldamatu]. [01:16:40] DAVIN: Mis on? Sihtrühm: CS50.course. DAVIN: Õigus jah. Nii CS50.course. Nii kuidas sa viide asju sees JSON objekti punktiga. [01:16:48] Sihtrühm: Võite kasutada ka massiivi süntaks. [01:16:53] DAVIN: OK, fine. [01:16:54] Gabe: Võite kasutada ka CS50 sulg, string, nagu jutumärke. Sihtrühm: Ma arvan, et see on identne PHP. Gabe: See on sama asi. DAVIN: Fine! Aga näed seda teistes kohtades. Jah, nii edasi. See on see, mida ma just ütlesin. Nii arvesse JavaScript jQuery näiteks. Nii et see on minu DOM, eks? Real kiire, nii et mul on pea, hello world, keha. Mul on nuppu. Ta ütleb, "push mind," nii et ma tahan vajutada seda. Ja ma tahan teha midagi kui see on klõpsatud. Õigus kõrval. [01:17:31] Õigus, nii et see on minu JavaScript. Nii jQuery on lihtsalt lihtsam kuidas kirjutada JavaScript. Nii et see, ja mida ma lähen näitan sa järgmisena läheb jQuery, on identsed. Nii nad teevad sama asja. Just jQuery kipub olema veidi lihtsam. Inimesed kipuvad meeldib rohkem. See on palju funktsioone. Nii et inimesed kalduvad kasutama jQuery. Te kõik kasutatud jQuery viimase p-set. Mis siis see teeb? Mida see JavaScript-- nii see on lihtsalt JavaScript. Mida see teeb? Mida see teeb? [01:18:03] Nii et esimene, näete akna onload. Õigus? Nii et me ei näinud, et enne. Nii et see läheb oodake kuni kogu akna koormusi. Nii see läheb oodake HTML, kõik pilte laadida Enne seda ei midagi. Ütleme, et meie DOM on koormatud. Kõik on olemas. Mis siis juhtub? Jah? [01:18:19] Sihtrühm: Button paistab. [01:18:22] DAVIN: nupp on juba olemas. Jah, nii nupu juba olemas. Kuid see ei ütle, OK, kui ma vajutan nuppu, nii nupp on juba seal niimoodi HTML tag. Oota, mine tagasi reaalne kiire. See tag õigus siin on saab olema nupp juba. Seal on juba nuppu. Aga siis, JavaScript tag, siinsamas, ta ütleb, OK, ma tahan saada elemendi ID, nii otsingu nupp lihtsalt ütleb, OK, ma tahan kaardistada muutuja seda nuppu. Nii et muutuja on lihtsalt lihtsam viis pääseda seda nuppu. Ja ma ütlen, OK, kui ma vajutan, et nuppu, nii et kui ma vajutan seda elementi, ja see element viitab nuppu, kui ma vajutan seda, siis ma tahan helistada funktsioon. Siin on üks neid anonüümseid funktsioonid me rääkisime. [01:19:03] Just helistada mõne funktsiooni. Toas selle funktsiooni, põhiliselt midagi, mida me oleme näinud palju, tähelepanelik. Sa klõpsa Otsi nupul. See saab põhimõtteliselt on nuppu. Sa klõpsake seda. Sa saad selle teate. X välja. Nii see on. Jah? [01:19:16] Sihtrühm: Nii et kui paned script [Kuuldamatu], script tag oma HTML? [01:19:21] DAVIN: Võid panna script tag sirge peas sest sa oled seda onload. See on ka see, et sa pead nuppu. Nii see läheb oodake klõpsate midagi. Aga onload on lihtsalt olema ohutu, teha et kõik koormused oma HTML eelnevalt. Jah? Sa tahad midagi öelda? [01:19:40] Gabe: [kuuldamatu]. DAVIN: Jah. [01:19:42] Sihtrühm: Nii onload väldib määratlemisel muutuja nuppu Otsi lihtsalt öeldes document.getElementById otsingu nupp dot [kuuldamatu]. [01:19:49] DAVIN: Kindlasti, aga siis Sinu string lihtsalt muutub tohutu. Täpselt nii, see on lihtsalt oleks lihtsam, jah. Jah? [01:19:56] Sihtrühm: Kust me luua window.onload? Või document.ready? [01:19:58] DAVIN: Jah, on küll. Jah, seal on, ma kontrollisin. [01:20:02] Gabe: Ei ole neil hooli. [01:20:03] DAVIN: OK, nii et ma lähen öelda niikuinii. Ühesõnaga, lihtsalt üldiselt, nii window.onload ootab, kuni teie DOM kõik HTML, koormusi. See ootab, kuni teie pilte laadida. See ootab, kuni kõik koormusi. document.ready, see lihtsalt ootab, kuni teie DOM koormusi. Kui HTML on kõik olemas, kui Sinu DOM on olemas, käivitub. See on ainus erinevus. [01:20:23] Gabe: Quick meelerahu vaadata siit. Niisiis võib seda vaadelda liiki nagu koodirida, eks? Sest see on window.onload võrdub hunnik asju. Kui JavaScript loeb seda, tõsi või väär, funktsioon saab täita. False. OK? Mis juhtub siin, sa oled lihtsalt möödaminnes Selle funktsiooni anonüümse funktsioonid et window.onload. Ja siis millal see tegelikult saada täidetud? Kui aken koormusi. See on sündmus. Nii et jus t asi, mida me oleme räägime varem, eks? Nii, kui toimub sündmus, funktsiooni juhtub. Sama asi onclick. [01:20:59] DAVIN: OK, nii et keegi võttis ära document.ready. Aga see on täpselt same-- Sihtrühm: dollari märk, mis on document.ready. See on otsetee. [01:21:07] DAVIN: Oh, see on? OK, nii et see vahend document.ready, shortcut. Kuid see on sama window.onload välja arvatud, et väike erinevus Ma rääkisin sulle. Ja see on jQuery. Nii et see on täpselt sama asi-- see on JavaScript. See on lihtsalt-- mõned inimesed arvavad, et see kui rohkem kerge, õhuke versioon et on palju funktsioone et sa ilmselt kasutama. Nii et see ei täpselt sama asi. [01:21:34] Nii asju omamoodi meelde. Nii teiste Näiteks oleme oli document.getElementById, seega oli meil selle pika string, mis läheb aina element tahes ID ta on. See on asendada käesoleva üleskutse siin. Nii et näete dollari märk, siis sa näed quote, hashtag. Hashtag on alati valijat. Ta ütleb, OK, see on pistmist ID. Mis valija klassi? [01:21:56] Sihtrühm: Dot. [01:21:57] DAVIN: Dot, eks. Kui sa oled lihtsalt läheb Valige silt, mis see on? See on lihtsalt silt, täpselt. Ja sa võiksid kasutada, et siin samuti. [01:22:05] Gabe: Ja tag, me mõtleme nagu div, näiteks või pea. [01:22:08] DAVIN: asutusele või p või midagi sellist jah. Nii et siin, OK, selle asemel, et öelda: document.getElementById, see on lihtsalt täpselt sama asi. Lihtsalt jQuery, see on lühem. Nii et see on lihtsam. Niisiis, mitte rohkem onclick, klõpsake lihtsalt. jQuery funktsiooni, nimetame seda funktsiooni. Alert on täpselt sama. Nii et see on natuke väiksem või natuke lühem, veidi bit-- inimesed arvavad see on natuke lihtsam kirjutada, natuke lihtsam aru saada. Aga see on jQuery. Paljud inimesed saavad vähe natuke segaduses ja mures ja nad arvavad, OK, jQuery erineb JavaScript. Mul on meeles pidada neid kaks eri asja. See ei ole. Ma mõtlen, et see on teistsugune süntaks. Aga jQuery on JavaScript. See on lihtsalt näiliselt parem versioon, et võib olla lihtsam aru, mida inimesed kasutavad. Gabe: Jah, oleks aus, et dollari märk et näete jQuery, see on lihtsalt funktsiooni nime, et jQuery määratleb. See ei ole midagi erilist. Kas see on lihtsalt nime funktsiooni just nagu sina võiks määratleda dollari märk. [01:23:03] DAVIN: Jah, nii et sellest rääkinud. Mõned kasulikud asjad. Ma otsisin tagasi vana viktoriine. Viimase paari viktoriinid, et nad pole pidid kasutama asjad niimoodi. Nii document.ready, nii veenduge, et kõik on laetud, enne kui hakkate asju. Vali ID või valige klassi, ta tahaks lihtsalt olema quote dot mõned klassi lõpus tsiteerida. Esita, nii et kui sa oled plangil ja kõne Selle funktsiooni pärast vormi leiab. Väärtus, et oletame, et mul oli vorm esitamise, nagu kasutaja nimi, e-posti, mis iganes. Mul oli teksti kasti. Nii et ma kirjutades, et teksti kasti. Noh, kui sa tahad saada raha välja, et teksti kasti sa kasutad dot val. Ja siis, siia alla dot HTML on sama on nagu dokumendi dot getElementByld dot innerHTML. Nii et läheb tagasi sa HTML sellest ID. Siin lihtsalt kasutada mõned ID või mis iganes dot HTML. See saad HTML sellest element. Kui sa tahad siis muuda seda HTML saate andke seda midagi. Nii et sa tahaks olla nagu dot HTML ja seejärel sees, hinnapakkumisi, uus HTML või midagi. [01:24:05] Gabe: OK, nii AJAX. Mulle meeldib mõista AJAX tõesti hästi. Nii et ma tahan, et sa poisid mõista AJAX tõesti hästi. Sest kui te seda teete, sa oled päris palju läheb mõista kõike, mis on pistmist HTTP, PHP, JavaScript kuna kõik tuleb kokku AJAX. AJAX ei ole keelt. AJAX on tehnika. Ja ta kasutab palju erinevaid tööriistu. AJAX tähistab asünkroonne JavaScript XML. Nii meetod, keele, andmeid. [01:24:36] Seega on peamine keel, mida me kasutame AJAX vallandada kõik ja kõigega hakkama saada Hiljem on JavaScript. Sellepärast see on seotud väga lähedal JavaScript. Ja siis asünkroonne on sest me ei tee seda korraga, kui me lehte laadida. See on asi, mida me saame teha asju omamoodi paralleelselt. Põhiidee AJAX on see, et sa tahad see, et saaksin konkreetset teavet. Näiteks, kui sa kirjutad uus kasutaja nime, kui sa registreerid kasutajanime minu kasutaja nimi on abc123. Ja seejärel, lõpus vormis, pead sa klikkima Edasta. Ja see pidi minema server, ja siis vaadata, kas andmebaasis abc123 on juba olemas. Ja kui see on juba olemas, ta ütleb, Kasutaja nimi on juba andmebaasis. Ja nad, sa pead täitma välja kogu vormi uuesti. Ja see oli tõesti halb. [01:25:23] Ja siis inimesed ütlevad, OK, miks me ei võiks lihtsalt teha väike HTTP taotluse vaid vaadata et näha, kas see kasutaja on andmebaasis Enne kasutaja oli esitada kogu vormi? Nii näiteks, kui kasutaja lõpetab kirjutades abc123, Lähme serveriga vähe natuke ja lihtsalt saada õige või vale serverist, kas see on kehtiv kasutajanimi või mitte. OK, nii et on üks peamisi kasutab AJAX tänapäeval ikka. [01:25:49] DAVIN: Nii reaalne kiire, in Ajax kõne jQuery, siis võiks tähendada, et teil tahan olla sünkroonne. Te ei tohi seda teha. Aga sa ei saa seda teha. Ja kui sa tegid seda, mis juhtub? Noh, näiteks, kui sa oled saada uudiseid või mis iganes, Teie brauser on lihtsalt läheb oodake kuni selle kogu kõne on lõpetatud asemel, et lasta teil teha muid asju õigesti, kui klõpsate seda. [01:26:14] Gabe: See ei paneks enam. Oh my god. Sorry! Yup. "In the past, Klient on vaja taotluse Kogu sisu veebilehel. " See, mida ma ütlesin. See võimaldab meil saata täiendavaid GET või POST taotlusi ilma reload oma brauserit. Nii et päeva lõpuks, me oleme tegelikult teeb HTTP taotlusi Siin saab JavaScript. Sest enne, me ainult kasutatud JavaScript muuta HTML juba tekkinud. Ja nüüd, me ei kasuta seda liides koos veebiserverite samuti. Kuidas see juhtub on meil klient. Davin on klient. Ja tal on olemas kõik JavaScript näidata, kuna HTML on loll. JavaScript on tark. Nii Davin Davin on tema smart osa ja tema loll osa. Ta läheb üles kasutama oma smart osa nüüd. Ta läheb kasutama JavaScript taotlema, näiteks kas abc123 on Andmebaasi või mitte. [01:27:04] Nii Davin, siis sa lihtsalt Kirjuta mulle HTTP taotluse. Aitäh. Nii ta just saatis HTTP taotluse. Sa näed seda? Ja see on ainult ühtemoodi et kõigi HTTP päringute saatmist. Brauser, Google Chrome või midagi, on näeme, et Davin on üritad saata HTTP taotluse, aita hm natuke. Ja seda lähe kõik viis server. Nüüd, server läheb on PHP siin või mõnes muus keeles. Täpselt nagu tavaline HTTP taotluse. See on päris palju normaalse HTTP taotluse. [01:27:31] Ja siis, server ei ütle, OK, Davin tahab mind kontrollida, kas Selle abc123 on andmebaasis. Mine räägi mudel. Mudel ütleb, et see ei ole. abc123 on hea kasutaja nimi. Ja siis, web server läheb kasutada PHP muuta mingi fail. See võib olla sõna otseses mõttes lihtsalt faili mis sisaldab "jah", või "ei, või midagi sellist. See võib olla mis tahes faili. [01:27:54] See võiks olla nagu ma lähen Kirjuta Davin pildi pardi kas see on andmebaasi ja Kirjuta pildi hamster kui see ei ole andmebaasis. See oleks selline loll, kuid see töötab. OK, nii et ma saadan pardi Davin. Davin sain pardi. Ja nüüd, kes läheb hakkama part? Davin tark osa uuesti nii JavaScript, eks? JavaScript keerutas taotluse ja JavaScript läheb vastu nõudmisel ja tõlgendada seda mingil kujul. [01:28:22] Ja selles mõttes, et see läheb öelda, OK, kui part, siis ma olen hea. Kui hamster, siis ma lähen öelda, ei, kasutajanimi on juba olemas andmebaasis. Aga tavaliselt, et sa pole läheb Kirjuta part. Sa lähed saata midagi veidi targemaks. Ja mida me kasutame on XML. Ja viimasel ajal me kasutame JSON. JSON on lihtsalt JavaScript Objekti Märge, mille on põhimõtteliselt saad Kogu JavaScript objekti. Ja kui panete selle faili lihtsalt meeldib et CS50 objekt, mis te poisid nägid. Sa pane see fail ja saadad selle üle Davin. [01:28:53] Nii et kui ma oleks teha JavaScript objekti ja lihtsalt öelda, kasutaja olemas, jah. Või kasutaja olemas, ei ole. Ja saatke see talle tagasi. Ja miks JSON? Sest inimene kes on saanud käesoleva on kavatsete kasutada JavaScript hakkama vastust. Ja JavaScript töötab nii hästi, sest seda nimetatakse JavaScript Object Märge. Õigus? Nii saab ta lihtsalt helistada funktsioon ja saada see kena objekti vastust. Ja siis ta läheb tea, kas et kasutaja on andmebaasis või mitte. [01:29:22] Nii et näete, see kõik tulevad koos veebiserver, ja siis seal on üks HTTP taotluse ja üks HTTP vastuse ja puha. Seega veenduge, et te poisid mõista seda AJAX kõne sest see aitab teil mõista kõiki mõistete me räägime. [01:29:37] Nii et siin on näiteks AJAX koos jQuery. Ja siin me teeme get JSON. Nii et me ei taha saada pilt kass siin, või part. Me püüame saada JSON faili. Ja siis me ootama see on tehtud, dot teinud. See tähendab, et ma olen oodanud vastust. See võib võtta natuke aega. Siis näed natuke laadimist. Kui sa tahad teha, et oma kodulehel. Nii dot tehtud, ja mis siis juhtub siis, kui ta on teinud? Jätate anonüümselt funktsiooni, just nagu me nägime enne. Sest teha on sündmus, vaid nagu klikkides hiirt või mis iganes, jQuery. Nii et sa läbima selle funktsiooni andmete, teksti, staatus ja jqXHR. Ja põhimõtteliselt see, vaid mõned muutujad mida saab kasutada hiljem on staatuse HTTP päring, andmed, et see läheb saata sulle tagasi. Siis saab hiljem tõlgendada ja midagi sisukat ta. Ja kui see ei õnnestu, siis võib see ebaõnnestub? Noh, kui HTTP taotluse annab sa 500 või midagi sellist. Siis see läheb sulle öelda staatus, millist rike, mis oli, ja igasuguseid asju. Sa pead veenduma, hakkama Mõlemal juhul muidu programm läheb hulluks. [01:30:42] DAVIN: Nii et jah, see on täpselt mida sa nägid oma viimase p-set. Tegelik AJAX kõne on get JSON. See on üleskutse. Ja siis, dot teinud on nagu kontrollib ta, kas see on edukas. Kui see õnnestub, soovid teha midagi koos andmetega. Sa saad tagasi, et JSON taotluse andmed. See on see, mida sa saad tagasi. Nii et kui sa mäletad oma p-set, Palju sa olid nagu andmete sulg i või mis iganes, dot link või pealkirja järgi. Ükskõik tuleb tagasi sellest JSON, olenemata väljad on selles JSON objekti, see on, mida te saate tagasi. Andmed on, mida sa saada tagasi. Tekst staatuse, lihtsalt midagi, mis saate teada, mis juhtus. Ja siis, jqXHR, see on lihtsalt jQuery XML HTTP taotluse. See on nagu objekt. Ja siis ei, nagu Gabe ütles. Gabe: Meie väike näide abc123 lihtsalt vaadata, kas see on andmebaasi või mitte, andmeid oleks midagi teeksin, kui andmed dot kasutajanime olemas, mis on see, mida teie PHP genereeritakse teile, kui andmed dot kasutajanime olemas, siis Ma lähen märku, kasutaja nimi on juba olemas. Else, ma lihtsalt lase kasutaja toimida vormi täitmisel. OK, turvalisus, lahe. [01:31:50] DAVIN: Tahad mind? [01:31:52] Gabe: Mulle meeldib see. Nii et kui miski tundub tuttav. Me oleme peaaegu lõpetanud. Nii et see on lihtsalt näide kutid nägid klassis. Sa kasutasid argv1 siin. See on nagu käsurea argument. Ja me mälukoht kopeerimine, et puhvrisse suurus 12. Milles probleem siin? Buffer overflow! Kuna meil on puhvri suurus 12. argv1 võib olla suurusest kaks miljardit. Me ei tee mingit piiri kontrollimiseks. Nii et me võiks kopeerida palju mälu. Ja me eriti halb midagi. Mida me saaksime teha, et on väga tähenda sel juhul? Jah? Sihtrühm: Osa kaks miljardit asju sisaldab käivitatavat koodi, mis tagastab [Kuuldamatu]. Gabe: Täpselt. Nii et selline asi, et inimesed kasutavad Jailbreak iPhone, näiteks. Nii et selline asi. Kuna saate lihtsalt teha seadme täidavad mis tahes koodi, mis sulle meeldib. Fix, nii fix on lihtne. Just kontrollida piire. Sa kontrollige null, sest me alati kontrollida null kui me tegeleme stringe. Ja siis, kui te võtate string pikkusega varem. Ja kui string pikkus on kehtiv string pikkusega, mis on lähemal 0 ja 12, siis oled hea. [01:33:03] DAVIN: Kui sa ei märgi jaoks null, reaalne kiire, mis juhtub? Seda saad SEG süü. Miks see SEG süü? Kuna olete helistaja strlen on null. Gabe: Jah. Õige või vale, kasutades üht parool on hea mõte. [01:33:19] Sihtrühm: False. [01:33:20] Gabe: False. Kasuta palju paroole ja suur, pikk ones. Tabalukk ikoonid turvalisuse tagamiseks. [01:33:26] Sihtrühm: False. [01:33:27] Gabe: False. See ei tähenda midagi. See on lihtsalt ikooni. SSL kaitseb mees keset rünnak. Sihtrühm: False. Gabe: False. OK, nii et kõik need on valed. Nice. [Kuuldamatu] Tahad sellest rääkida? Sinu kord. DAVIN: ründed, mees keskelt. Mis mees keset rünnak? Sihtrühm: [kuuldamatu]. DAVIN: Kui saadate HTTP taotluse, võivad nad seda teha, eks? Aga kui saadate HTTPS, nad ilmselt ei saa seda teha. Seal on palju punkte koos oma ühendus. Sul on ruuterid. Sul on DNS servereid. Kui keegi suudab füüsiliselt vaata, mida saadate, nii et keegi suudab tegelikult teie vahele, klient ja server, ja on näha, mida saadate, see on mees keset rünnak. Nii, et näha mida sa üritad saada alates server, või oskab see-- hullem, sa võiksid näha küpsiseid või midagi sellist. [01:34:16] Nii näiteks, kui te ei kasuta SSL ta võib olla võimalik näha Teie sessioon ID küpsised. Ja seda nimetatakse sessiooni kaaperdamise sest ta näeb oma ID küpsiseid, ja siis ta on võimeline minema, et kodulehel ja teeselda, et olla teile. Sest nii nagu PHP, mäletan kui me sisse loginud, mida me teeme? Seame sessiooni ID võrdub ID. Nii, mis tuvastab teie jaoks. Sellepärast näed oma portfelli ja mitte kõigil teistelgi portfelli. [01:34:38] Noh, kui ma olen suutnud saada, et küpsis, siis ma saan logivad sellele lehele. Ja siis ma lihtsalt näha oma kraami ja alustada ostu ja müügi kraami. Nii et istungil ärandamine. Aga sa ei peaks saama mina-- siis saab kasutada mees keset rünnak isegi kui nad kasutavad SSL. Aga sa ei peaks saama. Kui nad kasutavad SSL, sa ei saa istungil kaaperdada. Miks? Sest see kõik on krüpteeritud, õige? kui see on krüpteeritud, ja ma olen ikka mees keskel, ma ikka oma andmed. See on hea. Aga see on krüpteeritud. Nii et ma ei saa tõesti kasutada. Nii et kaks. [01:35:09] Real kiire, rist saidi taotluse võltsimine. See on lihtsalt, kui seal on link ja et link teeb midagi et te ei arva, et peaks tegema. Nii näiteks, kui oli seos kavatsen osta aktsiaid või müüa varud, ja sa ei tea seda. Sa klikkinud lingile, saatis ostis või müüakse midagi, mis sa ei tahtnud seda teha. See on see. [01:35:25] Cross Site Scripting, et siin, sa möödaminnes läbi muutuja q, lähitulede asemel mingi väärtus, ehk q on nagu nimi. Nii lähitulede asemel q võrdsete Davin või midagi sellist, Kui te ei kasuta HTML erilist tähemärki, kui te ei pääse seda veendumaks, et see on OK, siis ma võiks sündis asemel, oletame, et siin ma räägin print või midagi sellist, siis ma saaks edasi siin script kõne. [01:35:51] Niisiis, selle asemel lihtsalt saada muutuja Oleksin seejärel käivitada seda skripti kõne. Nii sees, et script helistada, mida see teeb? Dokumendi dot asukohta, mis läheb asukohta muuta dokumendis. Nii et ma lähen ümber kuhugi mujale. Seda nimetatakse halb poiss Selle näite puhul väga hea. Ei saa mõelda sõna. Ja siis, mida on isegi hullem on see, et ma lähen et siis pane cookie, mis on umbes muutuja mul sellel veebilehel. Ma lähen, et seada see võrdub Dokumendi dot küpsise. Seega, ma lähen varastada teie küpsise. Ja ma lähen ümber mõned andmed veebilehel et te ei tohi pääseda. Ja see kõik juhtub, sest sa oled ei pääseks, mida olete näinud. Jah? [01:36:29] Sihtrühm: Nii lihtsalt selgeks teha, et see on vulnerable.com et on tundlikud selles. Nii et link võib avalduda igal konkreetsel lehel. Keegi klõpsab seda, läheb vulnerable.com. Sul on küpsise vulnerable.com. Oletame, et Facebook on haavatav, nii facebook.com. Sul on Facebook küpsise. Mida see teeb, et sa oled läheb facebook.com, see on kohe suunan Teil badguy.com, kuid kaasa arvatud oma cookie teavet. Nii et see on kiire suunamine, kuid oma Facebooki cookie on lisatud, et suunata, ja see, kuidas nad [kuuldamatu]. Gabe: Jah, seal on väga keskmine asjad et inimesed saaksid teha, kui seal on see. Näiteks, kui Facebook lubatud kõik, et muuta oma kasutajanime ja nad ei tee midagi meelerahu kontrolli, et sa võiks lisada JavaScript asi, mis muudab oma pilt hamster. Ja see lisab sama JavaScript arvesse kõiki, kes näeb oma lehele. Nii kõigile, kes näeb oma lehele on sama asi kasutajanime. Ja kuna see on viirus, see levib eksponentsiaalselt. DAVIN: Me vahele viimase üks, ja siis me teinud. Nii et see on lihtsalt üks näide. Nii et see on nad pole põgenevad oma SQL tabeli. Nii saab vähendada sellega. Nii et sa tahad põgeneda asju. See oli eelmises näites rist saidi skriptimine. Sorry me jooksime natuke hilja. Homme, sorry! Homme on meil tööajal. Nii office tundi Cabbot 8:00-11:00. Tööajal on rangelt viktoriini küsimustele.