[00:00:02] [Muziciranja] Hannah: Bok, svima. Hvala vam dečki toliko za izlazak u odvratnom vremenu za kviz jedan pregled sjednicu. Kao što znate, dečki kviz on je u srijedu. Tako ćemo ići kroz hrpa tema. DAVIN: Hej, mogu reći nešto jako brzo? Hannah: Da, Davin događa reći nešto vrlo brzo. DAVIN: Žao mi je. Samo jako brzo, ako imate pitanja o kvizu, možete otići online. Idi na 2014. kviz jedan, o kvizu. To je dobio logistiku o gdje ići, kad se ide. Ako istovremeno ste upisani, da smo će imati šminka kviz u 5:30. Ili ako mi je poslao pitanje, imate neki drugi problem. No, 05:30 je make-up Vrijeme u srijedu. Ali, ako imate pitanja, opća pitanja, online ima sve logistiku. Dakle, provjerite postoji prvi put. [00:00:47] Hannah: Awesome. Dakle, ovdje je veliki popis tema da ćemo proći danas. Ja ću pokriti sve C stvari, a to je da prvi stupac. Dakle C stvari koje smo pokrivena nakon kviza nula. Počevši s popisa povezane, koji uključuje pokazivače. [00:01:05] U redu, tako da smo to vidjeli U posljednjem pregled sjednici, pa ću proći to je malo brže. Samo podići ruku ako me želite usporiti ili rješavanje nešto dalje. No, mi koristimo povezane liste, jer smo započeli u C s polja. A polja su super, ali Problem je u tome što ima fiksnu veličinu. Povezani popisi omogućuju nam stvaranje dinamički veličine strukture podataka. [00:01:28] I mi imamo svoje osnovne funkcije, umetanje, brisanje i pretraživanje. I što možemo učiniti umetak u najgori slučaj konstanta vrijeme Ako smo samo ga stavite na samom početku. Brisanje i traži, najgore Slučaj veliki oh n vremena. Pa opet, samo za okretanje kroz ove slike, Znam da smo vidjeli ove posljednje vrijeme, ali smo želite pratiti naše liste povezan Do praćenje voditelj naše liste povezane. Jer znamo da je svaki od naših čvorova je samo ide da se ukazati na Sljedeći čvor u našem popisu povezane. [00:01:58] Dakle, to je kako smo pratiti. Iako to nisu kontinuirano komada memorije, možemo ih naći po samo Sljedeći različite strelice. Ovdje je naša struktura za povezane popis čvora. Vidjeli smo to zadnji put. Mi imamo struct čvor. A ima dva svojstva. Broj jedan, stvarna Vrijednost želimo pohraniti. U ovom slučaju, to je cijeli broj. To bi moglo biti niz, što bi biti char, što god želite. A onda, moramo pratiti Sljedeći čvor u našem popisu povezane. Tako da će biti pokazivač na sljedeći čvor. Ako ste bili samo radi pretraživanje, kao što sam rekao prije, ne bi se slijediti svoje strelice prema dolje. Ubacivanje, što će pratiti gdje ostatak svog popisa je. A želite preusmjeriti glavu ukazati na našoj novi element koji U tom slučaju je jedan, a onda će se ukazati na ostatak popisa povezane. Pa opet, znam da je ovo malo malo ponavljanja iz kviza nula. Dakle, moramo biti vrlo oprezni O redoslijedu u kojem smo to ti pointings pa mi ne Zaboravite na stražnjoj strani popisa. OK, bilo kakva pitanja s Samo pojedinačno povezane liste? Strašan, OK, super. [00:03:06] Pa sad, idemo ići na nešto Samo malo više komplicirano, dvostruko povezane liste. Dakle, uz zadržavanje Staza u sljedećem čvoru, želimo pratiti prethodnog čvora. I to nam omogućuje da, ako smo u nekom trenutku u našem popisu povezani, Ne samo da ide naprijed, ali Također ponoviti unatrag. Jer kao što smo vidjeli u Popis pojedinačno povezani, Ako smo bili u nekom čvoru, a odjednom, odlučili smo, Zapravo, želim ići čvor neposredno prije mene, ne bi se ići sve put natrag u glavu i ponoviti kroz sve ste pronašli čvor ste bili u potrazi za. [00:03:35] Dakle, to čini stvari malo lakše jer smo pokušava ponoviti kroz naše liste povezane. No, to zahtijeva od nas da pratimo jedan više pokazivač, pa još jedan čvor zvijezda. U redu, tako da ovdje dolazi zabavan dio. Idemo u praksi provedbe ukloniti za dvostruko povezane liste. Dakle, to je nešto što je potpuno fer igra za kviz. Ona se pojavila na prošlim kvizova. Dakle, definitivno se pripremiti da kod malo u C Ne zaboravite da uz sve to zabavno PHP i JavaScript, još uvijek imati na umu učiniti C. Dakle podsjete na to Ako ste osjećaj zapušten. [00:04:12] U redu, da vidimo možemo li to učiniti. OK, super. Tako ćemo pokušati urediti pravo na ovamo, i nadamo se da ide prema planu. U redu, ne bilo tko želi da mi daju prijedlog kako bih trebao početi? Samo pretpostavka sam odluka je da sam već su struktura definirana, on je pokazao da se na posljednjoj stranici, Na posljednjem slajdu. I ja sam pohranu glave moj povezan Popis u nekom pokazivač zove popis. Da li netko želi da se ja počeo? [00:04:42] PUBLIKA: Može li stvoriti novi čvor nazvati po popisu? [00:04:45] Hannah: Awesome, tako ćemo stvoriti Novi čvor puzati kroz popis. Volim to. Samo ću ga nazvati pointer, ako je to u redu. A gdje bi to izvorno početi? [00:04:57] PUBLIKA: Vjerojatno na voditelj popisa. Hannah: Lijepa. Želimo početi na glavi, koji je I rekao je će biti pohranjen u popisu. Awesome. Do sada, tako dobro. A sada, naš je cilj ponoviti kroz popis dok ne nađemo čvor s vrijednost n koju želite izbrisati. OK? [00:05:13] Dakle, sada je dio u kojem želimo ponoviti kroz. Može li itko sugeriraju način da se ponoviti kroz? [00:05:19] PUBLIKA: petlje. [00:05:20] Hannah: loop. Ja ga volim. Naime, možemo pokušati while petlja. OK, a mi znamo da smo postigli kraj našeg popisa, kada ono? PUBLIKA: Ako se kazaljka je null. Hannah: Ako se kazaljka je null. Lijepa, ja ga volim. OK, super. Dakle, ispričavam se ako je moj granični Brace je vrsta pada off zaslonu. Ga donijeli smo natrag. OK, super. Što je sljedeće? [00:05:48] Dakle, mi znamo što želimo izbrisati čvor koji ima vrijednost n. Tako ćemo naći slučaju kada mi zapravo naći naše čvor. Pa kako bih provjeriti? Ja bih samo reći, ako pokazivač, a zatim, ako sam Želite da biste dobili vrijednost od pokazivača, Ja samo ne arrow n, jednak n, parametar da mi je dao ovu funkciju, čvor koji želimo da se zapravo izbrisati. Bilo kakva pitanja do ovdje? U redu. U redu, tako da sada ćemo izvući brzo sliku na brodu, kako bi se vizualizirati to. [00:06:24] Dakle, recimo da je naša lijepa čvor. I to ima vrijednost, samo ću reći četiri. A to ukazuje na sljedeća čvor u našem popisu povezane. I nema ništa prije njega. Dakle, mi imamo prethodna ukazujući na ništa. U ovom slučaju, mi ukazati unatrag. OK, samo postavljanje moj povezani popis ovdje. I mi imamo popis koji pokazuje na ove strukture za početak. Ja ću izvući još jedan za Zbog potpunosti. OK. Ja ću naglasiti ovo naprijed. I ja ću istaknuti da je jedan natrag. Ups, ispričavam se. Da, dobio to unatrag. Učinite to opet. OK, tamo idemo. U redu, nema ga. OK, ovdje je naš sliku. [00:07:21] U redu, tako da želimo razmotriti dva slučaja. Prvi slučaj ako čvor želimo obrisati je na samom početku našeg popisa. A onda, drugi slučaj da želimo razmotriti je li to bilo gdje drugdje. Ja razumijem da je to potpuno messy crtanje sa svim mojim brisanje, ali nadam se da ćemo pokušati to jasno s nekim kodom. [00:07:40] U redu, pa ćemo pokriti slučaj gdje smo pronašli naš čvor, i to na vrlo početak našeg popisa povezane. Svatko će mi dati prijedlog ovdje o tome što Trebam učiniti kako bi zapravo ukloniti našu čvor? To je malo lukav. OK? [00:07:56] PUBLIKA: Morate uzeti čvor koji bi se pred njim a čine ga točku za onaj koji bi se nakon toga, i uzeti čvor koji bi se nakon njega i napraviti što ukazuje na čvoru prije njega. Hannah: Točno. U redu, tako da je to slučaj where-- imamo dva slučaja. Imamo slučaj u kojem se čvor koji tražimo je prednji dio popisa. OK, a zatim slučaj da vas opisao je drugačije, zar ne? To je negdje drugdje na popisu. Tako si rekao, trebamo pogledajte čvor prethodne, i učiniti prethodni čvor ukazuju na sljedeći čvor. Dakle, recimo da smo pokušava uzeti pet U mom vrlo neuredan crtež ovdje. Želimo biti sigurni da četiri sada ukazuje na šest. Četiri je sljedeće točke na šest. A šest je ostale točke na četiri. To je naš cilj ovdje, u redu? To je ono što ja mislim da ti Samo je rekao tamo. [00:08:56] U redu, tako da ćemo dobiti taj prvi dio. Učinimo ima Prethodna Prethodna pokazivač. Dakle, četiri je pored trebalo ukazati na što? Točno, u ovom slučaju, šest. Zato bismo trebali reći pokazivača, sljedeći. OK? U redu. Tako ćemo se riješiti ove ružne slike i pokušati izvući nešto ljepši jedan. Mi imamo popis glavu ovdje. A to ukazuje na prvi čvor u naš list povezani, što mi je rekao je četiri. Ovo je naš drugi čvor, pet. I naš treći čvor, šest. Samo pokušavam izvući isti slika, samo malo više glatko. U redu, tako da je četiri sljedeća izvorno upućuje na pet. Pet je sljedeće točke na šest. Šest je ostale točke na pet. I pet prethodnih ukazuje na četiri. Toliko ljepše! OK, super. [00:10:04] Pa sad, ono što smo učinili upravo Ovdje, ova linija koda, koji kaže pokazivač prethodna Sljedeći, pa što to znači? To znači da, ako gledamo pet, idite na prethodni čvor, i to pored sad trebaju točka za pet je sljedeći. Pa u biti, što to radiš je da je brisanje ove strelicu a što ga preskočiti pravo nad pet. Je li to jasno? Znam da mogu biti malo nedorečena. Vidim neke glave nominacije. To je dobro. OK, super. Sad, što je sljedeći korak? [00:10:39] Ja sam reset sljedeći. Sada, što drugo strelica trebam promijeniti? To je jedan ovdje. Šest prethodni. Mi ne želimo šest prethodnih ukazati na pet više. Želimo da se ukazati na četiri. Da li je ta slika smisla? Dakle, sada smo zapravo može potrajati pet od. Tako ćemo dobiti taj komad. Što trebam učiniti prije nego što sam reset šest je prije četiri? Bilo koji ideja tamo? [00:11:14] PUBLIKA: Oslobodite čvor između ih postavljanjem to null? Hannah: Cool. Definitivno, naš krajnji cilj je će se osloboditi čvor. Dakle, možemo to učiniti upravo ovdje. Besplatno pokazivač. Apsolutno. No, i prije toga, neka je just-- naš cilj pravo Ovdje je postaviti pokazivač sljedeći Prethodna jednak pokazivač prethodne. Znam da je ovo je dobivanje prikrivali. OK, neka je take-- kul. Može li svatko vidi ovo dno crta? Ili je to super maleni? [00:11:50] Dakle, prije nego što izvršite Ova linija ovdje, želimo kako bi bili sigurni da je Pokazivač pored nije null. Jer ako je pokazivač sljedeći je null, kakvu pogreške ja ću doći kad pokušam referenca null pointer? PUBLIKA: SEG kriv. Hannah: SEG kriv, lijepo. U redu, pa ako to nije null, onda možemo resetirati. I mi imamo šest točku ponovno na četiri. Pitanja do ove točke? Da? [00:12:17] PUBLIKA: U prva ako izjavi, jeste li znači da ima strelicu Sljedeći, ili [nečujan]? Hannah: mislio sam pointer strelica n. Tako je u osnovi, ono što ja pokušavam učiniti je rekao, trenutni čvor koji sam ja iterating više, trenutni čvor koji Gledam, ja spremanje u pokazivača. I ja želim znati strelice vrijednost, što je u ovom slučaju n. I ja želim vidjeti, čvor tražim za čvor sam cilj izbrisati? Dakle, to je razlog zašto smo ovdje pokazivač n. [00:12:47] PUBLIKA: Dakle strelica ide na n, postavite vrijednost i pohraniti ga u čvor zvan n? [00:12:55] Hannah: Pa to je kao da sam ja prolazi kroz ovaj popis povezanih i ukazuje na pet. Ako želim da se tu vrijednost, ako Želim da se taj broj, 5, Moram napraviti pokazivača strelica n. Cool? Da. [00:13:07] PUBLIKA: Je n ime varijable? Hannah: Da. Dakle, ako smo okrenuti leđa jedno slide, n je ime vrijednosti unutar mjesta čvor u našem popisu povezane. I znam da mogu dobiti nešto malo zbunjujuće, jer mi također zovete stvar koje želimo izbrisati n. Dakle, to je gdje je to jedan redak dolazi. Da? [00:13:27] PUBLIKA: Što ste [Nečujan] kako oni rade? Kazaljka [nečujan]? [00:13:35] Hannah: Naravno. Jeste li razgovarali koji crta about--? PUBLIKA: zadnji redak [nečujan]. [00:13:44] Hannah: Naravno, OK. Pa pogledajmo sliku u Kako bi se pokušati objasniti. Žao mi je, za kamera, pitanje je možemo objasniti pokazivač strelicu uz pokazivač prethodne. OK, pa recimo da smo u pet a naš je cilj brisanje pet. Dakle pokazivač sljedeći, koji od tih Tri čvorovi to nam daje? To nas dovodi do šestog čvor, zar ne? [00:14:10] U redu, tako da sada tražimo za šest prethodni. OK? I mi smo to resetiranja biti jednak četiri, što se dogodilo da se pet prethodni. Znam, to je super teško pratiti. Ja stvarno preporučiti crtate slike Ako ste dobili pitanje kao što je ovaj. Da? [00:14:30] PUBLIKA: Je li razlog da nemamo [nečujan]? [00:14:37] Hannah: Točno. Dakle, pitanje je, zašto ne ne trebaju provjeriti ovdje? Zašto se ne trebamo provjeriti Pokazivač prethodna nije jednaka null? A to je zato što smo Već odvoji slučaj strelice na samom početku. Vrlo dobro pitanje. Sve ostalo na tome? OK, super. Tako ćemo ga završiti. Mi smo skoro tamo. [00:14:59] Pa što ako je u glavi? Što ako umjesto pokušava izbrisati pet, smo zapravo htjeli izbrisati četiri? Ono što bih ja moram napraviti? Pa, želim poništiti moju glavu na što? Shout it out? PUBLIKA: jedna za njega. Hannah: Lijepa. U redu, tako da želimo navesti da se upućuju za sve što nam se kazaljka sljedeći čvor. Dobro. I samo za potpunost godina sake, da bi želite provjeriti da sve dok naš popis nulta, tako dugo dok je naš popis nije prazna, onda želimo postaviti naša prethodna jednaka nuli. Pitanje do sada? Jedan korak from--? [00:15:53] PUBLIKA: Biste li se, ako popis nije jednaka null? [00:15:55] Hannah: Da, ti si potpuno u pravu. Žao mi je. Je li popis nije jednaka nuli. Awesome. Pokušavajući da bi to sve na zaslonu. To je vrsta pada off. Žao nam je, momci. I na kraju, ali ne manje važno, sve moramo učiniti je povratak. OK. To je puno naguranih u jako brzo. Uzmite trenutak da pogledate ovaj over. Recite mi, ako imate bilo kakvih pitanja. Da? [00:16:20] PUBLIKA: Ako popis na Glava, then-- čekati, nevermind. [00:16:26] Hannah: U redu, dobro. Dakle, to je, ako je popis u glavi, ćemo ga ukloniti na sve što smo umetnuta. Da? [00:16:31] PUBLIKA: Možete li objasniti Prvo, ako izjava opet? Ako pokazivač n jednak n? Hannah: Naravno. Dakle, naš je cilj cijele ove funkcije izbrisati čvor koji ima vrijednost n. Dakle, ako nađemo, što smo iterating kroz naše liste, čvor u vrijednosti n, to je jedna želimo izbrisati. Dakle, sve se događa brisanje unutar tog veliko ako izjavi. Da li to smisla? Cool. Da? [00:16:59] PUBLIKA: Možda jednostavno ne mogu vidjeti da, ali ne i vi trebate liniju za pomicanje po popisu? Hannah: Awesome. Vratimo ovaj gore malo, a ćemo baciti to pravo na dnu. Možda odbor bi ste bila nešto bolja ideja. Pa kako bih pomaknuti pokazivač prema naprijed? [00:17:17] PUBLIKA: Pointer jednako pokazivač plus jedan. [00:17:20] Hannah: Lijepa. Tako da nam omogućuje da nastaviti Ponavljanje kroz. OK. PUBLIKA: Ne bi li se još? Hannah: Još jednom? PUBLIKA: Ne bi tu bilo drugo, nakon velika stara, ako Izjava [nečujan]? Hannah: Koji dio? Žao mi je. [00:17:38] PUBLIKA: obuhvaćanje, Ne bi trebalo biti drukčije? Hannah: Apsolutno može imati drugo. Budući da imam pravo povratka tamo, ne morate se drugdje. Ali da, dobro pitanje. OK, zar ne? PUBLIKA: Možemo li se sjetiti pokazivača koji se kreće kroz popis kao da na vrijednosti svakog čvora na popisu? Ili bismo trebali razmišljati o tome kako je vrsta izvan popisa? [00:18:00] Hannah: Ili jedno je u redu, mislim. Način na koji sam ga zamisliti se Ja kažem, u redu, ja sam pointer. A ovo sam ja. Ovo je moja ruka. Ja ću ukazati na različite stvari koje želim ponoviti kroz. Prvo, ja ću istaknuti na čelu liste. I to mi je ja sam govori će ukazati na četiri. I tako ja, što je izvan popisa, Mogu istaknuti da je svaki od tih elemenata. Zato mislim o sebi kao pokazivač. PUBLIKA: Dakle, kada ste izbrisali jedan od tih elemenata, što se izbrisati, da se tako izrazim. Hannah: Točno. Znači li izbrisati stvar što pokazuje da. Tako u primjeru da je Vidjeli smo gdje smo pokušava izbrisati pet, kad sam pokazujući na pet, Želim izbrisati što sam pokazujući. Točno u pravu. Da? PUBLIKA: Jesmo zbrinuta slučaj gdje n nije na popisu? Hannah: Ako n nije na popisu? Sve što će se dogoditi je da si će ponoviti kroz te ponoviti putem, a onda, idete doći do pokazivač biće nula, i onda ćeš biti učinjeno. [00:18:48] PUBLIKA: Dakle, imamo za povratak ništa? Hannah: Mogli smo. Način da ako definirane funkcija, ja samo kažem da se vraća poništiti bez obzira. Ali ti bi mogao imati nešto kao povratak prirodni broj, te su se vratili negativna 1, ako to ne uspije. Nešto kao što je to. Pitanja with-- Da? PUBLIKA: [nečujan]? Hannah: Žao nam je? PUBLIKA: [nečujan]? Hannah: Naravno. Dakle, to je actual-- nakon što ste učinio sve ovo djelo kreće Sve ove strijele oko, naš cijeli Cilj je bio da se riješi čvor da tražimo. Dakle, u ovom slučaju, oslobađajući pointer, ako sam pokazujući na pet, to je kao brisanje ovaj srednji čvor. To je slobodan kazaljka dio. Koje imaju smisla? [00:19:29] PUBLIKA: Pa čak i pomislio nisi [nečujan]? [00:19:31] Hannah: Tako smo pretpostavili na početku smo imali neki popis koji je bio already-- oni su stavili to zajedno. Dakle, kako bi se uredila ova Popis, oni sigurno [nečujan]. Cool. Sve drugo s tim? Da? [00:19:46] PUBLIKA: Što ako popis ne jednak nul liniju? [Nečujan]? Hannah: Upravo ovdje? PUBLIKA: Da. Hannah: OK, sve što radim je ja sam samo pazeći da prije nego što sam pokušati popisu dereference, Prije nego sam pokušati pristupiti prethodne, Želim da biste bili sigurni da to nije null tako da ne dobijete grešku SEG. Cool. [00:20:08] OK, znam da je to bilo sasvim Mnogo bi se kroz. Dakle, to će biti slide dostupne za vas. Dakle, možete proći kroz njega detaljnije. Da? [00:20:17] PUBLIKA: Zašto lista [nečujan]? Hannah: Naravno. Dakle, popis uistinu ukazuje na Ovaj element upravo ovdje, prvi element u popisu. Tako da se ne može imati prethodna. Da? [00:20:31] PUBLIKA: Da li pokazivač točku na istoj adresi u memoriji? Da li je to točka na isto adresa u memoriji kao čvor kako to pokazuje da? [00:20:40] Hannah: Da, to ukazuje na tom čvoru u memoriji. [00:20:43] PUBLIKA: Dobro, tako kada [nečujan]? [00:20:47] Hannah: U smislu, da. OK. U redu, krenimo zajedno s tim. A ako imate još pitanja, držati oko na kraju, i možemo proći kroz to opet. OK, super. Sada smo dobili da se presele na to hash tablica, pokušava, i drveće, što imaš super upoznate sa p-set pet, Speller. [00:21:04] Dakle, hash tablica je jednostavno Niz s pojedinačno povezanim popisima ili dvostruko povezane liste dolaze izvan nje. Dakle, imamo nekakvu asocijativnog niza. A kako ćemo znati koji od njih polja kante ući, koristimo hash funkcije. Dakle, u ovom slučaju, može bilo tko pogodite što hash funkcije će se samo na temelju nekih od ulaza i izlaza? [00:21:31] PUBLIKA: Pismo broj abecede. Hannah: Točno. To ih stavlja samo po abecednom redu. Sve što počinje s Je stavio u prvi kantu. Sve sa B se staviti u Druga kanta, tako dalje, i tako dalje. Strašan, OK. I funkcija raspršivanja je svaki funkcija koja vodi u riječi i da će vam reći što Bucket spada u. Pa što ulazak u našem Niz spada u. [00:21:55] Dakle, svaki put dajem hash funkcije riječ, to bi trebao reći mene ista staviti svaki put. Dakle, ako ćemo koristiti hash funkcije iz prethodnog slajda gdje smo sortiranje Prvo slovo abecede, svaki put predam hash funkcija "Apple" to uvijek treba dati mi vratiti 0. Dakle, ako imam jabuka staviti u moje hash tablici, Ako sam dati "jabuku" na moj hash funkcije, to bi trebao reći, ići stavite ga u kantu 0. Ako sam u potrazi za Apple je u mom hash tablici i ja kažem, gdje je moć jabuka uživo, pitaš svoju hash funkcije. A ona kaže, ići na kantu 0. U redu? Pitanja s hash funkcija? Awesome. [00:22:34] Ovdje je nešto više detaljno objašnjenje onoga hash funkcija mogla izgledati. U redu. Sada, problem s hash Funkcije je u idealnom svijetu, bismo imati samo jedan stvar je u svakoj ćeliji. No, u stvarnosti, postoji Ne samo jednu riječ koja počinje s A. Nema samo jedna riječ koja počinje sa B. So U tom slučaju, ako iznenada dobiti "bobica" i želimo ga staviti u našu hash tablici, i vidimo, oh, ne, banana već postoji, što ćemo učiniti? [00:23:03] Pa, imamo dvije mogućnosti. Prva mogućnost je linearno sondiranja, koja samo znači ići pronaći Sljedeći prazna kanta. Idi naći sljedeći praznog unosa polje. I samo staviti "bobica" tamo. Dakle, ja znam što je trebao ići s bananom u kantu jednom. No, samo ga stavite u kantu tri, jer kantu tri je prazna. Druga mogućnost je vjerojatno ono što implementirati U Vašem p-set, u kojem vas imala poseban ulančavanje. Dakle, svaki od vaših kante, svaki od vaših nizova elemenata, Ne samo da drži jednu riječ, ali zapravo drži pokazivač na popisu riječi. Tako da ako ste imali banana u vašem hash tablici i odjednom htjeli dodati Berry, nema problema. Samo dodajte bobica na kraju, ili početak, svoje liste povezane. OK, super. Pitanja s hash tablice prije nego što dalje? [00:23:58] U redu. Drveće i napad. U redu, tako da je ovo bio drugi izbor za provedbu rječnika. Mogli ste napravili probati. Dakle, to je posebna vrsta stabla koja ponaša se kao multi-level hash tablici. Tako ćete vidjeti sliku gdje imate niz koji ukazuje na hrpu polja koji ukazuju na hrpu polja koji ukazuju na hrpu polja. A mi ćemo vidjeti točno što je to će izgledati na buduće slajd. I općenito, drvo je samo bilo struktura podataka u kojem su podaci organiziran u nekom hijerarhiji. Dakle, gdje smo vidjeli imamo neka vrsta razumijevanja o najvišoj razini, sljedeći nivo, višu razinu, višu razinu. Dakle, to je vjerojatno većina jasna neke specifične primjere. Dakle, ovdje je naša stabla. Možete vidjeti da je to ima određene razine da počnemo s tim korijena čvora, jedan. A možemo ići kroz naše stablo. [00:24:50] Binarno stablo je Posebno vrsta drveta. I samo specifikacija za binarnog stabla je da svaki čvor ima najviše dva lista. Tako nećeš vidjeti bilo od ove čvorovi imaju tri ili četiri ili neki drugi broj listova. I onda još određeniji je binarno pretraživanje stablo gdje je svaki čvor na lijevoj strani čvor će imati vrijednost manja. I svaki vrijednost Pravo će biti veća. Dakle, ako vidite 44 je u našem korijenu, na lijevoj strani, 11, 22, i 33 sve su manje od naših korijena. A na desnoj strani su svi Brojevi bigger-- 66, 55, i 77. I ova nekretnina vrijedi na svakoj razini stabla. [00:25:37] Dakle, kada idemo dolje 22, 11, i 33, i dalje 11 manji od 22 i 33 je veći od 22. I to ga čini lakšim za pretragu jer ako smo u potrazi za brojem, znamo točno što Podružnica slijediti dolje. Dakle, to bi vam se podsjetiti Malo binarnog pretraživanja. Da? [00:25:56] PUBLIKA: Dakle, kada ste opisuje binarni, što je rekao da ima najviše dva lista? Hannah: Mm-hm. PUBLIKA: Može li se manje? Hannah: Da. Tako recimo, na primjer, vi nisu imali jednak broj stvari i ne može ispuniti sve svoje Lišće, to je u redu, ako netko ima jednu. OK? Awesome. Ima li još pitanja na drveću? OK. [00:26:16] Povratak na našim pokušaja što sam govorio O malo ranije, Kako smo ove polja na više razina. Dakle, u ovom slučaju, možemo početi na vrhu. I mi možemo slijediti bilo koju danu riječ dolje. Recimo smo htjeli tražiti Turinga. Krećemo na T, slijedite ga na niz koji sadrži U, i slijedite ga dok ne do ove malo Delta koja govori nam da, da, da ste našli riječ. Jasno pokušaja? Sve to ide tamo? Da? PUBLIKA: Da li simbol delte moraju zauzimati prostor unutar probati? Hannah: Da, pa to ne nužno i moraju biti Delta. No, moramo na neki način Reci našem computer-- sorry, tako da smo znali da TUR nije riječ. Jer recimo nismo imali ovaj koncept delte, ovaj koncept čestitke, koju je pronašao riječ, to će proći i ponoviti T-U-R, i onda kažu, strašan, pronašao sam! To mora biti riječ. No, to stvarno nije. Želimo cijeli Turing biti riječi. Dakle, moramo imati nešto na kraj koji govori, čestitke, našli ste legitiman riječ. PUBLIKA: Dakle, ako ste imali slično 26 slova abecede, bi li zapravo 27 ključeva u vašem probati? [00:27:24] Hannah: Awesome, da. Pa zapravo, mislim da je će se na sljedeći slajd. Ta-da! Gdje ako imate čvor u svom pokušaju, ti si će imati 27 djece umjesto 26. Bilo kakva pitanja s tim? Da? PUBLIKA: Zašto pokušava zauzeti tako puno prostora [nečujan] kao što ide? Zašto se to smatra [nečujan]? Hannah: Naravno. Idemo natrag. Pitanje je, zašto su pokušaji toliko veći nego nešto poput hash tablici. Dakle, za svaku od tih razina, čak i ako oni ne ovdje nacrtana, morate imati svih 26 znakova. A razlog zbog kojeg se ne može kažu, oh, ali kao i za Turinga, ja ne trebaju imati bilo koji od onih iste stvari na razini U. Pa, Ako odjednom ste htjeli dodati nešto što je bilo poput T-H, bi nam trebao imati Mogućnost dodavanja tu riječ. Dakle, za svaku riječ, ti si idući u morati da imaju hrpu nizovi koji dolaze izvan nje. Tako možete vidjeti kako to bih dobiti stvarno velik, jako brzo. Ima li još pitanja? U redu. Da? [00:28:29] PUBLIKA: Kad se pokušava brže od hash tablica? [00:28:33] Hannah: Kada su nastojali brže od hash tablica? Dakle, ako ste imali stvarno loše hash funkcija. Pa recimo da sam poput, Ovdje je tvoj hash funkcija. Bez obzira na to što je riječ Možete li mi dati, ja sam uvijek će ga staviti u ulasku polja 0. I tako smo završili sa samo stavljanjem sve na jednom velikom popisu dugo povezani. I tako Potraži put bi u najgorem slučaju n ako je na samom kraju našeg popisa. Uz probati, samo moramo ponoviti kroz slova u riječi. Dakle, čak i ako se doda gomilu više riječi našeg pokušaja, to nas ne bi bilo više pronaći određenu riječ. [00:29:09] Sve što trebate učiniti je, za Primjerice, u ovom slučaju, recimo mi smo u potrazi za zumiranje, bismo samo da ponoviti više Z-O-O-M, četiri slova. Dakle, to je samo Duljina zoom riječi. Nije važno koliko je više riječi stavimo u tom pokušaju. Uvijek možete ga dobiti U ova četiri koraka. Awesome. Da? [00:29:32] PUBLIKA: Pa [nečujan] je niz, zar ne? [00:29:34] Hannah: Mm-hm. PUBLIKA: Ako ste u potrazi za [nečujan], bi li morati proći kroz Vaš polje pronaći [nečujan]? Hannah: Naravno. PUBLIKA: Ne da se više vremena? Hannah: Ako idem kažu da je moj polje je uvijek će biti, B, C, D, E, F, G, bla bla bla, pa ako ja uvijek znam da je U istom točnim redoslijedom, Ako sam uvijek znao da je po abecednom redu, Ja samo mogu reći je O broj tako i tako u abecedi. Samo skočiti na tom mjestu. Jer ne zaboravite, sa polja, možemo pristupiti bilo element tog niza u konstantnom Vrijeme ako znamo gdje smo u potrazi. Da? [00:30:09] PUBLIKA: Na prethodna slajd [nečujan] 27, ali 26 za prve. [00:30:14] Hannah: Žao nam je? [00:30:15] PUBLIKA: Nije prvi put jedna 0, tako da ne bi bilo 26? [00:30:18] Hannah: Naravno, pa kad kažemo 27, to je će dati nam indeksi 0 do 26 godina. Ali, ako ste stvarno računati one se, da će to biti 27. Dobro pitanje. Bilo što drugo? Da? [00:30:31] PUBLIKA: Tako se pokušava sporije od hash tablica? [00:30:34] Hannah: Pokušava se događa da se, u teorija, brže nego hash tablice ali zauzimaju više memorije. Da? PUBLIKA: [nečujan]? [00:30:45] Hannah: Žao mi je, nisam vas čuo. PUBLIKA: [nečujan]. 0-25 vam daje 26. [00:30:54] Hannah: 0-25 bi dati 26, zar ne. [00:30:56] PUBLIKA: I onda [nečujan]. Hannah: Tako je. Dakle, broj mi je navodeći broj stvari u našem polje. Dakle, ako ćemo imati 27, što je će nam dati 0 preko 26 godina, koji će dati nam prostora za, u ovom slučaju, Ja ne uključujući apostrof. Dakle, mi smo dobivanje 0 do 25 su Prvih 26 slova abecede, ili svih 26 slova abecede. A onda je prošle stvar, na ulasku 26, je će biti provjera Mark, ili Delta. Bilo što drugo? Awesome. Izgubili moj prostor. OK, super. [00:31:31] Tako smo već dotaknuli ovo. No, veliki trgovački off između pokušaja i hash tablica je da pokušava osigurati, u teorija, stalna pogledati puta, ali koristiti puno memorije. U redu, sad imamo nešto manje komplicirane strukture, i mi ćemo biti učinjeno s C, a mi ćemo premjestiti pravo zajedno. [00:31:49] Dakle dimnjaka, vidjeli smo to U predavanju gdje ste nešto poput snop ladice gdje posljednja stvar koju ste stavili na stog se događa da bude prva stvar koju skinu. Dakle, to je ono što zapravo definira snop je da je posljednja stvar koju ste stavili na će biti prvi stvar koju skinu. A terminologija koje koriste Ako ćemo staviti nešto, Ako ćemo dodati nešto naš stack, zovemo to gura. A ako uzmemo nešto off, mi to zovemo iskakanje. A ako ćemo provesti hrpu, mi Morate biti sigurni da pratimo i veličinu i kapacitet. Dakle, ukupan broj elemenata možemo držite i trenutni broj elemenata da se drži. [00:32:27] I vrlo slično, imamo redove. A jedina razlika je, umjesto s hrpama, mi je rekao posljednja stvar koju smo stavili na je prva stvar koju smo poletjeti. Tako je s redovima, Prva stvar koju smo stavili u će biti Prva stvar koju uzeti. Dakle, to je kao da ste zapravo podstava gore u trgovini i ti si se pomoglo, onda prva osoba u redu trebala biti prva osoba koja treba pomoći. Dakle, to bi bio red. [00:32:52] Dakle, moramo pratiti veličina, kapacitet, a glava jer smo će poduzeti sve off sprijeda popisa umjesto leđa. Pitanja o tome? Bilo C pitanja koja su vas muči? Strukture podataka, bilo koji od zabave stvari? U redu, super. Dakle, ja ću ga predati Alison se skočiti u neko više programiranja. [00:33:14] ALISON: Oh, vidjet ćemo. Vidjet ćemo koliko radim ovdje. OK, ja ću pokušati letjeti kroz ove stvari, dečki. Hannah je otišao vrlo u Dubina na sve njezine stvari. Ja ću pokušati dati ste brzi pregled eksplozije tako da možemo doći do Davin sa svim Zabavan JavaScript i sigurnosne stvari da možda zaista želim čuti više o tome. [00:33:33] OK, što je Hannah rekla, ako imate bilo kakvih pitanja, Idem prebrzo, molim, javite mi. Ja ću odgovoriti na pitanja što je to potrebno. Pa za početak, mi ćemo početi s Vjerojatno jedna od prvih stvari ste naučili s weba programiranje, dozvole. Dakle, chmod, ti dečki bi trebali ste bili majstori u tome sa svim webu programiranje koje ste radili u zadnje vrijeme. To je zapravo samo naredbe koja mijenja dozvole ili pristup dozvole naših datotečni sustav objekata. Naravno, to je zapravo vidim to, ako ste ima bilo kakvih problema s tim Tijekom tvoj problem seta, možda ste koristili ls -l, koja je dugo, dobiti pogled vrsta kao što su to, gdje se zapravo vidi sve dozvole za datoteku. [00:34:16] I doista, samo mi ćemo ići kroz vrlo brzo samo lijepa koliko ono što svaki od njih znači. Tako smo d ovdje, što samo stoji za imenik. Očito ovdje, vidimo rwx, koji čitati, dijeljenim resursima, i izvršna. To također može biti prikazan kao bitova, što ćemo ući na sljedećoj stranici. Tako je svaki trijada koje smo vidjeli ovdje, tako da je tri trijade. Mi smo rwx, r ništa X i R ništa x za ovu prvu datoteku. To je to opća struktura. [00:34:49] Dakle, imamo neke imenik. Imamo neke skupina korisnika s tim dozvolama. Neki grupa koja ima ove ovlasti, i svijet koji ima dozvolu. Možete razmišljati o ovome kao trijade. Možete misliti na to što su tri bita. Dakle, oni mogu držati vrijednosti bilo od 0 sve do 7, što je razlog zašto se ponekad imali smo vi chmod 600 umjesto chmod RW god. Mi ćemo doći na primjer tamo. Ali zapravo, možete misliti od njih, kao ni samo rwx, ili možete razmišljati o njima kao neki Broj gdje je to prvi ovdje predstavlja broj između 0 i 7, ovaj drugi predstavlja broj između 0 i 7, a treći predstavlja broj između 0 i 7, u redu? [00:35:38] r ima vrijednost 4. w ima vrijednost 2, a X ima vrijednost 1, što je razlog zašto ova dopuštenje ovdje će biti chmod 700. Budući da je u ovom slučaju ovdje, to mi govori su najprije malo tamo se upalio. Dakle, imamo 4 za čitanje. Druga bitna je upalio za W, što je 2, tako da sada imamo 6. I treća bitna je upalila za x, što je 1, tako da smo dobili sedam. I naravno, naša grupa i naš svijet svaki 0. Dakle, to je također ekvivalent chmod 700. I ja bi svakako pokušati razumjeti mapiranje između njih. Nisam siguran je li to ima doći na kviz prije, ali to će biti Pitanje koje sam mogao pitati. [00:36:18] Samo malo ide čak dalje u chmod ovdje, ovdje je vrlo općenito struktura chmod poziva. Pa naravno, mi smo chmod ovdje. Reference, ono to se odnosi na to Tko smo mi daje te dozvole ili koji su mi da to Dozvole daleko od. Tako imamo ovdje u dozvolama, kao što smo dali ste chmod plus x, kao što ćemo uskoro vidjeti. samo znači daje to specifična Dozvole za sve. Dajte ih svima. Tako da bi mogao vrlo dobro u imati plus x ili g plus x ili o plus x ili višestruki istih. Tako da je prvi dio uvijek će biti reference. Tko smo mi daje te dozvole za, ili koji su mi ih oduzeti? [00:37:03] Drugi je operater. Dakle, ti dečki su se uglavnom bavila plus. To daje dozvole tko ste ih daje, dok je minus, logično, uklanja ih. Dakle, ništa previše strašno tamo. A onda načina je ono što smo razgovarali o tome s čitanjem, pisanjem, odnosno izvršenja. Dakle, plus x znači dati izvršnu Dozvole za sve. I onda, naravno, na kojem posebna datoteka ili mapa. OK? Svatko dobar s chmod? Nije loše? [00:37:37] U redu, tako da HTML, tko od vas su dovoljno stara to-- MySpace dob? Poslao sam to na moj dio, i doslovno pola ljudi Pogledao me kao da sam luda. I ja sam bio kao, dečki, nismo tako star. Hajde. Dakle HyperText Markup Language, to je iskreno samo način za vas prikazati neke stvari na webu. Dakle, to je jezik za označavanje. To nije skriptni jezik. Nema logike u njemu. To je jednostavno promijeniti Prikazuje se način nešto. U redu, tako da je važno Razlika napraviti. To se smatra Markup Language, Ne skriptni jezik. [00:38:12] Dakle, ovdje imamo HTML tagove. Na ovom slajdu su vjerojatno većina oni koji bi trebali biti upoznati s i biti jako zadovoljni. Dakle, očito, imamo naša HTML tag, koji označava da je sve u Između ta dva će biti HTML. Imamo neku vezu koja Očito će vam dati link na vanjskim web stranice. Neki naslov, u našoj glavi ovdje. I mi imamo tijelo H1, što je zaglavlje, tako da ću to lijepo i hrabar i veći. A onda, imamo neke p, što je točka. Vjerojatno bi trebao znati i biti upoznati sa stvarima kao i kako ste umetnuli sliku, su Ima li kakvih drugih sabirnih klase? Ja bi svakako bilo ugodno div. Dakle, oni imaju većinu oznake koji bi trebali biti upoznati s. Ali, naravno, kao i sa svime što je u CS 50, popis nije konačan. Dakle, pazite da podsjete na to. [00:39:08] CSS, pa CSS, ako bilo koji od vas gledati moj seminar od prije dva tjedna, je zapravo samo način stil svoje web stranice? U redu, tako da imamo neke markup jezik. HTML, koji vodi brigu o samo tekst i gdje bi to moglo biti na stranici. Ali CSS stvarno ono što ga čini prilično. Mogli su to u HTML datoteka, ali mi ćemo govoriti o kasnije, Prilično sam siguran da bi moglo se sljedeći slajd, to je uobičajena praksa, a zapravo praksa da smo stvarno potaknuti, za vas da bi ih razdvojili, kada smo govoriti o MVC i da cijeli paradigme. To je stvarno ono što ovaj uvlači. [00:39:42] Dakle, CSS je samo način da se stvari izgledaju lijepo. Stvari su ovdje, kao što su Tijelo i #title i info, to se zove selektora i što oni se biraju određene stvari u HTML datoteke a primjenjuje se bez obzira na stil, god vrsta stvari koje želite, na taj određeni element vašeg web stranica. Dakle ovdje imamo boja pozadine i boja i font obitelj koja je se primjenjuje na sve što je u tijelu. Dakle, ako smo gledali ovamo, to ne bi se primjenjivala na naslov. To bi se primjenjivati ​​samo na ono što je u tim tjelesnim selektora, u redu? [00:40:22] Uz naslov ovdje, ovo je će biti ista stvar, Boja teksta biti plava ide samo utjecati na ono što je unutar Naslovne selektora. Kao i info ovdje, Tekst će biti ružičasta, bilo je info, što je upravo ovdje. Dakle, jedina stvar koja će biti ružičasta na ovoj stranici je datum, ponedjeljak, 17. studeni, 2014. U redu, tako da CSS je samo način da se imaju veću kontrolu over-- Da? [00:40:48] PUBLIKA: Zašto ste upotrijebite mljeveno meso s naslovom? [00:40:51] Hannah: Sljedeći Slide, obećavam! Mi ćemo doći. Dakle, to je razlog zašto moramo koristiti mljeveno meso. Dakle, selektori se na tri glavna forme koje smo razgovarati s vama momci oko. I fyou želite saznati više, ima dosta vani. Postoji velika CSS dokumentaciju. Tu je naziv oznake, što mora učiniti samo s normalnim oznake u HTML. Dakle, H1, p, DIV, H2, ti svašta. A mi samo možemo nazvati one što je. Dakle, kao što vidimo ovdje Tijelo, to je normalno oznaka. Dakle, možemo samo staviti tijelo kada govorimo u našoj CSS datoteci. [00:41:26] Uz naslov, cijeli razloga smo ima to mljeveno meso je imamo ono što je smatra ID. Dakle, ID je uvijek trebao biti Jedinstvena unutar HTML stranice tako da kada ste koji se odnosi na njega, što znam da ste samo govori na jednu određenu stvar. Dakle, u ovom slučaju ovdje, s našim H1 ovdje, CS 50 pregleda sjednici, imamo ID naslov. Dakle, da bi se samo odnosi na to dio našeg HTML, mi hash naslov. Samo konvenciji, iskaznice su označeni s hash ispred njih. Na isti način, možemo vidjeti info ovdje klase. I tako klase s CSS označen je kao dot klasu ili dot god da je klasa. Dakle, u ovom slučaju ovdje, to je info. [00:42:10] Zato sam ga uzeti natrag. Oba ova bi pink naše CSS ovdje jer obojica imaju klasu info. I u našem CSS datoteku, imamo određen da je sve u klasi info mora biti ružičasta. Je li to smisla? Da? [00:42:27] PUBLIKA: Ako ste bili napraviti sve u tijelu bijela, i onda pokušati napraviti nešto u njemu plavo, bi da je uzrok problema? [00:42:34] Hannah: Pa CSS kaskadno style sheets. Dakle, ono što je prema Dno će imati prednost. Dakle, ako ste učiniti nešto sa tijelom, i učiniti sve što je bijelo, a onda kasnije promijenite naslov ili promijenite tekst u tijelu, prebrisati to. Dakle, ništa prema Dno će imati prednost. Da? [00:42:56] Publika: i IDS su jedinstveni, ali nastava može biti više? Hannah: Tako je. Dakle iskaznice trebaju biti jedinstveni, a nastava može odnose se na što više stvari kao što želite. Ima li još pitanja? Da. [00:43:09] PUBLIKA: [nečujan]. Pitam se je li koji čini razliku. Hannah: Žao mi je, ono što je bilo pitanje? PUBLIKA: Postoji mala "F" i kapitalne "F." Hannah: Pa razlika između malog "F" i kapitala "F" Ne bi trebalo napraviti razliku. Dakle, "F" će biti 15 ili način. Cool, bilo što drugo? Svatko dobro, CSS? Da? [00:43:30] PUBLIKA: Žao mi je. Mogu li imati klasu i ID? [00:43:35] Hannah: Da, možete. Stvari mogu imati i klasa i ID. I ja visoko preporučiti testiranje to na svoju vlastitu. CSS ćete najbolje uče samo što nešto, vrlo jednostavna web stranica, izrada neke CSS, i jednostavno vidim kako su u interakciji. A vi ćete dobiti vrlo dobar, intuitivan osjećaj za to kako se to radi. [00:43:56] OK, svi su dobri s CSS? Ti si sve ide kako bi prekrasne web stranice s CSS sada. OK, najbolje prakse, upravo stvari koje treba imati na umu, stvari that-- to je razlog zašto smo pristati što za dizajnera i sitnica. Dakle, zatvoriti sve svoje HTML tagove. Dakle, ako ste na tijelo, Tu bi trebao biti blizu tijela. Ako imate otvorenu stavku, Tu bi trebao biti blizu stav. Provjerite je li stranica potvrđuje. Vi dečki trebali biti dobro upoznati s tim od p-set sedam s CS 50 financije s W3 validator. I kao što sam rekao prije, jedan od naših velikih paradigmi je odvajanje svoj stil sa CSS iz svog maržu, što je HTML. I onda, naravno, imamo Ovaj veliki xkcd ovdje. Yay, strip olakšanje! [00:44:38] OK, TCP / IP. Između njih i HTTP, zapravo su oba protokola. Dakle, vi samo mogao misliti od njih kao skup pravila koji upravlja načinom stvari kretati preko interneta. Dakle, kontrola mjenjača Protokol, ili internet protokol, je samo način kako bi bili sigurni da su podaci dobiva gdje će i da znamo, ako smo ikada nedostaju podaci. Dakle, ako vi mislite natrag na predavanje Prije nekoliko tjedana s Davidom gdje smo imali četiri koverte, oni Svi su bili numerirani kao jedan od četiri, dva od četiri, tri od četiri, četiri četiri, to je samo skup pravila. Rekli smo, u redu, kad god smo slanje više od jednog paketa, idemo na broj je s onim što je broj i koliko ukupno da Korisnik trebao dobiti. [00:45:19] I to samo govori tko prima podatke da li su dobivši sve ili ako nešto izgubio na putu. A što im je potrebno da se ponovno pitati za to. To je zapravo samo skup pravila. Tako možete misliti na to, u redu? I također, to navodi u luku, što vi can-- Znam tijekom predavanja, imali su cijeli popis luka. Ali mi ih ne morate ovdje upravo sada. [00:45:41] Dakle, hipertekst protokol za prijenos je, opet, to je još jedan protokol. Dakle, to je još jedan skup pravila da upravlja, u ovom slučaju, Kako hipertekst se prenosi. Dakle, to je samo omogućuje preglednike razgovarati s web poslužitelja. I kao što smo rekli ovdje, to je kao što je ljudsko rukovanjem. To je samo način da se upravlja Kako web poslužitelj ide za interakciju s preglednikom. I mi smo samo nekoliko primjera. Mi imamo neke zahtjeve ovdje gdje dobili je metoda. Imamo HTTP 1.1, što je protokol verzija za nas. A onda, domaćin, koji je ono mi zapravo pokušavamo pristupiti. A onda, kao što vidite ovdje, mi dobiti neki odgovor s ovim 200 OK, kao naš HTTP odgovora koda. Imamo veliki popis idem povući se u jednoj sekundi da ti dečki bi trebali biti upoznati s. I mi imamo tu vrstu sadržaja tekst / HTML, koji je samo rekao ono što tip podataka su mi primanja od poslužitelja, u redu? To domaćin i ovu vrstu sadržaja su dio HTTP zaglavlja. Možete imati malo ili onoliko malo koliko potrebne za kontekstu što ste se bave. Ponekad ćete imati puno Informacije dolaze iz vašeg poslužitelja. Možda oni traži puno informacija od korisnika. To varira ovisno o kontekstu. Ako pogledate CS 50 studija, Tu je mnogo više o tome. No, imamo puno dobiti putem, tako da idem ići naprijed, ako to je u redu s vama? Cool. Držite se. I svakako se da je Cijeli popis of-- ha! Ne znam zašto je to sve ovdje. Mislio sam da sam doslovno preselio ga dok sam bio sitting-- [00:47:15] DAVIN: Želite li ga podučavati? Ili želiš da ga naučiti? [00:47:17] PUBLIKA: Mislio sam da bismo mogli ih samo pokazati za početak. Mislim, možete otići u ih još, ali ja Mislio je napravio više smisla, jer ja bio samo govori o HTTP statusa. Dakle, ovdje je cijeli popis. Mislim da ono što će se dogoditi je Davin će ići u njih kasnije. No, tu je cijeli popis, Pregled okusa koje dolaze. OK, idemo blow-- to ide da se PHP ubrzani tečaj kao nitko drugi. [00:47:41] Dakle PHP, hipertekst Preprocessor, to je rekurzivna backronym, što znači da se zove nešto drugo. A onda su bili kao, to zapravo ne smisla. Dakle, oni jednostavno nazvali it-- i to je skraćenica, tako da samo to PHP napravio Hypertext Preprocessor, koji Samo nema smisla. Zabava priča. To je programski jezik. Dakle, koliko sam naglasiti da HTML nije programski jezik, to je jezik za označavanje, PHP je programski jezik. Kako znaš ovo jer nema logike. Postoji uvjetne. Imamo varijable, dok smo mi nemaju ništa od tih stvari u HTML. [00:48:12] U redu, onda imamo ovo malo malo ovdje da je kao okus PHP. Tako osnove, varijabilni imena početi s znak za dolar. Mnogo ljudi poput njega. Podsjeća od nas novac. To je sve super. Svi mi želimo PHP. Dakle, mi ne odredite varijable tipa više. To se određuje vrijeme izvođenja. Tumač će biti kao što je, Oh, samo ćemo pokrenuti kroz, i ovisno o kontekstu, Vidjet ćemo što vrste tipova te varijable moraju imati. Nema glavna funkcija. Stvari će se samo pokrenuti. Vi dečki sa svojim uvoz u svoje Posljednji p-set, vi ćete primijetiti. Nije bilo zapravo glavna funkcija. Vi samo napisao ono ste htjeli da se dogodi. I to samo vrsta dogodilo. Dakle, to je PHP za vas. [00:48:56] Nizovi su vrlo slični. Mi još uvijek imamo ovaj nosač. Evo, imamo neke varijable zove ARR, a to je jednako to-- mi imamo normalno Nosač zapis. I mi imamo neke ključne vrijednosti. A velika razlika između C i PHP polja je da možemo imati taj associate-- možemo povezati vrijednosti ključeva. Dakle, umjesto da samo ima niz koji je indeksiran od broja ili pozicije tog elementa u nizu, zapravo možemo ga povezati s ključem. Gdje možemo reći, u redu, želim god vrijednost povezana s voćem. A možda smo voća otišao u banani. Tako da bih se vratiti bananu na nas. [00:49:41] No, u osnovi, većina moćna stvar o tome je da, ako ti dečki ne zaboravite DEMO od predavanja gdje smo zapravo ispočetka napisao bukvar u PHP-u, i to was-- pretraživanje je zapravo samo htjeli, to ključ postoji? To je zapravo vrsta moći njega. Vi ne morate ponoviti kroz niz. Ne trebate znati ono Prostor je u. To bi moglo biti na kraju ili na početku. Dokle god znate ključ koja je povezana s vrijednošću, PHP mogu samo pljuvati tu vrijednost vraćam se na tebe, u redu? [00:50:09] A onda, također samo imaju samo zato što može imati ključne parova vrijednosti ne znači da morate. Također možete jednostavno stvoriti Normalno niz kao ovdje, pri dnu, u kojem je Samo jedan, dva, tri, četiri. Oni su naše vrijednosti. A u stvari, njihove tipke su indeksi. Dakle, ključ za jedan će biti nula. Ključ za dvoje će biti jedno. Tako dalje i tako dalje, osim ako što izričito dodijeliti ključ, možete pretpostaviti da Vrijednost je samo njihov indeks. Znači li to da smisla svima? Nema pitanja? Awesome. [00:50:38] OK, foreach je način ponoviti kroz polja. Dakle, imamo nešto ovdje, Samo opća struktura. Dakle foreach, naziv naš niz, kao što je bilo želite nazvati svaki element u svom polju, i možemo napraviti nešto s taj element ili s tom vrijednošću. Tako imamo primjer ovdje. Imamo asocijativne Niz s ove dvije stavke s bar se povezuje s foo i qux se povezuje s Baz. Dakle, tipke su foo i Baz. Vrijednosti su bar i qux. Dakle foreach, imamo niz Ovdje, kao temeljna vrijednost paru. To nam omogućuje da pristup i ključ i vrijednost. Možda samo želite vrijednosti, u kojem slučaju možete jednostavno napraviti kao ARR kao $ vrijednost, a onda samo pristup vrijednost kao što ponoviti kroz. No, možda, za neke Razlog, što želite ključ, što je razlog zašto sam izabrao ovaj primjer, umjesto. Dakle, što zapravo može manipulirati ključ i vrijednost u ovom slučaju. OK? Pitanje? [00:51:41] PUBLIKA: Ako ste htjeli Samo manipulirati ključ, bi morate učiniti foreach-- [00:51:45] ALISON: Tako je. Dakle, ako ste htjeli manipuliraju samo ključ, ti bi i dalje potrebna ova sintaksa, jer ako se samo imaju ARR kao nešto, kao prvo, to je će preuzeti želite vrijednost, a ne ključ. Dakle, ako ste ikada samo kao ARR kako je, možda je to kao $ elementa, to će pretpostaviti da tražiš za samo vrijednosti u svakoj točki. Ako ste izričito želite učiniti nešto s ključem, čak i ako ne ide na ništa s vrijednošću, trebate tu strukturu da imamo ovdje gdje ste izričito traži i za ključ i vrijednosti. Veliko pitanje. Bilo što drugo? Cool. [00:52:27] U redu, PHP i HTML. Oh, vratili smo se p-set sedam ponovo. Dakle, to bi trebalo izgledati malo poznato. Dakle, to je neki jednostavni HTML oblik koji ima ulazni ime Hello. I vidimo da imamo način dobiti. A ako se sjećate iz našeg p-set, kada je ovaj obrazac podnosi, šalje niz zove $ _GET da ima svih tih ulaza ili varijabli iz oblik koji bi trebao biti manipulirati u našem PHP. Dakle, u ovom slučaju, korisnik će staviti u svoje ime. Oni su predati ga. I vidimo da smo dobili neki niz ovdje. Mi imamo GET niz. I mi se pristup naziva. [00:53:11] Tako da je, kaže, u redu, daj mi vrijednost koja je povezana s imenom, ime biti ključ ovdje. I da mapira izravno ono mi je rekao naš ulaz je ime. Dakle, to je što vam ključ ono će biti u vašoj niz ovdje. Znači li to da smisla svima? Da? [00:53:32] PUBLIKA: Da li ime u GET odnose do ljubičaste linije na [nečujan]? [00:53:36] ALISON: To se odnosi na ovo ovdje. Dakle, ovo polje upravo ovdje, to se odnosi na ovo ime ovdje. Dakle, to bi moglo da se zove kao što su broj telefona, ili bilo što drugo. To ime zapravo govori, što Zovete li ovo polje? Kako ćete odnose se na ovom području? I to ime je zapravo sviđa, da smo rekavši ovo polje se zove imenom. Tako ćemo pristupiti. [00:53:59] PUBLIKA: Tako se to sviđa, Naziv ulaza iznosi Bob, and-- [00:54:02] ALISON: Dobro, onda ste bi dobili Bob dolje. Točno. Svatko cool? U redu, tako da se u odnosu na radno mjesto, to su dva glavna načina koje prolaze podatke u HTTP zahtjev. Vi dečki trebali smo vidjeli oba ova nadamo. Dakle, s dobiti, informacijama prolazi kroz URL. Dakle, ako ste ikada učiniti Googleu pretraga, YouTube, vi ćete vjerojatno primijetiti neke upitnik. A onda, sve riječi da li samo staviti tamo. I POST prelazi podatke u tijelu HTTP poruke. Pa za razliku od GET, koju vrstu uzeti u obzir da podaci skrivena od korisnika. No, ono što je stvarno važno razumjeti je da je to još uvijek baš kao što je nesigurno i dobiti. Analogija Volim koristiti je li imate broj bankovnog računa a ti ga napisati na vanjskoj strani omotnice, to je prilično nesiguran. Ako ste bili na to napisati na komad papir i stavio ga u omotnicu, to je još uvijek jako nesigurna zbog sve što morate učiniti je otvoriti da se i pogled na stvarni sadržaj poruke da se vidi da. Dakle, ovo je "skriveni", a ljudi vole mislim da je sigurno, ali to stvarno nije. A siguran sam da će Davin ući da je više, možda. No, to je važno Razlika napraviti i nešto jako dobro razumjeti. [00:55:15] OK, SQL, Structured Query Language. Sve stvari koje vidjeli smo kako je nedavno! Tako je to u osnovi je samo namijenjen, Očito, za upravljanje podacima. Ti dečki imali puno iskustva s to u tablicama s PHP MyAdmin. A tu su i četiri zajedničke upiti da želimo da znate. Dakle, postoji ažuriranje, umetnuti, odabir i brisanje. Tako bi bili sigurni da znate oni jako dobro. Mi ćemo ići kroz njih jako brzo. [00:55:40] Dakle ažuriranje, doista, kao što je možda mislite da ne, to samo ažurira podatke u bazi podataka. Dakle, imamo neke primjere ovdje. To je opći Struktura ažuriranja upit. Tako ažuriramo tablicu da govorimo o tome. I želimo postaviti određena vrijednosti, određene kolumne jednaka određenim vrijednostima. Dakle, to samo ažurira tablicu, mijenjanje vrijednosti u svim redovima u ovom slučaju. Dakle, u tom jednom ovdje, stvarna Primjer imamo insert-- žao. To slide napredne bez mene to realizirati. [00:56:17] Dakle, ovo ažuriranje tablica postavljena Col1 jednaka da VAL1 gdje kuća jednaka "Currier." Što ovo radi je samo mijenja, to je samo ažurira ove vrijednosti u pojedinim mjestima. Dakle, u ovom prvom, mijenja to Vrijednosti za sve što je u vašoj tablici, OK? To će se promijeniti to stup za svakog pojedinog upisa, za svaki redak. Ali to gdje ste mogli mislim da je to kao kvalifikacijama. Dakle, to je samo neće promijeniti je u vrlo specifičnim mjestima. Tako je u p-set sedam, kad vas Možda ažurirani količinu novca da je vaš korisnički imala, vjerojatno je imao Neki kojoj ID jednaka ID sesije, zar ne? [00:56:53] Zato što ne želi promijeniti količinu novca za svaku osobu koja je korištenjem vaše web stranice. Htjela si ga promijeniti za jedan određena osoba, ta osoba se tko je koristeći ga u to vrijeme. Pravo? U redu, tako da uložite, umetak određene vrijednosti u tablicama. To je kao kad ste stvaranje potpuno novog korisnika. Opća struktura ovdje je umetnuti u bilo stola govorimo o tome. Vrijednosti, pri čemu su vrijednosti koje mi zapravo želimo umetnuti. OK, kako vidimo ovdje, mi su umetnuti u tablici. To je specifična kolone njihovi korespondira vrijednosti. Dakle, to govori, insert Novi red sadrži Vrijednosti VAL1 i VAL2 pod ove specifične stupce. [00:57:33] Dakle, možda samo želi popuniti Pola stvari u ovom nizu. To je ono što ovaj dio ovdje vam omogućuje da učinite. To vam omogućuje zapravo odrediti koji dio. Da? [00:57:44] PUBLIKA: Može li se samo [nečujan] stanice u nizu [nečujan]? [00:57:52] ALISON: Ako ste se samo ispuniti određene dijelove svog reda, Ostatak od tih stanica su samo prazne. Dokle god ih pustiti da se biti prazna, to nije problem. Ako ih pokušate pristupiti, to je će vratiti neke prazne elementa. No, važno je znati da je u nekim tablicama, Oni moraju biti dopušteno da se nula. Vi svibanj izvoditi u Problem za vrijeme p-set jer mi nisu dopustili bilo tvojih vrijednosti biti nula. No, možete odrediti izborni vrijednost u tablici. [00:58:26] OK, odaberite, tako da je ovo samo način dobivanja specifični podaci iz tablice u Neki identifikator koji želite. Dakle, odaberite zvijezda sa stola gdje col jednak nešto jednostavno znači, daj mi sve podatke vezane gdje je to posebna kolona je istina. Tako zvijezda u ovom slučaju će vratiti cijeli red na vas, u redu? [00:58:49] A onda, u tom slučaju, odaberite zvijezda iz Tablica samo vam daje cijelu tablicu. A onda, izbrisati očito, to je samo briše redak iz tablice. Dakle, brisanje iz tablice, god tablica smo pozivom, gdje su neki specifični Oznaka ili neki uvjet istinit. Da? [00:59:07] PUBLIKA: Pitanje. Zašto koristite dvaput citati, i da li Vas napraviti dvostruke navodnike ili jednog citati, to napraviti razliku? [00:59:13] ALISON: Dvostruka citati ili jednostruke navodnike ne bi razlika u SQL. Mislim da sam vidjela još jedno pitanje. Da? [00:59:20] PUBLIKA: Ne to utjecati na ono što dobiva pobjegao iz upita? [00:59:25] ALISON: Rob? [00:59:27] ROB: Što mislite pod pobjegao iz upita? [00:59:31] PUBLIKA: Ako netko ima Jedan upita u obliku of-- [00:59:36] ROB: Ako netko stavili jednu ponudu u, onda dok god ste dezinfekciju Vaš ulaz, onda to ne smeta. Ali, ako ste koristeći jednu citat i vi ste pogrešno bježeći svoje inpute, onda da, što im je potrebno staviti jedan citat, kako bi se razbiti Vaš broj. Ako koristite dvostruki navodnici, što im je potrebno staviti double citiram razbiti svoj kod. No, koliko god pobjeći stvari točno, to ne smeta. To samo će biti prevedene na ispravan simbol ionako. [00:59:59] PUBLIKA: Što znači bijeg? ALISON: Pa, kao što su dezinfekciju i pobjeći. Ispit koji imamo, velika xkcd strip koji se podići u kojoj imate, oh-- ROB: To je posljednji slajd. ALISON: To je posljednja tobogan, stvarno? O moj Bože. Tamo idemo, savršena. U redu, tako da u osnovi, možete se uvelo nešto u tom SQL upit gdje se slomi broj, ili kako je David je pokazao u razredu, ako imamo neki singl Citat 1 jednak 1, a ako je u našem kodu, mi samo izravno kopirati da, i imamo završava jedan citat, što se događa je što smo dobili Neki izraz koji ocjenjuje da je istina da će neka netko ulazi u našu bazu podataka i dobili podatke da bismo Ne želim ih dobiti. Dakle, dezinfekciju ulaza samo znači pazeći da pobjegnu njih likovi i Označavanjem kao i znakova nisu stvari koje bi trebalo biti dopušteno treba shvatiti doslovno kao naš SQL. [01:01:04] Tako velika stvar da smo rekli da ti dečki bi trebali biti pomoću bili su HTML posebne znakova, što je nešto da možda želite pogledati. U redu, izbrisati. Vrste podataka, to će sve biti online. Budući da smo 15 minuta napustio, ja sam Samo će ići ravno kroz to. PHP i SQL, u osnovi je to Upravo smo imali funkciju upit koji pomogao u zaštiti od ovi zlonamjernih napada. Dakle, kad god koristite upita, bili smo sigurni da su se stvari dezinficirati i sitnica. [01:01:36] MVC je samo dizajn paradigma, tako da je model, pogled, kontroler. To je samo način da se zadrži stvari lijepo i razdijeliti na isti način da smo skloni faktor kako kod u funkcijama. To je samo dizajn web okvir koja vam omogućuje da učinite isto. Ja ću preskočiti ovo. [01:01:54] To je nešto što sam bilo bi super udoban sa. To je veliki mali stol tamo. To vam daje funkciju Primjer modela. Ja sam samo prolazio kroz to jer sam stvarno želite Davin biti u mogućnosti razgovarati. Ako imate bilo kakvih pitanja, slobodno. Ja ću biti ovdje nakon. Samo dolaze razgovarati sa mnom. Uz to, imamo HTTP statusa. I Davin će puhati kroz to 15 minuta. To će biti velik. [01:02:17] DAVIN: OK. Uh, tvoja mic? Da. Oprostite. ALISON: Put biti spreman. DAVIN: Ne, ja sam spreman. Ja sam spreman. Idemo to napraviti. To je spremna. OK. Oprostite. Prolila sam kavu na sebe. Ne znam jesam li više uzrujalo da gledam glup, ili da ja nemam više kave. U svakom slučaju, samo brzo najava O lista ti dečki imaju. Dakle, to list vi imate nije Službena što je na kvizu. To je službeni što je na kvizu. Također, na web stranici, možemo reći ti, u redu, to će biti na kvizu. Tako u malo varati list imate, a ne službeni. A tu su i greške na njega. Dakle, najbolje je ne samo slijepo ga koristiti. Pa da, to je to. Tako ćemo dobiti u ovom vrlo brzo. [01:03:05] Tako HTTP statusa. Dakle, što se događa kada Web stranica, sve je u redu. Sve je u redu. Sve se vraća što način na koji to želite. Možete dobiti 200 OK. 301, gdje smo vidjeli da je 301 prije? Čekaj, što se događa? Oprostite. Vidjeli smo ja tin predavanje u sigurnosti. Tako u sigurnosti, tako da ako je David upisali u http a zatim pokušao da ide u cs50.net, ti ćeš vidjeti 301 preselio. Zašto? Budući da će se preusmjeriti automatski našem HTTPS. [01:03:35] Dakle 301 preselili, samo je osnovi preusmjeravanje. A možete misliti o tome kao što je ovaj. Svaki od statusa koji počinju s 2-ih, oni su kao, u redu, sve je u redu. Svaki od statusa koji pokreću s 3, to su preusmjeravanje. Statusi koje počinju s 4, to znači da postoji neka vrsta pogreške klijenta. Statusi koje počinju s 5, to je neka vrsta pogreške poslužitelja. Dakle, vrsta razbiti statusi takvo. Dakle, 304 nije ni mijenjati, tako da u svom server.c p-seta, pa ćemo vam reći loaded cat.html. Sve se vraća, dobivate 200S, OK, super. [01:04:03] Recimo da je osvježena. Pa, unutar koje cat.html, imate JPEG. Pa, to JPEG nije će se ponovno učitati. Nećeš na post drugog GET zahtjev na server, a onda bi sve te podatke natrag. To će samo be-- da slika će biti spremljene na vašem računalu. I tako da će slika biti 304. Dakle, to nije bila izmijenjena. Ako ste onda zatvoriti, jasno kolačiće, a zatim osvježite i pokušati učitati tu stranicu opet, ti ćeš vidjeti 200S. Nećeš vidjeti da je 304. [01:04:28] 400, loše zahtjev, real brzo, kao i ako su idući u poslati JSON objekt s poslužiteljem i tvoja JSON objekt nije točan, vidjet ćete nešto slično. 403, zabranjeno. Kad biste vidjeli zabranjeno? Vjerojatno Vjerojatno? PUBLIKA: chmod. DAVIN: chmod, da. Dakle, niste postavili Dozvole ispravno. 404, nije pronađen. To je jednostavno ne postoji. Dakle, ako ste upisali u krivu URL. 500, interna pogreška poslužitelja, poslužitelj Vjerojatno nije ispravno konfiguriran. Nešto nije u svom kraju, ali nešto na strani poslužitelja. A 503? Puno ljudi vidjeli 503s u posljednjoj p-set. Kad bi se to dogodilo? Čuo sam šapat. [01:05:05] PUBLIKA: Kad Google odluči da si robot. DAVIN: Da, kada je Google odluči ti si robot, dobivate 503s. Dakle, to je preopterećenje. Ako ste zatražili od poslužitelja previše, to je obično privremena. I većina vas to primijetio. Dakle, što ste vidjeli 503. Možda su se malo stanka, a zatim su 503s ode, i sve je bilo u redu. [01:05:20] Gabe: jako brzo, kada ste vi dobili 500 u vjerojatno ovo zadnje je problem postaviti? Da? [01:05:27] PUBLIKA: Obično, ako poslužitelj ima datoteku zagubljen ili [nečujan] njihova Stroj [nečujan]. [01:05:34] Gabe: Dakle, to bi moglo biti konfiguracija problem je u vašoj PHP na vašem poslužitelju. No, to može biti samo nešto kao da je vaš zarezom zaboravio. Ako pišete PHP, Neki pogrešna sintaksa Možda se nešto takvo. OK? [01:05:46] DAVIN: Cool. Želite li raditi samo do AJAX? [01:05:51] Gabe: [nečujan]. DAVIN: OK. Dakle, ono što je DOM? Što DOM stajati? [01:05:55] PUBLIKA: Cilj dokumenta modela. DAVIN: Nice. I zašto mi se sviđa? Awesome. Pravo, tako da samo nam omogućuje da pristup HTML, pristupiti našoj stranici vrlo brzo. Zašto? Budući da smo prema našim stranica, liječenje naše HTML oznake, liječenje sve kao da su objekti. Ako ćemo tretirajući ih kao da su objekata, što onda možemo učiniti? Pa, možemo nazvati funkcije na njima. A to je važno zašto? Pa, zato što ćemo iskoristiti JavaScript ažurirati svoju HTML, ažurirati ove predmete. Dakle, ako smo ih tretirati kao objekte, tada možemo nazvati funkcije na njima. Idem da se u ovo malo više kad idem u JavaScript, ali svi smo vidjeli kao document.getElementByID. Dakle, dokument je Vaš Element, dobili elementa po ID, tako da ćeš izgledati neko ID u HTML tag. A onda, to možete učiniti nešto drugo na to. Na primjer, kao što je document.body, onda možete dodati dijete. Dakle, ti si idući u nađi dokument. Imate dokument. Vi ćete pronaći tijelo. Vi pronašao tijelo. I onda, ti ćeš nazvati neku funkciju na njemu. Dakle dodati dijete, a možete dodati Neki HTML na kraju unutar vašeg tijela. Tako je u osnovi, ti si jednostavno tretirajući ga kao objekt. Vi ste liječenju HTML oznake kao objekt. I to ga čini vrlo lako i brzo proći kroz njih. Ali, to vam omogućuje pozvati funkcija na njih tako da možete manipulirati i mijenjati elemente. [01:07:04] Gabe: S obzirom na to, zašto je takva JavaScript Lijepo jezika za interakciju s HTML? Tečajevi su, kada su ljudi odabiru jezik preglednika, za strani klijenta, JavaScript je jako lijepo, to je stvarno dobar u rukovanju predmetima. I predmeti su vrsta kao predmeti koji se pojavljuju u HTML, tako da je vrlo lako za JavaScript učiniti takvu rukovanje. DAVIN: Nice. Dakle, ovdje je samo primjer. Dakle, mislim da se na prošlogodišnjoj kviza, ili možda prije dvije godine, što upitao vas stvoriti stablo. Dakle, to je upravo ono što bi učinio. Dakle, početi s dokumentom. A onda ste u osnovi samo pogled na oznake. Dakle, ako ste u potrazi smo početi s HTML oznake. A onda, možete dobiti tragove o tome kako to na temelju otiska učiniti. Dakle, glava vrsta grana off. Unutar glave, imamo druga oznaka za naslov. Dakle, imamo više oznaka. I unutar toga, imamo neke string. I tako mi predstavljaju string u krug. A sve oznake na trgovima. [01:07:54] A ako pogledate, ako mislim to kao stablo, a recimo da je HTML je roditelja, a zatim glavu i tijelo će se braća i sestre. Oni oboje će biti djeca tog roditelja. Pa zato što su obje braća i sestre, oni su će biti neka vrsta uz jedni druge u našoj stabla modela. A onda, u osnovi učiniti istu stvar. Pa nije teško, ali mi smo pitali Pitanja kao što su to prije na kviz. Gabe: Zna li itko Za sva pitanja do sada? Je li to dobro? DAVIN: Cool. JavaScript, OK, dobre stvari. Dakle JavaScript, što je JavaScript? Pa, to je JavaScript is-- komplicirano, ali to su neke od naglašava koje bi trebali imati na umu. Prvo, to je lagano upisali. Što to znači? Dakle, PHP was-- Da, ono što je gore? [01:08:35] PUBLIKA: Ne morate se izričito Država kakvu vrstu varijable je. DAVIN: Perfect. Dakle, on je rekao da ne moraju izričito navesti tip varijable. To je točno. Tako je u C, ako sam imao int i iznosi 50, zatim u PHP-u, to je samo ovako, $ ja, iznosi 50. Tada je u JavaScript, Što će poziv biti? Var, zar ne? To bi bilo kao var i iznosi 50. Ali ne morate biti kao, u redu, to je int. OK, ovo je string. Nema potrebe za to. To je tumačiti jezik. Dakle, što to znači? [01:09:04] PUBLIKA: Ne sastaviti. [01:09:06] DAVIN: Što ne sastavlja znači? Da? [01:09:11] PUBLIKA: Nemaš restrukturirati kod da bi ga spremni za računalo to trčanje. To je samo snimljen u vrijeme Izvršenje i računala [nečujan]. DAVIN: Da, tako to ide prolaze preko tumača. Ali ti si upravo pravo. Dakle, nikad ne ide da ga sastaviti, zar ne? Kada su radili svoj PHP i JavaScript koda, nikad ne zove sastaviti. Nikada se zove nešto poput učiniti ili nešto slično. To je zato što je tumačiti. Dakle, svaki put kad prolazi kroz preglednik, to ide preko prevoditelja. I da će to protumačiti Samo u realnom vremenu odmah za vas. Dakle, ono što su neke pozitivne i negativne da ima tumačiti jezik i ima sastaviti jezik? Dakle compiling-- Da, ono što je gore? [01:09:50] PUBLIKA: interpretirali je sporiji. DAVIN: U kojem smislu? [01:09:57] PUBLIKA: Nakon tebe sastaviti, ne moraš učiniti dodatne korake za izvršavanje je, dok je ovaj [nečujan]. [01:10:04] DAVIN: Pravo, savršena. Dakle, ono što si rekao je osnovi koje izrađuju, kad sastaviti, imate Puno unaprijed troškova, zar ne? Ti ćeš ga sastaviti. No, nakon što ga sastaviti, prevodilac će ga optimizirati. To će biti brzo. To će zapravo biti jednako brzo kao što može biti. Uz tumačenje, nikada ima tu unaprijed troškove. Umjesto toga, to će biti nešto sporiji svaki put ćete ga protumačiti. I ti si idući u morati tumačiti ga svaki put. Dakle, umjesto da to jednokratni trošak, sad si morati tumačiti svaki put stranica donosi. [01:10:29] Dakle, prevoditelji su dobre, jer ne morate ga sastaviti, ali oni su loše u tome svaki učitavanju stranice, to je ćete morati tumace JavaScript. I to će pokrenuti nešto sporiji nego ako ste bili da ga sastaviti. Omogućuje communicate-- oh, čekaj. Koristi se za manipuliranje sadržaj i izgled. Mi smo samo razgovarali o tome. Ona koristi DOM. AJAX, mi ćemo ući u AJAX je u malo. A onda, to je strani klijenta. Dakle, PHP je strani poslužitelja. JavaScript je strani klijenta. Koji su pozitivni na to? To je, kaže. To je brži, zar ne? Budući da nemate to-- je brži. Ne morate komunicirati s nekim drugim uređajem. Ako ste samo na svoje klijent, ti si nikada će morati ići i vidjeti što je na poslužitelju a zatim se jave ili nešto slično. Tako strani klijenta teži biti malo brži. [01:11:15] Gabe: Da, ali to ne znači PHP je brže nego JavaScript ili bilo što od slično. Oni pokrenuti vrsta u istom Brzina jer su oboje interpretirani jezik. Ono što je spor Ovdje je zahtjev. Dakle, ti si zapravo događa sve više u Brazil dobiti neke informacije da tamo živi. No, PHP i JavaScript, oni vrsta izvoditi u istom brzinom. To ne znači da je netko brže od drugoga. To, također, trik pitanje ovdje. Dakle JavaScript nikada postaje Stroj broj, istina ili laž? [01:11:47] PUBLIKA: False. Gabe: False. To mora postati stroj broj jer je stroj kod Jedino stroj razumije. Iako to nije sastavio, ipak postaje stroj za broj jer tumač je samo program koji ide liniju po liniju i pretvara tu liniju u nešto računalo razumije. OK? Cool. [01:12:08] DAVIN: Ovdje je samo vrlo osnovni Pozdrav svijetu JavaScript programa. Pa ne znam if-- ste vidjeli. Ali, samo HTML ovdje. I umjesto da se zapravo stavljajući JavaScript u pismu oznake, pa normalno bi ga stavili u glavu. Imate skripte oznaka. Možete ga ispustiti tu. Sve smo učinili ovdje smo povezani in-- tako da smo povezani u JavaScript datoteci kao što je to. A ti si sve to učinio, zar ne? Dakle, kada ste koristili jQuery i underscore.js u posljednjoj p-set, nemate tona koda up u Vaša skripta oznake, u tvojoj glavi. Ti bi mogao učiniti, ali umjesto ti si samo ga povezuje u. A ti si ga povezuje u Baš kao što to s CSS. Pa to samo olakšava čitanje tako Vaš broj ne sviđa 1.000 redova s tona funkcije koje možda nećete koristiti. [01:12:52] Umjesto toga, samo ga povezati u. Ona ga compartmentalizes. To je kao pisanje neke datoteke zaglavlja i zatim uključujući zaglavlje datoteke u C Razmislite o tome baš kao što je ovaj. Dakle, što učiniti? Pa, to će se pokrenuti. To će upozoriti. Dakle, ti si idući u dobiti malo pop-up pod nazivom Pozdrav svijetu. Brzo pitanje, samo provjera razum, pa vidite ovdje u tijelu, kažu tijela, HTML ovdje. Što je na prvom mjestu? Moram vidjeti tijelo, HTML ovdje, ili ću prvo vidjeti upozorenje? [01:13:19] PUBLIKA: Alert. [01:13:20] DAVIN: Tako je. On kaže upozorenja. Zašto? [01:13:22] PUBLIKA: Zbog tebe idu od vrha do dna. [01:13:24] DAVIN: Da. Savršeno. Tako on kaže, što ide od vrha prema Dno, što je apsolutno točna. Ti si idući u ići od vrha do dna. I u JavaScript, jQuery, imate funkcija koja je kao onload, ili spremni, i to kaže, u redu, pričekajte Sve ove HTML je učitan. A onda, nazovite JavaScript. Budući da nemamo da se ovdje, Prva stvar koja će se dogoditi je da će se ići od vrha do dna. To će pogoditi da je JS zovu, to će upozoriti. Nakon toga kliknete OK, da dojave ide dalje. Onda će to pokazati što tijelo HTML ovdje. Nice. [01:13:54] U redu, tako da samo jako brzo, pisanje U JavaScript je super brzo. Kako bi se proglasi varijabla, ime var. Tako je u C, imate int i, imate proglasiti kakav tip je. PHP, $. JavaScript, var. Razgovarali smo o tome. U redu, idemo. [01:14:11] Loops, ista stvar. Ista stvar. Funkcija izjave, pa baš kao što ste vidjeli u C. Jedina stvar drugačija je tako kada ste dobili s drugim programskim jezicima, kao kad se uzme 51 sljedeći semestar i radite s ocaml, možete nositi s anonimnim funkcijama. Dakle, to je upravo ono što imamo ovdje. Dakle, želite staviti u svemu, nekakav sum vrijednosti. No, možda samo treba raditi to jedno vrijeme. Dakle, ne želim ga nazvati funkcija suma, dati mu funkciju izjavu. Umjesto toga, samo ga koristiti kao anonimni funkciju. A vi ste vidjeli puno. Vi ćete vidjeti primjer to je u par slajdova. Da, vidjet ćemo. Gabe: Dobro pitanje. Kada možda želite koristiti anonimni funkcija ovdje? Uglavnom, ako želite nešto, kao događaj, da se dogodi. Dakle, kada miš je pritisne, na primjer, Želite neke funkcije zvati. Tako ćete proći na događaj rukovatelj, prođe se događaju, vrsta, funkcija Želite li se zove. A što ste prolazu je kao što je, na kraju dana, samo pokazivač da pouku, na funkciji. Dakle, to nije kao što prolazi cijeli kod, baš kao što je Pokazivač za funkciju. A onda, kada netko klikne miša, a zatim da je funkcija dobiva zove. [01:15:17] DAVIN: Nizovi, pa vas imaju niz izjavu. Zatim, niz staviti stvari u. Jako brzo, što će to isprintati? Što će biti treći element? [01:15:31] PUBLIKA: "JS". [01:15:32] DAVIN: Da, to bi bilo "JS". Čekaj, vratiti. Što je duljina? [01:15:37] PUBLIKA: Tri. DAVIN: Tri, zar ne? Točno ono što mislite. OK, sad ide. Nizovi, možete dodati stvari za njih. Na taj način možete ići dalje njihove početne granice. Samo je nešto na umu. PHP, JavaScript, oni su malo malo oprašta u smislu stvari kao što je to. Objekti, vrlo slično konstrukt u C, vrlo kao i asocijativnih nizova u PHP. Svi ste imali iskustva s tim. Dakle, JSON, kad si u prolazu JSON natrag i naprijed u p-set osam, to je tvoja stvar. [01:16:03] Tako da, primjerice, vrlo brzo je primjer. Ovdje je objekt. Način na koji to referenca objekt, tako da samo jako brzo, recimo ja sam htjela naći out, OK, što je, naravno? I tako predmet ime ovdje je CS50. A onda, ako sam imao asocijativni Niz, kako bih to učinio? Ja ću se pomoću ključa, zar ne? Zato sam naziv polja. Imam zagrada, citati, ključ, end citati, kraj nosača, i da će referencu koja Element u mojoj asocijativni niz. Kako sam upućuje Naravno u mojoj objekta? Tko zna? [01:16:39] PUBLIKA: [nečujan]. [01:16:40] DAVIN: Što je gore? PUBLIKA: CS50.course. DAVIN: Dobro, da. Tako CS50.course. Dakle, način na referentne stvari unutar JSON objekt s točkom. [01:16:48] PUBLIKA: Također možete koristiti array sintaksu. [01:16:53] DAVIN: OK, u redu. [01:16:54] Gabe: Također možete koristiti CS50 nosač, string, kao navodnicima. PUBLIKA: Mislim da je identičan PHP. Gabe: To je ista stvar. DAVIN: Fine! No, vidjet ćete ovaj drugih mjesta. Da, tako zadržati ide. To je ono što sam upravo rekao. Dakle, u JavaScript jQuery primjer. Dakle, ovo je moj DOM, zar ne? Jako brzo, tako da imam Glava, Hello World, tijelo. Imam gumb. On kaže: "gurati me", tako da želim da ga gurnuti. I želim učiniti nešto kada je kliknulo. Odmah pored. [01:17:31] Pravo, pa ovo je moja JavaScript. Dakle, jQuery je samo lakše način pisanja JavaScript. Pa to, i što ću pokazati sljedeći put, će biti jQuery, identični. Dakle, oni će raditi iste stvari. Samo jQuery tendira da bude malo lakše. Ljudi imaju tendenciju da se sviđa više. Ona ima mnogo mogućnosti. Dakle, ljudi imaju tendenciju da koriste jQuery. Vi svi koriste jQuery u posljednjoj p-set. Pa što će to učiniti? Što će to tako JavaScript-- ovo je samo običan JavaScript. Što će to učiniti? Što će to učiniti? [01:18:03] Dakle prvo, vidite prozor onload. Pravo? Dakle, nismo vidjeli prije. Dakle, to će pričekati dok cijeli prozor opterećenja. Dakle, to će pričekati dok se ne HTML, sve slike opterećenja Prije nego što se bilo što. Tako recimo naše DOM učita. Sve je tu. Onda što će se dogoditi? Da? [01:18:19] Pojavljuje Button: publiku. [01:18:22] DAVIN: Gumb je već tamo. Da, tako je tipka već postoji. No, to će reći, OK, ako sam pritisnite gumb, tako da gumb je već Tu, kao što je to HTML oznaka. Čekaj, vratiti vrlo brzo. Ovaj tag pravo ovdje je će biti Gumb već. Već gumb. Ali onda, JavaScript tag, upravo ovdje, ona kaže, u redu, želim dobiti elementa po ID, tako da gumb za pretraživanje samo kaže, OK, ja želim mapirati tu varijablu u tom gumb. Tako da je varijabla je samo jednostavniji način za pristup taj gumb. A ja kažem, u redu, ako sam kliknite da gumb, tako da ako sam kliknite tu elementa, i to je element odnosi se na gumb, ako sam ga pritisnite, onda želim pozvati funkciju. Ovdje je jedan od onih koji anonimno Funkcije smo razgovarali o tome. [01:19:03] Samo nazvati neku funkciju. Unutar te funkcije, u osnovi nešto što smo vidjeli puno, upozorenje. Možete kliknuti na gumb traži. To će zapravo imati gumb. Možete ga pritisnite. Možete dobiti tu obavijest. X out. To je to. Da? [01:19:16] PUBLIKA: Dakle, ako ste stavili skripta [Nečujan], skripta oznaka u HTML? [01:19:21] DAVIN: Možete staviti skriptu tag ravno u glavu jer imate ovaj onload. To je također da imate klik. Dakle, to će pričekati dok se ne kliknete na nešto. Ali onload je samo da bude siguran, da bi je li sve opterećenja u HTML unaprijed. Da? Želite li nešto reći? [01:19:40] Gabe: [nečujan]. DAVIN: Da. [01:19:42] PUBLIKA: Pa onload izbjegava definiranje varijable gumb traži tako jednostavno govoreći document.getElementByID Gumb za pretraživanje dot [nečujan]. [01:19:49] DAVIN: Definitivno, ali onda Vaš string samo dobiva ogroman. Točno, tako da je ovo samo olakšavaju za vas, da. Da? [01:19:56] PUBLIKA: Gdje smo učinili stvoriti window.onload? Ili document.ready? [01:19:58] DAVIN: Da, tu je. Da, tu je, provjerio sam. [01:20:02] Gabe: Nije za njih stalo. [01:20:03] DAVIN: OK, pa ću da ti svejedno. Tako je u osnovi, samo u cjelini, pa window.onload čeka dok vaše DOM, sve Vaš HTML, opterećenja. On čeka do svoje slike opterećenja. Ona čeka dok sve opterećenja. document.ready, to je samo Čeka svoje DOM opterećenja. Nakon HTML je sve što postoji, odjednom Vaš DOM postoji, počinje prikazivati. To je jedina razlika. [01:20:23] Gabe: Brzo razum provjeriti ovdje. Dakle, to se može vidjeti vrsta kao linija koda, zar ne? Budući da je window.onload jednako hrpu stvari. Kad JavaScript čita ovo, istina ili netočno, funkcija dobiva pogubljen. False. OK? Što se događa ovdje, ste upravo prolazi Ova funkcija kao anonimni funkcija na window.onload. I onda kada se to događa zapravo se pogubili? Kada je prozor opterećenja. To je događaj. Dakle, to je jus t stvar smo Riječ je o ranije, zar ne? Dakle, kada se događaj dogodi, Funkcija događa. Ista stvar s onClick. [01:20:59] DAVIN: OK, tako da je netko uzeo daleko document.ready. No, to će biti točno same-- PUBLIKA: dolar znak, da je document.ready. To je prečica. [01:21:07] DAVIN: Oh, kako je? OK, pa to znači document.ready, prečac. No, to je isto kao window.onload osim za onu malu razliku Rekao sam o tome. I to je jQuery. Dakle, to je isti thing-- ovo JavaScript. To je just-- neki ljudi misle o tome što više lagani, gladak verzija da ima puno mogućnosti da vjerojatno ćete biti koristeći. Dakle, to radi točno istu stvar. [01:21:34] Dakle, stvari se nekako istaknuti. Tako se u drugom primjeru, mi imala document.getElementByID, tako da smo imali ovako dugo niz koji će doći Element by god ID ima. To je zamijenjen ovim pozivom ovdje. Tako ćete vidjeti znak za dolar, onda ćete vidjeti ponudu, hashtag. Hashtag je uvijek selektor. Ona kaže, u redu, to ima veze s osobnom iskaznicom. Što je selektor za klasu? [01:21:56] PUBLIKA: Dot. [01:21:57] DAVIN: Dot, zar ne. Ako ste samo ide odaberite oznaku, što je to? To je samo oznaka, točno. A ti bi mogao koristiti da ovdje, kao dobro. [01:22:05] Gabe: I po oznakama, mislimo kao div, na primjer, i glavu. [01:22:08] DAVIN: ili tijelo ili p ili tako nešto, da. Dakle ovdje, u redu, umjesto da kaže document.getElementByID, to je samo točno istu stvar. Samo u jQuery, to je kraći. Dakle, to je jednostavniji. Dakle, nema više onclick, samo kliknite. jQuery funkcija, nazivaju tu funkciju. Uzbuna je isti. Dakle, to je malo manji ili malo kraći, a malo bit-- ljudi misle to je malo lakše za napisati, malo lakše razumjeti. No, to je jQuery. Puno ljudi se malo malo zbunjeni i zabrinuti a oni misle, OK, jQuery razlikuje od JavaScript. Moram se sjetiti tih dvije različite stvari. To nije. Mislim, to je drugačija sintaksu. No, jQuery je JavaScript. To je samo naizgled Bolje verzija koja možda biti lakše razumijem da ljudi koriste. Gabe: Da, to se Iskreno, da je dolar znak da vidite u jQuery, to je samo naziv funkcije koje jQuery definira. To ne mora ništa posebno. Je li to samo ime funkcije, baš kao što bi mogao odrediti znak za dolar. [01:23:03] DAVIN: Da, tako je govorio o tome. Neke korisne stvari. Tražio sam vratiti na stare kvizova. U posljednjih nekoliko kvizova, oni ' morali koristiti stvari kao što je ovaj. Dakle document.ready, tako pobrinite se da je sve u učitan prije nego što počnete raditi neke stvari. Odaberite ID ili odaberite klase, što je upravo biti citat dot neke klase, End quote. Pošaljite, pa ako ste Slanjem obrasca i poziv Ova funkcija nakon obliku podnosi. Vrijednost, pa recimo da imam formu podnesak, poput korisničkog imena, e-mail, god. Imao sam tekstualni okvir. Dakle, ja sam tipkati u tom okvir za tekst. Pa, ako želite da biste dobili vrijednost iz tog teksta kutije, koristite dot Val. A onda, ovdje, dot HTML je ista je kao dokument točke getElementByID dot InnerHTML. Tako da će se vratiti što HTML s tim ID. Evo, samo koristiti neke ID ili bilo dot HTML. To ćete dobiti HTML iz tog elementa. Ako ste htjeli onda to promijeniti HTML, možete ga davati nešto. Tako da bih se kao dot HTML, a zatim unutra, citati, novi HTML ili nešto. [01:24:05] Gabe: OK, tako AJAX. Volim razumjeti AJAX jako dobro. Dakle, želim vam dečki na razumjeti AJAX jako dobro. Jer ako to ne učinite, ti si prilično ide razumjeti sve što ima veze s HTTP, PHP, JavaScript zbog svega toga dolazi zajedno u AJAX. AJAX nije jezik. AJAX je tehnika. I to koristi puno različitih alata. AJAX je kratica za asinkroni JavaScript XML. Dakle metoda, jezik, podaci. [01:24:36] Tako je glavni jezik koji se koristi u AJAX da se aktiviraju sve i da obrađuju sve kasnije je JavaScript. Zato što se odnosi vrlo blizu JavaScript. A onda je asinkroni jer mi se ne da raditi odjednom kad smo učitavanja stranice. To je ono što možemo činiti stvari vrsta paralelno. Osnovna ideja AJAX je da želite da bi dobili neke određene informacije. Na primjer, ako pišete novi korisničko ime kada se registrirate korisničko ime, moje korisničko ime je abc123. I onda, na kraju Oblik, morate kliknite Pošalji. I to je morao ići na poslužitelju, a zatim provjerite je li u bazi podataka, abc123 je već tamo. A ako je već tu, ona kaže, korisničko ime već u bazi podataka. I oni, morate ispuniti iz cijelog obrasca opet. A to je jako, jako loše. [01:25:23] I onda ljudi kažu, OK, zašto ne možemo jednostavno napraviti malu HTTP zahtjev da samo provjeriti vidjeti ako to korisnik u bazi podataka Prije korisnik morao dostaviti cjelokupnu formu? Tako na primjer, kada je Korisnik završi upišete abc123, neka je samo ići na server malo malo i samo se istina ili laž od poslužitelja da vidi ako to je valjan korisničko ime ili ne. U redu, tako da je jedan od glavnih koristi AJAX danas još uvijek. [01:25:49] DAVIN: Dakle vrlo brzo, u Ajax poziv u jQuery, što bi moglo značiti da vas želite da bude sinkroni. Vi ne bi trebali to učiniti. No, što se može učiniti. A ako je to učinio, što bi se dogodilo? Pa, na primjer, kada ste sve vijesti ili bilo što drugo, Vaš preglednik će pričekati dok to cijela poziv završi umjesto da ste vi drugima stvari odmah nakon što ga kliknete. [01:26:14] Gabe: Nije prolazi više. O moj Bože. Žao nam je! Yup. "U prošlosti, Klijent je potrebno da se zahtjev Cijeli sadržaj web stranice. " To je ono što sam rekao. To nam omogućuje slanje Dodatni GET ili POST Zahtjevi bez potrebe ponovno učitati naš preglednik. Dakle, na kraju dana, mi smo Zapravo se radi o HTTP zahtjeve Ovdje pomoću JavaScript. Jer prije, samo smo se JavaScript mijenjati HTML koji je već došao. A sada, možemo ga koristiti za sučelje s web poslužitelja te. Način se to dogodi je imamo klijenta. Davin je klijent. A on je sav JavaScript trčanje jer HTML je glupo. JavaScript je pametna. Dakle davin Davin je njegova pametna dio i njegov glupi dio. On će iskoristiti svoju pametnu dio sada. On će iskoristiti JavaScript to zahtjeva, na primjer, je li abc123 u baze podataka ili ne. [01:27:04] Dakle Davin, molim vas, vi samo pošaljite mi HTTP zahtjev. Hvala Vam. Dakle, on je samo poslao HTTP zahtjev. Vidiš da je? I to je upravo isti način da bilo HTTP zahtjev je poslan. Preglednik, Google Chrome ili nešto, je ide da se vidi da je Davin pokušavate poslati HTTP zahtjev, će vam pomoći hm malo. I to će ići sve do poslužitelja. Sada, poslužitelj će imati PHP ovdje, ili bilo koji drugi jezik. Baš kao u normalnom HTTP zahtjev. To je prilično normalno HTTP zahtjev. [01:27:31] A onda, poslužitelj će reći, u redu, Davin me želi provjeriti je li ovo abc123 je u bazi podataka. Idi razgovarati s modelom. Model kaže da nije. abc123 je dobro korisničko ime. A onda, web poslužitelj će koristiti PHP pružiti neki oblik datoteke. To bi moglo biti doslovno samo datoteke koji sadrži "da" u njemu, ili "ne, ili nešto slično. To bi mogao biti bilo datoteka. [01:27:54] To bi moglo biti kao što ću pošalji Davin sliku patke ako je u bazi podataka i poslati sliku hrčka Ako to nije u bazi podataka. To će biti neka vrsta glupo, ali to će raditi. U redu, tako da sam poslati patka Davin. Davin dobio patka. A sad, tko će rukovati patka? Davin je pametna dio opet, tako JavaScript, zar ne? JavaScript je poslao Zahtjev i JavaScript će primiti zahtjev i tumačiti ga u nekom obliku. [01:28:22] I u tom smislu, to će kažu, u redu, ako je patka onda sam dobro. Ako hrčak, onda idem reći, ne, korisničko ime već postoji u bazi podataka. Ali obično, nisi će poslati patka. Ti si idući u poslati nešto malo pametniji. I ono što mi koristimo je XML. I u novije vrijeme, mi koristimo JSON. JSON je samo JavaScript Objekt oznake, koje je u osnovi ste dobili Cijeli JavaScript objekt. A ti ga staviti u datoteku, baš kao i da CS50 objekt koji ti dečki vidjeli. Možete ga staviti u datoteku, a možete ga poslati preko Davin. [01:28:53] Dakle, u ovom slučaju, ja bih napraviti JavaScript objekt a samo reći, korisnički postoji, da. Ili korisnik ne postoji, nema. I poslati ga natrag na njega. A zašto JSON? Jer osoba tko prima je to će koristiti JavaScript rukovati odgovor. I JavaScript funkcionira tako dobro, jer to se zove JavaScript Object oznake. Pravo? Dakle, on je samo može nazvati funkciju i dobiti Ova lijepa objekt od odgovora. A onda, on će znati je li da je korisnik u bazi podataka ili ne. [01:29:22] Dakle vidite, sve to dolazi zajedno u web poslužitelja, a onda je jedan HTTP zahtjev i jedan HTTP odgovora i sve. Dakle, pobrinite se da dečki razumijem ovo AJAX poziva jer vam pomaže da razumijete sve od pojmova govorimo o tome. [01:29:37] Dakle, ovdje je primjer AJAX s jQuery. I ovdje, radimo s Get JSON. Dakle, mi ne pokušavamo dobiti slika mačke ovdje, ili patka. Pokušavamo dobiti JSON datoteku. A onda ćemo čekati do to je učinjeno, učinjeno točka. To znači da čekam odgovor. To bi moglo potrajati neko vrijeme. Onda, vidite malo opterećenje. Ako želite to učiniti u vaše web stranice. Dakle dot učinio, i što onda se događa kada se to radi? Možete proći anonimni funkcija, kao što smo vidjeli prije. Zbog učinio je događaj, baš kao što je klikom miša ili bilo što drugo, za jQuery. Tako ćete proći u ovoj funkciji podataka, teksta, status, i jqXHR. A u osnovi, to je samo su neke varijable koje možete koristiti kasnije imati status HTTP zahtjeva, Podaci koji se događa poslati natrag na vas. Pa onda možete kasnije ga tumače i učiniti nešto smisleno s njom. A ako to ne uspije, kad bi mogao to uspjeti? Pa, kad HTTP zahtjev daje ti 500 ili nešto slično. Zatim, to će vam reći status, kakav neuspjeh koji je, i svašta. Imate kako bi bili sigurni nositi oba slučaja, inače Program poludi. [01:30:42] DAVIN: Pa da, to je točno ono što je vidio na svom posljednjem p-set. Stvarni AJAX poziva u GET JSON. To je poziv. A onda, dot učinio je poput provjerava ako je uspješna. Ako je uspješno, što želite učiniti nešto s podacima. Možete se vratiti iz toga JSON zatražiti podatke. To je ono što ste dobili natrag. Dakle, ako se sjećate iz vašeg p-set, puno vas su kao nosač podataka i ili što god, dot link ili naslov. Što god se vraća iz tog JSON, bez obzira na polja u toj JSON objekt, to je ono što ste uzimajući natrag. Podaci se što ste uzimajući natrag. Status Tekst, samo nešto što omogućuje vam da znate što se dogodilo. A onda, jqXHR, to je samo jQuery XML HTTP zahtjev. To je samo kao objekt. A onda uspjeti, baš kao i Gabe rekao. Gabe: U našoj maloj primjer abc123 samo da provjerite je li da je u bazi podataka ili ne, podaci će biti nešto što će učiniti, ako se podaci dot korisničko ime postoji, što je ono što vaš PHP generirana za ti, ako se podaci dot korisničko ime postoji, onda Idem upozoriti, korisnik Naziv već postoji. Inače, ja samo ću pustiti Korisnik nastaviti ispunjavanjem obrasca. OK, sigurnost, super. [01:31:50] DAVIN: mi želite? [01:31:52] Gabe: Volim ovaj jedan. Dakle, nešto što izgleda poznato. Skoro smo gotovi. Dakle, ovo je samo primjer ti dečki vidio u razredu. Ti su pomoću ovdje argv1. To je kao argument komandne linije u. I mi smo mem kopiranja koja u puferu veličine 12. Što je ovdje problem? Buffer overflow! Budući da imamo tampon veličine 12. argv1 može imati veličinu od dvije milijarde eura. Mi ne radimo nikakvu granicu provjere. Tako smo mogli kopirati puno memorije. I mi ćemo biti osobito loše o tome. Ono što smo mogli učiniti da to Vrlo, vrlo znači u ovom slučaju? Da? PUBLIKA: Dio dvije milijarde stvari sadrži izvršni kôd koji vraća [Nečujan]. Gabe: Točno. Dakle, to je vrsta Ono što ljudi koriste jailbreak iPhone, npr. Dakle, takve stvari. Zato što jednostavno možete napraviti uređaj izvršiti bilo koji broj koji vam se sviđa. Popraviti, tako da je lako popraviti. Samo provjerite granica. Možete provjeriti null, jer uvijek provjerite null kad imamo posla sa žicama. A onda, što se Duljina niza prije. A ako je string Duljina je valjana string Duljina, koji je u 0 i 12, onda smo dobri. [01:33:03] DAVIN: Ako ne provjerava null, jako brzo, što će se dogoditi? To će SEG grešku. Zašto će to SEG kriv? Jer vi nazivate strlen na nulu. Gabe: Da. Istina ili laž, koristeći jedan Lozinka je dobra ideja. [01:33:19] PUBLIKA: False. [01:33:20] Gabe: False. Koristite mnogo lozinke i velike, duge one. Lokot ikona osigurala sigurnost. [01:33:26] PUBLIKA: False. [01:33:27] Gabe: False. To ne znači ništa. To je samo simbol. SSL štiti Čovjek u sredini napada. PUBLIKA: False. Gabe: False. U redu, tako da svi oni su lažne. Nice. [Nečujan] Želite li razgovarati o tome? Tvoj red. DAVIN: Vrste napada, čovjek u sredini. Što je čovjek u sredini napada? PUBLIKA: [nečujan]. DAVIN: Ako šaljete HTTP Zahtjev, mogli su to učiniti, zar ne? No, ako šaljete HTTPS, oni Vjerojatno neće biti u mogućnosti to učiniti. Postoji mnogo točaka uz vaše veze. Imate usmjerivača. Imate DNS poslužitelja. Ako je netko u mogućnosti da fizički vidjeti što šaljete, tako da je netko u stanju zapravo dobiti između vas, klijent i poslužitelj, te je moći vidjeti što šaljete, to je čovjek u sredini napada. Pa da vidimo što pokušavate dobiti od poslužitelja, ili je u stanju see-- gore, možda ćete moći vidjeti Cookies ili nešto slično. [01:34:16] Tako na primjer, ako da ne koristite SSL, on mogli vidjeti Vaše kolačiće. I to se zove sjednici otmice jer on vidi svoje osobne kolačiće, a onda je u stanju ići na to web stranice i pretvarati se da ste. Jer baš kao u PHP-u, sjećam kad smo prijavljeni, što nam je činiti? Postavili smo ID sesije jednak ID. Tako da vas identificira. To je razlog zašto možete vidjeti svoj portfelj a ne svi ostali portfelja. [01:34:38] Pa, ako sam u mogućnosti da biste dobili taj kolačić, onda ja mogu prijaviti na toj stranici. A onda, ja mogu samo vidjeti svoje stvari i početi kupnju i prodaju stvari. Dakle, to je sjednici otmice. Ali ti ne bi trebao biti u mogućnosti to-- pa vas možete koristiti čovjek u sredini napada čak i ako oni koriste SSL. Ali ti ne bi trebao biti u mogućnosti. Ako se koriste SSL, ne mogu oteti sjednici. Zašto? Jer to je sve šifrirano, zar ne? ako je kodiran, a ja sam još uvijek čovjek u srednje, ja još uvijek dobiti svoje podatke. To je u redu. No, to je šifriran. Pa ja stvarno ne mogu ga koristiti. Dakle, to je dva. [01:35:09] Jako brzo, Cross Site zahtjev za krivotvorenje. To je samo ako postoji veza i da je veza radi nešto da ne mislim da je to trebao učiniti. Tako na primjer, ako je veza bila će kupiti dionice ili prodati dionice, a nisu znali da je. Vi kliknuli na link, poslao zahtjev, kupio ili prodao nešto što što ne znači da radim. To je to. [01:35:25] Cross Site Scripting, pa evo, što prolazi kroz u promjenjivim q, umjesto da prolazi u nekakvoj vrijednosti, možda je q poput imena. Dakle, umjesto da prolazi q jednakima Davin ili nešto slično, Ako ne koristite HTML Posebne znakova, ako vas ne pobjegne to kako bi bili sigurni da je OK, onda sam mogao proći umjesto toga, recimo ovdje govorim print ili nešto slično, onda sam mogao proći u tu skriptu poziv. [01:35:51] Dakle, umjesto da Samo dobivanje varijable, Ja bih onda izvršiti ovu skriptu poziv. Dakle, u tom pismu nazvati, što učiniti? Dokument dot mjesto, koje će promijeniti položaj dokumenta. Tako ću preusmjeriti negdje drugdje. To se zove negativac u Ovaj primjer, vrlo dobar. Ne mogu se sjetiti riječi. A onda, što je još još gore je da idem tada postavili kolačić, što je neke varijabla imam na ovim stranicama. Ja ću postaviti je jednaka na dokument dot kolačić. Dakle, ja ću ukrasti vaš kolačić. I ja ću preusmjeriti neke informacije na web stranici da ne bi trebao biti pristup. I to sve se događa, jer si Ne bježeći što ste vidjeli. Da? [01:36:29] PUBLIKA: Dakle, samo da bi li to jasno, to je vulnerable.com da je osjetljiv na to. Tako da veza može se pojaviti na nekoj stranici. Netko klikne na njega, ide vulnerable.com. Imate kolačić vulnerable.com. Recimo Facebook ranjiva, pa facebook.com. Imate svoj Facebook kolačić. Što to radiš, ti si ide na facebook.com, odmah je preusmjeravanje da badguy.com, ali uključujući podatke kolačića. Tako da je brzo preusmjeravanje, ali vaš Facebook kolačić je uključen koje preusmjeravaju, a to je kako su [nečujan]. Gabe: Da, tu je neke vrlo ružno da se ljudi mogu učiniti ako je ovo. Na primjer, ako je dopuštena Prijava svatko bi promijenili svoje korisničko ime, a oni nisu učinili bilo razum provjere, tako da može umetnuti JavaScript stvar koja mijenja svoju sliku na hrčak. I to unosi istu JavaScript u svakoga tko pogleda svoju stranicu. Dakle, svatko tko pogleda svoju stranicu ima isto korisničko ime. I zato što je virus, ona širi eksponencijalno. DAVIN: Mi ćemo preskočiti zadnji jedan, a onda smo gotovi. Dakle, ovo je samo jedan primjer. Dakle, to je da oni nisu bježeći svoje SQL tablica. Dakle, možete ga ispustiti. Dakle, želite pobjeći stvari. To je bila prethodna primjer s Cross Site Scripting. Žao mi ran malo kasno. Sutra, ispričavam se! Sutra, imamo radno vrijeme. Tako radno vrijeme u Cabbot od 08:00 do 11:00. Radno vrijeme su isključivo za kviz pitanja.