[00:00:02] [Speel van musiek] HANNAH: Hi, almal. Dankie ouens so baie vir uit te kom in die walglike weer vir quiz een hersien sessie. As julle weet, quiz een is hierdie Woensdag. So ons gaan om te gaan deur 'n klomp van die onderwerpe. Davin: Hey, kan ek sê iets ware vinnig? HANNAH: Ja, Davin se gaan iets regtig vinnig om te sê. Davin: Jammer. Net ware vinnig, as jy vrae het oor die quiz, kan jy aanlyn gaan. Gaan na 2014 quiz een, oor die quiz. Dit het die logistiek oor waar om te gaan, wanneer om te gaan. As jy gelyktydig ingeskryf, ons is gaan 'n make-up quiz te hê om 5:30. Of as jy my gestuur het 'n probleem, jy het 'n paar ander kwessie. Maar 5:30 is die make-up tyd op Woensdag. Maar as jy vrae het, algemene vrae, Online het al die logistiek. So gaan daar eers. [00:00:47] HANNAH: Awesome. So hier is die groot lys van onderwerpe dat ons gaan om te gaan deur middel van vandag. Ek gaan al die C te dek dinge, en dit is dat die eerste kolom. So het die C dinge wat ons gedek na quiz nul. Begin met 'n geskakelde lys, wat insluit wenke. [00:01:05] Alle reg, sodat ons dit sien in die laaste hersiening sessie, so ek gaan om te gaan deur dit is 'n bietjie vinniger. Net verhoog jou hand as jy wil hê ek moet vertraag of iets verder te spreek. Maar ons gebruik geskakelde lyste, omdat Ons het begin in C met skikkings. En skikkings is groot, maar die probleem is hulle het 'n vaste grootte. Geskakelde lyste toelaat om ons te skep dinamiese grootte data strukture. [00:01:28] En ons het ons basiese operasies, voeg, te verwyder, en soek. En ons kan insetsel doen in ergste geval konstante as ons net sit dit aan die begin. Verwyder en soek, ergste geval groot O van n tyd. So weer, net om te draai deur middel van hierdie foto's, Ek weet ons het hierdie laaste tyd, maar ons wil om tred te hou van ons geskakelde lys deur die dop van die hoof van ons geskakelde lys. Omdat ons weet dat elkeen van ons nodes is net gaan om te wys op die volgende node in ons geskakelde lys. [00:01:58] So dit is hoe ons hou. Selfs al is dit nie deurlopende stukke van die geheue, ons hulle kan vind deur net na aanleiding van die verskillende pyle. Hier is ons struktuur vir 'n geskakelde lys node. Ons het dit die laaste keer. Ons het ons struct node. En dit het twee eiendomme. Nommer een, die werklike waarde wat ons wil stoor. In hierdie geval, dit is 'n heelgetal. Dit kan 'n string wees, kan dit 'n kar, wat jy wil. En dan, ons het om tred te hou van die volgende node in ons geskakelde lys. So wat gaan 'n te wees wyser na die volgende node. As jy net doen soek, soos ek gesê het, jy wil hê jou pyle te volg af. Plasing, sou jy track hou van waar die res van jou lys is. En jy wil die kop te lei om te wys op ons nuwe element, wat in hierdie geval is een, en dan sal 'n punt aan die res van die geskakelde lys. So weer, ek weet dit is 'n bietjie bietjie van 'n herhaling van quiz nul. So ons het baie versigtig te wees oor die volgorde waarin ons doen hierdie pointings sodat ons dit nie doen nie spoor van die agterkant van die lys verloor. OK, om enige vrae net alleen geskakelde lyste? Awesome, OK, cool. [00:03:06] So nou gaan ons om te gaan op iets net 'n bietjie meer ingewikkeld, dubbel geskakelde lyste. So in bykomend tot die behoud van spoor van die volgende node, ons wil ook om tred te hou van die vorige node. En dit stel ons in staat om, as ons op 'n sekere punt in ons geskakelde lys, nie net vorentoe gaan, maar ook agteruit Itereer. Want soos ons gesien het in 'n enkel geskakelde lys, as ons op 'n sekere knoop, en almal van 'n skielike, het ons besluit, eintlik, ek wil om te gaan na die knoop reg voor my, jy wil hê om al gaan die pad terug na die hoof en Itereer deur totdat jy gevind die knoop jy soek. [00:03:35] So dit maak dinge effens makliker as wat ons probeer om te Itereer deur ons geskakelde lys. Maar dit vereis dat ons die spoor van een te hou meer wyser, so een node ster. Alle reg, so hier kom die pret deel. Ons gaan om te oefen implementering verwyder vir dubbel geskakelde lyste. So, dit is iets wat heeltemal fair game vir die quiz. Dit het gewys op die verlede vasvrae. So beslis bereid wees 'n bietjie in C. te kodeer Moet nie vergeet dat met al hierdie pret PHP en JavaScript, het ons nog om te onthou C. Om dit te doen borsel op dat As jy voel verroes. [00:04:12] Alle reg, laat ons sien of ons dit kan doen. OK, cool. So ons gaan om te probeer reg hier te wysig, en hopelik dit gaan soos beplan. Alle reg, nie almal wil om te gee my 'n voorstel hoe ek moet begin? Die enigste aanname Ek is maak, is dat ek reeds het 'n struktuur gedefinieer, die een wat ek het op die laaste bladsy, op die laaste skyfie. En ek is die stoor van die hoof van my gekoppel lys in sommige wyser genoem lys. Is daar iemand wat wil my begin? [00:04:42] GEHOOR: Kan jy 'n nuwe node te roep deur die lys? [00:04:45] HANNAH: Awesome, so ons gaan skep 'n nuwe node te kruip deur die lys. Ek hou van dit. Ek sal net noem dit wyser as dit is OK. En waar moet dit oorspronklik begin? [00:04:57] GEHOOR: Waarskynlik op die hoof van die lys. HANNAH: Beautiful. Ons wil om te begin by die kop, wat Ek het gesê gaan in lys gestoor word. Awesome. So ver, so goed. En nou, ons doel is om Itereer deur die lys totdat ons die knoop met waarde N wat ons wil verwyder. OK? [00:05:13] So nou is die deel waar ons wil Itereer deur. Kan iemand raai 'n manier om te Itereer deur? [00:05:19] GEHOOR: 'n lus. [00:05:20] HANNAH: 'n lus. Ek is mal daaroor. Spesifiek, kan ons probeer om 'n while lus. OK, en ons weet dat ons bereik het die einde van die lys wanneer wat? GEHOOR: Wanneer wyser is nul. HANNAH: Wanneer wyser is nul. Mooi, ek is mal daaroor. OK, cool. So jammer as my jaag stut is soort van val uit die skerm. Ons het dit terug. OK, cool. Wat is volgende? [00:05:48] So weet ons dat ons wil verwyder die knoop wat waarde n. So laat vind die geval waar ons eintlik vind ons node. So hoe sou ek seker dat? Ek wil net sê as wyser, en dan as ek wil die waarde van wyser te kry, Ek het net nie arrow n, gelyk N, die parameter dat ons hierdie funksie het, die node wat ons wil eintlik verwyder. Enige vrae tot hier? Alle regte. OK, so nou laat ons trek 'n vinnige foto op die bord om dit te visualiseer. [00:06:24] So kom ons sê daar is ons pragtige node. En dit het 'n waarde, ek sal net sê vier. En dit dui op die volgende node in ons geskakelde lys. En daar is niks voordat dit. So het ons ons vorige verwys na niks. In hierdie geval, wys ons agteruit. OK, net die opstel van my geskakelde lys hier. En ons het 'n lys wat wys aan hierdie struktuur te begin. Ek sal een vir teken Ter wille van volledigheid. OK. Ek sal hierdie vorentoe wys. En ek sal die een terug wys. Oeps, jammer. Ja, agtertoe het hierdie. Doen dit weer. OK, daar gaan ons. Alle reg, het dit. OK, hier is ons prentjie. [00:07:21] OK, so wil ons twee gevalle te oorweeg. Die eerste geval is indien die node ons wil verwyder is by die begin van ons lys. En dan, die tweede geval wat ons wil om te oorweeg is as dit nêrens anders. Ek verstaan ​​dat dit 'n heeltemal morsig teken met al my skoonmaak, maar hopelik sal ons probeer om te dit duidelik maak met 'n paar kode. [00:07:40] OK, so laat dek die geval waar ons ons node, en dit is op die heel begin van ons geskakelde lys. Enigiemand gee my 'n voorstel hier as wat Ek moet doen om werklik ons ​​node verwyder? Dit is 'n bietjie lastig. OK? [00:07:56] GEHOOR: Jy het die te neem node dit sou wees voordat dit en maak dit verwys na die een wat sou wees nadat dit, en neem die node wat sou wees na dit en maak dit verwys na die knoop voordat dit. HANNAH: Presies. OK, so dit is die geval where-- ons twee gevalle. Ons het die geval waar die node wat ons soek is aan die voorkant van die lys. OK, en dan die geval dat jy beskryf is anders, reg? Dit is iewers anders in die lys. So jy sê, moet ons kyk na die knoop vorige, en maak die vorige node verwys na die volgende node. So kom ons sê ons is probeer om uit te neem vyf in my baie slordig tekening hier. Ons wil seker maak dat maak vier punte nou tot ses. Vier se volgende punte tot ses. En ses se vorige punte te vier. Dit is ons doel hier, reg? Dit is wat ek dink jy net gesê daar. [00:08:56] OK, so kom ons kry daardie eerste stuk. Kom ons doen die die vorige wyser vorige. So vier se volgende behoort te wys wat? Presies, in hierdie geval, ses. So moet ons sê wyser, die volgende. OK? Alle regte. So laat ons ontslae te raak van hierdie lelike prentjie en probeer om 'n effens mooier een te trek. Ons het ons lys kop hier. En wat verwys na die eerste node in ons geskakelde lys, wat ons gesê het, is vier. Hier is ons tweede node, vyf. En ons derde knoop, ses. Net probeer om die presiese dieselfde te trek prentjie, net 'n bietjie meer skoon. OK, so vier se volgende wys oorspronklik tot vyf. Vyf se volgende punte tot ses. Ses se vorige punte tot vyf. En vyf se vorige punte te vier. So baie lekkerder! OK, cool. [00:10:04] So nou, wat ons gedoen het net hier, hierdie lyn van die kode, wat sê wyser vorige volgende, so wat beteken dit? Dit beteken dat as ons kyk na vyf, gaan na die vorige node, en dit is die volgende moet nou punt tot vyf se volgende. So in wese, wat dit is om is dit is die skoonmaak van die pyl en maak dit oorslaan reg oor vyf. Is dit duidelik? Ek weet wat kan wees 'n bietjie oppervlakkig. Ek sien 'n paar hoof knik. Dit is goed. OK, cool. Nou, wat is die volgende stap? [00:10:39] Ek het weer die volgende. Nou, wat ander pyl moet ek verander? Hierdie een hier. Ses se vorige. Ons wil nie ses se vorige om te wys op vyf nie. Ons wil dit om te wys op vier. Maak die foto sin maak? So nou kan ons eintlik neem vyf uit. So laat ons kry dat die stuk. Wat moet ek doen voordat ek herstel ses se vorige vier? Enige idees daar? [00:11:14] GEHOOR: Vrye die knoop tussen hulle deur dit te nul? HANNAH: Cool. Beslis, ons einddoel is gaan wees om die node te bevry. Sodat ons dit kan doen reg hier. Gratis wyser. Absoluut. Maar selfs voor dit, laat se just-- ons doel reg hier is wyser na die volgende stel vorige gelyk aan te meld vorige. Ek weet dit is om gedek. OK, laat ons take-- cool. Kan almal sien dit bottom line? Of is dit super klein? [00:11:50] So voordat ons voer hierdie lyn hier, ons wil om seker te maak dat die maak wyser volgende is nie null. Want as wyser volgende is null, watter soort van fout kry ek as ek probeer om te verwysing 'n null pointer? GEHOOR: ma skuld. HANNAH: 'n seg skuld, mooi. OK, so as dit is nie null, dan kan ons herstel. En ons het ses punt weer te vier. Vrae tot hierdie punt? Ja? [00:12:17] GEHOOR: In jou eerste As verklaring, het jy beteken dat die pyl te hê volgende, of [onhoorbaar]? HANNAH: ek bedoel wyser pyl n. So basies, wat ek probeer om te doen is te sê, die huidige node dat ek iterating oor die huidige node wat Ek is op soek na, ek stoor in wyser. En ek wil wyser se om te weet waarde, wat in hierdie geval is n. En ek wil om te sien, is die knoop ek soek vir die node ek mik te verwyder? So dit is waarom ons hier aanwijzer n. [00:12:47] GEHOOR: So het die pyl gaan tot n, jy die waarde en bêre dit in 'n knoop genoem n? [00:12:55] HANNAH: So dit is soos as ek gaan deur middel van hierdie geskakelde lys en verwys na vyf. As ek wil hê dat die waarde te kry, as Ek wil dat die getal, 5 te kry, Ek het wyser pyl N te doen. Cool? Ja. [00:13:07] GEHOOR: N is die naam van die veranderlike? HANNAH: Ja. So as ons flip terug een slide, n is die naam van die waarde binnekant van die node in ons geskakelde lys. En ek weet dit kan 'n bietjie kry bietjie verwarrend omdat ons ook vra die ding wat ons wil n te verwyder. So dit is waar dat een lyn vandaan kom. Ja? [00:13:27] GEHOOR: Wat het jy [Onhoorbaar] hoe hulle werk? A wyser [onhoorbaar]? [00:13:35] HANNAH: Natuurlik. Praat jy about-- watter lyn? GEHOOR: Die laaste reël [onhoorbaar]. [00:13:44] HANNAH: Seker, OK. So laat ons kyk na die prentjie in Om te probeer om dit te verduidelik. Ek is jammer vir die kamera, die vraag was kan ons wyser verduidelik arrow volgende wyser vorige. OK, so kom ons sê ons is op vyf en ons doel is vyf te verwyder. So aanwijzer volgende, wat van hierdie drie nodes beteken dit gee ons? Dit bring ons by die sesde node, reg? [00:14:10] OK, so nou is ons vra vir die ses se vorige. OK? En ons is die Herstel hierdie gelyk te wees tot vier, wat gebeur het vyf se vorige wees. Ek weet, dit is super hard om tred te hou. Ek het regtig aanbeveel jy prentjies teken As jy 'n vraag soos hierdie. Ja? [00:14:30] GEHOOR: Is die rede dat ons het nie 'n [onhoorbaar]? [00:14:37] HANNAH: Presies. So die vraag is, hoekom doen ons nie nodig om hier te gaan? Hoekom het ons nie nodig het om seker te maak dat wyser vorige is nie gelyk aan nul? En dit is omdat ons reeds geskei word die geval indien die wyser se aan die begin. Baie goeie vraag. Enigiets anders op hierdie? OK, cool. So laat dit voltooi het. Ons is amper daar. [00:14:59] So, wat as dit by die kop? Wat as in plaas van probeer vyf te verwyder, ons wou eintlik vier skrap? Wat sou ek doen? Wel, ek wil my kop oor wat om te herstel? Skree dit uit? GEHOOR: Die een na dit. HANNAH: Beautiful. OK, so ons wil lys te word wys aan alles wat ons wyser volgende node is. Goed. En net vir volledigheid se ontwil, sou ons wil dit gaan so lank as ons lys is nie null, solank ons ​​lys is nie leeg, dan wil ons te stel ons vorige gelyk aan nul. Vraag so ver? 'N stap weg from--? [00:15:53] GEHOOR: dit sou wees as lys is nie gelyk aan nul? [00:15:55] HANNAH: Ja, jy is heeltemal reg. Ek is so jammer. Is lys is nie gelyk aan nul. Awesome. Probeer om dit te bring al op die skerm. Dit is soort van val af. Jammer, ouens. En laaste maar nie die minste nie, al ons het om te doen, is om terug. OK. Dit was 'n baie vol in baie vinnig. Neem 'n tweede dit oor te kyk. Vertel my as jy enige vrae het. Ja? [00:16:20] GEHOOR: As lys is by die kop, then-- wag, Nevermind. [00:16:26] HANNAH: OK, goed. So, dit is as lys is aan die hoof, ons verwyder dit wat ons plaas. Ja? [00:16:31] GEHOOR: Kan jy verduidelik die eerste as verklaring weer? As die wyser na N is gelyk aan n? HANNAH: Natuurlik. So ons doel van hierdie hele funksie is die knoop wat waarde N te verwyder. So as ons vind, as ons iterating deur ons lys, die knoop met 'n waarde N, dit is die een wat ons wil verwyder. So al die verwydering gebeur binnekant van die groot as verklaring. Doen wat sin maak? Cool. Ja? [00:16:59] GEHOOR: Miskien het jy net nie kan sien , maar nie jy moet ook 'n lyn vir blaai deur die lys? HANNAH: Awesome. Kom ons bring dit op 'n bietjie, en ons sal dit reg in die onderste gooi. Dalk is dit die bord sou het 'n effens beter idee. So hoe sou ek Muis vorentoe? [00:17:17] GEHOOR: Pointer gelyk wyser plus een. [00:17:20] HANNAH: Beautiful. So wat ons toelaat om te voortgaan iterating deur. OK. GEHOOR: Sou dit nie daar wees om 'n ander een verwag? HANNAH: Een meer tyd? GEHOOR: Sou daar nie wees nie 'n ander na die groot ou as stelling [onhoorbaar]? HANNAH: Watter deel? Ek is jammer. [00:17:38] GEHOOR: Die traversal, moet nie daar wees 'n ander een verwag? HANNAH: Jy absoluut kan 'n ander het. Want ek het 'n opbrengs reg daar, hoef jy nie 'n ander nie. Maar ja, goeie vraag. OK, ja? GEHOOR: Kan ons dink wyser wat beweeg deur die lys as om op die waarde van elke knoop in die lys? Of moet ons dink aan dit as soort van buite die lys? [00:18:00] HANNAH: Óf die een is goed, dink ek. Die manier waarop ek dink dit is Ek sê, OK, ek is wyser. En dit is vir my. Dit is my hand. Ek gaan om te wys op die verskillende dinge wat ek wil Itereer deur. Eerstens, ek gaan wys aan die hoof van die lys. En dit vertel vir my ek is gaan om te wys op vier. En so My, buite die lys, Ek kan wys elk van hierdie elemente. So ek dink aan myself as wyser. GEHOOR: So wanneer jy verwyder een van daardie elemente, jy jouself verwyder, om so te praat. HANNAH: Presies. So jy die ding verwyder jy verwys na. So in die voorbeeld wat ons gesien waar ons probeer vyf te verwyder, wanneer ek verwys na vyf, Ek wil die te verwyder ding wat ek verwys na. Presies reg. Ja? GEHOOR: Het ons geneem sorg van die geval waar n is nie in die lys? HANNAH: As N is nie in die lys? Al wat gaan gebeur is dat jy gaan Itereer deur en itereer deur, en dan, jy gaan te kry om null aan te meld, en dan is jy gedoen gaan word. [00:18:48] GEHOOR: So doen ons enigiets om terug te keer? HANNAH: Ons kan. Die manier dat as dit gedefinieer funksie, sê ek net dat dit terug niet, ongeag. Maar jy kan iets het soos die terugkeer van 'n heelgetal, en het dit terug negatiewe 1 as dit nie. Iets soos dit. Vrae with-- ja? GEHOOR: [onhoorbaar]? HANNAH: Jammer? GEHOOR: [onhoorbaar]? HANNAH: Natuurlik. So wat is die actual-- Sodra ons gedoen al hierdie werk van die beweging al hierdie pyle rond, ons hele doel was om ontslae te raak van die node dat ons is op soek na. So in hierdie geval, bevry wyser, as ek verwys na vyf, dit is soos die skoonmaak van hierdie middel node. Dit is die gratis wyser deel. Dit maak sin? [00:19:29] GEHOOR: So selfs gedink jy het nie [onhoorbaar]? [00:19:31] HANNAH: So het ons aanvaar aan die begin ons het 'n paar lys wat was already-- hulle het saam te stel nie. So om dit te bou lys, het seker hulle [onhoorbaar]. Cool. Enigiets anders met hierdie? Ja? [00:19:46] GEHOOR: Wat as die lys nie die nul lyn gelyk? [Onhoorbaar]? HANNAH: Right hier? GEHOOR: Ja. HANNAH: OK, al wat ek doen is ek net om seker wat voor ek probeer om dereference lys voordat ek probeer om toegang tot die vorige, Ek wil om seker te maak dat dit nie null so ek kry nie 'n seg skuld. Cool. [00:20:08] OK, ek weet dit was nogal 'n baie om deur te kom. So hierdie skyfie sal wees aan u beskikbaar gestel. Sodat jy kan gaan deur dit in meer detail. Ja? [00:20:17] GEHOOR: Hoekom doen die lys [onhoorbaar]? HANNAH: Natuurlik. So lys wys werklik hierdie element reg hier, die eerste element in die lys. So kan dit nie 'n vorige. Ja? [00:20:31] GEHOOR: Is die wyser punt by dieselfde adres in die geheue? Is dit wys na dieselfde adres in die geheue as die node dat dit verwys na? [00:20:40] HANNAH: Ja, dit wys hierdie node in die geheue. [00:20:43] GEHOOR: Right, so wanneer jy [onhoorbaar]? [00:20:47] HANNAH: In 'n sekere sin, ja. OK. Alle reg, laat ons beweeg saam met hierdie. En as jy nog vrae het, hou om aan die einde, en ons kan gaan weer deur dit. OK, cool. Nou, ons kry om aan te beweeg tafels, drieë te hash, en bome wat jy het super vertroud is met in p-stel vyf speller. [00:21:04] So hash tafel is net 'n skikking enkel geskakelde lyste of dubbel geskakelde lyste te kom van dit af. So ons het 'n soort assosiatiewe skikking. En hoe weet ons watter van hierdie skikkings emmers te kry in, gebruik ons ​​'n hash funksie. So in hierdie geval, kan enigiemand raai wat die hash funksie wil net gebaseer wees op 'n paar van die toevoer en afvoer? [00:21:31] GEHOOR: Brief aantal van die alfabet. HANNAH: Presies. Dit sit hulle net in alfabetiese volgorde. Alles wat met 'n begin A is dit in die eerste emmer. Alles met 'n B is in die maak tweede emmer, so aan, en so meer. Awesome, OK. En 'n hash funksie is om enige funksie wat in 'n woord vind en sal jou vertel wat emmer dit hoort in. So wat inskrywing in ons array dit hoort in. [00:21:55] So elke keer as ek gee my hash funksie 'n woord, dit moet vir my sê dieselfde plaas elke keer. So as ons gebruik maak van die hash funksie van die vorige skyfie waar ons sorteer deur die eerste letter van die alfabet, elke keer as ek gee my hash funksie "appel" dit moet altyd vir my terug 0. So as ek 'n appel te sit in my hash tafel, as ek "appel" aan my hash funksie, dit moet sê, gaan sit dit in die emmer 0. As ek op soek na 'n appel in my hash tafel en Ek sê, waar krag appel live, vra jy jou hash funksie. En dit sê, gaan na emmer 0. Alle reg? Vrae met hash funksies? Awesome. [00:22:34] Hier is 'n bietjie meer gedetailleerde verduideliking van wat 'n hash funksie kan lyk. Alle regte. Nou, die probleem met hash funksies in 'n ideale wêreld, ons sou net een het ding in elke emmer. Maar in werklikheid is, is daar nie net een woord wat begin met A. Daar is nie slegs een woord wat met B. So begin in hierdie geval, as ons skielik "berry" en ons wil om dit te sit in ons hash tafel, en ons sien, o, nee, piesang is reeds daar, wat gaan ons doen? [00:23:03] Wel, ons het twee opsies. Die eerste opsie is lineêre indringende, wat beteken net gaan vind die volgende leë emmer. Gaan vind die volgende leë verskeidenheid inskrywing. En net sit "berry" daar. So ek weet dit is veronderstel om te gaan met piesang in emmer een. Maar net sit dit in die emmer drie, omdat emmer drie is leeg. Nog 'n opsie is waarskynlik wat jy implementeer in jou p-stel, waar jy moes aparte aaneenskakeling. So elkeen van jou emmers, elk van jou verskeidenheid elemente, nie net hou een woorde, maar eintlik hou 'n wyser na 'n lys van woorde. So dat as jy ' piesang in jou hash tafel en jy skielik wou Berry, geen probleem te voeg. Net voeg berry op die einde, of te die begin van jou geskakelde lys. OK, awesome. Vrae met hash tafels voor ons gaan aan? [00:23:58] Alle regte. Bome en drieë gedruk. OK, so dit was 'n ander opsie vir die implementering van woordeboek. Jy kon gemaak het 'n drie gedruk. So dit is 'n spesiale soort boom wat optree soos 'n multi-vlak hash tafel. So jy kry die prentjie sien waar jy 'n skikking wat dui op 'n klomp van die skikkings wat dui op 'n klomp van die skikkings wat dui op 'n klomp van die skikkings. En ons sal sien presies wat dit sou lyk soos op 'n toekomstige skyfie. En meer in die algemeen, 'n boom is net 'n datastruktuur waarin die data is georganiseer in sommige hiërargie. So, waar ons sien ons 'n soort van begrip van 'n boonste vlak, 'n volgende vlak, 'n volgende vlak, 'n volgende vlak. So hierdie is waarskynlik die mees duidelike met 'n paar spesifieke voorbeelde. So hier is ons boom. Jy kan sien dat dit het bepaalde vlakke dat ons begin met die wortel node, een. En ons kan gaan af deur ons boom. [00:24:50] A binêre boom is 'n spesifieke tipe van die boom. En die enigste spesifikasie vir 'n binêre boom is dat elke node het hoogstens twee blare. So jy is nie van plan om enige te sien van hierdie nodes het drie of vier of 'n ander aantal blare. En dan nog meer spesifieke is 'n binêre soekboom waar elke node aan die linkerkant van die node gaan 'n waarde kleiner te hê. En elke waarde aan die reg gaan wees groter. So as jy sien 44 is op ons wortel, aan die linkerkant, 11, 22, en 33 is almal minder as ons wortel. En op die regte is almal getalle bigger-- 66, 55, en 77. En hierdie eiendom geld op elke vlak van die boom. [00:25:37] So wanneer ons gaan af na 22, 11, en 33, nog steeds 11 is kleiner as 22 en 33 is groter as 22. En dit maak dit makliker om te soek want as ons is op soek na 'n nommer, ons weet presies wat tak te volg af. So dit moet jy 'n herinner bietjie van binêre soek. Ja? [00:25:56] GEHOOR: So wanneer jy beskryf binêre, jy het gesê dit het op die meeste twee blare? HANNAH: MM-hm. GEHOOR: Kan dit minder? HANNAH: Ja. So kom ons sê, byvoorbeeld, jy het nie 'n ewe getal van die dinge en jy kan nie vul al jou blare, dit is goed as 'n mens het 'n. OK? Awesome. Enige ander vrae oor bome? OK. [00:26:16] Terug na ons drieë as ek praat oor 'n bietjie vroeër, hoe ons hierdie multi-vlak skikkings. So in hierdie geval, ons begin by die top. En ons kan enige gegewe woord volg af. So kom ons sê ons wou om te kyk vir Turing. Ons begin by T, volg dit af 'n skikking wat U bevat, en volg dit af totdat ons bereik hierdie klein delta wat vertel ons, ja, jy 'n woord gevind. Duidelik op drieë? Iets te daar te gaan? Ja? GEHOOR: Is die simbool van delta ruimte binne die drie te beset? HANNAH: Ja, so is dit nie noodwendig eens 'n delta te wees. Maar ons moet een of ander manier te vertel ons computer-- jammer, sodat ons weet dat TUR is nie 'n woord nie. Want laat ons sê ons het nie hierdie konsep van 'n delta, hierdie konsep van geluk, jy 'n woord gevind, dit sou deurgaan en Itereer T-U-R, en dan sê, awesome, ek het dit! Dit moet 'n woord te wees. Maar dit is regtig nie. Ons wil die hele Turing 'n woord te wees. So moet ons iets aan die het einde wat sê, baie geluk, jy het 'n wettige woord. GEHOOR: So as jy het soos 26 letters in die alfabet, sou jy eintlik 27 sleutels in jou probeer? [00:27:24] HANNAH: Awesome, ja. So eintlik, ek dink dat sal wees op die volgende skuif. Ta-da! Waar as jy 'n node in jou probeer, jy gaan 27 kinders in plaas van 26 te hê. Enige vrae met wat? Ja? GEHOOR: Waarom drieë neem sodat veel ruimte [onhoorbaar] as jy gaan? Hoekom is dit beskou as [onhoorbaar]? HANNAH: Natuurlik. Kom ons gaan terug. Die vraag is, waarom is drieë soveel groter as iets soos 'n hash tafel. So vir elk van hierdie vlakke, selfs as hulle nie hier getrek, jy het al 26 karakters te hê. En die rede dat jy nie kan sê, O, maar soos vir Turing, ek nie nodig het om enige van daardie te hê dieselfde dinge op die vlak van U. Wel, As jy skielik wou voeg iets wat was soos T-H, jy nodig het om die te hê vermoë van die toevoeging van die woord. So vir elke enkele brief, jy gaan te hê 'n klomp van te hê skikkings kom af van dit. Sodat jy kan sien hoe dit sou kry baie groot, baie vinnig. Enige ander vrae? Alle regte. Ja? [00:28:29] GEHOOR: Wanneer is drieë vinniger as hash tabelle? [00:28:33] HANNAH: Wanneer is drieë vinniger as hash tabelle? So as jy het 'n baie slegte hash funksie. So kom ons sê ek was soos, hier is jou hash funksie. Maak nie saak wat die woord jy my gee, dat ek altyd gaan om dit te sit in die rigting inskrywing 0. En so het ons uiteindelik met net om alles in een groot lang geskakelde lys. En so 'n lookup tyd sal op die ergste neem N is dit heel aan die einde van die lys. Met die drie, ons moet net Itereer deur die letters in die woord. So selfs as ons 'n klomp meer woorde aan ons probeer, dit sou ons nie langer neem 'n bepaalde woord te vind. [00:29:09] Al wat ons moet doen, is om vir Byvoorbeeld, in hierdie geval, Kom ons sê ons is op soek na zoom, ons sou net moet Itereer oor Z-O-O-M, vier letters. So dit is net die lengte van die woord zoom. Dit maak nie saak hoeveel meer woorde ons in hierdie drie. Ons kan altyd kry dit in die vier stappe. Awesome. Ja? [00:29:32] GEHOOR: So [onhoorbaar] is 'n skikking, reg? [00:29:34] HANNAH: MM-hm. GEHOOR: As jy soek [onhoorbaar], sou jy het om te gaan deur middel van jou skikking te vind [onhoorbaar]? HANNAH: Natuurlik. GEHOOR: Is dit nie meer tyd in beslag neem? HANNAH: As ek gaan sê dat my skikking is altyd gaan wees A, B, C, D, E, F, G, blah blah blah, so as ek altyd weet dit is in presies dieselfde volgorde, as ek altyd weet dit is in alfabetiese volgorde, Ek kan net sê O is nommer so en so in die alfabet. Net spring op daardie plek. Want onthou, met skikkings, kan ons toegang enige element van daardie verskeidenheid in konstante tyd as ons weet waar ons is op soek. Ja? [00:30:09] GEHOOR: Op die vorige skuif [onhoorbaar] 27, maar 26 vir die eerste een. [00:30:14] HANNAH: Jammer? [00:30:15] GEHOOR: Is dit nie die eerste een 0, so sou dit nie wees 26? [00:30:18] HANNAH: Seker, so wanneer ons sê 27, dit is gaan gee ons indekse 0 deur 26. Maar as jy eintlik tel diegene wat nie, is dit gaan wees 27. Goeie vraag. Enigiets anders? Ja? [00:30:31] GEHOOR: So is drieë stadiger as hash tabelle? [00:30:34] HANNAH: Drieë gaan wees, in teorie, vinniger as hash tabelle maar neem meer geheue. Ja? GEHOOR: [onhoorbaar]? [00:30:45] HANNAH: Ek is jammer, ek het julle nie geluister nie. GEHOOR: [onhoorbaar]. 0-25 gee jou 26. [00:30:54] HANNAH: 0-25 sou gee jou 26, regs. [00:30:56] GEHOOR: En dan [onhoorbaar]. HANNAH: Right. So het die getal wat ons spesifiseer is die aantal van die dinge in ons verskeidenheid. So as ons 27, dit is gaan ons te gee 0 deur 26, wat sal gee ons kamer vir, in hierdie geval, Ek is nie, insluitend 'n toespraak. So kry ons '0 deur middel van 25 is die eerste 26 letters van die alfabet, of al 26 letters van die alfabet. En dan is dit die laaste ding, by inskrywing 26, is gaan om die tjek te wees merk of die delta. Enigiets anders? Awesome. Het my ruimte. OK, cool. [00:31:31] So het ons reeds aangeraak nie. Maar die groot handel af tussen drieë en hash tabelle is dat drieë voorsien, in teorie, konstante opkyk tye, maar gebruik 'n hele klomp van die geheue. Alle reg, nou het ons 'n bietjie minder ingewikkelde strukture, en ons sal gedoen word met C, en ons sal reg langs beweeg. [00:31:49] So stapels, ons het dit gesien in lesing waar jy iets soos 'n stapel bak waar die laaste ding wat jy sit op die stapel gaan die eerste ding wat jy neem af wees. So dit is wat regtig definieer 'n stapel is dat die laaste ding wat jy op gaan die eerste wees ding wat jy neem af. En die terminologie wat ons gebruik as ons gaan om iets te sit, as ons gaan iets toe te voeg tot ons stapel, ons noem dat stoot. En as ons iets doen af, noem ons dit knal. En as ons gaan implementering van 'n stapel, ons nodig om seker te maak om tred te hou van wees beide die grootte en die kapasiteit. So het die totale aantal elemente wat ons kan hou en die huidige aantal elemente dat ons '. [00:32:27] En baie soortgelyke, ons het toue. En die enigste verskil is in plaas van met stapels, ons het gesê die laaste ding wat ons op is die eerste ding wat ons opstyg. So met toue, die eerste ding wat ons in gaan die wees eerste ding neem ons uit. So dit is soos as jy eintlik voering by 'n winkel en jy word gehelp, dan is die eerste persoon in die lyn moet die eerste persoon om gehelp te word nie. So wat sou 'n tou te wees. [00:32:52] Dus moet ons die spoor van die te hou grootte, kapasiteit, en die hoof aangesien ons gaan almal voor af te neem van die lys plaas van die rug. Vrae oor dit? Enige C vrae wat jou pla? Data strukture, enige van die wat pret dinge? Alle reg, cool. So ek sal dit aan Alison te spring in 'n paar meer programmering. [00:33:14] ALISON: Ag, ons sal sien. Ons sal sien hoe goed ek hier doen. OK, ek gaan om te probeer en vlieg deur middel van hierdie dinge, ouens. Hannah het baie in diepte op al haar dinge. Ek gaan om te probeer om te gee jou 'n vinnige oorsig ontploffing sodat ons kan kry om Davin met al die pret JavaScript en sekuriteit dinge wat miskien het jy eintlik meer wil hoor. [00:33:33] OK, as Hannah gesê het, as jy enige vrae het, Ek is te vinnig gaan, asseblief, laat my weet. Ek sal vrae soos nodig beantwoord. So om te begin, gaan ons begin met waarskynlik een van die heel eerste dinge jy met die web geleer programmering, regte. So chmod, julle ouens moes gewees het meesters op hierdie met al die web programme wat jy het die afgelope tyd besig is. Dit is basies net 'n opdrag wat verander die regte of die toegang regte van ons lêerstelsel voorwerpe. Natuurlik, om werklik sien hierdie, as jy om enige probleme met hierdie tydens jou probleem stelle, jy mag gebruik het ls-l, wat is 'n lang, die oog soort te kry van soos hierdie, waar jy eintlik sien al die regte vir 'n lêer. [00:34:16] En regtig, ons is net gaan om te gaan redelik vinnig deur net mooi veel wat elkeen van hierdie beteken. So het ons hier D, wat staan ​​net vir die gids. Dit is duidelik dat hier, sien ons rwx, wat leesbaar, skryfbaar, en uitvoerbare. Dit kan ook voorgestel word as stukkies, wat ons sal kry in op die volgende bladsy. So elke drietal wat ons gesien het hier, so dit is drie drieklanke. Ons het rwx, r niks x en r niks x vir hierdie eerste lêer. Dit is hierdie algemene struktuur. [00:34:49] So ons het 'n paar gids. Ons het 'n paar gebruikers groep met hierdie regte. Sommige groep wat hierdie regte, en 'n wêreld wat 'n toestemming. Jy kan dink van hierdie as 'n drietal. Jy kan dink van hierdie as drie stukkies. Sodat hulle waardes kan hou oral uit 0 tot tot 7, wat is die rede waarom soms ons moes jy doen chmod 600 in plaas van chmod rw wat ook al. Ons kry in 'n voorbeeld is daar. Maar basies, kan jy dink van hierdie as óf net rwx, of jy kan dink van hulle as 'n paar aantal waar hierdie eerste een hier verteenwoordig 'n getal tussen 0 en 7, die tweede een verteenwoordig 'n getal tussen 0 en 7, en die derde een verteenwoordig 'n getal tussen 0 en 7, OK? [00:35:38] r het 'n waarde van 4. w het 'n waarde van 2, en x het 'n waarde van 1, wat is die rede waarom hierdie toestemming hier sou chmod 700. Want in hierdie geval hier, dit sê ons het die eerste bietjie daar omgekeer op. So het ons 4 vir lees. Die tweede bietjie is omgekeer vir w, wat is 2, so nou het ons 6. En die derde bietjie is omgekeer op vir x, wat is 1, so ons kry sewe. En natuurlik, ons groep en ons wêreld is elk 0. So is dit ook die ekwivalent van chmod 700. En Ek sal beslis probeer om verstaan ​​die kartering tussen diegene. Ek is nie seker of dit ' kom op 'n quiz voor, maar dit sou 'n wees vraag wat ek kan vra. [00:36:18] Net 'n bietjie gaan selfs verder in chmod hier, hier is die heel algemene struktuur van 'n chmod oproep. So natuurlik, het ons hier chmod. Verwysings, wat dit verwys na is wie is ons om hierdie regte te of wat ons neem hierdie regte weg van. So het ons 'n hier in die regte, soos ons aan julle gegee chmod 'n plus x, soos ons sal binnekort te sien. 'n beteken net gee hierdie spesifieke regte vir almal. Gee hulle vir almal. So jy kan baie goed het u plus x of g plus x of o plus x of veelvuldige daarvan. Sodat die eerste deel is altyd gaan verwysings te wees. Wie gee ons hierdie regte te, of wat ons neem hulle weg van? [00:37:03] Die tweede een is die operateur. So julle ouens het meestal gehandel oor plus. Dit gee regte aan wie jy gee hulle terwyl minus, logies, verwyder hulle. So niks te verskriklik daar. En dan modi is wat ons het gepraat oor met lees, skryf, of die uitvoering. So 'n plus x beteken gee uitvoerbare regte vir almal. En dan, natuurlik, waarop spesifieke lêer of gids. OK? Almal goed met chmod? Nie te sleg nie? [00:37:37] OK, so HTML, enige van julle is oud genoeg aan- MySpace ouderdom? Ek het hierdie vir my artikel, en letterlik die helfte van die mense kyk na my soos ek is mal. Maar ek was soos, ouens, ons is nie so oud nie. Kom op. So HyperText Markup Language, dit is eerlik net 'n manier om vir jou sekere dinge te vertoon op die web. So dit is 'n opmaak taal. Dit is nie 'n script taal. Daar is geen logika in dit. Dit is bloot die te verander manier iets vertoon word. OK, so dit is 'n belangrike onderskeid te maak. Dit is beskou as 'n opmaak taal, nie 'n script taal. [00:38:12] So hier het ons ons HTML tags. Op hierdie skyfie is waarskynlik die meeste van die een wat jy vertroud is met moet wees en regtig gemaklik met. So natuurlik, ons het ons HTML tag, wat wys dat alles in tussen hierdie twee sal HTML wees. Ons het 'n paar skakel, wat natuurlik sal jy gee 'n skakel na 'n eksterne web bladsy. Sommige titel, binne ons kop hier. En ons het ons liggaam met h1, wat is 'n kop, so dit sal lekker maak en vet en groter. En dan, ons het 'n paar p, wat is 'n paragraaf. Jy moet weet waarskynlik en vertroud wees met die dinge soos hoe jy voeg 'n beeld, is daar enige ander kop klasse? Ek sou beslis gemaklik met div. So hulle het die meerderheid van die tags dat jy vertroud is met moet wees. Maar natuurlik, soos met alles in CS 50, die lys is nie volledig nie. So maak seker dat jy borsel op daardie. [00:39:08] CSS, so CSS, indien enige van julle kyk my seminaar van twee weke gelede, is eintlik net 'n manier om jou webblad te styl? OK, so ons het 'n paar opmaak taal. HTML, wat sorg vir net die teks en waar dit kan wees op die bladsy. Maar CSS is regtig wat maak dit mooi. Jy kan hierdie in jou HTML lêers, maar soos ons later sal praat oor, Ek is redelik seker dat dit dalk die volgende skuif, is dit is 'n algemene praktyk, en eintlik praktyk wat ons regtig moedig, vir jou om te hou hulle geskei toe ons praat oor MVC en dat die hele paradigma. Dit is regtig wat hierdie voed in. [00:39:42] So CSS is net 'n manier om dinge lyk mooi. Die dinge wat hier, soos liggaam en #title en info, hierdie is keurders en wat genoem hulle doen, is hulle spesifieke dinge kies binne jou HTML-lêer en toe te pas wat styl, wat soort van dinge wat jy wil, aan daardie spesifieke element van jou web bladsy. So hier het ons 'n agtergrond en 'n kleur en 'n font familie wat die wese toegepas op alles wat in die liggaam. So as ons kyk terug hier, is dit sou nie van toepassing op die titel. Dit sou slegs van toepassing op wat in hierdie liggaam keurders, OK? [00:40:22] Met die titel hier, dit is gaan dieselfde ding wees, die kleur van die teks synde blou is slegs gaan te beïnvloed wat binne die titel keurders. Sowel as inligting hier, die teks sal pienk wees, wat se inligting, wat is reg hier. Dus is die enigste ding wat pienk op hierdie bladsy sal wees is op datum, Maandag, November 17, 2014. OK, so CSS is net 'n manier om meer beheer over-- ja? [00:40:48] GEHOOR: Hoekom het jy die hash met titel te gebruik? [00:40:51] HANNAH: Volgende skuif, belowe! Ons sal daar kom. So dit is hoekom ons het hash te gebruik. So keurders neem op drie belangrikste vorms wat ons praat julle ouens oor. Ek fyou meer wil leer, daar is baie daar buite. Daar is 'n groot CSS dokumentasie. Daar is 'n tag naam, wat te doen het met net jou normale tags in HTML. So h1, p, div, h2, hierdie soort dinge. En ons kan net noem diegene soos dit is. So as ons hier met sien liggaam, dit is 'n normale tag. So kan ons net sit liggaam wanneer ons praat in ons CSS-lêer. [00:41:26] Met die titel, die hele rede waarom ons hierdie hash is ons wat is beskou as 'n ID. So 'n ID moet altyd wees uniek binne jou HTML bladsy sodat wanneer jy verwys na dit, het jy weet dat jy net is verwys een spesifieke ding. So in hierdie geval hier, met ons h1 hier, CS 50 resensie sessie, ons het 'n ID van die titel. So om net te verwys na wat stukkie van ons HTML, doen ons 'n hash titel. Net deur konvensie word IDs aangewese met 'n hash in die voorkant van hulle. In dieselfde manier, ons sien info hier is 'n klas. En so klas met CSS is aangewys as 'n dot-klas of dot wat daardie klas is. So in hierdie geval hier, dit is inligting. [00:42:10] So ek neem dit terug. Beide van hierdie sou wees pienk vir ons CSS hier want hulle het albei 'n klas van inligting. En in ons CSS-lêer, het ons aangewese dat enigiets met 'n klas van inligting sal pienk wees. Maak dit sin maak? Ja? [00:42:27] GEHOOR: As jy was om te maak alles in die liggaam wit, en dan moet jy probeer om te maak iets binne dit blou, sou dit probleme veroorsaak? [00:42:34] HANNAH: So CSS is cascading style sheets. Dus, wat is in die rigting van die onderkant sal voorrang geniet. So as jy iets doen met die liggaam, en jy maak alles wit, en dan later op u om die titel te verander of jy die teks verander binne die liggaam, dit oor skryf nie. So iets na die onderkant sal voorrang geniet. Ja? [00:42:56] GEHOOR: En ID's is uniek, maar klasse kan meer wees? HANNAH: Right. So ID's moet uniek wees, en klasse kan verwys na soveel dinge as wat jy wil. Enige ander vrae? Ja. [00:43:09] GEHOOR: [onhoorbaar]. Ek wonder of wat maak 'n verskil. HANNAH: Ek is jammer, wat was die vraag? GEHOOR: Daar is klein "F" en kapitaal "F." HANNAH: So die verskil tussen klein "f" en kapitaal "F" moet nie 'n verskil maak. So "f" sal wees 15 óf manier. Cool, enigiets anders? Almal goeie, CSS? Ja? [00:43:30] GEHOOR: Jammer. Kan jy 'n klas en 'n ID? [00:43:35] HANNAH: Ja, jy kan. Dinge kan beide 'n klas en 'n ID. En ek raai toets dit op jou eie. CSS sal jy net leer die beste deur ' iets baie eenvoudig webblad, opstel sommige CSS, en net sien hoe hulle omgaan. En jy sal kry 'n baie goeie, intuïtief sin vir hoe dit werk. [00:43:56] OK, almal goed met CSS? Jy gaan almal te maak pragtige webwerwe met CSS nou. OK, beste praktyke, net dinge in gedagte te hou, dinge that-- dit is hoekom ons dok jy vir die ontwerper en noem maar op. So maak al jou HTML tags. So as jy 'n oop liggaam, daar moet 'n beslote liggaam. As jy het 'n oop paragraaf, daar moet 'n beslote paragraaf. Kyk jou bladsy bekragtig. Julle moet baie vertroud wees met hierdie van p-die sewe met CS 50 finansies met die W3 validator. En soos ek gesê het, een van ons groot paradigmas is die skeiding van jou styl met CSS uit jou opmaak, wat HTML. En dan, natuurlik, ons het hierdie groot Kletskerk hier. Yay, komiese verligting! [00:44:38] OK, TCP / IP. Tussen hierdie en HTTP, basies hulle is albei protokolle. So jy kan net dink van hulle as 'n stel reëls wat bepaal hoe dinge beweeg oor die internet. So oordrag beheer protokol, of internet-protokol, is net 'n manier om seker te maak dat data kry waar dit gaan en dat ons weet as ons ooit ontbreek data. So as julle dink terug na lesing 'n paar weke gelede met Dawid waar ons het vier koeverte, hulle is almal getel soos een van vier, twee van vier, drie of vier, vier van vier, is dit net 'n stel reëls. Ons het gesê, OK, wanneer ons die stuur van meer as een pakkie, ons gaan na die nommer met watter getal is en hoeveel totale dat die gebruiker moet kry. [00:45:19] En dit is net vertel wie ontvang die data of hulle het alles of gekry as iets verloor het langs die pad. En wat hulle nodig het om weer te vra. Dit is regtig net 'n stel reëls. Dit is hoe jy kan dink, OK? En ook, dit bepaal die hawe, wat julle ouens can-- ek weet tydens lesing, hulle het 'n hele lys van hawens. Maar ons het dit nie nou hier. [00:45:41] So HyperText Transfer Protocol is, weer, dit is 'n ander protokol. So dit is 'n ander stel reëls wat regeer, in hierdie geval, hoe hiperteks oorgedra word. So is dit net laat blaaier te praat web bedieners. En soos ons hier sê, dit is soos menslike handshaking. Dit is net 'n manier om te regeer hoe die web bediener is gaan om te kommunikeer met die leser. En ons het net 'n paar voorbeelde. Ons het 'n paar versoeke hier waar AOO is die metode. Ons het HTTP 1.1, wat protokol weergawe vir ons. En dan, die gasheer, en dit is wat ons is eintlik probeer om toegang te verkry. En dan, as jy hier sien, het ons kry 'n paar reaksie met hierdie 200 OK as ons HTTP reaksie kode. Ons het 'n groot lys gaan ek te trek in een sekonde dat jy ouens bekend moet wees. En ons het hierdie tipe inhoud teks / HTML, wat net sê watter tipe data ons ontvang van die bediener, OK? Dit gasheer en die inhoud tipe is deel van die HTTP-hoofde. Jy kan so min of so min as 'n nodig is vir die konteks van wat jy met. Soms sal jy 'n baie het inligting uit jou bediener. Miskien het hulle is versoek om 'n baie inligting van die gebruiker. Dit is afhanklik van die konteks. As jy kyk na CS 50 Studie, daar is 'n baie meer op daardie. Maar ons het 'n baie om te kry deur, so ek gaan na regs voor as gaan dit is OK met julle ouens? Cool. Hou op. Ek het beslis dat hele lys of-- huh! Ek weet nie hoekom dit al die pad hier. Ek het gedink ek het letterlik geskuif dit terwyl ek besig was sitting-- [00:47:15] Davin: wil jy doen om dit te leer? Of wil jy my om dit te leer? [00:47:17] GEHOOR: Ek het gedink ons ​​kan net wys hulle om te begin met. Ek bedoel, jy kan gaan in hulle verder nie, maar ek gedink dit maak meer sin, want ek is net te praat oor HTTP status. So hier is die hele lys. Ek dink wat gaan gebeur is Davin gaan om te gaan later in hulle. Maar daar is 'n hele lys, 'n voorskou van die smaak te kom. OK, ons gaan blow-- dit gaan 'n PHP crash kursus soos geen ander nie. [00:47:41] So PHP, hiperteks voorverwerker, dit is 'n rekursiewe backronym, wat beteken dat dit is anders iets genoem. En dan was hulle soos hierdie nie regtig sin maak nie. So het hulle net die naam it-- en dit was 'n akroniem, sodat hulle net het dit PHP hiperteks voorverwerker, wat maak net nie sin nie. Fun storie. Dit is 'n programmeertaal. So soveel as wat ek beklemtoon dat HTML is nie 'n programmeertaal, dit is 'n opmaak taal, PHP is 'n programmeertaal. Hoe weet jy dit is want daar is logika. Daar is conditionals. Ons het veranderlikes, terwyl ons het nie een van daardie dinge in HTML. [00:48:12] Alle reg, dan het ons hierdie klein bietjie hier wat soos 'n voorsmakie van PHP. So basiese beginsels, veranderlike name begin met 'n dollar teken. Baie van die mense soos dit. Herinner ons geld. Dit is alles baie goed. Ons wil almal PHP. Sodat ons nie spesifiseer nie 'n veranderlike se tipe nie. Dit word bepaal te hardloop tyd. Die tolk sal wees soos, O, ons sal net loop deur, en volgens die konteks, ons sal sien watter tipe tipes hierdie veranderlikes moet hê. Daar is geen hooffunksie. Dinge sal net hardloop. Julle ouens met jou invoer in jou laaste p-stel, sal jy sien hierdie. Daar was nie regtig 'n hooffunksie. Jy het net geskryf wat jy wou om te gebeur. En dit is net soort van gebeur het. So dit is PHP vir jou. [00:48:56] Skikkings is baie soortgelyk. Ons het nog steeds hierdie bracket. Hier het ons het 'n paar veranderlike genoem arr, en dit is gelyk aan- ons ons normale bracket notasie. En ons het 'n paar belangrike waarde. En die groot verskil tussen C en PHP skikkings is dat ons hierdie associate-- het ons waardes kan assosieer sleutels. So in plaas van net ' 'n skikking wat geïndekseer is deur die aantal of die posisie van daardie element in die skikking, ons eintlik kan assosieer dit met 'n sleutel. Waar ons kan sê, OK, ek wil alles waarde is wat verband hou met vrugte. En dalk het ons vrugte na piesang. So dit sou terugkeer piesang aan ons. [00:49:41] Maar basies, die mees kragtige ding oor hierdie is dat as jy ouens onthou die demo van lesing waar ons basies herskryf speller in PHP, en dit was-- lookup was regtig net wil, nie hierdie sleutel bestaan? Dit is regtig soort van die krag van dit. Jy hoef nie te Itereer deur jou skikking. Jy hoef nie te weet wat ruimte is dit in. Dit kan wees aan die einde of die begin. Solank as wat jy weet die sleutel dit is wat verband hou met die waarde, PHP kan net spoeg wat waarde gou terug na jou, OK? [00:50:09] En dan het ons ook net het net omdat ons kan sleutel waarde pare beteken nie jy hoef te. Jy kan ook net ' 'n normale, gewapend soos hier, aan die onderkant, waar dit is net een, twee, drie, vier. Dit is ons waardes. En in die feit, hul sleutels is die indekse. So het die sleutel vir 'n nul sou wees. Die sleutel vir twee sal een. So aan en so voort, tensy jy uitdruklik wys 'n sleutel, jy kan aanvaar dat die waarde is net die indeks. Maak dit sin maak vir almal? Geen vrae? Awesome. [00:50:38] OK, foreach is 'n manier om Itereer deur jou skikkings. So het ons iets hier, net die algemene struktuur. So foreach, die naam van Ons verskeidenheid, soos wat jy wil elke te roep element in jou skikking, en ons kan iets doen met daardie element of met daardie waarde. Dus het ons 'n voorbeeld hier. Ons het 'n assosiatiewe array met hierdie twee inskrywings met kroeg wat verband hou met cat en qux word wat verband hou met roof. So sleutels is cat en roof. Waardes is bar en qux. So foreach, ons het ons verskeidenheid hier, as die sleutel waarde paar. Dit stel ons in staat om toegang te verkry beide die sleutel en waarde. Miskien het jy wil net die waarde, in welke geval jy kan net doen soos arr as $ waarde, en dan moet jy net toegang tot die waarde as jy Itereer deur. Maar miskien, vir 'n paar rede, wil jy die sleutel, wat is die rede waarom ek gekies het hierdie voorbeeld plaas. Sodat jy kan eintlik manipuleer sleutel en waarde in hierdie geval. OK? Vraag? [00:51:41] GEHOOR: As jy wil net manipuleer die sleutel, sal jy hoef te doen foreach-- [00:51:45] ALISON: Right. So as jy wil manipuleer net die sleutel, sou jy nog steeds nodig om hierdie sintaksis, want as jy net het arr as iets, as een ding, dit is gaan om te aanvaar wat jy wil die waarde, nie die sleutel. So as jy ooit net net soos arr as, miskien is dit soos $ element, dit gaan om te aanvaar dat jy vra vir net die waarde by elke punt. As jy uitdruklik wil iets te doen met die sleutel, selfs as jy nie van plan om enigiets doen met die waarde, wat jy nodig het om hierdie struktuur dat ons hier waar jy uitdruklik vra vir beide die sleutel en die waarde daarvan. N groot vraag. Enigiets anders? Cool. [00:52:27] Alle reg, PHP en HTML. O, ons is terug na p-die sewe weer. So dit moet kyk 'n bietjie bekend. So, dit is 'n paar eenvoudige HTML-vorm wat 'n paar insette naam van hallo. En ons sien ons het ons metode van AOO. En as ons onthou van ons p-stel, wanneer hierdie vorm ingedien word, dit stuur 'n skikking met die naam $ _GET wat al hierdie insette of veranderlikes die vorm wat moet wees gemanipuleer in ons PHP. So in hierdie geval, die gebruiker sou sit in hul naam. Hulle stuur dit. En ons sien dat ons 'n paar verskeidenheid hier. Ons het ons AOO skikking. En ons is die toegang tot die naam. [00:53:11] So wat sê, OK, gee my die waarde wat verband hou is met naam, noem dat die sleutel hier. En dat kaarte direk aan wat ons gesê ons insette naam is. So hierdie is dit gee jou die sleutel tot wat gaan wees in jou array hier. Maak dit sin maak vir almal? Ja? [00:53:32] GEHOOR: Maak die naam kry in verwys aan die pers lyn in [onhoorbaar]? [00:53:36] ALISON: Dit verwys na dit hier. So hierdie gebied reg hier, dit verwys na hierdie naam hier. So hierdie kon gewees het met die naam soos telefoonnommer, of wat ook al. Hierdie naam sê eintlik, wat jy noem hierdie gebied? Hoe gaan jy te verwys na hierdie gebied? En hierdie naam is eintlik wil, ons is sê hierdie veld is sy naam geroep. Dit is hoe ons gaan dit om toegang te verkry. [00:53:59] GEHOOR: So is dit wil, toevoer naam is gelyk aan Bob, and-- [00:54:02] ALISON: Right, dan is jy sou Bob kry daar. Presies. Almal koel? Alle reg, so kry versus POST, dit is die twee hoof maniere dat ons slaag data in 'n HTTP-versoek. Julle moet gesien het beide van hierdie hopelik. So met AOO, die inligting oorgedra word deur middel van die URL. So as jy ooit Google soektogte, YouTube, sal jy waarskynlik in sommige vraagteken. En dan, al die woorde dat jy net sit daar. En post verby die data in die HTTP boodskap liggaam. So anders kry, moet jy soort van oorweeg dat die data is verborge vir die gebruiker. Maar wat is regtig belangrik om te verstaan is dat dit nog steeds net soos onseker as AOO. Die analogie wat ek wil gebruik, is as moet jy jou bank rekening nommer en jy skryf dit aan die buitekant van 'n koevert, dis nogal onveilig. As jy dit op 'n stuk te skryf papier en sit dit binne-in die koevert, dit is nog steeds baie onveilig, want al wat jy hoef te doen, is om oop te maak dat tot en kyk na die werklike inhoud van die boodskap wat om te sien. So dit is "verborge", en mense soos om dink dit is veilig, maar dit is regtig nie. En ek is seker Davin sal kry in dat meer, miskien. Maar dit is 'n belangrike onderskeid te maak en iets wat regtig goed om te verstaan. [00:55:15] OK, SQL, Structured Query Language. Al die dinge wat ons het so onlangs gesien! So dit is basies net ontwerp, natuurlik, vir die bestuur van data. Julle het 'n baie ondervinding met dit in jou tafels met PHP MyAdmin. En daar is vier algemene navrae wat ons wil julle ouens te leer ken. So is daar werk, plaas, kies, en verwyder. So maak seker dat jy weet wat regtig goed. Ons gaan om te gaan deur hulle baie vinnig. [00:55:40] So werk, regtig, as wat jy dalk dink dit doen nie, dit is net updates data in die databasis. So ons het 'n paar voorbeeld hier. Dit is die algemene struktuur van 'n update navraag. So ons werk om die tafel dat ons praat. En ons wil seker te stel waardes, sekere kolomme gelyk aan spesifieke waardes. So dit net updates die tafel, die verandering waardes in al die rye in hierdie geval. So in hierdie een hier, 'n werklike Byvoorbeeld, ons het insert-- jammer. Wat skuif gevorderde sonder my om dit te besef. [00:56:17] So hierdie updates tabel col1 gelyk te VAL1 waar huis gelyk "Currier." Wat hierdie een doen, is dit verander net, is dit net updates hierdie waardes in spesifieke plekke. So in hierdie eerste een, dit verander hierdie waardes vir alles wat in jou tafel OK? Dit gaan om dit te verander kolom vir elke enkele inskrywing, vir elke enkele ry. Maar dit waar, kan jy dink aan dit as 'n kwalifiseerder. So dit is net gaan om te verander dit in 'n baie spesifieke plekke. So in p-die sewe, wanneer jy Miskien opgedateer om die bedrag kontant dat jou gebruikers gehad, jy het waarskynlik sommige waar ID gelyk sessie ID, reg? [00:56:53] Omdat jy nie wil hê nie verander die bedrag van die kontant vir elke persoon wat is die gebruik van jou webwerf. Jy wou dit te verander vir een spesifieke persoon, dat daardie persoon ' wie was dit gebruik op daardie tydstip. Reg? OK, so voeg, voeg sekere waardes in tabelle. Dit is soos wanneer jy skep van 'n splinternuwe gebruiker. Die algemene struktuur hier is voeg in watter tafel ons praat oor. Waardes, synde die waardes wat ons eintlik wil voeg. OK, so as ons hier sien, is ons het in tabel voeg. Dit is spesifieke kolomme met hul ooreengestem waardes. So hierdie sê insetsel 'n nuwe ry met waardes VAL1 en VAL2 onder hierdie spesifieke kolomme. [00:57:33] So miskien het jy wil net om te vul uit die helfte van die dinge in die ry. Dit is wat hierdie deel hier kan jy doen. Dit kan jy eintlik bepaal watter deel. Ja? [00:57:44] GEHOOR: jy kan net [onhoorbaar] selle in die ry [onhoorbaar]? [00:57:52] ALISON: As jy net in te vul sekere dele van jou ry, die res van die selle is net leeg. Solank as wat jy hulle toelaat om te wees leeg, dit is nie 'n probleem. As jy probeer om dit te bekom, is dit gaan 'n paar leë element om terug te keer. Maar dit is belangrik om te weet wat in sekere tafels, hulle het om toegelaat te word om te nul. Jy kan hardloop in 'n probleem tydens jou p-stel want ons het nie toelaat dat enige van jou waardes null. Maar jy kan spesifiseer 'n opsionele waarde in jou tafel. [00:58:26] OK, kies, so dit is net 'n manier om spesifieke data vanaf 'n tabel op sommige identifiseerder wat jy wil. So kies ster uit tabel waar Kol gelyk iets beteken net, gee my al die inligting wat verband hou waar hierdie spesifieke kolom is waar. So die ster in hierdie geval sal terugkeer om die hele ry na jou, OK? [00:58:49] En dan, in hierdie geval, kies ster van tabel gee jy net die hele tafel. En dan, verwyder natuurlik, is dit net verwyder die ry van die tabel. So verwyder uit tabel, ongeag tafel is ons verwysing, waar 'n paar spesifieke identifiseerder of 'n toestand is waar. Ja? [00:59:07] GEHOOR: Vraag. Hoekom gebruik jy dubbel aanhalings, en of jy doen dubbele aanhalingstekens of enkel aanhalings, maak dit 'n verskil? [00:59:13] ALISON: Double aanhalings of enkele aanhalings maak nie 'n verskil in SQL. Ek het gedink ek het 'n ander vraag. Ja? [00:59:20] GEHOOR: Is dit nie raak wat kry ontsnap uit die navraag? [00:59:25] ALISON: Rob? [00:59:27] ROB: Wat bedoel jy deur ontsnap uit die navraag? [00:59:31] GEHOOR: As iemand 'n enkele navraag in die vorm of-- [00:59:36] ROB: As iemand was om sit 'n enkele aanhaling in, dan so lank as wat jy reinig jou insette, dan is dit maak nie saak nie. Maar as jy die gebruik van 'n enkele quote en jy is verkeerd ontsnap jou insette, dan ja, wat hulle nodig het 'n enkele aanhaling in orde te bring om te breek jou kode. as jy dubbele aanhalingstekens gebruik, wat hulle nodig het 'n dubbele te sit haal jou kode te breek. Maar so lank as wat jy dinge ontsnap korrek is, beteken dit nie saak nie. Dit is net gaan om te vertaal word die korrekte simbool in elk geval. [00:59:59] GEHOOR: Wat beteken ontsnapping beteken? ALISON: Wel, soos reinig en ontsnap nie. Die eksamen wat ons het, die groot Kletskerk komiese dat hulle trek waar jy hê, oh-- ROB: Dit is die laaste skyfie. ALISON: Dit is die laaste skyfie, regtig? Oh my god. Daar gaan ons, volmaak. OK, so basies, kan jy spuit iets in hierdie SQL navraag waar dit breek jou kode, of soos Dawid het in die klas, as ons 'n paar enkele quote 1 gelyk 1 en as ons kode, Ons het net direk kopieer wat in, en ons het 'n eindig enkele aanhaling, wat gebeur is dat ons sommige uitdrukking wat evalueer aan waar dat sal laat iemand voer ons databasis en kry data wat ons wil nie hulle te kry. So reinig die insette beteken net om seker te maak dat ons ontsnapping hierdie karakters en die aanwysing van hulle as karakters en nie dinge wat toegelaat moet word om letterlik geneem as ons SQL-stelling. [01:01:04] So het die groot ding wat ons gesê dat julle ouens moet gebruik word om was HTML spesiale karakters, dit is iets wat wat jy dalk wil 'n blik op te neem. OK, verwyder. Datatipes, sal dit al wees aanlyn. Aangesien ons 15 minute oor, ek is net gaan om te gaan reg deur hierdie. PHP en SQL, basies is dit net ons het 'n navraag funksie wat gehelp beskerm teen hierdie kwaadwillige aanvalle. So wanneer jy gebruik navraag het, is ons seker maak dat dinge ontsmet en noem maar op. [01:01:36] MVC is net 'n ontwerp paradigma, so model, sien, kontroleerder. Dit is net 'n manier om dinge te hou mooi en verdeel in die dieselfde manier dat ons geneig is om faktor uit kode in funksies. Dit is net 'n web ontwerp raamwerk wat jou toelaat om dieselfde ding te doen. Ek gaan om dit te slaan. [01:01:54] Dit is iets wat ek sou wees super gemaklike met. Dit is 'n groot bietjie tafel daar. Dit gee jou die funksie voorbeeld van die model. Ek gaan net deur dit omdat ek regtig wil Davin in staat wees om te praat. As jy enige vrae het, voel asseblief vry. Ek sal na hier te wees. Net kom praat met my. Met dit, het ons HTTP status. En Davin se gaan blaas deur middel van hierdie in 15 minute. Dit gaan groot wees. [01:02:17] Davin: OK. Uh, jou mic? Ja. Jammer. ALISON: manier om voorbereid te wees. Davin: Nee, ek is gereed. Ek is gereed. Kom ons doen dit. Dit is gereed. OK. Jammer. Ek gemors koffie op myself. Ek weet nie of ek meer ontstel dat ek lyk dom, of dat ek nie koffie nie. In elk geval, net 'n vinnige aankondiging oor die vel julle ouens het. So hierdie blad julle ouens het nie die amptelike wat op die quiz. Dit is die amptelike wat op die quiz. Ook op die webwerf, ons vertel jy, OK, dit sal wees op die quiz. So in die klein cheat sheet jy het, nie amptelik nie. En daar is foute op dit. So die beste om nie net blindelings dit gebruik. So ja, dit is dit. So laat ons kry in hierdie ware vinnig. [01:03:05] So HTTP status. So wat gebeur wanneer die webwerf, is alles reg. Alles is OK. Alles kom terug na jy die manier waarop jy dit wil. Jy kry 'n 200 OK. 301, waar het ons gesien dat 301 voor? Wag, wat gaan aan? Jammer. Ons het gesien i tin lesing tydens sekuriteit. So tydens sekuriteit, so as David getik in http en dan probeer om te gaan na cs50.net, jy gaan om te sien 301 verskuif. Hoekom? Omdat dit gaan om te lei jy outomaties aan ons HTTPS. [01:03:35] So 301 verskuif, net dit is basies 'n aanstuuring. En jy kan dink oor dit soos hierdie. Enige van die statusse wat begin met 2's, dit is soos, OK, alles is OK. Enige van die statusse wat begin met 3, dit is aanstuuring. Statusse wat begin met 4, wat beteken dat daar is 'n soort van 'n kliënt fout. Statusse wat begin met 5, dit is 'n soort van bediener fout. So jy soort van breek die status soos dit. So 304 nie nie verander, so in jou server.c p-stelle, so kom ons sê jy gelaai cat.html. Alles kom terug, jy 200's, OK, groot. [01:04:03] Kom ons sê jy dit verkwik. Wel, in daardie cat.html, jy het 'n JPEG. Wel, wat JPEG is nie gaan herlaai kry. Jy gaan nie 'n ander te plaas KRY versoek aan die bediener, en dan kry al die inligting terug. Dit gaan net be-- dat die beeld is gaan in die kas word op jou rekenaar. En so dat die beeld sal wees om 'n 304. So dit is nie, is aangepas. As jy dan sluit uit, duidelik koekies, en dan verfris en probeer om die bladsy te laai weer, jy gaan 200's te sien. Jy gaan nie om te sien dat 304. [01:04:28] 400, slegte versoek real vinnige, soos as jy gaan 'n te stuur Into voorwerp na die bediener en jou into voorwerp was verkeerd, jy sal sien iets soos dit. 403, verbied. Wanneer sal jy sien 'n verbode? Waarskynlik Waarskynlik? GEHOOR: CHMOD. Davin: CHMOD, ja. So jy het nie ingestel regte korrek. 404, nie gevind nie. Dit is net nie daar nie. So as jy tik in die verkeerde adres. 500, interne bediener fout, die bediener waarskynlik nie korrek opgestel nie. Iets wat nie op jou einde, maar iets op die bediener kant. En 503? Baie van die mense het gesien 503s in die laaste p-stel. Wanneer sal dit gebeur? Ek het gehoor fluister. [01:05:05] GEHOOR: Wanneer Google besluit jy is 'n robot. Davin: Ja, wanneer Google besluit jy is 'n robot, jy 503s. So dit is 'n oorlading. As jy versoek het van die bediener te veel, dit is gewoonlik tydelik. En die meeste van julle het opgemerk dat dit. So jy sien 503. Jy kan 'n bietjie geneem breek, dan is die 503s gegaan, en alles was reg. [01:05:20] GABE: Real vinnig, wanneer jy ouens kry 500 in waarskynlik die laaste probleem stel? Ja? [01:05:27] GEHOOR: Gewoonlik as die bediener het 'n lêer misplaas of [onhoorbaar] hul masjien [onhoorbaar]. [01:05:34] GABE: So is dit dalk 'n opset wees kwessie in jou PHP op jou bediener. Maar dit mag dalk net iets wees soos 'n kommapunt dat jou vergeet. As jy tik PHP, sommige verkeerde sintaksis kan kry jy iets soos dit. OK? [01:05:46] Davin: Cool. Wil jy my om te doen net tot AJAX? [01:05:51] GABE: [onhoorbaar]. Davin: OK. So, wat is die DOM? Wat beteken DOM staan ​​vir? [01:05:55] GEHOOR: Document voorwerp model. Davin: Nice. En hoekom wil ons dit nie? Awesome. Right, so dit laat ons net toegang die HTML, toegang tot ons bladsy baie vinnig. Hoekom? Omdat ons die behandeling van ons bladsy, die behandeling van ons HTML tags, behandeling alles asof hulle voorwerpe. As ons die behandeling van hulle soos hulle is voorwerpe, wat dan kan ons doen? Wel, kan ons funksies 'n beroep op hulle. En dit is belangrik hoekom? Wel, omdat ons gaan gebruik JavaScript ons HTML te werk, werk hierdie voorwerpe. So as ons behandel hulle soos voorwerpe, ons kan dan bel funksies op hulle. Ek gaan om te kry in dit 'n bietjie meer as Ek gaan in JavaScript, maar jy het al gesien soos document.getElementByID. So dokument is jou element, kry element deur ID, so jy gaan om te kyk vir 'n paar ID in 'n HTML tag. En dan, kan jy doen iets anders aan daardie. Byvoorbeeld, soos document.body, dan kan jy voeg kind. So jy gaan om die dokument te vind. Jy het die dokument. Jy gaan die liggaam te vind. Jy het die liggaam. En dan, gaan jy noem 'n funksie op dit. So voeg kind, en jy kan voeg sommige HTML op die einde in jou liggaam. So basies, jy is net die behandeling van dit soos 'n voorwerp. Jy behandel HTML tags soos 'n voorwerp. En dit maak dit baie maklik en vinnig om te gaan deur hulle. Maar dit laat jou ook funksies op hulle te bel sodat jy kan manipuleer en verander die elemente. [01:07:04] GABE: Gegewe hierdie, hoekom is JavaScript sulke 'n mooi taal om te kommunikeer met HTML? Kans is, wanneer mense is die keuse die taal vir die leser, vir die kliënt kant, JavaScript is regtig mooi, dit is regtig goed in die hantering voorwerpe. En die voorwerpe is soort van soos die voorwerpe wat in die HTML verskyn, so dit is baie maklik vir JavaScript dat die soort van hantering te doen. Davin: Nice. So hier is net 'n voorbeeld. So ek dink op die vorige jaar se quiz, of miskien twee jaar gelede, het ons gevra om 'n boom te skep. So, dit is presies wat jy wil doen. So jy begin met dokument. En dan moet jy basies net kyk na die etikette. So as jy kyk, ons begin met 'n HTML tag. En dan, jy leidrade oor hoe om te doen dit, gebaseer op die inkeping. So kop soort takke af. Binne kop, ons het 'n ander etiket vir titel. So dan, ons het 'n titel tag. En binne-in dat ons het 'n paar string. En so het ons verteenwoordig 'n string in 'n sirkel. En al die tags in blokkies. [01:07:54] En as jy kyk, as ons dink van hierdie as 'n boom, en laat ons sê dat HTML is 'n ouer, dan kop en liggaam gaan broers en susters te wees. Hulle is albei gaan wees kinders van daardie ouer. So, want hulle is beide broers en susters, is hulle gaan soort van volgende te wees mekaar in ons boom model. En dan, jy basies doen presies dieselfde ding. So nie moeilik nie, maar ons het gevra vrae soos hierdie voor op die quiz. GABE: Het enige iemand vrae so ver? Is dit goed? Davin: Cool. JavaScript, OK, die goeie dinge. So JavaScript, wat is JavaScript? Wel, JavaScript is-- dit ingewikkeld, maar hierdie is 'n paar van die hoogtepunte wat jy in gedagte moet hou. Eerstens, dit is losweg getik. Wat beteken dit? So PHP was-- ja, wat gaan aan? [01:08:35] GEHOOR: Jy nie uitdruklik hoef te Noem watter tipe veranderlike dit is. Davin: Perfect. So het hy gesê jy hoef nie te uitdruklik die tipe veranderlike. Dit is presies reg. So in C, as ek int i gelyk 50, dan in PHP, dit is net soos hierdie, $ i, gelyk 50. Toe ek in JavaScript, wat sou die oproep? Var, reg? Dit sou wees soos var i gelyk 50. Maar jy hoef nie te wees soos, OK, dit is 'n int. OK, dit is 'n string. Geen behoefte om dit te doen. Dit is 'n geïnterpreteer taal. So wat beteken dit? [01:09:04] GEHOOR: Nie saamgestel. [01:09:06] Davin: Wat nie saamgestel beteken? Ja? [01:09:11] GEHOOR: Jy hoef nie die kode te herstruktureer dit gereed te kry vir die rekenaar om dit te doen. Dit is net geneem by die tyd van die uitvoering en die rekenaar [onhoorbaar]. Davin: Ja, so dit gaan deur 'n tolk. Maar jy is presies reg. So jy gaan nooit om dit te stel, reg? Wanneer jy doen jou PHP en JavaScript-kode, jy nooit saamstel genoem. Jy het nog nooit iets genoem soos maak of iets soos dit. Dit is omdat dit geïnterpreteer. So elke keer as dit gaan deur die leser, dit gaan deur 'n tolk. En wat gaan om dit te interpreteer net in reële tyd dadelik vir jou. So, wat is 'n paar positiewe en negatiewe om met 'n geïnterpreteer taal en met 'n saamgestel taal? So compiling-- ja, wat gaan aan? [01:09:50] GEHOOR: Getolk is stadiger. Davin: In watter sin? [01:09:57] GEHOOR: Nadat jy stel, het jy nie ' enige ekstra stappe te doen om uit te voer dit, terwyl hierdie [onhoorbaar]. [01:10:04] Davin: Right, volmaak. So wat jy sê is basies dat opstel, wanneer jy stel, jy het 'n baie koste vooraf, reg? Jy gaan om dit te stel. Maar nadat jy dit stel, die samesteller gaan om dit te optimaliseer. Dit gaan vinnig. Dit gaan basies so vinnig as wat dit kan wees. Met interpreteer, moet jy nooit het dat vooraf koste. Inteendeel, dit gaan effens stadiger elke keer wat jy dit interpreteer. En jy gaan te hê elke keer interpreteer dit. So in plaas van om hierdie 'n tyd koste, nou is jy gaan om dit te interpreteer elke keer as die webblad lewer. [01:10:29] So tolke is goed, want jy hoef nie om dit te stel, maar hulle is sleg in dat elke Tyd om die bladsy laai, is dit gaan te hê hierdie JavaScript interpreteer. En dit gaan effens stadiger te hardloop as wanneer jy dit op te stel. Kan jy om te communicate-- O, wag. Gebruik om die te manipuleer inhoud en voorkoms. Ons het net gepraat oor dat. Dit maak gebruik van die DOM. AJAX, sal ons in AJAX in 'n bietjie. En dan, dit is kliënt kant. So PHP is die bediener kant. JavaScript is kliënt kant. Wat is positief dat? Dit sê dit. Dit is vinniger, reg? Omdat jy nie aan- dit is vinniger. Jy hoef nie te kommunikeer met 'n paar ander toestel. As jy net op jou kliënt, jy is nooit gaan hê om te gaan en sien wat op die bediener en dan terug te rapporteer of iets soos dit. So kliënt kant is geneig om te 'n bietjie vinniger. [01:11:15] GABE: Ja, maar dit beteken nie PHP is vinniger as JavaScript of enigiets van die wil. Hulle hardloop soort in dieselfde spoed, want hulle is beide geïnterpreteer tale. Die ding wat stadig hier is die versoek. So jy eintlik gaan al die pad oor te Brasilië inligting te kry wat daar woon. Maar PHP en JavaScript, hulle soort van loop in dieselfde spoed. Dit is nie dat 'n mens is vinniger as die ander. Dit, ook, truuk vraag hier. So JavaScript word nooit masjien kode, waar of vals? [01:11:47] GEHOOR: Vals. GABE: Vals. Dit het aan die masjien raak kode, omdat masjien kode is die enigste ding wat die masjien verstaan. Selfs al is dit nie saamgestel is, dit nog steeds masjien kode omdat die tolk is net 'n program wat gaan reël vir reël en verander dat die lyn in iets wat die rekenaar verstaan. OK? Cool. [01:12:08] Davin: Hier is net 'n baie basiese hello world JavaScript program. So ek weet nie if-- jy dit gesien. Maar jy net HTML hier. En in plaas van werklik om die JavaScript in die script tags, So jy wil gewoonlik sit dit in die kop. Jy het script tags. Jy gooi dit daar. Al wat ons het hier gedoen word ons verbind in-- sodat ons in 'n JavaScript-lêer gekoppel het soos hierdie. En jy het alles gedoen het, reg? So wanneer jy die gebruik van jQuery en underscore.js in die laaste p-stel, jy nie ton van die kode in jou script tags, in jou kop. Jy kan dit doen, maar in plaas daarvan jy net 'n skakel in. En jy dit te koppel in Net soos wat jy doen met CSS. So dit maak dit net makliker om dit te lees jou kode is nie 1000 lyne lank hou met ton van die funksies wat jy dalk nie gebruik. [01:12:52] In plaas daarvan, het jy net 'n skakel in. Dit compartmentalizes dit. Dit is soos die skryf van sommige kop lêer, en dan insluitend kop lêer in C. Dink aan dit net soos hierdie. So wat beteken dit doen? Wel, dit gaan om te hardloop. Dit gaan te waarsku. So jy gaan 'n bietjie te kry pop-up genoem hello world. Vinnige vraag, net gesonde verstand tjek, so jy sien hier in die liggaam, sê liggaam, HTML hier. Wat kom eerste? Sien ek die liggaam, HTML hier, of sien ek die waarskuwing eerste? [01:13:19] GEHOOR: Alert. [01:13:20] Davin: Right. Hy sê waarskuwing. Hoekom? [01:13:22] GEHOOR: Omdat jy gaan van bo tot onder. [01:13:24] Davin: Ja. Volmaak. So sê hy, gaan jy van bo na bodem, wat is absoluut korrek is. Jy gaan om te gaan van bo tot onder. En in JavaScript, jQuery, jy het 'n funksie wat is soos onload, of gereed is, en wat sê, OK, wag totdat al hierdie HTML gelaai. En dan, bel die JavaScript. Want ons het nie dat hier, die heel eerste ding wat gaan gebeur is dit gaan om te gaan van bo tot onder. Dit gaan om te tref dat JS noem, dit gaan te waarsku. Na wat jy kliek OK, dat waarskuwing gaan weg. Dan is dit gaan om te wys jy die liggaam HTML hier. Nice. [01:13:54] OK, so net ware vinnig, skryf in JavaScript is super vinnig. Ten einde te verklaar 'n veranderlike, var naam. So in C, jy het int i, het jy te verklaar watter soort soort dit is. PHP, $. JavaScript, var. Ons het gepraat oor hierdie. Alle reg, laat ons gaan. [01:14:11] Loops, dieselfde ding. Dieselfde ding. Funksie verklarings, so net soos jy gesien het in C. Die enigste ding wat anders is so toe jy na ander programmeertale, soos wanneer jy 51 volgende semester en jy doen met OCAML, jy kan gaan met anonieme funksies. So dit is presies wat jy hier het. So jy wil om te sit in som, 'n soort van som waarde. Maar jy kan net doen dit een keer. So jy wil nie om dit te noem funksie som, gee dit 'n funksie verklaring. In plaas daarvan, het jy net gebruik dit as 'n anonieme funksie. En jy het gesien dat dit 'n baie. Jy sal 'n voorbeeld van sien dit in 'n paar skyfies. Ja, ons sal sien. GABE: Goeie vraag. Wanneer wil jy dalk om te gebruik 'n anonieme funksie hier? Basies, as jy iets wil hê, soos 'n gebeurtenis, gebeur. So wanneer die muis is gekliek, byvoorbeeld, jy wil 'n funksie genoem te word. So jy slaag om die gebeurtenis hanteerder, jy slaag om die geleentheid, soort, die funksie wat jy wil genoem word. En wat jy verby is soos aan die einde van die dag, net 'n wyser na wat onderrig, aan die funksie. So dit is nie soos jy verby die hele kode, net soos 'n verwysing na die funksie. En dan, wanneer iemand druk die muis, dan daardie funksie kry genoem. [01:15:17] Davin: Arrays, sodat jy het 'n verskeidenheid verklaring. Dan, 'n verskeidenheid dinge te sit in. Real vinnig, wat sal hierdie druk? Wat sal die derde element wees? [01:15:31] GEHOOR: "JS". [01:15:32] Davin: Right, sou dit "JS." Wag, gaan terug. Wat is die lengte? [01:15:37] GEHOOR: Drie. Davin: Drie, reg? Presies wat jy dink. OK, nou gaan. Skikkings, kan jy dit aan hulle voeg. So kan jy buite gaan hul aanvanklike grense. Net iets om in gedagte te hou. PHP, JavaScript, hulle is 'n bietjie bietjie meer vergewensgesind in terme van dinge soos dit. Voorwerpe, baie soos structs in C, baie soos assosiatiewe skikkings in PHP. Jy het al ervaring gehad het met hierdie. So into wanneer jy verby into heen en weer in p-stel agt, dit is jou doel. [01:16:03] So ja, byvoorbeeld, ware vinnige voorbeeld. Hier is 'n voorwerp. Die manier waarop jy verwysing hierdie voorwerp, sodat net ware vinnige, Kom ons sê ek wou om uit te vind uit, OK, wat is die kursus? En so het die voorwerp naam hier is CS50. En dan as ek het 'n assosiatiewe skikking, hoe sou ek dit doen? Ek sal gebruik word om 'n sleutel, reg? So ek het die naam van die skikking. Ek het bracket, aanhalings, sleutel, einde aanhalings, einde bracket, en dit sal verwys wat element in my assosiatiewe skikking. Hoe doen ek gekla Natuurlik in my voorwerp? Enigiemand wat weet? [01:16:39] GEHOOR: [onhoorbaar]. [01:16:40] Davin: Wat gaan aan? GEHOOR: CS50.course. Davin: Right, ja. So CS50.course. So die manier waarop jy verwys dinge binne 'n into voorwerp is met 'n dot. [01:16:48] GEHOOR: Jy kan ook gebruik array sintaksis. [01:16:53] Davin: OK, fine. [01:16:54] GABE: Jy kan ook gebruik CS50 bracket, string, soos aanhalingstekens. GEHOOR: Ek dink dit is identies aan PHP. GABE: Dit is dieselfde ding. Davin: Fine! Maar jy sal dit sien op ander plekke. Ja, so gaan hou. Dit is wat ek nou net gesê. So in 'n JavaScript jQuery voorbeeld. So dit is my DOM, reg? Real vinnig, so ek het 'n kop, hello world, liggaam. Ek het 'n knoppie. Dit sê: "stoot my," sodat ek wil om dit te druk. En ek wil om iets te doen wanneer dit gekliek. Reg langs. [01:17:31] Right, so dit is my JavaScript. So jQuery is net 'n makliker manier JavaScript te skryf. So hierdie, en wat ek gaan om te wys jy volgende, gaan wees jQuery, identies is. So het hulle dieselfde dinge sal doen. Net jQuery is geneig om te wees 'n bietjie makliker te maak. Mense is geneig om dit meer te hou. Dit het 'n baie van die funksies. So mense is geneig om jQuery te gebruik. Jy al gebruik jQuery in die laaste p-stel. So, wat sal dit doen? Wat sal hierdie JavaScript-- so dit is net plain JavaScript. Wat sal dit doen? Wat sal dit doen? [01:18:03] So die eerste, sien jy venster onload. Reg? So ons het nie gesien dat voor. So dit gaan om te wag totdat die hele venster vragte. So dit gaan om te wag totdat die HTML, al die beelde vrag voordat dit doen iets nie. So kom ons sê ons DOM gelaai. Alles is daar. Dan wat gaan gebeur? Ja? [01:18:19] GEHOOR: Button verskyn. [01:18:22] Davin: Die knoppie is reeds daar. Ja, so die knoppie se reeds daar. Maar dit gaan om te sê, OK, as ek op die knoppie, so op die knoppie is reeds daar, soos wat HTML tag. Wag, gaan terug ware vinnig. Hierdie merker reg hier is gaan 'n knoppie om reeds. Daar is reeds 'n knoppie. Maar dan, die JavaScript tag, reg hier, dit sê, OK, ek wil element te kry deur die ID, so soek knoppie sê net, OK, ek wil hierdie veranderlike te dat die knoppie te karteer. Sodat veranderlike is net 'n makliker manier om toegang te verkry dat die knoppie. En ek sê, OK, as ek op dat knoppie, so as ek op daardie element, en hierdie element verwys na die knoppie, indien ek op dit, dan wil ek 'n funksie te roep. Hier is een van daardie anonieme funksies wat ons praat. [01:19:03] Net noem 'n funksie. Binne daardie funksie, basies iets wat ons gesien het 'n baie, waarskuwing. Jy kliek op die soek knoppie. Dit gaan basies 'n knoppie. Jy kliek. Jy wat wakker. X uit. Dit is dit. Ja? [01:19:16] GEHOOR: So as jy die script [Onhoorbaar], script tag in jou HTML? [01:19:21] Davin: Jy kan die script sit tag reguit in die kop Omdat jy dit onload. Dit is ook dat jy 'n klik. So dit gaan om te wag totdat jy kliek vir iets. Maar onload is net om veilig te wees, te maak seker te maak alles baie in jou HTML vooraf. Ja? Jy wil iets om te sê? [01:19:40] GABE: [onhoorbaar]. Davin: Ja. [01:19:42] GEHOOR: So onload vermy die definisie van die veranderlike soek knoppie deur net te sê document.getElementByID soek knoppie dot [onhoorbaar]. [01:19:49] Davin: Beslis, maar dan jou string kry net groot. Presies, so dit is net te maak dit vir jou makliker te maak, ja. Ja? [01:19:56] GEHOOR: Waar het ons skep window.onload? Of document.ready? [01:19:58] Davin: Ja, daar is. Ja, daar is, het ek nagegaan. [01:20:02] GABE: Nie vir hulle om te gee oor. [01:20:03] Davin: OK, so ek gaan jy in elk geval te vertel. So basies, net in die algemeen, so window.onload wag totdat jou DOM, al jou HTML, vragte. Dit wag totdat jou beelde las. Dit wag totdat alles baie. document.ready, is dit net wag totdat jou DOM vragte. Sodra die HTML is almal daar, een keer jou DOM is daar begin hardloop. Dit is die enigste verskil. [01:20:23] GABE: Vinnige gesonde verstand gaan hier. So kan dit soort van gesien word soos 'n reël van die kode, reg? Want dit is window.onload gelyk aan 'n klomp van die dinge. Wanneer JavaScript lees hierdie, waar of valse, die funksie sal uitgevoer word. Vals. OK? Wat gebeur hier, is jy net verby hierdie funksie as 'n anonieme funksies te window.onload. En dan wanneer dit gaan om werklik uitgevoer raak? Wanneer die venster vragte. Dit is 'n gebeurtenis. So dit is jus t ding wat ons is praat oor vroeër, reg? So wanneer die gebeurtenis, die funksie gebeur. Dieselfde ding met die onclick. [01:20:59] Davin: OK, so iemand het weg die document.ready. Maar dit sal die presiese same-- wees GEHOOR: Die dollar teken, dit is 'n document.ready. Dit is 'n kortpad. [01:21:07] Davin: O, dit is? OK, so hierdie manier document.ready, kortpad. Maar dit is dieselfde as window.onload behalwe vir daardie klein verskil Ek jou vertel het. En dit is jQuery. So, dit is presies dieselfde thing-- dit is JavaScript. Dit is just-- sommige mense dink dit as 'n meer ligte gewig, slanke weergawe wat baie van die funksies dat jy waarskynlik sal gebruik word. So dit beteken presies dieselfde ding. [01:21:34] So dinge soort uitwys. So in die ander voorbeeld, ons het document.getElementByID, so ons het hierdie lang string wat gaan kry die element wat ookal ID wat dit het. Dit is vervang deur hierdie oproep reg hier. So jy sien die dollar teken, dan sien jy quote, hashtag. Hashtag is altyd 'n keurder. Dit sê, OK, dit het te doen met 'n ID. Wat is die selector vir 'n klas? [01:21:56] GEHOOR: Dot. [01:21:57] Davin: Dot, reg. As jy net gaan kies 'n tag, wat is dit? Dis net die tag, presies. En jy kan gebruik wat hier, as well. [01:22:05] GABE: En deur tag, bedoel ons soos div, byvoorbeeld, of die hoof. [01:22:08] Davin: of liggaam of p of iets soos dit, ja. So hier, OK, in plaas daarvan om te sê document.getElementByID, dit is net die presiese dieselfde ding. Net in jQuery, dit is korter. So dit is makliker. So dan, nie meer onclick, kliek net. jQuery funksie, bel hierdie funksie. Alert is presies dieselfde. So dit is 'n bietjie kleiner, of bietjie korter, 'n bietjie bit-- mense dink dit is 'n bietjie makliker om te skryf uit, 'n bietjie makliker om te verstaan. Maar dit is jQuery. Baie mense kry 'n bietjie bietjie verward en bekommerd en hulle dink, OK, jQuery is anders as JavaScript. Ek het hierdie te onthou twee verskillende dinge. Dit is nie. Ek bedoel, dit is verskillende sintaksis. Maar jQuery is JavaScript. Dit is net 'n skynbaar beter weergawe wat dalk makliker om te wees verstaan ​​dat mense gebruik. GABE: Ja, om te wees eerlike, wat dollar teken wat jy sien in jQuery, dit is net die naam van 'n funksie wat jQuery definieer. Dit hoef nie iets spesiaal. Is Dis net die naam van 'n funksie, net soos jy kan dollar teken definieer. [01:23:03] Davin: Ja, so gepraat oor hierdie. 'N paar nuttige dinge. Ek is terug by die ou vasvrae soek. In die afgelope paar vasvrae, hulle het het dinge soos hierdie te gebruik. So document.ready, so maak seker alles is gelaai, voordat jy begin om dinge te doen. Kies 'n ID, of kies 'n klas, sou dit net wees quote dot paar klas, end quote. Stuur, so as jy is stuur 'n vorm en oproep hierdie funksie na afloop van die vorm instuur. Waarde, so kom ons sê ek het 'n vorm voorlegging, soos 'n gebruiker naam, e-pos, wat ook al. Ek het 'n teks boks. So ek tik in die teks boks. Wel, as jy wil hê dat die waarde te kry uit daardie teks boks, jy gebruik dot val. En dan, hier, dot HTML is dieselfde is soos dokument dot getElementByID dot innerHTML. So wat gaan om terug te keer jy die HTML van daardie ID. Hier, jy moet net gebruik om 'n ID of wat ook al dot HTML. Dit sal die HTML van daardie element kry. As jy wil verander dan dat HTML, kan jy dit slaag iets. So jy wil wees soos dot HTML, en dan binne, aanhalings, nuwe HTML of iets. [01:24:05] GABE: OK, so AJAX. Ek het regtig soos om te verstaan AJAX baie goed. So ek wil julle ouens te verstaan ​​AJAX baie goed. Want as jy dit doen, jy pretty much gaan om alles te verstaan ​​wat het te doen met HTTP, PHP, JavaScript omdat dit alles kom saam in AJAX. AJAX is nie 'n taal. AJAX is 'n tegniek. En dit gebruik baie van die verskillende instrumente. AJAX staan ​​vir asynchrone JavaScript XML. So het die metode, die taal, die data. [01:24:36] Dus is die belangrikste taal wat ons gebruik in AJAX alles te aktiveer en om alles te hanteer later is JavaScript. Dit is waarom dit betrekking baie naby aan JavaScript. En dan asynchrone is omdat ons dit nie doen nie alles op een slag wanneer ons nie die bladsy laai. Dit is die ding wat ons kan dinge doen soort in parallel. Die idee agter AJAX is wat jy wil dit 'n paar spesifieke inligting te kry. Byvoorbeeld, wanneer jy tik nuwe gebruikersnaam wanneer jy 'n gebruiker naam te registreer, my gebruiker naam is ABC123. En dan, aan die einde van die vorm, moet jy kliek Stuur. En dit het om te gaan na die bediener, en dan kyk of in die databasis, ABC123 is reeds daar. En as dit is reeds daar, dit sê, gebruikersnaam reeds in die databasis. En hulle, jy het om te vul uit die hele vorm weer. En dit was baie, baie sleg. [01:25:23] En dan sê mense, OK, hoekom kan ons nie net doen 'n klein HTTP-versoek om net check om te sien of hierdie gebruiker is in die databasis voordat die gebruiker moes dien die hele vorm? So byvoorbeeld, wanneer die gebruiker afwerkings tik ABC123, laat ons net gaan na die bediener 'n bietjie bietjie en net 'n ware of valse van die bediener om te sien of dit is 'n geldige gebruikersnaam of nie. OK, so dit is een van die belangrikste gebruik van AJAX deesdae nog steeds. [01:25:49] Davin: So ware vinnig, in 'n Ajax oproep in jQuery, jy kan te kenne gee dat jy dit wil sinchrone wees. Jy moet dit nie doen nie. Maar jy kan dit doen. En as jy dit gedoen het, wat sou gebeur? Wel, byvoorbeeld, wanneer jy om nuus of wat ook al, jou leser is net gaan om te wag tot op daardie hele oproep is voltooi in plaas van om jou te laat ander doen dinge reg nadat jy op dit. [01:26:14] GABE: Dit is nie meer verbygaan. Oh my god. Jammer! Yup. "In die verlede, die kliënt nodig het om te versoek die hele inhoud van 'n webwerf. " Dit is wat ek gesê het. Dit stel ons in staat om te stuur addisionele AOO- of POST versoeke sonder ons leser te laai. So aan die einde van die dag, ons is eintlik maak 'n HTTP-versoek hier in met JavaScript. Want voor, ons het net JavaScript gebruik die HTML wat reeds gekom het om te verander. En nou, ons kan dit gebruik om te koppel met die web bedieners so goed. Die manier waarop dit gebeur is ons die kliënt. Davin is 'n kliënt. En hy het al die JavaScript hardloop omdat HTML is stom. JavaScript is slim. So Davin Davin het sy smart deel en sy stom deel. Hy gaan sy smart deel nou gebruik. Hy gaan JavaScript om te gebruik te versoek, byvoorbeeld, of ABC123 is in die databasis of nie. [01:27:04] So Davin, asseblief, jy net stuur vir my 'n HTTP-versoek. Dankie. So het hy net stuur 'n HTTP-versoek. Jy sien dit? En dit is net die dieselfde manier dat enige HTTP-versoek is gestuur. Die leser, Google Chrome of iets, is gaan om te sien dat Davin se probeer om 'n HTTP-versoek te stuur, gaan help HM 'n bietjie. En wat gaan om te gaan al die pad na die bediener. Nou, is die bediener gaan hê PHP hier, of enige ander taal. Net soos in 'n normale HTTP-versoek. Dit is nogal baie 'n normale HTTP-versoek. [01:27:31] En dan, die bediener gaan om te sê, OK, Davin wil my om te kyk of hierdie ABC123 is in die databasis. Gaan praat met die model. Die model, sê dit is nie. ABC123 is 'n goeie gebruikers naam. En dan, is die web bediener gaan gebruik PHP 'n vorm van lêer te lewer. Dit kan letterlik net 'n lêer wat bevat "ja" in dit, of "nee, of iets soos dit. Dit kan enige lêer wees. [01:27:54] Dit kan wees soos ek gaan stuur Davin 'n foto van 'n eend as dit in die databasis en Stuur 'n foto van 'n hamster As dit is nie in die databasis. Dit sou soort wees stom, maar dit sal werk. OK, so ek stuur 'n eend te Davin. Davin 'n eend. En nou, is wat gaan die eend te hanteer? Davin se smart deel weer, so JavaScript, reg? JavaScript gestuur versoek, en JavaScript gaan die versoek te ontvang en interpreteer dit in een of ander vorm. [01:28:22] En in hierdie sin, gaan dit sê, OK, as eend dan is ek goed. As hamster, dan gaan ek om te sê, nee, gebruiker naam reeds bestaan ​​in die databasis. Maar gewoonlik, jy is nie gaan 'n eend te stuur. Jy gaan te stuur iets effens slimmer. En wat ons gebruik, is XML. En meer onlangs, ons gebruik into. Into is net JavaScript Voorwerp notasie, wat is basies jy 'n hele JavaScript voorwerp. En jy sit dit in 'n lêer, net soos dat CS50 voorwerp wat julle ouens gesien. Jy het dit in 'n lêer, en jy stuur dit aan Davin. [01:28:53] So in hierdie geval, sou ek 'n JavaScript voorwerp en net sê, gebruiker bestaan ​​nie, ja. Of gebruiker bestaan ​​nie, nee. En stuur dit terug na hom. En hoekom into? Omdat die persoon wie se ontvangs van hierdie is gaan JavaScript om te gebruik die reaksie te hanteer. En JavaScript werk so goed, want dit genoem JavaScript Object notasie. Reg? So kan hy net noem 'n funksie en kry hierdie mooi voorwerp van die reaksie. En dan, hy gaan om te weet of dat die gebruiker is in die databasis of nie. [01:29:22] So jy sien, dit alles kom saam in die web-bediener, en dan is daar 'n HTTP-versoek te en een HTTP reaksie en alles. So maak seker dat jy ouens hierdie AJAX oproep verstaan want dit help jou verstaan ​​almal van die konsepte wat ons praat. [01:29:37] So hier is 'n voorbeeld van AJAX met jQuery. En hier, ons doen met get into. So ons is nie probeer om 'n te kry beeld van 'n kat hier, of 'n eend. Ons probeer om 'n into lêer te kry. En dan is ons wag totdat dit gedoen is, dot gedoen. Dit beteken ek wag vir die reaksie. Dit mag dalk 'n rukkie neem. Dan, sien jy 'n bietjie laai. As jy wil om dit te doen in jou webwerf. So dot gedoen, en dan wat gebeur wanneer dit gedoen? Jy slaag in 'n anonieme funksie, net soos ons gesien het voordat. Omdat gedoen is 'n gebeurtenis, net soos klik van 'n muis of wat ook al, vir jQuery. So jy in hierdie funksie met slaag data, teks, status, en jqXHR. En basies, dit is net 'n paar veranderlikes dat jy later op kan gebruik om 'n die status van die HTTP-versoek, die data wat dit gaan terug te stuur na jou. So dan kan jy later op interpreteer en doen iets sinvol met dit. En as dit nie werk nie, toe is dit dalk misluk? Wel, as die HTTP-versoek gee jy 'n 500 of iets soos dit. Dan gaan dit om jou te vertel die status, watter soort van mislukking wat was, en allerhande dinge. Jy het om seker te maak beide gevalle te hanteer, anders sal die program gaan mal. [01:30:42] Davin: So ja, dit is presies wat jy sien op jou laaste p-stel. Die werklike AJAX oproep is in die get into. Dit is die oproep. En dan, dot gedoen is soos dit kontroleer of dit suksesvol. Indien dit suksesvol is, wat jy wil iets met die data om te doen. Jy terug van wat Into versoek data. Dit is wat jy kry terug. So as jy onthou van jou p-stel, baie van julle was soos data bracket i of wat ook al, dot skakel of titel. Wat ook al kom terug uit daardie into, ongeag die velde is in daardie into voorwerp, dit is wat jy terug kry. Data is wat jy terug kry. Teks status, net iets wat kan jy weet wat gebeur het. En dan, die jqXHR, dit is net die jQuery XML HTTP-versoek. Dit is net soos 'n voorwerp. En dan misluk, net soos Gabe gesê. GABE: In ons klein voorbeeld van ABC123 net om te kyk of dit is in die databasis of nie, die data sal iets wat jy nie sou doen, indien data dot gebruiker naam bestaan, en dit is wat jou PHP gegenereer vir jy, as data dot gebruiker naam bestaan, dan Ek gaan waarsku, gebruikers naam bestaan ​​reeds. Anders, gaan ek net die te laat gebruiker voort te vul die vorm. OK, sekuriteit, cool. [01:31:50] Davin: Wil jy my? [01:31:52] GABE: Ek hou van hierdie een. So iets wat lyk bekend. Ons is amper klaar. So dit is net die voorbeeld julle ouens het in die klas. Jy is met behulp van argv1 hier. Dit is soos 'n command line argument. En ons is MEM kopiëring dat in 'n buffer grootte 12. Wat is die probleem hier? Buffer oorloop! Want ons het 'n buffer grootte 12. argv1 dalk 'n grootte van twee biljoen. Ons doen nie enige grens nagaan. Sodat ons kan 'n baie van die geheue kopieer. En ons sal veral wees sleg oor hierdie. Wat kan ons doen dit is baie, baie beteken in hierdie geval? Ja? GEHOOR: Deel van die twee biljoen dinge bevat uitvoerbare kode wat terug [Onhoorbaar]. GABE: Presies. So wat is die aard van die ding wat mense gebruik 'n iPhone jailbreak, byvoorbeeld. So dat die soort van ding. Omdat jy kan net maak die toestel enige kode wat jy wil uit te voer. Die fix, so die fix is ​​maklik. Net kyk vir die grense. Jy gaan vir nul omdat ons altyd kyk vir null wanneer ons te doen het met snare. En dan, jy neem die string lengte voor. En as die string lengte is 'n geldige string lengte, wat binne 0 en 12, dan is ons die goeie. [01:33:03] Davin: As jy nie dit wil bevestig nie vir null, ware vinnige, wat sal gebeur? Dit sal seg skuld. Hoekom sal dit seg skuld? Omdat jy 'n beroep strlen op nul. GABE: Ja. Waar of vals, met behulp van 'n wagwoord is 'n goeie idee. [01:33:19] GEHOOR: Vals. [01:33:20] GABE: Vals. Gebruik baie wagwoorde, en 'n groot, lang mense. Hangslot ikone verseker sekuriteit. [01:33:26] GEHOOR: Vals. [01:33:27] GABE: Vals. Dit beteken niks. Dit is net 'n ikoon. SSL beskerm teen 'n man in die middel aanval. GEHOOR: Vals. GABE: Vals. OK, so almal is vals. Nice. [Onhoorbaar] Wil praat oor dit? Jou beurt. Davin: soorte aanvalle, man in die middel. Wat is 'n man in die middel aanval? GEHOOR: [onhoorbaar]. Davin: As jy stuur 'n HTTP versoek het, kon hulle dit doen nie, reg? Maar as jy die stuur HTTPS, hulle sal waarskynlik nie in staat wees om dit te doen. Daar is baie van die punte saam jou verbinding. Jy het routers. Jy het DNS-bedieners. As iemand kan om fisies sien wat jy stuur, so iemand is in staat om eintlik kry tussen jou, die kliënt, en die bediener, en is staat om te sien wat jy stuur, dit is 'n man in die middel aanval. So om te sien wat jy probeer om te kry uit die bediener, of in staat is om erger te see--, jy dalk in staat wees om te sien koekies of iets soos dit. [01:34:16] So byvoorbeeld, as wat jy nie gebruik SSL, het hy dalk in staat wees om te sien jou sessie ID koekies. En dit is sessie kaping genoem want hy sien jou ID koekies, en dan is hy in staat om te gaan na wat webwerf en voorgee om te wees. Want net soos in PHP, onthou wanneer ons aangemeld, wat doen ons? Ons stel sessie ID gelyk aan ID. Sodat u identifiseer. Dit is hoekom jy kan jou portefeulje sien en nie almal anders se portefeulje. [01:34:38] Wel, as ek kan dit koekie te kry, dan kan ek inteken op daardie bladsy. En dan, kan ek net sien jou goed en begin koop en verkoop van dinge. So dit is sessie kaping. Maar jy moet nie in staat om aan- sodat jy wees kan die man gebruik in die middel aanval selfs as hulle gebruik SSL. Maar jy moet nie in staat wees om te. As hulle gebruik SSL, jy kan nie die sessie kaping. Hoekom? Want dit is al geïnkripteer, reg? As dit is geïnkripteer, en ek is nog steeds 'n man in die middel, ek kry nog steeds jou data. Dit is fyn. Maar dit is geïnkripteer. So kan ek nie regtig gebruik dit. So dit is twee. [01:35:09] Real vinnige, kruis webwerf versoek vervalsing. Dit is net as daar is 'n skakel en dat skakel iets dat jy nie dink dit behoort te doen. So byvoorbeeld, as die skakel was gaan aandele te koop of verkoop aandele, en jy het nie geweet dat. Jy het op die skakel, het 'n versoek, gekoop of verkoop iets wat jy het nie bedoel om te doen. Dit is dit. [01:35:25] Cross site scripting, so hier, jy verby in via veranderlike Q, in plaas van verby in 'n soort van waarde, miskien q is soos 'n naam. So in plaas van verby q gelykes Davin of iets soos dit, as jy nie HTML gebruik nie spesiale karakters, as jy nie ontsnap dit seker dit is maak OK, dan kan ek slaag in plaas daarvan, Kom ons sê hier ek sê druk of iets soos dit, dan kan ek slaag in hier om 'n script oproep. [01:35:51] So dan, in plaas van net om 'n veranderlike, Ek sou dan voer hierdie script oproep. So in daardie script noem, wat doen dit? Dokument dot plek, wat gaan verander die ligging van die dokument. So ek gaan om te lei iewers anders. Dit is bekend slegte man in hierdie voorbeeld, baie goed. Kon nie dink van die woord. En dan, wat is selfs erger is dat ek gaan dan stel koekie, wat is 'n paar veranderlike Ek het in hierdie webwerf. Ek gaan dit gelyk te stel die dokument dot koekie. Daarom, gaan ek jou koekie te steel. En ek gaan om te lei inligting na 'n webwerf dat jy nie moet toegang word. En dit alles gebeur omdat jy nie ontsnap wat jy gesien het. Ja? [01:36:29] GEHOOR: So net om te duidelik maak, is dit vulnerable.com dat is kwesbaar vir hierdie. Sodat skakel kan verskyn op enige gegewe bladsy. Iemand druk op dit, gaan na vulnerable.com. Jy het 'n koekie te vulnerable.com. Kom ons sê Facebook is kwesbaar, so facebook.com. Jy het Facebook koekie. Wat dit doen, is jy gaan facebook.com, dit onmiddellik redirecting om jou te badguy.com, maar ook jou koekie inligting. So dit is 'n vinnige aanstuur, maar jou Facebook koekie is ingesluit met die aanstuur, en dit is hoe hulle [onhoorbaar]. GABE: Ja, daar is 'n paar baie gemiddelde dinge wat mense kan doen as daar is hierdie. Byvoorbeeld, as Facebook toegelaat almal jou gebruiker naam te verander, en hulle het nie enige doen gesonde verstand tjeks, sodat jy kan 'n JavaScript ding voeg dat verander jou beeld na 'n hamster. En dat voeg dieselfde JavaScript in almal wat jou page views. So almal wat jou page views het dieselfde ding in die gebruiker se naam. En omdat dit 'n virus, dit versprei eksponensieel. Davin: Ons sal die laaste skip een, en dan het ons klaar is. So dit is net nog 'n voorbeeld. So, dit is wat hulle is nie ontsnap hul SQL tafel. Sodat jy dit kan daal. So jy wil dinge om te ontsnap. Dit was die vorige voorbeeld met die kruis site scripting. Jammer ons het 'n bietjie laat. Môre, jammer! Môre, ons het kantoorure. So kantoorure in Cabbot 8:00-11:00. Die kantoorure is streng vir quiz vrae.