[00:00:02] [Hudba hrať] HANNAH: Ahoj, všetci. Ďakujem vám chalani moc za coming out V nechutný počasia pre kvízu jeden preskúmať relácie. Ako vy viete, kvíz jeden je túto stredu. Takže sme ísť cez veľa tém. DAVIN: Ahoj, môžem povedať, niečo naozaj rýchlo? HANNAH: Jo, Davin deje povedať niečo naozaj rýchlo. DAVIN: Sorry. Len naozaj rýchlo, ak máte nejaké otázky o teste, môžete ísť online. Prejsť na 2014 kvíz jednu, o kvízu. Je to tu logistiku o kam sa obrátiť, keď ísť. Ak ste súčasne zapísal, že sme bude mať make-up kvíz v 5:30. Alebo keď mi poslal problém, Máte nejaký iný problém. Ale 5:30 je make-up Čas v stredu. Ale ak máte nejaké otázky, všeobecné otázky, on-line má všetky logistiku. Takže skontrolovať ako prvý. [00:00:47] HANNAH: Úžasné. Tak tu je veľký zoznam tém že budeme chodiť do dneška. Chystám sa pokryť všetky C veci, čo je to, že ako prvý stĺpec. Takže C veci, ktoré sme pokrytý po kvízu nula. Počnúc prepojeného zoznamu ktorá zahŕňa ukazovatele. [00:01:05] Dobre, takže sme videli tento pri poslednom prieskumnom pojednávaní, tak idem prejsť to je trochu rýchlejší. Stačí zdvihnúť ruku, ak chcete, aby som spomaliť alebo ďalej riešiť niečo. Ale my používame spojových zoznamov, pretože sme začali v C s poli. A polia sú skvelé, ale Problém je v tom, že majú pevnú veľkosť. Prepojené zoznamy nám umožňujú vytvárať dynamicky veľkosti dátových štruktúr. [00:01:28] A máme základné operácie, vkladať, odstraňovať, a vyhľadávanie. A čo môžeme urobiť vložku v najhoršom prípade konštantnej čas keď sme len dať to na samom začiatku. Zmazať a vyhľadávanie, najhoršie Prípad veľký oh n času. Takže znovu, len otočiť prostredníctvom týchto obrázkov, Viem, že sme videli tieto minule, ale my Chcete sledovať nášho prepojeného zoznamu Do sledovania vedúci nášho prepojeného zoznamu. Pretože vieme, že Každý jeden z našich uzlov sa len tak, aby ukazoval na ďalší uzol v našom prepojeného zoznamu. [00:01:58] Tak to je, ako sledovať. Aj keď sa nejedná o súvislé kusy pamäte, nájdeme je púhym po rôzne šípky. Tu je naša štruktúra pre prepojené zoznamu uzla. Videli sme túto poslednej doby. Máme struct uzol. A to má dve vlastnosti. Číslo jedna, aktuálny Hodnota chceme uložiť. V tomto prípade je to číslo. Mohlo by to byť reťazec, mohlo by to byť char, čo chcete. A potom, musíme sledovať ďalší uzol v našom prepojeného zoznamu. Takže to bude ukazovateľ na ďalší uzol. Ak ste sa práve robíte hľadať, ako som povedal predtým, budete musieť nasledovať svoje šípy dole. Vloženie by ste sledovať kde zvyšok vášho zoznamu je. A chcete presmerovať hlavu upozorniť na náš nový prvok, ktorý V tomto prípade je jeden, a potom jeden bude ukazovať ku zvyšku prepojeného zoznamu. Takže znovu, viem, že to je trochu bit na opakovanie z kvízu nula. Takže musíme byť veľmi opatrní o poradie, v ktorom sa robiť tieto pointings takže nie stratiť prehľad o zadnej časti zoznamu. OK, akékoľvek otázky sa len jednotlivo spojené zoznamy? Super, OK, v pohode. [00:03:06] Takže teraz, budeme chodiť na niečo len o niečo zložitejšie, dvojnásobne spojené zoznamy. Takže okrem udržiavania Trať ďalšie uzol, chceme tiež sledovať z predchádzajúceho uzla. A to nám umožňuje, keď sme v určitom okamihu v našom spojené zozname, nielen ísť dopredu, ale tiež opakovať dozadu. Vzhľadom k tomu, ako sme videli v jednotlivo spájať zoznam, Ak by sme boli v nejakom uzle, a naraz, sme sa rozhodli, v skutočnosti, ja chcem ísť do uzol vpravo predo mnou, budete musieť ísť všetci cesta späť do hlavy a iterovat, kým sa našiel uzol ste hľadali. [00:03:35] Tak to robí veci trochu jednoduchšie, že sme snaží sa opakovať prostredníctvom našej prepojeného zoznamu. Ale to si vyžaduje, aby sme sledovať jedného viac ukazovateľ, takže ešte jeden uzol hviezda. Dobre, tak tu je tá zábavná časť. Budeme trénovať vykonávacie odobrať pre dvojnásobne spojových zoznamov. Tak to je niečo, čo je úplne fér hra pre kvíz. Ukázalo sa, v minulosti vypočúva. Takže určite byť pripravený kódovať trochu v C. Nezabudnite, že so všetkými Táto zábavná PHP a JavaScript stále máme na pamäti k tomu C. Takže oprášiť, že ak máte pocit, hrdzavé. [00:04:12] Dobre, uvidíme, či to môžeme urobiť. OK, v pohode. Takže sme to skúsiť editovať priamo v tú, a dúfajme, že to pôjde tak, ako bolo plánované. Dobre, niekto chce, aby mi návrh, ako by som mal začať? Len predpoklad, že som Tvorba je, že som už sa štruktúra definovaná, jeden Ukázal som na poslednej stránke, Na poslednom snímke. A ja som uloženia hlavu môjho spojené Zoznam v niektorých ukazovateľ nazvaný zoznam. Má niekto chcel, aby som začal? [00:04:42] Divákov: môžete si vytvoriť nový uzol volať v zozname? [00:04:45] HANNAH: Super, tak budeme vytvárať nový uzol preliezť zoznamu. Páči sa mi to. Ja si len hovorím ukazovateľ, či je to v poriadku. A tam, kde by mala pôvodne začať? [00:04:57] Divákov: Pravdepodobne na hlava zoznamu. HANNAH: Beautiful. Chceme začať na čele, ktorý Povedal som sa bude uložený v zozname. Desivý. Zatiaľ je to dobré. A teraz, naším cieľom je, aby iterovat zoznamom kým nenájdeme uzol s Hodnota n, ktoré chceme odstrániť. OK? [00:05:13] Takže teraz je tá časť, kde chceme iterovat. Môže niekto navrhnúť spôsob, ako iterovat? [00:05:19] Divákov: slučka. [00:05:20] HANNAH: slučka. Páči sa mi to. Konkrétne môžeme skúsiť while. OK, a my vieme, že sme dosiahli koniec nášho zoznamu keď to, čo? Divákov: polohe ukazovateľa je null. HANNAH: Ak je ukazovateľ je null. Krásne, páči sa mi to. OK, v pohode. Je mi ľúto, či moja hraničný ortéza je druh pádu na obrazovke. Priviezli sme ho späť. OK, v pohode. Čo bude ďalej? [00:05:48] Takže vieme, chceme zmazať uzol, ktorý má hodnotu n. Takže poďme si o prípady, keď sme vlastne nájsť náš uzol. Tak ako by som skontrolovať, že? Ja by som len povedať, či ukazovateľ, a potom keď som Ak chcete získať hodnotu z ukazovateľa, Len som to šípka n, rovná n, parameter že sme dali na túto funkciu, uzol, ktorý chceme skutočne odstrániť. Akékoľvek otázky až do tu? Dobrá. OK, tak teraz poďme nakresliť rýchly obrázok na doske, aby si to predstaviť. [00:06:24] Tak povedzme, že tam je naša milá uzol. A to má hodnotu, budem len povedať štyri. A poukazuje na ďalší uzol v našom prepojeného zoznamu. A tam pred ním nič. Takže máme naše predchádzajúce smerujúce k ničomu. V tomto prípade musíme upozorniť dozadu. OK, len nastavenie my prepojeného zoznamu tady. A máme zoznam, ktorý ukazuje do tejto štruktúry začať. Budem čerpať ešte jeden pre úplnosť. OK. Budem bod v tomto smere. A ja budem upozorniť, že jeden späť. Jejda, prepáč. Jo, mám to späť. Urob to znova. OK, tam ideme. Dobre, to mám. OK, tu je náš obrázok. [00:07:21] OK, takže chceme, aby zvážila dva prípady. V prvom prípade je v prípade, že uzol chceme zmazať je na samom začiatku nášho zoznamu. A potom, druhý prípad, že chceme zvážiť, je, či je to niekde inde. Chápem, že to úplne chaotický kreslenie s celou svojou mazanie, ale dúfajme, že budeme snažiť aby to jasne s nejakým kódom. [00:07:40] OK, takže poďme sa vzťahovala na prípad kde sme našli naše uzol, a je to na veľmi začiatok nášho prepojeného zoznamu. Každý, kto mi návrh tu na to, čo By som mal urobiť, aby skutočne odstrániť náš uzol? Je to trochu zložitejšie. OK? [00:07:56] Divákov: Musíte vziať Uzol, ktorý by sa pred ním a urobiť z neho poukazujú na ten, ktorý by bol po nej, a mať uzol, ktorý by sa za ním a urobiť to poukazujú na uzle pred ním. HANNAH: Presne tak. OK, takže to je prípad where-- máme dva prípady. Máme prípad, kedy sa Uzol, ktorý hľadáme je popredný zoznamu. OK, a potom sa stáva, že vás opísal inak, že jo? Je to niekde inde v zozname. Takže ste povedal, musíme pozrite sa na uzle predchádzajúce, a urobiť predchádzajúci uzol poukazujú na ďalší uzol. Povedzme, že sme sa snaží uzavrieť päť v mojom veľmi chaotický kresby tu. Chceme, aby sa ubezpečil, že štyri teraz ukazuje na šesť. Štyri budúci poukazuje na šesť. A šesť predošlé ukazuje na štyri. To je náš cieľ, že? To je to, čo myslím, že by si len povedal, tamto. [00:08:56] OK, takže poďme ten prvý kúsok. Urobme majú predchádzajúci ukazovateľ predchádzajúca. Takže štyri budúci smerovať k čomu? Presne tak, v tomto prípade, šesť. Mali by sme teda povedať ukazovateľ, budúci. OK? Dobrá. Takže poďme sa zbaviť tohto škaredého obrázku a pokúsiť sa tomu trochu krajší jeden. Máme zoznam hlavu tu. A to ukazuje na prvý uzol v Naše spájať zoznam, ktorý sme si povedali, je štyri. Tu je náš druhý uzol, päť. A naše tretie uzol, šesť. Len sa snažím čerpať presne rovnaký obrázok, len trochu viac čisto. OK, takže štyri budúci pôvodne poukazuje na päť. Päť budúci poukazuje na šesť. Šesť je predchádzajúce body na päť. A päť predošlé ukazuje na štyri. Toľko krajší! OK, v pohode. [00:10:04] Takže teraz, čo sme robili práve tu, tento riadok kódu, ktorý hovorí, že ukazovateľ predchádzajúce ďalšie, tak čo to znamená? To znamená, že ak sa pozeráme na päť, prechod na predchádzajúcu uzla, a to je ďalší by teraz prejdite na päť rokov ďalej. Takže v podstate, čo to je robí sa, že to mazanie na túto šípku a robiť to preskočiť rovno cez päť. Je to jasné? Viem, že to môže byť trochu povrchné. Vidím nejaké hlavy prikývne. To je dobre. OK, v pohode. A teraz, čo je to ďalší krok? [00:10:39] Ja som resetovať ďalšie. Teraz, ktoré ďalšie šíp musím zmeniť? Tenhle tu. Šesť predchádzajúcom. Nechceme šesť predchádzajúcom poukázať na päť už nie. Chceme, aby to poukázať na štyri. Znamená to, že obraz zmysel? Takže teraz sa môžeme skutočne trvať päť out. Tak poďme ten kus. Čo by som mal urobiť, než som resetovať šesť rokov skôr štyri? Existujú nejaké nápady? [00:11:14] Divákov: Bezplatne uzol medzi je nastavením na null? HANNAH: cool. Rozhodne, náš koniec cieľom je Bude uvoľniť uzol. Takže, čo môžeme urobiť, že práve tu. Zadarmo ukazovateľ. Presne tak. Ale ešte pred tým, Poďme jen-- naším cieľom právo Tu je stanoviť ukazovateľ next predchádzajúca rovná ukazovateľ predchádzajúcej. Viem, že to je stále zakryté. OK, poďme take-- pohode. Môže každý vidieť tento výsledok? Alebo je to super malý? [00:11:50] Takže ako sme sa spustiť tento riadok tu, chceme aby sa ubezpečil, že ukazovateľ next nie je null. Pretože ak ukazovateľ next je null, aké chyby získam, keď sa snažím odkazovať nulový ukazovateľ? Divákov: Seg chyba. HANNAH: Porucha seg, prekrásna. OK, takže ak to nie je null, potom môžeme obnoviť. A máme šesť bod opäť na štyri. Otázky Až do tohto bodu? Ano? [00:12:17] Divákov: v prvom if, že nie znamená mať na šípku ďalšie, alebo [nepočuteľné]? HANNAH: Myslel som ukazovateľ šípky n. Takže v podstate, čo sa snažím robiť sa povedať, aktuálny uzol, že som iterácie cez, aktuálny uzol, ktorý Pozerám sa na, som ukladanie ukazovateľ. A ja chcem vedieť, ukazovateľ je hodnota, ktorá je v tomto prípade n. A ja chcem vidieť, je uzol sa pozerám pre uzol som, ktorých cieľom je odstrániť? Tak to je dôvod, prečo sme tu ukazovateľ n. [00:12:47] Divákov: Takže šípkou na n, nastavte hodnotu a uložiť ho do uzla s názvom n? [00:12:55] HANNAH: Takže je to ako keď som prechádza týmto spojené zoznamu a ukázal na päť. Ak chcem, aby si túto hodnotu, ak Chcem sa dostať, že číslo, 5, Musím urobiť smere šípky n. Pohode? Jo. [00:13:07] Divákov: n je názov premennej? HANNAH: Áno. Ak teda otočiť späť jeden šmykľavka, n je názov hodnoty vnútri uzol v našom prepojeného zoznamu. A ja viem, že to môže byť trochu trochu mätúce, pretože sme tiež volajú vec že chceme zmazať n. Tak to je ak je to jeden riadok pochádza. Jo? [00:13:27] Divákov: Čo máte [Nepočuteľné], ako fungujú? Ukazovateľ [nepočuteľné]? [00:13:35] HANNAH: Jasne. Hovoríte about--, ktorý riadok? Divákov: Posledné riadok [nepočuteľné]. [00:13:44] HANNAH: Jasne, OK. Takže poďme sa pozrieť na obrázok v Aby sa to snaží vysvetliť. Je mi ľúto, pre kamera, otázka bola môžeme vysvetliť ukazovateľ šípku ukazovateľ predchádzajúcej. OK, takže povedzme, že sme v päť a naším cieľom je odstrániť päť. Takže ukazovateľ ďalšie, ktoré z nich tri uzly to, že nám dá? To nás privádza k šiestej uzla, že jo? [00:14:10] OK, tak teraz žiadame za šesť rokov predchádzajúci. OK? A my sme to resetovanie byť rovný štyrom, čo sa stalo, že je päť predchádzajúcom. Ja viem, je to super ťažké sledovať. Naozaj odporúčam kresliť obrázky ak máte otázku, ako je tento. Ano? [00:14:30] Divákov: je dôvod, prečo nemáme [nepočuteľné]? [00:14:37] HANNAH: Presne tak. Otázkou teda je, prečo nebudeme musieť skontrolovať tu? Prečo musíme skontrolovať, či ukazovateľ predchádzajúcej nerovná null? A je to preto, že sme Už oddelí v prípade, kedy je ukazovateľ na samom začiatku. Veľmi dobrá otázka. Ešte niečo o tom? OK, v pohode. Tak poďme dokončiť to. Už sme skoro tam. [00:14:59] Čo na tom, že je v čele? Čo keď namiesto sa snaží odstrániť päť, sme vlastne chceli zmazať štyri? To, čo by som musel urobiť? No, chcem obnoviť hlavu s tým, čo? Shout to? Divákov: jeden po ňom. HANNAH: Beautiful. OK, tak chceme zoznamu, ktorý bude ukazovať aby bez ohľadu na našu ukazovateľ ďalšie uzol. Dobre. A len pre úplnosť rokov sake, že by sme chcú overiť, že tak dlho, ako nášho zoznamu nie je nulový, ak náš zoznam nie je prázdny, potom chceme nastaviť Naše predchádzajúce rovný null. Otázka tak ďaleko? Krôčik from--? [00:15:53] Divákov: by to bolo, keby Zoznam nie je rovné null? [00:15:55] HANNAH: Áno, máte úplnú pravdu. Je mi to veľmi ľúto. Je zoznam nie je rovné null. Desivý. Snažím sa, aby všetko na obrazovke to. Je to trochu spadne. Je nám ľúto, chlapci. A v neposlednom rade, všetky musíme urobiť, je návrat. OK. To bolo veľa preplnené v naozaj rýchlo. Potom sa chvíľku pozerať po všetkom. Povedz mi, ak máte nejaké otázky. Jo? [00:16:20] Divákov: Ak je zoznam je na hlava, then-- počkať, nevadí. [00:16:26] HANNAH: OK, dobre. Tak to je v prípade, zoznam je v čele, sme to odstrániť, aby čo sme vložený. Jo? [00:16:31] Divákov: Môžete mi vysvetliť, prvý, pokiaľ opäť tvrdenie? Ak je ukazovateľ na n sa rovná n? HANNAH: Jasne. Takže naším cieľom celej tejto funkcie je odstrániť uzol, ktorý má hodnotu n. Takže ak nájdeme, ako sme iterácie nášho zoznamu, uzol s hodnotou n, to je jeden chceme odstrániť. Takže všetky vymazanie sa deje Vnútri tohto veľkého if. Má to zmysel? Super. Jo? [00:16:59] Divákov: Možno, že si jednoducho nemôže vidieť to, ale nie je tiež potrebné čiaru Pre listovanie v zozname? HANNAH: Úžasné. Vráťme to sa trochu, a budeme hádzať toto právo na dne. Možno, že doska by si Bol o niečo lepší nápad. Tak ako by som posunúť ukazovateľ dopredu? [00:17:17] Divákov: Pointer rovná sa ukazovateľ plus jedna. [00:17:20] HANNAH: Beautiful. Tak, že nám umožňuje pokračovať iterácie. OK. Divákov: Nebolo by tam byť iný? HANNAH: Ešte raz? Divákov: Nebolo by existovať V opačnom prípade po veľký starý, ak vyhlásenie [nepočuteľné]? HANNAH: Ktorá časť? Je mi to ľúto. [00:17:38] Publikum: priechod, by nemali existovať iné? HANNAH: Je absolútne by mohla mať iný. Vzhľadom k tomu, že mám spiatočný právo tam, nepotrebujete k inému. Ale jo, je dobrá otázka. OK, áno? Divákov: Môžeme myslieť na ukazovatele ktorá sa pohybuje v zozname as ohľadom na hodnotu každého uzla v zozname? Alebo by sme mali myslieť na to, ako druh externého do zoznamu? [00:18:00] HANNAH: Buď jeden je v poriadku, myslím. Ako som si to predstaviť, je Ja hovorím, OK, ja som ukazovateľ. A to som ja. To je moja ruka. Budem poukázať na rôzne veci, ktoré chcem iterovat. Po prvé, ja idem na bod do čela zoznamu. A to ma Som hovorí bude poukázať na štyri. A tak mi, že vonkajšie do zoznamu, Môžem poukázať na každý z týchto prvkov. Takže myslím, že na seba ako ukazovateľ. Divákov: Takže keď zmažete jeden z týchto prvkov, odstrániť sami, aby som tak povedal. HANNAH: Presne tak. Takže ste odstrániť vec ste ukazuje. Tak v príklade sme videli, kde sme sa snaží odstrániť päť, keď som ukázal na päť, Chcem zmazať vec, ktorú som ukázal na. Presne tak. Ano? Divákov: Už máme postarané prípad, kedy n nie je v zozname? HANNAH: Ak je n nie je v zozname? Všetko, čo sa stane, je, že ste bude iterovat a ITERATE vďaka, a potom, budete sa dostať na ukazovateľ bytia NULL, a potom budete treba urobiť. [00:18:48] Divákov: Tak to máme vrátiť sa niečo? HANNAH: Mohli by sme. Spôsob, akým je touto funkcie, som len povedať, že sa vracia stratu bez ohľadu na to. Ale môžete mať niečo, čo ako vrátenie celé číslo, a mať to vrátiť negatívne 1, ak to zlyhá. Niečo na ten spôsob. Otázky with-- áno? Divákov: [nepočuteľné]? HANNAH: Sorry? Divákov: [nepočuteľné]? HANNAH: Jasne. Tak to je actual-- akonáhle máme urobil všetko táto práca sťahovanie všetky tieto šípky okolo, celá naša cieľom bolo zbaviť uzla že hľadáme. Takže v tomto prípade, uvoľnenie ukazovateľ, keď som ukázal na päť, Je to ako mazanie túto strednú uzol. To je zadarmo ukazovateľ časť. To zmysel? [00:19:29] Divákov: Takže aj myšlienka to nie [nepočuteľné]? [00:19:31] HANNAH: Takže sme predpokladali na začiatku sme mali nejaký zoznam, ktorý bol already-- dali dokopy. Takže za účelom vybudovania tohto zoznam Museli [nepočuteľné]. Super. Ešte niečo s tým? Ano? [00:19:46] Divákov: Čo keď zoznam nie je rovný null linku? [Nepočuteľné]? HANNAH: Tu? Divákov: Áno. HANNAH: OK, všetko, čo robím je, že som len uistiť že predtým, než som sa snaží zoznamu dereferencia, predtým, než som sa pokusu o prístup k predchádzajúcej, Chcem, aby sa ubezpečil, že to nie je null, takže nechápem poruchu seg. Super. [00:20:08] OK, viem, že to bolo dosť veľa prejsť. Takže to snímka bude vám k dispozícii. Takže sa môžete prejsť podrobnejšie. Ano? [00:20:17] Divákov: Prečo zoznam [nepočuteľné]? HANNAH: Jasne. Takže zoznam naozaj poukazuje na Tento prvok tu, prvý prvok v zozname. Takže to nemôže mať predchádzajúce. Ano? [00:20:31] Divákov: Má ukazovateľ bod na rovnakú adresu v pamäti? Má to poukazujú na rovnaký adresa v pamäti ako uzla že to ukazuje to? [00:20:40] HANNAH: Áno, body do tohto uzla v pamäti. [00:20:43] Publikum: Dobre, tak keď [nepočuteľné]? [00:20:47] HANNAH: V istom zmysle áno. OK. Dobre, poďme spolu s tým. A ak budete mať ďalšie otázky, držať okolo na konci, a môžeme prejsť znova. OK, v pohode. A teraz sa dostávame k ďalej hash tabuľky, sa snaží, a stromy, ktoré máš super oboznámení s v p-set päť, Kontrola pravopisu. [00:21:04] Takže hash table je len polia s jednotlivo spojových zoznamov alebo dvakrát spojený zoznamy odíde z toho. Takže máme nejakú asociatívneho poľa. A ako vieme, ktoré z nich pole lopaty sa dostať do, používame haš funkciu. Takže v tomto prípade, môže niekto Hádajte, čo hash funkcie by bol založený len na niektoré vstupu a výstupu? [00:21:31] Divákov: číslo písmeno v abecede. HANNAH: Presne tak. Proste je stavia v abecednom poradí. Všetko, čo sa začína Sa vloží do prvého segmentu. Všetko s B do druhý segment, tak ďalej a tak ďalej. Super, OK. A hašovacia funkcia je akýkoľvek funkcia, ktorá sa v slove a povie vám, čo vedro patrí do. Tak ktorý záznam v našej poľa patrí do. [00:21:55] Takže zakaždým, keď dávam hash funkciu slovo, mi to mal povedať to isté miesto zakaždým. Takže ak budeme používať funkciu hash z predchádzajúcej snímky kde sme triedenie podľa prvé písmeno abecedy, zakaždým, keď som sa dať my hash funkcia "jablko", to by mala dať vždy mi 0. Takže ak mám jablko aby v mojom hash tabuľky, ak dám "jablko", k môjmu hash funkcie, to mal povedať, ísť dať do vedra 0. Keď som hľadal jablko v mojom hash tabuľky a ja hovorím, kde sa môžu jablko live, môžete požiadať svojho hashovacie funkcie. A hovorí, choďte na lopaty 0. V poriadku? Otázky hash funkcie? Desivý. [00:22:34] Tu je trochu Podrobnejšie vysvetlenie o tom, čo funkcie hash by mohol vyzerať. Dobrá. Teraz, problém s hash Funkcia je v ideálnom svete, budeme mať len jeden vec v každom segmente. Ale v skutočnosti, tam je nie iba jedno slovo ktorý začína A. Tam nie je iba jedno slovo, ktoré začína s B. So V tomto prípade, ak je my Zrazu si "bobule" a my chceme, aby to do nášho hash tabuľky, a vidíme, oh, nie, banán je už tam, čo budeme robiť? [00:23:03] No, máme dve možnosti. Prvou možnosťou je lineárny sondovania, ktorý jednoducho znamená ísť nájsť ďalší prázdny vedro. Choďte nájsť ďalšie prázdnu položku poľa. A stačí dať "bobule" tam. Takže viem, že to má ísť s banánom v vedre jednom. Ale len dať do vedra tri, pretože vedra tri je prázdny. Ďalšou možnosťou je pravdepodobne to, čo sa rozhodnete v p-set, kde na vás mal samostatné reťazenie. Takže každý z vašich lopaty, Každý z vašich prvkov poľa, platí nielen jedno slovo, ale v skutočnosti má ukazovateľ na zoznam slov. Takže ak ste mali banán v hash tabuľke a zrazu chceli pridať Berry, žiadny problém. Stačí pridať bobule až do konca, alebo začiatok, svojho prepojeného zoznamu. OK, úžasné. Otázky hash stoly Než budeme pokračovať? [00:23:58] Dobrá. Stromy a pokusov. OK, takže to bola ďalšia možnosť pre vykonávanie slovník. Mohli ste urobili skúsiť. Takže je to zvláštny druh stromu, ktorý sa chová ako tabuľky hash multi-level. Takže uvidíte obrázok kde máte pole, ktoré poukazuje na veľa polí ktoré poukazujú na veľa polí ktoré poukazujú na veľa polí. A uvidíme, čo presne, že vyzerať ako na budúce snímke. A všeobecnejšie, strom je len nejaký dátová štruktúra v ktorom sú dáta usporiadané v určitej hierarchii. Takže tam, kde sme videli sme nejaký porozumenie na najvyššej úrovni, ďalšiu úroveň, ďalšiu úroveň, ďalšiu úroveň. Tak to je asi najjasnejšie s niektorými konkrétnymi príkladmi. Tak tu je náš strom. Môžete vidieť, že to má zvláštne úrovne že začneme s tým koreňový uzol, jeden. A môžeme ísť cez náš strom. [00:24:50] Binárny strom je konkrétny druh stromu. A jediný špecifikácia pre binárne strom je to, že každý uzol má najviac dvoma listami. Takže vy nebudete vidieť akýkoľvek na tieto uzly majú tri alebo štyri alebo nejaký iný počet listov. A potom ešte konkrétnejší je binárny vyhľadávací strom kde každý uzol vľavo uzol bude mať hodnotu menšiu. A každá hodnota právo bude väčší. Takže ak uvidíte 44 je v našom koreni, doľava, 11, 22, a 33 sú menšie ako naše root. A na pravej strane sú všetky Čísla bigger-- 66, 55, a 77. A táto vlastnosť platí na každej úrovni stromu. [00:25:37] Takže keď sme sa ísť do 22, 11, a 33, 11 stále je menšia ako 22, a 33 je väčší ako 22. A to uľahčuje vyhľadávanie pretože ak hľadáme čísla, Vieme presne, aké vetva nasledovať dole. Tak to vám mala pripomenúť Trochu binárneho vyhľadávania. Jo? [00:25:56] Divákov: Takže keď ste popisujúci binárne, ste hovoril, že má na väčšine dva listy? HANNAH: Mm-hm. Divákov: Mohlo by to mať menej? HANNAH: Jo. Tak povedzme, napríklad, že nemal párny počet vecí a vy ste nemohli vyplniť všetky vaše lístia, to je v poriadku, ak človek má. OK? Desivý. Akékoľvek ďalšie otázky na stromoch? OK. [00:26:16] Späť na našich pokusov, ako som hovoril o trochu skôr, Ako máme tieto matice multi-level. Takže v tomto prípade sme začať v hornej časti. A môžeme sledovať každé slovo dole. Povedzme, že sme chceli hľadať Turing. Začneme u T, nasledovať ho na maticu, ktorá obsahuje U, a po nej dole, až sme dosiahnuť tento malý trojuholník, ktorý nám hovorí, áno, ste našli slovo. Clear o pokusoch? Niečo sa tam ísť? Ano? Divákov: Má symbol delta musieť zaberajú miesto v rámci pokusu? HANNAH: Jo, tak to nie je nutne dokonca musí byť delta. Ale my potrebujeme nejaký spôsob, ako oznámiť naše computer-- ľúto, takže vieme, že TUR nie je ani slovo. Vzhľadom k tomu, povedzme, že sme nemali Táto predstava o delta, tento koncept gratulácie, ste našli slovo, to by prejsť a opakovať T-U-R, a potom hovoria, super, našiel som to! To musí byť slovo. Ale to naozaj nie je. Chceme, aby celý Turing byť slovo. Preto musíme mať niečo na Koniec, ktorý hovorí, gratulácie, ste našli legitímne slovo. Divákov: Takže ak ste mali páči 26 písmen v abecede, by ste skutočne 27 klávesov vo vašej skúsiť? [00:27:24] HANNAH: Super, jo. Takže vlastne si myslím, že bude na ďalšiu snímku. Ta-da! Kde máte uzol vo vašom pokus, ty si bude mať 27 detí miesto 26. Akékoľvek otázky s tým? Jo? Divákov: Prečo sa snažia zaujať tak, veľa priestoru [nepočuteľné] as you go? Prečo je to považované za [nepočuteľné]? HANNAH: Jasne. Poďme sa vrátiť. Otázkou je, prečo sú pokusy o toľko väčší než niečo ako tabuľky hash. Takže pre každý z týchto úrovní, aj keď sú tu nie sú vypracované, musíte mať všetkých 26 znakov. A dôvod, prečo nemôžete hovoria, oh, ale rovnako ako u Turing, I Nemusíte mať žiadne z tých, to isté na úrovni U. No, ak zrazu ste chceli pridať niečo, čo je ako T-H, si musíte mať schopnosť a dodal, že slovo. Takže pre každý list, budeš mať mať veľa poľa odíde z toho. Takže môžete vidieť, ako to by som si naozaj veľký, naozaj rýchlo. Nejaké ďalšie otázky? Dobrá. Jo? [00:28:29] Divákov: Ak sú pokúsi rýchlejšie ako hash tabuľky? [00:28:33] HANNAH: Ak sú pokúsi rýchlejšie ako hash tabuľky? Takže ak ste mali naozaj zlá funkcia hash. Tak povedzme, že som bol rád, tu je vaša hash funkcie. Bez ohľadu na to, čo slovo mi dáš, ja som vždy chystá dať v položke poľa 0. A tak sme nakoniec len s uvedením všetko v jednom veľkom dlho spojené zoznamu. A tak vyhľadávanie doba by sa v najhoršom prípade n, či je to na samom konci nášho zoznamu. S pokus, budeme musieť opakovať prostredníctvom písmen v slove. Takže aj keď sme pridali veľa viac slov na našom pokuse, to by nám to trvať dlhšie nájsť konkrétne slovo. [00:29:09] Všetko, čo musíte urobiť, je, pre Napríklad v tomto prípade, povedzme, že sme hľadali zoom, budeme musieť iterácii Z-O-O-M, štyri písmená. Tak to je presne Dĺžka slova zoomu. Nezáleží na tom, koľko viac slov dáme v tomto pokuse. Vždy môžeme získať V týchto štyroch krokoch. Desivý. Ano? [00:29:32] Divákov: Tak [nepočuteľné] je pole, nie? [00:29:34] HANNAH: Mm-hm. Divákov: Ak ste Hľadáte [nepočuteľné], budete musieť prejsť vaše pole nájsť [nepočuteľné]? HANNAH: Jasne. Divákov: Nie je to zaberie viac času? HANNAH: Keď budem povedať, že môj poľa je vždy Bude, B, C, D, E, F, G, bla bla bla, takže keď som vždy vedieť, že je to v rovnakom presnom poradí, keď som vždy vedieť, že je to v abecednom poradí, Môžem len povedať, O je číslo tak a tak v abecede. Stačí prejsť na toto miesto. Vzhľadom k tomu, pamätajte, s pole, môžeme pristupovať akýkoľvek prvok tohto poľa v konštantnej Doba ak budeme vedieť, kde sa pozeráme. Jo? [00:30:09] Divákov: Na predchádzajúce posuňte [nepočuteľné] 27, ale 26 pre prvú. [00:30:14] HANNAH: Sorry? [00:30:15] Divákov: Nie je prvá jeden 0, takže by to nemalo byť 26? [00:30:18] HANNAH: Jasne, takže keď hovoríme, 27, to je dám nám indexy 0 až 26 rokov. Ale ak ste skutočne počítať tie sa, že to bude 27. Dobrá otázka. Ešte niečo? Jo? [00:30:31] Divákov: Takže sa snažia pomalšie ako hash tabuľky? [00:30:34] HANNAH: Snaží sa bude v teória, rýchlejší ako hash tabuľky ale zaberajú viac pamäte. Jo? Divákov: [nepočuteľné]? [00:30:45] HANNAH: Ospravedlňujem sa, ja som ťa počuť. Divákov: [nepočuteľné]. 0-25 vám dáva 26. [00:30:54] HANNAH: 0-25 by vám 26, vpravo. [00:30:56] Divákov: A potom [nepočuteľné]. HANNAH: Right. Takže počet sme určujúci je počet vecí v našom poli. Takže ak budeme mať 27, je to dám nám 0 až 26, ktoré sa dá nám priestor pre, v tomto prípade, Nie som bez apostrof. Takže sme stále 0 až 25 ar prvých 26 písmen abecedy, alebo všetkých 26 písmen abecedy. A potom, že posledná vec, pri vstupe 26, je bude kontrola značka, alebo delta. Ešte niečo? Desivý. Lost My Space. OK, v pohode. [00:31:31] Tak sme sa už dotkli to. Ale veľký kompromis medzi pokusov a stoly mriežky je to, že sa snaží zabezpečiť, v Teória, konštantný vyhľadať Časy sa ale používajú veľa pamäte. Dobre, teraz máme trochu menej komplikované štruktúry, a budeme robiť s C, a my budeme pohybovať pozdĺž pravej. [00:31:49] Takže komíny, videl sme V prednáške, kde sa niečo ako stĺpec podložiek prípadne posledná vec, ktorú dal na zásobníku sa deje bude prvá vec, ktorú vzlietnuť. Tak to je to, čo sa skutočne definuje stoh je to posledná vec, ktorú dal na bude prvý vec, ktorú budete mať voľno. A terminológie, ktorý používame ak budeme dať niečo, ak budeme niečo pridať náš stack, hovoríme, že tlačí. A ak vezmeme niečo off, hovoríme, že praskanie. A ak budeme implementovať zásobník, my musia byť istí, že sledovať ako veľkosť a kapacita. Takže celkový počet prvkov môžeme držať a aktuálny počet prvkov že držíme. [00:32:27] A veľmi podobne, máme fronty. A jediný rozdiel je miesto s komínmi, sme si povedali, posledná vec, ktorú by sme dať na je prvá vec, ktorú sme sa vzlietnuť. Tak s front, Prvá vec, ktorú sme dali do bude Prvá vec, ktorú sme sa von. Tak to je ako keď ste skutočne čakajú, až v obchode a pre ktoré ste pomohol, potom prvý človek v rade by mal byť prvá osoba, ktorá má byť pomoženo. Tak to by bolo front. [00:32:52] Preto musíme sledovať veľkosť, kapacita, a hlava od tej doby sme bude trvať každého z prednej zoznamu namiesto chrbta. Otázky na to? Akékoľvek C otázky, ktoré sa vás trápi? Dátové štruktúry, nič z toho zábavné veci? Dobre, v pohode. Tak som to odovzdať ju Alison na skočiť do nejakej ďalšej programovania. [00:33:14] ALISON: Oh, uvidíme. Uvidíme, ako dobre, že som to tu. OK, budem sa snažiť a lietať prostredníctvom tejto veci, chlapci. Hannah išla veľmi v Hĺbka na všetky svoje veci. Budem sa snažiť, aby vám rýchly prehľad výbuch takže sa môžeme dostať do Davin so všetkými je zábavné JavaScript a bezpečnostné veci že možno ste vlastne Chcete počuť viac. [00:33:33] OK, ako povedal Hannah, ak Máte nejaké otázky, Ja idem moc rýchlo, prosím, dajte mi vedieť. Budem odpovedať na otázky podľa potreby. Takže na začiatku, budeme začínať Pravdepodobne jedna z prvých vecí, ste sa naučili s web programovanie, oprávnenie. Takže chmod, vy by ste boli majstri to so všetkými webu programovanie, že nemáš robí v poslednej dobe. Je to v podstate len povel ktorá mení oprávnenia alebo prístupové oprávnenia z našich objektov systému súborov. Samozrejme, aby skutočne pozri tie, ak ste mať žiadne problémy s týmito Počas vášho problému súpravy, možná použili ls -l, ktorá je dlhá, dostať druh pohľadu na takto, kde je skutočne vidieť všetky oprávnenia pre súbor. [00:34:16] A naozaj, my jednoducho ísť cez docela rýchlo len pekná veľa, čo každý z nich znamenajú. Preto sme d tu, čo len znamená adresár. Samozrejme tu vidíme rwx, ktorý je čitateľný, zapisovať a spustiteľný. Tie by mohli byť tiež reprezentovaný ako bitov, ktorý dostaneme do na ďalšej stránke. Takže každá trojica, ktoré sme videli tu, takže je to tri trojica. Máme rwx, r nič x a r Pre prvý súbor nič x. Je to všeobecná štruktúra. [00:34:49] Takže máme nejaký adresár. Máme nejakú skupinu užívateľov s týmito oprávneniami. Niektorí skupina, ktorá má tieto oprávnenia, a svet, ktorý má oprávnenie. Môžete si myslieť o nich ako trojica. Môžete si myslieť z nich ako tri bity. Takže môžu obsahovať hodnoty kdekoľvek od 0 nahor až 7, čo je dôvod, prečo sa niekedy sme mali robiť chmod 600 miesto chmod rw čokoľvek. Dostaneme na príklad tu. Ale v podstate, môžete si myslieť z nich buď ako práve rwx, alebo si môžete myslieť o nich ako o niektorých číslo, ak je to prvý, kto tu predstavuje číslo medzi 0 a 7, tento druhý predstavuje číslo medzi 0 a 7, a tretí predstavuje číslo medzi 0 a 7, OK? [00:35:38] r má hodnotu 4. w má hodnotu 2 a X má hodnotu 1, čo je dôvod, prečo to povolenie by tu byť chmod 700. Pretože v tomto prípade tu, to hovorí, že majú prvý bit je tu zapol. Takže máme 4 pre čítanie. Druhý bit je prevrátený na pre w, čo je o 2, takže teraz máme 6. A tretí bit je prevrátený na pre x, čo je 1, takže dostaneme sedem. A samozrejme, naša skupina a náš svet sú 0. Tak to je tiež ekvivalent chmod 700. A ja by som určite skúsiť porozumieť mapovanie medzi tými. Nie som si istý, či to má prísť na kvíz skôr, ale to by bolo otázka, ktorú som sa opýtať. [00:36:18] Len trochu ide, aj ďalej na tú chmod, tu je veľmi všeobecné štruktúra chmod hovoru. Tak samozrejme, sme chmod tu. Referencie, čo sa to týka, je kto sme dáva tieto oprávnenia alebo ktorí sme s ohľadom na tieto oprávnenie preč od. Takže máme tu v oprávnení, ako by sme dali vám chmod a Plus X, ako uvidíme čoskoro. jednoducho znamená, dať tieto špecifické oprávnenia pre každého. Dajte im všetkým. Takže by ste mohli veľmi dobre mať u Plus X alebo g a x alebo o a x alebo viac tejto zmluvy. Tak, že prvá časť je vždy Bude odkazy. Kto sme dáva táto oprávnenia, alebo ktorí sme im s od? [00:37:03] Druhým je operátor. Takže vy ste väčšinou riešia plus. To dáva oprávnenie ten, kto, že ich máte dávať, vzhľadom k tomu, mínus, logicky, odstráni ich. Takže nič moc tam strašné. A potom režimy je to, čo sme si rozprávali o s čítanie, písanie, alebo vykonávanie. Tak a x znamená dať spustiteľný oprávnenia pre každého. A potom, samozrejme, na ktorom konkrétny súbor alebo adresár. OK? Každý, kto to s chmod? Nie je to tak zlé? [00:37:37] OK, tak HTML, niekto z vás dosť starý to-- MySpace vek? Poslal som to do svojho oddielu, a doslova polovica ľudí Pozrel sa na mňa, ako by som bol blázon. A ja som bol rád, chlapci, nie sme tak starý. Poďte ďalej. Takže HyperText Markup Language, to je úprimne len spôsob, ako pre vás Pre zobrazenie určité veci na webe. Takže je to značkovací jazyk. Nie je to skriptovací jazyk. Neexistuje žiadna logika v ňom. Je to proste zmeniť Zobrazí sa cestou niečo. OK, tak to je dôležitý rozlíšenie robiť. Je to považované za značkovací jazyk, Nie je skriptovací jazyk. [00:38:12] Takže tu máme HTML tagy. Na tomto snímku je pravdepodobne najviac tie, ktoré by ste mali byť oboznámení s a naozaj dobre. Tak samozrejme, máme náš HTML tag, ktorý určuje, že všetko, čo v Medzi týmito dvoma bude HTML. Máme nejaký odkaz, ktorý samozrejme vám odkaz na externé webové stránky. Niektorí titul, v tú našu hlavu. A máme naše telo s h1, čo je lišta, tak to bude robiť to pekný a odvážny a väčšie. A potom, sme niektoré p, čo je bod. Pravdepodobne by ste mali vedieť a musí byť oboznámený s vecami ako ako vložiť obrázok, sú Existujú aj iné triedy hlavičky? Ja by som určite pohodlné s div. Takže tieto majú väčšinu značiek že by ste mali byť oboznámení. Ale samozrejme, ako so všetkým, čo SK 50, zoznam nie je vyčerpávajúci. Takže uistite sa, že oprášili to. [00:39:08] CSS, takže CSS, ak niekto z vás sledovať môj seminár z pred dvoma týždňami, je naozaj len cesta na štýl svoje webové stránky? OK, takže máme nejaké značkovací jazyk. HTML, ktorý sa stará o len textu a tam, kde by to mohlo byť na stránke. Ale CSS je naozaj to, čo robí to celkom. Tie by mohli mať tieto v HTML súbory, ale keď budeme hovoriť o neskôr, Som si istý, že by to mohlo byť ďalšiu snímku, to Je bežnou praxou, a v skutočnosti prax, ktorá naozaj povzbudiť, pre vás, aby im rozviedli, keď sme sa hovoriť o MVC a celej tej paradigmy. To je naozaj to, čo to kŕmi do. [00:39:42] Takže CSS je len spôsob, ako ako veci vyzerajú pekne. Veci, ktoré tu, podobne ako Telo a #title a .info, títo sú nazývaní selektorov a to, čo robia, je, že vybrať konkrétne veci v rámci súboru HTML a aplikovať bez ohľadu na štýl, bez ohľadu na druh vecí, ktoré chcete, k tomuto špecifickému prvku vo Vašom webovom strana. Takže tu máme farbu pozadia a farbu a rodina font, ktorý je bytia aplikovaný na to, čo je v tele. Takže ak sme sa pozreli späť, to by sa nemala vzťahovať na titul. To by sa vzťahovalo len na to, čo je V týchto telesných selektorov, OK? [00:40:22] S titulom tu, to je Bude to isté, farba textu sú modré sa deje len ovplyvniť to, čo je vo vnútri v názve voliča. Rovnako ako info tu Text bude ružová, bez ohľadu na to info, čo je tu. Takže jediná vec, ktorá by byť ružové na tejto stránke je dátum, pondelka 17.novembra 2014. OK, takže CSS je len spôsob, ako mať väčšiu kontrolu over-- áno? [00:40:48] Divákov: Prečo máte použiť hash s názvom? [00:40:51] HANNAH: Ďalšie snímku, sľubujem! Budeme sa tam dostať. Takže to je dôvod, prečo musíme použiť hash. Takže selektory vziať na troch hlavných formulárov, ktoré hovoríme s vami asi. Aj fyou sa chcete dozvedieť viac, je tu veľa vonku. Je tu skvelá CSS dokumentácie. K dispozícii je názov tagu, ktorý má čo do činenia len s normálnymi tagov v HTML. Takže h1, p, div, H2, tieto druhy vecí. A my môžeme len vymenovať tie, ktoré, ako je. Tak ako vidíme tu telo, to je normálne tag. Takže môžeme len dať telo, keď hovoríme v našom súbore CSS. [00:41:26] S titulom, jediný dôvod, prečo sme sa majú to hash je, že sme to, čo je považovaný ID. Preto by mala byť vždy číslo Unikátny priamo vo Vašom HTML stránky tak, že keď ste s odkazom na to, vy viem, že ste len na mysli na jednu konkrétnu vec. Takže v tomto prípade tu, s našou h1 tu, SK 50 revízie zasadnutí, máme id titulu. Tak, aby sa len odkazovať na to kus našej HTML, robíme titul hash. Len tým, že konvencie ID sú určené s hash pred nimi. Rovnakým spôsobom, vidíme info tu je trieda. A tak triedy s CSS je označený ako bodka trieda alebo dot čo to je trieda. Takže v tomto prípade tu, to je info. [00:42:10] Tak som si to späť. Obaja z nich by bolo ružová pre naše CSS tu preto, že obaja majú triedu info. A v našom súbore CSS, sme boli vymenovaní že všetko, čo sa triedou informácií musí byť ružové. Dáva to zmysel? Ano? [00:42:27] Divákov: Ak by ste mali urobiť všetko v tele bielej, a potom sa snažiť, aby niečo vnútri modrá, by to spôsobiť problémy? [00:42:34] HANNAH: Takže CSS je kaskádové štýly. Takže, čo je k Dno bude mať prednosť. Takže ak niečo urobiť s telom, a vy všetko biely, a potom neskôr zmeniť názov alebo zmeniť text v tele, prepíše to. Takže niečo k Dno bude mať prednosť. Ano? [00:42:56] Divákov: a IDS sú jedinečné, ale triedy môže byť? HANNAH: Right. Takže ID by mal byť jedinečný, a triedy môžu odkazujú na toľko vecí, ako by ste chceli. Nejaké ďalšie otázky? Áno. [00:43:09] Divákov: [nepočuteľné]. Zaujímalo by ma, či ktorý robí rozdiel. HANNAH: Je mi ľúto, aká bola otázka? Divákov: Tam je malý "F" a kapitál "F." HANNAH: Takže rozdiel medzi malým "f" a kapitálu "F" by nemal robiť rozdiel. Takže "f", bude 15 v oboch smeroch. Cool, niečo iné? Všetci dobre, CSS? Ano? [00:43:30] Divákov: Sorry. Môžete mať triedu a meno? [00:43:35] HANNAH: Áno, môžete. Veci môžu mať aj triedu a ID. A ja vrelo odporúčam testovať tieto na vlastnú päsť. CSS sa naučíte najlepšie práve tým, že niečo, veľmi jednoduché webové stránky, zostavovanie nejaké CSS, a len keď vidí, ako sú vzájomne prepojené. A budete získavať veľmi dobrý, intuitívne zmysel pre to, ako to funguje. [00:43:56] OK, všetci dobre s CSS? Vy všetci budeme robiť krásne webové stránky s CSS podnikom. OK, osvedčené postupy, len vecí, ktoré majte na pamäti, veci that-- to je dôvod, prečo sme sa zájsť ste pre návrhárov a ktovie čo ešte. Takže zatvorte všetky HTML tagy. Takže ak máte otvorenú korbou, by mal byť blízko tela. Ak máte otvorený bod, by mal byť blízky bod. Skontrolujte, či vaša strana potvrdzuje. Mali by ste byť veľmi dobre s týmto od p-set sedem s CS 50 financie s W3 validátoru. A ako som už povedal skôr, jeden z našich veľkých paradigiem oddeľuje svoj štýl s CSS od značkovanie, čo je HTML. A potom, samozrejme, máme Tento veľký XKCD tu dole. Hurá, komická! [00:44:38] OK, TCP / IP. Medzi tieto a HTTP, v podstate sú obaja protokoly. Takže si mohol myslieť z nich ako súbor pravidiel ktorými sa riadi, ako sa veci presunúť cez internet. Tak pre riadenie vysielania protokol, alebo internetový protokol, je len spôsob, ako zabezpečiť že údaje dostane tam, kde to ide a že vieme, že ak sme vôbec chýbajúce údaje. Takže ak vy myslíte, že späť na prednášku Pred pár týždňami sa David kde sme mali štyri obálky, boli sčítané ako jeden zo štyroch, dve zo štyroch, tri zo štyroch, štyri štyri, je to len súbor pravidiel. Povedali sme si, OK, kedykoľvek sme posielanie viac ako jeden paket, budeme počítať to s tým, čo číslo je a koľko celkom, ktorý užívateľ by mal dostať. [00:45:19] A to je práve ten, kto hovorí, prijíma dáta, či dostali všetko, alebo v prípade, niečo, čo sa stratila na ceste. A je potrebné požiadať o to znova. To je naozaj len súbor pravidiel. To je, ako si môžete myslieť na to, OK? A tiež, že určuje port, ktorý vy can-- viem počas prednášky, mali celý zoznam portov. Ale my nemáme je tu práve teraz. [00:45:41] Prenos protokolu tak, hypertext je, opäť, je to ďalší protokol. Takže to je ďalšia sada pravidiel ktorými sa riadi, v tomto prípade, ako je hypertext prenesený. Tak to proste umožňuje prehliadača hovoriť na webové servery. A ako sme povedali tu, je to ako ľudský nadviazanie spojenia. Je to len spôsob, ako vládnuť ako je webový server bude komunikovať s prehliadačom. A máme len pár príkladov. Máme niekoľko žiadostí tu kde GET je metóda. Máme HTTP 1.1, čo je protokol verzia pre nás. A potom, hosť, čo je to, čo sme vlastne sa snaží získať prístup. A potom, ako vidíte tu, my získať nejaké odpovede s týmto 200 OK ako naše kódom odozvy HTTP. Máme veľký zoznam idem vytiahnuť za jednu sekundu že vy by mali byť oboznámení s. A máme tento typ obsahu text / html, ktorý len hovorí, aký typ dát sme príjem zo servera, OK? Tento počítač a tento typ obsahu sú súčasťou HTTP hlavičiek. Môžete mať málo, alebo tak málo, ako nevyhnutné pre kontextu toho, čo máte čo do činenia s. Niekedy budete mať veľa Informácie prichádzajúce z vášho servera. Možno, že už žiada o veľa informácií od užívateľa. To sa líši v závislosti od kontextu. Pozriete Ak sa na CS 50 Study, je tu oveľa viac na to. Ale máme veľa dostať vďaka, takže idem ísť do toho, ak to je v poriadku s vami? Super. Vydrž. Určite sa, že Celý zoznam of-- jo! Neviem, prečo to je celú cestu sem. Myslel som, že som sa doslova presťahoval to, keď som bol sitting-- [00:47:15] DAVIN: Chcete ho naučiť? Alebo chceš, aby som to naučiť? [00:47:17] Divákov: Myslel som, že by sme mohli len ukázať im začať. Myslím, že môžete ísť do je ďalej, ale ja Myslel to dávalo väčší zmysel, pretože som práve hovoril o HTTP stavy. Tak tu je celý zoznam. Myslím, že to, čo sa bude diať so Davin sa chystá ísť do nich neskôr. Ale je tu celý zoznam, náhľad chuť prísť. OK, ideme na blow-- to bude byť PHP rýchlokurz ako žiadny iný. [00:47:41] Takže PHP, Hypertext Preprocessor, je to rekurzívny backronym, čo znamená, že bol pomenovaný niečo iné. A potom boli ako tento nie je naozaj zmysel. Takže len vymenoval to-- a to bola skratka, tak proste robil to PHP Hypertext Preprocessor, čo proste dáva zmysel. Fun príbeh. Je to programovací jazyk. Takže rovnako ako ja zdôraznil, že HTML nie je programovací jazyk, to je značkovací jazyk, PHP je programovací jazyk. Ako viete, je to pretože tam je logika. Existujú podmieňovací. Máme premenné, zatiaľ čo my nič z tých vecí v HTML. [00:48:12] Dobre, tak sme tento malý bit tu je to ako chuť PHP. Takže základy, názvy premenných začať s znak dolára. Veľa ľudí to páči. Pripomína nám peňazí. Je to skvelé. My všetci chceme PHP. Takže nebudeme špecifikovať Typ premennej ešte. Je určený v čase spustenia. Interpret bude vyzerať, oh, my si len prebehnúť, a podľa kontextu, Uvidíme, čo druhoch tieto premenné musia mať. Nie je hlavné funkcie. Veci sa proste utiecť. Vy ste s vaším dovozu do vašich posledná p-set, všimnete si to. Nebolo vlastne hlavné funkcie. Práve ste písal, že čo ste chceli aby sa stalo. A to tak nejako stalo. Tak to je PHP pre vás. [00:48:56] Polia sú veľmi podobné. Stále máme tento držiak. Tu máme nejakú premennú volal arr, a to je rovná to-- sú naše normálne držiak notácie. A máme nejaké hodnoty kľúča. A veľký rozdiel medzi C a PHP polia je to, že môžeme mať túto associate-- môžeme priradiť hodnoty kľúča. Takže namiesto toho len mať matice, ktorá je indexovaná podľa počtu alebo polohy tohto prvku v poli, skutočne môžeme spojiť ju s kľúčom. Tam, kde môžeme povedať, OK, chcem čokoľvek hodnota je spojená s ovocím. A možno máme ovocie išli na banáne. Tak to by som sa vrátiť banán k nám. [00:49:41] Ale v podstate, najviac mocná vec o tom je to, že ak vy spomenúť demo z prednášky, kde sme v podstate prerobil pravopisu v PHP, a to was-- vyhľadávanie bolo naozaj len rád, to kľúč existuje? To je naozaj trochu moc to. Nemusíte prechádzať prostredníctvom svojho poľa. Nemusíte vedieť aké miesto to je v. Mohlo by to byť na konci alebo na začiatku. Tak dlho, ako viete kľúč , Ktorá je spojená s hodnotou, PHP možno len pľuvať, že hodnota späť na vás, OK? [00:50:09] A potom, tiež len majú len preto, že sme môže mať kľúče a hodnoty, neznamená, že musíte. Môžete si tiež len vytvárať normálne polia ako tu, v spodnej časti, kde je to len jeden, dva, tri, štyri. To sú naše hodnoty. A v skutočnosti, ich kľúče sú indexy. Takže kľúč pre jeden by bol nulový. Kľúč pre dvoch by bol jeden. Tak ďalej a tak ďalej, až kým explicitne priradiť kľúč, by ste mohli predpokladať, že hodnota je len ich index. Znamená to, že zmysel pre každého? Žiadne otázky? Desivý. [00:50:38] OK, foreach je spôsob, ako iterovat svojich polí. Takže máme tu niečo, iba všeobecná štruktúra. Takže foreach, meno naše polia, ako je čokoľvek Ak chcete volať každý element v poli, a môžeme niečo urobiť s že prvok alebo sa tejto hodnote. Takže máme príklad tu. Máme asociatívne pole sa tieto dve položky s barom je spojená s foo a qux sú spojené s Baz. Takže kľúče sú foo a Baz. Hodnoty sú bar a qux. Takže foreach, máme ponuku Tu, ako páru kľúčov hodnoty. To nám umožňuje prístup k ako kľúč a hodnotu. Možno, že si len chcete hodnotu, v tomto prípade môžete jednoducho páči arr as $ hodnota, a potom vás práve prístup hodnotu ako ste iterovat. Ale možno, pre niektoré dôvod, chcete kľúč, čo je dôvod, prečo som si vybral tento príklad miesto. Takže si môžete skutočne manipulovať kľúč a hodnota v tomto prípade. OK? Otázka? [00:51:41] Divákov: Ak by ste chceli, aby len manipulovať kľúč, sa čo musíte urobiť, foreach-- [00:51:45] ALISON: Right. Takže ak ste chceli manipulovať len kľúč, budete ešte potrebovať syntax pretože ak ste práve majú arr ako niečo, ako jednu vec, je to bude Predpokladajme, že chcete hodnota, nie je kľúč. Takže ak ste niekedy stačí, rovnako ako arr as, možno to je ako $ prvok, to bude predpokladať, že sa pýtate len za hodnotu v každom bode. Ak výslovne chcete niečo urobiť s kľúčom, aj keď nebudeme urobiť niečo s hodnotou, budete potrebovať túto štruktúru že tu kam výslovne pýtal pre kľúč a hodnotou. Veľká otázka. Ešte niečo? Super. [00:52:27] Dobre, PHP a HTML. Oh, sme späť do p-znovu nastaviť sedem. Tak by to malo vyzerať trochu povedomý. Tak to je nejaký jednoduchý HTML formulár že má nejaké meno vstupu Hello. A vidíme, máme metódu GET. A keď si spomenieme z nášho p-set, pri odoslaní tohto formulára, odošle pole s názvom $ _GET, ktorý má všetky z týchto vstupov alebo premenných z forma, ktorá by mala byť manipulovať v našom PHP. Takže v tomto prípade užívateľ by sa dal v ich mene. Tvrdí to. A vidíme, že sme sa trochu polia tu. Máme GET poľa. A my sme prístup k názvu. [00:53:11] Tak, že hovorí :, OK, daj mi hodnota, ktorá je spojená s menom, názov je tu tlačidlo. A ktorá mapuje priamo k tomu, čo sme si povedali, náš vstup vymenuje. Tak to bolo, že vám kľúč k tomu, čo bude v poli tu. Znamená to, že zmysel pre každého? Ano? [00:53:32] Divákov: Má názov v GET sa vzťahujú s fialovým pruhom v [nepočuteľné]? [00:53:36] ALISON: Týka sa to tu. Takže toto pole tu, to sa odkazuje na toto meno tu. Tak toto by mohlo byť menovaný ako je telefónne číslo, alebo čokoľvek iného. Tento názov vlastne hovorí, čo voláš tejto oblasti? Ako sa chystáte odkazujú na tomto poli? A toto meno je vlastne rád, že sme riekol: Toto pole sa nazýva menom. To je, ako budeme pristupovať. [00:53:59] Divákov: Tak to je ,, Vstup názov rovná Bob, a- [00:54:02] ALISON: Dobre, potom by si Bob tam dole. Presne tak. Všetci v pohode? Dobre, tak sa proti POST, to sú dva hlavné spôsoby, že sme sa prejsť dáta v požiadavke HTTP. Mali by ste vidieť oboch týchto nádejí. Takže s GET, informácie prechádza URL. Takže ak ste niekedy robiť Google vyhľadávanie, YouTube, budete Pravdepodobne zaznamenáte otáznik. A potom všetky slová že stačí dať tam. A POST odovzdáva dáta v tele HTTP správy. Takže na rozdiel od GET, tak nejako do úvahy že údaje je skrytý od užívateľa. Ale čo je to vlastne dôležité pochopiť je to, že je to stále rovnako neistý ako GET. Analógia rád používam, ak je máte číslo svojho bankového účtu a ty to písať na vonkajšej strane obálka, to je celkom nebezpečné. Ak by ste mali písať na kus papier a dať ho do obálky, je to stále veľmi nebezpečné, pretože Jediné, čo musíte urobiť, je otvoriť, že až a pozrieť sa na skutočný obsah správy vidieť, že. Tak toto je "skrytý", a ľudia ako na si myslí, že je to bezpečné, ale je to naozaj nie je. A ja som si istý, že bude Davin dostať sa do toho viac, možno. Ale je to dôležité rozlíšenie, aby sa a niečo naozaj dobre rozumieť. [00:55:15] OK, SQL, Structured Query Language. Všetky veci, ktoré sme videli, tak v poslednej dobe! Takže je to v podstate len navrhol, Je zrejmé, že pre správu dát. Vy ste mal veľa skúseností s To tabuľkách s PHP MyAdmin. A tam sú štyri spoločné otázky že chceme vy vedieť. Takže tam je aktualizácia, vložka, vyberte, a odstrániť. Takže uistite sa, že viete, tie naozaj dobre. Chystáme sa ísť cez ne naozaj rýchlo. [00:55:40] Takže aktualizovať, naozaj, ako to, čo si možno myslíte, že áno, to práve aktualizuje dáta v databáze. Takže máme nejaký príklad tu. To je všeobecný Štruktúra aktualizačného dotazu. Tak sme aktualizáciu tabuľky že hovoríme o. A chceme nastaviť určitá hodnoty, niektoré stĺpce rovná konkrétne hodnoty. Tak to proste aktualizuje tabuľku, meniace sa hodnoty vo všetkých riadkoch v tomto prípade. Takže v tomto jednom tu, aktuálne príklad, máme insert-- ľúto. Tento snímok pokročilé Bezo mňa by si to uvedomovali. [00:56:17] Tak to aktualizácia tabuľky uvedenej col1 rovná na hodnota1 kde dom sa rovná "Jirchářích." Čo toto robí, je to len mení, ale iba aktualizuje tieto hodnoty v konkrétnych miestach. Takže v tomto prvom, zmení sa tieto Hodnoty pre všetko v tabuľke, OK? Bude to zmeniť stĺpec pre každú položku, pre každý riadok. Ale to, kde, mohol by si myslieť na to ako kvalifikácia. Takže je to len bude meniť je vo veľmi špecifických miestach. Takže v p-set sedem, keď vás Možno, že aktualizoval sumu v hotovosti že používateľ mal, pravdepodobne ste mal niektorí kde ID rovná ID relácie, nie? [00:56:53] Pretože ste nechceli zmeniť sumu v hotovosti pre každého, kto používal svoje webové stránky. Chcel ste to zmeniť na jeden konkrétna osoba, že osoba, ktorá je ten, kto bol jeho použitím v tej dobe. Je to tak? OK, takže vložka, vložka určité hodnoty do tabuľky. To je ako, keď ste vytvorenie úplne nového užívateľa. Všeobecná štruktúra tu ich vložiť do akéhokoľvek tabuľky hovoríme o. Hodnoty, sú hodnoty, ktoré vlastne chceme vložiť. OK, tak ako vidíme tu, my majú vložiť do tabuľky. To je zvláštne kolón ich zodpovedali hodnoty. Tak to hovorí, vložka nový riadok obsahujúci Hodnoty VAL1 a val2 pod tieto špecifické stĺpce. [00:57:33] Takže možno si len chcete vyplniť out polovica vecí v tejto rade. To je to, čo táto časť tu môžete robiť. To vám umožní skutočne určiť, ktorá časť. Ano? [00:57:44] Divákov: Môže si len [nepočuteľné] bunky v riadku [nepočuteľné]? [00:57:52] ALISON: Ak máte iba vyplniť niektoré časti vášho rade, zvyšok z týchto buniek sú iba prázdne. Ako dlho, ako ste im umožní byť prázdne, to nie je problém. Ak sa pokúsite o prístup k nim, to je chystá sa vrátiť trochu prázdny prvok. Je však dôležité vedieť, že v niektorých tabuľkách, Musí byť dovolené byť null. Možno ste naraziť na problém počas p-set pretože sme nemali dovoliť akýkoľvek o vaše hodnoty je null. Ale môžete zadať Voliteľná hodnota v tabuľke. [00:58:26] OK, vyberte, takže to je len spôsob, ako sa dostať konkrétne údaje z tabuľky na niektorí identifikátor, ktorý chcete. Takže vyberte hviezda z stola, kde col rovná sa niečo jednoducho znamená, daj mi všetky dáta súvisiace ak to konkrétny stĺpec je pravda. Takže hviezda v tomto prípade bude vrátiť celý riadok vám, OK? [00:58:49] A potom, v tomto prípade zvoľte hviezdu z Tabuľka práve vám dáva celú tabuľku. A potom, samozrejme odstrániť, to proste odstráni riadok z tabuľky. Takže odstrániť z tabuľky, bez ohľadu na stôl sme odkazovanie, kde niektoré konkrétne Identifikátor alebo nejaký podmienka splnená. Ano? [00:59:07] Divákov: Otázka. Prečo používate double citácie, a či robiť úvodzovky alebo single citácie, to robiť rozdiel? [00:59:13] ALISON: Úvodzovky alebo jednoduché úvodzovky nerobí rozdiel v SQL. Myslel som, že som videl inú otázku. Ano? [00:59:20] Divákov: Nemá to vplyv na to, čo dostane utiekol z dotazu? [00:59:25] ALISON: Rob? [00:59:27] ROB: Čo myslíš tým utiekol z dotazu? [00:59:31] Divákov: Ak má niekto jeden dotaz v tvare of-- [00:59:36] ROB: Ak niekto mal dal jeden citát v, potom tak dlho, ako ste dezinfekciu Váš vstup, potom na tom nezáleží. Ale ak používate jeden citovať, a tie sú nesprávne úteku svoje vstupy, potom áno, je potrebné, dať jednu ponuku, aby bola prerušená váš kód. Ak použijete úvodzovky, treba dať double citovať rozbiť váš kód. Ale tak dlho, ako uniknúť veci správne, na tom nezáleží. Je to len bude preložený na správny symbol tak ako tak. [00:59:59] Divákov: Čo útek znamená? ALISON: No, ako dezinfekciu a útek. Skúška, že máme, veľký XKCD komické, že sa vytiahnuť hore, kde máte oh-- ROB: Je to posledná snímka. ALISON: Je to posledná snímka, naozaj? Ach môj bože. Tam sme ísť, perfektné. OK, takže v podstate, možno podať niečo, čo do tejto SQL dotazu kde to zlomí vlastné meno kód, alebo ako David ukázal v triede, ak budeme mať nejaké single quote 1 rovná 1 a ak je v našom kóde, sme práve priamo kopírovať, že v, a máme koncovku jednu ponuku, čo sa stane, je, že sme si niektorí výraz, ktorý vyhodnotený ako pravda, že bude dovoliť, aby niekto vstúpiť do našej databáze a získať dáta, ktoré sme Nechceme, aby sa. Takže dezinfekcia vstupy jednoducho znamená uistiť že sú na úteku tieto znaky a ich určenia as znakov a nie veci že by malo byť povolené treba brať doslovne ako naše SQL. [01:01:04] Takže veľká vec, že ​​sme si povedali že vy by malo byť použitie boli špeciálne znaky HTML, čo je niečo, čo že možno budete chcieť, aby sa pozrieť na. OK, odstrániť. Typy dát, bude to všetko bude on-line. Vzhľadom k tomu, čo nám zostalo 15 minút som si jednoducho ísť priamo cez to. PHP a SQL, v podstate to je Len sme mali funkciu dotazu, ktorý pomohlo ochrániť pred tieto nebezpečné útoky. Takže vždy, keď použijete dotaz, sme sa uistite sa, že veci sa dezinfikujú a ktovie čo ešte. [01:01:36] MVC je len návrh paradigma, tak model, view, regulátor. Je to len spôsob, ako udržať veci pekné a rozišli rovnakým spôsobom že máme tendenciu faktor out kód do funkcií. To je len rámec web design ktorý vám umožní urobiť to isté. Budem preskočiť. [01:01:54] To je niečo, čo by bolo super pohodlný s. Je to veľký malý tam tabuľka. To vám dáva funkciu Príklad modelu. Ja som jednoducho ísť cez to, pretože som Naozaj chcem Davin, aby mohli porozprávať. Ak máte nejaké otázky, neváhajte. Budem tu po ňom. Stačí prísť so mnou hovoriť. S tým máme HTTP stavy. A Davin deje fúkať Tým za 15 minút. To bude skvelé. [01:02:17] DAVIN: OK. Uh, vaša mic? Jo. Prepáčte. ALISON: spôsob, ako byť pripravený. DAVIN: Nie, ja som pripravený. Som pripravený. Poďme to urobiť. Je to pripravený. OK. Prepáčte. Rozlial kávu som na seba. Neviem, či som viac naštvaný, že som vyzerať hlúpo, alebo že nemám kávu už. Mimochodom, len rýchly oznámenie o List chlapci majú. Takže tento list vy máte, nie je úradník, čo je na kvíz. Toto je oficiálne, čo je na kvíz. Tiež na internetových stránkach, povieme vy, OK, to bude na kvíz. Takže v malom ťahák máte, nie oficiálne. A tam sú chyby na ňom. Takže najlepšie nie len slepo používať. Tak jo, to je to. Takže poďme sa dostať do tohto naozaj rýchlo. [01:03:05] Takže HTTP stavy. Takže to, čo sa stane, keď webové stránky, je všetko v poriadku. Všetko je OK. Všetko, čo sa vráti do ste, ako chcete, aby to. Získate 200 OK. 301, kde sme videli, že pred 301? Počkaj, čo sa deje? Prepáčte. Videli sme aj plechovú prednášku pri zabezpečení. Takže pri zabezpečení, takže ak David napísal v http a potom sa pokúsil ísť do cs50.net, budete vidieť 301 presťahoval. Prečo? Vzhľadom k tomu, že to bude presmerovať automaticky do našej HTTPS. [01:03:35] Takže 301 pohyboval, len, že je to v podstate presmerovanie. A môžete premýšľať o tom takto. Jedno zo stavov, ktoré začínajú 2 rokov, tie sú ako, OK, všetko je OK. Jedno zo stavov, ktoré začínajú s 3, to sú presmerovanie. Stavy, ktoré začínajú s 4, to znamená tam je nejaký druh chyby klienta. Stavy, ktoré začínajú s 5, to je nejaký druh chyby servera. Takže tak nejako rozbiť stavy ako to. Takže 304 nie nemenia, tak vo vašom server.c p-súbory, takže povedzme, že naložený cat.html. Všetko sa vráti, dostanete 200S, OK, skvele. [01:04:03] Povedzme, že ste to aktualizovaná. No, vnútri ktorej cat.html, máte JPEG. No, že JPEG nie je dostane znovu zavedený. Vy nebudete písať ďalšie GET požiadavka na server, a potom sa všetky tieto informácie späť. Bude to len be--, že obraz je bude medzipamäte na vašom počítači. A tak, že obraz bude 304. Takže to nebola zmenená. Ak máte teda uzavrieť, clear cookies, a potom obnoviť a pokuse o načítanie tejto stránky znova, budete vidieť 200S. Nebudete vidieť, že 304. [01:04:28] 400, zlý požiadavku, real rýchly, ako keď sa chystá vyslať JSON objekt na server a vaše JSON objekt bol nesprávny, uvidíte niečo také. 403, zakázané. Kedy by ste vidieť zakázané? Pravdepodobne Pravdepodobne? Divákov: Chmod. DAVIN: Chmod, jo. Takže ste nenastavili oprávnenie správne. 404, nebol nájdený. Je to jednoducho nie je. Takže ak zadáte v zlom URL. 500, vnútorná chyba servera, server Pravdepodobne nebol správne nakonfigurovaný. Niečo nie je vo vašom konci, ale niečo na strane servera. A 503? Mnoho ľudí videli 503s v poslednom p-set. Kedy by sa to stalo? Počul som šepot. [01:05:05] Divákov: Keď Google rozhodne, že si robot. DAVIN: Jo, keď Google rozhodne ty si robot, dostanete 503s. Tak to je preťaženie. Ak ste požadovaný zo servera moc, to je zvyčajne dočasný. A väčšina z vás si to všimol. Takže ste videl 503. Možno ste si vziať trochu prestávka, potom 503s odišiel, a všetko bolo v poriadku. [01:05:20] Gabe: naozaj rýchlo, keď si chlapci dostať 500 v asi to posledné problém nastaviť? Ano? [01:05:27] Divákov: Zvyčajne v prípade, že server má súbor nemiestna alebo [nepočuteľné] ich Stroj [nepočuteľné]. [01:05:34] Gabe: Tak to by mohlo byť konfigurácia problém vo vašom PHP na vašom serveri. Ale môže to byť len niečo ako bodkočiarkou, že zabudol. Ak ste písanie PHP, niektoré nesprávne syntaxe mohol by vám niečo také. OK? [01:05:46] DAVIN: cool. Chceš, aby som urobil práve až do AJAX? [01:05:51] Gabe: [nepočuteľné]. DAVIN: OK. Takže to, čo je to DOM? Čo znamená DOM stáť? [01:05:55] Divákov: objektový model dokumentu. DAVIN: Nice. A prečo sa nám to páči? Desivý. Dobre, tak to nám práve umožňuje prístup HTML, prístup na naše stránky veľmi rýchlo. Prečo? Vzhľadom k tomu, že sme naše liečenie strana, zaobchádzaním s našimi HTML tagy, spracovanie všetko ako keď sú objekty. Keď sme k nim správať, ako by to objektov, potom to, čo môžeme robiť? No, môžeme volať funkcie na nich. A to je dôležité, prečo? No, pretože budeme používať JavaScript aktualizovať našu HTML, aktualizovať tieto objekty. Takže ak budeme s nimi zaobchádzať ako objekty, potom môžeme volať funkcie na nich. Chystám sa dostať do toho trochu viac, keď som sa ísť do JavaScriptu ale vy ste všetci videli ako document.getElementById. Takže dokument je váš element, získať element ID, takže budete vyzerať pre niektoré ID v tagu HTML. A potom, môžete to urobiť niečo iné, že. Napríklad, ako document.body, potom môžete pripojiť dieťa. Takže budete nájsť dokument. Máte dokument. Budeš nájsť telo. Našli ste telo. A potom, budete zavolať nejakú funkciu na to. Takže pripojiť dieťa, a vy môžete pripojiť niektoré HTML na konci vo vnútri vášho tela. Takže v podstate, si len brať to ako objekt. Ste spracovanie HTML Značky ako objekt. A to je veľmi ľahké a rýchlo ísť cez ne. Ale tiež vám umožní volať funkcie na ne takže si môžete manipulovať a zmeniť prvky. [01:07:04] Gabe: Vzhľadom k tomu, prečo je taký JavaScript pekný jazyk pre interakciu s HTML? Kurzy sú ľudia, ktorí boli výberu jazyk pre prehliadač, na strane klienta, JavaScript je naozaj pekné, je to naozaj dobrý v manipulácii s predmetmi. A objekty sú niečo ako objekty, ktoré sa objavujú v HTML, takže je to pre JavaScript veľmi ľahké k tomu, že druh manipulácie. DAVIN: Nice. Tak tu je to len príklad. Takže myslím, že na minuloročné kvíz, alebo možno pred dvoma rokmi, sme sa ťa požiadal o vytvorenie stromu. Tak to je presne to, čo by urobil. Takže si začať s dokumentom. A potom sa v podstate stačí sa pozrieť na tagy. Takže, keď sa pozriete, my začať s značky HTML. A potom, získate indície o tom, ako urobiť na základe zárezu. Takže vedúci druh pobočiek off. Vnútri hlavy, máme ďalšie tag pre titul. Takže, máme názov značky. A vo vnútri sa, že máme nejaký reťazec. A tak sme sa predstavujú reťazec v kruhu. A všetky tieto značky sú vo štvorcoch. [01:07:54] A keď sa pozriete, keby sme myslieť na to, ako strom, a povedzme, že HTML je rodič, potom hlava a telo sa bude súrodenci. Oni obaja bude deti týmto rodičom. Takže preto, že sú Obaja súrodenci, sú Bude trochu vedľa navzájom v našom modeli stromu. A potom, ste v podstate robiť presne to isté. Takže nie je ťažké, ale požiadali sme otázky, ako je táto, než sa na kvíz. Gabe: Má niekto máte otázky tak ďaleko? Je to dobré? DAVIN: cool. JavaScript OK, dobré veci. Tak JavaScript čo je JavaScript? No, JavaScript je-- to je komplikovaný, ale tie sú niektoré z vrcholov ktoré by ste mali mať na pamäti. Po prvé, je to voľne napísaný. Čo to znamená? PHP Takže was-- jo, čo sa deje? [01:08:35] Divákov: Nemáte explicitne stav, aký typ premennej to je. DAVIN: Perfect. Tak on hovoril, že nemusíte výslovne uviesť typ premennej. To je presne to pravé. Takže v C, keby som mal int i rovná 50, potom v PHP, je to proste takto, $ i, sa rovná 50. Potom v JavaScripte čo by volanie bolo? Var, že jo? Bolo by to, ako var i rovná 50. Ale nemusíte byť ako, OK, to je int. OK, to je reťazec. Nie je potrebné to urobiť. Je to interpretovaný jazyk. Čo to znamená? [01:09:04] Divákov: Nie zostavený. [01:09:06] DAVIN: Čo nie je skompilovaný znamená? Jo? [01:09:11] Divákov: Nemáte reštrukturalizovať kód aby si to pripravené pre počítač ho spustiť. Je to proste vziať v čase prevedenie a počítač [nepočuteľné]. DAVIN: Jo, tak to bude prechádzajú tlmočníka. Ale máš úplnú pravdu. Takže nikdy skompilovať, že jo? Keď ste robili vaše PHP a JavaScript kód, nikdy volal kompilácie. Nikdy volal niečo ako robiť alebo niečo podobné. Je to preto, že je to vykladané. Takže zakaždým, keď to ide cez prehliadač, to ide prostredníctvom tlmočníka. A to bude interpretovať práve v reálnom čase ihneď pre vás. Takže aké sú niektoré klady a zápory k mať interpretovaný jazyk a majúci kompilovaný jazyk? Takže compiling-- jo, čo sa deje? [01:09:50] Divákov: tlmočilo je pomalší. DAVIN: V akom zmysle? [01:09:57] Divákov: Až po vás kompilácie, nemáte robiť žiadne ďalšie kroky na vykonanie to, že tento [nepočuteľné]. [01:10:04] DAVIN: Right, perfektné. Takže to, čo ste povedal, je v podstate, že kompilácia, pri kompilácii, máte Veľa počiatočných nákladov, je to tak? Budeš ho kompilovať. Ale potom, čo ho skompilovať kompilátor to bude optimalizovať. Bude to byť rýchly. Bude to v podstate byť tak rýchlo, ako to môže byť. S nikdy tlmočenie, tie mať ten priame náklady. Skôr to bude o niečo pomalší zakaždým ho interpretovať. A vy budete musieť interpretovať to zakaždým. Takže namiesto toho, aby to raz náklady, teraz si bude musieť interpretovať zakaždým, keď sa stránka vykreslí. [01:10:29] Takže tlmočníci sú dobré, pretože nemusíte na kompilácii, ale sú zlé, že každý načítanie stránky, je to bude musieť interpretovať túto JavaScript. A to bude bežať o niečo pomalší ako keby ste boli na kompilácii. Umožňuje communicate-- oh, počkajte. Používa sa k manipulácii Obsah a vzhľad. Práve sme o tom hovorili. Používa DOM. AJAX, dostaneme do AJAX v trochu. A potom je to na strane klienta. PHP Takže je na strane servera. JavaScript je na strane klienta. Aké sú pozitívne na to? To hovorí, že je. Je to rýchlejšie, nie? Vzhľadom k tomu, že nemáte to-- je to rýchlejšie. Nemusíte komunikovať s iným zariadením. Ak ste práve na vašom Klient, že ste nikdy bude musieť ísť a vidieť, čo je na serveri a potom podať správu alebo niečo také. Tak na strane klienta má tendenciu byť trochu rýchlejší. [01:11:15] Gabe: Jo, ale to neznamená, že PHP je rýchlejšie než JavaScriptu alebo niečo podobného. Beží druh v rovnaký Rýchlosť preto, že sú obaja interpretované jazyky. Ide o to, že je pomalý Tu je požiadavka. Takže ste vlastne deje celú cestu do Brazílie získať nejaké informácie že tam žije. Ale PHP a JavaScript, oni druh bežať v rovnakej rýchlosti. To neznamená, že človek je rýchlejšie ako ostatní. To tiež, chyták tu. Takže JavaScript nikdy nestane strojový kód, pravda alebo lož? [01:11:47] Divákov: False. Gabe: False. Má sa stať stroj Kód pretože strojový kód je Jediné, čo stroj chápe. Aj keď to nie je zostavený, to ešte stane strojový kód pretože interpret je práve program, ktorý ide riadok po riadku a transformuje tento riadok do niečo, čo počítač rozumie. OK? Super. [01:12:08] DAVIN: Tu je len veľmi základné Hello world JavaScript. Tak neviem, if-- videli ste to. Ale stačí HTML tu. A namiesto toho, skutočne uvedenie JavaScript vo skriptu značky, takže by ste normálne dať do hlavy. Máte tagy skriptu. Tie umiestnite ho tam. Všetko, čo sme tu urobili je, že sme si spojený in-- takže sme spojené v súbore JavaScriptu takhle. A vy ste všetko urobil, že jo? Takže keď ste používali jQuery a underscore.js v poslednom p-set, nemáte tony kódu vzostupne v skript značky, a to až vo vašej hlave. Dalo by sa to urobiť, ale namiesto toho ste práve prepojenie ju. A tie jeho prepojenie v rovnako ako vy s CSS. Tak to proste uľahčuje čítanie tak váš kód nie je ako 1000 liniek dlho s hromadou funkcií, ktoré nemusíte používať. [01:12:52] Namiesto toho, stačí prepojiť ju. To compartmentalizes to. Je to ako písať nejaký hlavičkový súbor, a potom aj tento súbor hlavičky v C. Myslite na to, rovnako ako to. Takže čo to robí? No, to bude bežať. Bude to upozorniť. Takže vy budete trochu pop-up s názvom Hello World. Rýchla otázka, stačí si prečítať zdravý rozum, takže vidíte tu v tele, hovoria, telo, HTML tu. Čo je na prvom mieste? Musím vidieť telo, HTML tu, alebo to vidím ako prvý záznam? [01:13:19] Divákov: Alert. [01:13:20] DAVIN: Right. Hovorí, že v strehu. Prečo? [01:13:22] Divákov: Pretože ste ísť od zhora nadol. [01:13:24] DAVIN: Áno. Perfect. A tak hovorí, idete od zhora dno, čo je úplne správne. Budeš chodiť od zhora nadol. A v JavaScripte, jQuery, máte Funkcia, ktorá je ako onload, alebo pripravený, a ktorá hovorí, OK, počkajte, kým všetky tieto HTML bol načítaný. A potom, zavolajte JavaScript. Pretože nemáme, že tu, Úplne prvá vec, čo sa bude diať Je to pôjde od zhora nadol. Bude to hit, že JS hovoria, že to bude upozorniť. Potom kliknite na tlačidlo OK, upozorňujúce zmizne. Potom to bude ukázať vy telo HTML tu. Nice. [01:13:54] OK, tak len naozaj rýchlo, písanie v JavaScripte je super rýchly. Aby bolo možné vyhlásiť premenné, názov var. Takže v C, máte int i, máte deklarovať, aký druh typu to je. PHP, $. JavaScript var. Hovorili sme o tom. Dobre, poďme. [01:14:11] Slučky, to isté. Rovnaká vec. Deklarácia funkcie, tak rovnako ako ste videli v C. Jediná vec, iná je tak, keď sa dostanete do iných programovacích jazykov, ako keď budete mať 51 ďalší semester a robíte s OCaml, môžete riešiť anonymných funkcií. Tak to je presne to, čo ste tu. Takže vy chcete, aby v súčte, nejaký sumy. Ale môžete robiť iba to raz. Takže nechcete hovoriť funkcie suma, dať mu vyhlásenie o funkcie. Namiesto toho stačí použiť ako anonymné funkcie. A videli ste to veľa. Uvidíte príklad to za pár záberov. Jo, uvidíme. Gabe: Dobrá otázka. Ak budete chcieť používať anonymný funkcie tu? V podstate, keď chcete niečo, ako udalosti, aby sa stalo. Takže keď je myš klikol, napríklad, Chcete nejaká funkcia sa nazýva. Takže sa prechádza na akciu psovod, predáte k udalosti, druh, funkcia, ktorá Ak chcete byť nazývaný. A čo vy absolvovaní je ako na konci dňa, len ukazovateľ na že inštrukcie, funkciu. Takže to nie je ako ste absolvovaní celý kód, rovnako ako ukazovateľ na funkciu. A potom, keď niekto klikne myš, potom je funkcia volaná. [01:15:17] Davin: Pole, takže si majú vyhlásenie na pole. Potom, pole dať veci do. Reality, rýchly, čo sa to tlačiť? Aký bude tretí element byť? [01:15:31] Divákov: "JS". [01:15:32] DAVIN: Dobre, to by bolo "JS". Počkajte, vrátiť. Aká je dĺžka? [01:15:37] Divákov: Three. DAVIN: Tri, že jo? Presne to, čo si myslíte. OK, teraz ísť. Pole, môžete pridať, čo k nim. Takže sa môžete ísť nad rámec ich počiatočné odhady. Proste niečo, čo by ste mali mať na pamäti. PHP, JavaScript, sú trochu trochu zhovievavejší, pokiaľ ide o veci takhle. Objekty, veľmi podobne ako structs v C, moc ako asociatívne pole v PHP. Všetci ste mali skúsenosti s týmto. Takže JSON, keď ste prechádzajúcej JSON tam a späť v p-set osem, to je váš objekt. [01:16:03] Tak jo, príklad, naozaj rýchlo príkladom. Tu je objekt. Tak, ako si to odkaz objekt, tak len naozaj rýchlo, povedzme, že som chcel nájsť out, OK, aký je kurz? A tak názov objektu je tu CS50. A potom keď som mal asociatívne pole, ako by som to robil? Budem pomocou kľúča, nie? Tak som sa názov poľa. Mám držiak, citácie, kľúče, Koniec citácie, koniec konzola, a že sa bude odkazovať, že element vo vnútri mojej asociatívne pole. Ako odvoláva Samozrejme, v mojom predmete? Vie niekto? [01:16:39] Divákov: [nepočuteľné]. [01:16:40] DAVIN: Čo sa deje? Divákov: CS50.course. DAVIN: Dobre, jo. Tak CS50.course. Takže ako odkazovať veci vnútri objektu JSON je s bodkou. [01:16:48] Divákov: Môžete tiež použiť syntax poľa. [01:16:53] DAVIN: OK, v poriadku. [01:16:54] Gabe: Môžete tiež použiť CS50 držiak, reťazec, ako úvodzovkách. Divákov: Myslím, že je totožný s PHP. Gabe: Je to to isté. DAVIN: Fine! Ale uvidíte tento iné miesta. Jo, tak ďalej. To je to, čo som práve povedal. Tak na príklad JavaScript jQuery. Tak toto je môj DOM, že jo? Naozaj rýchlo, takže mám hlava, ahoj svet, telo. Mám tlačidla. To hovorí, že "tlačiť ma," tak chcem, aby to tlačiť. A ja chcem robiť niečo keď je to klikli. Hneď vedľa. [01:17:31] Dobre, takže toto je moja JavaScript. Takže jQuery je proste jednoduchšie spôsob, ako písať JavaScript. Tak toto, a to, čo budem ukázať nabudúce, bude jQuery, sú identické. A tak sa budú robiť rovnaké veci. Len jQuery má tendenciu byť o niečo jednoduchšie. Ľudia majú tendenciu to páči viac. To má mnoho funkcií. Takže ľudia majú tendenciu používať jQuery. Tie všetky použité jQuery v poslednom p-set. Čo bude robiť? Čo to bude JavaScript-- tak To je proste JavaScript. Čo to bude robiť? Čo to bude robiť? [01:18:03] Takže najprv, uvidíte okno onload. Je to tak? Takže sme nevideli, že pred. Tak to sa bude čakať do celého okna zaťaženia. Takže to bude čakať, až HTML, všetky zábery load pred tým, než nič nerobí. Povedzme, že náš DOM bol načítaný. Všetko je tam. Potom, čo sa bude diať? Jo? [01:18:19] Divákov: Zobrazí sa Button. [01:18:22] DAVIN: Tlačidlo je už tam. Jo, takže tlačidlo už je tam. Ale to je povie, OK, keď som kliknite na tlačidlo, takže tlačidlo je už tam, ako ten kódu HTML. Počkajte, vráťte sa naozaj rýchlo. Táto značka právo tu je bude tlačidlo už. Je tu už tlačidlo. Ale potom, JavaScript tag, tu, hovorí, OK, ja chcem aby sa element podľa ID, takže tlačidlo hľadať len hovorí, OK, ja chcem zmapovať túto premennú na toto tlačidlo. Tak, že premenná je práve jednoduchší spôsob, ako získať prístup na toto tlačidlo. A ja hovorím, OK, keď som kliknite na tlačidlo, ktoré tlačidlo, takže keď som kliknite na tento prvok, a tento prvok sa týka tlačidlo, keď som na neho, potom chcem, aby volanie funkcie. Tu je jeden z tých, ktoré anonymný funkcie sme hovorili o. [01:19:03] Stačí zavolať nejakú funkciu. Vnútri tejto funkcie, v podstate niečo, čo sme videli veľa, upozornenia. Kliknite na tlačidlo Hľadať. Bude to v podstate majú tlačidlo. Môžete na neho kliknite. Dostanete tú upozornenia. X von. To je všetko. Jo? [01:19:16] Divákov: Takže ak dáte skript [Nepočuteľné], script tag v HTML? [01:19:21] DAVIN: môžete umiestniť skript tag priamo do hlavy preto, že máte tento onload. Je to tiež, že máte cvaknutie. Takže to bude čakať, až kliknete na niečo. Ale onload je len pre istotu, aby sa istí, že všetko načíta do kódu HTML vopred. Jo? Chcete niečo povedať? [01:19:40] Gabe: [nepočuteľné]. DAVIN: Jo. [01:19:42] Divákov: Tak onLoad vyhýba definovanie tlačidla variabilný vyhľadávania by len hovorím document.getElementById Hľadanie tlačidlo dot [nepočuteľné]. [01:19:49] DAVIN: Určite, ale potom Váš string len dostane obrovský. Presne tak, je to len preto, aby aby to pre vás jednoduchšie, jo. Ano? [01:19:56] Divákov: Kde sme vytvoriť window.onload? Alebo document.ready? [01:19:58] DAVIN: Áno, je. Áno, tam je, som skontroloval. [01:20:02] Gabe: Nie je pre nich záleží. [01:20:03] DAVIN: OK, tak idem ti to povedať aj tak. Takže v podstate, len všeobecne, tak window.onload čaká, kým vaša DOM, všetko Váš HTML, zaťaženie. Čaká, až vaše snímky zaťaženie. Čaká, až všetko so záťažou. document.ready, to proste čaká, až vaše DOM zaťaženie. Akonáhle HTML je tam všetko, akonáhle Váš DOM tam je, sa spustí. To je jediný rozdiel. [01:20:23] Gabe: pozrite sa sem Quick zdravý rozum. Tak to môže byť videný druh ako riadok kódu, nie? Vzhľadom k tomu, že je to window.onload rovná veľa vecí. Keď číta JavaScript to, pravda, alebo false, funkcia dostane popravený. False. OK? Čo sa tu deje, ste práve prechádzajúcej táto funkcia ako anonymné funkcie na window.onload. A potom, keď sa darí skutočne vykonaný? Keď sa okno načíta. To je udalosť. Tak to je jus t vec, ktorú sme hovorí o tom skôr, nie? Takže keď k udalosti dôjde, funkcia sa stane. To isté sa onclick. [01:20:59] DAVIN: OK, tak niekto vzal od document.ready. Ale to bude presný same-- Divákov: znak dolára, že je document.ready. To je skratka. [01:21:07] DAVIN: Oh, to je? OK, tak to znamená document.ready, skratka. Ale to je rovnaké ako window.onload s výnimkou, že malým rozdielom Hovorila som ti o. A to je jQuery. Tak to je presne rovnaký thing-- je to JavaScript. To je jen-- niektorí ľudia si myslia o tom ako viac nízkej hmotnosti, elegantné prevedenie že má veľa funkcií že budete pravdepodobne používať. Tak to robí presne to isté. [01:21:34] Takže, čo sa trochu poukázať. Takže v druhom príklade sme mal document.getElementById, takže sme mali tak dlho reťazec, ktorý sa dostane element by bez ohľadu na číslo má. To je nahradené tejto výzve tu. Takže vidíte, znak dolára, potom vidíte cenovú ponuku, hashtag. Hashtag je vždy volič. Hovorí, OK, to má čo do činenia s ID. Čo je prepínač pre triedu? [01:21:56] Divákov: Dot. [01:21:57] DAVIN: Dot, vpravo. Ak ste len tak vyberte tag, čo je to? Je to len značka, presne tak. A môžete použiť, že tu, rovnako. [01:22:05] Gabe: A podľa značiek, máme na mysli ako div, napríklad, alebo hlavy. [01:22:08] DAVIN: Or orgán alebo p alebo niečo také, jo. Tak tu, OK, namiesto toho, hovorí document.getElementById, To je práve presne to isté. Len v jQuery, je to kratšie. Takže je to jednoduchšie. Takže, nič viac onclick, stačí kliknúť. funkcie jQuery, volanie tejto funkcie. Alert je presne rovnaký. Takže je to trochu menšie, alebo trochu kratšie, trochu bit-- ľudí si myslí, je to trochu jednoduchšie vypísať, trochu zrozumiteľnejšie. Ale to je jQuery. Mnoho ľudí si trochu trochu zmätená a strach a myslí si, OK, jQuery je iný ako JavaScript. Musím si pamätať tieto dve rôzne veci. To nie. Myslím, že je to iný syntax. Ale jQuery je JavaScript. Je to len zdanlivo lepšia verzia, by mohlo byť jednoduchšie pochopiť, že ľudia používajú. Gabe: Jo, bude Úprimne povedané, že znak dolára ktoré vidíte v jQuery, že je to len názov funkcie, ktorá definuje jQuery. To nemá nič zvláštneho. Je to len názov funkcie, rovnako ako vy mohli definovať znak dolára. [01:23:03] DAVIN: Jo, hovoril o tom. Niektoré užitočné veci. Díval som sa späť na staré kvízy. V posledných pár kvízov, že som museli použiť veci, ako je toto. Tak document.ready, tak uistite sa, že je všetko načítaný skôr, než začnete robiť veci. Vyberte ID, alebo vyberte triedy, bolo by to len byť citát dot nejaké triedy, koniec citácie. Odoslať, takže ak ste odoslať formulár a volanie Táto funkcia po formulára tvrdí. Value, takže povedzme, že som mal formu podanie, ako užívateľské meno, e-mail, čokoľvek. Mal som textové pole. Takže som písať do tej textového poľa. No, ak chcete získať hodnotu z tohto textového poľa, môžete použiť dot val. A potom, tu dole, bodka HTML je rovnaký je ako dokument bodka getElementById dot innerHTML. Takže, čo sa deje na návrat tie HTML z tohto ID. Tu stačí použiť niektorý ID alebo čokoľvek bodka HTML. To bude ten HTML z tohto prvku. Ak by ste chceli, aby potom zmeniť HTML, môžete odovzdať niečo. Takže by ste byť ako bodka HTML, a potom sa dovnútra, citácie, nové HTML alebo tak niečo. [01:24:05] Gabe: OK, tak AJAX. Moc sa mi páči pochopiť AJAX naozaj dobre. Takže chcem vás chalani porozumieť AJAX naozaj dobre. Pretože ak áno, budete do značnej miery deja pochopiť všetko, čo má čo do činenia s HTTP, PHP, JavaScript pretože to všetko prichádza spolu v AJAX. AJAX nie je jazyk. AJAX je technika. A používa mnoho rôznych nástrojov. AJAX znamená asynchrónne JavaScript XML. Takže spôsob, jazyk, dáta. [01:24:36] Takže hlavný jazyk, ktorý používame v AJAX spustiť všetko a zvládnuť všetko neskôr je JavaScript. To je dôvod, prečo sa týka veľmi blízko JavaScript. A potom je asynchrónny preto, že to nerobia naraz, keď sme načítania stránky. To je vec, ktorá môžeme robiť veci trochu paralelne. Hlavnou myšlienkou AJAX je, že chcete to získať nejaké konkrétne informácie. Napríklad pri písaní nového užívateľské meno, keď sa zaregistrujete na užívateľské meno, moje užívateľské meno je abc123. A potom, na konci roka formulár, budete musieť kliknite na tlačidlo Odoslať. A to musel ísť na server, a potom skontrolujte, či v databáze, abc123 už tam je. A či je to už tam je napísané, užívateľské meno už v databáze. A oni, musíte vyplniť out celý formulár znova. A bolo to naozaj, ale naozaj zlé. [01:25:23] A potom ľudia hovoria, OK, môže prečo nie len my požadujeme malý HTTP len skontrolovať aby zistil, či to užívateľ v databáze predtým, než sa užívateľ musel odoslať celý formulár? Tak napríklad, keď Užívateľ dokončenie písanie ABC123, povedzme, ísť na serveri málo bit a len si true alebo false zo servera zistiť, či že je to platné užívateľské meno, alebo nie. OK, tak to je jedna z hlavných používa stále dnes AJAX. [01:25:49] DAVIN: Takže naozaj rýchlo, v volanie Ajax v jQuery, ste mohli znamenať, že vás chcem, aby to bolo synchrónne. Tie by sa to urobiť. Ale môžete urobiť. A ak ste to, čo by sa stalo? No, napríklad, keď ste dostáva správy alebo čokoľvek, Váš prehliadač len tak čakať kým že celý hovor ukončený miesto aby vy ostatní veci do poriadku po tom, čo na neho. [01:26:14] Gabe: Nie je to už absolvovaní. Ach môj bože. Je nám ľúto! Jo. "V minulosti, Klient potreboval priania celý obsah webových stránok. " To je to, čo som povedal. To nám umožňuje posielať ďalšie GET alebo POST žiadosti, bez toho, aby znovu načítať náš prehliadač. Takže na konci dňa, sme vlastne robiť an HTTP požiadaviek sa tu pomocou JavaScript. Vzhľadom k tomu, pred, sme použili iba JavaScript zmeniť HTML, ktorý už prišiel. A teraz, môžeme použiť rozhranie s webovými servermi tiež. Spôsob, akým sa to stane ich máme klienta. Davin je klient. A má všetky JavaScript zobrazovať, pretože HTML je nemý. JavaScript je šikovný. Takže Davin Davin má svoje smart časť a jeho nemý časť. Chce, aby využil svojho chytrého diel teraz. Bude používať JavaScript na vyžiadanie, napríklad, či je v ABC123 databázy, alebo nie. [01:27:04] Takže Davin, prosím, len Pošlite mi požiadavke HTTP. Děkuju. Takže práve poslal požiadavku HTTP. Môžete vidieť, že? A to je len rovnakým spôsobom že každá žiadosť HTTP je odoslaný. Prehliadač Google Chrome alebo tak niečo, je bude vidieť, že je Davin sa snaží odoslať požiadavku HTTP, nepomôže HM trochu. A to pôjde celú cestu na server. Teraz server bude mať PHP tu, alebo akýkoľvek iný jazyk. Rovnako ako v bežnom požiadavke HTTP. Je to do značnej miery normálny požiadavku HTTP. [01:27:31] A potom, server sa chystá povedať, OK, Davin chce, aby som zistil, či to abc123 je v databáze. Choďte si pohovoriť s modelom. Model hovorí, že to nie je. abc123 je dobré užívateľské meno. A potom, webový server, bude používať PHP na to, aby nejakú formu súboru. Mohlo by to byť doslova len súbor , Ktorý obsahuje "áno" v ňom, alebo "nie, alebo niečo také. Mohlo by to byť akýkoľvek súbor. [01:27:54] Mohlo by to byť ako budem poslať Davin obrázok kačice ak je to v databáze a poslať obrázok škrečka ak to nie je v databáze. To by bolo trochu hlúpy, ale to bude fungovať. OK, tak som poslať kačicu na Davin. Davin dostal kačicu. A teraz, kto ich bude zvládnuť kačicu? Davin je inteligentný časť znovu, tak JavaScript nie? JavaScript poslal žiadosť, a JavaScript bude prijímať žiadosti a interpretovať v určitej forme. [01:28:22] A v tomto zmysle, že to bude hovoria, OK, ak Kačena potom som dobrý. Ak je škrečok, potom idem hovoriť, nie, užívateľské meno už existuje v databáze. Ale obvykle, nie ste pošle kačicu. Budeš posielať niečo trochu múdrejší. A to, čo používame, je XML. A v poslednej dobe, používame JSON. JSON je proste JavaScript Object Notation, ktorý je v podstate dostanete Celý objekt JavaScript. A dáte ju do súboru, rovnako ako že CS50 objekt, ktorý chlapci videli. Dáte ho do súboru, a ju poslať cez na Davin. [01:28:53] Takže v tomto prípade by som vytvoriť objekt JavaScript a len povedať, užívateľ existuje, áno. Alebo užívateľ existuje, no. A pošlite ho k nemu. A prečo JSON? Vzhľadom k tomu, osoby Kto je príjem je bude používať JavaScript spracovať odpoveď. A JavaScript funguje tak dobre, pretože je to tzv JavaScript Object Notation. Je to tak? Takže stačí zavolať funkciu a získať Tento pekný objekt z odpovede. A potom, že to bude vedieť, či že používateľ je v databáze, alebo nie. [01:29:22] Tak vidíte, všetko prichádza spoločne vo webovom serveri, a potom je tu ešte jedna HTTP požiadavky a jedna odpoveď HTTP a všetko. Takže sa uistite, chlapci chápať túto výzvu AJAX pretože to vám pomôže pochopiť všetky pojmov hovoríme. [01:29:37] Tak tu je príklad AJAX s jQuery. A tu, robíme s get JSON. Takže nie sme snaží dostať obrázok mačky tu, alebo kačica. Snažíme sa získať súbor JSON. A potom budeme čakať, až je to hotovo, bodka hotovo. To znamená, že som čakal na odpoveď. Mohlo by to chvíľu trvať. Potom vidíte trochu zaťaženia. Ak chcete k tomu, že na svoje webové stránky. Takže dot urobil, a potom to, čo sa stane, keď sa to robí? Môžete odovzdať anonymný funkcie, rovnako ako sme videli predtým. Vzhľadom k tomu, urobiť, je udalosť, len ako kliknutie myši alebo čokoľvek, pre jQuery. Takže si prejsť v tejto funkcii sa dát, textu, status, a jqXHR. A v podstate, to je len niektoré premenné ktoré môžete použiť neskôr, aby stav požiadavke HTTP, Dáta, že to bude poslať späť k vám. Takže sa môžete neskôr interpretovať a robiť niečo zmysluplné s ním. A ak to zlyhá, keď by mohlo zlyhať? No, keď požiadavka HTTP dáva tie 500, alebo niečo také. Potom to ti to povedať status, aký druh poruchy, ktorá bola, a všetky možné veci. Musíte sa uistiť, zvládnuť oba prípady, inak program blaznie. [01:30:42] DAVIN: Tak jo, to je presne to to, čo ste videli na svojej poslednej p-set. Skutočná AJAX volania je v get JSON. To je výzva. A potom, bodka urobiť, je ako skontroluje, či je to úspešné. Ak sa to podarí, budete chcieť urobiť niečo s dátami. Dostanete späť z toho Uvádzajú údaje JSON. To je to, čo dostanete späť. Takže ak si pamätáte zo svojho p-set, Mnoho z vás boli ako dátové konzola aj alebo čokoľvek, bodka link alebo titul. Či už sa vracia z tohto JSON, bez ohľadu na polia sú v tomto JSON objektu, že to, čo ste sa dostal späť. Dáta sú to, čo ste sa dostal späť. Status Text, proste niečo, čo vám vedieť, čo sa stalo. A potom, jqXHR, že je to len požiadavka XML HTTP jQuery. To je len ako objekt. A potom sa to nepodarí, rovnako ako povedal Gabe. Gabe: V našom malom príklade ABC123 len skontrolovať, či je to v databáze alebo nie, dáta by byť niečo, čo by to, ak sú údaje dot užívateľské meno existuje, čo je to, čo vaše PHP vytvorené pre vy, ak sú údaje dot užívateľské meno existuje, potom Chystám sa upozorniť, užívateľ Názov už existuje. Inak, ja som len tak nechať užívateľ pokračovať vyplnením formulára. OK, bezpečnosť, v pohode. [01:31:50] DAVIN: Chceš, aby som to? [01:31:52] Gabe: Páči sa mi tento jeden. Takže niečo, čo vyzerá povedome. Už sme skoro hotové. Tak to je len príklad chlapci videli vo svojej triede. Ste použili argv1 tu. Je to ako argument príkazového riadku. A my sme mem kopírovanie, ktoré do vyrovnávacej pamäte veľkosti 12. Čo je to tu za problém? Pretečeniu vyrovnávacej pamäte! Vzhľadom k tomu, že máme vyrovnávaciu pamäť o veľkosti 12. argv1 môže mať veľkosť dve miliardy. Nechceme robiť žiadne hranice kontrolu. A tak by sme mohli kopírovať veľké množstvo pamäte. A budeme zvlášť zlý o tom. To, čo by sme mohli urobiť, že je to veľmi, veľmi na mysli v tomto prípade? Ano? Divákov: Časť dve miliardy veci obsahuje spustiteľný kód, ktorý vracia [Nepočuteľné]. Gabe: Presne tak. Tak to je druh vec, ktorú ľudia používajú útek z väzenia iPhone, napr. Takže takéto veci. Vzhľadom k tomu, stačí, aby sa zariadenie spustiť ľubovoľný kód, ktorý sa vám páči. Oprava, takže oprava je jednoduchá. Len skontrolujte hraníc. Môžete skontrolovať null nasledujúcich dôvodov vždy skontrolujte, či null keď máme čo do činenia s reťazcami. A potom, budete mať dĺžka reťazca predtým. A ak reťazci dĺžka je platný reťazec dĺžka, ktorá je v rámci 0 a 12, potom sme dobrí. [01:33:03] DAVIN: Ak nemáte kontrolu null, naozaj rýchlo, čo sa stane? Bude Seg chybu. Prečo to SEG chyba? Vzhľadom k tomu, voláte strlen na null. Gabe: Jo. Pravda alebo lož, pomocou jedného Heslo je dobrý nápad. [01:33:19] Divákov: False. [01:33:20] Gabe: False. Použite veľa hesiel, a veľké, dlhé ty. Visiaci zámok ikony zaistenie bezpečnosti. [01:33:26] Divákov: False. [01:33:27] Gabe: False. To nič neznamená. Je to len ikona. SSL chráni proti muž v stredu útoku. Divákov: False. Gabe: False. OK, takže všetky tie, sú nepravdivé. Nice. [Nepočuteľné] Chceš sa o tom porozprávať? Si na rade. Davin: Typy útokov, muž v stredu. Čo je človek v strednom útoku? Divákov: [nepočuteľné]. DAVIN: Ak budete posielať HTTP požiadavka, že by to mohlo robiť, že jo? Ale ak posielate HTTPS, oni pravdepodobne nebude môcť robiť. Je tu veľa miest po pripojení. Máte smerovača. Máte DNS servery. Ak niekto môže fyzicky vidieť, čo posielate, takže niekto je schopný skutočne dostať medzi vami, klient a server, a je možnosť vidieť to, čo posielate, To je muž v strednom útoku. Tak, aby videli, čo sa snažíte dostať z servera, alebo je schopný see-- horšie, by ste mali byť schopní vidieť sušienky alebo niečo také. [01:34:16] Tak napríklad, ak nie ste pomocou SSL, on mali byť schopní vidieť Vaše ID relácie cookie. A tomu sa hovorí relácie únos pretože vidia svoje ID cookie, a potom je schopný ísť na to webové stránky a predstierať, že vás. Vzhľadom k tomu, rovnako ako v PHP, pamätajte Keď sme prihlásení, čo budeme robiť? Nastavili sme ID relácie vo výške ID. Tak, že vás identifikujú. To je dôvod, prečo môžete vidieť vaše portfólio a nie každý iného portfólio. [01:34:38] No, ak som schopný sa dostať, že cookie, Potom som sa môžu prihlásiť na tejto stránke. A potom som si len vidieť svoje veci a začať kupovať a predávať veci. Tak to je relácia únos. Ale nemali by ste byť schopní to-- tak vás možno použiť muža v strednom útoku aj keď sa pomocou SSL. Ale nemali by ste byť schopní. Ak sú pomocou protokolu SSL, nemôžete relácie únos. Prečo? Vzhľadom k tomu, že to všetko šifrované, že jo? ak je šifrovaná, a ja som stále človek middle, stále si svoje dáta. To je v poriadku. Ale je to šifrovaná. Tak som si to moc použiť. Tak to je dva. [01:35:09] Naozaj rýchlo, žiadosť cross site falšovania. To je len v prípade, že je súvislosť a že spojenie robí niečo že si nemyslím, že by mal robiť. Tak napríklad, v prípade, že spojenie je ísť nakupovať akcie alebo predať akcie, a vy ste nevedeli, že. Ste klikli na odkaz, poslal žiadosť, kúpili alebo predal niečo, čo ste nechceli robiť. To je to. [01:35:25] Cross site scripting, takže tu, ste odovzdaním prostredníctvom premennej q, namiesto odovzdávania v nejakom hodnoty, možno q je ako meno. Takže namiesto toho, odovzdávanie Q sa rovná Davin alebo niečo také, ak nechcete používať HTML Špeciálne znaky, ak máte neunikli to, aby sa ubezpečil, že je to OK, potom by som mohol odovzdať namiesto toho, povedzme, že tu hovorím tlačiť alebo niečo také, potom by som mohol odovzdať tú volanie skriptu. [01:35:51] A tak, namiesto len na to, premenné, Ja by som potom spustiť tento skript volania. Takže v tomto skripte zavolať, čo to robí? Dokument bodka miesto, že to bude zmeniť umiestnenie dokumentu. Takže idem presmerovať niekam inam. Volá sa to zlý chlap tento príklad, veľmi dobré. Nemôžem myslieť na slová. A potom, čo je ešte horšie je, že budem do tej doby stanovenej cookie, čo je určitý premenná Mám na tejto webovej stránke. Chystám sa nastaviť tak, rovný na dokument dot cookie. Preto idem ukradnúť vaše cookie. A ja idem na presmerovanie niektoré informácie na internetových stránkach že by ste nemali byť prístup. A to všetko sa deje preto, že ste Niet úniku, čo ste videli. Jo? [01:36:29] Divákov: Takže len do robiť to jasné, je to vulnerable.com že je náchylná k tomu. Tak môže vyzerať, že odkaz na žiadnej stránke. Niekto klikne na to, ide do vulnerable.com. Máte cookie vulnerable.com. Povedzme, že Facebook je zraniteľný, tak facebook.com. Máte svoj Facebook cookie. Čo to robí, že ste ísť na facebook.com, je to okamžite presmerovanie vám badguy.com, ale aj vaše cookie informácie. Takže je to rýchly presmerovanie, ale váš Facebook cookie je súčasťou tohto presmerovania, a to je to, ako sa [nepočuteľné]. Gabe: Áno, je tu niektoré veľmi priemerné veci že ľudia môžu robiť v prípade, že je to. Napríklad, pokiaľ nemá Facebook všetci zmeniť svoje užívateľské meno, a nemali robiť žiadne Sanity kontroly, takže si mohol vložiť vec JavaScript, ktorý zmení váš obrázok škrečka. A to vloží rovnaký JavaScript na každého, kto prezerá vaše stránky. Takže každý, kto vidí vaše stránky má rovnakú vec v užívateľské meno. A pretože je to vírus, sa šíri exponenciálne. DAVIN: Budeme preskočiť posledný jeden, a potom sme urobili. Takže je to len ďalší príklad. Tak to je, že to nie je unikajúci ich SQL tabuľky. Takže si môžete pustiť ju. Takže chcete uniknúť veci. To bol predchádzajúci príklad s krížovým site scripting. Je nám ľúto, bežal trochu neskoro. Zajtra, prepáč! Zajtra máme úradné hodiny. Takže úradné hodiny v Cabbot od 8:00 do 11:00. Úradné hodiny sú výhradne pre kvízové ​​otázky.