[00:00:02] [Predvaja glasba] HANNAH: Živjo, vsi. Hvala fantje toliko prišli ven v gnusno vremena za en kviz pregledati sejo. Kot veste, kviz eno je to sredo. Tako smo šli skozi kup temah. Davin: Hej, lahko rečem, nekaj resnično hitro? HANNAH: Ja, Davin dogaja reči nekaj resnično hitro. Davin: Žal mi je. Samo resnično hitro, če imate vprašanja o kvizu, lahko greš na spletu. Pojdi na 2014 kvizu enega, o kvizu. Ima logistiko o kam iti, če bi šel. Če ste sočasno vpisanih, smo dogaja, da imajo ličila kviz ob 5:30. Ali pa, če mi je poslal vprašanje, imate kakšno drugo vprašanje. Vendar 05:30 je make-up čas v sredo. Ampak, če imate vprašanja, splošna vprašanja, na spletu je vse logistike. Zato preverite tam prvi. [00:00:47] HANNAH: Awesome. Torej, tukaj je velik seznam tem da bomo šli skozi danes. Jaz grem za kritje vseh C stvari, ki je prvi stolpec. Torej, C stvari, ki smo zajeti po kvizu ničelno. Začenši s povezani seznam, ki vključuje kazalce. [00:01:05] Vse je v redu, tako da bomo to videli v zadnji seji pregledu, tako da sem šel skozi to je malo hitreje. Samo dvigni roko, če hočeš, da upočasni ali obravnavajo nekaj več. Ampak uporabljamo smo povezani seznamov, ker smo začeli v C z nizi. In nizi so super, ampak Problem je, da imajo fiksno velikost. Povezani seznami nam omogoča, da ustvarite dinamično velikosti podatkovne strukture. [00:01:28] In imamo naše osnovne dejavnosti, vstavljanje, brisanje in iskanje. In ne moremo storiti vložek v v najslabšem primeru konstantna čas če smo pravkar dal na samem začetku. Brisanje in iskanje, najslabše Primer velik oh časa n. Torej še enkrat, samo da flip s pomočjo teh slik, Vem, da smo videli te zadnjič, vendar smo želite spremljati naše povezanega seznama jih sledenja glava našega povezani seznam. Saj vemo, da vsak od naših vozlišč je le, da bo točka za Naslednja vozlišče v našem povezani seznam. [00:01:58] Torej, to je, kako vodimo. Čeprav to niso stalno kosov pomnilnika, jih lahko najdete s samo po različnih puščic. Tu je naša struktura za povezani seznam vozlišče. Videli smo to zadnjič. Imamo struct vozlišče. In ima dve lastnosti. Številka ena, dejanska Vrednost želimo shraniti. V tem primeru, je število. To je lahko niz, bi bilo biti char, karkoli želite. In potem moramo slediti levo vozlišče v našem povezani seznam. Tako, da se dogaja, da kazalec na naslednje vozlišče. Če ste bili samo delaš iskanje, tako kot sem rekel prej, bi si morali slediti puščice navzdol. Vstavljanje, bi si beležite kje je preostanek svojega seznama. In želite preusmeriti glavo poudariti, da naš nov element, ki V tem primeru je eden, in potem bo ena točka V preostalem povezanega seznama. Torej še enkrat, vem, da je to malo malo ponovitev iz kviza nične. Zato moramo biti zelo previdni O vrstnem redu, v katerem smo narediti te pointings zato ne zmanjkalo zadnji seznama. OK, na vsa vprašanja z Samo posamezno povezano sezname? Super, OK, kul. [00:03:06] Torej, zdaj smo šli na nekaj le nekoliko bolj zapletena, dvojno povezani seznam. Torej poleg skladu tir naslednje vozlišče, želimo tudi, da bi spremljali predhodnega vozlišča. In to nam omogoča, da se, če smo na neki točki v našem povezani seznam, Ne samo iti naprej, vendar Ponovil je tudi nazaj. Saj, kot smo videli v posamič povezani seznam, Če smo bili v nekem vozlišču in Naenkrat smo se odločili, pravzaprav, hočem iti desno vozlišče pred menoj, da bi morali iti vse pot nazaj v glavo in Ponovil skozi, dokler ne boste našli vozlišče ste iskali. [00:03:35] Tako da to naredi stvari nekoliko lažje, saj smo poskuša Ponovil preko našega povezani seznam. Ampak to od nas zahteva, da spremljate enega Več kazalec, tako da ena več vozlišče zvezda. Vse je v redu, tako da tukaj pride zabavni del. Bomo vaditi izvajanju odstrani za dvojno povezanih seznamov. Torej je to nekaj, kar je povsem pošteno igro za kviz. Je zbralo na preteklih kvizov. Torej je vsekakor pripravljena kodo malo v C. Ne pozabite, da z vsemi to zabavno PHP in JavaScript, imamo še vedno, da se spomnimo storiti C. Torej krtačo na da Če imate občutek, zarjavel. [00:04:12] Vse je v redu, da vidimo, če to lahko naredimo. OK, v redu. Torej bomo poskušali urediti pravico tukaj, in upam, da to gre, kot je bilo načrtovano. Vse je v redu, ali kdo želijo, da bi me predlog, kako naj začnem? Edina predpostavka sem odločitev je, da sem že je struktura opredeljena, enega sem pokazal na zadnji strani, na zadnji diapozitiv. In sem shranjevanje vodja mojega povezana Seznam v neki kazalec imenuje seznam. Ali kdo želel, da me je začelo? [00:04:42] OBČINSTVO: Ali lahko ustvarite novo vozlišče, da pokličete po seznamu? [00:04:45] HANNAH: Awesome, tako bomo ustvarili novo vozlišče plaziti po seznamu. Všeč mi je, da je. Bom ga imenujemo kazalec, če je to v redu. In kje naj bi prvotno začeti? [00:04:57] OBČINSTVO: Verjetno na Vodja seznama. HANNAH: Beautiful. Želimo, da začnete na čelu, ki je Sem rekel, se dogaja, da se shranijo v seznamu. Super. Doslej je tako dobro. In zdaj, naš cilj je, da Ponovil skozi seznam dokler ne najdemo vozlišče z vrednost n, ki ga želimo izbrisati. OK? [00:05:13] Torej, zdaj je del, kjer želimo Ponovil skozi. Ali lahko kdorkoli predlagamo način za ponovitev prek? [00:05:19] OBČINSTVO: zanka. [00:05:20] HANNAH: zanka. Obožujem ga. Natančneje, lahko poskusite z while zanko. OK, in vemo, da smo dosegli konec našega seznama Kdaj Kaj? OBČINSTVO: Ko je kazalec null. HANNAH: Ko je kazalec null. Lepo, mi je všeč. OK, v redu. Tako mi je žal, če je moja bounding brace je vrsta padca zaslon. Smo ga prinesli nazaj. OK, v redu. Kaj je naslednje? [00:05:48] Torej vemo, da želite izbrisati vozlišča, ki ima vrednost n. Torej, kaj je najti v primeru, ko smo dejansko našli naše vozlišče. Torej, kako bi jaz preverite, ali? Jaz bi samo rekel, če kazalec, in potem, če sem želijo, da bi dobili vrednosti od kazalca, Sploh arrow n, enaka n, parameter da je s to funkcijo, vozlišče, ki ga želimo dejansko izbrisati. Vsa vprašanja za obdobje do tu? Vse je v redu. OK, zdaj pa pripraviti na hitro sliko na ladji, da vizualizirati to. [00:06:24] Torej, recimo, da je naša lepa vozlišče. In to ima svojo vrednost, bom samo rekel štiri. In to kaže na naslednji vozlišče v našem povezani seznam. In nič ni pred njim. Torej imamo Prejšnja kaže na nič. V tem primeru moramo poudariti nazaj. OK, samo ustanovitvijo my povezani seznam tukaj. In imamo seznam, ki kaže te strukture, da začnete s. Bom pripraviti še eno za Zaradi popolnosti. OK. Jaz bom to točko naprej. In bom poudariti, da je eno nazaj. Ups, žal. Ja, dobil to nazaj. Še enkrat. OK, pa gremo. Vse je v redu, je dobil. OK, tukaj je naša slika. [00:07:21] V redu, zato smo želeli razmisliti dva primera. V prvem primeru je, če vozlišče želimo izbrisati je že na samem začetku našega seznama. In potem, drugi primer, da želimo treba upoštevati, je, če je kje drugje. Razumem, da je to popolnoma grdo risbo z vsem svojim brisanjem, vendar upam, da bomo poskušali to jasno z nekaj kode. [00:07:40] OK, tako da je kritje primera kjer smo ugotovili, naše vozlišče, in to na zelo začetek našega povezani seznam. Kdo mi predlog tukaj, kaj Sem moral storiti, da dejansko odstraniti našo vozlišče? To je precej zapleteno. OK? [00:07:56] OBČINSTVO: Moraš sprejeti vozlišče, da bi bili pred njim in bi bilo poudariti, da tisti, ki bi se po njej, in sprejeti vozlišče, ki bi po njem in bo to kaže na vozlišču pred njim. HANNAH: Točno tako. OK, tako da je to res where-- imamo dva primera. Imamo primer, ko je vozlišča, ki iščeva je sprednji del seznama. OK, potem pa se zgodi, da vas opisana je drugače, kajne? To je nekje drugje v seznamu. Torej, ste dejali, da moramo pogled na vozlišču prejšnjega, in da prejšnje vozlišče opozarjajo na naslednje vozlišče. Torej, recimo, da smo poskuša vzeti pet po mojem zelo grdo risbo nad tukaj. Želimo, da se prepričajte, da štiri zdaj opozarja na šest. Štiri v naslednji točki do šestih. In šest na prejšnje točke do štirih. To je naš cilj tukaj, kajne? To je tisto, kar sem ti misliš pravkar rekel tam. [00:08:56] OK, kaj je dobil, da je prvi del. Naredimo še Prejšnja kazalec prejšnje. Torej, štiri je zraven mora kazati na kaj? Točno, v tem primeru, šest. Torej bi morali reči kazalec, naslednji. OK? Vse je v redu. Torej, dajmo se znebite tega grdo sliko in poskušali sestaviti nekoliko lepše enega. Imamo seznam glavo tukaj. In ki kaže na prvo vozlišče v naša povezani seznam, kar smo rekli, je štiri. Tukaj je naš drugi vozel, pet. In naše tretje vozlišče, šest. Samo poskušam pripraviti točno isto slika, samo malo bolj gladko. OK, tako da je poleg štirih prvotno opozarja na pet. Pet v naslednji točki do šestih. Šest je prejšnje točke na pet. In pet na prejšnje točke do štirih. Toliko lepše! OK, v redu. [00:10:04] Torej sedaj, kaj smo naredili prav Tukaj, ta vrstica kode, ki pravi kazalec Prejšnja zraven, tako, kaj to pomeni? To pomeni, če gledamo na pet, pojdi na prejšnje vozlišče, in to je zraven bi zdaj točka do pet je naslednji. Torej v bistvu, kaj to delaš je, da je izbris puščico in zaradi česar je preskočite desno čez pet. Je to jasno? Vem, da se lahko malo nedorečena. Vidim nekaj pokima glave. To je dobro. OK, v redu. Zdaj, kaj je naslednji korak? [00:10:39] Sem ponastavitev naslednjo. Zdaj, kar drugi arrow moram spremeniti? Tale tukaj. Šest je prejšnja. Nočemo, šest je prejšnja izpostaviti pet več. Želimo pa, da kaže na štiri. Ali to sliko smisla? Sedaj bomo lahko dejansko traja pet out. Torej, kaj je dobil ta kos. Kaj naj storim, preden sem ponastavitev šest je prejšnja štiri? Morebitne tam ideje? [00:11:14] OBČINSTVO: Osvobodite vozlišče med jim z določitvijo, da null? HANNAH: Cool. Definitivno, naš končni cilj je bo osvoboditi vozlišče. Tako smo lahko storite, da prav tukaj. Brezplačna kazalec. Absolutno. Vendar je še pred tem, dajmo just-- naš cilj pravico Tukaj je določiti kazalec prihodnjega Prejšnja enak kazalec prejšnje. Vem, da to postaja prekrita. OK, kaj je take-- kul. Lahko vsi videli to bottom line? Ali pa je to super majhen? [00:11:50] Torej, preden se izvrši ta vrstica tu, hočemo se prepričajte, da Naslednji kazalec ni nič. Ker če kazalec prihodnjega je null, kakšne napake bom dobil, ko sem poskušal reference null kazalec? OBČINSTVO: Seg napaka. HANNAH: napaka seg, lepo. OK, tako da, če to ni null, potem bomo mogoče ponastaviti. In imamo šest točko ponovno na štiri. Vprašanja do te točke? Ja? [00:12:17] OBČINSTVO: Na vaše prvo če izjavi, kajne pomeni, da ima puščica Naslednji, ali [neslišno]? HANNAH: Mislil sem pointer arrow n. Torej v bistvu, kaj sem poskušal narediti se pravi, je trenutno vozlišče, da sem ponavljanjem več, sedanja vozlišča, ki Gledam, sem shranjevanje v pointer. In želim vedeti, kazalec je Vrednost, ki se v tem primeru je n. In želim videti, je vozlišče Iščem za vozlišče sem cilj izbrisati? Torej, to je, zakaj imamo tukaj kazalec n. [00:12:47] OBČINSTVO: Torej arrow dogaja vn, nastavite vrednost in ga shranite v vozlišču z imenom n? [00:12:55] HANNAH: Torej, to je kot, če sem Skozi ta povezan seznam in kaže na pet. Če želim, da bi dobili te vrednosti, če Želim, da bi dobili to število, 5, Moram kazalec puščico n. Cool? Ja. [00:13:07] OBČINSTVO: je n ime spremenljivke? HANNAH: Da. Torej, če bomo flip nazaj eno diapozitiv, n ime vrednosti notranjosti vozlišče v našem povezani seznam. In vem, da lahko dobite malo malo zmedeno, ker smo tudi kliče stvar da želimo izbrisati n. Torej, to je, če se to ena vrstica prihaja. Ja? [00:13:27] OBČINSTVO: Kaj imaš [Neslišno], kako delujejo? Kazalec [neslišno]? [00:13:35] HANNAH: Seveda. Se pogovarjaš about-- ki črta? OBČINSTVO: zadnja vrstica [neslišno]. [00:13:44] HANNAH: Seveda, v redu. Torej, si oglejmo na sliki v Da, da poskusite to razložiti. Žal mi je, za kamero, je bilo vprašanje, moremo razložiti kazalec arrow Naslednji kazalec prejšnje. OK, recimo, da smo ob petih in naš cilj je, da se črta pet. Torej kazalec zraven, kateri od teh tri vozlišča nam to daje? To nas pripelje do šestega vozlišča, kajne? [00:14:10] OK, zdaj smo prosi za šest je prejšnja. OK? In smo ponastavitvi to enaka do štiri, kar se je zgodilo, da se je pet prejšnje. Vem, da je super težko slediti. Res priporočam rišete slike če dobiš vprašanje, kot je ta. Ja? [00:14:30] OBČINSTVO: Je razlog, da nimamo [neslišno]? [00:14:37] HANNAH: Točno tako. Torej je vprašanje, zakaj ne potrebujemo tukaj preveriti? Zakaj ne moramo preveriti, kazalec prejšnja ni enaka NULL? In to zato, ker smo jih že izločiti v primeru, če je kazalec na samem začetku. Zelo dobro vprašanje. Karkoli drugega na tem? OK, v redu. Torej, kaj je tako končal. Mi smo skoraj tam. [00:14:59] Pa kaj, če je to na glavi? Kaj če bi namesto poskuša izbrisati pet, smo dejansko želel črtati štiri? Kaj bi morali storiti? No, želim ponastaviti mojo glavo, kaj? Je zakričal? OBČINSTVO: ena po njej. HANNAH: Beautiful. OK, tako želijo smo seznam, ki se kaže da ne glede na naša pointer naslednji vozlišče. Dobro. In samo za popolnost ih sake, bi mi želeli preveriti, da tako dolgo, kot naš seznam ni nič, dokler je naš seznam ni prazno, nato pa želimo določiti naša prejšnja enaka null. Vprašanje tako daleč? En korak stran from--? [00:15:53] OBČINSTVO: Ali bi bilo, če Seznam ni enaka NULL? [00:15:55] HANNAH: Ja, ste popolnoma prav. Tako mi je žal. Je seznam ni enaka nič. Super. Poskus, da bi vse to na zaslonu. To je nekako padli. Oprostite, fantje. In nenazadnje, vsi moramo storiti, je donos. OK. To je bilo veliko gnetejo v res hitro. Vzemite si trenutek, da si tega konec. Povej mi, če imate kakršnakoli vprašanja. Ja? [00:16:20] OBČINSTVO: Če je na seznamu glava, then-- počakajte, nevermind. [00:16:26] HANNAH: OK, dobro. Torej, to je, če seznam je na glavi, ga odstranite, da karkoli bomo vstavljena. Ja? [00:16:31] OBČINSTVO: Ali lahko pojasnite, Prvo, če še enkrat izjavo? Če kazalec n enak n? HANNAH: Seveda. Torej, naš cilj tega celotnega funkcije je izbrisati vozlišča, ki ima vrednost n. Torej, če bomo našli, saj smo ponavljanjem preko našega seznama, vozlišče z vrednostjo n, ki je ena želimo izbrisati. Torej vse brisanja zgodi znotraj tega veliko, če izjavo. Ali je to smiselno? Cool. Ja? [00:16:59] OBČINSTVO: Mogoče si ne more videti da, vendar ne boste potrebovali tudi linijo za pomikate po seznamu? HANNAH: Awesome. Oglejmo bi to gor malo, in bomo vrgli to pravico v dnu. Mogoče bi svet imel bila nekoliko boljša ideja. Torej, kako bi jaz premakniti kazalec naprej? [00:17:17] OBČINSTVO: Pointer enak kazalec plus ena. [00:17:20] HANNAH: Beautiful. Tako da nam omogoča, da Naprej ponavljanjem skozi. OK. OBČINSTVO: Ali ne bi bilo treba drugega? HANNAH: Še enkrat? OBČINSTVO: Ali ne bi bilo treba drugje po veliki stari če Izjava [neslišno]? HANNAH: Kateri del? Žal mi je. [00:17:38] OBČINSTVO: prečkanje, ne bi smelo biti tudi drugje? HANNAH: Absolutno bi lahko imeli drugega. Ker imam pravico do povratka tam, ne potrebujete drugega. Ampak ja, dobro vprašanje. OK, ja? OBČINSTVO: Lahko razmišljamo o kazalca da se premika skozi seznam kot pri na vrednosti vsako vozlišče v seznamu? Ali pa bi morali razmišljati o njem kot vrsta zunaj seznama? [00:18:00] HANNAH: Bodisi eden je v redu, mislim. Tako sem jo predstavljate, je Rečem, OK, sem kazalec. In to sem jaz. To je moja roka. Grem, da kaže na drugačen stvari, ki jih želim Ponovil skozi. Najprej grem na točko z glavo seznama. In da me Jaz sem pravi dogaja, da kaže na štiri. In tako se mi, da je zunanja na seznam, Lahko kažejo na vsakega od teh elementov. Zato mislim, da sam od sebe kot kazalec. OBČINSTVO: Torej, če izbrišete eden od teh elementov, ste sami izbrišete, tako rekoč. HANNAH: Točno tako. Tako da izbrišete stvar ste obrnjena na. Torej, v primeru, da smo videli, kje smo poskuša izbrisati pet, ko sem poudaril, da pet, Želim izbrisati stvar, ki sem poudaril, da. Ravno prav. Ja? OBČINSTVO: Ali smo poskrbeli primer, kjer je n ni na seznamu? HANNAH: Če n ni na seznamu? Vse, kar se bo zgodilo je, da ste bo ponovitev prek in izbirajte skozi, nato pa boste priti kazalec počutje null, in potem si bo treba storiti. [00:18:48] OBČINSTVO: Torej imamo vrniti ničesar? HANNAH: Mi lahko. Tako, da če je definirano ta Funkcija, sem rekel, da se vrne nična glede na to. Vendar bi lahko imeli nekaj kot vračanje celo število, in so se vrnili negativna 1, če ne. Nekaj ​​takega. Vprašanja with-- ja? OBČINSTVO: [neslišno]? HANNAH: Oprostite? OBČINSTVO: [neslišno]? HANNAH: Seveda. Tako da je actual-- ko smo jih storiti vse to delo premikanje vse te puščice okoli, naša celotna Cilj je bil, da se znebite vozlišča da iščeva. Torej, v tem primeru, sprostitev pointer, če sem poudaril, da pet, to je kot izbris te srednji vozlišče. To je prost kazalec del. Da je smiselno? [00:19:29] OBČINSTVO: Torej niti pomislil si ne [neslišno]? [00:19:31] HANNAH: Torej smo predpostavili na začetku smo imeli nekaj seznam, ki je bil already-- jim je dal to skupaj. Torej, da bi lahko zgradili to Seznam, sigurno so [neslišno]. Cool. Vse ostalo s tem? Ja? [00:19:46] OBČINSTVO: Kaj pa, če seznam ni enako ničelno črto? [Neslišno]? HANNAH: Right here? OBČINSTVO: Ja. HANNAH: OK, vse delam se bom samo pazite, da preden sem poskušal na seznam sledenja, preden sem poskušal dostopati do prejšnje, Želim, da se prepriča, da to ni null, da ne dobim napako SEG. Cool. [00:20:08] OK, vem, da je to precej Veliko priti skozi. Torej bo to slide biti so na voljo za vas. Tako da lahko greš skozi njo podrobneje. Ja? [00:20:17] OBČINSTVO: Zakaj seznam [neslišno]? HANNAH: Seveda. Torej seznam res kaže na Ta element tukaj, Prvi element v seznamu. Tako da ne more imeti prejšnje. Ja? [00:20:31] OBČINSTVO: Ali kazalec točko Na istem naslovu v pomnilniku? Ali to kaže na enako Naslov v spominu kot vozlišče da je obrnjena k? [00:20:40] HANNAH: Ja, pa opozarja s tem vozlišču v pomnilniku. [00:20:43] OBČINSTVO: Ja, tako ko [neslišno]? [00:20:47] HANNAH: V smislu, ja. OK. Dobro, pojdimo skupaj s tem. In če imate več vprašanj, ostani na koncu, in lahko gremo skozi to še enkrat. OK, v redu. Zdaj smo dobili, da se premaknete na da hash tabele, poizkusih in drevesa, ki imaš super poznajo in-p nastavite pet, Speller. [00:21:04] Torej hash tabela je le matrika s posamezno povezanih seznamov ali dvojno povezani seznam, ki prihajajo izven nje. Torej imamo neko o asociativni array. In kako vemo, katere od teh nizi vedra, da bi dobili v, bomo uporabili funkcijo razpršitve. Torej, v tem primeru je lahko kdorkoli kdo bi si mislil, da funkcijo razpršitve bi zgolj na osnovi nekaterih za vhod in izhod? [00:21:31] OBČINSTVO: Pismo število abecede. HANNAH: Točno tako. To samo jih postavlja v abecednem vrstnem redu. Vse, ki se začne z Je dal v prvo vedro. Vse, kar je z B je dal v Drugi vedro, tako naprej, in tako naprej. Super, OK. In razpršilna funkcija je vsako funkcija, ki ima v besedi in vam bo povedal, kaj bucket spada v. Torej, katere vstop v našem Niz spada v. [00:21:55] Torej, vsakič, ko dam hash funkcijo besedo, to naj bi mi povedal, enako postavite vsak čas. Torej, če bomo uporabili funkcijo razpršitve iz prejšnjega drsnika kjer smo razvrščanje po prva črka abecede, vsakič, ko sem dal moj hash funkcija "jabolko" mora vedno mi vrni 0. Torej, če imam jabolko postaviti v mojem hash tabele, če dam "jabolko" z mojo hash funkcijo, to bi rekel, pojdi ga dal v vedro 0. Če iščem jabolko v moji hash tabele in rečem, kjer bi jabolko v živo, prosite hash funkcijo. In pravi, pojdite na bucket 0. Vse v redu? Vprašanja z hash funkcije? Super. [00:22:34] Tukaj je nekaj več Podrobna razlaga kaj lahko razpršilna funkcija izgledal. Vse je v redu. Zdaj, problem z hash funkcije, je v idealnem svetu, bi imeli le eno stvar na posamezne segmente. Toda v resnici, tam je Ne samo ena beseda ki se začne z A. Tam ni samo ena beseda, ki se začne z B. Torej V tem primeru, če želimo nenadoma dobili "berry" in želimo, da ga v naši hash tabele, in vidimo, oh, ne, banana je že tam, kaj bomo storili? [00:23:03] No, imamo dve možnosti. Prva možnost je, linearna sondiranje, ki pomeni le Poiščita Naslednji prazno vedro. Poiščita naslednjo prazno vnos niza. In samo da "berry" tam. Zato vem, da je moral iti z banano v vedro eno. Ampak ga samo dal v vedro tri, ker vedro tri je prazna. Druga možnost je verjetno kaj si izvajala v p-set, kjer vas imeli ločeno veriženja. Tako da vsak od vaših vedra, vsako od vaših matrike elementov, ne le ima eno besede, ampak dejansko ima kazalec na seznam besed. Tako da, če boste imeli banana v hash tabele in nenadoma je želel dodati jagodami, ni problema. Samo dodamo jagodo na koncu, ali začetek, vašega povezani seznam. OK, super. Vprašanja z hash mize, preden gremo na? [00:23:58] Vse je v redu. Drevesa in poskuša. OK, tako da je bila to ena možnost za izvajanje slovar. Lahko bi naredili poskus. Torej, to je posebna vrsta drevesa, ki obnaša kot hash tabele na več ravneh. Tako da boste videli sliko kjer imate nizom, ki opozarja na kup nizi ki kažejo na kup nizi ki kažejo na kup nizi. In bomo videli, kaj da bi izgledal na prihodnji stekelce. In bolj splošno, drevo je le vsaka struktura podatkov v katerem so podatki organizirano v neki hierarhiji. Torej, ko smo videli, imamo neke vrste razumevanja o najvišji ravni, naslednja stopnja, Naslednja stopnja, višji nivo. Torej, to je verjetno najbolj jasno z nekaterimi konkretnimi primeri. Torej, tukaj je naše drevo. Vidite lahko, da ji Ima posebne vrednosti da začnemo s tem korenskega vozlišča, ki je eno. In bomo lahko spustimo skozi naše drevo. [00:24:50] Binarno drevo zlasti vrsta drevesa. In samo specifikacija za binarno drevo je, da je vsako vozlišče največ dveh listih. Tako ne boste videli vse o imajo ti vozlišča tri ali štiri ali kakšno drugo število listov. In potem še bolj specifične je dvojiško iskalno drevo kjer je vsak vozel na levi vozlišče se dogaja, da imajo vrednost manjša. In vsaka vrednost Pravica se bo večji. Torej, če ste videli 44 je na naši korenu, levo, 11, 22 in 33 vsi manj kot naše korenine. In na desni so vsi številke bigger-- 66, 55 in 77. In ta lastnost velja na vsaki ravni drevesa. [00:25:37] Torej, ko gremo na 22, 11 in 33, še 11 je manjši od 22 in 33 je večji od 22. In to omogoča lažje iskanje ker če iščemo več, vemo točno kateri podružnica slediti navzdol. Zato bi bilo treba to vas je spomnil, malo binarnega iskanja. Ja? [00:25:56] OBČINSTVO: Torej, ko ste opisuje binarno, ste rekli, da ima največ dveh listih? HANNAH: Mm-hm. OBČINSTVO: Bi imel manj? HANNAH: Ja. Torej, recimo, na primer, ni imela celo število stvari in ga ne bi napolnili vse vaše listi, to je v redu, če eden ima. OK? Super. Katera koli druga vprašanja na drevesih? OK. [00:26:16] Nazaj na naših poskusih, kot sem govoril o tem malo prej, kako imamo te nize več ravneh. Torej, v tem primeru, bomo začeli na vrhu. In bomo lahko sledili vsako dano besedo dol. Torej, recimo, da smo želeli iskati Turing. Začnemo pri T, mu sledimo navzdol na matriko, ki vsebuje U, in ji sledimo navzdol, dokler ne bomo doseže to malo delto, ki pove nam, da si našel besedo. Jasno o poskusih? Kaj bi hodil tja? Ja? OBČINSTVO: Ali simbol delta morali zasedajo prostor v poskusu? HANNAH: Ja, tako pa ne nujno treba niti delta. Vendar moramo na nek način do Obvestite naše computer-- žal, tako da vemo, da je TUR ni beseda. Ker recimo, da nismo imeli Ta koncept delta, ta koncept za čestitke, ki jih je našel besedo, da bi šel skozi in Ponovil T-U-R, in potem pravijo, super, sem ga našel! To mora biti beseda. Ampak to je res ni. Želimo cel Turing biti beseda. Torej, moramo imeti nekaj v Konec, ki pravi, čestitke, ste ugotovili legitimno besedo. OBČINSTVO: Torej, če ste imeli kot 26 črk v abecedi, bi si dejansko morali 27 ključev v poskusu? [00:27:24] HANNAH: Awesome, ja. Torej v bistvu, mislim, da bo na naslednji diapozitiv. Ta-da! Kje, če imate vozlišče v poskusu, da ste dogaja, da imajo 27 otrok namesto 26. Vsa vprašanja s tem? Ja? OBČINSTVO: Zakaj poskuša prevzeti tako veliko prostora [neslišno], kakor greš? Zato se šteje, da je [neslišno]? HANNAH: Seveda. Pojdimo nazaj. Vprašanje je, zakaj se poskuša toliko večji kot nekaj podobnega hash tabele. Tako za vsako od teh stopenj, tudi če oni ne sestavijo tukaj, moraš imeti vseh 26 znakov. In razlog, da ne morete pravijo, oh, ampak kot za Turing, I ni treba, da imajo katerokoli od tistih, Iste stvari na ravni U. No, če nenadoma želel dodati nekaj, kar je bilo kot T-H, kar bi morali imeti Zmožnost dodajanja to besedo. Torej, za vsako posamezno črko, boste imeli da imajo kup nizi, ki prihajajo izven nje. Tako da lahko vidite, kako bi ga dobil res velika, zelo hitro. Katera koli druga vprašanja? Vse je v redu. Ja? [00:28:29] OBČINSTVO: Ko se poskuša hitreje kot hash tabel? [00:28:33] HANNAH: Ko se poskuša hitreje kot hash tabel? Torej, če si imel res slab razpršilna funkcija. Torej, recimo, da sem bil všeč, tukaj je vaša hash funkcija. Ni važno, kaj beseda si mi dal, sem vedno dogaja, da ga v začetku polja 0. In tako smo na koncu s samo polaganje vse v enem velikem dolgo povezani seznam. In tako bi lookup čas sprejme v najslabšem n, če je na samem koncu našega seznama. S poskusi smo morali ponoviti skozi črk v besede. Torej, tudi če smo dodali kup več besed v našem poskusu, da nas ne bi več najti določeno besedo. [00:29:09] Vse, kar moramo storiti, je, za Na primer, v tem primeru, recimo iščemo zoom, mi bi morali ponoviti čez Z-O-O-M, štiri črke. Tako, da je samo Dolžina besede zoom. Ni važno, koliko več besed smo se v tem poskusu. Mi lahko vedno dobite v teh štirih korakih. Super. Ja? [00:29:32] OBČINSTVO: Torej [neslišno] je matrika, kajne? [00:29:34] HANNAH: Mm-hm. OBČINSTVO: Če ste išče [neslišno] bi morali iti skozi Vaše matrika najti [neslišno]? HANNAH: Seveda. OBČINSTVO: Ali ni to trajalo več časa? HANNAH: Če bom pravijo, da je moje zaporedje vedno bo A, B, C, D, E, F, G, bla bla bla, tako da, če sem vedno vedel, da je V istem točno določenem vrstnem redu, če sem vedno vedel, da je po abecednem vrstnem redu, Jaz lahko samo povem, O je število tako in tako v abecedi. Samo skoči na to mesto. Saj se spomnite, z nizi, lahko dostopate vsak element tega polja v stalna čas, če vemo, kje smo iskali. Ja? [00:30:09] OBČINSTVO: Na prejšnji [neslišno] 27 drsi, ampak 26 za prvo. [00:30:14] HANNAH: Oprostite? [00:30:15] OBČINSTVO: Ali ni prva ena 0, tako da ne bi bilo 26? [00:30:18] HANNAH: Seveda, tako da, ko smo rekli, 27, ki je dogaja, da nam indeksi 0 do 26. Ampak, če ste dejansko računajo jih ven, da se dogaja, da je 27. Dobro vprašanje. Kaj drugega? Ja? [00:30:31] OBČINSTVO: Torej se poskuša počasneje kot hash tabel? [00:30:34] HANNAH: poskuša se bodo, v teorija, hitreje kot razpršene tabele ampak zasedejo več pomnilnika. Ja? OBČINSTVO: [neslišno]? [00:30:45] HANNAH: Žal mi je, nisem vas slišala. OBČINSTVO: [neslišno]. 0 do 25 vam 26. [00:30:54] HANNAH: od 0 do 25, bi dam 26, desno. [00:30:56] OBČINSTVO: In potem [neslišno]. HANNAH: Right. Tako se je število smo podrobno je Število stvari v naši matriki. Torej, če imamo 27, to je dogaja, da nam je 0 preko 26, ki bo nam prostor za, v tem primeru, Ne bom tudi opuščaj. Tako smo dobili od 0 do 25 let, so prvih 26 črk abecede, ali vseh 26 črk abecede. In potem, da je zadnji stvar, na začetku 26., je bo poizvedba oznaka, ali delta. Kaj drugega? Super. Izgubil sem prostor. OK, v redu. [00:31:31] Tako smo že dotaknil tega. Ampak velik kompromis med poskusih in hash tabel je, da se poskuša zagotoviti, da teorija, konstantno poglej gor krat pa uporabite cel kup spomin. Vse je v redu, zdaj pa imamo nekoliko manj zapletene strukture, in bomo storili s C, in bomo premakniti desno skupaj. [00:31:49] Torej nizov, to smo videli V predavanju, kjer boste imajo nekaj podobnega skladovnica pladnjev kjer Zadnja stvar, ki si dal na sklad se dogaja da je prva stvar, ki jo snemite. Torej, to je tisto, kar v resnici definira kup je, da je zadnja stvar, ki si dal na se bo najprej stvar, ki jo snemite. In terminologija, ki jih uporabljamo če bomo dal nekaj, če bomo nekaj dodati naša stack, pravimo, da potiska. In če vzamemo nekaj off, ga imenujemo živahen. In če se bomo izvajati sveženj, smo morajo biti prepričani, da bi spremljali tako velikost in zmogljivost. Tako da se je skupno število elementov smo lahko držite in trenutno število elementov da smo gospodarstvo. [00:32:27] In zelo podobno, imamo čakalne vrste. In edina razlika je namesto s nizov, smo rekli, zadnja stvar, ki jo dajo na je prva stvar, ki jo snemite. Torej s čakalnimi vrstami, Prva stvar, ki smo mu v se bo Prva stvar vzamemo ven. Torej, to je tako, kot če ste dejansko podloga ki gre gor v trgovini in ste se pomagal, potem prva oseba v skladu bi morala biti prva oseba, ki bo pomagal. Zato, da bi čakalna vrsta. [00:32:52] Zato moramo slediti velikosti, zmogljivosti, in glavo, saj smo bo trajalo vse off spredaj seznama namesto hrbta. Vprašanja o tem? Vsa vprašanja C, ki so vas motijo? Podatkovne strukture, vsaka od tega zabavno stvari? Vse je v redu, v redu. Tako da bom jo izroči Alison do skok v nekaj več programov. [00:33:14] ALISON: Oh, bomo videli. Bomo videli, kako dobro delam tukaj. OK, bom poskusil in letenje skozi te stvari, fantje. Hannah šlo zelo v Globina na vseh svojih stvari. Bom poskusil, da bi vam pregled hiter blast tako da bomo lahko prišli do Davin z vsemi Fun JavaScript in varnostne stvari da morda ste dejansko želijo slišati več o tem. [00:33:33] OK, kot je dejal, Hannah, če imate vprašanja, Jaz grem prehitro, prosim, da mi sporočite. Bom odgovoriti na vprašanja, kot je potrebno. Torej, za začetek, bomo začeli z verjetno ena od prvih stvari, ste se naučili s spleta programiranje, dovoljenja. Torej chmod, vidva Moral bi bilo mojstri to z vsemi spletu programiranje, ki ste jih počel v zadnjem času. To je v bistvu samo ukaz da spremeni dovoljenja ali dovoljenja za dostop naših datotečnega sistema predmetov. Seveda, dejansko glej ti, če ste ki imajo kakršne koli težave z njimi Med vašimi problematičnih sklopov, ste morda uporabljajo ls -l, ki je dolgo, da bi dobili pogled nekako kot to, kjer ste dejansko videli vsi dovolilnice za datoteko. [00:34:16] In res, smo le, da bo šel skozi zelo hitro samo lepa veliko, kaj vsak od njih pomeni. Tako smo dni tukaj, ki samo stoji za imenik. Očitno je tukaj, smo videli rwx, ki je bralne, pisalne in izvršljiv. To bi lahko tudi zastopali bitov, kar bomo dobili v na naslednji strani. Torej vsak triad da smo videli tukaj, tako da je tri triade. Imamo rwx, r nič, X in R nič x za to prvo datoteko. To je to splošno strukturo. [00:34:49] Torej, imamo nekaj imenik. Imamo nekaj skupino uporabnikov s temi dovoljenji. Nekateri skupina, ki ima te dovoljenja, in svet, ki ima dovoljenje. Lahko si misliš o njih kot triado. Lahko si misliš o teh kot treh bitov. Tako da lahko imajo vrednosti kjerkoli od 0 navzgor do 7, ki je zato včasih smo vam chmod 600 namesto chmod rw karkoli. Bomo dobili na primer tam. Ampak v bistvu, lahko si misliš od teh bodisi kot samo rwx, ali si lahko misliš o njih, kot nekateri številko, kjer je to prva tukaj pomeni število med 0 in 7, ta druga pomeni število med 0 in 7, in tretji predstavlja število med 0 in 7, OK? [00:35:38] r je vrednost 4. w ima vrednost 2, in x ima vrednost 1, zato je ta dovoljenje tu bi chmod 700. Ker v tem primeru tukaj, da pravi, da je prvi bit tam je obrnil na. Torej imamo 4 za branje. Drugi bit je zrcaljeno na za w, ki je 2, tako da imamo sedaj 6. In tretji bit zrcaljeno na za x, ki je 1, tako da smo dobili sedem. In seveda, naša skupina in naš svet sta vsak 0. Torej je to tudi ekvivalent chmod 700. In jaz bi vsekakor poskušali razumeti preslikavo med tistimi. Nisem prepričan, če ima prišel na kvizu prej, vendar bi bilo Vprašanje, ki se lahko vprašam. [00:36:18] Samo malo se dogaja tudi nadalje v chmod tukaj, tukaj je zelo splošna struktura chmod klica. Torej, seveda, smo tu chmod. Reference, kaj se to nanaša, je ki jih dajemo teh dovoljenj za ali so se mi ob njih Dovoljenja stran od. Torej imamo tukaj v dovoljenja, kot smo vam dal chmod plus x, kot bomo kmalu videli. pomeni le, da so te specifične Dovoljenja za vsakogar. Daj jim za vse. Torej si lahko zelo dobro imeti u plus x ali g Plus X ali O Plus X ali večkratni teh. Tako, da je prvi del vedno bo reference. Kdo smo daje te pravice za, ali, ki smo jih vzeli od? [00:37:03] Drugi je operater. Torej vidva večinoma obravnavajo plus. To daje dovoljenja za kdor si jih daje, ker je minusa, logično, jih odstrani. Torej, nič preveč grozno tam. In potem načini je tisto, kar smo se pogovarjali o z branjem, pisanjem, ali izvršitve. Torej plus x pomeni dati izvedljivo Dovoljenja za vsakogar. In potem, seveda, na katerem posebno datoteko ali imenik. OK? Vsakdo dobro z chmod? Ni slab? [00:37:37] OK, tako HTML, vsak od vas dovolj star to-- MySpace starost? To sem poslal na moj oddelek, in dobesedno polovica ljudi me je pogledal, kot da sem nor. In sem si mislil, fantje, nismo, da je stara. Daj no. Torej HyperText Markup Language, to je pošteno samo način za vas prikazati nekatere stvari na spletu. Torej, to je označevalni jezik. To ni skriptni jezik. Ni logike v njem. To je preprosto spremeniti Prikaže se način nekaj. OK, tako da je pomembno razlikovanje, da bi. To velja označevalni jezik, ni skriptni jezik. [00:38:12] Torej, tukaj imamo oznake HTML. Ta diapozitiv verjetno večina tisti, ki bi morali biti seznanjeni z in je res všeč. Torej je očitno, imamo naša HTML tag, ki označuje, da je vse, kar je v med tema dvema bo HTML. Imamo nekaj povezav, ki Očitno vam bo dal Povezava na zunanjo spletno stran. Nekateri naslov, v naši glavi tukaj. In imamo telo z H1, ki je glava, tako da bo to bi bilo lepo in drzna in večji. In potem imamo nekaj p, ki je točka. Verjetno morate vedeti in biti seznanjeni s stvarmi všeč, kako vstaviti sliko, so obstajajo drugi zbiralni razredi? Jaz bi zagotovo udobno z div. Torej, ti imajo večino oznak da bi morali biti seznanjeni z. Seveda, tako kot vse, kar je v CS 50, seznam ni izčrpen. Zato poskrbite, da krtačo na to. [00:39:08] CSS, tako CSS, če kdo od vas gledal moj seminar iz pred dvema tednoma, je res samo način stil svojo spletno stran? OK, tako da imamo nekaj označevalni jezik. HTML, ki skrbi samo besedila in če bi bilo na strani. Ampak CSS je res tisto, kar je lepo. Lahko bi ti v HTML datotek, ampak bomo govorili o pozneje, Sem prepričan, da bi lahko bo naslednji diapozitiv, da je običajna praksa, in dejansko praksa, da smo v resnici spodbujajo, za vas, da jih loči, ko smo govorimo o MVC in to celotno paradigmo. To je res, kaj to povleče. [00:39:42] Torej CSS samo način postavil lepa. Stvari tukaj, kot so telo in #title in .info, ti se imenujejo selektorje in kaj storiti je, da izberete določene stvari v HTML datoteki in se uporabljajo ne glede na slog, ne glede na neke stvari, ki jih želijo, na ta poseben element vašo spletno stran. Torej, tukaj imamo barva ozadja in barva in družino pisave, ki je pa uporablja za kar je v telesu. Torej, če bomo pogledal nazaj, je ne bi veljalo za naslov. To bi veljalo samo za tisto, kar je V teh telesnih selektorjev, OK? [00:40:22] Z naslovom tukaj, to je bo ista stvar, Barva besedila pa modra je samo še vplivajo na tisto, kar je v Naslovne selektorji. Kakor tudi info tukaj, Besedilo bo rožnata, karkoli je info, ki je tukaj. Tako da je edina stvar, ki bi bilo roza na tej strani je datum, ponedeljek, 17. november, 2014. OK, tako CSS je samo način, da večji nadzor over-- ja? [00:40:48] OBČINSTVO: Zakaj imate uporabiti hash z naslovom? [00:40:51] HANNAH: Next slide, obljubim! Bomo tja. Torej, to je razlog, zakaj moramo uporabiti hašiš. Torej selektorji se na treh glavnih oblike, ki smo govoriti z vami fantje okoli. I fyou želite izvedeti več, tam je veliko tam. Obstaja velika CSS dokumentacijo. Tam je ime oznake, ki mora storiti s samo običajne oznake v HTML. Torej, h1, P, div, H2, te vrste stvari. In bomo lahko samo ime tiste, kot je. Torej, kot vidimo tukaj z telo, to je običajna oznaka. Tako smo lahko samo dal telo, ko govorimo v našem CSS datoteko. [00:41:26] Z naslovom, celotno Zato smo ima ta hash je, da smo imeli kaj šteje ID. Torej ID vedno edinstvena v HTML stran tako da, če ste ki se nanaša nanjo, si vem, da ste se nanaša samo za eno določeno stvar. Torej, v tem primeru je tukaj, z našimi h1 tukaj, CS 50 Pregled zasedanje, imamo id naslova. Tako, da se samo sklicujejo na to kos naše HTML, bomo naslov hash. Samo s konvencijo, se imenuje ID z hash pred njimi. Na enak način, vidimo info tukaj je razred. In tako razred s CSS, je označi kot dot razred ali dot karkoli, da razred. Torej, v tem primeru tukaj, to je info. [00:42:10] Zato sem ga vzel nazaj. Oba bi roza za naše CSS tukaj ker imata razred info. In v našem CSS datoteko, ki smo jih imenuje da karkoli z razredom info mora biti rožnate barve. Ali to smiselno? Ja? [00:42:27] OBČINSTVO: Če ste bili, da bi vse, kar je v telesu belo, in potem ste poskušali narediti nekaj v njem modra, bi to povzročilo težave? [00:42:34] HANNAH: Torej CSS kaskadnih slogov. Torej vse, kar je proti Dno bo prednost. Torej, če vam kaj s telesom, in vam bo vse belo, in potem kasneje spremenite naslov ali spremenite besedilo v telesu, prepiše da. Torej kaj proti Dno bo prednost. Ja? [00:42:56] Občinstvu in ID-ji so edinstveni, vendar razredi lahko več? HANNAH: Right. Torej bi moral biti edinstven ID, in razredi lahko se nanašajo na čim več stvari, kot bi si želeli. Katera koli druga vprašanja? Da. [00:43:09] OBČINSTVO: [neslišno]. Jaz sem se spraševala, ali da naredi razliko. HANNAH: Žal mi je, kaj je bilo vprašanje? OBČINSTVO: Obstaja majhna "F" in kapital "F." HANNAH: Torej razlika med majhno "f" in kapitala "F" ne bi smeli narediti razliko. Torej "f", bo 15 v katero koli smer. Cool, kaj drugega? Vsakdo dobro, CSS? Ja? [00:43:30] OBČINSTVO: Žal mi je. Lahko imate razred in ID? [00:43:35] HANNAH: Da, lahko. Stvari se lahko tako razred in ID. In sem zelo priporočam testiranje ti na svoje. CSS boste najbolje učijo samo s tem, nekaj, zelo preprosta spletna stran, sestavljanju nekaj CSS, in samo vidim, kako med seboj sodelujejo. In boste pridobili zelo dober, intuitiven občutek za to, kako to deluje. [00:43:56] OK, vsi dobro s CSS? Ste vse dogaja, da bi lepe spletne strani s CSS zdaj. OK, najboljše prakse, samo stvari, da v mislih Stvari that-- to je razlog, zakaj smo dock ste za oblikovalca in drugih malenkosti. Torej, zaprite vse oznake HTML. Torej, če imate odprto telo, ne bi smelo biti blizu telesa. Če imate odprt odstavek, ne bi smelo biti blizu odstavek. Preverite, ali vaša stran preveri. Vi bi morali biti zelo dobro seznanjeni s tem od-p nastavite sedem s CS 50 financ z W3 validator. In kot sem že prej povedal, ena od naših velikih paradigem se ločuje svoj slog z CSS iz svoje provizije, ki je HTML. In potem, seveda, imamo to super xkcd tukaj dol. Bravo, comic relief! [00:44:38] OK, TCP / IP. Med njimi in HTTP, v bistvu oni obeh protokolov. Torej si lahko samo mislite od njih kot sklop pravil ki urejajo, kako stvari premakniti preko interneta. Torej kontrola menjalnik protokol, ali internetnega protokola, je samo način, da se prepričajte, da so podatki, dobi, če se dogaja in da bomo vedeli, če smo doslej manjkajoče podatke. Torej, če mislita nazaj na predavanje nekaj tednov nazaj z Davidom kjer smo imeli štiri kuverte, ki jih so bili vsi oštevilčeni kot eden od štirih, dva od štirih, trije od štirih, štiri štiri, to je samo skupek pravil. Rekli smo, OK, vsakič, ko smo pošiljanje več kot en paket, bomo na številko je s tem, kaj število je in koliko je skupno, da Uporabnik mora priti. [00:45:19] In to je samo povedal, kdor prejema podatke, ali gotten vse, ali če nekaj, kar se je izgubila na poti. In ki jih potrebujejo, da ponovno zaprosi za to. To je res samo skupek pravil. To je, kako lahko pomislim, OK? In tudi, da določa vrata, ki vidva can-- Vem med predavanjem, so imeli celoten seznam pristanišč. Vendar jih ne bomo imeli tukaj. [00:45:41] Torej protokol za prenos hiperteksta je, še enkrat, to je še en protokol. Torej, to je še en niz pravil da ureja, v tem primeru, kako je hipertekst prenese. Tako da samo dovoljuje brskalnikov govoriti na spletnih strežnikih. In kot smo rekli tukaj, to je kot človeško rokovanjem. To je samo način za urejanje kako spletni strežnik gre za interakcijo z vašega brskalnika. In imamo le nekaj primerov. Imamo nekaj prošenj tukaj kjer je GET metoda. Imamo HTTP 1.1, ki je protokol verzija za nas. In potem, gostitelj, ki je kaj smo dejansko poskuša dostopati. In potem, kot vidite tu, dobili nekaj odziva s tem 200 OK, kot je naš kodo odgovora HTTP. Imamo velik seznam Jaz grem dvigni se v eni sekundi da morajo biti fantje poznajo. In imamo to vrsto vsebine text / html, ki samo pravi, kakšna vrsta podatkov smo prejemali od strežnika, OK? Ponudnika gostinskih in ta vrsta vsebine del glave HTTP. Imate lahko kot malo ali tako malo, kot potrebni za okviru katere imaš opravka. Včasih boste imeli veliko Informacije, ki prihajajo iz vašega strežnika. Mogoče oni, ki zahteva veliko informacij, prejetih od uporabnika. To je odvisno od konteksta. Če pogledaš na CS 50 študiji, tam je veliko več o tem. Vendar imamo veliko, da bi dobili skozi, tako da bom da gredo naravnost naprej, če da je v redu z vami? Cool. Počakaj. Jaz gotovo, da Celoten seznam of-- huh! Ne vem, zakaj je to vso pot tukaj. Mislil sem, da sem dobesedno preselil jo, ko sem bil sitting-- [00:47:15] Davin: Ali jo želite naučiti? Ali hočeš, da ga naučiti? [00:47:17] OBČINSTVO: Mislil sem, da smo lahko jih samo pokazati, da začnete s. Mislim, da lahko gredo v jim še naprej, vendar sem mislil, da je bolj smiselno, saj sem je samo govoril o HTTP statusov. Torej, tukaj je celoten seznam. Mislim, kaj se bo zgodilo, je Davin se dogaja, da gredo v njih kasneje. Ampak tam je cel seznam, predogled okusa, da pridejo. OK, bomo blow-- to se dogaja biti seveda PHP crash kot nobena druga. [00:47:41] Torej PHP Hypertext Preprocessor, je rekurzivna backronym, kar pomeni, da je bil imenovan za nekaj drugega. In potem so bili, kot je to v resnici ne smisla. Tako so pravkar imenovan it-- in to je kratica, tako da samo to PHP je Hypertext Preprocessor, ki samo nima smisla. Zabavna zgodba. To je programski jezik. Torej toliko, kot sem poudaril, da HTML ni programski jezik, je označevalni jezik, PHP je programski jezik. Kako veš, da je to ker je logika. Obstajajo Pogojniki. Imamo spremenljivke, medtem ko mi nimate nobene od teh stvari v HTML. [00:48:12] Vse je v redu, potem imamo to malo bit tu, da je kot okus PHP. Tako osnove, imeni spremenljivk začnete z znak za dolar. Veliko ljudi, kot njej. Spominja nas denar. To je vse super. Vsi si želimo, PHP. Torej mi ne določajo tip spremenljivke je več. To se določi ob času čas. Tolmač bo všeč, oh, bomo šele teči skozi, in glede na kontekst, bomo videli, kakšne vrste tipov Te spremenljivke morajo imeti. Ni glavna funkcija. Stvari se bodo šele teči. Vidva z vašo uvoz v vaš last-p nastavite, boste to opazili. Ni bilo res glavna funkcija. Pravkar si napisal, kaj si je želel, da se zgodi. In to samo nekako se je zgodilo. Tako da je PHP za vas. [00:48:56] Polja so zelo podobni. Še vedno imamo to konzolo. Tukaj imamo nekaj spremenljivko imenovano arr, in to je enako to-- imamo normalno Nosilec zapis. In imamo nekaj ključnih vrednosti. In velika razlika med nizi C in PHP je, da imamo lahko to associate-- moremo povezati vrednosti ključev. Torej, namesto da le imajo Niz, ki se indeksira s številom ali položaj tega elementa v matriki, bomo lahko dejansko poveže s ključem. Kje bomo lahko rekli, v redu, želim karkoli Vrednost je povezana s sadjem. In morda imamo sadje šla banana. Torej bi ga vrnili banano za nas. [00:49:41] Ampak v bistvu, najbolj močna stvar, o tem je, da če vi spomnite demo s predavanja, kjer smo v bistvu novo napisal speller v PHP, in was-- lookup je res samo všeč, da ta ključ obstaja? To je res nekako močjo njo. Vam ni treba ponoviti skozi paleto. Vam ni treba vedeti, kaj prostora, da je v. To je lahko na koncu ali na začetku. Dokler veste ključ ki je povezana z vrednostjo, PHP lahko pljuvaš, da je vrednost Pravica nazaj ven na vas, v redu? [00:50:09] In potem smo tudi samo imajo samo zato, ker mi lahko parov vrednosti ključev ne pomeni, da moraš. Lahko tudi samo ustvariti normalna matrika, kot tukaj, na dnu, kjer je samo ena, dva, tri, štiri. To so naše vrednote. In v resnici, s ključi so indeksi. Tako da bi ključ za eno nič. Ključ za dve osebi bi bilo eno. Tako naprej in tako naprej, razen če ste izrecno določiti ključ, ste lahko predpostavimo, da vrednost je le njihov indeks. Ali, da je smiselno, da se vsakogar? Brez vprašanj! Super. [00:50:38] OK, foreach je način, da se Ponovil skozi vaše nizi. Torej, imamo nekaj tukaj, samo splošno strukturo. Torej foreach, ime naša matrika, kot karkoli želite poklicati vsak element v polju, in mi lahko storite z nekaj da je element ali te vrednosti. Torej imamo primer tukaj. Imamo asociativni Niz teh dveh vstopov z barom, ki so povezana z foo in se qux povezana z Baz. Tako tipke so foo in baz. Vrednosti so bar in qux. Torej foreach, imamo niz Tu, kot para ključev vrednosti. To nam omogoča, da dostopa tako ključ in vrednost. Mogoče si samo želim, vrednost, v tem primeru si lahko samo všeč ARR kot $ vrednost, nato pa so samo dostop do vrednosti kot ste Ponovil skozi. Morda pa je za nekatere Razlog, ki ga želite tipko, kar je razlog, zakaj sem se odločil, ta primer namesto tega. Tako da lahko dejansko manipulira ključ in vrednost v tem primeru. OK? Vprašanje? [00:51:41] OBČINSTVO: Če boste želeli samo manipulirajo ključ, bi kar morate storiti foreach-- [00:51:45] ALISON: Right. Torej, če boste želeli manipulirati samo tipko, bi še vedno morali to sintaksa, ker če vas prav imajo arr kot nekaj, kot eno stvar, to je predpostavljam, da želite vrednost, ne ključ. Torej, če ste kdaj imeli prav tako kot arr as, morda je to všeč $ elementa, to se dogaja, predvidevam, da ste sporočilo Za samo vrednost pri vsaki točki. Če boste izrecno želeli storiti s ključem nekaj, tudi če ne boš storiti ničesar, z vrednostjo, morate to strukturo da imamo tukaj kje ste izrecno prosi tako ključ in vrednost. Super vprašanje. Kaj drugega? Cool. [00:52:27] Vse je v redu, PHP in HTML. Oh, smo nazaj-p nastavite znova sedem. Zato bi bilo treba to pogledati malo pozna. Torej, to je nekaj preprostih HTML oblika da ima nekaj vhodni ime pozdrav. In vidimo, imamo metodo GET. In če se spomnimo iz naše p-set, ko se predloži ta obrazec, ga pošlje niz z imenom $ _GET, ki ima vseh teh vložkov ali spremenljivk iz obliko, da bi morala biti manipulira v našem PHP. Torej, v tem primeru uporabnik bi dal v njihovem imenu. Trdijo, da. In vidimo, da smo dobili nekaj paleto tukaj. Imamo GET array. In mi smo dostop do imena. [00:53:11] Tako da pravi, OK, daj mi vrednost, ki je povezana z imenom, ime je ključni tukaj. In da se preslika neposredno v kaj mi je povedal naš vhod je ime. Torej, to je, ki vam daje ključ do tega, kar se bo v vašem paleto tukaj. Ali, da je smiselno, da se vsakogar? Ja? [00:53:32] OBČINSTVO: Ali ime GET nanašajo z vijoličasto črto v [neslišno]? [00:53:36] ALISON: Nanaša se na to tukaj. Torej, to polje tukaj, se nanaša na to ime. Torej, to so lahko poimenovali kot telefonsko številko, ali karkoli. To ime je dejansko pravi, kaj kličeš to polje? Kako se boste sklicuje na tem področju? In se to ime dejansko všeč, da smo rekel to polje se imenuje ime. To je, kako bomo za dostop. [00:53:59] OBČINSTVO: Torej je to všeč, input ime enaka Bob, in-- [00:54:02] ALISON: desno, nato pa bi dobil Bob tam dol. Točno tako. Vsi kul? Vse je v redu, tako da dobite versus POST, to sta dva glavna načina da se peljemo podatkov v zahtevi HTTP. Vi bi morali videti oba upajmo. Torej z GET, informacije se skozi URL. Torej, če ste kdaj naredil Google iskanja, YouTube, boste verjetno opazili nekaj vprašaj. In potem vse besede da si dal notri. In POST prehaja podatke V telesu HTTP sporočila. Torej za razliko od GET, si nekako upoštevati da se podatki, skrita od uporabnika. Ampak kaj je res pomembno razumeti je, da je to še prav tako negotov, kot je dobil. Analogija rad uporabljam, je, če imate številko bančnega računa in jo napišite na zunanji ovojnica, ki je zelo nevarna. Če bi ga napisali na kos papir in ga dal notri kuverto, je še vedno zelo nevaren, ker vse, kar morate storiti, je odpreti, da je do in pogled na dejanske vsebine sporočila, da vidite, da je. Torej, to je "skrita", in ljudje radi Mislim, da je varna, ampak to je res ni. In prepričan sem, da bo Davin priti v, da je več, morda. Vendar je pomembno, razlikovanje, da bi in nekaj res dobro razumeti. [00:55:15] OK, SQL Structured Query Language. Vse stvari, ki smo videli, da v zadnjem času! Torej, to je v bistvu samo zasnovani, seveda, za upravljanje podatkov. Vidva imela veliko izkušenj z v vaših tabelah z PHP MyAdmin. In tam so štirje skupni poizvedbe da želimo, da fantje vedo. Tako da je posodobitev, vložek, izberete in izbrišete. Zato poskrbite, da boste vedeli, tiste res dobro. Bomo šli skozi njih zelo hitro. [00:55:40] Torej posodobiti, res, kot tisto, kar si morda mislite, da ne, to samo posodobi podatke v bazi podatkov. Torej, imamo nekaj primer tukaj. To je splošno Ustroj posodobitev poizvedbo. Tako smo posodobitev tabele da govorimo o tem. In želimo določiti nekatere vrednosti, določene stolpce enako posebne vrednosti. Torej, to samo posodobi tabelo, spreminjanje vrednosti v vseh vrsticah v tem primeru. Torej, v tem enem tukaj dol, dejansko Na primer, imamo insert-- žal. Da slide napredno brez mene tega zavedali. [00:56:17] Torej, to posodobitve Tabela col1 enaka da VAL1 kjer hiša enaka "Kožar." Kaj tale pa je da le spreminja, temveč le posodobi te vrednosti v posameznih krajih. Torej v tem prvem, spremeni ta vrednosti za vse, kar je v vaši mizi, OK? To se dogaja, da se to spremeni Kolona za vsak vstop, za vsako posamezno vrsto. Toda to, kjer bi si si o njej mislijo kot kvalifikator. Torej, to je samo še spremeniti je v zelo specifičnih mestih. Torej, v-p nastavite sedem, ko vas morda posodobiti znesek gotovine da je tvoj uporabnik, ste verjetno imeli nekaj, kjer ID enak Session ID, kajne? [00:56:53] Zato, ker si niso želeli spremenite količino gotovine za vsako osebo, ki je s pomočjo svoje spletne strani. Želeli ste, da ga spremeni za eno specifična oseba, ta oseba pa kdor je njegovo uporabo v tistem času. Kajne? OK, tako da vstavite, vložek določene vrednosti v tabelah. To je tako, kot če ste ustvarja povsem nov uporabnik. Splošna struktura tukaj je vstavite v kakršni koli mizo govorimo o tem. Vrednot, pri čemer so vrednote, ki dejansko želimo vstaviti. OK, tako kot smo videli tu, so vstavite v tabeli. To je posebna kolone njihove sovpadala vrednosti. Torej, ta pravi, vložek nova vrstica vsebuje Vrednosti VAL1 in VAL2 pod te posebne kolone. [00:57:33] Mogoče si samo želim, da izpolnite ven pol stvari v tej vrsti. To je tisto, kar ta del tu lahko storite. To vam omogoča, da dejansko ugotoviti, katere del je. Ja? [00:57:44] OBČINSTVO: Ali lahko samo [neslišno] Celice v vrstici [neslišno]? [00:57:52] ALISON: Če samo izpolnite nekateri deli vašega zapored, Preostanek teh celic so samo prazne. Dokler jih omogočajo prazno, to ni problem. Če jih boste poskušali dostopati, je dogaja, da se vrnete nekaj praznega elementa. Vendar pa je pomembno vedeti da v nekaterih tabelah, so se, da je treba dovoliti, da je nična. Morda ste zašli v problem v času vašega p-set ker nismo dovolite od vaše vrednote, je nična. Vendar pa lahko določite neobvezno vrednost v tabeli. [00:58:26] OK, da izberete, zato je to le način za pridobivanje specifičnih podatkov iz tabele v nekateri identifikator, ki ga želite. Torej izberite zvezda iz tabele, kjer je col enak nekaj pomeni le, dajte mi vse podatke, povezane če je to res poseben stolpec. Torej zvezda v tem primeru bo vrne celotno vrstico z vami, OK? [00:58:49] In potem, v tem primeru izberite zvezdo tabela vam samo daje celotno tabelo. In potem, izbris očitno, da samo izbriše vrstico iz tabele. Tako izbrisati iz tabele, karkoli miza smo na to, v katerih nekatere posebne identifikator ali nekatere pogoj izpolnjen. Ja? [00:59:07] OBČINSTVO: Vprašanje. Zakaj uporabljate dvojna citati, in ali vas narediti dvojne narekovaje ali single citati, ne da bi razliko? [00:59:13] ALISON: Dvojni narekovaji ali enojni narekovaji ne pomeni, da razlike v SQL. Mislil sem, da sem videl še eno vprašanje. Ja? [00:59:20] OBČINSTVO: Ali to ne vpliva na kaj gets pobegnil iz poizvedbe? [00:59:25] ALISON: Rob? [00:59:27] ROB: Kaj misliš s pobegnil iz poizvedbe? [00:59:31] OBČINSTVO: Če ima nekdo single poizvedbo v obliki of-- [00:59:36] ROB: Če kdo so bili dal eno samo ponudbo v, potem tako dolgo, kot ste sanirajo svoj vhod, potem ni važno. Ampak, če boste uporabljali en sam quote in ste nepravilno uhaja svoje vložke, potem ja, ki jih potrebujejo postaviti eno ponudbo, da se prekine kodo. Če uporabljate dvojne kotacije, so morali dati dvojni citiram, da bi prekinil svojo kodo. Ampak tako dolgo, kot ste pobegniti stvari pravilno, to ni važno. To je le, da bo treba prevesti na pravilno simbol nekako. [00:59:59] OBČINSTVO: Kaj pomeni pobeg? ALISON: No, kot Sanirni in pobeg. Izpit, ki ga imamo, super xkcd stripov, ki jih potegnite navzgor, če imate, oh-- ROB: To je zadnji slide. ALISON: To je zadnji slide, res? Oh moj bog. Tam gremo, popolna. OK, tako da v bistvu, lahko injicirali nekaj v tem SQL poizvedbo kjer se zlomi oznaka, ali je David pokazala v razredu, če imamo nekaj single quote 1 je enaka 1, in če v našem kodeksu, smo neposredno kopirati samo, da je v, in imamo izteče eno ponudbo, kaj se zgodi, je, da smo dobili nekateri izraz, ki ocenjuje, da drži, da bo Naj nekdo vstopijo v našo bazo podatkov in dobili podatke, da bomo Ne želim, da bi dobili. Tako sanirajo vhode pomeni le pazite, da smo bežijo ti znaki in jih označuje kot znakov in ne stvari da bi bilo treba dovoliti ki jih je treba sprejeti dobesedno kot naše SQL izjavo. [01:01:04] Tako velika stvar, da smo rekli, da morajo biti fantje uporabo bili HTML posebne znakov, kar je nekaj da boste morda želeli, da pogled na. OK, izbrisati. Podatkovni tipi, to bo vse na spletu. Ker smo 15 minut zapustil, sem le, da bo šel skozi to. PHP in SQL, v bistvu je to Pravkar smo imeli funkcijo poizvedbe, ki pomagal zaščititi pred Te zlonamerne napade. Torej, ko boste uporabili poizvedbe, smo se prepričajte da so stvari sanirati in malenkosti. [01:01:36] MVC je samo oblikovanje paradigma, tako Model, pogled, krmilnik. To je samo način, da se stvari lepo in razdeliti na enak način da smo nagnjeni k faktorju ven kodo v funkcijah. To je samo okvirna web design ki vam omogoča, da storijo enako stvar. Grem preskočiti to. [01:01:54] To je nekaj, kar sem bi bilo super udoben s. To je zelo malo mizo tam. To vam daje funkcijo Primer modela. Jaz sem samo skozi to, ker I res želim Davin, da bi lahko govoril. Če imate kakršnakoli vprašanja, vas prosimo. Tukaj bom potem. Samo to, govori z mano. S tem imamo HTTP statuse. In Davin dogaja, da bo razstrelil S tem v 15 minutah. To se dogaja, da je super. [01:02:17] Davin: OK. Uh, tvoj mikrofon? Ja. Žal mi je. ALISON: Way je treba pripraviti. Davin: Ne, jaz sem pripravljen. Jaz sem pripravljen. Naredimo to. Je pripravljen. OK. Žal mi je. Sem polila kavo na sebi. Ne vem, če sem bolj razburjen, da sem videti neumno, ali da nimam več kave. Kakorkoli že, samo hiter napoved o ponjave vidva. Tako da je ta list vi imate, ni uradnik, kaj je na kvizu. To je uradna, kar je na kvizu. Tudi na spletni strani, povemo ti, OK, to bo na kvizu. Torej, v malo goljufija stanja imate, ne uradno. In tam so napake na njem. Torej najbolje, da ne le slepo ga uporabljate. Torej, ja, to je to. Torej, kaj je dobil v to resnično hitro. [01:03:05] Torej HTTP statusi. Torej, kaj se zgodi, ko Spletna stran, je vse v redu. Vse je OK. Vse, kar prihaja nazaj ste tako, kot si želite. Dobiš OK 200. 301, kjer smo videli, da je pred 301? Čakati, kaj se dogaja? Žal mi je. Videli smo, i kositra predavanje v varnosti. Torej med varnostjo, tako da, če David vnesli v http in nato poskušal iti v cs50.net, boste videli 301 preselil. Zakaj? Saj se dogaja, da preusmeri samodejno boste na naši HTTPS. [01:03:35] Torej 301 preselil, le da je v bistvu preusmeritev. In lahko si misliš o njem, kot je ta. Katerega od statusov, ki se začnejo z 2-ih, tistih, ki so, kot so, v redu, vse je OK. Katerega od statusov, ki se začnejo s 3, to so preusmeritev. Statusi, ki se začnejo s 4, kar pomeni, tam je nekakšna napaka odjemalca. Statusi, ki se začnejo s 5, to je neke vrste napake strežnika. Torej si nekako razšla statuse, kot je ta. Tako da 304 ne, ne spremenijo, tako da v vašem server.c p-sprejemnikov, tako da je te reči naložen cat.html. Vse se vrača, dobiš 200S, OK, super. [01:04:03] Recimo, da ste jo osveži. No, v notranjosti, ki cat.html, imate JPEG. No, JPEG ni dogaja se ponovno naloži. Ne boš bi objavili drugo GET zahtevo strežniku, nato pa dobil vse te podatke nazaj. To se dogaja samo be-- da slika dogaja se v predpomnilniku na vašem računalniku. In tako bo, da slika je 304. Torej to ni bil spremenjen. Če nato zaprite ven, jasno piškotki, nato osvežite in poskusite naložiti to stran še enkrat, boste videli 200S. Ne boš videl, da 304. [01:04:28] 400, slabo zahteva, pravi hitro, kot če vas grejo poslati JSON objekt s strežnikom in vaš JSON objekt je bil nepravilen, boste videli kaj takega. 403, prepovedano. Ko bi videli prepovedano? Verjetno Verjetno? OBČINSTVO: Chmod. Davin: Chmod, ja. Torej niste nastavili Dovoljenja pravilno. 404, ni mogoče najti. To preprosto ni tam. Torej, če vtipkate v napačnem naslovu. 500, notranje napake na strežniku, strežnik Verjetno ni bil pravilno nastavljen. Ni nekaj, na koncu, ampak Nekaj ​​na strani strežnika. In 503? Veliko ljudi videl 503s v zadnjem p-niza. Ko bi se to zgodilo? Slišal sem šepetanje. [01:05:05] OBČINSTVO: Ko Google se je odločil, da si robot. Davin: Ja, ko je Google odločil si robot, dobiš 503s. Tako da je preobremenitev. Če ste zahtevali od strežnika preveč, je ponavadi začasno. In večina od vas ni opazil. Torej si videl 503. Morda ste vzeti malo break, potem 503s odšel, in vse je bilo v redu. [01:05:20] Gabe: Real hitro, ko se vidva dobili 500 v verjetno ta zadnji problem nastaviti? Ja? [01:05:27] OBČINSTVO: Ponavadi, če Strežnik ima datoteko založili ali [neslišno] njihovo stroj [neslišno]. [01:05:34] Gabe: Torej lahko konfiguracijo Vprašanje v vašem PHP na vašem strežniku. Morda pa bi bilo samo nekaj, kot podpičjem da vaš pozabil. Če tipkate PHP, nekatera napačna sintaksa ti bi lahko dobil kaj takega. OK? [01:05:46] Davin: Cool. Hočeš, da ne samo do AJAX? [01:05:51] Gabe: [neslišno]. Davin: OK. Torej, kaj je DOM? Kaj DOM stati? [01:05:55] OBČINSTVO: Document objektni model. Davin: Lepo. In zakaj mi je všeč? Super. Desno, tako da samo nam omogoča, da dostopa HTML, si oglejte našo stran zelo hitro. Zakaj? Ker smo zdravljenje naše Stran, zdravljenje naše HTML oznake, Vse zdravljenje kot če oni predmetov. Če smo jih obravnava kot oni predmeti, potem kaj lahko storimo? No, lahko rečemo funkcije na njih. In to je pomembno zato? No, saj bomo uporabili JavaScript posodobiti našo HTML, posodobi te predmete. Torej, če jih obravnavajo kot predmeti, potem lahko klic funkcije na njih. Grem, da se v to malo bolj ko sem šel v JavaScript, vendar ste vsi videli kot document.getElementById. Torej je vaš dokument element, dobili element po ID, tako da boste videti za nekatere ID v HTML tag. In potem, lahko to storite nekaj drugega, da je. Na primer, kot document.body, Nato lahko dodate otroka. Tako boste našli dokument. Imate dokument. Boste našli truplo. Si našel truplo. In potem ste tekoč poklicati neko funkcijo na njem. Torej dodajanje otroka in lahko dodate nekatere HTML na koncu v vašem telesu. Torej v bistvu, ste pravkar obdelovanjem kot predmet. Ste zdravljenje HTML oznake kot objekt. In to je zelo enostavno in hitro, da gredo skozi njih. Ampak tudi vam omogoča, poklicati funkcij na njih tako da lahko manipulira in spremenite elemente. [01:07:04] Gabe: Glede na to, zakaj je takšna JavaScript lepo jezik za interakcijo s HTML? Kvote so, ko so ljudje izbrali jezik za brskalnik, za strani odjemalca, JavaScript je res lepo, to je res dobra v ravnanje z objekti. In predmeti so nekako všeč predmeti, ki se pojavljajo v HTML, zato je zelo enostaven za JavaScript storiti to vrsto ravnanje. Davin: Lepo. Torej, tukaj je samo primer. Zato mislim, da na lanskoletnem kvizu, ali morda pred dvema letoma smo vas prosil, da ustvarite drevo. Torej, to je točno tisto, kar želite narediti. Torej ste začeli z dokumentom. In potem ste v bistvu samo poglej oznak. Torej, če pogledaš, smo Pričnemo s HTML tag. In potem boste dobili namige o tem, kako To temelji na zarezi narediti. Torej vodja vrsta odcepi. V notranjosti glave, imamo drugo oznako za naslov. Torej, imamo naslov tag. In v notranjosti, da imamo nekaj niz. In tako smo se predstavljajo niz v krogu. In vse oznake so v kvadrate. [01:07:54] In če pogledaš, če bomo misliti, da je to drevo, in recimo, da je HTML od staršev, nato pa glavo in telo se bodo bratje in sestre. Oni tako bo otroci starša. Zato, ker oni oba brata in sestre, oni bo nekako zraven seboj v našem modelu drevo. In potem ste v bistvu narediti točno isto stvar. Torej ni težko, vendar smo se vprašal Vprašanja, kot je ta pred na kvizu. Gabe: Ali koga imate vprašanja doslej? Ali je to dobro? Davin: Cool. JavaScript, OK, dobra stvar. Torej JavaScript, kaj je JavaScript? No, JavaScript is-- je zapleteno, vendar so nekatere izmed vrhuncev ki jih morate imeti v mislih. Najprej je to ohlapno tipkal. Kaj to pomeni? Torej PHP was-- ja, kaj se dogaja? [01:08:35] OBČINSTVO: Nimate izrecno stanje, kakšen tip spremenljivke je. Davin: Popolna. Zato je rekel, da ne bi bilo treba izrecno navesti vrsto spremenljivke. To je ravno prav. Torej, v C, če sem imel int i je enak 50, potem v PHP, to je tako kot je ta, $ i, enaka 50. Nato v JavaScript, kaj bi bilo klic? Var, kajne? To bi bilo, kot var i enaka 50. Vendar vam ni treba biti kot, OK, to je int. OK, to je niz. Ni potrebe, da to storim. To je razlaga jezik. Torej, kaj to pomeni? [01:09:04] OBČINSTVO: Ni zbrati. [01:09:06] Davin: Kaj ne zbirajo pomeni? Ja? [01:09:11] OBČINSTVO: Nimate prestrukturirati kodo da se je pripravljena za računalnik, da ga vodijo. To je samo sprejeti v času izvedba in računalnik [neslišno]. Davin: Ja, to se dogaja, prenese s pomočjo tolmača. Ampak ti si ravno prav. Tako da vam nikoli ne bo za njihovo zbiranje, kajne? Ko ste počeli vaš PHP in JavaScript kodo, nikoli ne imenuje zbere. Nikoli ne imenuje nekaj podobnega Znamka ali kaj podobnega. To je zato, ker je razlaga. Torej, vsakič, ko gre skozi brskalnika, gre s pomočjo tolmača. In to se dogaja, da ga interpretirajo Samo v realnem času, takoj za vas. Torej, kaj je nekaj pozitivnih in negativnih da ima razlaga jezik in ima zbrati jezik? Torej compiling-- ja, kaj se dogaja? [01:09:50] OBČINSTVO: razlaga je počasnejši. Davin: V kakšnem smislu? [01:09:57] OBČINSTVO: Ko vas zbere, nimate storiti vse dodatne ukrepe za izvršitev ga, ker je ta [neslišno]. [01:10:04] Davin: Right, popolna. Torej, kaj si rekel je, v bistvu, da je prevajanje, ko zbere, imate Veliko začetnih stroškov, kajne? Boš za njihovo zbiranje. Ampak ko ga zbere, prevajalnik se dogaja, da ga optimizirati. To se dogaja, da se hitro. To se dogaja, da v bistvu se tako hitro, kot je mogoče. S tolmačenjem, nikoli so, da je vnaprejšnje stroške. Namesto, da se dogaja, da je nekoliko počasneje vsak čas jo razlagajo. In boste morali to razlagajo vsak čas. Torej, namesto da bi to enkratni strošek, zdaj si bodo morali razlagati vsakič stran ometi. [01:10:29] Torej tolmači so dobri, saj nimate za njihovo zbiranje, ampak oni so slaba, da je vsak Tokrat je na kupe strani, to je bodo morali interpretirati ta JavaScript. In to se dogaja, da teče nekoliko počasneje kot če ste bili, da ga pripravijo. Vam omogoča, da communicate-- oh, čakaj. Uporabi za manipulacijo vsebino in izgled. Pravkar smo se pogovarjali o tem. Uporablja DOM. AJAX, bomo dobili v AJAX v malo. In potem, da je na strani odjemalca. Torej PHP je server side. JavaScript je odjemalca. Katere so pozitivne na to? To je pravi. To je hitrejši, prav? Ker nimate to-- to hitreje. Nimate komunicirati s kakšno drugo napravo. Če ste le na vaš Stranka, si nikoli bodo morali iti in videti, kaj je na strežniku nato pa poroča ali nekaj takega. Tako na strani odjemalca se nagiba k biti malo hitreje. [01:11:15] Gabe: Ja, ampak to ne pomeni, da je PHP hitreje kot JavaScript ali kaj podobnega. Vodijo vrste v isti Hitrost, ker oni so tako razlagati jeziku. Stvar, ki se je počasi Tukaj je zaprosilo. Torej ste dejansko dogaja vso pot čez Brazilijo da bi dobili nekaj informacij ki živi tam. Vendar PHP in JavaScript, ki jih vrsta teče v isto hitrostjo. Saj ne, da je ena hitreje kot drugi. To pa je tudi, trik vprašanje tukaj. Torej JavaScript nikoli postane strojni kodi, pravilna ali napačna? [01:11:47] OBČINSTVO: False. Gabe: False. To mora postati stroj koda ker stroj koda Edina stvar, stroj razume. Čeprav to ni zbrati, še vedno postane stroj koda ker tolmač je pravkar Program, ki gre po vrsticah in transformira to vrstico v nekaj računalnik razume. OK? Cool. [01:12:08] Davin: Tukaj je le zelo osnovna Pozdravljen, svet JavaScript. Tako da ne vem, if-- ste videli to. Vendar boste morali HTML tukaj. In namesto da bi dejansko dajanje JavaScript v scenariju oznake, tako da bi normalno dal v glavo. Imate skriptne oznake. Lahko ga spustite tukaj. Vsi smo tukaj storiti je, da smo povezani in-- tako da smo povezani v datoteki JavaScript kot je ta. In ste vse to storili, kajne? Torej, ko ste bili z uporabo jQuery in underscore.js v zadnjem p-niza, nimate ton kode up v vaš scenarij oznake, v tvoji glavi. Lahko bi to naredil, ampak ste pravkar povezuje v. In ste ga povezuje v Tako kot ste storili z CSS. Torej je le olajša tako glasi koda ni všeč 1.000 vrstic s ton funkcij, ki vam morda ne uporabljate. [01:12:52] Namesto tega, si ga poveže. Jo compartmentalizes. To je, kot je pisanje nekaj header datoteko in nato pa tudi te datoteke glave v C. Pomislite na to, tako kot je ta. Torej, kaj je to naredil? No, to se dogaja, da teče. To se dogaja, da se opozori. Tako boste dobili malo pop up imenovano Hello World. Hitro vprašanje, samo preverjanje sanity, tako da boste videli tukaj v telesu, pravijo, telo, HTML tukaj. Kaj je na prvem mestu? Ali vidite telo, HTML tukaj, ali pa vidim opozorilo prvi? [01:13:19] OBČINSTVO: Alert. [01:13:20] Davin: Right. Pravi pozorni. Zakaj? [01:13:22] OBČINSTVO: Ker vas gredo od vrha do dna. [01:13:24] Davin: Da. Popolna. Tako pravi, greš od vrha do dno, ki je popolnoma pravilna. Ti boš šel od vrha do dna. In v JavaScript, jQuery, imate funkcija, ki je kot onload ali pripravljen, in ki pravi, OK, počakajte vse to HTML je naložen. In potem, pokličite JavaScript. Ker nimamo, da je tu, Prva stvar, ki se bo zgodilo se dogaja, da gredo od vrha do dna. To se dogaja, da zadeti, da JS klic, da se dogaja, da se opozori. Potem, da kliknete OK, da alert izgine. Potem pa se dogaja, da pokažejo si telo HTML tukaj. Lepo. [01:13:54] OK, tako da samo resnično hitro, pisanje v JavaScriptu je super hiter. Da se razglasi spremenljivka, ime var. Torej, v C, imate int i, imate da ugotovi, kakšne vrste je. PHP, $. JavaScript, var. Pogovarjali smo se o tem. Dobro, pojdimo. [01:14:11] Zanke, ista stvar. Ista stvar. Izjave funkcija, zato tako kot ste jih videli v C. Edina stvar, ki je tako drugačen, če prideš do drugih programskih jezikov, kot takrat, ko ste vzeli 51 naslednji semester in delaš z ocaml, lahko ukvarjajo z anonimnimi funkcij. Torej, to je točno tisto, kar imamo tukaj. Torej hočeš dati v znesku, nekakšen vrednosti zneska. Lahko pa bi se to počne samo enkrat. Torej si ne želite, da ga pokličete funkcijo Vsota, izročiti to izjavo funkcijo. Namesto tega, si ga uporabljate kot anonimni funkcijo. In ste videli to veliko. Boste videli zgled ta v nekaj diapozitivov. Ja, bomo videli. Gabe: Dobro vprašanje. Ko se boste morda želeli uporabiti anonimni funkcija tu? V bistvu, če hočeš nekaj, kot na dogodek, da se zgodi. Torej, ko je miš klikne, na primer, hočeš nekatere funkcije, ki se imenuje. Tako se boste peljali na dogodek trener, boste peljali na dogodek, vrste, funkcija, želite, da se imenuje. In kaj ste mimo je kot, na koncu dneva, le kazalec da navodila, da funkcijo. Torej to ni všeč, da ste mimo celotno kodo, prav tako kazalec na funkcijo. In potem, ko nekdo klikne miške, nato pa, da funkcija dobi imenovani. [01:15:17] Davin: Polja, zato vas pridobiti izjavo niza. Potem, matrika postaviti stvari v. Real hitro, kaj bo to izpisal? Kaj bo Tretji element je? [01:15:31] OBČINSTVO: "JS". [01:15:32] Davin: Right, da bi bilo "JS". Počakaj, pojdi nazaj. Kakšna je dolžina? [01:15:37] OBČINSTVO: Tri. Davin: Tri, kajne? Točno to, kar misliš. OK, zdaj gremo. Nizi, lahko dodate stvari zanje. Torej si lahko presegajo njihove začetne meje. Samo nekaj, da v mislih. PHP, JavaScript, oni malo malo bolj tolerantna v smislu stvari kot je ta. Predmetov, zelo podobno kot konstruktov v C, zelo veliko kot asociativne nize v PHP. Vsi ste imeli izkušnje s tem. Torej, JSON, če ste kratki JSON in nazaj v-p nastavljen osem, to je vaša naloga. [01:16:03] Torej, ja, na primer, resnično hitro primer. Tukaj je objekt. Tako boste reference to objekt, tako da samo resnično hitro, recimo, da sem želel, da bi našli ven, OK, kaj je tečaj? In tako ime objekta je tu CS50. In potem, če sem imel asociativni matrika, kako bi jaz to naredil? Bom s ključem, kajne? Tako da imam ime array. Imam konzolo, ponudbe, ključ, končni citati, konec konzola, in da se bodo reference, ki element v mojem asociativni array. Kako se sklicuje Seveda v moji objekta? Kdo ve? [01:16:39] OBČINSTVO: [neslišno]. [01:16:40] Davin: Kaj se dogaja? OBČINSTVO: CS50.course. Davin: Ja, ja. Torej CS50.course. Torej, kako si reference stvari znotraj JSON objekt je s piko. [01:16:48] OBČINSTVO: Lahko uporabite tudi nizi sintakso. [01:16:53] Davin: OK, v redu. [01:16:54] Gabe: Lahko uporabite tudi CS50 nosilec, niz, kot je v narekovajih. OBČINSTVO: Mislim, da je enaka PHP. Gabe: To je ista stvar. Davin: Fino! Vendar boste videli to na drugih mestih. Ja, nadaljuj. To je tisto, kar sem pravkar rekel. Torej v JavaScript jQuery npr. Torej je to moja DOM, kajne? Real hitro, tako da imam glava, zdravo svet, body. Imam gumb. Piše "potiskanje me," tako rad, da ga potisnite. In želim, da narediš nekaj ko ga kliknili. Desno, naprej. [01:17:31] Desno, tako da je to moja JavaScript. Torej jQuery je le lažje način za pisanje JavaScript. Torej je to, in kaj bom pokazati boste naslednjič, se bo jQuery, so enaki. Torej bodo naredili iste stvari. Samo jQuery kaže, da je malo lažje. Ljudje ponavadi všeč bolj. To je veliko funkcionalnosti. Torej, ljudje se nagibajo k uporabi jQuery. Vi vsi uporabljajo jQuery v zadnjem p-set. Torej, kaj bo to naredil? Kaj bo to JavaScript-- tako To je samo navaden JavaScript. Kaj bo to? Kaj bo naredil? [01:18:03] Torej, najprej, boste videli okno onload. Kajne? Zato nismo videli, da prej. Torej, to se dogaja, da počakajte še celotno okno obremenitvah. Tako se dogaja, da počakajte obremenitev HTML, vse slike preden to počne ničesar. Torej, recimo, da je naša DOM je naložen. Vse, kar je tam. Potem kaj se bo zgodilo? Ja? [01:18:19] OBČINSTVO: prikaže Button. [01:18:22] Davin: Gumb je že tam. Ja, gumb je že tam. Toda to se dogaja, se pravi, OK, če sem kliknite gumb, tako Gumb je že tam, kot to HTML tag. Počakaj, pojdi nazaj resnično hitro. Ta oznaka prav tukaj je bo gumb že. Tam je že gumb. Ampak potem, JavaScript tag, tukaj, se pravi, v redu, želim da bi dobili element po ID, zato gumb Iskanje samo pravi, OK, želim preslikati te spremenljivke na ta gumb. Tako da spremenljivka je pravkar lažji način za dostop do ta gumb. In sem rekel, v redu, če sem kliknite, da gumb, tako da, če sem kliknite ta element, in ta element nanaša gumb, če sem ga kliknite, potem hočem poklicati funkcijo. Tukaj je eden od tistih, anonimna Naloge smo govorili o tem. [01:19:03] Samo poklicati nekatere funkcije. V tej funkciji, v bistvu nekaj, kar smo videli veliko, opozorilo. Kliknete gumb za iskanje. To se dogaja, da imajo v bistvu na gumb. Si ga kliknite. Dobiš to opozorilo. X ven. To je to. Ja? [01:19:16] OBČINSTVO: Torej, če si dal skript [Neslišno], script tag v HTML? [01:19:21] Davin: Lahko dal skript tag naravnost v glavo ker imate to onload. Je tudi, da imate klik. Tako se dogaja, da počakajte kliknete nekaj. Vendar onload je le, da je varno, da bi da vse obremenitve v HTML vnaprej. Ja? Hočeš povedati kaj? [01:19:40] Gabe: [neslišno]. Davin: Ja. [01:19:42] OBČINSTVO: Torej onload izogiba opredelitvi gumb spremenljivo iskanje s samo rekel document.getElementById iskanje gumb dot [neslišno]. [01:19:49] Davin: Definitivno, potem pa Vaše niz pravkar dobil ogromno. Točno, tako da je to samo zato, da da bi bilo lažje za vas, ja. Ja? [01:19:56] OBČINSTVO: kje smo naredili ustvariti window.onload? Ali document.ready? [01:19:58] Davin: Ja, obstaja. Ja, tam je, sem preveril. [01:20:02] Gabe: Ni jim treba skrbeti. [01:20:03] Davin: OK, tako da bom da vam povem, anyway. Torej v bistvu, le na splošno, zato window.onload počaka, dokler vaš DOM, vse Vaše HTML, obremenitve. To počaka, dokler vaše slike obremenitvi. To počaka, dokler ni vse obremenitve. document.ready, samo počaka, dokler ne minejo DOM obremenitvah. Ko HTML je vse tam, enkrat Vaše DOM je tam, začne teči. To je edina razlika. [01:20:23] Gabe: preverite Quick sanity tukaj. Torej je to razvidno vrste kot vrstico kode, kajne? Ker je window.onload enaka kup stvari. Ko JavaScript bere to res ali false, funkcija dobi izvrši. False. OK? Kaj se dogaja tukaj, ste pravkar poteka ta funkcija kot anonimni funkcij da window.onload. In potem, ko je šlo da se dejansko izvajajo? Ko so okna obremenitve. To je dogodek. Tako da je jus t stvar smo govorimo o že prej, kajne? Torej, ko se dogodek zgodi, Funkcija zgodi. Ista stvar z onclick. [01:20:59] Davin: OK, tako da je nekdo vzel stran document.ready. Toda to bo točen nam je isti OBČINSTVO: znak za dolar, da je document.ready. To je bližnjica. [01:21:07] Davin: Oh, da je? OK, to pomeni, document.ready, bližnjica. Toda to je enako kot window.onload razen za to majhno razliko Sem ti govoril. In to je jQuery. Torej je to popolnoma enaka thing-- to JavaScript. To je just-- nekateri ljudje mislijo o njem kot bolj majhna teža, mehek različica ki ima veliko funkcionalnosti da boste verjetno uporabljali. Tako da to počne točno isto stvar. [01:21:34] Torej stvari, da nekako izpostaviti. Tako v drugi primer, imela document.getElementById, tako da smo imeli tako dolgo Niz, ki se dogaja, da bi dobili element, ki ga glede na ID ima. Da se nadomesti s tem razpisu tukaj. Torej vidite znak za dolar, potem vidiš, citiram, hashtag. Hashtag je vedno selektor. To pravi, OK, to ima veze z ID. Kaj je selektor za razred? [01:21:56] OBČINSTVO: Dot. [01:21:57] Davin: Dot, desno. Če ste šele tekoč izberite oznako, kaj je to? To je samo oznaka, točno. In lahko uporabite, da je tu, kot dobro. [01:22:05] Gabe: In po oznakah, mislimo kot div, na primer, ali glavo. [01:22:08] Davin: Ali telo ali p ali kaj takega, ja. Torej, tukaj, OK, namesto da bi rekel document.getElementById, to je samo točno isto stvar. Samo v jQuery, je krajši. Torej, to je enostavnejši. Torej, nič več onclick, kliknite. Funkcija jQuery, pokličite to funkcijo. Alert je popolnoma enak. Torej, to je malo manjši ali malo krajša, malo bit-- ljudje mislijo to je malo lažje pisati ven, malo lažje razumeti. Toda to je jQuery. Veliko ljudi se malo malo zmeden in zaskrbljen, in mislijo, OK, jQuery se razlikuje od JavaScript. Moram zapomniti ti dve različni stvari. To ni. Mislim, da je drugačna sintaksa. Vendar je jQuery JavaScript. To je samo na videz boljša različica, lahko lažje razumem, da ljudje uporabljajo. Gabe: Ja, biti pošten, da je znak za dolar ki jih vidite v jQuery, da je samo ime funkcije, ki jQuery definira. To nima nič posebnega. Ali je to samo ime funkcije, samo rad, da bi lahko določite znak za dolar. [01:23:03] Davin: Ja, tako je govoril o tem. Nekaj ​​koristnih stvari. Iskal sem spet na starih kvizov. V zadnjih nekaj kvizov, oni ' moral uporabiti stvari, kot je ta. Torej document.ready, tako poskrbite, da je vse naložen, preden začnete delati stvari. Izberite ID, ali izberite razred, bi bilo prav biti quote dot nekaj razreda, konec ponudbo. Predloži, tako da, če ste pošilja obrazec in klic ta funkcija po obrazcu navaja. Vrednost, tako da recimo, da sem imel obliko Predložitev, kot uporabniško ime, e-pošta, karkoli. Imel sem besedilno polje. Tako da sem vnesete v polje tega besedila. No, če želite, da se vrednost iz škatle tem besedilom, uporabite dot val. In potem, tu spodaj, pika HTML je enaka je kot dokument piko getElementByID dot innerHTML. Tako, da se dogaja, da se vrnete vi HTML iz tega ID. Tukaj, ki ste jo pravkar uporabljate nekatere ID ali karkoli pika HTML. Da boste dobili HTML iz tega elementa. Če bi želeli, da spremenite, da HTML, jo lahko prenese nekaj. Torej bi morali biti kot dot HTML, nato pa notranjosti, citati, nova HTML ali nekaj takega. [01:24:05] Gabe: OK, tako AJAX. Res mi je všeč, da razumejo AJAX res dobro. Torej, jaz vam želim fantje razumeti AJAX res dobro. Ker če boste to storili, ste precej tekoč razumeti vse, ima opraviti s HTTP, PHP, JavaScript zaradi vsega prihaja skupaj v AJAX. AJAX ni jezik. AJAX je tehnika. In ga uporablja veliko različnih orodij. AJAX stoji za asinhroni JavaScript XML. Tako metoda, jezik, podatki. [01:24:36] Torej, glavni jezik, ki ga uporabljamo v AJAX sprožiti vse in ročaj vse kasneje je JavaScript. Zato se nanaša zelo blizu JavaScript. In potem je asinhrona ker ne bomo storili vse naenkrat, ko smo nalaganju strani. To je stvar, ki jo lahko stvari nekako vzporedno. Glavna ideja AJAX je, da želite to, da bi dobili nekaj konkretnih informacij. Na primer, ko ste tipkanje novo uporabniško ime, ko se registrirate uporabniško ime, moje uporabniško ime je abc123. In potem, na koncu obrazec, boste morali klikniti Pošlji. In je moral iti na strežnik, in nato preverite, če v podatkovni bazi, abc123 je že tam. In če je že tam, pa pravi, uporabniško ime je že v bazi podatkov. In ti, moraš izpolniti iz celotnega obliki ponovno. In je bilo res, res slabo. [01:25:23] In potem pravijo, OK, zakaj ne moremo preprosto narediti zahtevek majhen HTTP samo preveriti da vidim, če je ta uporabnik v bazi Pred moral uporabnik predloži celotno obliko? Tako na primer, ko uporabnik konča tipkanje abc123, kaj je samo iti na strežnik malo bit in samo dobil true ali false iz strežnika videli, če da je veljavno uporabniško ime ali ne. OK, tako da je eden izmed glavnih uporablja AJAX danes še vedno. [01:25:49] Davin: Torej, resnično hitro, v Ajax klic v jQuery, bi lahko pomenilo, da vas želim, da bi bilo sinhrono. Vam ne bi bilo treba to storiti. Vendar pa lahko to storite. In če si to storil, kaj bi se zgodilo? No, na primer, ko ste dobili novico ali karkoli, Vaš brskalnik je le, da bo treba čakati dokler da celotna klic končan namesto najemnin vam drugi stvari prav, ko ga kliknete. [01:26:14] Gabe: To ne gre več. Oh moj bog. Žal nam je! Yup. "V preteklosti, Stranka je potrebno, da zahtevo Celotna vsebina spletne strani. " To je tisto, kar sem rekel. To nam omogoča, da pošljete Dodatna GET ali POST zahteve, ne da da osvežite svoj brskalnik. Zato ob koncu dneva, smo dejansko Making zahteve HTTP Tukaj uporabo JavaScript. Ker preden smo uporabili le JavaScript spremeniti HTML, ki so že prišli. In zdaj, ga lahko uporabite za vmesnik s spletnih strežnikov, kot tudi. Tako se to zgodi je imamo stranko. Davin je odjemalec. In ima vso JavaScript prikazovati, ker HTML je neumna. JavaScript je pametna. Torej Davin Davin ima njegova pametna del in njegov neumen del. On se dogaja, da uporablja svoj pametni del zdaj. On se dogaja za uporabo JavaScript na zahtevo, na primer, ali je abc123 v baze podatkov ali ne. [01:27:04] Torej Davin, prosim, samo mi pošljete zahtevo HTTP. Hvala. Torej je pravkar poslal zahtevo HTTP. Vidiš, da je? In to je samo na enak način da je vsaka zahteva HTTP pošlje. Brskalnik Google Krom ali kaj podobnega, je bomo videli, da je Davin poskuša poslati zahtevo HTTP, bo pomagalo hm malo. In to se dogaja, da gredo vse do strežnika. Sedaj strežnik se dogaja, da imajo PHP tukaj, ali kateri koli drug jezik. Tako kot v normalnem zahtevo HTTP. To je precej normalno Zahteva HTTP. [01:27:31] In potem, strežnik je reči, OK, Davin me želi preveriti, ali To abc123 je v bazi podatkov. Pogovorit z modelom. Model pravi, da je ni. abc123 je dobro uporabniško ime. In potem, je spletni strežnik bo uporabljati PHP, da postane neke vrste datoteke. To bi lahko dobesedno samo datoteko ki vsebuje "da" v njej, ali "ne, ali nekaj takega. To bi bilo vse datoteke. [01:27:54] To bi bilo, kot da bom pošljite Davin sliko raca če je v bazi podatkov in pošljete sliko hrčka če to ni v bazi. To bi bilo nekako neumno, ampak to bo delovalo. OK, tako da bom poslal raco do Davin. Davin dobil raco. In zdaj, kdo bo za ravnanje z raco? Davin je pametno del spet, tako JavaScript, kajne? JavaScript poslano Zahteva in JavaScript se dogaja, da prejmejo zahtevek in ga razlagajo v neki obliki. [01:28:22] In v tem smislu gre za reči, OK, če raco potem sem dober. Če hrčka, potem jaz grem reči ne, uporabniško ime je že obstaja v zbirki podatkov. Ampak ponavadi, niste bomo poslali raco. Boste poslali nekaj, kar je nekoliko pametnejši. In kaj bomo uporabili, je XML. In v zadnjem času, ki jih uporabljamo JSON. JSON je le JavaScript Object Notation, ki je v bistvu dobiš Celoten objekt JavaScript. In ga dal v datoteko, tako kot da CS50 predmet, vidva videla. Ste jo dali v datoteki, in ga pošljete preko Davin. [01:28:53] Torej, v tem primeru bi jaz narediti predmet JavaScript in samo reči, uporabnik obstaja, ja. Ali uporabnik obstaja, ni. In ga pošlje nazaj k njemu. In zakaj JSON? Ker oseba kdo prejme to je gre za uporabo JavaScript ravnati odgovor. In JavaScript deluje tako dobro, ker to se imenuje JavaScript Object Notation. Kajne? Tako da lahko preprosto pokličete funkcijo in dobili ta lep objekt iz odziva. In potem se dogaja, da vemo, ali da uporabnik v bazi podatkov ali ne. [01:29:22] Torej vidite, vse to prihaja skupaj v spletni strežnik, in potem je tukaj še ena HTTP na zahtevo in en odgovor in vse HTTP. Zato poskrbite, da fantje razumeti to AJAX klic saj vam pomaga razumeti vse konceptov smo govoriš. [01:29:37] Torej, tukaj je primer AJAX s jQuery. In tukaj imamo opraviti s get JSON. Torej mi ne poskuša priti Podoba mačka tukaj, ali raca. Poskušamo dobiti JSON datoteke. In potem počakajte to je storil, dot storiti. To pomeni, da sem čakal na odgovor. To lahko traja nekaj časa. Nato boste videli malo nakladanje. Če želite, da to, da v vašo spletno stran. Torej dot storiti, in kaj potem se zgodi, ko je to storil? Podaš v anonimni funkcija, tako kot smo videli prej. Ker je naredil, je dogodek, samo kot klikom miške ali karkoli, za jQuery. Tako se boste peljali v tej funkciji z podatkov, besedila, status, in jqXHR. In v bistvu, da je le nekaj spremenljivk ki jih lahko uporabite kasneje, da imajo status zahtevo HTTP, Podatki, ki se dogaja poslati nazaj. Tako da potem lahko kasneje razlagati in narediti nekaj smiselnega z njim. In če to ne uspe, če bi propadel? No, ko se zahteva HTTP daje si 500 ali nekaj takega. Potem pa se dogaja, da vam povem, stanje, kakšne okvare, ki je bil, in vse mogoče stvari. Moraš se prepričajte, ravnati tako primere, sicer se program ponori. [01:30:42] Davin: Torej, ja, to je točno kaj ste videli na zadnjem p-set. Dejanska AJAX klic v get JSON. To je klic. In potem, dot storiti je všeč preveri, če je uspešen. Če je uspešen, ki jih želite nekaj narediti s podatki. Dobiš nazaj od Podatki Povpraševanje JSON. To je tisto, kar boste dobili nazaj. Torej, če se spomnite iz vašega p-set, Veliko vas je bilo všeč podatkovnega nosilca i ali karkoli, pika povezavo ali naslov. Karkoli se vrača od tega JSON, ne glede na polja, so v tej JSON objekt, da je tisto, kar ste dobili nazaj. Data je tisto, kar ste dobili nazaj. Stanje besedila, nekaj, vam omogoča, da vedo, kaj se je zgodilo. In potem, jqXHR, da je samo Zahteva XML HTTP jQuery. To je tako kot objekt. In potem ne, tako kot je povedal Gabe. Gabe: V naši mali primer abc123 Samo za preverjanje, če je to v bazi ali ne, bi bili podatki, nekaj, kar bi naredil, če podatki dot uporabniško ime ne obstaja, ki je, kaj vaš PHP ustvarila za vam, če uporabnik podatki dot ime obstaja, potem Jaz grem za opozarjanje, uporabnik ime že obstaja. Drugega, sem le, da bo pustil uporabnik nadaljuje, da izpolnite obrazec. OK, varnost, cool. [01:31:50] Davin: Želiš, da? [01:31:52] Gabe: Všeč mi je tale. Torej nekaj, kar izgleda znano. Smo že skoraj pri koncu. Torej je to samo primer fantje videli v razredu. Ste uporabljali argv1 tukaj. To je kot argument ukazne vrstice. In smo mem kopiranje da v pufru velikosti 12. Kaj je tu problem? Buffer overflow! Ker imamo pufer velikosti 12. argv1 morda velikost dve milijardi. Ne delamo nobene mejno kontrolo. Tako bomo morda kopirati veliko pomnilnika. In bomo še posebej slabega o tem. Kaj lahko storimo, da je Zelo, zelo pomeni v tem primeru? Ja? OBČINSTVO: Del dve milijardi stvari vsebuje izvedljivo kodo, ki vrne [Neslišno]. Gabe: Točno tako. Tako, da je vrsta stvar, ki jo ljudje uporabljajo Bjekstvo iz zapora iPhone, na primer. Tako da take stvari. Saj lahko le, da napravo izvršiti nobenega kodeksa, ki ti je všeč. Popraviti, tako da je popravek preprost. Samo poglejte za meje. Vi preverite null zato, ker smo vedno preverite null ko imamo opravka s strunami. In potem vzameš Dolžina niz prej. In če niz dolžina je veljaven niz dolžina, ki je v 0 in 12, potem smo dobri. [01:33:03] Davin: Če ne preveri null, resnično hitro, kaj se bo zgodilo? To bo SEG napako. Zato bo SEG je kriv? Ker kličeš strlen na null. Gabe: Ja. Drži ali ne drži, z uporabo enega Geslo je dobra ideja. [01:33:19] OBČINSTVO: False. [01:33:20] Gabe: False. Uporabite veliko gesel, in velik, dolg podjetja. Ključavnico ikone zagotavljanje varnosti. [01:33:26] OBČINSTVO: False. [01:33:27] Gabe: False. To ne pomeni ničesar. To je samo ikona. SSL varuje pred Človek v sredini napadu. OBČINSTVO: False. Gabe: False. OK, torej vsi tisti, so napačne. Lepo. [Neslišno] Želim govoriti o tem? Ti si na vrsti. Davin: Vrste napadov, Človek v sredini. Kaj je človek v srednjem napadu? OBČINSTVO: [neslišno]. Davin: Če pošljete HTTP Zahteva, da bi to naredil, kajne? Ampak, če ste pošiljanje HTTPS, ki jih verjetno ne bo mogel to storiti. Obstaja veliko točk vzdolž vaše povezave. Imate usmerjevalniki. Imate DNS strežnikov. Če je nekdo sposoben fizično videli, kaj ste poslali, da je nekdo sposoben dejansko dobili med vami, odjemalec in strežnik, in je lahko videli, kaj ste poslali, To je človek v srednjem napadu. Torej, da bi videli, kaj ste poskušali dobiti od strežnik, ali je sposoben see-- slabše, boste morda lahko videli, piškote ali nekaj takega. [01:34:16] Tako na primer, če ne uporabljate SSL, je Morda bi lahko videli Vaša seja ID piškotke. In to se imenuje seja ugrabitve ker vidi svoje piškotke, in potem je on sposoben iti, da Spletna stran in se pretvarjamo, da vas bo. Ker tako kot v PHP, ne pozabite, ko smo prijavljeni, kaj naj naredimo? Postavili smo Session ID, ki je enak ID. Tako, da vas identificira. Zato si lahko ogledate vaš portfelj in ne vsakdo drug portfelj. [01:34:38] No, če sem lahko dobil ta piškotek, Nato sem se lahko prijavite na tej strani. In potem sem lahko samo videti svoje stvari in začeti nakup in prodajo stvari. Tako da je seja ugrabitve. Vendar si ne bi mogli to-- tako vas Uporabite lahko človek v srednji napad tudi če ste z uporabo SSL. Ampak vi ne bi mogli. Če uporabljate SSL, ne moreš seja ugrabitvijo. Zakaj? Saj je vse šifrirane, kajne? če je to šifrirano, in še vedno sem človek srednji, jaz še vedno dobite podatke. To je v redu. Ampak to je šifriran. Torej ne morem uporabiti. Tako da je dva. [01:35:09] Real hitro, cross site zahteva ponarejanje. To je samo, če obstaja povezava in da je povezava naredi nekaj da ne misliš, da bi morali storiti. Tako na primer, če je povezava gre za nakup zalog ali prodati zaloge, pa niste vedeli, da. Ste kliknili na povezavo, poslal zahtevo, kupili ali prodajajo nekaj, si ni mislil narediti. To je to. [01:35:25] Cross site skriptno, zato je tu, ste, ki poteka v preko spremenljive q, namesto da poteka v nekakšnem vrednosti, morda q je kot ime. Torej, namesto da gre Q je enak Davin ali nekaj takega, Če ne uporabljate HTML posebnih znakov, če vas ne pobegniti to, da se prepričajte, da je OK, potem sem lahko potujejo v namesto, recimo, da tukaj govorim tiskanja ali nekaj takega, Nato sem mogel prenesti tukaj skript klic. [01:35:51] Torej, namesto ravno spremenljivko, Jaz bi potem poženite ta skript klic. Tako znotraj te skripte poklicati, kaj počne? Dokument dot lokacija, da se dogaja, da spremeniti lokacijo dokumenta. Tako da bom za preusmeritev nekje drugje. Imenuje slab fant v ta primer, zelo dobro. Ni mogel misliti besede. In potem, kaj je še huje je, da grem bi nato določil piškotek, ki je nekaj spremenljivka imam na tej spletni strani. Grem, da določi, da je enaka na dokument dot piškotek. Zato grem ukrasti piškotek. In grem preusmeriti nekatere informacije na spletni strani da ne bi smeli biti dostop do njih. In vse to se zgodi zato, ker ste ne uhaja, kar ste videli. Ja? [01:36:29] OBČINSTVO: Torej, samo da bi da to jasno, da je vulnerable.com da je občutljiva na to. Tako da se lahko zdi, da povezava na nobeni strani. Nekdo klikne na njo, gre za vulnerable.com. Imate piškotek vulnerable.com. Recimo, da je Facebook ranljivi, zato facebook.com. Imate Facebook piškotek. Kaj počne to, da ste bo facebook.com, to je takoj preusmeriti da badguy.com, vendar vključno z vaše podatke piškotkov. Torej, to je hitro preusmeritev, vendar vaš Facebook piškotek je vključen v to preusmeritev, in to je, kako so [neslišno]. Gabe: Ja, tam je nekaj zelo povprečne stvari da lahko ljudje, če je to. Na primer, če Facebook dovoljeno vsi, da spremenite svoje uporabniško ime in niso storite Pregledi sanity, zato vas lahko vstavite JavaScript stvar, ki spreminja svojo podobo na hrčka. In da se vstavi enako JavaScript v vsem, ki vidi svojo stran. Torej vsi, ki vidi svojo stran ima isto stvar v uporabniškim imenom. In zato, ker je virus, se širi eksponentno. Davin: Bomo preskočili zadnje ena, nato pa smo končali. Torej je to samo en primer. Torej, to je, oni ne pobeg svoj SQL tabelo. Tako da lahko spusti. Torej hočeš pobegniti stvari. Da je bil prejšnji primer z navzkrižnim site skriptno. Žal smo tekel malo pozno. Jutri, žal! Jutri bomo imeli uradnih ur. Torej uradnih ur v Cabbot 8:00-11:00. Pisarniške ure so strogo za kviz vprašanja.