[00:00:02] [MUSIC JOC] HANNAH: Bună, toată lumea. Vă mulțumesc baieti atât de mult pentru ieșirea în vremea dezgustător pentru test un revizui sesiune. După cum voi știți, test unul este miercuri. Deci, vom merge printr-o mulțime de subiecte. Davin: Hei, pot să spun ceva foarte repede? HANNAH: Da, lui Davin merge a spune ceva foarte repede. Davin: Îmi pare rău. Doar foarte repede, dacă aveți întrebări despre testul, poti sa te duci on-line. Du-te la 2,014 test este de aproximativ testul. Este logistică recuperează despre unde să meargă, atunci când pentru a merge. Dacă sunteți înscris simultan, suntem va avea un test de machiaj la 5:30. Sau, dacă mi-ai trimis o problemă, aveți o altă problemă. Dar 5:30 este make-up de miercuri. Dar, dacă aveți întrebări, întrebări generale, online are toata logistica. Deci, a verifica acolo mai întâi. [00:00:47] HANNAH: Awesome. Deci, aici e lista mare de subiecte că vom trece prin ziua de azi. Am de gând să acoperi toate C chestii, și anume că prima coloană. Deci, lucrurile C pe care le acoperit după test de zero. Incepand cu o listă legată, care include indicii. [00:01:05] Bine, așa că am văzut această în ultima sesiune de revizuire, așa am de gând să merg prin acest lucru este un pic mai repede. Doar ridica mâna dacă vrei să încetini sau adresa ceva mai mult. Dar noi folosim liste legate deoarece am început în C, cu matrice. Și matrice sunt mari, dar problemă este că au o dimensiune fixă. Listele legat ne permit să creeze dimensionată dinamic structuri de date. [00:01:28] Și avem operațiunile noastre de bază, insera, șterge, și de căutare. Și putem face inserați în cel mai rău caz timp constant dacă ne-am pus-o la bun început. Ștergeți si cauta, cel mai rău caz mare oh de n timp. Deci, din nou, doar pentru a răsturna prin aceste imagini, Știu că am văzut aceste data trecută, dar ne doriți să urmăriți de pe lista noastră de legat Prin urmărirea șef de lista noastră legată. Pentru că știm că fiecare dintre noduri noastre este doar de gând să punct la următor nod în lista noastră legată. [00:01:58] Deci așa urmarim. Chiar dacă acestea nu sunt piese continue de memorie, le putem găsi doar prin în urma diferitelor săgeți. Aici este structura noastră pentru un nod listă legat. Am văzut acest ultim moment. Avem nod nostru struct. Și are două proprietăți. Numărul unu, real Valoarea vrem să stocați. În acest caz, este un număr întreg. Ar putea fi un șir de caractere, aceasta ar putea fi un char, tot ce vrei. Și apoi, trebuie să țină evidența urmatorul nod din lista noastră legată. Așa că va fi un pointer la nodul următor. Dacă ați fost doar faci căutare, cum am spus mai înainte, ai avea să urmeze săgețile jos. Introducerea, ar trebui să țineți evidența de unde restul de lista este. Și vrei să redirecționați cap pentru a indica noi elemente, care în acest caz este unul, iar apoi se va indica la restul listei de legătura. Deci, din nou, știu că acest lucru este un pic bit de o repetare de la test la zero. Așa că trebuie să fim foarte atenți despre ordinea în care ne-am face aceste pointings așa că nu pierde urma partea din spate a listei. OK, întrebări cu doar legate individual liste? Awesome, OK, rece. [00:03:06] Acum, vom merge pe ceva doar puțin mai complicat, legate de două ori liste. Deci, în plus față de păstrarea cale de nod următor, dorim, de asemenea, să țină evidența al nodului precedent. Și acest lucru ne permite să, dacă suntem la un moment dat în lista noastră legată, du-te nu numai înainte, ci De asemenea, repeta înapoi. Pentru că așa cum am văzut în o listă individual legate, dacă am fost la un nod, și dintr-o dată, ne-am decis, de fapt, eu vreau să merg la dreptul de nod în fața mea, ai avea pentru a merge tot drumul înapoi la cap și repeta prin până când găsit nodul pe care o căutați. [00:03:35] Deci, acest lucru face lucrurile usor mai usor ca suntem încercarea de a repeta prin intermediul lista noastră legată. Dar ne cere pentru a ține evidența unul mai pointer, deci mai mult de o stea nod. Bine, deci aici vine partea distractivă. Vom practica de punere în aplicare elimina pentru listele de două ori legate. Deci, aceasta este ceva care este joc total corect pentru testul. Ea a apărut pe teste din trecut. Deci, cu siguranță fi preparate pentru a coda un pic în C. Nu uita ca, cu toate acest PHP distracție și JavaScript, tot trebuie să ne amintim să facă C. Deci, perie pe care dacă vă simțiți ruginit. [00:04:12] Bine, să vedem dacă putem face acest lucru. OK, rece. Deci, vom încerca pentru a edita chiar aici, și sperăm că acest lucru merge conform planurilor. Bine, nimeni nu vrea să-mi dea o sugestie cu privire la cum ar trebui să încep? Singura ipoteza că sunt luare este că eu deja au o structură definită, o am arătat pe ultima pagină, pe ultimul diapozitiv. Și mă stocarea capul legat meu list in unele pointer numit listă. Are cineva vrea să mă început? [00:04:42] Audiența: Pot să vă creați un nou nod pentru a apela prin lista? [00:04:45] HANNAH: Awesome, așa vom crea un nod nou să se târască prin lista. Îmi place asta. Voi doar numesc pointer dacă e în regulă. Și în cazul în care ar trebui să înceapă inițial? [00:04:57] Audiența: Probabil la capul listei. HANNAH: Frumos. Dorim să înceapă de la cap, care I-am spus va fi stocat în lista. Minunat. Până acum, bine. Și acum, scopul nostru este de a repeta prin lista până când vom găsi nodul cu Valoarea n care vrem să-l ștergeți. OK? [00:05:13] Deci, acum este partea în care vrem să itera prin. Poate cineva sugerează o mod de a repeta prin? [00:05:19] Audiența: O buclă. [00:05:20] HANNAH: O buclă. Îmi place. Mai exact, putem încerca o buclă în timp ce. OK, și știm că ne-am atins la sfârșitul listei noastre când ce? Audiența: Când indicatorul este nul. HANNAH: Când indicatorul este nul. Frumos, îmi place. OK, rece. Deci, îmi pare rău dacă bretele meu de încadrare este fel de a cădea de pe ecran. Am adus înapoi. OK, rece. Ce urmează? [00:05:48] Deci, știm că doriți să ștergeți nodul care are valoare n. Deci, haideți să găsim cazul în care găsim de fapt nod nostru. Deci, cum aș verifica asta? Aș spune doar dacă indicatorul, iar apoi, dacă am doriți să obțineți valoarea de pointer, Eu doar mi săgeată n, este egal n, parametrul că am dat la această funcție, nod pe care ne-o dorim pentru a șterge de fapt. Orice întrebări până aici? În regulă. OK, deci acum hai desena o imagine rapidă pe placa pentru a vizualiza acest lucru. [00:06:24] Deci, haideți să spunem că e nod nostru minunat. Și are o valoare, o să spun doar patru. Și arată la alta nod în lista noastră legată. Și nu e nimic în fața sa. Deci avem precedent nostru arătând spre nimic. În acest caz, am punctul înapoi. OK, doar înființarea mea Lista de legat aici. Și avem o listă care indică la această structură pentru a începe cu. Voi trage una mai mult pentru Cu titlu suplimentar. OK. Voi punctul acesta înainte. Și voi subliniez că unul înapoi. Hopa, îmi pare rău. Da, a primit această invers. Fă-o din nou. OK, nu mergem. Bine, am înțeles. OK, aici e imaginea noastră. [00:07:21] OK, deci ne-am dori să ia în considerare două cazuri. Primul caz este dacă este nod vrem să-l ștergeți este chiar la începutul listei noastre. Și apoi, de-al doilea caz pe care ne-o dorim să ia în considerare este dacă e în altă parte. Am înțeles că acest lucru o cu totul desen murdar cu toată ștergerea mea, dar sperăm că vom încerca să face acest lucru clar cu un cod. [00:07:40] OK, deci haideți să acopere cazul unde am găsit nod nostru, și este la foarte începe de lista noastră legată. Oricine-mi dea un sugestie aici la ceea ce Ar trebui să fac pentru a elimina de fapt nod nostru? E un pic complicat. OK? [00:07:56] Audiența: Trebuie să luați nod care ar fi sesizată și să-l punct la unul care ar fi după ea, și să ia nodul care ar fi după ea și face se indică nodul în fața sa. HANNAH: Exact. OK, deci acesta este cazul where-- avem două cazuri. Avem cazul în care nod pe care-l căutăm este partea din față a listei. OK, iar apoi cazul în care ați descris este altfel, nu? E undeva în listă. Deci ai spus, trebuie să uita-te la nodul anterior, și de a face nodul precedent indică nodul următor. Deci, să spunem că suntem încercând să scoate cinci în desenul meu foarte murdar aici. Vrem să ne asigurăm că patru puncte acum la șase. Patru lui urmatorii puncte la șase. Și șase de puncte anterioare la patru. Asta e scopul nostru aici, nu? Aceasta este ceea ce crezi tocmai a spus acolo. [00:08:56] OK, deci hai obține că primul piesă. Să facem avea indicatorul precedent precedent. Deci, patru de pe lângă ar trebui să arate la ce? Exact, în acest caz, șase. Deci, ar trebui să spunem pointer, următorul. OK? În regulă. Deci, haideți să scăpăm de această imagine urât și să încerce să atragă un ușor mai frumos. Avem capul nostru listă aici. Și asta arată la primul nod din Lista noastră legată, pe care am spus este de patru. Iată al doilea nod nostru, cinci. Și în al treilea nod nostru, șase. Încerc doar să atragă exact același lucru imagine, doar un pic mai curat. OK, deci patru pe lângă subliniază inițial la cinci. Cinci lui urmatorii puncte la șase. Șase Puncte anterioare la cinci. Și cinci de puncte anterioare la patru. Deci, mult mai plăcut! OK, rece. [00:10:04] Deci, acum, ce am făcut doar aici, această linie de cod, care spune pointer precedent următor, astfel încât ceea ce înseamnă asta? Asta înseamnă că dacă ne uităm la cinci, du-te la nodul anterior, și e viitor ar trebui să acum Punct de cinci pe lângă. Deci, în esență, ceea ce e faci se că este stergerea această săgeată și făcându-l sări drept peste cinci. E clar? Știu că pot fi un pic vag. Văd niște dă din cap. Asta e bine. OK, rece. Acum, care e următorul pas? [00:10:39] Am resetat următoare. Acum, ce alte sageata am nevoie pentru a schimba? Asta chiar aici. Șase anterioara. Noi nu vrem șase anterioara a mai indica cinci. Ne dorim ca aceasta să indice patru. Asta imagine sens? Deci, acum putem lua de fapt cinci. Așa că hai să această piesă. Ce trebuie să fac înainte de a reseta șase anterioara a patru? Orice idei acolo? [00:11:14] Audiența: Elibereaza nodul dintre le prin stabilirea acesteia la null? HANNAH: cool. Categoric, scopul nostru final este Va fi pentru a elibera nodul. Deci, putem face asta aici. Pointer gratuit. Absolut. Dar chiar înainte de asta, hai doar-- dreptul nostru poartă aici este de a stabili indicatorul următor precedent egală cu pointer precedent. Știu că acest lucru este obtinerea acoperit. OK, hai take-- se răcească. Poate toată lumea vedea acest linia de fund? Sau este foarte mic? [00:11:50] Deci, înainte de a executa această linie de aici, ne-o dorim pentru a se asigura că indicatorul următor nu este nul. Pentru că dacă pointer urmator nul, ce fel de eroare voi primi când încerc să referire la un pointer nul? Audiența: defect Seg. HANNAH: Un defect SEG, frumos. OK, deci, dacă nu e nul, atunci putem reseta. Și avem șase punct din nou la patru. Întrebări până în acest punct? Da? [00:12:17] Audiența: In primul dacă declarație, ai făcut înseamnă a avea săgeata următor, sau [inaudibil]? HANNAH: am vrut să spun pointer sageata n. Deci, practic, ceea ce am încercat să fac este spune, nodul curent că sunt iterarea peste, nodul curent care Mă uit la, eu sunt stocarea în pointer. Și vreau să știu indicatorul lui valoare, care în acest caz este n. Și vreau să văd, este nodul caut pentru nodul am scopul de a șterge? Deci, de aceea avem aici pointer n. [00:12:47] Audiența: Deci săgeata merge la n, setați valoarea și se păstrează într-un nod numit n? [00:12:55] HANNAH: Deci e ca și cum dacă eu sunt trece prin această listă legată și arătând spre cinci. Dacă doriți să obțineți această valoare, în cazul în care Vreau să ajung ca număr, 5, Trebuie să fac indicatorul sageata n. Cool? Da. [00:13:07] Audiența: este N numele variabilei? HANNAH: Da. Deci, dacă ne-am răsturna înapoi cu o diapozitiv, n este numele din valoarea interiorul nod în lista noastră legată. Și știu că pot obține un pic pic confuz pentru că noi, de asemenea, sunt de asteptare lucru că vrem să ștergeți n. Deci asta în cazul în care o linie vine de la. Da? [00:13:27] Audiența: Ce ai [Inaudibil] modul în care acestea funcționează? Un pointer [inaudibil]? [00:13:35] HANNAH: Sigur. Vorbești about-- care linie? Audienta: Ultima linie [neauzit]. [00:13:44] HANNAH: Sigur, OK. Deci, să ne uităm la imaginea de la pentru a încerca să explic acest lucru. Îmi pare rău, pentru aparat de fotografiat, întrebarea a fost putem explica pointer săgeata de lângă indicatorul precedent. OK, deci să spunem că suntem la cinci iar obiectivul nostru este de a șterge cinci. Deci pointer următor, care dintre acestea trei noduri nu asta ne da? Asta ne aduce la al șaselea nodul, nu? [00:14:10] OK, deci acum suntem cere pentru precedent sase de. OK? Și suntem resetare acest să fie egal cu patru, care sa întâmplat să fie cinci anterioara. Știu, e foarte greu pentru a ține evidența. Eu chiar recomand sa deseneze dacă aveți o întrebare ca aceasta. Da? [00:14:30] Audiența: Este motivul pentru care nu avem o [inaudibil]? [00:14:37] HANNAH: Exact. Deci, întrebarea a fost, de ce nu avem nevoie pentru a verifica aici? De ce nu avem nevoie pentru a verifica dacă indicatorul precedent nu este egal cu null? Și pentru că ne-am deja separat cazul dacă indicatorul de de la bun început. Foarte bine întrebare. Altceva pe asta? OK, rece. Deci, haideți să-l termin. Suntem aproape acolo. [00:14:59] Și ce dacă aceasta se află la conducerea? Ce se întâmplă dacă în loc de încercarea de a șterge cinci, am vrut de fapt să ștergeți patru? Ce trebuie să fac? Ei bine, eu vreau să reseta capul meu de ce? Shout-l? Audienta: Cel după el. HANNAH: Frumos. OK, deci ne dorim să fie îndreptată lista la orice indicator următorul nod nostru este. Bună. Și pentru a completitudinea sake, ne-ar care doriți să verificați că atâta timp cât lista noastră nu este nul, atâta timp cât lista noastră nu este gol, apoi ne-am dori să se stabilească precedent nostru egală cu zero. Intrebare până acum? Un pas from--? [00:15:53] Audiența: Ar fi cazul listă nu este egal cu null? [00:15:55] HANNAH: Da, ești complet dreptate. Îmi pare atât de rău. Este listă nu este egal cu null. Minunat. Încercarea de a aduce toate aceste pe ecran. E un fel de a cădea. Îmi pare rău, băieți. Și nu în ultimul rând, toate trebuie să facem este întoarcerea. OK. Asta a fost o mulțime ticsit în foarte repede. Ia-o a doua să se uite peste asta. Spune-mi dacă aveți întrebări. Da? [00:16:20] Audiența: Dacă lista este la cap, then-- așteptați, Nevermind. [00:16:26] HANNAH: OK, bine. Deci, aceasta este dacă lista este la cap, am elimina de tot ceea ce ne introduce. Da? [00:16:31] Audiența: Puteți explica primul if din nou? În cazul în care indicatorul a n este egal cu n? HANNAH: Sigur. Deci, scopul nostru a acestei funcții întreg este pentru a șterge nodul care are valoare n. Deci, dacă găsim, așa cum suntem iterarea prin lista noastră, nodul cu valoare n, asta e cel pe care doriți să o ștergeți. Deci, toate ștergerea se întâmplă în interiorul acestei mari if. Are care face sens? Se răcește. Da? [00:16:59] Audiența: Poate chiar nu se poate vedea ea, dar nu ai nevoie de asemenea, o linie pentru parcurgeți lista? HANNAH: Awesome. Să aducem asta un pic, și vom arunca acest drept în partea de jos. Poate placa s-ar fi a fost o idee ceva mai bine. Deci, cum mi-ar muta pointer mai departe? [00:17:17] Audiența: Pointer este egal cu indicatorul plus unu. [00:17:20] HANNAH: Frumos. Așa că ne permite să continuă iterarea prin. OK. Audiența: N-ar fi acolo o altcineva? HANNAH: Încă o dată? Audiența: N-ar fi acolo o altfel de la mare vechi în cazul în care Declarație [inaudibil]? HANNAH: Care parte? Îmi pare rău. [00:17:38] Audienta: traversarea, nu ar trebui să existe o altcineva? HANNAH: Ai absolut ar putea avea o altcineva. Pentru că am un drept de retur acolo, nu aveți nevoie de un altfel. Dar da, bine întrebare. OK, da? Audiența: Putem gândi pointer care se mișcă prin lista și luarea de valoarea de fiecare nod din listă? Sau ar trebui să ne gândim la el ca la un fel de externe la lista? [00:18:00] HANNAH: Fie o este bine, cred. Modul în care am imagina este Eu spun, bine, eu sunt pointer. Și acest lucru este mine. Aceasta este mâna mea. Am de gând să subliniez diferite lucruri pe care vreau să repeta prin. În primul rând, am de gând să subliniez la capul listei. Și asta mi-a spus eu sunt O să indica patru. Și așa mă, fiind extern la lista, Pot indica fiecare dintre aceste elemente. Așa că mă gândesc la mine ca indicator. Audiența: Deci, atunci când ștergeți unul dintre aceste elemente, ștergeți le ca să spunem așa. HANNAH: Exact. Deci, ștergeți lucru ești arătând spre. Deci, în exemplul pe care am văzut unde suntem încercarea de a șterge cinci, când am îndreptat spre cinci, Vreau să ștergeți lucru am îndreptat spre. Exact dreapta. Da? Audiența: Ne-am ocupat de caz în care n nu este în listă? HANNAH: Daca n nu este în listă? Tot ceea ce se va întâmpla este că ești O să itera prin și repeta prin, iar apoi, vei pentru a ajunge la pointer fiind nul, iar apoi vei face. [00:18:48] Audiența: Deci, avem să se întoarcă ceva? HANNAH: Am putea. Modul în care în cazul în care a definit această funcție, eu spun doar că acesta revine anula indiferent de. Dar ai putea avea ceva ca revenind un număr întreg, și l-au reveni negativ 1 daca nu reușește. Ceva de genul asta. Întrebări aplice: da? Audiența: [inaudibil]? HANNAH: Îmi pare rău? Audiența: [inaudibil]? HANNAH: Sigur. Deci asta e actual-- dată ne-am făcut toată această muncă de mișcare toate aceste săgeți în jurul valorii de, întregului nostru scop a fost de a scăpa de nodului pe care le căutați. Deci, în acest caz, eliberând pointer, dacă am îndreptat spre cinci, e ca si cum ștergerea acest nod de mijloc. Asta e partea gratuit pointer. Care fac sens? [00:19:29] Audiența: Deci, chiar crezut ai făcut nu [inaudibil]? [00:19:31] HANNAH: Deci, ne-am asumat de la început am avut niște listă care a fost already-- ei au pus acest lucru împreună. Deci, în scopul de a construi acest listă, ei trebuie să fi [neauzit]. Se răcește. Altceva cu asta? Da? [00:19:46] Audiența: Ce se întâmplă dacă lista nu este egală cu linia de nul? [Inaudibil]? HANNAH: Chiar aici? Audiența: Da. HANNAH: OK, tot ce fac este eu sunt doar asigurându-vă că înainte de a încerca să listă dereference, înainte de a încerca să acceseze anterior, Vreau să vă asigurați că nu este nul așa că nu primesc o eroare SEG. Se răcește. [00:20:08] OK, știu că acest lucru a fost destul de o mulțime de a obține prin intermediul. Deci, acest diapozitiv va fi puse la dispoziție pentru tine. Deci, poti sa te duci prin ea mai în detaliu. Da? [00:20:17] Audiența: De ce lista [inaudibil]? HANNAH: Sigur. Deci, într-adevăr listă punctele de acest element aici, primul element din listă. Deci nu poate avea un precedent. Da? [00:20:31] Audiența: Are punctul de pointer la aceeași adresă în memorie? Are punctul de la același adresa în memorie ca nodul că este arătând spre? [00:20:40] HANNAH: Da, aceasta subliniază la acest nod în memorie. [00:20:43] Audiența: Corect, așa atunci când [inaudibil]? [00:20:47] HANNAH: Într-un sens, da. OK. Bine, să mergem împreună cu acest lucru. Și dacă aveți mai multe întrebări, lipi în jurul valorii de la sfârșitul anului, și putem trece prin ea din nou. OK, rece. Acum, ajungem să mergem mai departe a hash tabele, nereușite, și copaci, pe care le-am super- familiarizeze cu cinci, setați-p abecedar. [00:21:04] Deci tabel hash este doar un matrice cu liste individual legate sau de două ori legate de listele provenind de pe ea. Deci avem un fel de tablou asociativ. Și cum știm care dintre acestea matrice galeti pentru a obține în, vom folosi o funcție hash. Deci, în acest caz, poate cineva ghici ce funcția de distribuire ar fi doar pe baza unor de intrare și ieșire? [00:21:31] Audiența: Numărul literă a alfabetului. HANNAH: Exact. Este doar le pune în ordine alfabetică. Tot ce începe cu o A este pus în primul găleată. Totul cu un B este pus în în al doilea rând găleată, așa mai departe, și așa mai departe. Awesome, OK. Și o funcție hash este orice funcție care ia într-un cuvânt și vă va spune ce cupă face parte din. Deci, care intrare în nostru matrice face parte din. [00:21:55] Așa că de fiecare dată când dau meu hash funcționează un cuvânt, aceasta ar trebui să-mi spui la fel așezați fiecare dată. Deci, dacă vom folosi funcția hash de la diapozitivul anterior unde suntem sortare de prima literă a alfabetului, de fiecare dată când dau meu funcție hash "măr", aceasta ar trebui să dea întotdeauna mă înapoi la 0. Deci, dacă am un măr pentru a pune în masa mea hash, dacă da "măr" pentru funcția mea hash, aceasta ar trebui să spun, du-te pune-l în găleată 0. Dacă Caut o măr în masa mea de dispersie și spun, în cazul în care s-ar putea de mere live, vă întreb funcția hash. Și se spune, du-te la cupă 0. În regulă? Întrebări cu funcții hash? Minunat. [00:22:34] Aici este un pic mai explicație detaliată de ce o funcție hash ar putea arata. În regulă. Acum, problema cu hash funcții este într-o lume ideală, am avea doar un singur lucru în fiecare compartiment. Dar, în realitate, nu e nu doar un singur cuvânt care începe cu A. Nu e doar un singur cuvânt care începe cu B. Deci în acest caz, dacă ne-am brusc primi "boabe", și vrem să-l puneți în masa noastră hash, și vom vedea, oh, nu, banane este deja acolo, ceea ce vom face? [00:23:03] Ei bine, avem două opțiuni. Prima opțiune este liniar palpare, care înseamnă doar du-te găsi următor găleată goală. Du-te găsi următorul intrarea array gol. Și a pus "boabe" acolo. Deci, eu știu că trebuia să du-te cu banane în găleată unul. Dar se pune în găleată trei, deoarece găleată trei este gol. O altă opțiune este, probabil, ceea ce pune în aplicare în dumneavoastră p-set, în cazul în care a avut înlănțuire separat. Astfel, fiecare dintre cupe tale, fiecare dintre elementele de dumneavoastră matrice, deține nu numai unul cuvinte, dar de fapt deține un pointer la o listă de cuvinte. Așa că, dacă ai avut banane în tabel hash și ai vrut brusc pentru a adăuga boabe, nici o problema. Doar adăugați boabe pe final, sau a la început, a listei legate. OK, minunat. Întrebări cu hash tabele înainte de a merge la? [00:23:58] În regulă. Arbori și încearcă. OK, deci aceasta a fost o altă opțiune pentru punerea în aplicare a dicționar. Ai fi putut făcut o încercare. Deci este un tip special de copac care se comportă ca un tabel de dispersie pe mai multe niveluri. Deci, veți vedea imaginea în cazul în care aveți o matrice care indică o grămadă de matrice care indică o grămadă de matrice care indică o grămadă de tablouri. Și vom vedea exact despre ce ar arata ca pe un diapozitiv viitor. Și mai mult, în general, un copac este doar o structură de date în care datele sunt organizat în unele ierarhie. Deci, unde am văzut avem un fel de înțelegere de un nivel superior, un nivel următor, un nivel următor, un nivel următor. Deci, aceasta este, probabil, cel mai clar cu unele exemple specifice. Deci, aici e copacul nostru. Puteti vedea ca are un nivel special că începem cu faptul că nodul rădăcină, o. Și putem merge în jos, prin copacul nostru. [00:24:50] Un arbore binar este un anumit tip de copac. Și numai caietul de sarcini pentru un arbore binar este că fiecare nod are de cel mult două frunze. Deci nu o să vedem un din aceste noduri au trei sau patru sau un alt număr de frunze. Și apoi chiar mai specific este un arbore binar de căutare în cazul în care fiecare nod la stânga nod va avea o valoare mai mică. Și fiecare valoare la drept va fi mai mare. Deci, dacă vedeți 44 este la radacina noastra, la stânga, 11, 22, și 33 sunt toate la mai puțin de radacina noastra. Și pe dreapta sunt toate Numerele bigger-- 66, 55, și 77. Și această proprietate este valabil la fiecare nivel al arborelui. [00:25:37] Așa că atunci când vom merge până la 22, 11, și 33, încă 11 este mai mic decât 22 și 33 este mai mare de 22. Și acest lucru face mai ușor pentru a căuta pentru că dacă căutăm un număr, știm exact ce ramură să urmeze jos. Deci, aceasta ar trebui să vă reamintesc o pic de căutare binar. Da? [00:25:56] Audiența: Deci, atunci când sunteți descrie binar, ai spus că are cel mult două frunze? HANNAH: Mm-hm. Audiența: Ar putea avea mai puțin? HANNAH: Da. Deci, haideți să spunem, de exemplu, nu avea un număr par de lucruri și nu ai putea umple tot tău frunze, e în regulă, dacă unul are unul. OK? Minunat. Orice alte întrebări cu privire la copaci? OK. [00:26:16] Înapoi la încercări noastre vorbeam despre un pic mai devreme, cum avem aceste tablouri multi-nivel. Deci, în acest caz, vom începe în partea de sus. Și putem urmări orice cuvânt dat jos. Deci, să spunem am vrut să caute Turing. Începem de la T, l urmeze jos la o serie care conține U, și-l urmeze în jos până când vom ajunge la acest mic delta care ne spune, da, ai găsit un cuvânt. Clear pe încercări? Orice pentru a merge acolo? Da? Audiența: Are simbolul de delta trebuie să ocupe spațiu în încercare? HANNAH: Da, așa că nu în mod necesar chiar trebuie să fie o deltă. Dar avem nevoie de un mod de a spune nostru computer-- pare rău, astfel încât să știm că TUR nu este un cuvânt. Pentru ca să spunem nu am avut acest concept de o delta, acest concept de felicitări, ați găsit un cuvânt, s-ar trece prin și repeta T-U-R, și apoi spune, minunat, l-am gasit! Trebuie să fie un cuvânt. Dar nu e adevărat. Ne dorim ca întreg Turing să fie un cuvânt. Deci, trebuie să avem ceva de la scop care spune, felicitări, ați găsit un cuvânt legitim. Audiența: Deci, dacă ați avut ca 26 de litere din alfabet, ai avea de fapt 27 de chei din încerca ta? [00:27:24] HANNAH: Awesome, da. Deci, de fapt, eu cred că va fi pe slide-ul urmator. Ta-da! În cazul în care, dacă aveți o nod în încercați ta, ești Va trebui 27 de copii în loc de 26. Orice întrebări cu asta? Da? Audiența: De ce încearcă să ia, astfel mult spațiu [inaudibil] ca te duci? De ce este considerat a fi [inaudibil]? HANNAH: Sigur. Să ne întoarcem. Întrebarea este, de ce sunt încercări atât de mult mai mari decât ceva ca un tabel hash. Astfel, pentru fiecare dintre aceste niveluri, chiar dacă ei nu sunt trase aici, trebuie să aveți toate 26 de caractere. Iar motivul pentru care nu puteți spune, oh, dar, ca de Turing, am nu trebuie să aibă oricare dintre cei Aceleași lucruri cu privire la nivelul de U. Ei bine, dacă dintr-o dată ai vrut să adăugați ceva care era ca T-H, ai nevoie pentru a avea capacitate de adăugând că cuvânt. Deci, pentru fiecare literă, ai de gând să aibă pentru a avea o grămadă de tablouri provenind de pe ea. Deci, puteți vedea cum că ar lua într-adevăr mare, foarte repede. Orice alte întrebări? În regulă. Da? [00:28:29] Audiența: Când încercări mai repede decât tabele de dispersie? [00:28:33] HANNAH: Când încercări mai repede decât tabele de dispersie? Deci, dacă ați avut un foarte Funcția rău hash. Deci, să spun că am fost ca, aici e funcția hash. Nu contează ce cuvânt să-mi dai, eu sunt mereu O să-l pună în intrare matrice 0. Și așa ne-am termina cu doar punerea totul într-o listă mare de mult legat. Și așa o perioadă de căutare ar lua în cel mai rău n daca este la sfârșitul listei noastre. Cu încercare, trebuie doar să itera prin literele din cuvântul. Deci, chiar dacă am adaugat un buchet mai multe cuvinte pentru a încerca nostru, ea nu ne-ar lua nici mai mult pentru a găsi un anumit cuvânt. [00:29:09] Tot ce trebuie sa faci este, pentru exemplu, în acest caz, Să spunem că sunteți în căutarea pentru zoom, ne-ar trebui doar pentru a itera peste Z-O-O-M, patru litere. Deci, asta e doar lungime de zoom cuvânt. Nu contează cât de multe mai multe cuvinte am pus în această încercare. Putem obține întotdeauna în aceste patru etape. Minunat. Da? [00:29:32] Audiența: Deci [inaudibil] este o matrice, nu? [00:29:34] HANNAH: Mm-hm. Audiența: Daca esti Cautati [inaudibil], ar trebuie să treacă prin matrice pentru a găsi [inaudibil]? HANNAH: Sigur. Audiența: Asta nu ia mai mult timp? HANNAH: Dacă am de gând să spune că matrice mea este mereu Va fi A, B, C, D, E, F, G, bla bla bla, deci, dacă mereu știu că e în aceeași ordine exact, dacă mereu Știu că e în ordine alfabetică, Pot spune doar O este numărul așa și așa în alfabetul. Doar sari la acel loc. Pentru că minte, cu matrice, putem accesa orice element de care matrice în permanentă timp, dacă știm unde ne ce cautati. Da? [00:30:09] Audiența: Pe anterioară glisați [inaudibil] 27, dar 26 pentru primul. [00:30:14] HANNAH: Îmi pare rău? [00:30:15] Audiența: Nu este prima o 0, deci nu ar fi de 26? [00:30:18] HANNAH: Sigur, asa ca atunci cand spunem 27, e O să ne dea indicii de la 0 la 26. Dar dacă te numeri de fapt cei afară, o să fie 27. Bună întrebare. Altceva? Da? [00:30:31] Audiența: Deci, sunt încercări mai lent decât tabele de dispersie? [00:30:34] HANNAH: Încearcă vor fi, în teoria, mai rapid decat tabele de dispersie dar ocupă mai mult de memorie. Da? Audiența: [inaudibil]? [00:30:45] HANNAH: Îmi pare rău, nu te-am auzit. Audiența: [neauzit]. 0-25 vă oferă 26. [00:30:54] HANNAH: 0 până la 25 ar îți dau 26, dreapta. [00:30:56] Audiența: Și apoi [neauzit]. HANNAH: Corect. Deci, numărul suntem specificând este numărul de lucruri în oferta noastră. Deci, dacă avem 27, e O să ne dea 0 prin 26, care va da camera-ne pentru, în acest caz, Nu mă include un apostrof. Deci ne asistent de la 0 la 25 sunt primele 26 de litere ale alfabetului, sau toate cele 26 de litere ale alfabetului. Și apoi că ultimul lucru, la intrare 26, este va fi verificarea marca, sau delta. Altceva? Minunat. Pierdut spațiul meu. OK, rece. [00:31:31] Așa că am atins deja pe acest lucru. Dar comerțul mare off între incearca si tabele de dispersie este faptul că încearcă furniza, în teorie, uite constant în sus ori, dar folosi o mulțime de memorie. Bine, acum avem puțin structuri mai puțin complicate, și vom face cu C, și ne vom muta dreapta de-a lungul. [00:31:49] Deci stive, am văzut acest în curs în cazul în care avea ceva de genul un teanc de tăvi în cazul în care ultimul lucru pe care îl pe stiva se întâmplă a fi primul lucru pe care îl scoate. Deci, asta e ceea ce defineste de fapt o stivă este că ultimul lucru pe care a pus pe va fi primul lucru pe care îl scoate. Și terminologia pe care le folosim dacă vom pune ceva, dacă vom adăuga ceva la stivă nostru, noi numim asta împingere. Și dacă luăm ceva off, o numim popping. Și dacă vom pună în aplicare o stivă, noi trebuie să fie sigur de a ține evidența atât dimensiunea și capacitatea. Astfel, numărul total de elemente putem deține și numărul actual de elemente pe care le dețin. [00:32:27] Și foarte similar, avem cozi. Și singura diferență este în loc de cu stive, am spus ultimul lucru pe care îl pune pe este primul lucru pe care îl scoate. Deci, cu cozi, primul lucru pe care îl pune în este de gând să fie primul lucru pe care scoate. Deci, acest lucru este ca daca esti de fapt, garnitură de până la un magazin și ești ajutat, apoi prima persoana din linie ar trebui sa fie prima persoana care va fi ajutat. Așa că ar fi o listă de așteptare. [00:32:52] Deci, avem nevoie pentru a ține evidența mărime, capacitate, iar capul de când suntem va lua pe toți în față listei loc de spate. Întrebări despre asta? Orice întrebări C care sunt deranjeaza tine? Structuri de date, oricare dintre chestiile astea distracție? Bine, rece. Așa că voi preda Alison la sari în ceva mai mult de programare. [00:33:14] ALISON: Oh, vom vedea. Vom vedea cât de bine fac aici. OK, am de gând să încerc și zbura prin chestia asta, băieți. Hannah a mers foarte în adâncime pe toate lucrurile ei. Am de gând să încerc să dea ai o privire de ansamblu explozie rapidă astfel încât să putem ajunge la Davin cu toate de distracție JavaScript și securitate lucruri care poate că de fapt doresc să aud mai multe despre. [00:33:33] OK, după cum a spus Hannah, dacă aveți orice întrebări, Mă duc prea repede, vă rog, să-mi spuneți. Voi răspunde la întrebări după cum este necesar. Deci, pentru a începe, vom începe cu probabil unul dintre primele lucruri ai învățat cu web programare, permisiuni. Deci, chmod voi, ar trebui să fi fost de masterat de la acest cu tot pe web Programarea pe care le-ați făcut în ultima vreme. E de fapt doar o comandă care schimbă permisiunile sau permisiunile de acces de obiecte de sistemul nostru de fișiere. Desigur, pentru a efectiv vedea aceste, dacă ești având oricare probleme cu aceste în timpul seturi de probleme, este posibil să fi folosit ls -l, care este lung, pentru a obține vedere un fel de acest fel, în cazul în care de fapt vezi toate permisiunile pentru un fișier. [00:34:16] Și într-adevăr, noi doar de gând să meargă prin destul de repede doar destul de de mult ceea ce fiecare dintre acestea medie. Deci, ne-am d chiar aici, care doar standuri pentru directorul. Evident chiar aici, vom vedea rwx, care este ușor de citit, inscriptibile, și executabil. Acestea ar putea fi, de asemenea, reprezentat ca biți, care vom ajunge în pe pagina următoare. Deci, fiecare triadă că am văzut aici, deci e de trei triade. Am rwx, r nimic x și r nimic x pentru acest prim dosar. Este această structură generală. [00:34:49] Deci avem niște director. Avem un grup de folosire cu aceste permisiuni. Unii grup care are aceste permisiuni, și o lume care are o permisiune. Vă puteți gândi la acestea ca o triadă. Vă puteți gândi la acestea ca trei biți. Astfel, ei pot deține valori oriunde de la 0 în sus la 7, motiv pentru care, uneori, am avut faci chmod 600 în loc de chmod RW orice. Vom obține într-o exemplu acolo. Dar, practic, vă puteți gândi dintre acestea, fie ca doar rwx, sau vă puteți gândi la ele ca unii Numărul de unde această primă de aici reprezintă un număr între 0 și 7, acest al doilea reprezintă un număr între 0 și 7, iar a treia reprezintă un număr între 0 și 7, OK? [00:35:38] r are valoarea 4. w are o valoare de 2, și x are o valoare de 1, motiv pentru care acest permisiunea de aici ar fi chmod 700. Pentru că în acest caz aici, ea ne spune au primul bit se oglindită pe. Deci avem 4 pentru citire. Al doilea bit este oglindită pe pentru w, care este de 2, deci acum avem 6. Și al treilea bit este oglindită pe pentru x, care este de 1, așa că am obține șapte. Și, bineînțeles, grupul nostru și lumea noastră sunt fiecare 0. Deci, aceasta este, de asemenea, echivalent de chmod 700. Și aș încerca cu siguranță să înțelege maparea dintre cele. Nu sunt sigur daca are veni pe un test înainte, dar ar fi o întrebare pe care am putea întreba. [00:36:18] Doar un pic merge chiar în continuare în chmod aici, aici este foarte general structură a unui apel chmod. Deci, desigur, ne-am chmod aici. Referinte, ceea ce se referă acest lucru este care ne da aceste permisiuni sau care suntem luați aceste permisiunile departe de. Deci avem o aici, în permisiunile, ca și cum ne-am oferit chmod un plus x, așa cum vom vedea în curând. o înseamnă doar da acestea specific permisiuni pentru toată lumea. Dă-le tuturor. Deci, ai putea foarte bine avea u plus x sau g plus x sau o plus x sau multiplu acestora. Așa că primul parte este întotdeauna Va fi trimiteri. Cine suntem noi da aceste permisiuni pentru, sau care sunt noi luandu-le departe de? [00:37:03] A doua este operatorul. Deci, voi s-au ocupat cea mai mare parte cu plus. Acest lucru oferă permisiuni oricine ai lor da, întrucât minus, în mod logic, le elimină. Deci, nimic prea teribil acolo. Și apoi Moduri este ceea ce am vorbit despre cu cititul, scrisul, sau de executare. Deci, un plus x înseamnă da executabil permisiuni pentru toată lumea. Apoi, desigur, pe care fișier sau director specific. OK? Toată lumea bună cu chmod? Nu prea rău? [00:37:37] OK, deci HTML, oricare dintre voi sunteți vechi sa-- destul MySpace vârstă? Am trimis această secțiune a mea, și literalmente jumătate din populația sa uitat la mine ca am fost nebun. Și am fost ca, baieti, nu suntem acel bătrân. Haide. Deci, HyperText Markup Language, e sincer doar o modalitate de pentru a afișa anumite lucruri pe web. Deci, este un limbaj de marcare. Nu este un limbaj de scripting. Nu e nici o logică în ea. Este pur și simplu pentru a schimba Se afișează mod ceva. OK, așa că e un important distincție pentru a face. Este considerat un limbaj de marcare, nu un limbaj de scripting. [00:38:12] Deci, aici avem tag-uri HTML noastre. Pe aceasta diapozitiv sunt, probabil, cele mai multe dintre cele pe care ar trebui să fie familiarizat cu și să fie într-adevăr confortabil cu. Deci evident, avem tag HTML, care desemnează că totul în între acestea două vor fi HTML. Avem unele link-ul, care evident vă va da un link către o pagină web extern. Unele din titlu, în capul nostru aici. Și avem corpul nostru cu h1, care este un antet, așa că va face frumos și îndrăzneț și mai mare. Și apoi, avem unele p, care este un paragraf. Ar trebui să știi și să fie familiarizat cu lucruri ca și cum ai insera o imagine, sunt Există alte clase antet? Mi-ar fi cu siguranta confortabil cu div. Deci, acestea au cea mai mare parte de tag-uri că ar trebui să fie familiarizat cu. Dar, desigur, așa cum cu totul în CS 50, lista nu este exhaustivă. Deci, asigurați-vă că perie pe asta. [00:39:08] CSS, deci CSS, dacă vreunul dintre voi ceas seminarul meu din urmă cu două săptămâni, este de fapt doar un mod pentru stilul pagina web? OK, deci avem o limbaj de marcare. HTML, care are grijă de doar textul și în cazul în care ar putea fi pe pagină. Dar CSS este într-adevăr ceea ce face destul de. Ai putea avea acestea în HTML dosare, dar așa cum vom vorbi despre mai târziu, Sunt destul de sigur că s-ar putea fi următorul diapozitiv, ea este o practică comună, și de fapt practică pe care incurajam într-adevăr, pentru tine de a le menține separate atunci când ne vorbesc despre MVC și că întreaga paradigmă. Asta e într-adevăr ceea ce hraneste acest lucru în. [00:39:42] Deci, CSS este doar o modalitate de a face lucrurile arata destul de. Lucrurile de aici, cum ar fi corp și #title și .info, acestea sunt numite selectori și ce ei fac este ei selecta anumite lucruri în fișierul HTML și se aplică indiferent de stil, indiferent de fel de lucruri pe care le doriți, pentru că elementul specific de-ului tău pagina. Deci, aici, avem o culoarea de fundal și o culoare și o familie de fonturi care fiind aplicată la ceea ce este în organism. Deci, dacă ne-am uitat înapoi aici, ea nu s-ar aplica la titlu. Se va aplica doar la ceea ce este în aceste selectoare corp, bine? [00:40:22] Cu titlu aici, aceasta este Va fi același lucru, culoarea textului fiind albastru se întâmplă numai de a afecta ceea ce este în selectorii titlu. La fel ca multe informatii aici. textul va fi roz, indiferent de informatiile meciului, care este chiar aici. Deci, singurul lucru pe care ar fi roz la aceasta pagina este data, luni saptesprezecelea noiembrie 2014. OK, deci CSS este doar o modalitate de a avea mai mult control over-- da? [00:40:48] Audiența: De ce aveți pentru a utiliza hash cu titlu? [00:40:51] HANNAH: diapozitiv departe, promit! Vom ajunge acolo. Deci, acesta este motivul pentru care trebuie să folosim hash. Deci, selectoare ia pe trei principale Formele pe care le vorbesc cu voi despre. Am fyou doresc să învețe mai mult, exista o multime acolo. Există documentație CSS mare. E un nume de etichetă, care are de a face cu doar dvs. tag-uri normale HTML. Deci, H1, p, div, h2, aceste felul de lucruri. Și putem numi doar pe cei ca este. Deci, așa cum vom vedea aici cu corp, este o etichetă normală. Deci, putem pune doar atunci când corpul vorbim în dosarul nostru CSS. [00:41:26] Cu titlu, tot motivul pentru care am au acest hash este că avem ceea ce este considerată un act de identitate. Deci, un ID trebuie să fie întotdeauna unic în pagina HTML astfel încât atunci când sunteți referindu-se la ea, Știi că ești doar referindu- pentru un singur lucru specific. Deci, în acest caz aici, cu nostru h1 aici, CS 50 sesiune comentariu, avem un id de titlu. Deci, în scopul de a se referi doar la acea bucată de HTML noastre, facem un titlu hash. Doar prin convenție, ID-uri sunt desemnate cu un hash în fața lor. În același fel, vom vedea info aici este o clasă. Și astfel de clasă cu CSS este desemnată ca o clasă punct sau dot orice care clasă este. Deci, în acest caz aici, e info. [00:42:10] Așa că am lua înapoi. Ambele ar fi roz pentru CSS aici pentru că ambele au o clasa de info. Și în dosarul nostru CSS, am desemnat că orice cu o clasă de informatii este roz. Asta face sens? Da? [00:42:27] Audiența: Dacă ar fi să vă totul în alb corp, și apoi încercați să facă ceva în interiorul ei albastru, ar cauza probleme care? [00:42:34] HANNAH: Deci, CSS este foi de stil în cascadă. Deci, tot ce este spre de jos vor avea prioritate. Deci, dacă faci ceva cu corpul, și faci totul alb, și apoi mai târziu să schimbați titlul sau modificați textul din corp, se suprascrie asta. Deci, nimic spre de jos vor avea prioritate. Da? [00:42:56] Audiența: și ID-urile sunt unice, dar clasele pot fi mai mult? HANNAH: Corect. Deci, ID trebuie sa fie unic, și clasele pot se referă la cât mai multe lucruri cum doriți. Orice alte întrebări? Da. [00:43:09] Audiența: [neauzit]. Mă întreb dacă care face o diferență. HANNAH: Îmi pare rău, ceea ce a fost întrebarea? Audiența: Nu e mic "F" și de capital "F." HANNAH: Deci, diferența între mici "f" și de capital "F" nu ar trebui să facă o diferență. Deci, "f" va fi de 15, fie un fel. Se răcește, altceva? Toată lumea bună, CSS? Da? [00:43:30] Audiența: Îmi pare rău. Poți avea o clasa si un act de identitate? [00:43:35] HANNAH: Da, se poate. Lucrurile pot avea atât o clasă și un act de identitate. Și am foarte recomanda testarea acestor pe cont propriu. CSS veți învăța cel mai bine doar de a face ceva, pagina web foarte simplu, elaborarea niște CSS, și doar văzând modul în care acestea interacționează. Și veți obține un foarte bun, sentiment intuitiv pentru modul în care funcționează. [00:43:56] OK, toată lumea bună cu CSS? Ești de gând să facă site-uri frumoase, cu CSS acum. OK, cele mai bune practici, doar lucruri de a păstra în minte, lucruri that-- de aceea andocare tu pentru designer si fleacuri. Deci, închideți toate etichetele HTML. Deci, dacă aveți o caroserie deschisă, ar trebui să existe un organism de aproape. Dacă aveți un paragraf deschis, ar trebui să existe un paragraf apropiat. Verificați pentru a vedea pagina dvs. de validează. Voi ar trebui să fie foarte familiar cu acest din șapte set-p cu CS 50 finanțare cu validator W3. Și, după cum am spus mai înainte, unul dintre paradigmele noastre mari este separarea stilul tau cu CSS din markup-ul, care este HTML. Și apoi, desigur, avem acest mare xkcd aici. Yay, scutirea de benzi desenate! [00:44:38] OK, TCP / IP. Între acestea și HTTP, practic ei sunt ambele protocoale. Deci, ai putea gândi doar dintre ele ca un set de reguli care guvernează modul în lucrurile muta pe internet. Deci, de control al transmisiei protocol, sau Internet Protocol, este doar o modalitate de a vă asigura că datele devine unde se duce și că știm dacă ne lipsește vreodată de date. Deci, dacă voi gândi înapoi la curs cu câteva săptămâni în urmă cu David unde am avut patru plicuri, ei au fost numărate ca unul din patru, două din patru, trei din patru, patru dintre patru, aceasta este doar un set de reguli. Am spus, OK, ori de câte ori suntem trimiterea mai mult de un pachet, vom număra cu ce număr este și cât de multe totala care utilizatorul trebuie minim. [00:45:19] Și acesta este doar spune oricine primește datele dacă acestea au ajuns tot sau în cazul în care ceva sa pierdut pe drum. Și au nevoie pentru a cere din nou. Aceasta este de fapt doar un set de reguli. Așa vă puteți gândi de ea, bine? Și, de asemenea, se specifică portul, care voi can-- știu în timpul curs, au avut o listă întreagă de porturi. Dar noi nu le avem aici, chiar acum. [00:45:41] Protocolul de transfer hipertext Deci, este, din nou, e un alt protocol. Deci e un alt set de reguli care guvernează, în acest caz, modul în care este transferat hipertext. Deci permite doar browsere să vorbească cu servere de web. Și, după cum am spus aici, e ca handshaking uman. E doar un mod de a guverna cum serverul web este merge pentru a interacționa cu browser-ul dumneavoastră. Și avem doar câteva exemple. Avem unele solicitări aici unde este metoda GET. Avem HTTP 1.1, care este Versiunea de protocol pentru noi. Și apoi, gazda, care este ceea ce suntem de fapt încearcă să acceseze. Și apoi, după cum vedeți aici, ne-am Pentru câteva răspuns cu acest 200 OK ca codul nostru de răspuns HTTP. Avem o listă mare am de gând a trage într-o secundă că voi ar trebui să fie familiarizat cu. Și avem acest tip de conținut de text / HTML, care spune doar ce tip de date suntem primit de la server, bine? Această gazdă și acest tip de conținut fac parte din antetele HTTP. Puteți avea cât mai puține sau cât de puțin necesar pentru contextul ce ai de a face cu. Uneori, veți avea o mulțime de informații provenind din server. Poate că solicită foarte mult de informații de la utilizator. Aceasta diferă în funcție de context. Dacă te uiți la CS 50 Studiul, există o mulțime mai multe despre aceasta. Dar avem o mulțime de a obține prin intermediul, așa că voi pentru a merge drept înainte, dacă asta e OK cu voi? Se răcește. Stai. Am avea cu siguranta ca listă întreagă de-- nu-i asa! Nu știu de ce acest lucru este tot drumul până aici. Am crezut literalmente m-am mutat aceasta în timp ce am fost sitting-- [00:47:15] Davin: Vrei să-l predea? Sau vrei să-l învețe? [00:47:17] Audiența: Am crezut că am putea doar le arate pentru a începe cu. Adică, poti sa te duci în le mai departe, dar eu au considerat că a făcut mai mult sens, deoarece am Tocmai vorbeam despre stările HTTP. Deci, aici e toata lista. Cred că ceea ce se va întâmpla este Davin este de gând să meargă în ele mai târziu. Dar există o listă întreagă, o previzualizare a gustului de a veni. OK, vom blow-- acest lucru se întâmplă a fi un curs PHP accident ca nimeni altul. [00:47:41] Deci PHP, Hypertext Preprocessor, este o backronym recursiv, ceea ce înseamnă că a fost numit altceva. Și apoi ei au fost ca, aceasta nu prea are sens. Deci, ei doar nume it-- și a fost un acronim, astfel încât acestea doar PHP si voi Preprocessor hipertext, care are doar nici un sens. Poveste Fun. Este un limbaj de programare. Deci, la fel de mult ca am subliniez că HTML nu este un limbaj de programare, este un limbaj de marcare, PHP este un limbaj de programare. Cum știi acest lucru este pentru că nu există logică. Nu sunt condiționale. Avem variabile, în timp ce noi au nimic din aceste lucruri în HTML. [00:48:12] Bine, atunci avem această mică bit aici e ca un gust de PHP. Deci elementele de bază, nume de variabile începe cu un semn dolar. O mulțime de oameni ca el. Reamintește de noi bani. Totul e minunat. Cu toții ne dorim PHP. Deci, noi nu specifica o mai tip variabile. Se determină la momentul execuției. Interpretul va fi ca, oh, vom alerga doar prin, și în funcție de context, Vom vedea ce tipuri de tipuri de aceste variabile trebuie să aibă. Nu e nici o funcție principală. Lucrurile se vor executa doar. Voi cu import în ta Ultima stabilit-p, veți observa acest lucru. Nu a fost într-adevăr o funcție principală. Trebuie doar scris ceea ce ai vrut să se întâmple. Și doar un fel de sa întâmplat. Deci, asta e PHP pentru tine. [00:48:56] Arrays sunt foarte asemănătoare. Mai avem această categorie de. Aici, avem unele variabile numit ARR, și este egal sa-- am obișnuit nostru Suport notație. Și avem o anumită valoare cheie. Și diferența mare între C și PHP matrice este că putem avea această associate-- putem asocia valori de chei. Deci, în loc de doar a avea o matrice care este indexată de numărul sau poziția de acest element în matrice, putem asocia, de fapt, cu o cheie. Unde putem spune, OK, vreau orice Valoarea este asociată cu fructe. Și poate că ne-am dus la fructe de banane. Deci, ar reveni banane la noi. [00:49:41] Dar, practic, cel mai lucru puternic despre acest este că, dacă voi aminti demo de curs unde practic pronuntie reprogramat în PHP, și ea căutare was-- fost într-adevăr la fel ca, nu există această cheie? Asta e într-adevăr un fel de puterea de ea. Nu aveți nevoie pentru a itera prin matrice ta. Nu aveți nevoie să știți ce spațiu se află într. Ar putea fi la sfârșitul sau la începutul. Atâta timp cât știți cheie care este asociat cu valoarea, PHP poate scuipa pur și simplu că valoarea înapoi chiar la tine, bine? [00:50:09] Și apoi, noi, de asemenea, doar Trebuie doar pentru că noi poate avea perechi de valoare cheie nu înseamnă că trebuie să. De asemenea, puteți crea o matrice normală ca aici, în partea de jos, unde este doar unul, doi, trei, patru. Acestea sunt valorile noastre. Și, de fapt, cheile sunt indicii. Deci, cheia pentru o ar fi zero. Cheia pentru doi ar fi una. Deci, pe și așa mai departe, cu excepția cazului în să alocați în mod explicit o cheie, ai putea presupune că Valoarea este doar indicele lor. Asta face sens pentru toată lumea? Nu întrebări? Minunat. [00:50:38] OK, foreach este o modalitate de a repeta prin matrice tale. Deci avem ceva aici, doar structura generală. Deci foreach, numele oferta noastră, ca orice doriți să apelați fiecare elementul în matrice ta, și putem face ceva cu acel element sau cu valoare. Deci avem un exemplu aici. Avem un asociativ matrice cu aceste două intrări cu bar fiind asociat cu foo și QUX fiind asociat cu Baz. Deci, cheile sunt foo și Baz. Valorile sunt bar și QUX. Deci foreach, avem oferta noastră aici, ca și perechea valoare-cheie. Acest lucru ne permite accesul atât cheia și valoarea. Poate vrei doar valoare, caz în care ai putea face la fel ca arr de la $ valoare, iar apoi sunt doar accesarea valoarea în timp ce repeta prin. Dar poate, pentru unii motiv, vrei cheia, care este motivul pentru care am ales acest exemplu în schimb. Astfel, puteți manipula de fapt cheie și valoare în acest caz. OK? Întrebare? [00:51:41] Audiența: Dacă ați fi dorit să manipula doar cheia, ar ce trebuie sa faci foreach-- [00:51:45] ALISON: Corect. Deci, dacă ai vrut să manipula doar cheia, v-ar trebui în continuare acest Sintaxa pentru că dacă tocmai ați au ARR ca ceva, ca un singur lucru, e gând să-și asume vrei valoarea, nu cheia. Deci, dacă vreodată trebuie doar ca ARR ca, poate că acest lucru este ca $ element este de gând să se presupună că mă întrebi pentru doar valoarea la fiecare punct. Dacă doriți în mod explicit să face ceva cu cheia, chiar dacă nu sunteți de gând să face nimic cu valoarea, aveți nevoie de această structură că avem aici în cazul în care ceri explicit atât cheia și valoarea. Marea întrebare. Altceva? Se răcește. [00:52:27] Bine, PHP și HTML. Oh, ne-am întors la șapte din nou set-p. Deci, aceasta ar trebui să arate un pic familiar. Deci, aceasta este o formă HTML simplu care are unele nume de intrare a salut. Și vom vedea, avem metoda noastră de GET. Și dacă ne amintim de nostru p-set, când se prezintă această formă, trimite un tablou numit $ _GET care are toate aceste intrări sau variabile de la forma pe care ar trebui să fie manipulat în PHP noastră. Deci, în acest caz, utilizatorul ar pune în numele lor. Ei îl prezintă. Și vom vedea că vom lua niște matrice aici. Avem oferta noastră GET. Și noi suntem accesarea numele. [00:53:11] Așa că spune, OK, da-mi Valoarea care este asociat cu numele, numele fiind cheia aici. Și asta harti direct la ceea ce am spus numele nostru de intrare este. Deci, acest lucru a fost oferindu-vă cheia ce va fi în matrice aici. Asta face sens pentru toată lumea? Da? [00:53:32] Audiența: Are denumirea de la GET referă la linia de purpuriu în [inaudibil]? [00:53:36] ALISON: se referă la acest aici. Deci, acest domeniu aici, se referă la acest nume aici. Deci, aceasta ar fi putut fi numit cum ar fi numărul de telefon, sau orice altceva. Acest nume spune de fapt, ceea ce suni acest domeniu? Cum ai de gând să se referă la acest domeniu? Iar acest nume este ca, de fapt, noi suntem spune acest domeniu se numește nume. Așa vom accesa. [00:53:59] Audiența: Deci este place, Numele de intrare este egal cu Bob, si-- [00:54:02] ALISON: dreapta, apoi ar ajunge Bob acolo jos. Exact. Toată lumea rece? Bine, deci GET față de POST, acestea sunt cele două moduri principale că trecem datele într-o cerere HTTP. Voi ar trebui să fi văzut ambele aceste sperăm. Deci, cu GET, informațiile este trecut prin URL-ul. Deci, dacă faci vreodată Google căutări, YouTube, veți probabil observa unele semn de întrebare. Și apoi, toate cuvintele care tocmai ai pus acolo. Și POST trece datele în corpul mesajului HTTP. Deci, spre deosebire de GET, tu un fel de ia în considerare că datele sunt ascunse utilizatorului. Dar ceea ce este cu adevărat important să se înțeleagă este că aceasta este încă la fel de nesigur ca și GET. Analogia Imi place sa folosesc este dacă aveți numărul de cont bancar și îl scrie pe partea exterioară a un plic, care este destul de periculos. Dacă ar fi să-l scrie pe o bucată de hârtie și pune-l în interiorul plicului, este încă într-adevăr periculos pentru că tot ce trebuie să faci este să deschizi sus si uita-te la conținutul real mesajului a vedea că. Deci, aceasta este "ascuns", și oameni ca să Cred că e sigur, dar nu e adevărat. Și sunt sigur că va fi Davin ajunge în faptul că mai mult, poate. Dar este un important distincție pentru a face și ceva cu adevarat bun pentru a înțelege. [00:55:15] OK, SQL, Structured Query Language. Toate lucrurile care am văzut atât de recent! Deci, este de fapt doar proiectat, evident, pentru gestionarea datelor. Ați avut o mulțime de experiență cu acest lucru în tabelele dvs. cu PHP MyAdmin. Și există patru întrebări comune pe care ne-o dorim voi să știți. Deci, nu e de actualizare, se introduce, selectați, și șterge. Deci, asigurați-vă că știți pe cei foarte bine. Vom merge prin ele foarte repede. [00:55:40] Deci actualizare, într-adevăr, ca ceea ce s-ar putea crede o face, se actualizează doar datele din baza de date. Deci avem niște exemplu aici. Acesta este generalul Structura de o interogare de actualizare. Așa că am actualizeze tabelul că vorbim despre. Și vrem să setați anumite valori, anumite coloane egale cu valorile specifice. Deci, aceasta actualizează doar masa, schimbarea valori în toate rândurile, în acest caz. Deci, în acest unul aici, un real exemplu, avem insert-- pare rău. Acest diapozitiv avansat fără să mă dea seama. [00:56:17] Deci, acest tabel noutati stabilit col1 egal a VAL1 unde casa este egal cu "Currier." Ce este acest lucru o face este se schimbă doar, ea doar actualizează aceste valori în anumite locuri. Deci, în această primă parte, se schimbă acestea Valorile pentru tot ceea ce în masă, OK? Se va schimba această coloană pentru fiecare intrare, pentru fiecare rând singur. Dar în cazul în care, ai putea cred că de ea ca un calificativ. Deci se doar de gând să se schimbe se în locuri foarte specifice. Deci, în șapte, când setați p- poate actualizat suma de bani care utilizator ta a avut, probabil ai avut unii unde ID este egal cu ID-ul de sesiune, nu? [00:56:53] Pentru că nu a vrut să schimba cantitatea de bani pentru fiecare persoană care folosea site-ul tau. Ai vrut să-l schimbe pentru un anumită persoană, acea persoană fiind oricine a fost folosind-o la acel moment. Chiar? OK, deci introduce, inserați anumite valori în tabele. Acest lucru este ca atunci cand esti crearea unui utilizator de brand nou. Structura generală aici este insera în orice masă vorbim despre. Valorile, fiind valorile care suntem de fapt vrea să inserați. OK, deci cum vom vedea aici, ne-am au insera în tabel. Acest lucru este cu coloane specifice valorile lor corespundeau. Deci spune, inserați un rând nou care conține Valorile VAL1 și VAL2 în aceste coloane specifice. [00:57:33] Deci, poate vrei doar pentru a umple nici jumătate din lucrurile din acest rând. Asta e ceea ce aici vă permite această parte să faci. Acesta vă permite să efectiv determina care parte. Da? [00:57:44] Audiența: Poate tu doar [inaudibil] celulele din rândul [inaudibil]? [00:57:52] ALISON: Dacă veți completa numai în anumite părți ale rând dumneavoastră, restul de aceste celule sunt doar goale. Atâta timp cât le permite să fie gol, nu este o problemă. Dacă încercați să le accesați, este O să se întoarcă un element gol. Dar este important să știți că, în anumite tabele, Ei trebuie să li se permită să fie nul. Este posibil să fi executați într-o problemă în timpul dumneavoastră p-set pentru că nu am lăsa nici o de valorile să fie nul. Dar puteți specifica o Valoarea opțional în tabelul dumneavoastră. [00:58:26] OK, selectați, astfel încât acesta este doar o modalitate de a obține date specifice de la o masă la unii identificator care doriți. Deci, selectați stea la masă în cazul în care col este egal cu ceva înseamnă doar, da-mi toate datele asociate în cazul în care această coloană specific este adevărat. Astfel, steaua în acest caz se va reveni întregul rând pentru tine, bine? [00:58:49] Și apoi, în acest caz, selectați stea din tabel doar vă oferă întregul tabel. Și apoi, ștergeți evident, doar șterge rândul din tabel. Deci, șterge de la masă, indiferent de masă suntem referire, în cazul în care unele specifice identificator sau o condiție este adevărată. Da? [00:59:07] Audiența: Întrebarea nr. De ce sunt utilizați dublu citate, și dacă face ghilimele duble sau singur citate, nu-l face o diferență? [00:59:13] ALISON: citate duble sau ghilimele simple nu face o diferență în SQL. Am crezut că am văzut o altă întrebare. Da? [00:59:20] Audiența: Nu afecta ceea ce se scăpat de interogare? [00:59:25] ALISON: Rob? [00:59:27] ROB: Ce vrei să spui prin scăpat de interogare? [00:59:31] Audiența: Dacă cineva are o interogare singur în forma de-- [00:59:36] ROB: Dacă cineva ar pune o singură ofertă de la, apoi atâta timp cât ești de dezinfectare dvs. de intrare, atunci nu contează. Dar, dacă utilizați un singur citat și ești incorect scăpa intrări tale, atunci da, de care au nevoie pentru a pune un singur citat în scopul de a sparge codul. dacă utilizați ghilimele, au nevoie pentru a pune un dublu citez pentru a rupe codul. Dar, atâta timp cât să scape lucrurile corect, nu contează. E doar de gând să fie tradus pentru simbolul corect oricum. [00:59:59] Audiența: Ce înseamnă evadare înseamnă? ALISON: Ei bine, cum ar fi dezinfectare și de evacuare. Examenul pe care o avem, marele xkcd comic pe care le trage în sus în cazul în care aveți, oh-- ROB: E ultimul diapozitiv. ALISON: E ultimul diapozitiv, într-adevăr? Oh, Doamne. Acolo mergem, perfect. OK, deci, practic, vă puteți injecta ceva în această interogare SQL în cazul în care se rupe ta cod, sau ca David a arătat în clasă, dacă avem ceva unic citat 1 este egal cu 1 și dacă în codul nostru, ne-am copia direct că în, și avem o ofertă unică se încheie, ceea ce se întâmplă este ne unele expresie evaluează la adevărat că va lăsa pe cineva să introduceți baza noastra de date și obține date pe care le Nu vreau ca ei să minim. Deci, igienizarea intrările doar înseamnă a asigura ca suntem scapă acestea de caractere și de desemnare a le ca caractere și nu lucruri care trebuie permisă trebuie luat literal ca declarație nostru SQL. [01:01:04] Deci, mare lucru pe care am spus că voi ar trebui să fie folosind au fost caractere speciale HTML, care este ceva care v-ar dori să aruncăm o privire la. OK, șterge. Tipuri de date, aceasta va fi tot on-line. Din moment ce am 15 minute la stânga, eu sunt doar de gând să meargă chiar prin aceasta. PHP și SQL, practic acest lucru este tocmai am avut o funcție de interogare care ajutat proteja împotriva aceste atacuri malware. Deci, ori de câte ori utilizați interogare, am fost asigurându-vă că lucrurile au fost curățate și fleacuri. [01:01:36] MVC este doar o paradigmă de proiectare, astfel de model, vedere, controlor. E doar o modalitate de a ține lucrurile frumos și împărțit în același fel că avem tendința să factorul Codul afară, în funcții. Acesta este doar un cadru de web design care vă permite să facă același lucru. Am de gând să săriți peste asta. [01:01:54] Acest lucru este ceva ce eu ar fi super confortabil cu. Este un tabel mare mic acolo. Acesta vă oferă funcția exemplu a modelului. Mă duc prin asta pentru că am doresc cu adevărat să Davin putea vorbi. Dacă aveți întrebări, vă rog să nu ezitați. Voi fi aici după. Doar vin să vorbească cu mine. Cu aceasta, avem stări HTTP. Și de Davin de gând să arunce în aer prin aceasta în 15 minute. Acest lucru va fi mare. [01:02:17] Davin: OK. Uh, mic tău? Da. Scuze. ALISON: cale de a fi pregătit. Davin: Nu, eu sunt gata. Sunt gata. Hai să facem acest lucru. E gata. OK. Scuze. Am vărsat cafea pe mine. Nu știu dacă am mai mult supărat că mă uit prost, sau că nu mai au cafea. Oricum, doar o anunț rapidă despre foaia voi avea. Deci, aceasta foaie voi avea nu este funcționarul ceea ce este pe testul. Aceasta este oficial ceea ce este pe testul. De asemenea, pe site-ul, spunem tu, OK, acest lucru va fi pe testul. Astfel, în foaia de ieftin mic ai, nu oficial. Și acolo sunt greseli pe ea. Deci, mai bine să nu doar orbește-l folosească. Deci da, asta e. Așa că haideți să intre în acest rapid adevărat. [01:03:05] Deci Stările HTTP. Deci, ce se întâmplă când site-ul, totul este în regulă. Totul e în regulă. Totul se întoarce la vă modul în care doriți să-l. Ai o 200 OK. 301, unde am văzut că 301 înainte? Stai, ce sa întâmplat? Scuze. Am văzut staniu prelegere i în timpul securitate. Deci în timpul securitate, deci, dacă David tastat http și apoi a încercat să meargă la cs50.net, veti vedea 301 mutat. De ce? Pentru că o să redirecționeze vă automat la HTTPS nostru. [01:03:35] Deci 301 mutat, doar e de fapt o redirecționare. Și vă puteți gândi la asta ca aceasta. Oricare dintre stările care încep cu 2, acestea sunt ca, bine, totul e în regulă. Oricare dintre stările care încep cu 3, acestea sunt redirecționarea. Stările care încep cu 4, că mijloacele e un fel de eroare client. Stările care încep cu 5, asta e un fel de erori de server. Deci un fel de pauză în sus stările de genul asta. Deci, 304 nu nemodificate, astfel încât în ​​ta server.c p-seturi, Să spui cat.html încărcat. Totul se întoarce, te 200s, OK, mare. [01:04:03] Să spunem că-l odihnit. Ei bine, în interiorul că cat.html, ai un JPEG. Ei bine, asta JPEG nu este mergi la a lua reloaded. Nu vei a posta un alt GET cerere la server, și apoi a lua toate aceste informații înapoi. Va be-- doar că imaginea este va fi în cache pe mașina dumneavoastră. Și astfel încât imaginea va fi un 304. Deci, nu a fost modificată. Dacă apoi închide, clar cookie-uri, și apoi reîmprospătați și să încerce să încarce pagina din nou, veti vedea 200s. Nu vei vedea că 304. [01:04:28] 400, cerere rău, reale rapid, cum ar fi dacă ați au de gând să trimită un JSON obiect la server și obiect ta JSON a fost incorect, veți vedea ceva de genul asta. 403, interzis. Când ați vedea un interzisa? Probabil Probabil? Audiența: chmod. Davin: chmod, da. Deci nu ați setat permisiuni corect. 404, nu a fost găsit. E doar nu acolo. Deci, dacă tastați în URL-ul greșit. 500, eroare de server intern, serverul probabil nu a fost configurat corect. Ceva nu pe scop, dar ceva pe partea de server. Și 503? O mulțime de oameni au văzut 503s în ultimul p-set. Când se va întâmpla asta? Am auzit șoapte. [01:05:05] Audiența: Când Google decide că ești un robot. Davin: Da, atunci când Google decide esti un robot, te 503s. Deci asta e un suprasarcină. Dacă ați solicitat de la serverul prea mult, e de obicei temporar. Și de cele mai multe ai observat. Deci ai văzut 503. Este posibil să fi luat un pic pauză, apoi 503s plecat, si totul a fost în regulă. [01:05:20] Gabe: Real rapid, când nu voi primi 500 în, probabil, stabilit această ultimă problemă? Da? [01:05:27] Audiența: De obicei, în cazul în care server are un dosar pierdut sau [inaudibil] lor mașină [neauzit]. [01:05:34] Gabe: Deci, ar putea fi o configurație discuție în PHP pe server. Dar ar putea fi doar ceva ca un punct și virgulă care dumneavoastră ați uitat. Dacă sunteți tastarea PHP, unele sintaxă incorectă s-ar putea să obțineți ceva de genul asta. OK? [01:05:46] Davin: cool. Vrei să fac doar până AJAX? [01:05:51] Gabe: [neauzit]. Davin: OK. Deci, care este DOM? Ce înseamnă DOM pentru? [01:05:55] Audiența: modelul de obiect Document. Davin: Nisa. Și de ce nu ne place? Minunat. Corect, așa că doar ne permite accesul HTML, accesați pagina noastră foarte repede. De ce? Pentru ca suntem tratarea nostru pagină, tratarea tag-uri HTML, tratare tot ca și în cazul în care acestea sunt obiecte. Dacă ne trateze ca și cum ei sunt obiecte, atunci ce putem face? Ei bine, putem apela funcțiile in ele. Și acest lucru este important de ce? Ei bine, pentru că am de gând să utilizeze JavaScript pentru a actualiza HTML nostru, actualiza aceste obiecte. Deci, dacă le tratezi ca pe obiecte, putem apela apoi funcțiile in ele. Mă duc să intru în această un pic mai mult când mă duc în JavaScript, dar ai văzut pe toate ca document.getElementById. Deci, documentul dumneavoastră este Element, pentru a primi elementul de identitate, deci ai de gând să te uiți pentru a putea ID într-o etichetă HTML. Și apoi, poți să faci altceva de lucru. De exemplu, cum ar fi document.body, atunci puteți adăuga copil. Deci, ai de gând să găsească documentul. Ai documentul. Vei găsi corpul. Ai găsit cadavrul. Și apoi, ai de gând să apel o anumită funcție pe ea. Deci adăugați copil, și puteți adăuga unele HTML pe la sfârșitul interiorul corpului. Deci, practic, tu ești doar tratand-o ca pe un obiect. Ești tratarea HTML Tag-uri, cum ar fi un obiect. Și ea face foarte ușor și rapid pentru a merge prin ele. Dar de asemenea, vă permite pentru a apela funcțiile in ele astfel încât să puteți manipula și de a schimba elementele. [01:07:04] Gabe: Având în vedere acest lucru, de ce este JavaScript astfel de un limbaj frumos pentru a interacționa cu HTML? Cote sunt, atunci când oamenii s-au aleg limba pentru browser-ul, pentru partea de client, JavaScript este într-adevăr frumos, e foarte bine la manipularea obiectelor. Iar obiectele sunt un fel de obiectele care apar în HTML, așa că este foarte ușor pentru JavaScript pentru a face acest tip de manipulare. Davin: Nisa. Deci, aici e doar un exemplu. Deci, eu cred că pe testul de anul trecut, sau poate în urmă cu doi ani, ne-am vă cere să creați un copac. Deci, asta este exact ceea ce ai face. Deci, începe cu documentul. Și apoi, practic doar uita-te la etichetele. Deci, dacă te uiți, noi începe cu o etichetă HTML. Și apoi, veți obține indicii despre cum să face acest lucru pe baza amprentei. Deci, un fel de șef de sucursale off. În interiorul capului, avem un alt tag pentru titlu. Deci, avem o etichetă titlu. Și în interiorul că, avem unele șir. Și așa ne reprezentăm un șir într-un cerc. Și toate etichetele sunt în pătrate. [01:07:54] Și dacă te uiți, dacă ne-am cred că de acest lucru ca un copac, și să spunem că HTML este un părinte, apoi cap și corp vor fi frați. Ei amândoi vor fi copii ale acestei mamă. Deci, pentru că ei sunt ambele frati, ei sunt Va fi un fel de lângă reciproc, în modelul nostru copac. Și apoi, tu practic face exact același lucru. Deci, nu greu, dar am cerut întrebări ca acest lucru înainte de pe testul de. Gabe: Are cineva Aveti intrebari până acum? Este bine? Davin: cool. JavaScript, OK, lucrurile bune. Deci JavaScript, ceea ce este JavaScript? Ei bine, JavaScript este-- e complicat, dar acestea sunt unele dintre cele mai importante care ar trebui să păstreze în minte. În primul rând, e liber tipizat. Ce înseamnă asta? Deci, PHP was-- da, ce sa întâmplat? [01:08:35] Audiența: Nu trebuie să explicit stare ce tip de variabile este. Davin: Perfect. Deci, el a spus că nu trebuie să precizeze în mod explicit tipul de variabile. Asta-i exact corect. Deci, în C, dacă am avut int i egal 50, apoi în PHP, este doar ca aceasta, $ i, este egal 50. Apoi, în JavaScript, ceea ce ar fi apelul? Var, nu? Ar fi ca și cum var i este egal cu 50. Dar nu trebuie să fie cum ar fi, OK, aceasta este o int. OK, aceasta este un șir. Nu trebuie să faci asta. Este un limbaj interpretat. Deci, ce înseamnă asta? [01:09:04] Audiența: Nu compilate. [01:09:06] Davin: Ce nu compilat înseamnă? Da? [01:09:11] Audiența: Nu aveți să restructureze codul să-l gata pentru computerul pentru a rula. Este doar luate la momentul execuție și calculatorul [neauzit]. Davin: Da, așa o să trec printr-un interpret. Dar tu ești exact dreptate. Deci, tu nu te duci să-l compilați, nu? Când făceai ta PHP și codul JavaScript, tu nu sunat compilare. Niciodată nu sunat ceva de genul face sau ceva de genul asta. Asta pentru ca este interpretat. Deci, de fiecare dată când trece prin browser, aceasta trece printr-un interpret. Și asta o să-l interpreteze doar în timp real imediat pentru tine. Deci, ce sunt unele pozitive și negative a avea un limbaj interpretat și având un limbaj compilat? Deci compiling-- da, ce sa întâmplat? [01:09:50] Audiența: Interpretate este mai lent. Davin: În ce sens? [01:09:57] Audiența: După ce ați compila, nu aveți de a face toate demersurile suplimentare pentru a executa ea, în timp ce aceasta [neauzit]. [01:10:04] Davin: dreapta, perfect. Deci, ceea ce ai spus este practic că compilarea, atunci când compila, aveți o mulțime de costuri în avans, nu? Ai de gând să-l compilați. Dar, după ce-l compilați, compilator va optimiza. Va fi rapid. O să practic fi la fel de repede ca se poate. Cu interpretariat, niciodată nu au acest cost avans. Mai degrabă, va fi ceva mai lent de fiecare dată când îl interpreta. Și ai de gând să trebuie să interpreta aceasta de fiecare dată. Deci, în loc de a avea aceasta o costuri dată, acum ești Va trebui să-l interpreteze de fiecare dată când pagina face. [01:10:29] Deci, interpreți sunt bune, deoarece nu trebuie să-l compilați, dar sunt rău în faptul că fiecare cronometra pagină se încarcă, este Va trebui să interpreta acest JavaScript. Și o să ruleze ușor mai lent decât dacă ar fi să-l compilați. Vă permite să communicate-- oh, așteptați. Folosit pentru a manipula conținut și aspect. Tocmai am vorbit despre asta. Se folosește DOM. AJAX, vom ajunge în AJAX într-un pic. Și apoi, e partea de client. Deci, PHP este partea de server. JavaScript este partea de client. Ce sunt pozitive pentru asta? Ea spune. Este mai rapid, corect? Pentru că nu ai sa-- este mai rapid. Nu trebuie să comunice cu un alt dispozitiv. Dacă sunteți doar pe dumneavoastră client, nu ești niciodată Va trebui să meargă și vezi ce e pe server și apoi raportează înapoi sau ceva de genul asta. Deci, partea de client tinde să fi un pic mai repede. [01:11:15] Gabe: Da, dar aceasta nu înseamnă PHP este mai repede decât de activarea JavaScript- sau ceva de alții. Ei alerga fel de în aceeași Viteza pentru că sunt amândoi Limbi interpretate. Ceea ce e lent aici este cererea. Deci de fapt de gând tot drumul pe la Brazilia pentru a obține niște informații care trăiește acolo. Dar PHP și JavaScript, ei fel de a alerga în aceeași viteză. Nu e că unul este mai repede decât celelalte. Acest lucru, de asemenea, truc întrebare aici. Deci, JavaScript nu devine niciodată cod mașină, adevărat sau fals? [01:11:47] Audiența: Fals. Gabe: Fals. Ea are de a deveni mașină Codul deoarece cod mașină este singurul lucru aparatului înțelege. Chiar dacă nu este compilat, devine încă cod mașină pentru că interpretul este doar un program care trece linia de linie și transformă acea linie în ceva calculatorul înțelege. OK? Se răcește. [01:12:08] Davin: Aici este doar o foarte extinsă Bună ziua lume programului JavaScript. Deci, eu nu știu if-- ați văzut aceasta. Dar trebuie doar HTML aici. Și în loc de a pune efectiv JavaScript în tag-uri script, deci ai pus-o în mod normal, cap. Ai etichete script. Ai picătură acolo. Tot ce am făcut aici este că am legat in-- așa că am legat într-un dosar de activarea JavaScript- ca aceasta. Și voi toți ați făcut asta, nu? Deci, atunci când au fost utilizați jQuery și underscore.js în ultimul p-set, nu aveți de tone de cod în etichetele script, în cap. Ai putea face asta, dar în schimb esti doar o leagă în. Și tu ești o leagă în la fel cum faci cu CSS. Deci, doar face mai ușor de citit așa codul nu este ca 1.000 de linii de mult timp cu tone de funcții care tu nu s-ar putea folosi. [01:12:52] În schimb, tu doar link-ul din. Acesta se compartimenteaza. E ca și cum scriu unii fișier antet, și apoi inclusiv fișier antet în C. Ganditi-va doar ca aceasta. Deci, ce face acest lucru? Ei bine, acest lucru se întâmplă pentru a rula. O să alerta. Deci, ai de gând să obțineți un pic pop-up numita lume salut. Întrebare rapidă, doar verificare bun-simț, astfel încât să vedeți aici, în organism, spune corp, HTML aici. Ce este pe primul loc? Nu văd corp, HTML aici, sau pot vedea alerta primul? [01:13:19] Audiența: Alert. [01:13:20] Davin: Corect. El spune alertă. De ce? [01:13:22] Audiența: Pentru că du-te de sus în jos. [01:13:24] Davin: Da. Perfect. Așa spune el, te duci la vârf la de jos, ceea ce este absolut corect. Vei merge de sus în jos. Și în JavaScript, jQuery, aveți o funcție care e onload ca, sau gata, și care spune, OK, așteptați până când toate acestea HTML a încărcat. Și apoi, suna JavaScript. Pentru ca noi nu avem ca aici, Primul lucru pe care o să se întâmple se că va merge de sus în jos. Va lovi că JS apel, se va alerta. După aceea faceți clic pe OK, că alerta dispare. Atunci va arăta tu HTML corp aici. Nisa. [01:13:54] OK, așa că foarte repede, scris în JavaScript este super rapid. În scopul de a declara un, nume var variabilă. Deci, în C, aveți int i, ai să declare ce fel de tip este. PHP, $. JavaScript, var. Am vorbit despre asta. Bine, să mergem. [01:14:11] Loops, același lucru. Același lucru. Declarațiile funcțiilor, astfel încât la fel ca și ați văzut în C. Singurul lucru diferit este astfel încât atunci când te la alte limbaje de programare, ca atunci când ia 51 semestrul viitor și faci cu OCaml, poti face cu funcții anonime. Deci, asta e exact ceea ce ai aici. Deci vrei să pună în sumă, un fel de valoare sumă. Dar s-ar putea face o singură dată. Deci, nu vrei să-i spunem funcție sumă, da o declarație funcție. În schimb, tu doar l utilizați ca o funcție anonim. Și ați văzut aceasta foarte mult. Veți vedea un exemplu de acest lucru în câteva diapozitive. Da, vom vedea. Gabe: Bună întrebare. Când ar putea să vă doriți să utilizați o funcție anonim aici? Practic, atunci când doriți ceva, ca un eveniment, să se întâmple. Deci, atunci când mouse-ul este clic, de exemplu, vrei o funcție să fie numit. Deci treci la eveniment handler, treci la eveniment, un fel de, funcția pe care vrei să fie numit. Și ceea ce trece este ca, la sfârșitul a doua zi, doar un pointer la că instruire, la funcția. Deci, nu e ca și cum te trece întregul cod, la fel ca și un pointer la funcția. Și apoi, când cineva face clic mouse-ul, apoi această funcție este chemat. [01:15:17] Davin: Arrays, deci tu au o declarație matrice. Apoi, o matrice a pune lucrurile în. Real rapid, ceea ce va imprima asta? Care va fi al treilea element? [01:15:31] Audiența: "JS". [01:15:32] Davin: dreapta, ar fi "JS." Stai, du-te înapoi. Care este lungimea? [01:15:37] Audiența: Trei. Davin: Trei, nu? Exact ceea ce crezi. OK, acum du-te. Arrays, puteți adăuga lucruri pentru a le. Deci, poti sa te duci dincolo de limitele lor inițiale. Doar ceva pentru a păstra în minte. PHP, JavaScript, ele sunt un pic bit mai mult iertator din punct de vedere lucrurile ca asta. Obiecte, foarte mult ca struct în C, foarte mult ca matrice asociative în PHP. Ai avut toata experienta cu aceasta. Deci JSON, atunci când trece JSON înainte și înapoi în opt set-p, asta e obiectul tău. [01:16:03] Deci da, exemplu, adevărat exemplu repede. Aici este un obiect. Modul în care acest referință obiect, așa că foarte repede, Să spun că am vrut să găsesc afară, OK, ceea ce este cursul? Și astfel numele obiectului de aici este CS50. Și apoi, dacă am avut un asociativ matrice, cum aș face asta? Voi folosi o cheie, nu? Deci, am numele matrice. Am placuta, citate, cheie, citate end, suport scop, și care vor referință care Element interior tablou meu asociativ. Cum se face referire Desigur reușită obiect meu? Știe cineva? [01:16:39] Audiența: [neauzit]. [01:16:40] Davin: Care-i treaba? Audiența: CS50.course. Davin: Corect, da. Deci, CS50.course. Deci, modul în care lucrurile referință în interiorul un obiect JSON este cu un punct. [01:16:48] Audiența: Puteți folosi, de asemenea, sintaxă matrice. [01:16:53] Davin: OK, bine. [01:16:54] Gabe: Puteți folosi, de asemenea, CS50 placuta, șir, ca ghilimele. Audiența: Cred că e identic cu PHP. Gabe: E același lucru. Davin: Bine! Dar veți vedea aceste alte locuri. Da, asa ca merge. Aceasta este ceea ce tocmai am spus. Deci, într-un exemplu JavaScript jQuery. Deci, aceasta este DOM mea, nu? Real repede, așa că am un cap, salut lume, corp. Am un buton. Se spune "împinge mine", așa că vreau să-l împingă. Și vreau să fac ceva atunci când este apăsat. Chiar, de lângă. [01:17:31] Corect, astfel încât acesta este JavaScript mea. Deci, jQuery este doar un ușor mod de a scrie JavaScript. Deci, și ceea ce am de gând să arate tu următor, va fi jQuery, sunt identice. Deci, ei vor face aceleași lucruri. Doar jQuery tinde să fie un pic mai ușor. Oamenii au tendința de a place mai mult. Ea are o mulțime de funcționalități. Deci, oamenii au tendința de a folosi jQuery. Ai toate folosit jQuery în ultimul p-set. Deci, ce se va face acest lucru? Ceea ce va JavaScript-- așa acest lucru este pur și simplu JavaScript. Ce va face acest lucru? Ce va face? [01:18:03] Deci în primul rând, veți vedea fereastra onload. Chiar? Deci, nu am văzut asta înainte. Deci, acest lucru se întâmplă să aștepte până la fereastra întregul sarcinile. Deci, o să aștepte până la HTML, toate imaginile sarcina înainte de a face ceva. Deci, haideți să spunem DOM noastra a încărcat. Totul e acolo. Atunci ce se va întâmpla? Da? [01:18:19] Audiența: apare Button. [01:18:22] Davin: Butonul este deja acolo. Da, așa butonul e deja acolo. Dar acest lucru se va spune, OK, dacă am faceți clic pe butonul, deci butonul este deja acolo, așa tag HTML. Stai, du-te înapoi foarte repede. Această etichetă chiar aici este Va fi un buton deja. Există deja un buton. Dar atunci, JavaScript tag-ul, chiar aici, se spune, OK, eu vreau pentru a obține elementul de identitate, astfel buton de căutare spune doar, OK, eu vreau pentru a mapa această variabilă pentru acel buton. Așa că variabila este doar un modalitate mai ușoară de a accesa acel buton. Si eu spun, bine, dacă am faceți clic pe acel buton, deci, dacă am faceți clic acel element, și acest element se referă la butonul, dacă am faceți clic pe el, apoi vreau să sun o funcție. Aici este unul dintre cei anonim Funcții de care vorbeam. [01:19:03] Sună o funcție. În interiorul această funcție, practic ceva ce am văzut multe, alerta. Faceți clic pe butonul de căutare. Va avea de fapt un buton. Ai să apăsați. Ai asta de alertă. X afară. Asta este. Da? [01:19:16] Audiența: Deci, dacă ai pus scriptul [Inaudibil], tag-ul script-in HTML ta? [01:19:21] Davin: Puteți pune scriptul drept etichetă în cap pentru că aveți această onload. Este, de asemenea, că aveți un clic. Deci, o să aștepte până la faceți clic pentru ceva. Dar onload este doar pentru a fi în siguranță, pentru a face vă că loturile totul în HTML-ul prealabil. Da? Vrei să spui ceva? [01:19:40] Gabe: [neauzit]. Davin: Da. [01:19:42] Audiența: Evita Deci onload definirea butonul de căutare variabil doar prin a spune document.getElementById Căutare buton dot [neauzit]. [01:19:49] Davin: Categoric, dar apoi string-ul doar devine imens. Exact, deci aceasta este doar de a face mai ușor pentru tine, da. Da? [01:19:56] Audiența: Unde am făcut crea window.onload? Sau document.ready? [01:19:58] Davin: Da, există. Da, acolo este, am verificat. [01:20:02] Gabe: Nu pentru ei să aibă grijă de. [01:20:03] Davin: OK, deci am de gând să-ți spun oricum. Deci, practic, doar în general, așa window.onload așteaptă până DOM dumneavoastră, toate HTML, loturile. Se așteaptă până imagini de încărcare. Se așteaptă până loturile totul. document.ready, doar așteaptă până loturile dumneavoastră DOM. Odată HTML este tot acolo, o dată DOM este acolo, începe să ruleze. Asta e singura diferenta. [01:20:23] Gabe: bun-simț Quick verifica aici. Deci, acest lucru poate fi văzut un fel de ca o linie de cod, nu? Pentru că e window.onload este egal cu o grămadă de lucruri. Când JavaScript citește acest lucru, adevărat sau fals, funcția este executat. Fals. OK? Ce se întâmplă aici, doar sunteti in trecere această funcție ca un funcții anonime la window.onload. Și apoi când va pentru a obține de fapt executat? Când sarcinile fereastra. Asta e un eveniment. Deci, asta e jus t lucru suntem vorbim despre mai devreme, nu? Deci, atunci când evenimentul se întâmplă, funcția se întâmplă. Același lucru cu onClick. [01:20:59] Davin: OK, deci cineva a luat departe document.ready. Dar acest lucru va fi same-- exact Audienta: Semnul dolar, care este un document.ready. E o scurtătură. [01:21:07] Davin: Oh, asta este? Ok, deci acest mijloc document.ready, comenzi rapide. Dar acest lucru este la fel ca window.onload cu excepția că o diferență mică Ți-am spus despre. Și acest lucru este jQuery. Deci, acesta este exact același lucru thing-- acest lucru este JavaScript. Acest lucru este doar-- unii oameni cred că de ea ca o greutate mai ușoară, versiunea elegant că are o mulțime de funcționalitate că veți fi, probabil, cu ajutorul. Deci, acest lucru nu exact același lucru. [01:21:34] Deci, lucruri de fel de sublinieze. Deci, în celălalt exemplu, noi a avut document.getElementById, deci am avut atât de mult șir care va obține elementul de orice identitate are. Asta înlocuiește cu acest apel chiar aici. Deci, vedeți semnul dolar, atunci vezi citat, hashtag. Hashtag este întotdeauna un selector. Se spune, OK, acest lucru are de a face cu un act de identitate. Care este selectorul pentru o clasa? [01:21:56] Audiența: Dot. [01:21:57] Davin: Dot, dreapta. Dacă sunteți doar de gând să selectați o etichetă, ce este? E doar eticheta, exact. Și ai putea folosi asta aici, de asemenea. [01:22:05] Gabe: Si de tag-ul, ne referim ca div, de exemplu, sau cap. [01:22:08] Davin: Or organism sau p sau ceva de genul asta, da. Deci, aici, OK, în loc de a spune document.getElementById, aceasta este doar exact același lucru. Doar în jQuery, e mai scurt. Deci e simplu. Deci, nu mai onclick, faceți clic pe. Funcția jQuery, apelați această funcție. Alert este exact același lucru. Deci, este un pic mai mici, sau pic scurt, un popor mic bit-- cred este un pic mai ușor să scrie, un pic mai ușor de înțeles. Dar acest lucru este jQuery. O mulțime de oameni obține un pic pic confuz și îngrijorat și ei cred, OK, jQuery este diferit de JavaScript. Trebuie să ne amintim aceste două lucruri diferite. Nu este. Adică, e sintaxă diferit. Dar jQuery JavaScript este. E doar un aparent Versiunea mai bine ar putea fi mai ușor de Înțeleg că oamenii folosesc. Gabe: Da, pentru a fi sincer, că semnul dolar pe care le vedeți în jQuery, e doar numele unei funcții care definește jQuery. Ea nu are nimic special. Este E doar numele unei funcții, la fel ca ai putea defini semnul dolar. [01:23:03] Davin: Da, așa a vorbit despre asta. Unele lucruri utile. M-am uitat din nou la chestionare vechi. În ultimii chestionare, le-am a trebuit sa foloseasca lucruri de genul acesta. Deci document.ready, așa asigurați-vă că totul este încărcată înainte de a începe a face lucruri. Selectați un ID, sau selectați o clasă, ar doar fi citat dot unele de clasă, scop citat. Trimite, asa ca daca esti prezentarea unui formular și apel această funcție după ce forma susține. Valoare, Să spun că am avut o formă prezentarea, ca un nume de utilizator, un e-mail, tot ceea ce. Am avut o casetă de text. Deci, eu sunt tastând în care caseta de text. Ei bine, dacă doriți să obțineți valoarea din cutia de text, folosiți punct val. Și apoi, aici, punct HTML este același este ca document de punct getElementById punct innerHTML. Așa că o să se întoarcă tu HTML de la acel ID. Aici, doar să utilizați unele ID-ul sau orice punct HTML. Asta va primi HTML de la acel element. Dacă ați fi dorit atunci să schimbe asta HTML, puteți trece ceva. Deci ar fi ca punct HTML, și apoi interior, citate, noi HTML sau ceva. [01:24:05] Gabe: OK, așa AJAX. Îmi place foarte mult să înțeleagă AJAX foarte bine. Așa că vrei voi să înțelege AJAX foarte bine. Pentru că dacă o faci, ai destul de mult merge pentru a înțelege tot ceea ce are de a face cu HTTP, PHP, JavaScript, pentru că toate vine împreună în AJAX. AJAX nu este un limbaj. AJAX este o tehnică. Și folosește o mulțime de instrumente diferite. AJAX vine de la asincron XML JavaScript. Deci metoda, limba, datele. [01:24:36] Deci limba principală pe care le folosim în AJAX pentru a declanșa tot și să se ocupe de tot mai târziu este JavaScript. De aceea se referă foarte aproape de JavaScript. Și apoi asincron este pentru că noi nu o facem dintr-o dată când vom încărcarea paginii. Acesta este lucrul pe care putem face lucruri fel de în paralel. Ideea principala din spatele AJAX este că doriți aceasta pentru a obține unele informații specifice. De exemplu, atunci când tastați nou Numele de utilizator atunci când vă înregistrați un nume de utilizator, Numele meu de utilizator este abc123. Și apoi, la sfârșitul anului formular, trebuie să faceți clic pe Trimite. Și a trebuit să meargă la server, iar apoi verificați dacă în baza de date, abc123 este deja acolo. Și dacă e deja acolo, se spune, nume deja în baza de date de utilizator. Și ei, va trebui să completați din întreaga formularul din nou. Și a fost foarte, foarte rău. [01:25:23] Și apoi oamenii spun, OK, de ce nu ne-am putea face o cerere HTTP mic pentru a verifica doar pentru a vedea dacă acest utilizator este în baza de date înainte ca utilizatorul a trebuit să depune întreaga formularul? Deci, de exemplu, atunci când utilizator finisaje tastarea abc123, hai să mergem la server un pic bit și chiar a lua o adevărată sau falsă de la server pentru a vedea dacă asta e un nume de utilizator valid sau nu. OK, așa că e unul din principalele folosește de AJAX astăzi încă. [01:25:49] Davin: Deci foarte repede, în un apel Ajax în jQuery, ai putea semnifica că vrei sa fie sincron. Tu nu ar trebui să facă acest lucru. Dar poți să faci asta. Și dacă ai făcut asta, ce se va întâmpla? Ei bine, de exemplu, atunci când sunteți asistent știri sau orice altceva, Browser-ul dvs. este doar de gând să aștepte până la care întregul apel este completă în loc de permițându-vă să faceți alte lucrurile imediat dupa ce faceți clic pe el. [01:26:14] Gabe: Nu e mai trece. Oh, Doamne. Ne pare rău! Da. "În trecut, client necesare pentru cerere întregul conținut al unui site web. " Asta e ceea ce am spus. Ea ne permite să trimiteți GET suplimentar sau POST cererile fără a avea pentru a reîncărca browser-ul nostru. Deci, la sfârșitul zilei, suntem face de fapt o cereri HTTP aici folosind JavaScript. Pentru că înainte, am folosit doar de activarea JavaScript- pentru a schimba HTML care deja a venit. Și acum, putem folosi de interfață cu serverele de web, de asemenea. Modul în care acest lucru se întâmplă este avem client. Davin este un client. Și el are toate JavaScript difuzate, deoarece HTML este prost. JavaScript este inteligent. Deci, Davin Davin are inteligent lui parte și partea sa mut. El va folosi partea lui inteligent acum. El va folosi JavaScript la cerere, de exemplu, dacă abc123 este în baza de date sau nu. [01:27:04] Deci Davin, te rog, doar trimite-mi o cerere HTTP. Mulțumesc. Deci, el doar a trimis o cerere HTTP. Vezi asta? Si acesta este doar la fel că orice solicitare HTTP este trimis. Browser, Google Chrome sau ceva, este vom vedea că lui Davin încercarea de a trimite o cerere HTTP, va ajuta HM un pic. Și asta va merge tot drumul la server. Acum, serverul va avea PHP aici, sau orice altă limbă. La fel ca într-o solicitare normală HTTP. E destul de mult o cerere normală HTTP. [01:27:31] Apoi, serverul se va spune, OK, Davin vrea să verifice dacă acest abc123 este în baza de date. Du-te și vorbește cu modelul. Modelul spune că nu e. abc123 este un nume bun utilizator. Și apoi, serverul de web este de gând să utilizați PHP pentru a face o anumită formă de fișier. Ar putea fi literalmente doar un fișier care conține "da" în ea, sau "nu, sau ceva de genul asta. Ar putea fi orice fișier. [01:27:54] Ar putea fi ca și cum am de gând să trimite Davin o imagine de o rață dacă e în baza de date și trimite o imagine de un hamster dacă nu este în baza de date. Asta ar fi un fel de prost, dar se va lucra. OK, asa ca am trimite o rață de Davin. Davin a primit o rață. Și acum, care va să se ocupe de rață? Parte inteligent Davin din nou, astfel JavaScript, dreapta? JavaScript trimis cerere, și JavaScript va primi cererea și-l interpreteze într-o formă. [01:28:22] Și în acest sens, se va spune, OK, dacă rață atunci eu sunt bine. Dacă hamster, atunci mă duc să spun, nu, numele de utilizator deja există în baza de date. Dar, de obicei, nu ești de gând să trimită o rață. Ai de gând să trimită ceva ușor mai inteligent. Și ce vom folosi este XML. Și mai recent, vom folosi JSON. JSON este doar de activarea JavaScript- Obiect Notații, care este, în principiu primiți un Întreaga obiect JavaScript. Și l-ai pus într-un fișier, la fel ca acel obiect CS50 că voi vedea. Ai pus-o într-un fișier, și să îl trimiteți pe la Davin. [01:28:53] Deci, în acest caz, aș face- face un obiect JavaScript și doar spun, există utilizator, da. Sau există utilizator, nr. Și-l trimită înapoi la el. Și de ce JSON? Deoarece persoana care a primit aceasta este va folosi JavaScript să se ocupe de răspuns. Și de activarea JavaScript-funcționează atât de bine pentru că se numește JavaScript Object Notation. Chiar? Astfel, el poate apela doar o funcție și de a lua acest obiect frumos de răspunsul. Și apoi, el va ști dacă că de folosire este in baza de date sau nu. [01:29:22] Deci, vedeți, totul vine împreună în serverul de web, și apoi există un HTTP la cerere și o reacție HTTP și totul. Deci, asigurați-vă că voi înțelege acest apel AJAX pentru că vă ajută să înțelegeți toate conceptelor vorbim despre. [01:29:37] Deci, aici este un exemplu de AJAX cu jQuery. Și aici, facem cu get JSON. Deci nu te încercarea de a obține o imagine de o pisica aici, sau o rață. Suntem încercarea de a obține un fișier JSON. Și apoi ne-am aștepta până se face, punct făcut. Asta înseamnă că eu sunt de așteptare pentru răspunsul. S-ar putea lua ceva timp. Apoi, veți vedea un pic de încărcare. Dacă vrei să faci asta în site-ul dumneavoastră. Deci dot făcut, și apoi ce se întâmplă atunci când e gata? Tu treci într-un anonim funcție, la fel ca am văzut înainte. Deoarece făcut este un eveniment, doar ca un click pe un mouse sau orice altceva, pentru jQuery. Deci treci în această funcție cu date, text, starea, și jqXHR. Și, practic, e doar unele variabile pe care le puteți folosi mai târziu pentru a avea statutul cererii HTTP, datele pe care le va pentru a trimite înapoi la tine. Deci, atunci puteți mai târziu interpreta și de a face ceva semnificativ cu el. Și dacă nu, atunci s-ar putea eșua? Ei bine, atunci când cererea HTTP dă Ești de 500 sau ceva de genul asta. Apoi, o să-ți spun stare, ce fel de eșec care a fost, și tot felul de lucruri. Trebuie să vă asigurați să se ocupe de ambele cazuri, în caz contrar, programul merge nebun. [01:30:42] Davin: Deci da, aceasta este exact ceea ce ai văzut pe ultima p-set. Real Apelul AJAX este în JSON get. Acesta este apelul. Și apoi, punct făcut este ca se verifică dacă este de succes. Dacă este de succes, vrei de a face ceva cu datele. Tu te întorci de la acea Date cerere JSON. Asta este ceea ce te întorci. Deci, dacă vă amintiți de la dumneavoastră p-set, o mulțime dintre voi au fost ca suport de date i sau orice altceva, link-punct sau titlu. Orice s-ar întoarce din care JSON, indiferent de câmpurile sunt în acel obiect JSON, asta e ceea ce mă întorc. Data este ceea ce vei primi înapoi. Starea Text, doar ceva care vă permite să știi ce sa întâmplat. Și apoi, jqXHR, asta e doar cererea HTTP XML jQuery. Asta e doar ca un obiect. Și apoi nu reușesc, așa cum a spus Gabe. Gabe: În mica noastră exemplu de abc123 doar pentru a verifica dacă acesta este în baza de date sau nu, datele ar fi ceva ce ar face, dacă există punct de date nume de utilizator, care este ceea ce PHP ta generat pentru tu, dacă există nume de utilizator punct de date, atunci Am de gând să alerta, utilizator nume există deja. Altfel, eu doar de gând să lase utilizator continua completarea formularului. OK, securitate, rece. [01:31:50] Davin: Vrei să mă? [01:31:52] Gabe: Îmi place asta. Așa ceva care pare cunoscut. Suntem aproape gata. Deci, aceasta este doar un exemplu voi a văzut în clasa. Ai fost cu ajutorul argv1 aici. E ca și cum un argument linie de comandă. Și suntem Mem copiere care într-un buffer de dimensiune 12. Care e problema aici? Buffer overflow! Pentru că avem un tampon de dimensiune 12. argv1 ar putea avea o dimensiune de două miliarde. Noi nu facem nici o verificare limită. Deci, am putea copia o mulțime de memorie. Și vom fi deosebit de rău despre asta. Ce am putea face asta foarte, foarte medie în acest caz? Da? Audiența: O parte din două miliarde de lucruri conține cod executabil care se întoarce [Neauzit]. Gabe: Exact. Deci, asta e un fel de lucru pe care oamenii folosesc a jailbreak un iPhone, de exemplu. Deci, acest tip de lucru. Pentru că puteți face doar aparatul executa orice cod care vă place. Fix, astfel încât remedierea este ușor. Doar verifica pentru limitele. Ai verifica pentru nul, deoarece am mereu verifica pentru null când avem de a face cu siruri de caractere. Și apoi, luați lungime șir înainte. Și dacă șirul Lungimea este un șir valid lungime, care se află 0 și 12, atunci suntem bine. [01:33:03] Davin: Daca nu verifica pentru nul, foarte repede, ce se va întâmpla? Va SEG vina. De ce va SEG vina? Pentru că suni strlen pe nul. Gabe: Da. Adevărat sau fals, folosind o Parola este o idee bună. [01:33:19] Audiența: Fals. [01:33:20] Gabe: Fals. Foloseste multe parole, și, cele lungi mari. Icoane Lacăt asigura securitatea. [01:33:26] Audiența: Fals. [01:33:27] Gabe: Fals. Nu înseamnă nimic. E doar o pictogramă. SSL protejează împotriva unei om în atac mijloc. Audiența: Fals. Gabe: Fals. OK, deci toți cei sunt false. Nisa. [Inaudibil] Vrei să vorbim despre asta? E rândul tău. Davin: Tipuri de atacuri, om la mijloc. Ce este un om în atac mijloc? Audiența: [neauzit]. Davin: Dacă trimiteți un HTTP cerere, acestea ar putea face acest lucru, nu? Dar dacă trimiteți HTTPS, ei probabil, nu va fi capabil să facă acest lucru. Există o mulțime de puncte de-a lungul conexiunii. Ai routere. Ai serverele DNS. Dacă cineva este în măsură să punct de vedere fizic vezi ceea ce trimite, deci cineva este capabil să obține de fapt între voi, clientul, și server, și este posibilitatea de a vedea ceea ce trimite, acesta este un om în atac mijloc. Deci, pentru a vedea ceea ce încercarea de a obține de la server, sau este capabil de a see-- mai rău, s-ar putea putea vedea cookie-uri sau ceva de genul asta. [01:34:16] Deci, de exemplu, în cazul în care nu utilizați SSL, el ar putea fi posibilitatea de a vedea dvs. cookie-urile ID de sesiune. Și aceasta se numește hijack pentru că el vede cookie-urile de identitate, iar apoi el este capabil să se ducă în site și pretinde a fi tu. Pentru că la fel ca în PHP, amintiți-vă când ne-am logat, ce facem? Am stabilit ID sesiune egală cu ID-ul. Deci, pe care le identifică. De aceea, puteți vedea portofoliul dumneavoastră și de portofoliu nu toată lumea a lui. [01:34:38] Ei bine, dacă eu sunt în stare să mă că cookie, atunci eu pot conecta pe acea pagină. Și apoi, eu pot vedea doar lucrurile și începe cumpararea si vanzarea de chestii. Deci asta e hijack. Dar tu nu ar trebui să poată, astfel încât să sa-- pot folosi omul în atac mijloc chiar dacă acestea sunt utilizând SSL. Dar tu nu ar trebui să fie în măsură să. Dacă sunt utilizați SSL, nu poți deturnare sesiune. De ce? Pentru că totul criptat, dreapta? dacă este criptat, și eu sunt încă un om în mijloc, eu încă obține datele. Asta e bine. Dar e criptat. Deci, eu nu pot într-adevăr folosi. Deci asta e două. [01:35:09] Real rapid, site-ul centra cerere fals. Asta e doar în cazul în care există o legătură și care se leagă face ceva care nu cred că ar trebui să facă. Deci, de exemplu, în cazul în care legătura fost de gând să cumpere actiuni sau vinde stocurile, și tu nu știi asta. Ai făcut clic pe link-ul, a trimis o solicitare, cumparat sau vândut ceva care nu ai vrut să fac. Asta e. [01:35:25] Site scripting Cross, asa ca aici, te trece în via q variabil, în loc de a trece într-un fel de valoare, poate q este ca un nume. Deci, în loc de a trece egali q Davin sau ceva de genul asta, dacă nu utilizați HTML caractere speciale, dacă nu scăpa de această pentru a vă asigura că este OK, atunci aș putea trece în schimb, să spunem aici vreau să spun imprimare sau ceva de genul asta, apoi m-am putut trece pe aici un apel scenariu. [01:35:51] Așa că, în loc de doar obtinerea o variabilă, Mi-ar executa atunci acest apel script. Deci, în interiorul că script apel, ce face? Document punct localizare, care va schimba locația documentului. Așa că am de gând să redirecționeze în altă parte. Se numește tip rău în acest exemplu, foarte bun. Nu am putut gândi al cuvântului. Și apoi, ce e chiar mai rău este că am de gând pentru ca apoi setați cookie, care este un variabilă am în acest site. Am de gând să se stabilească o egal a cookie documente punct. Prin urmare, am de gând pentru a fura cookie dumneavoastră. Și am de gând să redirecționeze unele informații către un site web că tu nu ar trebui să fie accesarea. Și acest lucru se întâmplă tot pentru că ești nu evadeze ce ai văzut. Da? [01:36:29] Audiența: Deci, doar pentru a face că clar, e vulnerable.com că este vulnerabil la acest lucru. Așa că link poate apărea pe orice pagina dat. Cineva face clic pe el, merge la vulnerable.com. Ai o prăjitură de vulnerable.com. Să spunem că Facebook este vulnerabil, așa facebook.com. Ai cookie Facebook. Ce face acest, ești O să facebook.com, este imediat redirecționarea să badguy.com, dar inclusiv informațiile cookie. Deci, este o redirecționare rapid, dar cookie Facebook este inclus cu redirecționare, și că e modul în care acestea [neauzit]. Gabe: Da, nu e unele lucruri foarte medii că oamenii pot face în cazul în care există acest lucru. De exemplu, dacă Facebook permis toată lumea pentru a schimba numele de utilizator, și nu au făcut nici o teste de corectitudine, pentru ca tu ar putea introduce un lucru de activarea JavaScript-care schimbă imaginea la un hamster. Și introduce aceeași JavaScript în toată lumea care vede pagina ta. Deci, toată lumea care vede pagina dvs. are același lucru în numele de utilizator. Și pentru că este un virus, se răspândește exponențial. Davin: Vom sări ultimul o, iar apoi am terminat. Deci, aceasta este doar un alt exemplu. Deci, acest lucru este că nu sunt scăpa masa lor SQL. Astfel încât să puteți picătură. Deci vrei să scape lucrurile. Acesta a fost exemplul anterior cu site scripting cruce. Îmi pare rău că a fugit un pic tarziu. Mâine, îmi pare rău! Mâine, avem ore de birou. Deci orelor de serviciu în Cabbot 08:00 - 11:00. Orele de birou sunt strict pentru întrebări test.