[00:00:02] [Muziek] HANNAH: Hallo, iedereen. Dank jullie wel voor het coming out in de walgelijke weer voor quiz één sessie te herzien. Zoals jullie weten, quiz een is deze woensdag. Dus we gaan om te gaan door een bos van onderwerpen. DAVIN: Hey, kan ik zeggen iets echt snel? HANNAH: Ja, Davin's gaan om iets echt snel zeggen. DAVIN: Sorry. Gewoon echt snel, als je vragen hebt over de quiz, kunt u online gaat. Ga naar 2014 quiz één, over de quiz. Het heeft de logistiek over waar te gaan, wanneer te gaan. Als u tegelijkertijd bent ingeschreven, we zijn gaan naar een make-up quiz hebben om 5:30. Of als je me een kwestie gezonden, je hebt een andere kwestie. Maar 05:30 is de make-up tijd op woensdag. Maar als u vragen hebt, algemene vragen, online heeft alle logistiek. Controleer dus eerst daar. [00:00:47] HANNAH: Awesome. Dus hier is de grote lijst van onderwerpen dat we gaan om te gaan door vandaag. Ik ga naar alle van de C te dekken spul, dat is dat de eerste kolom. Dus de C spul dat we gedekt na quiz nul. Beginnend met een gelinkte lijst, waaronder pointers. [00:01:05] Oké, dus we dit zagen in de laatste beoordeling sessie, dus ik ga om te gaan door dit is een beetje sneller. Gewoon je hand opsteken als je wilt dat ik vertragen of verder aan te pakken iets. Maar we gebruiken gelinkte lijsten, omdat We begonnen in C met arrays. En arrays zijn geweldig, maar de probleem is ze hebben een vaste grootte. Gelinkte lijsten kunnen we creëren dynamisch bemeten datastructuren. [00:01:28] En we hebben onze basishandelingen, invoegen, verwijderen en zoeken. En we kunnen insert doen in constante tijd ergste geval als we het enkel aan het begin. Wissen en te doorzoeken, het ergste Bij grote oh n tijd. Dus nogmaals, gewoon om te spiegelen door middel van deze foto's, Ik weet dat we zagen de laatste tijd, maar we willen houden van onze gelinkte lijst door het bijhouden van de hoofd van onze gelinkte lijst. Omdat we weten dat elk van onze knooppunten is gewoon te wijzen op de volgende knoop in onze gelinkte lijst. [00:01:58] Dus dat is hoe we bijhouden. Hoewel deze niet continue stukken van het geheugen, we kunnen ze vinden door gewoon na de verschillende pijlen. Hier is onze structuur voor een gelinkte lijst knooppunt. We zagen deze laatste keer. Wij hebben onze struct knooppunt. En het heeft twee eigenschappen. Nummer een, de eigenlijke waarde die we willen bewaren. In dit geval is een geheel getal. Het kan een string zijn, het kon zijn een char, wat je wilt. En dan hebben we bij te houden van het volgende knooppunt in onze gelinkte lijst. Dus dat gaat om een ​​te zijn wijzer naar het volgende knooppunt. Als je gewoon doen zoeken, zoals ik al eerder zei, je zou moeten je pijlen naar beneden te volgen. Inbrengen, zou je bijhouden van waar de rest van de lijst is. En wilt u het hoofd te buigen wijzen onze nieuwe element, dat in dit geval één, en dan zal men wijzen de rest van de gekoppelde lijst. Dus nogmaals, ik weet dat dit een beetje beetje een herhaling van de quiz nul. Dus we moeten heel voorzichtig zijn de volgorde waarin we doe deze pointings dus doen we niet verliezen spoor van de achterkant van de lijst. OK, vragen met gewoon afzonderlijk gelinkte lijsten? Geweldig, OK, cool. [00:03:06] Dus nu gaan we om te gaan op iets net iets ingewikkelder, dubbel gelinkte lijsten. Dus in aanvulling op het houden van spoor van het volgende knooppunt, we willen ook om bij te houden van het vorige knooppunt. En dit laat ons toe om, als we ergens in onze gelinkte lijst, niet alleen vooruit gaan, maar Ook achteruit herhalen. Want zoals we zagen in een enkelvoudig gelinkte lijst, als we waren op een bepaald knooppunt, en alle van een plotselinge, hebben we besloten, eigenlijk, ik wil naar het knooppunt vlak voor me, je zou moeten gaan allemaal de weg terug naar het hoofd en doorlopen tot je gevonden het knooppunt dat u zocht. [00:03:35] Dus dit maakt de dingen iets makkelijker als we zijn proberen te herhalen via onze gelinkte lijst. Maar het vraagt ​​van ons om spoor van een te houden meer wijzer, dus nog een knooppunt ster. Oké, dus hier komt het leuke gedeelte. We gaan oefenen uitvoering verwijderen voor dubbel gelinkte lijsten. Dus dit is iets dat helemaal eerlijk spel voor de quiz. Het kwam op het verleden quizzen. Dus zeker worden voorbereid om een ​​beetje in C. coderen Niet vergeten dat met al denk deze leuke PHP en JavaScript, we hebben nog steeds te onthouden te doen C. Dus penseel op dat als je roestige voelt. [00:04:12] Oké, laten we eens kijken of we dit kunnen doen. OK, cool. Dus we gaan proberen naar rechts bewerken in hier, en hopelijk dit gaat zoals gepland. Oké, is er iemand die mij wilt geven een suggestie over hoe ik moet beginnen? De enige veronderstelling Ik ben maken is dat ik al hebben een structuur gedefinieerd, één Ik liet op de laatste pagina, op de laatste dia. En ik ben het opslaan van het hoofd van mijn gekoppelde lijst in sommige pointer genaamd lijst. Wil iemand mij begon? [00:04:42] Publiek: Kunt u een nieuwe maken knooppunt te roepen door de lijst? [00:04:45] HANNAH: Awesome, dus we gaan creëren een nieuw knooppunt te kruipen door de lijst. Dat vind ik leuk. Ik noem het gewoon pointer als dat is OK. En waar moet het oorspronkelijk beginnen? [00:04:57] Publiek: Waarschijnlijk op de kop van de lijst. HANNAH: Beautiful. We willen beginnen aan het hoofd, die Ik zei dat zal worden opgeslagen in de lijst. Geweldig. Tot nu toe alles goed. En nu, ons doel is om doorlopen van de lijst totdat we de knoop met waarde n die we willen verwijderen. OK? [00:05:13] Nu is dus het deel waar we willen door middel herhalen. Kan iemand suggereren een manier om door te herhalen? [00:05:19] Publiek: Een lus. [00:05:20] HANNAH: Een lus. Ik hou ervan. Concreet kunnen we proberen een tijdje lus. OK, en we weten dat we hebben bereikt het einde van onze lijst bij wat? Publiek: Zodra de wijzer is null. HANNAH: Zodra de wijzer is null. Mooi, ik hou ervan. OK, cool. Dus sorry als mijn begrenzende brace is soort van vallen van het scherm. We brachten het terug. OK, cool. Wat is het volgende? [00:05:48] Dus we weten dat we willen verwijderen het knooppunt n waarde heeft. Dus laten we het geval waar we eigenlijk vinden onze knooppunt. Dus hoe zou ik controleren dat? Ik zou gewoon zeggen als aanwijzer, en dan als ik de waarde wilt halen uit wijzer, Ik heb gewoon arrow n, gelijk aan n, de parameter dat we gaf aan deze functie, de knooppunt dat we willen eigenlijk verwijderen. Voor vragen tot hier? Prima. OK, dus laten we nu snel een beeld te schetsen op het bord om dit te visualiseren. [00:06:24] Dus laten we zeggen er is onze mooie knoop. En het heeft een waarde, zal ik gewoon zeggen vier. En wijst naar de volgende knooppunt in onze gelinkte lijst. En er is niets voor het. Dus hebben we onze vorige wijst niets. In dit geval wijzen we achteruit. OK, maar het opzetten van mijn gelinkte lijst hier. En we hebben een lijst die verwijst om deze structuur te beginnen. Ik zal nog één voor tekenen Volledigheidshalve. OK. Ik zal dit naar voren wijzen. En ik zal dat een terug wijzen. Oeps, sorry. Ja, heb deze naar achteren. Doe het opnieuw. OK, daar gaan we. Oké, het kreeg. OK, hier is ons beeld. [00:07:21] OK, dus willen we twee gevallen te overwegen. Het eerste geval is wanneer de knooppunt we willen verwijderen is aan het begin van onze lijst. En dan, het tweede geval dat we willen te overwegen is als het ergens anders. Ik begrijp dat dit een totaal rommelige tekening met al mijn wissen, maar hopelijk zullen we proberen om dit duidelijk maken met een code. [00:07:40] OK, dus laten we bestrijken de zaak waar we vonden onze knooppunt, en het bij het start van onze gelinkte lijst. Iemand mij een suggestie hier wat Ik zou moeten doen om daadwerkelijk te verwijderen onze knooppunt? Het is een beetje lastig. OK? [00:07:56] Publiek: Je moet de te nemen knooppunt voordat het zou en maken het wijzen op de die zou na, en neem het knooppunt dat zou na en maken zij wijzen op de node voor het. HANNAH: Precies. OK, dus is dit het geval is where-- hebben we twee gevallen. We hebben het geval waarin de knooppunt dat we op zoek naar is de voorzijde van de lijst. OK, en dan het geval dat u beschreven is anders, toch? Het is elders in de lijst. Dus je zei, we moeten kijk naar het knooppunt vorige, en maak het vorige knooppunt verwijzen naar de volgende knoop. Dus laten we zeggen dat we proberen tot het afsluiten van de vijf in mijn zeer rommelig tekening over hier. Wij willen ervoor zorgen dat vier wijst nu naar zes. Vier's volgende punten tot zes. En zes van de vorige punten tot vier. Dat is ons doel hier, toch? Dit is wat ik denk dat je net zei daar. [00:08:56] OK, dus laten we dat eerste stuk. Laten we het hebben de vorige pointer vorige. Dus vier's volgende moet verwijzen naar wat? Juist in dit geval zes. Dus moeten we wijzer zeggen, volgende. OK? Prima. Dus laten we ontdoen van deze lelijke foto en proberen om een ​​iets mooiere trekken. We hebben hier onze lijst hoofd. En die verwijst naar het eerste knooppunt in onze gelinkte lijst, wat we zeiden is vier. Hier is onze tweede knooppunt, vijf. En onze derde knooppunt, zes. Gewoon proberen om exact dezelfde trekken beeld, alleen een beetje schoner. OK, dus vier van de volgende verwijst hier vijf. Vijf's volgende punten tot zes. Zes van de vorige punten tot vijf. En vijf van de vorige punten tot vier. Zo veel mooier! OK, cool. [00:10:04] Dus nu, wat we deden gewoon Hier, deze regel code, die zegt wijzer vorige volgende, dus wat betekent dat? Dat betekent dat als we kijken naar vijf, gaat u naar de vorige knooppunt, en het is de volgende moet nu punt tot vijf van de volgende. Dus in wezen, wat dat is het doen is dat is het wissen van deze pijl en waardoor het overslaan rechts over vijf. Is dat duidelijk? Ik weet dat het kan een beetje vaag. Ik zie een aantal hoofd knikt. Dat is goed. OK, cool. Nu, wat is de volgende stap? [00:10:39] Ik heb reset de volgende. Nu dat andere arrow moet ik veranderen? Deze hier. Zes van de vorige. We willen niet dat zes van de vorige meer te wijzen op vijf. We willen dat het wijzen op vier. Betekent dat beeld zinvol? Dus nu kunnen we daadwerkelijk vijf. Dus laten we dat stuk. Wat moet ik doen voordat ik reset zes vorige vier? Het even welke ideeën er? [00:11:14] Publiek: Bevrijd het knooppunt tussen ze door hem op nul? HANNAH: Cool. Zeker, ons einddoel is gaat worden naar het knooppunt bevrijden. Dus we kunnen dat hier doen. Gratis pointer. Absoluut. Maar zelfs daarvoor, laten we gewoon-- ons doel rechts hier is om wijzer volgende set vorige gelijk aan pointer vorige. Ik weet dat dit wordt steeds bedekt. OK, laten we take-- cool. Kan iedereen deze bottom line te zien? Of is het super klein? [00:11:50] Dus voordat we voeren deze lijn hier, we willen om ervoor te zorgen dat pointer volgende is niet nul. Want als aanwijzer volgende is null, wat voor soort fout krijg ik als ik probeer te verwijzen naar een null pointer? Publiek: Seg fout. HANNAH: Een seg fout, mooi. OK, dus als dat niet null, dan kunnen we opnieuw in te stellen. En we hebben zes punt weer naar vier. Vragen tot op dit punt? Ja? [00:12:17] Publiek: In je eerste if-statement, heb je betekenen voor de pijl hebben volgende, of [onverstaanbaar]? HANNAH: Ik bedoelde aanwijzer n. Dus eigenlijk, wat ik probeer te doen is te zeggen, het huidige knooppunt dat ik ben itereren over, het huidige knooppunt Ik ben op zoek naar, ik ben het opslaan in pointer. En ik wil weten aanwijzer waarde, die in dit geval is n. En ik wil zien, is het knooppunt Ik ben op zoek voor het knooppunt Ik ben gericht om te verwijderen? Dus dat is de reden waarom wij hebben hier pointer n. [00:12:47] Publiek: Dus de pijl gaan tot n, u de waarde in te stellen en bewaar het op een knooppunt genoemd n? [00:12:55] HANNAH: Dus het is net als ik ben gaan door deze gelinkte lijst en wijst naar vijf. Als ik wil dat de waarde te krijgen, indien Ik wil dat nummer, 5 te krijgen, Ik moet aanwijzer n doen. Cool? Yeah. [00:13:07] Publiek: N is de naam van de variabele? HANNAH: Ja. Dus als we omdraaien terug één glijbaan, n naam van de waarde in van de knooppunt in onze gelinkte lijst. En ik weet dat het kan een beetje te krijgen beetje verwarrend omdat we ook belt het ding dat we willen n verwijderen. Dus dat is waar dat één lijn komt. Yeah? [00:13:27] Publiek: Wat heb je [Onverstaanbaar] hoe ze werken? Een wijzer [onverstaanbaar]? [00:13:35] HANNAH: Tuurlijk. Heb je het about-- welke lijn? Doelgroep: De laatste regel [onverstaanbaar]. [00:13:44] HANNAH: Tuurlijk, OK. Dus laten we eens kijken naar de foto in Om te proberen dit te verklaren. Het spijt me, voor de camera, de vraag was kunnen we pointer verklaren arrow volgende pointer vorige. OK, dus laten we zeggen dat we op vijf en ons doel is om te verwijderen vijf. Dus pointer volgende, welke van deze drie knooppunten geeft dat ons? Dat brengt ons bij de zesde knooppunt, toch? [00:14:10] OK, dus nu we vragen voor de zes vorige. OK? En we zijn het resetten van deze gelijk aan vier, die is er gebeurd met de vijf vorige zijn. Ik weet het, het is super moeilijk bij te houden. Ik raad u foto's trekken als je een vraag als deze. Ja? [00:14:30] Publiek: Is de reden dat we hebben geen [onverstaanbaar]? [00:14:37] HANNAH: Precies. Dus de vraag is, waarom doen we niet nodig hebben om hier te controleren? Waarom gaan we niet nodig hebben om te controleren of pointer vorige is niet gelijk aan nul? En het is, want we hebben reeds afgescheiden het geval als de aanwijzer helemaal aan het begin. Zeer goede vraag. Iets anders op dit? OK, cool. Dus laten we eindigen het op. We zijn er bijna. [00:14:59] Dus wat als het aan het hoofd? Wat als in plaats van probeert te verwijderen, vijf, we eigenlijk wilden verwijderen vier? Wat zou ik moeten doen? Nou, ik wil mijn hoofd terug te zetten naar wat? Schreeuw het uit? Publiek: Het ene na het. HANNAH: Beautiful. OK, dus we willen een lijst te wijzen naar wat onze pointer volgende knooppunt is. Goed. En net voor de volledigheid's sake, zouden we wilt controleren dat zolang onze lijst is niet nul, zolang de lijst is niet leeg is, dan willen we stellen onze vorige gelijk aan nul. Vraag nu toe? Één stap verwijderd van--? [00:15:53] Publiek: Zou het zijn als lijst is niet gelijk aan nul? [00:15:55] HANNAH: Ja, je hebt helemaal gelijk. Het spijt me zeer. Is lijst is niet gelijk aan null. Geweldig. Proberen om dit alles op het scherm te brengen. Het is een soort van af te vallen. Sorry, jongens. En last but not least, alle we moeten doen is de terugkeer. OK. Dat was een stuk gepropt in heel snel. Neem een ​​seconde om dit over te kijken. Vertel me als je vragen hebt. Yeah? [00:16:20] Publiek: Als de lijst is op de hoofd, then-- wachten, nevermind. [00:16:26] HANNAH: OK, goed. Dus dit is als lijst staat aan het hoofd, verwijderen we het aan wat we geplaatst. Yeah? [00:16:31] Publiek: Kunt u uitleggen de eerste als weer statement? De aanwijzer voor n gelijk aan n? HANNAH: Tuurlijk. Dus ons doel van deze hele functie is om het knooppunt waarde n is verwijderd. Dus als we, als we zijn itereren via onze lijst, het knooppunt met de waarde van n, dat is degene die we willen verwijderen. Zodat al het wissen gebeurt binnenkant van die grote als statement. Is dat zinvol? Cool. Yeah? [00:16:59] Publiek: Misschien heb je gewoon niet kunt zien het, maar niet je moet ook een lijn voor het scrollen door de lijst? HANNAH: Awesome. Laten breng dit een beetje, en we zullen gooien, dat midden in de bodem. Misschien is de raad van bestuur zou hebben Een licht beter idee. Dus hoe zou ik verhuizen verwijzing vooruit? [00:17:17] Publiek: Pointer gelijk pointer plus één. [00:17:20] HANNAH: Beautiful. Dus dat laat ons toe om blijven itereren door. OK. Publiek: Zou er niet een anders zijn? HANNAH: Nog een keer? Publiek: Zou er niet zijn een anders na de grote oude als verklaring [onverstaanbaar]? HANNAH: Welk deel? Het spijt me. [00:17:38] Doelgroep: De traversal, niet er een anders? HANNAH: U absoluut kan een anders. Want ik heb een terugkeer naar rechts daar hoef je niet een anders nodig. Maar ja, goede vraag. OK, ja? Publiek: Kunnen we denken aan wijzer dat beweegt door de lijst het nemen van de waarde van elk knooppunt in de lijst? Of moeten we denken aan het als soort van buiten de lijst? [00:18:00] HANNAH: Ofwel is prima, denk ik. De manier waarop ik me voorstellen dat het Ik zeg, OK, ik ben wijzer. En dit ben ik. Dit is mijn hand. Ik ga om te wijzen op de verschillende dingen die ik wil via herhalen. Ten eerste, ik ga naar punt aan het hoofd van de lijst. En dat vertelt me ​​dat ik ben zal wijzen op vier. En dus mij als extern aan de lijst, Ik kan wijzen op elk van deze elementen. Dus ik denk van mezelf als aanwijzer. Publiek: Dus als je verwijderen een van die elementen, u zelf te verwijderen, om zo te zeggen. HANNAH: Precies. Zodat je het ding verwijderen je wijst. Dus in het voorbeeld dat we zagen waar we zijn probeert te verwijderen, vijf, als ik wijzend naar vijf, Ik wil het verwijderen wat ik wijzend naar. Precies. Ja? Publiek: Hebben we verzorgd de wanneer n niet in de lijst? HANNAH: Als n niet in de lijst? Alles wat er gaat gebeuren is dat je bent gaan doorlopen en herhalen door, en dan, je gaat krijgen om zijn null pointer, en dan zul je worden gedaan. [00:18:48] Publiek: Dus hebben we om iets terug te keren? HANNAH: We konden. De manier waarop dat als dit gedefinieerd functie, zeg ik gewoon dat het terugkeert ongeldig ongeacht. Maar je kon iets hebben alsof ik terug naar een geheel getal, en hebben het terug negatief 1 als het niet lukt. Zoiets. Vragen met-- ja? Publiek: [onverstaanbaar]? HANNAH: Sorry? Publiek: [onverstaanbaar]? HANNAH: Tuurlijk. Dus dat is de actual-- als we eenmaal hebt gedaan al dit werk van bewegende al deze pijlen rond, onze hele doel was om zich te ontdoen van het knooppunt dat we zoeken. Dus in dit geval, vrijmaken wijzer, als ik wijzend naar vijf, het is als het wissen van deze middelste node. Dat is de vrije aanwijzer deel. Dat zinvol? [00:19:29] Publiek: Dus zelfs gedacht dat heb je niet [onverstaanbaar]? [00:19:31] HANNAH: Dus we uitgegaan bij het begin we hadden wat lijst die was already-- ze hadden dit samen te stellen. Dus om deze te construeren lijst, moest hebben ze [onverstaanbaar]. Cool. Iets anders met dit? Ja? [00:19:46] Publiek: Wat als de lijst niet de nul lijn gelijk? [Onverstaanbaar]? HANNAH: Recht hier? Publiek: Ja. HANNAH: OK, alles wat ik aan het doen ben is Ik ben gewoon om ervoor te zorgen dat voordat ik proberen om dereferentie lijst, voordat ik probeer om tot de vorige, Ik wil ervoor zorgen dat het niet null dus ik heb een seg schuld niet krijgen. Cool. [00:20:08] OK, ik weet dat dit vrij was een stuk door te komen. Dus deze dia zal zijn aan u beschikbaar gesteld. Dus je kunt gaan door het in meer detail. Ja? [00:20:17] Publiek: Waarom doet de lijst [onverstaanbaar]? HANNAH: Tuurlijk. Dus lijst wijst echt op dit element hier, het eerste element in de lijst. Het kan dus geen eerdere. Ja? [00:20:31] Publiek: Heeft de aanwijzer punt op hetzelfde adres in het geheugen? Is het naar dezelfde adres in het geheugen als het knooppunt dat wijst naar? [00:20:40] HANNAH: Ja, het wijst dit knooppunt in het geheugen. [00:20:43] PUBLIEK: Rechts, dus wanneer u [onverstaanbaar]? [00:20:47] HANNAH: In zekere zin, ja. OK. Oké, laten we samen gaan met dit. En als je meer vragen, stok rond op het einde, en we kunnen gaan door het weer. OK, cool. Nu krijgen we om verder te gaan tabellen, probeert hash, en bomen, die je super kreeg vertrouwd zijn met in-p vijf, speller. [00:21:04] Dus hash tabel is slechts een array met enkelvoudig gelinkte lijsten of dubbel gelinkte lijsten komt af van het. Dus we hebben een soort van associatieve array. En hoe weten we welke van deze arrays emmers te krijgen in, We maken gebruik van een hash-functie. Dus in dit geval, kan iemand wat denk je van de hash-functie zou alleen worden gebaseerd op een aantal van de input en output? [00:21:31] Publiek: Brief nummer van het alfabet. HANNAH: Precies. Het zet ze gewoon in alfabetische volgorde. Alles wat begint met een A wordt in de eerste emmer. Alles wat met een B is in het zetten tweede emmer, enzovoort, enzovoort. Geweldig, OK. En een hashfunctie geven functie die in een woord neemt en zal u vertellen wat emmer het behoort in. Dus welke vermelding in onze scala het behoort in. [00:21:55] Dus elke keer als ik mijn hash-functie een woord, het zou mij hetzelfde vertellen Plaats elke keer weer. Dus als we gebruik maken van de hash-functie uit de vorige dia waar we het sorteren op de eerste letter van het alfabet, elke keer als ik mijn hash-functie "appel" het moet altijd geef me terug 0. Dus als ik een appel in mijn hash tafel te zetten, als ik "appel" aan mijn hash-functie, het moet zeggen, ga zet het in emmer 0. Als ik ben op zoek naar een appel in mijn hash table en ik zeg, waar macht appel levend, je hash-functie vragen. En het zegt, ga naar emmer 0. Oke? Vragen met hash functies? Geweldig. [00:22:34] Hier is een iets meer gedetailleerde uitleg van wat een hash-functie eruit zou kunnen zien. Prima. Nu, het probleem met hash functies is in een ideale wereld, we slechts één ding in elke emmer. Maar in werkelijkheid, is er niet alleen een woord dat begint met A. Er is geen slechts een woord dat begint met B. So In dit geval, als we opeens "berry" en we willen om het te zetten in onze hash tafel, en we zien, oh, nee, banaan is er al, wat gaan we doen? [00:23:03] Nou, we hebben twee opties. De eerste optie is Linear probing, die betekent gewoon gaan vinden de volgende lege emmer. Ga de volgende lege array ingang vinden. En gewoon "berry" daar. Dus ik weet dat het hoort te gaan met de banaan in emmer één. Maar zet ze gewoon in emmer drie, omdat emmer drie is leeg. Een andere optie is waarschijnlijk wat je implementeren in uw p-set, waar u had aparte chaining. Dus elk van uw emmers, elk van uw array-elementen, Niet alleen houdt één woord, maar eigenlijk houdt een pointer naar een lijst van woorden. Zodat als je had banaan in je hash table en je opeens wilde naar bessen, geen probleem toe te voegen. Voeg gewoon berry op tot het einde, of aan het begin van uw gekoppelde lijst. OK, geweldig. Vragen met hash tafels voordat we verder gaan? [00:23:58] Prima. Bomen en probeert. OK, dus dit was een andere optie voor de uitvoering woordenboek. Je zou een poging hebben gedaan. Dus het is een speciaal soort boom die gedraagt ​​zich als een multi-level hash table. Dus je zult de foto te zien waar heb je een array die wijst op een bos van arrays dat punt om een ​​bos van arrays dat punt om een ​​bos van arrays. En we zullen zien wat dat precies eruit zou zien op een toekomstige dia. En meer algemeen, een boom is zomaar een datastructuur waarin de gegevens georganiseerd bepaalde hiërarchie. Dus waar we zagen we een soort van begrip van een top-level, een hoger niveau, een hoger niveau, een hoger niveau. Dus dit is waarschijnlijk het meest duidelijk enkele voorbeelden. Dus hier is onze boom. Je kunt zien dat het heeft bijzondere levels dat we beginnen met dat root node, één. En we kunnen naar beneden gaan via onze boom. [00:24:50] Een binaire boom is een bepaald type boom. En het enige specificatie een binaire boom dat ieder knooppunt hooguit twee bladeren. Dus je bent niet van plan om geen te zien deze knooppunten drie of vier of een ander aantal bladeren. En dan nog specifieker is een binaire zoekboom waarbij elk knooppunt links van de knooppunt gaat een waarde kleiner hebben. En elke waarde aan de recht zal groter zijn. Dus als je ziet 44 is in ons wortel, naar links, 11, 22 en 33 zijn allemaal minder dan onze wortel. En aan de rechterkant zijn allemaal getallen bigger-- 66, 55, en 77. En deze eigenschap geldt op elk niveau van de boom. [00:25:37] Dus toen we naar beneden gaan naar 22, 11 en 33, nog 11 is kleiner dan 22 en 33 is groter dan 22. En dit vergemakkelijkt het zoeken want als we op zoek naar een nummer, we precies weten welke tak naar beneden volgen. Dus dit moet je een herinnering beetje binair zoeken. Yeah? [00:25:56] Publiek: Dus als je beschrijven binair, je zei dat het heeft hooguit twee bladeren? HANNAH: Mm-hm. PUBLIEK: Zou het minder? HANNAH: Ja. Dus laten we zeggen, bijvoorbeeld, u had niet een even aantal dingen en je kon niet vullen al uw bladeren, het is prima als men heeft er een. OK? Geweldig. Alle andere vragen over bomen? OK. [00:26:16] Terug naar onze pogingen als ik aan het praten was over iets eerder, hoe we deze multi-level arrays. Dus in dit geval, beginnen we aan de top. En we kunnen elk willekeurig woord naar beneden te volgen. Dus laten we zeggen dat we wilden om te zoeken naar Turing. We beginnen bij de T, volg het naar beneden aan een array die U bevat, en volg het naar beneden tot we komen deze kleine delta die vertelt ons, ja, je een woord gevonden. Duidelijk probeert? Alles om daar te gaan? Ja? Publiek: Is het symbool van de delta moeten de ruimte binnen de try bezetten? HANNAH: Ja, dus het maakt niet se zelfs nodig om een ​​delta zijn. Maar we een of andere manier nodig te hebben vertel ons computer-- sorry, zodat we weten dat TUR is geen woord. Want laten we zeggen dat we niet hebben Dit concept van een delta, dit concept van harte gefeliciteerd, je een woord gevonden, het zou gaan door en herhalen T-U-R, en dan zeggen, geweldig, ik vond het! Het moet een woord zijn. Maar het is echt niet. We willen heel Turing om een ​​woord te zijn. Dus moeten we iets aan het hebben end dat zegt, gefeliciteerd, u een legitieme woord hebt gevonden. Publiek: Dus als je had als 26 letters in het alfabet, zou je eigenlijk 27 sleutels in je proberen? [00:27:24] HANNAH: Awesome, ja. Dus eigenlijk, ik denk dat zal zijn op de volgende dia. Ta-da! Waar als je een knoop in je proberen, je bent naar 27 kinderen in plaats van 26 hebben. Voor vragen met dat? Yeah? Publiek: Waarom probeert nemen zo veel ruimte [onverstaanbaar] als je gaat? Waarom wordt het beschouwd als [onverstaanbaar]? HANNAH: Tuurlijk. Laten we terug gaan. De vraag is, waarom zijn pogingen zo veel groter dan iets als een hash tabel. Dus voor elk van deze niveaus, zelfs als ze hier niet getekend, moet je alle 26 karakters hebben. En de reden dat je niet kunt zeggen, oh, maar net als voor de Turing, I niet nodig om een ​​van deze hebben dezelfde dingen op het niveau van U. Nou, Als je plotseling wilde toevoegen iets dat was zoals T-H, je nodig hebt om het hebben mogelijkheid van het toevoegen van dat woord. Dus voor elke letter, je gaat te hebben om een ​​bos van hebben arrays komt af van het. Zodat u kunt zien hoe het zou krijgen heel groot, heel snel. Een andere vragen? Prima. Yeah? [00:28:29] Publiek: Wanneer zijn pogingen sneller dan de hash tabellen? [00:28:33] HANNAH: Wanneer zijn pogingen sneller dan de hash tabellen? Dus als je een echt gehad slechte hash-functie. Dus laten we zeggen dat ik was als, hier is je hash-functie. Het maakt niet uit welk woord geef je mij, ik ben altijd ga het in slagorde binnenkomst 0 gezet. En dus hebben we eindigen met zomaar alles in een grote lange gelinkte lijst. En dus een lookup tijd zou in het slechtste geval nemen n als het aan het einde van onze lijst. Met het proberen, we moeten gewoon herhalen door middel van de letters in het woord. Dus zelfs als we een stelletje toegevoegd meer woorden aan ons proberen, het zou ons niet langer duren om een ​​bepaald woord te vinden. [00:29:09] Het enige wat we moeten doen is, voor Bijvoorbeeld, in dit geval, laten we zeggen dat we op zoek naar zoom, we zouden gewoon moeten dan herhalen Z-O-O-M, vier letters. Dus dat is nog maar het lengte van het woord zoom. Het maakt niet uit hoeveel meer woorden we in dit proberen. We kunnen altijd krijgen in deze vier stappen. Geweldig. Ja? [00:29:32] Publiek: Dus [onverstaanbaar] is een array, toch? [00:29:34] HANNAH: Mm-hm. Publiek: Als je zoekt [onhoorbaar], zou je moeten gaan door uw array om [onverstaanbaar] vinden? HANNAH: Tuurlijk. Publiek: Is dat niet meer tijd in beslag nemen? HANNAH: Als ik ga zeggen dat mijn array is altijd gaat worden A, B, C, D, E, F, G, blah blah blah, dus als ik weet altijd dat het in exact dezelfde volgorde, als ik weet altijd dat het in alfabetische volgorde, Ik kan alleen maar zeggen O is nummer zo en zo in het alfabet. Gewoon springen naar die plaats. Want vergeet niet, met arrays kunnen we toegang elk element van de matrix voortdurend tijd als we weten waar we naar op zoek. Yeah? [00:30:09] Publiek: Op de vorige schuif [onverstaanbaar] 27, maar 26 voor de eerste. [00:30:14] HANNAH: Sorry? [00:30:15] Publiek: Is niet de eerste een 0, dus zou het niet 26? [00:30:18] HANNAH: Tuurlijk, dus als we zeggen 27, dat is ga geven ons indices 0 tot en met 26. Maar als je eigenlijk te tellen die welke zijn opgenomen, het gaat te zijn 27. Goede vraag. Nog iets anders? Yeah? [00:30:31] Publiek: Dus zijn pogingen langzamer dan hashtabellen? [00:30:34] HANNAH: Tries zullen zijn, in theorie, sneller dan hashtabellen maar ook meer geheugenruimte. Yeah? Publiek: [onverstaanbaar]? [00:30:45] HANNAH: Het spijt me, heb ik je niet horen. Publiek: [onverstaanbaar]. 0 tot 25 geeft je 26. [00:30:54] HANNAH: 0 tot 25 zou geven je 26, rechts. [00:30:56] Publiek: En dan [onverstaanbaar]. HANNAH: Recht. Dus het aantal dat we het opgeven is het aantal dingen in ons aanbod. Dus als we 27, het is gaat om ons 0 tot 26, die geeft ons ruimte, in dit geval, Ik ben niet zoals een apostrof. Dus we krijgen van 0 tot en met 25 zijn de eerste 26 letters van het alfabet, of alle 26 letters van het alfabet. En dan dat laatste ding, bij binnenkomst 26, is gaat om de cheque te zijn merkteken, de delta. Nog iets anders? Geweldig. Verloor mijn ruimte. OK, cool. [00:31:31] Dus we al aangeroerd dit. Maar de grote handel korting tussen pogingen en hash tabellen dat probeert voorzien met theorie, constante opzoeken tijden, maar gebruik een heleboel geheugen. Oké, nu hebben we iets minder ingewikkelde structuren, en we zullen worden gedaan met C, en we zullen direct mee te bewegen. [00:31:49] Dus stacks, dit zagen we in het college waar u hebben iets als een stapel trays waar het laatste wat je op de stapel gaat naar het eerste wat je opstijgen zijn. Dus dat is wat echt definieert een stapel is dat het laatste wat je op gaat de eerste te zijn wat je opstijgen. En de terminologie die we gebruiken als we gaan om iets te zetten, als we gaan om iets toe te voegen onze stack, noemen we dat duwen. En als we iets nemen off, noemen we het knallen. En als we gaan implementeren van een stapel, we moet er zeker bij te houden van zowel de grootte en de capaciteit. Dus het totale aantal elementen kunnen we vast te houden en het huidige aantal elementen wij houden. [00:32:27] En zeer gelijke, we wachtrijen. En het enige verschil is in plaats van met stapels, we zeiden het laatste wat we op is het eerste wat we opstijgen. Dus met wachtrijen, de eerste wat we in gaat het worden eerste wat we eruit te halen. Dus dit is net als je eigenlijk in de rij bij een winkel en je wordt geholpen, dan is de eerste persoon in de rij moet de eerste persoon om te worden geholpen zijn. Dus dat zou een wachtrij. [00:32:52] Dus moeten we voor het bijhouden van de te houden grootte, capaciteit, en het hoofd omdat we gaan om iedereen te nemen uit de voorste van de lijst in plaats van de rug. Vragen over dat? Elke C vragen die je lastig vallen? Datastructuren, een van die leuke dingen? Oké, cool. Dus ik zal het overhandigen aan Alison aan spring in wat meer programmeren. [00:33:14] ALISON: Oh, we zullen zien. We zullen zien hoe goed ik hier doe. OK, ik ga proberen en vliegen door middel van dit spul, jongens. Hannah ging erg in diepte op al haar spullen. Ik ga proberen te geven je snel een ontploffing overzicht zodat we naar Davin kunnen krijgen met alle het plezier JavaScript en veiligheid dingen dat je misschien eigenlijk meer wilt weten over horen. [00:33:33] OK, als Hannah zei, als u nog vragen hebben, Ik ga te snel, alsjeblieft, laat het me weten. Ik zal vragen nodig beantwoorden. Dus om te beginnen, gaan we beginnen met waarschijnlijk een van de eerste dingen je hebt geleerd met web programmering, toestemmingen. Dus chmod, jullie moeten geweest meesters in dit met alle web programmering die je hebt gedaan de laatste tijd. Het is eigenlijk gewoon een opdracht dat verandert de permissies of de toegangsrechten van onze bestandssysteem objecten. Natuurlijk daadwerkelijk zien dat deze, als je met enige moeite met deze tijdens uw probleem sets, je kan hebben gebruikt ls-l, dat is lang, om de weergave soort te krijgen van als dit, waar je eigenlijk zien alle de machtigingen voor een bestand. [00:34:16] En echt, we gaan gewoon om te gaan door vrij snel gewoon vrij veel wat elk van deze betekenen. Dus we hebben hier D, die alleen staat voor de directory. Uiteraard hier zien we rwx, die leesbaar, beschrijfbaar en uitvoerbaar. Deze kunnen ook worden weergegeven als bits, die we zullen krijgen in op de volgende pagina. Zodat elk drietal dat we zagen hier, dus het is drie triades. We hebben rwx, r niets x en r niets x voor deze eerste bestand. Het is deze algemene structuur. [00:34:49] Dus we hebben een aantal directory. We hebben een aantal gebruikersgroep met deze machtigingen. Sommige groep die deze machtigingen heeft, en een wereld die een vergunning heeft. U kunt hierbij denken van deze als een triade. U kunt hierbij denken van deze drie bits. Zodat ze kunnen waarden houden overal van 0 tot 7, daarom soms we hadden je doet chmod 600 in plaats van chmod rw wat dan ook. We komen er wel in een voorbeeld. Maar in principe kan je denkt van deze als ofwel gewoon rwx, of u kunt ze zien als een aantal nummer waar deze eerste hier een getal tussen 0 en 7, de tweede een getal tussen 0 en 7, en de derde een getal tussen 0 en 7, OK? [00:35:38] r heeft een waarde van 4 W een waarde van 2, en x een waarde van 1, dat is waarom deze toestemming hier zou worden chmod 700. Omdat in dit geval hier, het zegt dat we hebben de eerste bit er is omgedraaid op. Dus hebben we 4 voor te lezen. De tweede bit is omgedraaid op voor w, dat is 2, dus nu hebben we 6. En de derde bit is omgedraaid op voor x, dat is 1, dus krijgen we zeven. En natuurlijk, onze groep en onze wereld zijn elk 0. Dus dit is ook equivalent van chmod 700. En ik zou zeker proberen om begrijpen van de mapping tussen deze. Ik weet niet zeker of het heeft komen op een quiz voor, maar het zou een te zijn vraag die ik zou kunnen vragen. [00:36:18] Gewoon een beetje gaan zelfs verder in chmod hier, hier is het algemene structuur van een chmod gesprek. Dus natuurlijk hebben wij hier chmod. Referenties, wat dit betreft is die geven we deze machtigingen om of wie zijn wij het nemen van deze toestemmingen weg van. Dus hebben we een hier in de toestemmingen, zoals we hebben gezien je een plus x chmod, zoals we zullen snel te zien. een rechtvaardige betekent geven deze specifieke machtigingen voor iedereen. Geef ze aan alles. Dus je zou heel goed hebben u plus x of g plus x of o plus x of meerdere daarvan. Dus dat eerste deel is altijd gaat referenties zijn. Wie geven we deze machtigingen om, of die we nemen ze weg van? [00:37:03] De tweede is de operator. Dus jullie hebben meestal behandeld plus. Deze permissies geeft op wie je ze geeft, terwijl minus, logischerwijs, verwijdert ze. Dus niets te verschrikkelijk daar. En dan modi is wat we gesproken over met lezen, schrijven of uitvoeren. Dus een plus x betekent geven uitvoerbare machtigingen voor iedereen. En dan, natuurlijk, waarop specifieke bestand of map. OK? Iedereen goed met chmod? Niet slecht? [00:37:37] OK, dus HTML, iemand van jullie oud genoeg to-- MySpace leeftijd? Ik stuurde dit naar mijn afdeling, en letterlijk de helft van de mensen keek me aan alsof ik gek was. En ik was als, jongens, we zijn niet zo oud. Kom op. Dus HyperText Markup Language, het is eerlijk gezegd gewoon een manier voor u om bepaalde dingen weer te geven op het web. Dus het is een opmaaktaal. Het is niet een scripttaal. Er zit geen logica in. Het is gewoon om het te veranderen manier waarop iets wordt getoond. OK, dus dat is een belangrijk onderscheid maken. Het wordt beschouwd als een opmaaktaal, niet een scripttaal. [00:38:12] Dus hier hebben we onze HTML-tags. Op deze pen zijn waarschijnlijk de meeste degenen die je moet bekend zijn met en zijn echt comfortabel met. Zo duidelijk, we hebben onze HTML-tag, die duidt dat alles in tussen deze twee zal HTML zijn. We hebben een aantal link, die uiteraard zal u geven een link naar een externe webpagina. Sommige titel, binnen hier ons hoofd. En we hebben ons lichaam met h1, die een header, dus het zal het leuk te maken en vet en groter. En dan hebben we een aantal p, hetgeen een paragraaf. U moet waarschijnlijk weten en bekend zijn met de dingen zoals hoe u een afbeelding invoegt, zijn er een andere header klassen? Ik zou zeker zijn comfortabel met div. Dus deze de meeste labels dat je zou moeten kennen. Maar natuurlijk, zoals met alles in CS 50, de lijst is niet uitputtend. Dus zorg dat je penseel op dat. [00:39:08] CSS, dus CSS, als iemand van jullie kijken mijn seminar van twee weken geleden, is eigenlijk gewoon een manier in uw eigen webpagina te stylen? OK, dus we hebben een aantal opmaaktaal. HTML, die zorg draagt ​​voor de tekst enkel en waar het zou kunnen zijn op de pagina. Maar CSS is echt wat maakt het mooi. Je kan deze in uw HTML hebben bestanden, maar zoals we later zullen praten over, Ik ben er vrij zeker van dat het zou kunnen zijn de volgende dia, het is een gangbare praktijk, en eigenlijk praktijk dat we echt aan te moedigen, voor u om ze uit elkaar toen we praten over MVC en dat hele paradigma. Dat is echt wat deze feeds in. [00:39:42] Dus CSS is gewoon een manier om dingen te laten kijken mooi. De dingen die hier, net als lichaam en #title en .info, deze zijn selectoren en welke genoemd ze doen is dat ze specifieke dingen te selecteren binnen uw HTML-bestand en toe te passen welke stijl, wat voor soort dingen die je wilt, dat specifieke element van uw web- pagina. Dus hier hebben we een achtergrond kleur en een kleur en een lettertype dat wordt toegepast op wat in het lichaam. Dus als we keken hier terug, het zou niet voor de titel. Het zou alleen gelden voor wat in deze lichaamsdelen selectors, OK? [00:40:22] Met titel hier, dit is zal hetzelfde zijn, de kleur van de tekst het zijn blauw is alleen maar te beïnvloeden wat er binnen de titel selectors. Evenals info hier, De tekst zal worden roze, wat de info, dat is hier. Dus het enige dat roze op deze pagina zou zijn is de datum, maandag 17 november, 2014. OK, dus CSS is gewoon een manier om meer controle over-- ja? [00:40:48] Publiek: Waarom moet je om de hash met titel gebruiken? [00:40:51] HANNAH: Volgende dia, beloofd! We komen er wel. Dus dit is de reden waarom we moeten hash gebruiken. Dus selectors nemen op drie belangrijke vormen die we praten met jullie over. Ik fyou meer wilt weten, er is genoeg die er zijn. Er is grote CSS documentatie. Er is een tag naam, die te maken heeft met alleen je normale-tags in HTML. Dus h1, p, div, h2, dat soort dingen. En we kunnen alleen de naam die zo is. Dus als we hier zien met lichaam, het is een normale tag. Dus we kunnen gewoon lichaam wanneer we hebben het hier in onze CSS-bestand. [00:41:26] Met de titel, de hele reden dat we hebben deze hash is hebben we wat als een ID. Dus een ID moet altijd uniek binnen uw HTML-pagina zodat wanneer u bent verwijzend naar het, u weet dat je alleen verwijzen om één specifiek ding. Dus in dit geval hier, met onze h1 hier, CS 50 beoordeling sessie, we hebben een id van de titel. Dus om gewoon te verwijzen naar die stuk van onze HTML, doen we een hash titel. Gewoon door afspraak worden IDs aangewezen met een hekje in de voorkant van hen. Evenzo zien we info hier is een klasse. En zo klasse met CSS is aangewezen als een stip klasse of dot wat die klasse is. Dus in dit geval hier, het is info. [00:42:10] Dus ik neem het terug. Beide zou roze voor onze CSS hier want ze hebben allebei een klasse van informatie. En in onze CSS-bestand, hebben wij aangewezen dat alles met een klasse van info is roze. Heeft dat zin? Ja? [00:42:27] Publiek: Als je om te maken alles in het lichaam wit, en dan probeer je te maken iets in het blauw, zou dit problemen veroorzaken? [00:42:34] HANNAH: Dus CSS is cascading style sheets. Dus wat is de richting van de bodem zal prevaleren. Dus als je iets doet met het lichaam, en je alles wit te maken, en dan later op de titel te wijzigen of u de tekst in het lichaam te veranderen, overschrijft dat. Dus alles in de richting van de bodem zal prevaleren. Ja? [00:42:56] Publiek: En id's uniek zijn, maar klassen kunnen meer zijn? HANNAH: Recht. Dus id moet uniek zijn, en klassen kunnen verwijzen naar zo veel dingen als je wilt. Een andere vragen? Ja. [00:43:09] Publiek: [onverstaanbaar]. Ik vraag me af of dat maakt een verschil. HANNAH: Het spijt me, wat was de vraag? Publiek: Er is klein "F" en kapitaal "F." HANNAH: Dus het verschil tussen kleine "f" en kapitaal "F" zou geen verschil maken. Dus "f" zal zijn 15 in beide richtingen. Cool, iets anders? Iedereen goed, CSS? Ja? [00:43:30] Publiek: Sorry. Kunt u een klasse en een ID? [00:43:35] HANNAH: Ja, dat kan. Dingen kunnen zowel een klasse en een ID hebben. En ik beveel het testen van deze op uw eigen. CSS je gewoon het beste leren door het maken van iets, zeer eenvoudig webpagina, het opstellen van een aantal CSS, en net zien hoe ze met elkaar omgaan. En je zult krijgen een zeer goede, intuïtief gevoel voor hoe het werkt. [00:43:56] OK, iedereen goed met CSS? Je bent helemaal gaat maken mooie websites met CSS nu. OK, best practices, net dingen in gedachten te houden, dingen dat-- dit is waarom we aanmeren u voor de ontwerper en wat al niet. Dus sluit al uw HTML-tags. Dus als je een open lichaam, moet er een nauw lichaam. Als u een open paragraaf, moet er een nauw paragraaf zijn. Controleer uw pagina valideert. Jullie moeten zeer vertrouwd zijn deze uit-p zeven met CS 50 finance met de W3 validator. En zoals ik al eerder zei, één van onze grote paradigma's wordt het scheiden van uw stijl met CSS uit je markup, dat is HTML. En dan, natuurlijk, we hebben deze grote XKCD hier beneden. Yay, comic relief! [00:44:38] OK, TCP / IP. Tussen deze en HTTP, in principe zijn ze beide protocollen. Dus je kon gewoon denken van hen als een set van regels dat de manier waarop de dingen regeren bewegen over het internet. Dus transmission control protocol, of internet protocol, is gewoon een manier om ervoor te zorgen die gegevens krijgt waar het heen gaat en dat we weten of we ooit zijn ontbrekende gegevens. Dus als jullie denken terug naar college een paar weken geleden met David waar we hadden vier enveloppen, ze werden alle geteld als een van de vier, twee van de vier, drie van de vier, vier van vier, dit is gewoon een set van regels. Wij zeiden, OK, wanneer we verzenden meerdere pakket, we gaan naar nummer het met welk nummer het is en hoeveel totaal dat de gebruiker moet krijgen. [00:45:19] En dit is gewoon te vertellen wie ontvangt de gegevens of deze alles of hebben gekregen indien iets verdwaald langs de weg. En ze moeten weer om vragen. Dit is eigenlijk gewoon een set van regels. Dat is hoe je kunt denken, OK? En ook, het geeft de poort, die jullie can-- Ik weet tijdens hoorcollege, ze had een hele lijst van de havens. Maar we hebben niet ze hier nu hebben. [00:45:41] Dus hypertext transfer protocol is, nogmaals, het is een ander protocol. Dus het is een andere set van regels die bepalen, in dit geval, hoe hypertext wordt overgedragen. Zodat het net laat browsers webservers te spreken. En zoals we hier al zei, het is als menselijke handshaking. Het is gewoon een manier om te regeren hoe de webserver is gaan om te communiceren met uw browser. En we hebben maar een paar voorbeelden. We hebben een aantal verzoeken hier waar GET is de methode. We hebben HTTP 1.1 die is protocol versie voor ons. En dan, de gastheer, dat is wat we eigenlijk probeert te openen. En dan, zoals je hier ziet, we nog wat respons met deze 200 OK als onze HTTP response code. We hebben een grote lijst ga ik om omhoog te trekken in één seconde dat jullie zou moeten kennen. En we hebben dit soort inhoud tekst / HTML, die gewoon zegt wat voor soort data worden we ontvangen van de server, OK? Deze gastheer en dit soort inhoud deel van de HTTP-headers. U kunt zo weinig of zo weinig als hebben voor de context van wat je mee bezig bent. Soms heb je een heleboel hebben informatie afkomstig van uw server. Misschien zijn ze het aanvragen van een veel van informatie van de gebruiker. Het is afhankelijk van de context. Als je kijkt naar CS 50 Study, er is veel meer op dat. Maar we hebben veel te krijgen door, dus ik ga om recht vooruit als go dat is OK met jullie? Cool. Wacht even. Ik heb beslist dat hele lijst van-- he! Ik weet niet waarom dit is helemaal hierheen. Ik dacht dat ik letterlijk verplaatst terwijl ik was sitting-- [00:47:15] DAVIN: Wilt u om het te leren? Of wil je dat ik om het te leren? [00:47:17] Publiek: Ik dacht dat we konden gewoon laten zien om mee te beginnen. Ik bedoel, je kunt gaan in deze verder, maar dacht dat het maakte meer zin omdat ik was het net over HTTP-status. Dus hier is de hele lijst. Ik denk dat wat er gaat gebeuren is Davin gaat later naar hen gaan. Maar er is een hele lijst, een voorvertoning van de smaak te komen. OK, we gaan blow-- dit gaat naar een PHP spoedcursus als geen ander zijn. [00:47:41] Dus PHP, hypertext preprocessor, het is een recursieve backronym, wat betekent dat het was iets anders genoemd. En toen waren ze als, dit niet echt zinvol. Zodat ze gewoon de naam het-- en het was een acroniem, zodat ze gewoon maakte het PHP hypertext preprocessor, die gewoon geen zin. Leuk verhaal. Het is een programmeertaal. Zo veel als ik benadrukken dat HTML is geen programmeertaal, het is een opmaaktaal, PHP is een programmeertaal. Hoe weet je dit is omdat er logica. Er zijn conditionals. We hebben variabelen, terwijl we hebben geen van die dingen in HTML. [00:48:12] Oké, dan hebben we deze kleine beetje hier, dat is als een voorproefje van PHP. Dus basics, namen van variabelen beginnen met een dollarteken. Veel mensen het leuk vinden. Herinnert van ons geld. Het is allemaal geweldig. We willen allemaal PHP. Zodat we niet opgeven van een typevariabele's meer. Het wordt bepaald tijdens runtime. De tolk zal net als zijn, oh, we zullen gewoon doorlopen, en volgens de context we zullen zien wat soorten types deze variabelen moeten hebben. Er is geen hoofdfunctie. Dingen zullen gewoon draaien. Jullie met je importeren in je last-p ingesteld, zult u dit merken. Er was niet echt een belangrijke functie. Je schreef net wat je wilde gebeuren. En het gebeurde gewoon. Dus dat is PHP voor u. [00:48:56] Arrays zijn zeer vergelijkbaar. We hebben nog steeds deze beugel. Hier hebben we een aantal variabele riep arr, en het is gelijk to-- hebben we onze normale haakjesnotering. En we hebben een aantal belangrijke waarde. En het grote verschil tussen C en PHP arrays is dat we dit associate-- kunnen hebben kunnen we waarden koppelen aan toetsen. Dus in plaats van enkel het hebben van een array die wordt geïndexeerd door het aantal of de positie van dat element in de array, We kunnen nu associëren met een sleutel. Waar we kunnen zeggen, OK, ik wil wat waarde wordt geassocieerd met fruit. En misschien hebben we fruit ging naar banaan. Dus het zou banaan aan ons te retourneren. [00:49:41] Maar in principe, de meest krachtig ding over dit is dat als jullie denken aan de demo uit lezing waar we in principe herschreef speller in PHP, en het was-- lookup was eigenlijk alleen maar wilt, Deze toets bestaat? Dat is echt een soort van de kracht ervan. Je hoeft niet te herhalen door je array. U hoeft niet te weten wat ruimte is in. Het kan aan het begin of einde. Zolang je de sleutel kennen dat is gekoppeld aan de waarde, PHP kan gewoon spugen die waarde meteen weer uit op je, OK? [00:50:09] En dan ook gewoon hebben alleen maar omdat we kunnen belangrijke waarde paren hebben betekent niet dat je hoeft te doen. U kunt ook gewoon maken een normale serie zoals hier, op de bodem, waar het één, twee, drie, vier. Dat zijn onze waarden. En inderdaad, de sleutels zijn de indices. Dus de sleutel voor een nul zou zijn. De sleutel voor twee zou één. Enzovoort enzovoort, tenzij je een sleutel expliciet toe te wijzen, je zou kunnen veronderstellen dat de waarde is gewoon hun index. Is dat zinvol voor iedereen? Geen vragen? Geweldig. [00:50:38] OK, foreach is een manier om doorloopt uw ​​arrays. Dus we iets hebben hier, alleen de algemene structuur. Dus foreach, de naam van onze array, als wat je wilt elk gesprek element in de array, en we kunnen iets doen met dat element of die waarde. Dus we hebben hier een voorbeeld. We hebben een associatieve array met beide ingangen met bar wordt geassocieerd met foo en QHx wordt geassocieerd met baz. Dus toetsen zijn foo en baz. Waarden zijn bar en qux. Dus foreach, hebben wij ons aanbod Hier, als de sleutelwaarde paar. Dit stelt ons in staat om toegang te krijgen zowel de sleutel en waarde. Misschien wilt u gewoon de waarde, waarbij je kon gewoon doen, zoals arr als $ waarde, en dan moet je zijn gewoon de toegang tot de waarde zoals u doorlopen. Maar misschien, voor sommige reden, je de sleutel wilt, dat is waarom ik koos dit voorbeeld plaats. Dus je kunt eigenlijk te manipuleren sleutel en waarde in dit geval. OK? Vraag? [00:51:41] Publiek: Als je wilde gewoon manipuleren van de sleutel, zou je hoeft te doen foreach-- [00:51:45] ALISON: Recht. Dus als je wilde manipuleren gewoon de sleutel, je zou dit nog moeten syntax, want als je gewoon hebben arr als iets, als een ding, het is ga ervan uit dat u wilt de waarde, niet de sleutel. Dus als je ooit gewoon net als arr zo, misschien is dit element $, het gaat om te veronderstellen dat je vraagt voor slechts de waarde op elk punt. Als u expliciet wilt iets te doen met de sleutel, zelfs als je niet van plan om iets te doen met de waarde, u deze structuur nodig dat we hier hebben waar je expliciet vraagt voor zowel de sleutel en de waarde. Grote vraag. Nog iets anders? Cool. [00:52:27] Oké, PHP en HTML. Oh, we zijn terug naar-p stelde zeven opnieuw. Dus dit moet een beetje bekend voor. Dus dit is een aantal eenvoudige HTML-formulier dat heeft wat input naam van hello. En we zien hebben we onze methode van GET. En als we ons herinneren uit onze p-set, wanneer dit formulier wordt ingediend, stuurt een array genaamd $ _GET dat heeft al deze inputs of variabelen van de vorm die moet worden gemanipuleerd in onze PHP. Dus in dit geval, de gebruiker zouden in hun naam te zetten. Ze leggen het. En we zien dat we nog wat scala hier. Wij hebben onze GET array. En we zijn met de toegang tot naam. [00:53:11] Dus dat zegt, OK, geef me de waarde die wordt geassocieerd met de naam, noem zijnde de sleutel hier. En die kaarten direct naar wat zeiden we onze inbreng naam is. Dus dit was het geven u de sleutel tot wat gaat worden in de array hier. Is dat zinvol voor iedereen? Ja? [00:53:32] Publiek: Zegt de naam in GET verwijzen de paarse lijn in [onverstaanbaar]? [00:53:36] ALISON: Het verwijst naar deze hier. Dus dit gebied hier, het verwijst naar de naam in. Dus dit had kunnen worden genoemd zoals telefoonnummer, of wat dan ook. Deze naam zegt eigenlijk, wat belt u op dit gebied? Hoe ga je om verwijzen naar dit gebied? En deze naam is eigenlijk willen, we zijn zeggen dit gebied heet naam. Dat is hoe we gaan om toegang te krijgen. [00:53:59] Publiek: Dus is het leuk, ingangsnaam gelijk Bob, en-- [00:54:02] ALISON: Rechts, dan moet je zou Bob daar beneden te krijgen. Precies. Iedereen cool? Oké, dus GET versus POST, Dit zijn de twee belangrijkste manieren dat wij geven de gegevens in een HTTP-verzoek. Jullie moeten zien beide hopelijk. Dus met GET, de informatie wordt door de URL. Dus als je ooit doet Google zoekopdrachten, YouTube, zult u waarschijnlijk opvallen dat sommige vraagteken. En dan, alle woorden dat zet je gewoon in. En POST geeft de gegevens door in het HTTP-bericht. Dus in tegenstelling tot GET, je soort van overwegen dat de gegevens voor de gebruiker verborgen. Maar wat echt belangrijk om te begrijpen is dat nog net zo onzeker als GET. De analogie ik graag gebruik is als je hebt je bankrekeningnummer en je schrijft het op de buitenkant van een envelop, dat is vrij onveilig. Als je om het te schrijven op een stuk papier en zet het in de envelop, het is nog steeds echt onveilig, omdat alles wat je hoeft te doen is open die up en kijken naar de werkelijke inhoud van het bericht te zien dat. Dus dit is "verborgen", en mensen willen denk dat het veilig is, maar het is echt niet. En ik ben er zeker van Davin zal krijgen in dat er meer, misschien. Maar het is een belangrijk onderscheid te maken en iets echt goed te begrijpen. [00:55:15] OK, SQL, Structured Query Language. Alle dingen die we hebben zo kort geleden gezien! Dus het is eigenlijk gewoon ontworpen, natuurlijk, voor het beheren van gegevens. Jullie hadden veel ervaring met dit in uw tafels met PHP MyAdmin. En er zijn vier gemeenschappelijke queries dat we willen dat jullie weten. Dus er is-update, insert, selecteren en te verwijderen. Dus zorg ervoor dat je weet dat die echt goed. We gaan om te gaan door hen echt snel. [00:55:40] Dus werken, echt, als wat je zou denken dat het doet, het gewoon updates gegevens in uw database. Dus we hebben hier een aantal voorbeeld. Dit is de algemene structuur van een update query. Zodat we de tabel bijwerken dat we het over hebben. En we willen zeker stellen waarden aantal kolommen gelijk aan specifieke waarden. Dus dit gewoon werkt de tafel, het veranderen waarden in alle rijen in dit geval. Dus in dit ene naar beneden hier, een feitelijke Zo hebben we insert-- sorry. Die dia geavanceerde zonder mij te beseffen. [00:56:17] Dus deze updates tabel col1 gelijk om val1 waar huis gelijk "Currier." Wat dit doet is hij alleen, alleen actualiseert deze waarden in specifieke plaatsen. Dus in deze eerste, zij deze verandert waarden voor alles in uw tafel, OK? Het gaat om dit te veranderen kolom voor elke binnenkomst, voor elke rij. Maar dit waar, je kon denk aan het als een qualifier. Dus het is alleen maar gaat veranderen het op zeer specifieke plaatsen. Dus in-p zeven, wanneer u misschien is de hoeveelheid contant geld bijgewerkt of uw gebruikersnaam had, waarschijnlijk had je wat waar ID gelijk sessie-ID, toch? [00:56:53] Omdat je niet wilt verander de hoeveelheid contant geld voor elke persoon die werd met behulp van uw website. Je wilde om het te veranderen voor één bepaalde persoon, die persoon zijn wie was het gebruik ervan in die tijd. Rechts? OK, dus plaatst, insert bepaalde waarden in tabellen. Dit is hetzelfde als wanneer je bent het creëren van een nieuwe gebruiker. De algemene structuur hier is in te voegen in welke tafel we hebben het hier over. Waarden, zijnde de waarden die we eigenlijk wilt invoegen. OK, dus als we hier zien, we hebben invoegen in tabel. Dit is specifiek kolommen hun waarden overeen. Dus dit zegt, insert een nieuwe rij met waarden val1 en val2 onder deze specifieke kolommen. [00:57:33] Dus misschien heb je alleen wilt vullen uit de helft van de dingen in deze rij. Dat is wat dit deel hier laat je doen. Het laat je eigenlijk bepalen welk deel. Ja? [00:57:44] Publiek: Kan u alleen [onverstaanbaar] cellen in de rij [onhoorbaar] [00:57:52] ALISON: Als u alleen in te vullen bepaalde delen van uw rij, de rest van die cellen zijn gewoon leeg. Zolang je hen in staat te stellen leeg zijn, het is niet een probleem. Als u probeert om ze te openen, het is ga een aantal lege element terug. Maar het is belangrijk om te weten dat in bepaalde tabellen, zij hebben om te mogen null zijn. Je hebt misschien lopen in een probleem tijdens uw p-set omdat we geen lieten van je waarden null zijn. Maar je kunt een opgeven optionele waarde in uw tafel. [00:58:26] OK, selecteren, dus dit is gewoon een manier om gegevens uit een tafel bij sommige id die u wilt. Dus selecteer ster van tafel waar col is gelijk aan iets betekent gewoon, geef me alle gegevens in verband waar bepaalde kolom waar. Dus de ster in dit geval zal keren de hele rij aan u, OK? [00:58:49] En dan, selecteert u in dit geval ster uit tabel geeft je gewoon de hele tabel. En dan, verwijderen natuurlijk, het is gewoon verwijdert de rij van de tabel. Dus verwijderen van tafel, welke tafel we zijn verwijzingen, waar een aantal specifieke identifier of een voorwaarde waar is. Ja? [00:59:07] Publiek: Vraag. Waarom bent u met behulp van dubbele citaten, en of u doen dubbele aanhalingstekens of single citaten, het maakt een verschil maken? [00:59:13] ALISON: Dubbele aanhalingstekens of enkele aanhalingstekens maakt geen verschil in SQL te maken. Ik dacht dat ik een andere vraag zag. Ja? [00:59:20] Publiek: Is het niet van invloed op wat krijgt ontsnapt uit de query? [00:59:25] ALISON: Rob? [00:59:27] ROB: Wat bedoel je met ontsnapt uit de query? [00:59:31] Publiek: Als iemand een enkele query in de vorm van-- [00:59:36] ROB: Als iemand zet een enkel aanhalingsteken in, vervolgens zo lang als je schoonmaken uw inbreng, dan maakt het niet uit. Maar als je met een enkele offerte en u bent verkeerd ontsnappen uw input, dan ja, die ze nodig hebben om een ​​enkele offerte in te breken zetten uw code. als u dubbele aanhalingstekens te gebruiken, moeten ze een dubbele te zetten citeren om uw code te breken. Maar zolang je dingen ontsnappen correct, het maakt niet uit. Het gaat gewoon om te worden vertaald om de juiste symbool toch. [00:59:59] Publiek: Wat betekent ontsnapping betekenen? ALISON: Nou, als sanering en ontsnappen. Het examen dat we hebben, het grote XKCD komisch dat ze omhoog te trekken, waar je hebt, oh-- ROB: Het is de laatste dia. ALISON: Het is de laatste dia, echt? O mijn god. Daar gaan we, perfect. OK, dus in principe, kunt u injecteren iets in deze SQL-query wanneer het breekt uw code, of als David toonde in de klas, als we een aantal enkelvoudige citaat 1 is gelijk aan 1 en als in onze code, we gewoon rechtstreeks te kopiëren dat in, en wij hebben een eindigende enkel aanhalingsteken, wat er gebeurt is we krijgen enkele uitdrukking die evalueert naar waar dat zal laat iemand voeren onze database en krijg gegevens die we wil niet dat ze te krijgen. Dus zuiveren de ingangen betekent gewoon om ervoor te zorgen dat we zijn ontsnapt deze personages en ze toe te wijzen als chars en niet dingen dat moet worden toegestaan letterlijk te nemen als onze SQL-instructie. [01:01:04] Dus de grote ding dat we zeiden dat jullie moeten zijn met behulp van waren HTML speciale tekens, dat is iets dat je zou willen om een ​​kijkje te nemen. OK, verwijderen. Datatypes, zal dit allemaal online zijn. Aangezien we 15 minuten hebben verlaten, ben ik gewoon om te gaan dwars door dit. PHP en SQL, in principe is dit alleen hadden we een query functie die bijgedragen tot de bescherming tegen deze kwaadaardige aanvallen. Dus wanneer je gebruik maken van query, we waren om ervoor te zorgen dat de dingen werden ontsmet en zo. [01:01:36] MVC is slechts een ontwerp paradigma, dus model, uitzicht, controller. Het is gewoon een manier om dingen te houden mooi en splitsen op dezelfde manier dat we de neiging om factor out code in functies. Dit is slechts een webdesign kader die u toelaat om hetzelfde te doen. Ik ga deze overslaan. [01:01:54] Dit is iets dat ik zou super comfortabel met zijn. Het is een geweldige kleine tafel daar. Het geeft je de functie voorbeeld van het model. Ik ga gewoon doorheen, omdat ik echt willen Davin te kunnen praten. Als u vragen heeft, aarzel dan niet. Ik zal hier na te zijn. Kom gewoon met me praten. Met dat, we hebben HTTP-status. En Davin's gaan blazen door deze in 15 minuten. Dit gaat geweldig zijn. [01:02:17] DAVIN: OK. Uh, je microfoon? Yeah. Sorry. ALISON: Manier om voorbereid. DAVIN: Nee, ik ben er klaar voor. Ik ben klaar. Laten we dit doen. Het is klaar. OK. Sorry. Ik gemorste koffie op mezelf. Ik weet niet of ik ben meer overstuur dat ik dom kijken, of dat ik geen koffie meer. Hoe dan ook, gewoon een snelle aankondiging over het blad dat u jongens hebben. Dus dit blad hebben jullie niet de officiële wat er op de quiz. Dit is de officiële wat er op de quiz. Ook op de website, we vertellen je, OK, dit zal zijn op de quiz. Dus in de kleine spiekbriefje je hebt, niet officieel. En er zijn fouten op. Dus best niet alleen blindelings te gebruiken. Dus ja, dat is dat. Dus laten we in dit echt snel. [01:03:05] Dus HTTP-status. Dus wat gebeurt er als de website, alles in orde is. OK Everything's. Alles komt terug naar u de manier waarop u dat wilt. Je krijgt een 200 OK. 301, waar hebben we dat 301 eerder gezien? Wacht, wat is er? Sorry. We zagen i tin lezing tijdens de beveiliging. Dus tijdens de beveiliging, dus als David getypt in http en vervolgens probeerde te gaan naar cs50.net, je gaat om te zien 301 verplaatst. Waarom? Omdat het gaat om te buigen u automatisch naar onze HTTPS. [01:03:35] Dus 301 verplaatst, gewoon het is eigenlijk een omleiding. En je kunt denken als dit. Elk van de statussen die beginnen met 2's, deze zijn als, OK, alles is OK. Elk van de statussen die beginnen met 3, dat zijn omleiding. Statussen die beginnen met 4, dat betekent er is een soort van client fout. Statussen die beginnen met 5, dat is een soort van server error. Dus je soort breken de statussen als dat. Dus 304 niet gewijzigd, zodat in uw server.c p-sets, dus laten we zeggen dat je geladen cat.html. Alles komt terug, je krijgt 200s, OK, geweldig. [01:04:03] Laten we zeggen dat je het ververst. Nou, in die cat.html, heb je een JPEG. Nou, dat JPEG is niet gaat krijgen herladen. Je gaat niet naar een andere plaatsen GET verzoek naar de server, en dan al die informatie terug te krijgen. Het gaat gewoon be-- dat imago is gaat worden in de cache op uw machine. En zo dat het zal een 304. Dus het is niet gewijzigd. Als je dan sluiten uit, duidelijke koekjes, en vernieuw en proberen om die pagina te laden nogmaals, je gaat naar 200s zien. Je bent niet van plan om te zien dat 304. [01:04:28] 400, slechte verzoek, echte snel, net als u gingen een stuur JSON object naar de server en uw JSON object was onjuist, je zult zoiets zien. 403, verboden. Wanneer zou u een verboden? Waarschijnlijk Waarschijnlijk? Publiek: Chmod. DAVIN: Chmod, ja. Dus je hebt niet ingesteld permissies correct. 404 niet gevonden. Het is er gewoon niet. Dus als je typt in de verkeerde URL. 500, internal server error, de server Waarschijnlijk werd niet correct geconfigureerd. Iets wat niet op uw einde, maar iets op de server kant. En 503? Veel mensen zagen 503s in de laatste p-set. Wanneer zou dat gebeuren? Ik hoorde gefluister. [01:05:05] Publiek: Wanneer Google besluit je bent een robot. DAVIN: Ja, wanneer Google beslist je bent een robot, je krijgt 503s. Dus dat is een overbelasting. Als je hebt aangevraagd bij de server te veel, het is meestal tijdelijk. En de meesten van jullie opgevallen. Dus je zag 503. Je zou een beetje hebben genomen pauze, toen ging de 503s weg, en alles was in orde. [01:05:20] GABE: Real snelle, wanneer doen jullie krijgen 500 in waarschijnlijk dit laatste probleem te stellen? Ja? [01:05:27] Publiek: Meestal als de server een bestand misplaatst of [onverstaanbaar] hun machine [onverstaanbaar]. [01:05:34] GABE: Dus is het misschien een configuratie probleem in je PHP op uw server. Maar het zou wel eens iets zijn als een puntkomma die uw aanvragen. Als u typt PHP, sommige onjuiste syntaxis misschien krijg je zoiets. OK? [01:05:46] DAVIN: Cool. Wil je dat ik gewoon omhoog doen tot AJAX? [01:05:51] GABE: [onverstaanbaar]. DAVIN: OK. Dus wat is het DOM? Wat betekent DOM voor staan? [01:05:55] Publiek: Document Object Model. DAVIN: Nice. En waarom hebben we het leuk? Geweldig. Rechts, zodat het net laat ons toe om de toegang de HTML, toegang tot onze pagina zeer snel. Waarom? Omdat we behandelen onze pagina, het behandelen van onze HTML-tags, het behandelen van alles alsof ze objecten. Als we ze nu te behandelen alsof ze objecten, wat kunnen we doen? Nou, we kunnen functies een beroep op hen. En dit is belangrijk waarom? Nou, omdat we gaan gebruiken JavaScript om onze HTML te werken, actualiseert deze objecten. Dus als we ze behandelen als objecten, kunnen we dan bellen functies op hen. Ik ben van plan om in deze een beetje meer wanneer ik in JavaScript, maar je hebt al gezien als document.getElementById. Dus document is uw element, krijg element door ID, dus je gaat kijken voor sommige ID in een HTML-tag. En dan kan je doen iets anders dat. Bijvoorbeeld, als document.body, dan kunt u toevoegen kind. Dus je gaat om het document te vinden. U hebt het document. Je gaat naar het lichaam te vinden. Je vond het lichaam. En dan, je gaat noemen een functie op. Dus voeg kind, en je kunt toevoegen wat HTML op het uiteinde in je lichaam. Dus eigenlijk, je bent gewoon behandelen het als een object. Je bent het behandelen van HTML tags zoals een object. En het maakt het zeer eenvoudig en snel te gaan via hen. Maar het laat je ook om functies aan te roepen op hen dus je kunt manipuleren en verander de elementen. [01:07:04] GABE: Gezien dit, waarom is JavaScript dergelijke een leuke taal om te communiceren met HTML? Kansen zijn, wanneer mensen werden kiezen De taal van de browser, voor client-side, Javascript is echt leuk, het is echt goed in het omgaan met objecten. En de objecten zijn soort graag de voorwerpen die in de HTML verschijnen dus het is heel gemakkelijk voor JavaScript om dat soort behandeling doen. DAVIN: Nice. Dus hier is slechts een voorbeeld. Dus ik denk dat op quiz van vorig jaar, of misschien twee jaar geleden, hebben we vroeg je om een ​​boom te creëren. Dus dit is precies wat je zou doen. Dus je begint met een document. En dan eigenlijk je kijk maar naar de labels. Dus als je kijkt, we beginnen met een HTML-tag. En dan, aanwijzingen over hoe je je doen dit op basis van de insprong. Dus hoofd soort takken af. In het hoofd, hebben we andere tag voor de titel. Dus dan hebben we een titel tag. En binnen dat hebben we enkele string. En dus hebben we vertegenwoordigen een string in een cirkel. En alle tags zijn in vierkantjes. [01:07:54] En als je kijkt, als we Denk aan dit als een boom, en laten we zeggen dat HTML is een ouder, dan hoofd en lichaam gaan om broers en zussen zijn. Ze zijn beiden gaat worden kinderen van die ouder. Dus omdat ze beide broers en zussen, ze zijn naar soort naast zijn elkaar in onze boom model. En dan, u in principe doen precies hetzelfde. Dus niet moeilijk, maar we hebben gevraagd vragen als dit eerder op de quiz. GABE: Heeft iemand hebben vragen tot nu toe? Is het goed? DAVIN: Cool. JavaScript, OK, de goede dingen. Dus JavaScript, wat is JavaScript? Nou, is-- JavaScript het is ingewikkeld, maar deze zijn enkele van de hoogtepunten die je in gedachten moet houden. Ten eerste, het is losjes getypt. Wat betekent dat? Dus PHP was-- ja, wat is er? [01:08:35] Publiek: Je hoeft niet expliciet te staat wat voor soort variabele het is. DAVIN: Perfect. Dus hij zei dat je niet hoeft te expliciet het type variabele. Zo is het precies. Dus in C, als ik had int i gelijk is aan 50, vervolgens in PHP, het is net als dit, $ i, is gelijk aan 50. Toen in JavaScript, wat zou het gesprek zijn? Var, toch? Het zou zijn var i is gelijk aan 50. Maar je hoeft niet zo te zijn zoals, OK, is dit een int. OK, dit is een tekenreeks. Geen behoefte om dat te doen. Het is een geïnterpreteerde taal. Dus wat betekent dat? [01:09:04] Publiek: Niet samengesteld. [01:09:06] DAVIN: Wat niet gecompileerd betekenen? Yeah? [01:09:11] Publiek: Je hoeft niet om de code te herstructureren om het klaar te krijgen de computer te draaien. Het zojuist bij de uitvoering en de computer [onverstaanbaar]. DAVIN: Ja, dus het gaat om passeren via een tolk. Maar je hebt helemaal gelijk. Dus je zult nooit om het te compileren, toch? Als je aan het doen waren uw PHP en JavaScript-code, je nooit opgeroepen compileren. Je hebt nooit iets als geroepen maken of iets dergelijks. Dat komt omdat het wordt geïnterpreteerd. Dus elke keer als het gaat via de browser, het gaat door een tolk. En dat gaat om het interpreteren net in real time meteen voor u. Dus wat zijn sommige positieven en negatieven het hebben van een geïnterpreteerde taal en het hebben van een gecompileerde taal? Dus compiling-- ja, wat is er? [01:09:50] PUBLIEK heeft: Uitgelegd is langzamer. DAVIN: In welke zin? [01:09:57] Publiek: Nadat u compileren, hoeft u niet geen extra stappen te doen om uit te voeren het, dat deze [onverstaanbaar]. [01:10:04] DAVIN: Rechts, perfect. Dus wat je zegt is in feite dat compileren, wanneer je compileren, heb je een veel kosten vooraf, toch? Je gaat om het te compileren. Maar nadat u het te compileren, de compiler gaat om het te optimaliseren. Het gaat snel. Het gaat in principe worden zo snel als het kan zijn. Vertolking, je nooit hebben dat upfront kosten. Integendeel, het gaat om iets langzamer te zijn elke keer dat je het interpreteren. En je gaat te hebben om interpreteren elke keer weer. Dus in plaats van deze eenmalige kosten, nu ben je gaat te hebben om het te interpreteren elke keer dat de pagina. [01:10:29] Dus tolken zijn goed omdat je hoeft niet om het te compileren, maar ze zijn slecht in dat iedere keer dat de pagina wordt geladen, het is gaat te hebben om interpreteren JavaScript. En het gaat om iets langzamer draaien dan als je om het te compileren. Hiermee kunt u communicate-- oh, wacht. Gebruikt om het manipuleren inhoud en het uiterlijk. We hebben net gesproken over dat. Het gebruikt de DOM. AJAX, we krijgen in AJAX in een klein beetje. En dan, het is client side. Dus PHP is server side. Javascript is client side. Wat zijn positief dat? Het zegt het. Het is sneller, toch? Omdat je niet hoeft to-- het is sneller. Je hoeft niet te communiceren met een ander apparaat. Als je gewoon op je client, je bent nooit gaat te hebben om te gaan en zien wat er op de server en dan verslag uit of iets dergelijks. Dus client heeft de neiging om zijn een beetje sneller. [01:11:15] GABE: Ja, maar dit betekent niet dat PHP is sneller dan JavaScript of iets dergelijks. Ze lopen soort in dezelfde snelheid omdat ze beiden geïnterpreteerde talen. Het ding dat is langzaam hier is het verzoek. Dus je bent eigenlijk aan de hand de hele weg naar Brazilië om wat informatie te krijgen die daar woont. Maar PHP en JavaScript, ze soort draaien in dezelfde snelheid. Het is niet dat men sneller dan de andere. Dit, ook, strikvraag hier. Dus JavaScript wordt nooit machine code, waar of niet waar? [01:11:47] Publiek: Valse. GABE: Valse. Het moet de machine worden code omdat machine code is het enige wat de machine begrijpt. Ook al is het niet gecompileerd, het wordt nog steeds machinecode omdat de tolk is gewoon een programma dat gaat regel voor regel en transformeert die lijn in iets wat de computer begrijpt. OK? Cool. [01:12:08] DAVIN: Hier is slechts een zeer fundamentele Hello World JavaScript-programma. Dus ik weet niet if-- je dit hebt gezien. Maar je hoeft alleen HTML hier. En in plaats van het daadwerkelijk kunnen de JavaScript in het script-tags, dus je zou normaal gesproken zet het in het hoofd. Je hebt script-tags. Je zet het daar neer. Alles wat we hier hebben gedaan is dat we gekoppeld in-- dus we hebben verbonden in een JavaScript-bestand zoals dit. En je hebt alles gedaan, toch? Dus als je met behulp van jQuery en underscore.js in de laatste p-set, je geen tonnen code up hebben in je script-tags, in je hoofd. Je kan dat doen, maar in plaats daarvan je bent gewoon te koppelen in. En je bent te koppelen in net zoals je met CSS. Zodat het net maakt het makkelijker om dit te lezen uw code is niet hetzelfde als 1000 regels lang met tal van functies die je zou niet gaan gebruiken. [01:12:52] In plaats daarvan, je gewoon koppelen in. Het compartmentalizes het. Het is als het schrijven van een aantal header bestand, en Vervolgens waaronder die header file in C. Denk aan het net als dit. Dus wat heeft dit te doen? Nou, dit gaat lopen. Het gaat om te waarschuwen. Dus je gaat een beetje te krijgen pop-up genoemd hallo wereld. Snelle vraag, gewoon sanity check, zo zie je hier in het lichaam, zeggen lichaam, HTML hier. Wat komt eerst? Zie ik het lichaam, HTML hier, of moet ik eerst zien de waarschuwing? [01:13:19] Publiek: Alert. [01:13:20] DAVIN: Recht. Hij zegt alert. Waarom? [01:13:22] Publiek: Omdat je gaan van boven naar beneden. [01:13:24] DAVIN: Ja. Perfect. Dus hij zegt, ga je van boven naar bodem, dat is absoluut correct. Je gaat te gaan van boven naar beneden. En in JavaScript, jQuery, heb je een functie die is net als onload, of bestellen, en dat zegt, OK, wacht tot dit alles HTML is geladen. En dan, bel de JavaScript. Omdat we hier niet, het hebben dat allereerste ding dat gaat gebeuren wordt dat het gaat om van boven naar beneden. Het zal raken dat JS noemen, het gaat om te waarschuwen. Na dat u op OK klikt, dat alarm gaat weg. Dan het gaat om te laten zien u het lichaam HTML hier. Nice. [01:13:54] OK, dus gewoon echt snel, het schrijven in JavaScript is super snel. Om verklaren een variabele, var naam. Dus in C, heb je int i, je hebt te verklaren wat voor soort het is. PHP, $. JavaScript, var. We spraken over dit. Oké, laten we gaan. [01:14:11] Loops, hetzelfde. Hetzelfde. Functie verklaringen, zodat net zoals je hebt gezien in C. Het enige wat anders is dus als je krijgt om andere programmeertalen, zoals wanneer je 51 volgend semester te nemen en je doet met OCaml, je kunt omgaan met anonieme functies. Dus dat is precies wat je hier hebt. Dus je wilt in som te zetten, een soort van somwaarde. Maar je zou het alleen moeten doen een keer. Zodat u niet wilt functie aan te roepen Kortom, geef het een functie verklaring. In plaats daarvan, je gewoon gebruiken als een anonieme functie. En je hebt dit veel gezien. U vindt een voorbeeld van te zien dit in een paar slides. Ja, we zullen zien. GABE: Goede vraag. Wanneer zou u wilt gebruiken een anonieme functie hier? Kortom, als je iets wilt, als een gebeurtenis, te gebeuren. Dus wanneer de muis geklikt, bijvoorbeeld, u wilt een functie genoemd te worden. Dus u doorgeven aan het evenement handler, u doorgeven aan het evenement, soort, de functie die u wilt worden genoemd. En wat je voorbij is als eind van de dag, maar een verwijzing naar die instructie, de functie. Dus het is niet alsof je voorbij de volledige code, zoals een pointer naar de functie. En dan, als iemand klikt op de muis, dan is dat de functie wordt aangeroepen. [01:15:17] DAVIN: Arrays, zodat u hebben een scala verklaring. Vervolgens een array om dingen zetten. Echt snel, wat zal dit uitprinten? Wat zal het derde element zijn? [01:15:31] Publiek: "JS". [01:15:32] DAVIN: Rechts, zou het "JS." Wachten, ga terug. Wat is de lengte? [01:15:37] Publiek: Drie. DAVIN: Drie, toch? Precies wat je denkt. OK, nu gaan. Arrays, kan je dingen aan toevoegen. Dus je kunt verder gaan hun oorspronkelijke grenzen. Gewoon iets om in gedachten te houden. PHP, JavaScript, ze zijn een beetje beetje meer vergevingsgezind in termen van dingen zoals dat. Objecten, heel graag structs in C, heel veel als associatieve arrays in PHP. Je hebt al ervaring had met dit. Dus JSON, wanneer je voorbij JSON heen en weer-p acht, dat is uw object. [01:16:03] Dus ja, bijvoorbeeld, echt snel voorbeeld. Hier is een object. De manier waarop je deze referentie object, dus gewoon echt snel, laten we zeggen dat ik wilde weten out, OK, wat is de cursus? En zo het object naam hier is CS50. En dan, als ik had een associatieve array, hoe zou ik dat doen? Ik zal met behulp van een sleutel, toch? Dus ik heb de naam van de array. Ik heb beugel, citaten, sleutel, einde citaten, eind beugel, en dat zal verwijzen dat element in mijn associatieve array. Hoe kan ik verwezen Natuurlijk in mijn object? Om het even wie weet? [01:16:39] Publiek: [onverstaanbaar]. [01:16:40] DAVIN: What's up? Publiek: CS50.course. DAVIN: Juist, ja. Dus CS50.course. Dus de manier waarop je dingen verwijzen in een JSON object is met een punt. [01:16:48] Publiek: U kunt ook scala syntax gebruiken. [01:16:53] DAVIN: OK, prima. [01:16:54] GABE: U kunt ook gebruik maken van CS50 beugel, touwtje, zoals aanhalingstekens. Publiek: Ik denk dat het is identiek aan PHP. GABE: Het is het zelfde ding. DAVIN: Fijn! Maar je zult zien dat andere plaatsen. Ja, dus blijven gaan. Dit is wat ik net zei. Dus in een JavaScript jQuery voorbeeld. Dus dit is mijn DOM, toch? Echt snel, dus ik heb een hoofd, hello wereld, lichaam. Ik heb een knop. Het zegt "push me," dus ik wil duwen. En ik wil iets doen wanneer het klikte. Rechts naast. [01:17:31] Juist, dus dit is mijn JavaScript. Dus jQuery is gewoon een eenvoudiger manier om JavaScript te schrijven. Dus dit, en wat ik ga om te laten zien Tot volgend, gaat jQuery zijn, identiek. Dus zullen ze dezelfde dingen doen. Gewoon jQuery heeft de neiging om een ​​beetje gemakkelijker. Mensen hebben de neiging om het meer willen. Het heeft veel functionaliteit. Zodat mensen de neiging om jQuery te gebruiken. U alle gebruikte jQuery in de laatste p-set. Dus wat zal dit doen? Wat zal dit JavaScript-- zo dit is gewoon JavaScript. Wat zal dit doen? Wat zal het doen? [01:18:03] Dus eerst, zie je raam onload. Rechts? Zodat we niet zien dat vóór. Dus dit gaat te wachten totdat het gehele venster belastingen. Dus het gaat om te wachten totdat de HTML, alle beelden load voordat hij iets doet. Dus laten we zeggen dat onze DOM geladen is. Alles is er. Dan wat er gaat gebeuren? Yeah? [01:18:19] Publiek: Button verschijnt. [01:18:22] DAVIN: De knop is er al. Ja, dus de knop al is. Maar dit gaat zeggen, OK, als ik klik op de knop, zodat de knop is al er, als dat HTML-tag. Wachten, terug te gaan heel snel. Deze tag recht hier is naar een knop reeds. Er is al een knop. Maar dan, de JavaScript- tag, exact hier, het zegt, OK, ik wil naar element te krijgen door ID, dus zoekknop gewoon zegt: OK, ik wil om deze variabele om die knop in kaart. Zodat variabele is slechts een gemakkelijkere manier om toegang te krijgen tot die knop. En ik zeg, OK, als ik dat klikt knop, dus als ik klik op dat element, en dit element betreft op de knop, als ik erop klik, dan wil ik een functie aan te roepen. Hier is een van die anonieme functies hadden we het over. [01:19:03] Noem slechts enkele functie. Binnen die functie, in principe iets wat we hebben veel, alert gezien. U klikt op de knop zoeken. Het gaat in principe een knop. Je klikt het. U krijgt dat alert. X uit. Dat is het. Yeah? [01:19:16] Publiek: Dus als je het script [Onverstaanbaar], script-tag in je HTML? [01:19:21] DAVIN: U kunt het script zetten tag recht in het hoofd want je hebt dit onload. Het is ook dat u een klik. Dus het gaat om te wachten totdat u klikt voor iets. Maar onload is gewoon veilig te zijn, om ervoor te ervoor dat alles geladen in uw HTML vooraf. Yeah? Je wilt iets zeggen? [01:19:40] GABE: [onverstaanbaar]. DAVIN: Ja. [01:19:42] Publiek: Dus onload vermijdt definiëren van de knop variabele zoekopdracht door gewoon te zeggen document.getElementById zoekknop dot [onverstaanbaar]. [01:19:49] DAVIN: Zeker, maar dan pees krijgt gewoon enorm. Precies, dus dit is gewoon om maakt het makkelijker voor u, ja. Ja? [01:19:56] Publiek: Waar hebben we creëren window.onload? Of document.ready? [01:19:58] DAVIN: Ja, er is. Ja, er is, heb ik gecontroleerd. [01:20:02] GABE: Niet voor hen om de zorg over. [01:20:03] DAVIN: OK, dus ik ga om u toch te vertellen. Dus eigenlijk, gewoon in het algemeen, dus window.onload wacht tot je DOM, alle uw HTML, laadt. Het wacht totdat uw beelden belasting. Het wacht totdat alles ladingen. document.ready, het is gewoon wacht tot je DOM ladingen. Zodra de HTML is er allemaal, zodra uw DOM is er, begint te lopen. Dat is het enige verschil. [01:20:23] GABE: Quick sanity check hier. Dus dit kan soort te zien als een regel code, toch? Want het is window.onload gelijk aan een heleboel dingen. Als Javascript dit leest, waar of vals, wordt de functie uitgevoerd. Vals. OK? Wat hier gebeurt, je bent gewoon passeren deze functie als een anonieme functies naar window.onload. En dan wanneer gaat het om daadwerkelijk te krijgen geëxecuteerd? Wanneer het venster geladen. Dat is een gebeurtenis. Dus dat is jus t ding zijn we eerder over had, toch? Dus wanneer het evenement gebeurt, de functie gebeurt. Hetzelfde met de onclick. [01:20:59] DAVIN: OK, dus iemand nam weg de document.ready. Maar dit zal de exacte same-- zijn Publiek: Het dollarteken, dat is een document.ready. Dat is een snelkoppeling. [01:21:07] DAVIN: Oh, dat is? OK, dus dit middel document.ready, snelkoppeling. Maar dit is hetzelfde als window.onload behalve dat weinig verschil Ik vertelde u over. En dit is jQuery. Dus dit is exact dezelfde thing-- dit is JavaScript. Dit is gewoon-- sommige mensen denken van het als een meer licht van gewicht, slank versie dat heeft veel functionaliteit dat je waarschijnlijk zult gebruiken. Dus dit doet precies hetzelfde. [01:21:34] Dus dingen naar soort wijzen. Dus in het andere voorbeeld, we had document.getElementById, dus moesten we deze lange snaar die gaat krijgen het element door welke ID heeft. Dat is vervangen door deze oproep hier. Zo zie je het dollarteken, dan zie je citaat, hashtag. Hashtag is altijd een selector. Het zegt, OK, dit heeft te maken met een ID. Wat is de selector voor een klasse? [01:21:56] Publiek: Dot. [01:21:57] DAVIN: Dot, rechts. Als je gewoon gaat selecteer een tag, wat is het? Het is gewoon de tag, precies. En je zou kunnen gebruiken hier dat, als goed. [01:22:05] GABE: En op tag, bedoelen we als div, bijvoorbeeld, of het hoofd. [01:22:08] DAVIN: Of lichaam of p of iets dergelijks, ja. Dus hier, OK, in plaats van te zeggen document.getElementById, dit is gewoon precies hetzelfde. Just in jQuery, het is korter. Dus het is eenvoudiger. Zo dan, niet meer onclick, klikt u op. jQuery-functie, noemen deze functie. Alert is exact dezelfde. Dus het is een beetje kleinere, of iets korter, een beetje bit-- mensen denken het is een beetje makkelijker om uit te schrijven, een beetje makkelijker te begrijpen. Maar dit is jQuery. Veel mensen krijgen een beetje beetje in de war en ongerust en ze denken, OK, jQuery is anders dan JavaScript. Ik moet deze onthouden twee verschillende dingen. Het is niet. Ik bedoel, het is anders syntax. Maar jQuery is JavaScript. Het is gewoon een schijnbaar betere versie kan gemakkelijker worden begrijpen dat mensen gebruiken. GABE: Ja, te zijn eerlijk, dat dollarteken die u ziet in jQuery, dat is gewoon de de naam van een functie die jQuery definieert. Het hoeft niet iets speciaals hebben. Is Het is gewoon de naam van een functie, net zoals je kon dollarteken definiëren. [01:23:03] DAVIN: Ja, dus sprak hierover. Enkele nuttige dingen. Ik was op zoek terug op het oude quizzen. In de afgelopen paar quizzen, ze hebben moest dit soort dingen te gebruiken. Dus document.ready, dus zorg ervoor dat alles is voordat u geladen beginnen dingen te doen. Selecteer een ID, of selecteer een klasse, het zou gewoon zijn citaat dot wat klasse, einde citaat. Indienen, dus als je het indienen van een formulier en oproep deze functie nadat het formulier indient. Waarde, dus laten we zeggen dat ik had een vorm indiening, zoals een gebruikersnaam, een e-mail, boeiend. Ik had een tekstvak. Dus ik ben het typen in dat tekstvak. Nou, als je de waarde wilt krijgen uit die tekstvak dot val je gebruikt. En dan, hier beneden, dot HTML is hetzelfde is als document dot getElementById dot innerHTML. Dus dat gaat om terug te keren u de HTML van die ID. Hier, je gewoon gebruik maken van een aantal ID of wat dan ook dot HTML. Dat zal de HTML van dat element te krijgen. Als je wilde dan veranderen dat HTML, kunt u deze doorgeven iets. Dus je zou zijn als dot HTML, en dan binnen, citaten, nieuwe HTML of zoiets. [01:24:05] GABE: OK, dus AJAX. Ik hou echt van te begrijpen AJAX echt goed. Dus ik wil dat jullie begrijpen AJAX echt goed. Want als je dat doet, je bent vrij veel gaan om alles te begrijpen dat heeft te maken met HTTP, PHP, Javascript omdat alles komt samen in AJAX. AJAX is geen taal. AJAX is een techniek. En het maakt gebruik van veel verschillende instrumenten. AJAX staat voor Asynchronous JavaScript XML. Dus de werkwijze, de taal, de gegevens. [01:24:36] Dus de belangrijkste taal die wij gebruiken in AJAX om alles te triggeren en om alles te verwerken later is JavaScript. Dat is waarom het gaat zeer dicht bij JavaScript. En dan asynchroon is want we doen het niet allemaal in een keer als we het laden van de pagina. Dit is het ding dat we kunnen dingen te doen soort parallel. Het belangrijkste idee achter AJAX is dat je wilt het aan een aantal specifieke informatie te krijgen. Bijvoorbeeld, als je aan het typen bent nieuw gebruikersnaam wanneer je een gebruikersnaam te registreren, Mijn gebruikersnaam is abc123. En vervolgens, aan het einde van de formulier, moet je klikken op Verzenden. En moest naar de server, en dan controleren of in de database, abc123 er al is. En als het er al is, het zegt, gebruikersnaam reeds in de database. En zij, je moet vullen uit het hele formulier opnieuw. En het was echt, echt slecht. [01:25:23] En dan zeggen mensen, OK, waarom we niet gewoon doe een kleine HTTP-verzoek om gewoon te controleren om te zien of deze gebruiker is in de database voordat de gebruiker moest dienen het gehele formulier? Dus bijvoorbeeld wanneer de gebruiker klaar is met het typen van abc123, laten we gewoon gaan naar de server een beetje bit en gewoon een waar of onwaar van de server te zien of dat is een geldige gebruikersnaam of niet. OK, dus dat is een van de belangrijkste maakt gebruik van AJAX tegenwoordig nog steeds. [01:25:49] DAVIN: Dus echt snel, in een Ajax oproep in jQuery, je zou kunnen betekenen dat je wil dat het synchroon zijn. U moet dit niet doen. Maar je kan dat doen. En als je dat deed wat er zou gebeuren? Nou, bijvoorbeeld, als je het krijgen van nieuws of wat dan ook, Uw browser is gewoon te wachten totdat die hele gesprek is voltooid in plaats van u te laten andere doen dingen goed nadat u klikt het. [01:26:14] GABE: Het is niet meer passeren. O mijn god. Sorry! Ja. "In het verleden, de client nodig aanvraag de gehele inhoud van een website. " Dat is wat ik zei. Het stelt ons in staat om te sturen extra GET of POST aanvragen zonder om onze browser herladen. Dus aan het eind van de dag, we zijn eigenlijk het maken van een HTTP-verzoeken hier met behulp van JavaScript. Want voordat we alleen gebruikt JavaScript aan de HTML die al kwamen veranderen. En nu, kunnen we het gebruiken om te communiceren met de webservers ook. De manier waarop dit gebeurt is dat we de klant. Davin is een client. En hij heeft alle JavaScript hardlopen omdat HTML is stom. JavaScript is slim. Dus Davin Davin heeft zijn slimme deel en zijn domme deel. Hij gaat nu zijn slimme deel gebruiken. Hij gaat JavaScript gebruiken verzoek, bijvoorbeeld, of ABC123 is in de database of niet. [01:27:04] Dus Davin, alsjeblieft, je gewoon stuur me een HTTP-verzoek. Dankjewel. Dus hij net stuurde een HTTP-verzoek. Zie je dat? En dat is precies dezelfde manier dat HTTP verzoek toegezonden. De browser, Google Chroom of zoiets, is gaan om te zien dat Davin's proberen om een ​​HTTP-verzoek te sturen, gaat helpen hm een ​​beetje. En dat gaat om te gaan helemaal naar de server. Nu de server zal hebben PHP hier, of een andere taal. Net als in een normale HTTP-verzoek. Het is vrij veel een normale HTTP-verzoek. [01:27:31] En dan, de server gaat zeggen, OK, Davin wil dat ik om te controleren of Dit abc123 is in de database. Gaan praten met het model. Het model zegt dat het niet. abc123 is een goede gebruikersnaam. En dan, de webserver gaat PHP gebruiken om een ​​bepaalde vorm van het bestand maken. Het kan letterlijk een bestand dat bevat "ja" in het, of "nee, of iets dergelijks. Het kan een bestand zijn. [01:27:54] Het zou kunnen zijn dat ik ga stuur Davin een foto van een eend als het in de database en stuur een foto van een hamster als het niet in de database. Dat zou soort zijn stom, maar het zal werken. OK, dus ik stuur een eend naar Davin. Davin kreeg een eend. En nu, wie gaat om de eend te behandelen? Davin slimme deel weer, zo JavaScript, toch? JavaScript stuurde de verzoek, en JavaScript gaat om het verzoek te ontvangen en interpreteren in een of andere vorm. [01:28:22] En in deze zin, het gaat om zeggen, OK, als eend dan ben ik goed. Als hamster, dan ga ik te zeggen, nee, gebruikersnaam al bestaat in de database. Maar meestal, je bent niet gaat om een ​​eend te sturen. Je gaat te sturen iets wat slimmer. En wat we gebruiken is XML. En meer recent, maken we gebruik van JSON. JSON is gewoon JavaScript Object Notation, die wordt in principe krijg je een gehele JavaScript-object. En je zet het in een bestand, net als dat CS50 object dat jullie zagen. Je zet het in een bestand, en u deze sturen naar Davin. [01:28:53] Dus in dit geval zou ik maak een JavaScript-object en gewoon zeggen, gebruiker bestaat, ja. Of gebruiker bestaat, nee. En stuur het terug naar hem. En waarom JSON? Omdat de persoon wie ontvangt deze is ga JavaScript gebruiken de respons behandelen. En JavaScript werkt zo goed omdat het heet JavaScript Object Notation. Rechts? Dus hij kan gewoon bellen een functie en krijg Dit leuke object uit de respons. En dan, hij gaat om te weten of die gebruiker in de database of niet. [01:29:22] Zo zie je maar, alles komt samen in de webserver, en dan is er een HTTP-verzoek en een HTTP response en alles. Dus zorg ervoor dat jullie Dit AJAX oproep begrijpen omdat het helpt je allemaal begrijpen van de concepten waar we het over. [01:29:37] Dus hier is een voorbeeld van AJAX met jQuery. En hier doen we met get JSON. Dus we proberen niet om een ​​te krijgen afbeelding van een kat hier, of een eend. We proberen een JSON-bestand te krijgen. En dan wachten we totdat het heeft gedaan, dot gedaan. Dat betekent dat ik wacht op de reactie. Het kan een tijdje duren. Dan zie je een kleine laden. Als je dat wilt doen in uw website. Dus dot gedaan, en wat dan gebeurt wanneer het klaar is? U passeert in een anonieme functie, net zoals we eerder zagen. Omdat gedaan is een evenement, net zoals het klikken op een muis of wat dan ook, voor jQuery. Dus je voorbij in deze functie met gegevens, tekst, status en jqXHR. En principe, dat is slechts enkele variabelen dat je later kunt gebruiken om te hebben de status van het HTTP verzoek, de gegevens die het gaat terug te sturen naar je. Dus dan kun je later interpreteren en iets zinvols mee doen. En als het niet lukt, wanneer zou het falen? Nou, als het HTTP-verzoek geeft u een 500 of iets dergelijks. Dan gaat het om u de te vertellen -status, wat voor soort storing die was, en allerlei dingen. Je moet ervoor zorgen beide gevallen behandelen, anders wordt het programma wordt gek. [01:30:42] DAVIN: Dus ja, dit is precies wat je zag op uw laatste p-set. De werkelijke AJAX call is in de get JSON. Dat is de oproep. En dan, dot gedaan is als kijkt het of het is gelukt. Als het succesvol is, je wilt iets met de data doen. U krijgt terug van dat JSON verzoek gegevens. Dat is wat je terug krijgt. Dus als u zich van uw p-set, veel van jullie waren als data beugel i of wat dan ook, dot link of titel. Wat komt terug vanaf dat JSON, ongeacht de velden zijn in die JSON object, dat is wat je krijgt terug. Data is wat je krijgt terug. Tekst-status, gewoon iets dat laat je weten wat er is gebeurd. En dan, de jqXHR, dat is gewoon de jQuery XML HTTP request. Dat is net als een object. En vervolgens niet, net als Gabe zei. GABE: In onze kleine voorbeeld van abc123 gewoon om te controleren of dat is in de database of niet, de gegevens zou iets dat je zijn zou doen, als de gegevens dot gebruikersnaam bestaat, dat is wat je PHP gegenereerd voor u, als naam gegevens dot gebruiker bestaat, dan Ik ga om te waarschuwen, gebruiker naam al bestaat. Anders ga ik gewoon naar de laat gebruiker ga invullen van het formulier. OK, veiligheid, cool. [01:31:50] DAVIN: Wil je dat ik? [01:31:52] GABE: Ik hou van deze. Dus iets dat ziet er bekend uit. We zijn bijna klaar. Dus dit is gewoon het voorbeeld jullie zagen in de klas. Je met behulp van argv1 hier. Dat is hetzelfde als een command line argument. En we mem kopiëren dat in een buffer van grootte 12. Wat is het probleem hier? Buffer overflow! Want we hebben een buffer van maat 12. argv1 kan een grootte van twee miljard. We hebben geen grens controle doen. Zo kunnen we veel geheugen te kopiëren. En we zullen in het bijzonder zijn slecht over dit. Wat kunnen we doen dat is zeer, zeer betekenen in dit geval? Ja? Publiek: Een deel van de twee miljard dingen bevat uitvoerbare code die terugkeert [Onverstaanbaar]. GABE: Precies. Dus dat is de aard van de ding dat mensen gebruiken om een ​​iPhone jailbreaken, bijvoorbeeld. Dus dat soort dingen. Omdat je het toestel gewoon kan maken uitvoeren van een code die je leuk vindt. De fix, dus de oplossing is eenvoudig. Kijk maar naar de grenzen. U vraagt ​​null omdat wij controleren altijd voor null wanneer we te maken hebben met strijkers. En dan neemt u de tekenreekslengte vóór. En als de tekenreeks lengte geldige tekenreeks lengte, die is binnen 0 en 12, dan zijn we goed. [01:33:03] DAVIN: Als u niet incheckt voor null, echt snel, wat zal er dan gebeuren? Het zal de schuld SEG. Daarom zal het Seg fout? Omdat je belt strlen op null. GABE: Ja. Waar of niet waar, met behulp van een wachtwoord is een goed idee. [01:33:19] Publiek: Valse. [01:33:20] GABE: Valse. Gebruik maken van vele wachtwoorden, en grote, lange. Hangslot pictogrammen zorgen voor de beveiliging. [01:33:26] Publiek: Valse. [01:33:27] GABE: Valse. Het betekent niets. Het is gewoon een icoon. SSL beschermt tegen man in the middle-aanval. Publiek: Valse. GABE: Valse. OK, dus al die vals zijn. Nice. [Onverstaanbaar] Willen praten over dit? Jouw beurt. DAVIN: Soorten aanvallen, man in het midden. Wat is een man in the middle-aanval? Publiek: [onverstaanbaar]. DAVIN: Als je een stuur HTTP verzoek, konden ze dit doen, toch? Maar als je het verzenden van HTTPS, ze zal waarschijnlijk niet in staat zijn om dit te doen. Er zijn veel punten langs uw verbinding. Je hebt routers. Je hebt DNS-servers. Als iemand in staat is om fysiek zien wat u verzendt, dus iemand die in staat is om daadwerkelijk krijgen tussen u, de cliënt en de server, en is kunnen zien wat u verzendt, Dit is een man in the middle-aanval. Dus om te zien wat je probeert te krijgen van de server, of is in staat om see-- erger, je zou kunnen zien koekjes of iets dergelijks. [01:34:16] Dus bijvoorbeeld, indien die u niet gebruikt SSL, hij zou in staat zijn om te zien uw sessie-ID cookies. En dit is het kapen van sessies genoemd want hij ziet je ID cookies, en dan is hij om te gaan die in staat website en doen alsof ze je. Want net als in PHP, herinner toen we ingelogd, wat doen we dan? We stellen sessie ID gelijk aan ID. Zodat identificeert u. Dat is waarom je je portfolio kunt zien en niet iedereen portfolio. [01:34:38] Nou, als ik ben in staat om die cookie te krijgen, dan kan ik inloggen op die pagina. En dan kan ik gewoon zien je spullen en beginnen met het kopen en verkopen van spullen. Dus dat is het kapen van sessies. Maar je moet in staat zijn to-- zodat je niet kan de man te gebruiken in de middle-aanval zelfs als ze met behulp van SSL. Maar je moet niet kunnen. Als ze met SSL, je kan niet te kapen. Waarom? Want het is allemaal gecodeerd, toch? als het versleuteld, en ik ben nog steeds een man in de midden, krijg ik nog steeds uw gegevens. Dat is goed. Maar het is versleuteld. Dus ik kan niet echt gebruiken. Dus dat is twee. [01:35:09] Echt snel, cross site request vervalsing. Dat is gewoon als er een link en die link doet iets dat je niet denkt dat het zou moeten doen. Dus bijvoorbeeld, als de koppeling was gaat om aandelen te kopen of te verkopen voorraden, en dat je niet wist dat. U klikte op de link, een verzoek ingediend, kocht of verkocht iets dat je was niet mijn bedoeling om te doen. Dat is dat. [01:35:25] Cross site scripting, dus even, je voorbij in via variabele q, in plaats van passeren soort van waarde, misschien q is als een naam. Dus in plaats van het passeren van q gelijken Davin of iets dergelijks, als je geen gebruik maken van HTML speciale tekens, als je hoeft dit niet ontsnappen om ervoor te zorgen dat het OK, dan kon ik in plaats daarvan pas in, laten we zeggen dat hier wat ik zeg print of iets dergelijks, dan kon ik hier passeren in een script oproep. [01:35:51] Zo dan, in plaats van net een variabele, Ik zou dan dit script oproep uit te voeren. Zodat binnen dat script noemen, wat doet het? Document dot locatie, dat gaat De locatie van het document. Dus ik ga om te buigen naar ergens anders. Het heet bad guy in dit voorbeeld, zeer goed. Kon niet denken aan het woord. En dan, om het nog erger is dat ik ga om vervolgens cookie dat sommige variabele Ik heb op deze website. Ik ga het gelijk te stellen het document stip cookie. Daarom ga ik om uw cookie te stelen. En ik ga om te buigen wat informatie naar een website dat je niet moet worden toegang. En dit alles gebeurt omdat je bent niet ontsnappen aan wat je hebt gezien. Yeah? [01:36:29] Publiek: Dus gewoon naar dat duidelijk maken, het is vulnerable.com dat is kwetsbaar voor dit. Dus die link kan verschijnen op een bepaalde pagina. Iemand klikt op het, gaat vulnerable.com. Je hebt een cookie om vulnerable.com. Laten we zeggen dat Facebook is kwetsbaar, dus facebook.com. U hebt uw Facebook-cookie. Wat dit doet, je bent gaan naar facebook.com, het is meteen omgeleid u badguy.com, maar met inbegrip van uw cookie-informatie. Dus het is een snelle redirect, maar uw Facebook-cookie- is opgenomen met die redirect, en dat is hoe ze [onverstaanbaar]. GABE: Ja, er is een aantal zeer gemene dingen die mensen kunnen doen als er dit. Als bijvoorbeeld Facebook toegelaten iedereen om je gebruikersnaam te wijzigen, en ze had er geen doen sanity controles, zodat u kon een JavaScript-ding te voegen dat verandert uw afbeelding naar een hamster. En dat voegt dezelfde JavaScript naar iedereen die je pagina bekijkt. Dus iedereen die jouw pagina bekijkt heeft hetzelfde in de gebruikersnaam. En omdat het een virus, verspreidt het zich exponentieel. DAVIN: We slaan de laatste één, en dan zijn we klaar. Dus dit is slechts een voorbeeld. Dus dit is ze niet ontsnappen aan hun SQL tafel. Dus je kunt laten vallen. Dus je dingen wilt ontsnappen. Dat was het vorige voorbeeld met de cross site scripting. Sorry liepen we een beetje laat. Morgen, sorry! Morgen hebben we de kantooruren. Dus kantooruren in Cabbot 8:00-11:00. De kantooruren zijn strikt voor quizvragen.