>> [Musik spiller]
HANNAH: Hej, alle.
Tak fyrene så meget for at komme ud i den modbydelige vejr til quiz én
gennemgå session.
Som du fyre ved, quiz den ene er denne onsdag.
Så vi kommer til at gå gennem en flok emner.
Davin: Hey, kan jeg sige noget virkelig hurtig?
HANNAH: Ja, Davin s går at sige noget virkelig hurtig.
Davin: Undskyld.
Bare virkelig hurtig, hvis du har spørgsmål om quiz, kan du gå online.
Gå til 2014 quiz én, om quizzen.
Det har fået logistik omkring hvor de skal gå, når de skal gå.
Hvis du samtidig er tilmeldt, er vi vil have en makeup quiz på 5:30.
Eller hvis du har sendt mig et problem, du har nogle andre spørgsmål.
Men 05:30 er make-up tid på onsdag.
Men hvis du har spørgsmål, generelle spørgsmål,
online har alle de logistik.
Så tjek der først.
>> HANNAH: Awesome.
Så her er den store liste af emner at vi kommer til at gå gennem i dag.
Jeg har tænkt mig at dække alle de C ting, som er den første kolonne.
Så C ting, vi dækket efter quiz nul.
Startende med en linket liste, som omfatter pointere.
>> Okay, så vi så dette i den sidste revision session,
så jeg har tænkt mig at gå igennem dette er en lille smule hurtigere.
Bare hæve din side, hvis du vil have mig til bremse eller behandle noget yderligere.
Men vi bruge linkede lister, fordi vi startede i C med arrays.
Og arrays er stor, men Problemet er, at de har en fast størrelse.
Linkede lister giver os mulighed for at oprette dynamisk størrelse datastrukturer.
>> Og vi har vores grundlæggende funktioner, indsætte, slette og søge.
Og vi kan gøre indsatsen i værste fald konstant tid
hvis vi bare sætte det i begyndelsen.
Slette og søge, værste tilfælde store oh n tid.
Så igen, bare for at vende gennem disse billeder,
Jeg ved, vi oplevede disse sidste gang, men vi ønsker at holde styr på vores linkede liste
ved at holde styr på leder af vores linkede liste.
Fordi vi ved, at Hver enkelt af vores knudepunkter
er bare at pege på den næste knudepunkt i vores linkede liste.
>> Så det er, hvordan vi holder styr.
Selvom disse ikke er kontinuerlige stykker af hukommelse,
vi kan finde dem ved blot efter de forskellige pile.
Her er vores struktur en sammenkædet liste node.
Vi så denne sidste gang.
Vi har vores struct node.
Og det har to egenskaber.
Nummer et, den faktiske værdi, vi ønsker at gemme.
I dette tilfælde er det et heltal.
Det kunne være en streng, det kunne være en char, hvad du vil.
Og så er vi nødt til at holde styr på den næste node i vores linkede liste.
Så det kommer til at være en Markøren til det næste knudepunkt.
Hvis du var bare gør søg, som jeg sagde før,
du er nødt til at følge dine pile ned.
Indsættelse, ville du holde styr af, hvor resten af ​​din liste er.
Og du ønsker at omdirigere hovedet til at pege på vores nye element, som
i dette tilfælde er en, og derefter vil man pege
til resten af ​​den linkede liste.
Så igen, jeg ved, det er lidt lidt af en gentagelse fra quiz nul.
Så vi er nødt til at være meget forsigtige om den rækkefølge, som vi
gør disse pointings så vi ikke mister overblikket over bagsiden af ​​listen.
OK, nogen spørgsmål med bare enkeltvis hægtede lister?
Awesome, OK, cool.
>> Så nu, vi kommer til at gå ind på noget bare lidt mere kompliceret,
dobbelt hægtede lister.
Så ud over at holde spor af den næste node,
Vi ønsker også at holde styr af den foregående knude.
Og det giver os mulighed for, hvis vi er på et tidspunkt i vores linkede liste,
ikke kun gå fremad, men også gentage bagud.
For som vi så i en enkeltvis forbundet liste,
hvis vi var på et knudepunkt, og pludselig, besluttede vi,
faktisk, jeg ønsker at gå til node lige før mig,
du er nødt til at gå hele vejen tilbage til hovedet
og gentage gennem indtil du har fundet node, du søgte.
>> Så det gør tingene lidt lettere, som vi er
forsøger at gentage gennem vores forbundet liste.
Men det kræver, at vi holde styr på en mere pointer, så endnu en node stjerne.
Okay, så her kommer den sjove del.
Vi kommer til at øve gennemføre fjerne for dobbelt hægtede lister.
Så det er noget, der er helt fair spil for quizzen.
Det dukkede op på tidligere quizzer.
Så absolut være forberedt at kode en lille smule i C.
Glem ikke, at alle denne sjove PHP og JavaScript,
vi stadig nødt til at huske at gøre C. Så børste op på det
hvis du føler rusten.
>> Okay, lad os se om vi kan gøre det.
OK, cool.
Så vi kommer til at prøve at redigere lige her,
og forhåbentlig går som planlagt.
Okay, er der nogen ønsker at give mig et bud på, hvordan jeg skal starte?
Den eneste forudsætning er jeg beslutningstagning er, at jeg allerede
har en struktur defineret, jeg viste på sidste side,
på det sidste dias.
Og jeg opbevare lederen af ​​min tilknytning liste i nogle pointer kaldet listen.
Er der nogen der ønsker at få mig i gang?
>> PUBLIKUM: kan du oprette en ny node til at ringe gennem listen?
>> HANNAH: Awesome, så vi kommer til at skabe
en ny node til at kravle gennem listen.
Jeg kan godt lide det.
Jeg vil bare kalde det pointer, hvis det er OK.
Og hvor skulle det oprindeligt starte?
>> PUBLIKUM: Sandsynligvis på lederen af ​​listen.
HANNAH: Beautiful.
Vi ønsker at starte i spidsen, som Jeg sagde vil blive gemt i listen.
Awesome.
Så vidt, så godt.
Og nu, vores mål er at gentage gennem listen
indtil vi finder noden med værdien n, som vi ønsker at slette.
OK?
>> Så nu er den del, hvor vi ønsker at gentage gennem.
Kan nogen foreslå en måde at gentage gennem?
>> PUBLIKUM: en løkke.
>> HANNAH: en løkke.
Jeg elsker det.
Konkret kan vi prøve en while-løkke.
OK, og vi ved, at vi har nået i slutningen af ​​vores liste, når hvad?
PUBLIKUM: Når markøren er null.
HANNAH: Når markøren er null.
Smukke, jeg elsker det.
OK, cool.
Så beklager, hvis mit omgivende tandbøjle er slags falde ud af skærmen.
Vi bragte det tilbage.
OK, cool.
Hvad bliver det næste?
>> Så vi ved, at vi ønsker at slette den knude, der har værdi n.
Så lad os finde det tilfælde, hvor vi faktisk finde vores node.
Så hvordan ville jeg tjekke det?
Jeg ville bare sige, hvis pointer, og derefter, hvis jeg ønsker at få værdien af ​​pointer,
Jeg kan bare pil n, lig n, parameteren
at vi gav til denne funktion, node, som vi ønsker at rent faktisk slettes.
Eventuelle spørgsmål op indtil her?
Ok.
OK, så lad os nu tegne et hurtigt billede i bestyrelsen for at visualisere det.
>> Så lad os sige at der er vores dejlige node.
Og det har en værdi, vil jeg bare sige fire.
Og den peger på den næste knude i vores linkede liste.
Og der er ikke noget, før det.
Så vi har vores tidligere peger på ingenting.
I dette tilfælde vi peger bagud.
OK, bare oprette min linket liste over her.
Og vi har en liste, der peger denne struktur til at begynde med.
Jeg vil trække en mere for For fuldstændighedens skyld.
OK.
Jeg vil påpege dette fremad.
Og jeg vil pege at én tilbage.
Ups, undskyld.
Ja, fik dette tilbageskridt.
Gøre det igen.
OK, der vi gå.
Okay, fik det.
OK, her er vores billede.
>> OK, så vi ønsker at overveje to sager.
Det første tilfælde er, hvis knude, vi ønsker at slette
er selve starten på vores liste.
Og så det andet tilfælde, at vi ønsker at overveje, er, om det er andre steder.
Jeg forstår, at dette en helt rodet tegning med alle mine sletning,
men forhåbentlig vi vil prøve at gøre dette klart med noget kode.
>> OK, så lad os dække sagen hvor vi fandt vores knude,
og det er i det start af vores linkede liste.
Nogen give mig en forslag her, hvad
Jeg skal gøre rent faktisk at fjerne vores knude?
Det er lidt tricky.
OK?
>> PUBLIKUM: Du skal tage den node, der ville være, før det
og gøre det peger på en, der ville være efter den,
og tage den node, ville være efter det og gøre
det peger på den node, før det.
HANNAH: Præcis.
OK, så dette er tilfældet where-- vi har to sager.
Vi har det tilfælde, hvor node, som vi leder efter
er den forreste af listen.
OK, og derefter sådan, at du beskrevne er ellers, ikke?
Det er et andet sted på listen.
Så du siger, skal vi se på node tidligere,
og gøre forudgående knudepunkt punkt til det næste knudepunkt.
Så lad os sige vi er forsøger at tage ud fem
i min meget rodet tegning herovre.
Vi ønsker at sikre, at fire nu peger på seks.
Fire næste peger på seks.
Og seks tidligere peger på fire.
Det er vores mål her, ikke?
Dette er, hvad jeg tror du sagde bare derovre.
>> OK, så lad os få det første stykke.
Lad os gøre det har den tidligere pointer tidligere.
Så fire næste skal pege på hvad?
Præcis, i dette tilfælde, seks.
Så vi bør sige pointer, næste.
OK?
Ok.
Så lad os slippe af med denne grimme billede og forsøge at tegne et lidt pænere.
Vi har vores liste hoved her.
Og der peger på det første knudepunkt i vores linkede liste, som vi sagde, er fire.
Her er vores anden node, fem.
Og vores tredje node, seks.
Prøver bare at trække præcis de samme billede, bare lidt mere rent.
OK, så fire næste oprindeligt peger på fem.
Fem næste peger på seks.
Seks tidligere punkter til fem.
Og fem tidligere peger på fire.
Så meget pænere!
OK, cool.
>> Så nu, hvad vi gjorde bare her, denne linje kode,
som siger pointer tidligere næste, så hvad betyder det?
Det betyder, hvis vi kigger på fem, gå til forrige node,
og det er ud bør nu punkt til fem næste.
Så det væsentlige, hvad det er at gøre er, der er slette denne pil
og gøre det springe lige over fem.
Er det klart?
Jeg ved, det kan være en lille smule mangelfulde.
Jeg ser nogle hoved nikker.
Det er godt.
OK, cool.
Nu, hvad er næste skridt?
>> Jeg har nulstillet den næste.
Nu som andre pil skal jeg ændre?
Denne ene lige her.
Seks tidligere.
Vi ønsker ikke seks tidligere at pege på fem længere.
Vi vil have den til at pege på fire.
Er det billede giver mening?
Så nu kan vi faktisk tage fem ud.
Så lad os få det stykke.
Hvad skal jeg gøre, før jeg nulstille seks tidligere til fire?
Nogen ideer der?
>> PUBLIKUM: Frigør noden mellem dem ved at sætte det til null?
HANNAH: Cool.
Definitely, vores endelige mål er vil være at befri node.
Så vi kan gøre det lige her.
Gratis pointer.
Absolut.
Men selv inden da, lad os bare-- vores mål ret
her er at sætte pointer næste tidligere lig pointer tidligere.
Jeg ved, det er at få dækket op.
OK, lad os take-- cool.
Kan alle se denne bundlinjen?
Eller er det super lille?
>> Så før vi udfører denne linje her, vi ønsker
at sikre, at pointer næste er ikke null.
For hvis pointer næste er null, hvilken slags fejl
vil jeg får, når jeg forsøger at referere til en null-pointer?
PUBLIKUM: Seg skyld.
HANNAH: En seg fejl, smukke.
OK, så hvis det ikke er null, så vi kan nulstille.
Og vi har seks point igen til fire.
Spørgsmål indtil dette punkt?
Ja?
>> Publikum: I dit første hvis erklæring, vel
betyder at have pilen næste, eller [uhørligt]?
HANNAH: Jeg mente pointer pil n.
Så dybest set, hvad jeg prøver at gøre er sige, den aktuelle node, at jeg er
iteration i den nuværende node, Jeg kigger på, jeg lagring i markøren.
Og jeg vil gerne vide pointer er værdi, som i dette tilfælde er n.
Og jeg ønsker at se, er knudepunktet Jeg søger
for knuden jeg sigter at slette?
Så det er derfor, vi har her pointer n.
>> PUBLIKUM: Så pilen går til n, du angive værdien
og opbevar det i en knude kaldet n?
>> HANNAH: Så det er ligesom om jeg er gå gennem denne linkede liste
og peger på fem.
Hvis jeg ønsker at få denne værdi, hvis Jeg ønsker at få dette nummer, 5,
Jeg skal gøre pointer pil n.
Cool?
Ja.
>> PUBLIKUM: er N navnet på variablen?
HANNAH: Ja.
Så hvis vi vende tilbage en slide, n er navnet
af værdien indersiden af knude i vores linkede liste.
Og jeg ved, det kan få lidt smule forvirrende, fordi vi også
ringer de ting at vi ønsker at slette n.
Så det er her, at en linje kommer fra.
Ja?
>> Publikum: Hvad har du [Uhørligt] hvordan de virker?
En pointer [uhørligt]?
>> HANNAH: Sure.
Taler du om-- hvilken linje?
PUBLIKUM: Den sidste linje [uhørligt].
>> HANNAH: Sure, OK.
Så lad os se på billedet i For at forsøge at forklare dette.
Jeg er ked af, for den kamera, var spørgsmålet
kan vi forklare pointer arrow næste pointer forrige.
OK, så lad os sige, at vi er på fem og vores mål er at slette fem.
Så pointer næste, hvilke af disse tre knudepunkter betyder det giver os?
Det bringer os til den sjette node, ikke?
>> OK, så nu vi beder for de seks tidligere.
OK?
Og vi nulstille dette at være lig med fire,
som tilfældigvis fem tidligere.
Jeg ved, det er super svært at holde styr på.
Jeg virkelig anbefale dig tegne billeder hvis du får et spørgsmål som dette.
Ja?
>> PUBLIKUM: Er grunden til, at vi ikke har en [uhørligt]?
>> HANNAH: Præcis.
Så spørgsmålet var, hvorfor vi ikke nødt til at tjekke her?
Hvorfor har vi ikke brug for at kontrollere, at pointer tidligere er ikke lig med null?
Og det er fordi vi har allerede udskilt
tilfældet, hvis markørens i begyndelsen.
Meget godt spørgsmål.
Alt andet om dette?
OK, cool.
Så lad os afslutte den op.
Vi er der næsten.
>> Så hvad nu hvis det er i spidsen?
Hvad hvis i stedet for forsøger at slette fem,
vi faktisk ønskede at slette fire?
Hvad ville jeg gøre?
Nå, jeg ønsker at nulstille mit hoved til hvad?
Råbe det ud?
PUBLIKUM: Den ene efter den.
HANNAH: Beautiful.
OK, så vi ønsker liste, der skal pege til uanset vores pointer næste node er.
Godt.
Og bare for fuldstændighedens s skyld, vi ville
vil kontrollere, at så længe vores liste ikke er nul, så længe vores liste er ikke
tom, så vi vil sætte vores tidligere lig med nul.
Spørgsmål hidtil?
Et skridt væk from--?
>> PUBLIKUM: Ville det være, hvis Listen er ikke lig med null?
>> HANNAH: Ja, du er helt rigtigt.
Jeg er så ked af det.
Er liste er ikke lig med null.
Awesome.
Forsøger at bringe alt dette på skærmen.
Det er lidt afsporet.
Beklager, gutter.
Og sidst men ikke mindst, alle vi skal gøre, er tilbage.
OK.
Det var meget proppet i virkelig hurtigt.
Tag en anden til at se dette over.
Fortæl mig, hvis du har spørgsmål.
Ja?
>> PUBLIKUM: Hvis listen er på hoved, then-- vente, nevermind.
>> HANNAH: OK, godt.
Så dette er, hvis liste er i spidsen, vi fjerner det til hvad vi indsat.
Ja?
>> PUBLIKUM: Kan du forklare det først, hvis sætningen igen?
Hvis markøren til n er lig med n?
HANNAH: Sure.
Så vores mål om hele denne funktion er at slette den node, har værdien n.
Så hvis vi finder, som vi er iteration gennem vores liste,
node med værdien n, det er den, vi ønsker at slette.
Så alle de sletning sker inde i det store, hvis erklæring.
Giver det mening?
Cool.
Ja?
>> PUBLIKUM: Måske du bare ikke kan se det, men ikke du også brug for en linje
til at rulle gennem listen?
HANNAH: Awesome.
Lad os bringe dette en lille smule op, og vi smider denne ret i bunden.
Måske bestyrelsen ville har været en lidt bedre idé.
Så hvordan ville jeg flytte pointer fremad?
>> PUBLIKUM: Pointer lig pointer plus en.
>> HANNAH: Beautiful.
Så det giver os mulighed for fortsætte iteration igennem.
OK.
PUBLIKUM: Ville der være et andet?
HANNAH: En mere tid?
PUBLIKUM: Ville der være en anden efter den store gamle hvis
erklæring [uhørligt]?
HANNAH: Hvilken del?
Jeg er ked af.
>> PUBLIKUM: The traversal, bør der ikke være en anden?
HANNAH: du absolut kunne have en anden.
Fordi jeg har en tilbagevenden ret der, behøver du ikke en anden.
Men ja, godt spørgsmål.
OK, ja?
PUBLIKUM: Kan vi tænker på pointer der bevæger sig gennem listen
som at tage på værdien af hvert knudepunkt på listen?
Eller skal vi tænke på det som slags ekstern til listen?
>> HANNAH: Enten er fint, synes jeg.
Den måde jeg forestiller mig det er Jeg siger, OK, jeg er markøren.
Og det er mig.
Dette er min hånd.
Jeg har tænkt mig at pege på de forskellige ting, som jeg gerne vil gentage gennem.
Først vil jeg pege i hovedet på listen.
Og det fortæller mig jeg er kommer til at pege på fire.
Og så mig, at være uden for listen, Jeg kan pege på hvert af disse elementer.
Så jeg tror på mig selv som pointer.
PUBLIKUM: Så når du sletter et af de elementer,
du sletter dig selv, så at sige.
HANNAH: Præcis.
Så du sletter ting du peger på.
Så i det eksempel, vi så, hvor vi er
forsøger at slette fem, når jeg peger på fem,
Jeg ønsker at slette den ting jeg peger på.
Helt rigtigt.
Ja?
PUBLIKUM: Har vi taget hånd om den tilfælde, hvor n ikke er på listen?
HANNAH: Hvis n ikke er på listen?
Alle, der kommer til at ske, er at du er vil gentage gennem og ITERATE-
igennem, og så er du nødt at komme til at pointer at være null,
og derefter vil I blive gjort.
>> PUBLIKUM: Så gør vi at returnere noget?
HANNAH: vi kunne.
Den måde, at hvis defineret dette funktion, jeg bare sige, at det vender tilbage
ugyldig uanset.
Men du kunne have noget ligesom vender tilbage et heltal,
og har det tilbage negativ 1, hvis det mislykkes.
Noget i den retning.
Spørgsmål med-- ja?
Publikum: [uhørligt]?
HANNAH: Beklager?
Publikum: [uhørligt]?
HANNAH: Sure.
Så det er actual-- når vi har gjort alt dette arbejde for at flytte
alle disse pile rundt, hele vores Målet var at slippe af med knude
at vi leder efter.
Så i dette tilfælde, hvilket frigør pointer, hvis jeg peger på fem,
det er ligesom at slette denne midterste knude.
Det er den frie pointer del.
Det mening?
>> PUBLIKUM: Så selv troede du gjorde ikke [uhørligt]?
>> HANNAH: Så vi overtog i begyndelsen vi havde nogle liste, der var already--
de havde sat det sammen.
Så for at konstruere dette liste, mĺ have de [uhørligt].
Cool.
Noget andet med dette?
Ja?
>> Publikum: Hvad hvis listen ikke lig med nul linje?
[Uhørligt]?
HANNAH: Lige her?
PUBLIKUM: Ja.
HANNAH: OK, er alt jeg gør er jeg bare at sørge for
at før jeg forsøger at dereference liste, før jeg forsøger at få adgang til tidligere,
Jeg vil være sikker på, at det ikke er null, så jeg ikke får en seg fejl.
Cool.
>> OK, jeg ved det var helt en masse at komme igennem.
Så dette dias vil være stilles til rådighed for dig.
Så du kan gå igennem det nærmere.
Ja?
>> PUBLIKUM: Hvorfor listen [uhørligt]?
HANNAH: Sure.
Så liste virkelig peger på dette element lige her,
det første element på listen.
Så det kan ikke have en tidligere.
Ja?
>> PUBLIKUM: Er markøren point til den samme adresse i hukommelsen?
Er det peger på den samme adresse i hukommelsen som knudepunktet
at det er peger på?
>> HANNAH: Ja, den peger til dette knudepunkt i hukommelsen.
>> PUBLIKUM: Højre, så når du [uhørligt]?
>> HANNAH: På en måde ja.
OK.
Okay, lad os gå sammen med dette.
Og hvis du har flere spørgsmål, holde sig omkring i slutningen,
og vi kan gå igennem det igen.
OK, cool.
Nu får vi at komme videre at hash tabeller, forsøger,
og træer, som du fik super kender i p-sæt fem, speller.
>> Så hash tabel er blot en array med enkeltvis hægtede lister
eller dobbelt hægtede lister kommer ud af det.
Så vi har en form af associative array.
Og hvordan ved vi, hvilke af disse arrays spande at komme ind,
vi bruger en hash-funktion.
Så i dette tilfælde, kan alle gætte, hvad hashfunktionen
ville være lige baseret på nogle af input og output?
>> PUBLIKUM: Brev nummer i alfabetet.
HANNAH: Præcis.
Det bare sætter dem i alfabetisk rækkefølge.
Alt, hvad der starter med en A sættes i den første spand.
Alt med en B sættes i anden spand, så videre, og så videre.
Awesome, OK.
Og en hash-funktion er nogen funktion, der tager i et ord
og vil fortælle dig, hvad spand det hører hjemme i.
Så hvilken post i vores matrix det hører hjemme i.
>> Så hver gang jeg giver min hash fungere et ord,
Det skal fortælle mig det samme placere hver eneste gang.
Så hvis vi bruger hash-funktionen fra forrige dias
hvor vi sortering af første bogstav i alfabetet,
hver gang jeg giver min hash-funktion "æble"
Det skal altid give mig tilbage 0.
Så hvis jeg har et æble at sætte i min hash tabel,
hvis jeg giver "æble" til min hash-funktionen, det skal sige, gå sætte det i spand 0.
Hvis jeg leder efter en æble i min hash tabel
og jeg siger, hvor der kan æble levende, du spørger din hash-funktionen.
Og det siger, gå til PDF Bucket 0.
Okay?
Spørgsmål med hash-funktioner?
Awesome.
>> Her er en lidt mere detaljeret forklaring
af, hvad et hash-funktion kunne se ud.
Ok.
Nu er problemet med hash funktioner er i en ideel verden,
ville vi kun have én ting i hver spand.
Men i virkeligheden, er der ikke kun ét ord
der starter med A. Der er ikke kun et ord, der starter med B. So
i dette tilfælde, hvis vi pludselig får "bær"
og vi ønsker at sætte det ind i vores hash tabel,
og vi ser, åh, nej, banan er der allerede, Hvad skal vi gøre?
>> Nå, har vi to muligheder.
Den første mulighed er lineær probing, som
betyder bare gå finde den næste tomme spand.
Gå finde den næste tomme række post.
Og bare sætte "bær" der.
Så jeg ved, det er meningen at gå med banan i spand én.
Men bare sætte det i spand tre, fordi skovlen tre er tom.
En anden mulighed er sandsynligvis hvad du implementerer
i din p-sæt, hvor du havde separat kæde.
Så hver af dine spande, hver af dine array elementer,
ikke kun holder én ord, men faktisk besidder en pointer til en liste med ord.
Så hvis du havde banan i din hashtabel
og du pludselig ville at tilføje bær, ikke noget problem.
Blot tilføje bær på til slutningen, eller til begyndelsen af ​​din linkede liste.
OK, awesome.
Spørgsmål med hash tabeller før vi går på?
>> Ok.
Træer og forsøger.
OK, så det var en anden mulighed til gennemførelse af ordbog.
Du kunne have gjort en chance.
Så det er en særlig form for træ, opfører sig som en multi-niveau hash tabellen.
Så vil du se billedet hvor du har en array,
peger på en flok arrays dette punkt til en flok arrays
dette punkt til en flok arrays.
Og vi vil se nøjagtigt, hvad der ville se ud på en kommende dias.
Og mere generelt, et træ er bare en datastruktur
hvor dataene er organiseret i nogle hierarki.
Så hvor vi så vi har en slags forståelse
af et øverste niveau, et næste niveau, et næste niveau, et næste niveau.
Så det er nok mest tydelig med nogle konkrete eksempler.
Så her er vores træ.
Du kan se, at det har særlige niveauer
at vi starter med at root node, en.
Og vi kan gå ned gennem vores træ.
>> Et binært træ er en bestemt type træ.
Og den eneste specifikation et binært træ
er, at hvert knudepunkt har højst to blade.
Så du kommer ikke til at se nogen af disse knudepunkter har tre eller fire
eller en anden antal blade.
Og selv da mere specifik er en binær søgning træ
hvor hver knude til venstre for node vil have en værdi mindre.
Og hver værdi til den ret vil være større.
Så hvis du ser 44 er på vores rod, til venstre, 11, 22 og 33
er alle mindre end vores rod.
Og til højre er alle numre bigger-- 66, 55, og 77.
Og denne egenskab gælder på alle niveauer i træet.
>> Så når vi går ned til 22, 11 og 33, stadig 11
er mindre end 22 og 33 er større end 22.
Og dette gør det nemmere at søge for hvis vi leder efter et nummer,
Vi ved præcis, hvilken gren at følge ned.
Så dette skal minde dig lille smule af binær søgning.
Ja?
>> PUBLIKUM: Så når du er beskriver binære,
De sagde, at det har højst to blade?
HANNAH: Mm-hm.
PUBLIKUM: Kunne det have mindre?
HANNAH: Ja.
Så lad os sige, for eksempel, du havde ikke et lige antal ting
og du kunne ikke fylde alle dine blade, det er fint, hvis man har en.
OK?
Awesome.
Andre spørgsmål på træerne?
OK.
>> Tilbage til vores forsøg, da jeg talte om lidt tidligere,
hvordan vi har disse multi-level arrays.
Så i dette tilfælde, vi starter på toppen.
Og vi kan følge en given ord ned.
Så lad os sige vi ønskede at lede efter Turing.
Vi starter ved T, skal du følge den ned til et array, som indeholder U,
og følg den ned, indtil vi nå denne lille delta som
fortæller os, ja, fandt man et ord.
Klar på forsøger?
Noget at gå derovre?
Ja?
PUBLIKUM: Er symbol på delta nødt til at besætte plads i prøve?
HANNAH: Ja, så det ikke nødvendigvis selv behøver at være en delta.
Men vi har brug for nogle måde at fortælle vores computer-- sorry,
så vi ved, at TUR er ikke et ord.
Fordi lad os sige, vi ikke har dette begreb et delta, dette begreb
af lykønskninger, fandt man et ord, det ville gå igennem og gentage T-U-R,
og derefter sige, awesome, jeg fandt det!
Det skal være et ord.
Men det er virkelig ikke.
Vi ønsker hele Turing at være et ord.
Så vi skal have noget på ende, der siger, tillykke,
du har fundet en legitim ord.
PUBLIKUM: Så hvis du havde ligesom 26 bogstaver i alfabetet,
ville du rent faktisk har 27 nøgler i din prøve?
>> HANNAH: Awesome, ja.
Så faktisk mener jeg, at vil være på det næste dias.
Ta-da!
Hvor hvis du har en knude i dit forsøg, er du
vil have 27 børn i stedet for 26.
Eventuelle spørgsmål med det?
Ja?
PUBLIKUM: Hvorfor forsøger tager op, så meget plads [uhørligt], som du går?
Hvorfor anses det for at være [uhørligt]?
HANNAH: Sure.
Lad os gå tilbage.
Spørgsmålet er, hvorfor er forsøger så meget større
end noget som en hash tabel.
Så for hver af disse niveauer, selv om de ikke er trukket her,
du skal have alle 26 tegn.
Og grunden til, at du ikke kan sige, åh, men ligesom for Turing, jeg
behøver ikke at have nogen af ​​de samme ting på niveauet for U. Well,
Hvis pludselig du ønskede at tilføje noget, der var ligesom T-H,
du behøver at have den evne til at tilføje det ord.
Så for hver enkelt bogstav, du kommer til at have
at have en flok arrays kommer ud af det.
Så du kan se, hvordan det ville få virkelig stor, rigtig hurtigt.
Andre spørgsmål?
Ok.
Ja?
>> PUBLIKUM: Hvornår er forsøger hurtigere end hash tabeller?
>> HANNAH: Hvornår er forsøger hurtigere end hash tabeller?
Så hvis du havde en rigtig dårlig hash-funktionen.
Så lad os sige, jeg var ligesom, her er din hash-funktionen.
Hvad ord Ligegyldigt du giver mig, jeg er altid
kommer til at sætte det i array indgang 0.
Og så ender vi med blot at sætte alt i én stor lang linkede liste.
Og så et opslag tid ville tage i værste fald n hvis det er i slutningen af ​​vores liste.
Med prøve, vi bare nødt til at gentage gennem bogstaverne i ordet.
Så selv om vi har tilføjet en flok flere ord til vores forsøg,
Det ville ikke tage os længere at finde et bestemt ord.
>> Alt, hvad vi skal gøre, er, for eksempel, i dette tilfælde,
Lad os sige, at vi leder efter zoom, ville vi bare nødt til at gentage over
Z-O-O-M, fire bogstaver.
Så det er bare at Længden af ​​ordet zoom.
Det er ligegyldigt, hvor mange flere ord vi sætter i denne prøve.
Vi kan altid få det i disse fire trin.
Awesome.
Ja?
>> PUBLIKUM: Så [uhørligt] er et array, ikke?
>> HANNAH: Mm-hm.
PUBLIKUM: Hvis du er søger [uhørligt]
ville du nødt til at gå igennem dit array for at finde [uhørligt]?
HANNAH: Sure.
PUBLIKUM: Ikke at tage længere tid?
HANNAH: Hvis jeg har tænkt mig at sige, at min array er altid
kommer til at være A, B, C, D, E, F, G, bla bla bla,
så hvis jeg altid ved, det er i nøjagtig samme rækkefølge,
hvis jeg altid ved, det er i alfabetisk rækkefølge,
Jeg kan bare sige O er nummer så og så i alfabetet.
Bare springe til dette sted.
Fordi husk, med arrays, kan vi få adgang
ethvert element af denne matrix i konstant tid, hvis vi ved, hvor vi leder efter.
Ja?
>> PUBLIKUM: På den tidligere glide [uhørligt] 27,
men 26 for den første.
>> HANNAH: Beklager?
>> PUBLIKUM: Er ikke den første et 0, så ville det ikke være 26?
>> HANNAH: Sure, så når vi siger 27, det er vil give os indeks 0 til 26.
Men hvis du rent faktisk tæller dem ud, går det at være 27.
Godt spørgsmål.
Ellers noget?
Ja?
>> PUBLIKUM: Så er forsøger langsommere end hash tabeller?
>> HANNAH: Forsøg vil være, i teori, hurtigere end hash tabeller
men fylder mere hukommelse.
Ja?
Publikum: [uhørligt]?
>> HANNAH: Jeg er ked af, jeg ikke høre dig.
Publikum: [uhørligt].
Fra 0 til 25 giver dig 26.
>> HANNAH 0 til 25 ville give dig 26, højre.
>> PUBLIKUM: Og så [uhørligt].
HANNAH: Right.
Så antallet vi angivelse er antallet af ting i vores array.
Så hvis vi har 27, er det vil give os 0
gennem 26, hvilket vil give os plads til, i dette tilfælde,
Jeg er ikke inklusive en apostrof.
Så vi får 0 til 25 er de første 26 bogstaver i alfabetet,
eller alle 26 bogstaver i alfabetet.
Og så det sidste ting, ved indgang 26, er
vil være check mærke eller delta.
Ellers noget?
Awesome.
Mistet min plads.
OK, cool.
>> Så vi allerede inde på det.
Men den store afvejningen mellem lande og hash-tabeller
er der forsøger levere i teorien konstant ser op
gange, men bruger en hel masse hukommelse.
Okay, nu har vi lidt mindre komplicerede strukturer,
og vi vil gøres med C, og vi vil flytte til højre ad.
>> Så stakke, vi så dette i foredrag, hvor du
have noget som en stablen af ​​bakker, hvor
det sidste, du sætter på stakken går
at være den første ting du tager ud.
Så det er det, der virkelig definerer en stak er, at det sidste, du lægger på
vil være den første ting du tager ud.
Og den terminologi, som vi bruger hvis vi kommer til at sætte noget,
hvis vi vil tilføje noget til vores stack, vi kalder at skubbe.
Og hvis vi tager noget off, vi kalder det popping.
Og hvis vi skal gennemføre en stak, vi
skal være sikker på at holde styr på både størrelse og kapacitet.
Så det samlede antal elementer, vi kan holde og det nuværende antal elementer
at vi holder.
>> Og meget ens, har vi køer.
Og den eneste forskel er i stedet for med stakke,
vi sagde det sidste, vi lægger på er det første, vi tager ud.
Så med køer, den første vi sætte i
bliver den første vi tager ud.
Så det er ligesom, hvis du er faktisk foring op i en butik
og du bliver hjulpet, så den første person på linje
skal være den første person, der skal hjælpes.
Så det ville være en kø.
>> Så vi har brug for at holde styr på størrelse, kapacitet, og hoved da vi er
kommer til at tage alle ud foran af listen i stedet for ryggen.
Spørgsmål om det?
Eventuelle C spørgsmål, der generer dig?
Datastrukturer, noget af det sjove ting?
Okay, cool.
Så jeg vil udlevere dem til Alison til hoppe ind i nogle mere programmering.
>> ALISON: Åh, vil vi se.
Vi vil se, hvor godt jeg gør her.
OK, jeg har tænkt mig at forsøge at flyve gennem det her, gutter.
Hannah gik meget i dybde på alle hendes ting.
Jeg har tænkt mig at forsøge at give dig en hurtig blast oversigt
så vi kan komme til Davin med alle de sjove JavaScript og sikkerhedsmæssige ting
at måske du faktisk ønsker at høre mere om.
>> OK, da Hannah sagde, hvis du har spørgsmål,
Jeg har tænkt mig for hurtigt, please, lad mig det vide.
Jeg vil besvare spørgsmål efter behov.
Så for at starte, vi kommer til at starte med sandsynligvis en af ​​de allerførste ting
du har lært med web programmering, tilladelser.
Så chmod, du fyre bør har været mastere på dette med alle internettet
programmering, som du har gjort på det seneste.
Det er egentlig bare en kommando der ændrer tilladelser
eller tilladelser for adgang af vores filsystemet objekter.
Selvfølgelig faktisk se disse, hvis du er
har nogen problemer med disse under dit problem sæt,
du kan have brugt ls -l, hvilket er lang, at få visningen slags som det,
hvor du faktisk se alle tilladelserne til en fil.
>> Og virkelig, vi bare kommer til at gå gennem temmelig hurtigt lige pretty
meget, hvad hver af disse betyder.
Så vi har d lige her, som bare står for biblioteket.
Naturligvis lige her ser vi rwx, som er læsbar, skrivbar og eksekverbare.
Disse kunne også være repræsenteret som bits, som vi vil komme ind på næste side.
Så hver triade, at vi så her, så det er tre triader.
Vi har rwx, r intet X og R intet x for denne første fil.
Det er denne generelle struktur.
>> Så vi har nogle mappe.
Vi har nogle brugergruppe med disse tilladelser.
Nogle gruppe, der har disse tilladelser, og en verden, der har en tilladelse.
Du kan tænke på disse som en triade.
Du kan tænke på disse som tre bits.
Så de kan holde værdier hvor som helst fra 0 op
til 7, hvilket er grunden til tider Vi havde du chmod
600 i stedet for chmod RW uanset.
Vi vil komme ind et eksempel der.
Men dybest set, kan du tror af disse som enten lige rwx,
eller du kan tænke på dem som nogle nummer, hvor denne første her
repræsenterer et tal mellem 0 og 7, denne anden
repræsenterer et tal mellem 0 og 7, og den tredje
repræsenterer et tal mellem 0 og 7, OK?
>> r har en værdi på 4. w har en værdi på 2, og x
har en værdi på 1, hvilket er grunden til dette tilladelse her ville blive chmod 700.
Fordi der i dette tilfælde her, det siger vi har den første bit der er vendt på.
Så vi har 4 for læsning.
Den anden bit vendes om for w, hvilket er 2, så nu har vi 6.
Og den tredje bit vendes på for x, som er 1, så vi får syv.
Og selvfølgelig vores gruppe og vores verden er hver 0.
Så det er også svarende til chmod 700.
Og jeg vil helt sikkert forsøge at forstå mapping mellem dem.
Jeg er ikke sikker på, om det har komme op på en quiz før,
men det ville være en spørgsmål, som jeg kan spørge.
>> Bare en lille smule går selv længere ind chmod her, her
er den meget generelle strukturen af ​​en chmod opkald.
Så selvfølgelig har vi chmod her.
Referencer, hvad det henviser til, er der giver vi disse tilladelser til
eller som vi tager disse tilladelser væk fra.
Så vi har en her i tilladelserne, ligesom vi har givet dig chmod et plus x,
som vi vil se snart.
a betyder bare at give disse specifikke tilladelser til alle.
Giv dem til alle.
Så du kunne meget vel have u plus x eller g plus x eller o plus x eller flere
deraf.
Så første del er altid vil være referencer.
Hvem giver vi disse tilladelser til, eller som vi tager dem væk fra?
>> Den anden er operatør.
Så du fyre har det meste behandlet plus.
Dette giver tilladelser til hvem du giver dem,
mens minus, logisk, fjerner dem.
Så intet også forfærdeligt der.
Og så tilstande er, hvad vi talte om med læsning, skrivning, eller udførelse.
Så et plus x betyder at give eksekverbare tilladelser til alle.
Og så, selvfølgelig, på hvilken specifik fil eller mappe.
OK?
Alle godt med chmod?
Ikke alt for dårlig?
>> OK, så HTML, nogen af ​​jer er gammel nok at-- MySpace alder?
Jeg sendte det til min afdeling, og bogstaveligt talt halvdelen af ​​de mennesker
kiggede på mig som om jeg var skør.
Og jeg var ligesom, gutter, vi er ikke så gammel.
Kom.
Så HyperText Markup Language, Det er ærligt bare en måde for dig
at vise visse ting på nettet.
Så det er et kodesprog.
Det er ikke et scriptsprog.
Der er ingen logik i det.
Det er simpelthen at ændre måde noget vises.
OK, så det er en vigtig skelnen at gøre.
Det betragtes som et kodesprog, ikke et scriptsprog.
>> Så her har vi vores HTML-tags.
På denne slide er formentlig de fleste af de dem, som du bør kende
og være virkelig komfortabel med.
Så selvfølgelig har vi vores HTML-tag, som
betegner, at alt i mellem disse to vil være HTML.
Vi har nogle link, som naturligvis vil give dig
et link til en ekstern webside.
Nogle titel, inden for vores hoved her.
Og vi har vores krop med H1, som er en header,
så det vil gøre det nice og fed og større.
Og så har vi nogle p, som er et afsnit.
Du bør nok vide og være fortrolig med ting
gerne, hvordan du indsætter et billede, er der andre header klasser?
Jeg vil absolut være komfortable med div.
Så disse har de fleste mærker at du skal være fortrolig med.
Men selvfølgelig, som med alt i CS 50, listen er ikke udtømmende.
Så sørg for at børste op på det.
>> CSS, så CSS, hvis nogen af ​​jer ser min seminar fra to uger siden,
er egentlig bare en måde at style din webside?
OK, så vi har nogle kodesprog.
HTML, der tager sig af netop den tekst og hvor det kunne være på siden.
Men CSS er virkelig, hvad gør det temmelig.
Du kunne have disse i din HTML filer, men som vi vil tale om senere,
Jeg er temmelig sikker på, det måske være den næste dias, det
er almindelig praksis, og faktisk praksis, som vi virkelig opmuntre,
for dig at holde dem adskilt, når vi taler om MVC, og at hele paradigme.
Det er virkelig, hvad det indføres i.
>> Så CSS er bare en måde at gøre tingene se pænt ud.
De ting her, ligesom krop og #title og .info,
disse kaldes selektorer og hvad de gør, er de vælger bestemte ting
i din HTML-fil og anvende uanset stil,
uanset slags ting, du ønsker, til det specifikke element i din web
side.
Så her har vi en baggrundsfarve og en farve
og en skrifttype, der bliver anvendes til, hvad der er i kroppen.
Så hvis vi kiggede tilbage her, det vil ikke gælde for titlen.
Det vil kun gælde for det, der er i disse krop selektorer, OK?
>> Med titlen her, det er vil være det samme,
farven på teksten bliver blå er kun vil
at påvirke det, der er inden for titel selektorer.
Samt info her, teksten vil være pink,
uanset info, som er lige her.
Så det eneste, ville være lyserød på denne side
er dato, Mandag 17 november, 2014.
OK, så CSS er bare en måde at have mere kontrol over-- ja?
>> PUBLIKUM: Hvorfor har du at bruge hash med titlen?
>> HANNAH: Næste slide, lover!
Vi får der.
Så det er derfor, vi er nødt til at bruge hash.
Så selektorer tage tre vigtigste formularer, som vi taler med jer om.
Jeg fyou ønsker at lære mere, der er masser derude.
Der er stor CSS dokumentation.
Der er et mærkenavn, som har at gøre med blot din normale tags i HTML.
Så H1, p, div, H2, den slags ting.
Og vi kan bare nævne dem som er.
Så som vi ser her med krop, er det en normal tag.
Så vi kan bare sætte kroppen, når vi taler i vores CSS-fil.
>> Med titel, hele grunden vi har denne hash er, at vi har, hvad der er
betragtes som en ID.
Så et ID bør altid være unik i din HTML-side
så når du er henvise til det, du
ved, at du kun henvise til en bestemt ting.
Så i dette tilfælde her, med vores h1 her, CS 50 anmeldelser session,
vi har en id på titlen.
Så for at bare henvise til, at stykke af vores HTML, gør vi en hash titel.
Lige efter sædvane id'er udpeget med en hash foran dem.
På samme måde kan vi se, info her er en klasse.
Og så klasse med CSS er udpeget som en prik klasse
eller dot hvad denne klasse er.
Så i dette tilfælde her, det er info.
>> Så jeg tager det tilbage.
Begge disse ville være pink til vores CSS her
fordi de begge har en klasse af info.
Og i vores CSS-fil, har vi udpeget at noget med en klasse af info
er lyserødt.
Giver det mening?
Ja?
>> PUBLIKUM: Hvis du skulle gøre alt i kroppen hvide,
og så skal du prøve at lave noget inde i det blå,
ville det give problemer?
>> HANNAH: Så CSS er cascading style sheets.
Så uanset hvad er mod bund forrang.
Så hvis du gør noget med kroppen, og du gør alting hvidt,
og så senere ændre dig titlen eller du ændre teksten i kroppen,
det overskriver det.
Så noget mod bund forrang.
Ja?
>> Publikum: Og id'er er unikke, men klasser kan være mere?
HANNAH: Right.
Så id'er skal være unikt, og klasserne kan henvise til så mange ting, som du gerne vil.
Andre spørgsmål?
Ja.
>> Publikum: [uhørligt].
Jeg spekulerer på, om der gør en forskel.
HANNAH: Jeg er ked af, hvad var spørgsmålet?
PUBLIKUM: Der er lille "F" og kapital "F."
HANNAH: Så forskellen mellem små "f" og kapital "F"
bør ikke gøre en forskel.
Så "f" vil være 15 begge veje.
Cool, noget andet?
Alle gode, CSS?
Ja?
>> PUBLIKUM: Undskyld.
Kan du have en klasse og et ID?
>> HANNAH: Ja, du kan.
Ting kan have både en klasse og et ID.
Og jeg kan varmt anbefale afprøve disse på egen hånd.
CSS vil du lære bedst blot ved at gøre noget, meget enkel webside,
udarbejdelse nogle CSS, og bare at se, hvordan de interagerer.
Og du vil få en meget god, intuitiv fornemmelse for, hvordan det fungerer.
>> OK, alle godt med CSS?
Du alle kommer til at gøre smukke hjemmesider med CSS nu.
OK, bedste praksis, bare ting at huske på, ting
at-- det er derfor vi dock dig for designer og whatnot.
Så lukke alle dine HTML-tags.
Så hvis du har et åbent lad, der bør være en tæt krop.
Hvis du har en åben stykke, der bør være en tæt stykke.
Kontroller at se din side validerer.
Du fyre bør være meget fortrolig med dette fra p-sæt syv
med CS 50 finans med W3 validator.
Og som jeg sagde før, en af ​​vores store paradigmer
er at adskille din stil med CSS fra din markup, som er HTML.
Og så, selvfølgelig, vi har denne store XKCD hernede.
Yay, comic relief!
>> OK, TCP / IP.
Mellem disse og HTTP, dybest set de er begge protokoller.
Så du kan bare tænke af dem som et sæt regler
der regulerer, hvordan tingene flytte over internettet.
Så transmission kontrol protokol, eller internet-protokol,
er blot en måde at sikre, at data bliver hvor den skal hen
og at vi ved, om vi nogensinde manglende data.
Så hvis du fyre tænker tilbage på foredrag et par uger siden med David
hvor vi havde fire kuverter, de blev alle nummereret som en af ​​fire,
to til fire, tre til fire, fire af fire, det er bare et sæt regler.
Vi sagde, OK, når vi arbejder sende mere end én pakke,
vi kommer til at tælle det med, hvad nummer det er
og hvor mange i alt at brugeren bør få.
>> Og det er bare at fortælle hvem modtager data, om de
har fået alt, eller hvis noget fik tabt undervejs.
Og de har brug for at bede om det igen.
Det er egentlig bare et sæt regler.
Det er, hvordan du kan tænke på det, OK?
Og også, det angiver den port, som jer can-- jeg kender under foredrag,
de havde en hel liste over havne.
Men vi har ikke dem her lige nu.
>> Så Hypertext Transfer Protocol er, igen, det er en anden protokol.
Så det er et andet sæt regler der styrer, i dette tilfælde,
hvordan hypertekst overføres.
Så det bare tillader browsere at tale med webservere.
Og som vi sagde her, det er Ligesom den menneskelige handshaking.
Det er bare en måde at regere hvordan webserveren er
kommer til at interagere med din browser.
Og vi har bare et par eksempler.
Vi har nogle forespørgsler her hvor GET er metoden.
Vi har HTTP 1.1, som er protokolversion for os.
Og så, værten, hvilket er, hvad vi faktisk forsøger at få adgang.
Og så, som du ser her, vi få noget respons med denne 200
OK som vores HTTP-svar-kode.
Vi har en stor liste jeg har tænkt mig at trække op på ét sekund
at du fyre bør være bekendt med.
Og vi har denne indholdstype tekst / HTML, som bare siger, hvilken type data
vi modtager fra serveren, OK?
Denne vært og dette indhold typen er en del af HTTP-headers.
Du kan have så få eller så lidt som nødvendige for rammerne af, hvad
du har at gøre med.
Nogle gange vil du have en masse information, der kommer fra din server.
Måske er de anmoder om en masse af oplysninger fra brugeren.
Det varierer afhængigt af kontekst.
Hvis man ser på CS 50 Undersøgelse, der er meget mere om det.
Men vi har en masse at få igennem, så jeg har tænkt mig
at gå bare i gang, hvis det er OK med jer?
Cool.
Hold på.
Jeg har definitivt at hel liste of-- hva!
Jeg ved ikke, hvorfor det er hele vejen herover.
Jeg troede, jeg flyttede bogstaveligt det, mens jeg var sitting--
>> Davin: Ønsker du at lære det?
Eller vil du have mig til at undervise i det?
>> PUBLIKUM: Jeg troede, vi kunne bare vise dem til at starte med.
Jeg mener, du kan gå ind i dem yderligere, men jeg
troede det gjort mere fornuftigt, da jeg var bare taler om HTTP status.
Så her er hele listen.
Jeg gætte, hvad der kommer til at ske, er Davin kommer til at gå ind i dem senere.
Men der er en hel liste, en preview af smag til at komme.
OK, vi vil blow-- dette foregår at være en PHP lynkursus som ingen anden.
>> Så PHP, Hypertext Preprocessor, det er en rekursiv Backronym,
hvilket betyder, at det blev navngivet noget andet.
Og så de var ligesom, dette ikke rigtig mening.
Så de bare navngivet det-- og det var et akronym,
så de lige gjort det PHP hypertekst præprocessor, som
bare giver ingen mening.
Sjov historie.
Det er et programmeringssprog.
Så så meget som jeg understrege, at HTML er ikke et programmeringssprog,
Det er et kodesprog, PHP er et programmeringssprog.
Hvordan ved du, det er fordi der er logik.
Der er betingede.
Vi har variable, mens vi har ingen af ​​disse ting i HTML.
>> Okay, så har vi denne lille bit her det er ligesom en smag af PHP.
Så grundlæggende, variabelnavne starte med et dollartegn.
Masser af mennesker kan lide det.
Minder os penge.
Det er alle store.
Vi ønsker alle PHP.
Så vi ikke er angivet en variabel type længere.
Den bestemmes under kørslen.
Tolken vil være som, Åh, vi bare køre igennem,
og i henhold til kontekst, Vi vil se, hvad typer af typer
disse variabler skal have.
Der er ingen hovedfunktion.
Ting vil bare køre.
Du fyre med din import i din sidste p-sæt, vil du bemærke dette.
Der var ikke virkelig en vigtig funktion.
Du har lige skrev hvad du ville ske.
Og det lige slags skete.
Så det er PHP for dig.
>> Arrays er meget ens.
Vi har stadig dette beslag.
Her har vi nogle variable kaldet arr, og det er lige
at-- vi har vores normale beslag notation.
Og vi har nogle centrale værdi.
Og den store forskel mellem C og PHP arrays
er, at vi kan få denne associate-- vi kan knytte værdier til nøgler.
Så i stedet for bare at have et array, der er indekseret
med antallet eller positionen af dette element i arrayet,
Vi kan faktisk knytte det til en nøgle.
Hvor vi kan sige, OK, jeg vil uanset værdi er forbundet med frugt.
Og måske har vi frugt gik til banan.
Så det ville vende tilbage banan til os.
>> Men dybest set, det mest kraftfuld ting om dette
er, at hvis du fyre huske demo fra foredrag, hvor vi dybest set
omskrev speller i PHP, og det was-- opslag var egentlig bare gerne,
er denne tast findes?
Det er virkelig slags magt det.
Du behøver ikke at gentage gennem dit array.
Du behøver ikke at vide hvad plads, det ligger.
Det kunne være ved slutningen eller begyndelsen.
Så længe du kender nøglen der er forbundet med værdien,
PHP kan bare spytte denne værdi højre back ud på dig, OK?
>> Og så har vi også lige har netop fordi vi
kan have vigtige værdi par betyder ikke, du er nødt til.
Du kan også bare oprette en normal matrix som her,
på bunden, hvor det er blot én, to, tre, fire.
Det er vores værdier.
Og i virkeligheden, deres nøgler er indeksene.
Så nøglen til en ville være nul.
Nøglen til to ville være en.
Så videre og så videre, med mindre du udtrykkeligt tildele en nøgle,
man kunne antage, at den værdi er bare deres indeks.
Giver det mening for alle?
Ingen spørgsmål?
Awesome.
>> OK, foreach er en måde at gentage gennem dine arrays.
Så vi har noget her, blot den generelle struktur.
Så foreach, navnet på vores array, som uanset
du vil ringe til hver element i dit array,
og vi kan gøre noget med dette element eller med denne værdi.
Så vi har et eksempel her.
Vi har en associativ array med disse to poster
med bar blive associeret med foo og QUX blive associeret med baz.
Så nøgler er foo og baz.
Værdier er bar og QUX.
Så foreach, har vi vores vifte her, som den centrale værdi par.
Dette giver os mulighed for at få adgang både nøglen og værdi.
Måske du bare vil have værdi, i hvilket tilfælde
du bare kunne gøre som arr som $ værdi, og så er du
blot adgang værdien som du gentage gennem.
Men måske, for nogle grund, du ønsker nøglen,
hvilket er grunden til jeg valgte dette eksempel i stedet.
Så du kan faktisk manipulere nøgle og værdi i dette tilfælde.
OK?
Spørgsmål?
>> PUBLIKUM: Hvis du ønskede at blot manipulere nøglen ville
du skal gøre foreach--
>> ALISON: Right.
Så hvis du ønsker at manipulere blot nøglen,
vil du stadig brug for dette syntaks, fordi hvis du bare
har arr som noget, som en ting, det er
kommer til at antage, at du ønsker værdien ikke nøglen.
Så hvis du nogensinde bare har ligesom arr som, måske er ligesom $ element,
det kommer til at antage, at du spørger for blot værdien ved hvert punkt.
Hvis du udtrykkeligt ønsker at gøre noget med nøglen,
selvom du ikke kommer til at gøre noget med værdien,
du har brug for denne struktur at vi her
hvor er du udtrykkeligt beder for både nøgle og værdi.
Store spørgsmål.
Ellers noget?
Cool.
>> Okay, PHP og HTML.
Åh, vi er tilbage til p-sæt syv igen.
Så dette bør se lidt bekendt.
Så dette er nogle enkle HTML-formular der har nogle input navn hej.
Og vi ser, vi har vores metode til GET.
Og hvis vi husker fra vores p-sæt, når denne formular indsendes,
sender et array kaldet $ _GET, der har alle disse input eller variabler fra
den form, der skal være manipuleres i vores PHP.
Så i dette tilfælde brugeren ville sætte i deres navn.
De har det.
Og vi ser, at vi får nogle matrix her.
Vi har vores GET array.
Og vi adgang til navnet.
>> Så det siger, OK, giv mig værdi, der er forbundet med navn,
navn er nøglen her.
Og der knytter direkte til det vi sagde vores input hedder.
Så dette var at give dig nøglen til, hvad vil være i dit array her.
Giver det mening for alle?
Ja?
>> PUBLIKUM: Er navnet på GET henvise til den lilla linje i [uhørligt]?
>> ALISON: Det henviser til dette her.
Så dette område lige her, det henviser til dette navn her.
Så dette kunne have været navngivet ligesom telefonnummer, eller hvad.
Dette navn faktisk siger, hvad kalder du dette felt?
Hvordan vil du henvise til dette område?
Og dette navn er faktisk godt lide, vi er siger dette felt kaldes navn.
Det er, hvordan vi kommer til at få adgang til det.
>> PUBLIKUM: Så er det gerne, input navn lig Bob, og--
>> ALISON: Højre, så du ville få Bob dernede.
Præcis.
Alle cool?
Okay, så får versus POST, det er de to måder
at vi passerer data i en HTTP-anmodning.
Du fyre skulle have set begge disse forhåbentlig.
Så med GET, oplysningerne passeres gennem URL.
Så hvis du nogensinde gøre Google søgninger, YouTube, vil du
sikkert bemærke nogle spørgsmålstegn.
Og så alle de ord at du bare sætte derinde.
Og POST passerer dataene i HTTP brødteksten.
Så i modsætning til GET, du slags overveje at dataene er skjult for brugeren.
Men hvad er egentlig vigtigt at forstå
er, at dette er endnu lige så usikker som GET.
Analogien jeg gerne bruge, er, hvis du har dit bankkontonummer
og man skrive det på ydersiden af en konvolut, der er temmelig usikre.
Hvis du skulle skrive det på et stykke papir og sætte det ind i konvolutten,
det er stadig virkelig usikker, fordi alt hvad du skal gøre, er at åbne det op
og se på det faktiske indhold af beskeden at se.
Så dette er "skjult", og folk som til synes det er sikkert, men det er virkelig ikke.
Og jeg er sikker på Davin vil komme ind i denne mere, måske.
Men det er en vigtig sondring at gøre
og noget rigtig godt at forstå.
>> OK, SQL, Structured Query Language.
Alle de ting, vi har set indtil for nylig!
Så det er egentlig bare designet, naturligvis, til styring af data.
Du fyre havde en masse erfaring med dette i dine tabeller med PHP MyAdmin.
Og der er fire almindelige forespørgsler at vi ønsker jer at vide.
Så der er opdatering, indsætte, Vælg og slette.
Så skal du vide, dem rigtig godt.
Vi kommer til at gå gennem dem virkelig hurtigt.
>> Så opdatere, virkelig, som det du måske tror det gør,
det bare opdaterer data i din database.
Så vi har nogle eksempel her.
Dette er den generelle struktur for en opdatering forespørgsel.
Så vi opdaterer tabellen at vi taler om.
Og vi ønsker at sætte visse værdier, visse kolonner
svarende til bestemte værdier.
Så dette blot opdaterer tabellen, ændre værdier i alle rækker i denne sag.
Så i denne ene hernede, et virkeligt eksempel har vi insert-- ked.
Denne slide avancerede uden mig at vide det.
>> Så denne opdateringer tabellen col1 lige at VAL1 hvor hus er lig "Currier".
Hvad dette gør, er det ændrer kun den kun
opdaterer disse værdier i bestemte steder.
Så i denne første afgørelse ændrer disse værdier for alt i din tabel,
OK?
Det kommer til at ændre denne kolonne for hver enkelt post,
for hver enkelt række.
Men det her, kunne du tænk på det som en kvalifikationskamp.
Så det er kun kommer til at ændre det i meget specifikke steder.
Så i p-sæt syv, når du måske opdateres mængden af ​​kontanter
at din bruger havde, har du sandsynligvis haft nogle hvor ID er lig session id, ikke?
>> Fordi du ikke ønsker at ændre mængden af ​​kontanter
for hver person, der blev ved hjælp af din hjemmeside.
De ønskede at ændre det for en bestemt person, denne person er
hvem var at bruge det på det tidspunkt.
Right?
OK, så indsætte, indsætte visse værdier i tabeller.
Det er ligesom, når du er oprette en helt ny bruger.
Den generelle struktur her er indsætte i uanset tabel
vi taler om.
Værdier, der er de værdier, vi faktisk vil indsætte.
OK, så vi ser her, vi har indsætte i tabellen.
Dette er specifikke kolonner med deres svarede værdier.
Så dette siger, indsætte en ny række, der indeholder
værdier VAL1 og val2 under disse specifikke kolonner.
>> Så måske du kun ønsker at fylde ud halvdelen af ​​ting i denne række.
Det er, hvad denne del her kan du gøre.
Det kan du faktisk bestemme hvilken del.
Ja?
>> PUBLIKUM: Kan du kun [uhørligt] celler i rækken [uhørligt]?
>> ALISON: Hvis du kun udfylde visse dele af din række,
resten af ​​disse celler er blot tom.
Så længe du tillader dem at være tom, det er ikke et problem.
Hvis du forsøger at få adgang til dem, er det kommer til at vende tilbage en tomme element.
Men det er vigtigt at vide, at i visse tabeller,
de skal have lov til at være nul.
Du har måske løbe ind i en problem under dit p-sæt
fordi vi ikke lade nogen af dine værdier være null.
Men du kan angive en valgfri værdi i din tabel.
>> OK, skal du vælge, så dette er bare en måde at få
specifikke data fra en tabel på nogle id, som du ønsker.
Så vælg stjerne fra bordet, hvor col lig noget betyder blot,
give mig alle de oplysninger, der er forbundet hvor denne specifikke søjle er sandt.
Så stjernen i dette tilfælde returnere hele række til dig, okay?
>> Og så, i dette tilfælde skal du vælge stjerne fra tabel bare giver dig hele tabellen.
Og så, slet selvfølgelig, det bare sletter rækken fra tabellen.
Så slette bord, uanset bord er vi
henvisninger, hvor en vis id eller nogle betingelse er sand.
Ja?
>> PUBLIKUM: Spørgsmål.
Hvorfor bruger du dobbelt citater, og om du
gøre dobbelte anførselstegn eller enkelt citater, det gør en forskel?
>> ALISON: Dobbelt citater eller enkelte anførselstegn gør ikke en forskel i SQL.
Jeg troede, jeg så et andet spørgsmål.
Ja?
>> PUBLIKUM: Er det ikke påvirke, hvad bliver undsluppet fra forespørgslen?
>> ALISON: Rob?
>> ROB: Hvad mener du med flygtede fra forespørgslen?
>> PUBLIKUM: Hvis nogen har en enkelt forespørgsel i form of--
>> ROB: Hvis nogen skulle sætte ét tilbud i,
så så længe du sterilisering dit input, så det gør ikke noget.
Men hvis du bruger en enkelt citat, og du er forkert
undslippe dine input, så ja, de har brug for
at sætte en apostrof for at bryde din kode. hvis du bruger anførselstegn,
de har brug for at sætte en dobbelt citerer at bryde din kode.
Men så længe du slippe ting korrekt, er det ligegyldigt.
Det bare at gå der skal oversættes til det korrekte symbol alligevel.
>> Publikum: Hvad betyder flugt betyde?
ALISON: Nå, ligesom desinficering og flugt.
Eksamen, vi har, den store XKCD tegneserie, at de trækker op, hvor du har,
oh--
ROB: Det er det sidste dias.
ALISON: Det er det sidste dias, virkelig?
Oh my god.
Der går vi, perfekt.
OK, så dybest set, kan du injicere noget i denne SQL-forespørgsel
hvor det bryder din kode, eller som David viste
i klassen, hvis vi har nogle enkelt citat 1 er lig med 1, og hvis i vores kode,
vi bare direkte kopiere det i, og vi har en slutter enkelt tilbud,
hvad der sker, er, at vi får nogle udtryk,
evalueres til sand, der vil lade nogen komme ind i vores database
og få data, som vi ikke vil have dem til at komme.
Så sterilisering input betyder blot at sikre,
at vi flygter disse tegn og udpegning dem
som tegn og ikke ting der bør tillades
skal tages bogstaveligt som vores SQL-sætning.
>> Så den store ting, som vi sagde at du fyre bør være at bruge
var HTML særlige tegn, hvilket er noget
at du måske ønsker at tage et kig på.
OK, slette.
Datatyper, vil dette alt være online.
Da Vi har 15 minutter tilbage, er jeg bare kommer til at gå lige igennem dette.
PHP og SQL, dybest set er bare vi havde en søgefunktion, der
bidraget til at beskytte mod disse ondsindede angreb.
Så når du bruger forespørgsel, vi gjorde sikker
at tingene blev desinficeret og whatnot.
>> MVC er blot et design paradigme, så model, visning, controller.
Det er bare en måde at holde tingene nice og opdelt på samme måde
at vi har en tendens til at faktor ud kode i funktioner.
Dette er blot en web-design rammer der tillader dig at gøre det samme.
Jeg har tænkt mig at springe dette.
>> Det er noget, jeg ville være super comfy med.
Det er en stor lille tabel.
Det giver dig den funktion eksempel på modellen.
Jeg er bare at gå gennem dette, fordi jeg virkelig ønsker Davin at kunne tale.
Hvis du har spørgsmål, er du velkommen.
Jeg vil være her efter.
Lige kommet tale med mig.
Med dette, har vi HTTP status.
Og Davin kommer til at blæse gennem denne i 15 minutter.
Det kommer til at være stor.
>> Davin: OK.
Uh, din mikrofon?
Ja.
Undskyld.
ALISON: Vejen at være forberedt.
Davin: Nej, jeg er klar.
Jeg er klar.
Lad os gøre det.
Den er klar.
OK.
Undskyld.
Jeg spildte kaffe på mig selv.
Jeg ved ikke, om jeg er mere forstyrret, at jeg ser dum,
eller at jeg ikke har kaffe længere.
Anyway, bare en hurtig meddelelse om arket du fyre har.
Så dette ark du fyre har ikke den officielle hvad der er på quizzen.
Dette er den officielle hvad der er på quizzen.
Også på hjemmesiden, vi fortæller dig, OK, det vil være på quizzen.
Så i den lille snyde ark du har, ikke officiel.
Og der er fejl på den.
Så bedst ikke at bare blindt bruge det.
Så ja, det er det.
Så lad os komme ind i denne reelle hurtig.
>> Så HTTP status.
Så hvad sker der, når hjemmeside, alt er i orden.
Alt er OK.
Alt kommer tilbage til du den måde du ønsker det.
Du får en 200 OK.
301, hvor vi har set, at 301 før?
Vent, hvad sker der?
Undskyld.
Vi så jeg tin foredrag under sikkerhed.
Så i løbet af sikkerhed, så hvis David har skrevet i http og derefter forsøgte at gå til cs50.net,
du kommer til at se 301 flyttet.
Hvorfor?
Fordi det kommer til at omdirigere du automatisk til vores HTTPS.
>> Så 301 flyttes, bare det er dybest set en omdirigering.
Og du kan tænke over det på denne måde.
Enhver af de statusser, der starter med 2 s, de er ligesom, OK, at alt er ok.
Enhver af de statusser, der starter med 3, de er omdirigering.
Statusser, der starter med 4, at midler der er en slags klient fejl.
Statusser, der starter med 5, det er en form for serverfejl.
Så du slags bryde op de statusser som.
Så 304 ikke modificerede, så i din server.c p-sæt, så lad os sige, at du
loaded cat.html.
Alt kommer tilbage, du får 200s, OK, stor.
>> Lad os sige, du forfrisket det.
Nå, indeni, cat.html, har du en JPEG.
Nå, det JPEG er ikke kommer til at få genindlæses.
Du kommer ikke til at skrive en anden GET-anmodning til serveren,
og derefter få alle disse oplysninger tilbage.
Det kommer til at bare være-- billedet er vil blive cached på din maskine.
Og så billedet bliver en 304.
Så det er ikke blevet ændret.
Hvis du derefter lukke ud, klar cookies, og derefter opdatere
og prøv at indlæse denne side igen, er du nødt til at se 200s.
Du kommer ikke til at se, at 304.
>> 400, dårlig anmodning, real hurtig, ligesom hvis du
skulle sende en JSON objekt til serveren
og din JSON objekt var forkert, vil du se noget lignende.
403, forbudt.
Hvornår vil du se et forbudt?
Sandsynligvis Sandsynligvis?
PUBLIKUM: Chmod.
Davin: Chmod, ja.
Så du har ikke indstillet tilladelser korrekt.
404, ikke fundet.
Det er bare ikke der.
Så hvis du skriver i den forkerte URL.
500, intern serverfejl, serveren sandsynligvis ikke konfigureret korrekt.
Noget ikke på din ende, men noget på serveren side.
Og 503?
En masse mennesker har set 503s i sidste p-sæt.
Hvornår vil det ske?
Jeg hørte hvisken.
>> PUBLIKUM: Når Google beslutter du er en robot.
Davin: Ja, når Google beslutter du er en robot, du får 503s.
Så det er en overbelastning.
Hvis du har anmodet om fra serveren for meget, er det normalt midlertidig.
Og de fleste af jer har bemærket det.
Så du så 503.
Du har måske taget lidt pause, så 503s gik bort,
og alt var i orden.
>> GABE: Rigtig hurtig, hvornår du fyre får 500 i formentlig det sidste problem sæt?
Ja?
>> PUBLIKUM: Normalt hvis server har en fil malplaceret
eller [uhørligt] deres maskine [uhørligt].
>> GABE: Så det kunne være en konfiguration spørgsmål i din PHP på din server.
Men det kan være lige noget ligesom et semikolon, at din glemte.
Hvis du skriver PHP, nogle forkert syntaks
kan få dig noget lignende.
OK?
>> Davin: Cool.
Vil du have mig til at gøre netop indtil AJAX?
>> GABE: [uhørligt].
Davin: OK.
Så hvad er Dom?
Hvad DOM står for?
>> PUBLIKUM: Dokument objekt model.
Davin: Nice.
Og hvorfor vi kan lide det?
Awesome.
Højre, så det bare giver os mulighed for at få adgang HTML, få adgang til vores side meget hurtigt.
Hvorfor?
Fordi vi behandler vores side, behandle vores HTML-tags,
behandling alt som om de er objekter.
Hvis vi behandler dem som om de er objekter, så hvad kan vi gøre?
Nå, kan vi kalde funktioner på dem.
Og det er vigtigt, hvorfor?
Godt, fordi vi kommer til at bruge JavaScript opdatere vores HTML,
opdatere disse objekter.
Så hvis vi behandler dem som objekter, vi kan så kalde funktioner på dem.
Jeg har tænkt mig at komme ind i denne lidt mere, når jeg går ind i JavaScript,
men du har alle set som document.getElementById.
Så dokument er dit element, få element efter ID,
så du kommer til at se ud for nogle id i en HTML-tag.
Og så kan du gøre noget andet til.
For eksempel, som document.body, så kan du tilføje barn.
Så du kommer til at finde dokumentet.
Du har dokumentet.
Du kommer til at finde kroppen.
Du fandt liget.
Og så er du nødt til kalder en funktion på det.
Så tilføje barn, og du kan tilføje nogle HTML på enden inde i din krop.
Så dybest set, du er bare behandle det som et objekt.
Du behandler HTML tags som et objekt.
Og det gør det meget nemt og hurtig at gå igennem dem.
Men det giver dig også mulighed at kalde funktioner på dem
så du kan manipulere og ændre elementer.
>> GABE: I betragtning af dette, hvorfor er JavaScript sådan en dejlig sprog til at interagere med HTML?
Odds er, når folk vælger sproget for browseren,
for klientsiden, JavaScript er virkelig rart,
det er virkelig god til at håndtere genstande.
Og objekterne er slags gerne de objekter, der vises i HTML,
så det er meget nemt for JavaScript at gøre den slags håndtering.
Davin: Nice.
Så her er bare et eksempel.
Så jeg tror på sidste års quiz, eller måske to år siden, vi
bedt dig om at oprette et træ.
Så det er præcis, hvad du ville gøre.
Så du starter ud med dokumentet.
Og så er du dybest set bare se på tags.
Så hvis du ser, vi starte med en HTML-tag.
Og så får du fingerpeg om, hvordan du gøre dette baseret på indrykning.
Så hoved slags grene af.
Inde hovedet, vi har en anden tag for titlen.
Så har vi en titel-tag.
Og indeni, har vi nogle streng.
Og så vi repræsenterer en streng i en cirkel.
Og alle tags er i firkanter.
>> Og hvis man ser, hvis vi tænke på dette som et træ,
og lad os sige, at HTML er en forælder, så hoved og krop
vil være søskende.
De er begge kommer til at være børn af denne forælder.
Så fordi de er begge søskende, de er
kommer til at være slags siden hinanden i vores træ-model.
Og så, du dybest set gøre præcis det samme.
Så ikke svært, men vi har bedt spørgsmål som dette før på quizzen.
GABE: Er der nogen har spørgsmål indtil videre?
Er det godt?
Davin: Cool.
JavaScript, OK, de gode ting.
Så JavaScript, hvad er JavaScript?
Nå, JavaScript is-- det kompliceret, men disse
er nogle af højdepunkterne at du skal huske på.
For det første er det løst skrevet.
Hvad betyder det?
Så PHP was-- yeah, hvad sker der?
>> PUBLIKUM: Du behøver ikke eksplicit at tilstand, hvilken type variabel, det er.
Davin: Perfect.
Han sagde, at du ikke behøver at udtrykkeligt angive, hvilken type variabel.
Det er helt rigtigt.
Så i C, hvis jeg havde int i lig 50, så i PHP, det er ligesom dette, $ i,
lig 50.
Så i JavaScript, hvad ville samtalen være?
Var, ikke?
Det ville være ligesom var jeg lig 50.
Men du behøver ikke at være lignende, OK, dette er en int.
OK, det er en streng.
Ingen grund til at gøre det.
Det er et fortolket sprog.
Så hvad betyder det?
>> PUBLIKUM: Ikke udarbejdet.
>> Davin: Hvad der ikke kompileret betyde?
Ja?
>> PUBLIKUM: Du behøver ikke at omstrukturere koden
at få den klar til computeren til at køre den.
Det er bare taget på tidspunktet for udførelse og computeren [uhørligt].
Davin: Ja, så det kommer til at passere gennem en tolk.
Men du er helt rigtigt.
Så du aldrig at kompilere det, ikke?
Når du lavede din PHP og JavaScript-kode,
du aldrig kaldt kompilere.
Du har aldrig kaldet noget lignende gøre eller sådan noget.
Det er, fordi det er fortolket.
Så hver gang det går igennem browseren, det går gennem en tolk.
Og det kommer til at fortolke den bare i realtid med det samme for dig.
Så hvad er nogle positive og negative at have et fortolket sprog
og som har en kompileret sprog?
Så compiling-- yeah, hvad sker der?
>> PUBLIKUM: Fortolket er langsommere.
Davin: På hvilken måde?
>> PUBLIKUM: Når du kompilere, behøver du ikke
at gøre noget ekstra trin til at udføre det, at dette [uhørligt].
>> Davin: Højre, perfekt.
Så hvad du sagde, er som udgangspunkt, at indsamling,
når du kompilere, har du en masse startomkostninger, ikke?
Du kommer til at kompilere den.
Men efter du kompilere det, den compiler kommer til at optimere den.
Det kommer til at være hurtig.
Det kommer til at stort set være lige så hurtigt, som det kan være.
Tolkning, du aldrig har det upfront omkostninger.
Snarere det vil være lidt langsommere hver eneste gang du fortolker det.
Og du er nødt til at fortolke det hver eneste gang.
Så i stedet for at have denne én gang omkostninger, nu er du
nødt til at fortolke det hver gang siden gør.
>> Så tolke er gode, fordi du behøver ikke at kompilere det,
men de er dårligt i, at hver gang siden indlæses, er det
nødt til at fortolke denne JavaScript.
Og det kommer til at køre lidt langsommere end hvis du skulle kompilere den.
Gør det muligt at communicate-- åh, vent.
Anvendes til at manipulere den indhold og udseende.
Vi har lige talt om det.
Det bruger DOM.
AJAX, vil vi komme ind AJAX i en lille smule.
Og så er det klientsiden.
Så PHP er server side.
JavaScript er klientsiden.
Hvad er positive til det?
Den siger det.
Det er hurtigere, ikke?
Fordi du ikke har at-- det er hurtigere.
Du behøver ikke at kommunikere med en anden enhed.
Hvis du er bare på din klient, du aldrig
nødt til at gå og se hvad der er på serveren
og derefter rapportere tilbage eller noget lignende.
Så klientsiden tendens til være en lille smule hurtigere.
>> GABE: Ja, men dette betyder ikke, PHP er
hurtigere end JavaScript eller noget af lignende.
De kører slags i samme hastighed, fordi de er begge
fortolket sprog.
Det, der er langsom her er anmodningen.
Så du faktisk vil hele vejen over til Brasilien
at få nogle oplysninger der bor der.
Men PHP og JavaScript, de slags kører i samme hastighed.
Det er ikke, at man er hurtigere end den anden.
Dette også, trick spørgsmål her.
Så JavaScript aldrig bliver maskinkode, sandt eller falsk?
>> PUBLIKUM: Falsk.
GABE: Falsk.
Det skal blive maskinen kode, fordi maskinen kode er
det eneste maskinen forstår.
Selvom det ikke er kompileret, det stadig bliver maskinkode
fordi tolken er bare et program, der går linje for linje
og omdanner denne linje i noget computeren forstår.
OK?
Cool.
>> Davin: Her er bare et meget grundlæggende hej verden JavaScript-program.
Så jeg ved ikke, if-- du har set dette.
Men du skal bare HTML her.
Og i stedet for faktisk at sætte JavaScript i scriptet tags,
så du ville normalt sætte det i hovedet.
Du har script tags.
Du taber det der.
Alt vi har gjort her, er vi har linket in-- så vi har linket i en JavaScript-fil
som denne.
Og du har alle gjort det, ikke?
Så når du brugte jQuery og underscore.js i sidste p-sæt,
du ikke har tonsvis af kode op i Dit script tags, op i dit hoved.
Du kan gøre det, men i stedet du bare forbinder det i.
Og du linker den i ligesom du gør med CSS.
Så det bare gør det nemmere at læse så din kode er ikke som 1.000 linjer lang
med tonsvis af funktioner, du måske ikke bruger.
>> I stedet kan du bare linke det i.
Det compartmentalizes det.
Det er ligesom at skrive nogle header-fil, og så herunder header fil i C.
Tænk på det ligesom dette.
Så hvad betyder dette gøre?
Nå, dette kommer til at køre.
Det kommer til at advare.
Så du kommer til at få lidt pop up kaldet hej verden.
Hurtigt spørgsmål, bare tilregnelighed check, så du kan se her i kroppen,
sige organ, HTML her.
Hvad kommer først?
Skal jeg se krop, HTML her, eller kan jeg se advarslen først?
>> PUBLIKUM: Alert.
>> Davin: Right.
Han siger alarm.
Hvorfor?
>> PUBLIKUM: Fordi du gå fra top til bund.
>> Davin: Ja.
Perfekt.
Så han siger, du går fra top til bund, hvilket er helt korrekt.
Du kommer til at gå fra top til bund.
Og i JavaScript, jQuery, har du en funktion, der er ligesom onload eller klar,
og det siger, OK, vent alt dette HTML er indlæst.
Og så kalder JavaScript.
Fordi vi ikke har det her, det allerførste ting, der vil ske
er det kommer til at gå fra top til bund.
Det kommer til at ramme det JS kalder, det vil advare.
Efter at du klikker på OK, denne indberetning går væk.
Så det kommer til at vise du kroppen HTML her.
Nice.
>> OK, så bare virkelig hurtig, skrivning i JavaScript er super hurtig.
For at erklære en variabel, var navn.
Så i C, har du int i, du har at erklære hvilken form for type det er.
PHP, $.
JavaScript, var.
Vi talte om dette.
Okay, lad os gå.
>> Loops, samme ting.
Samme ting.
Funktion erklæringer, så ligesom du har set i C.
Det eneste anderledes er det, når du kommer til andre programmeringssprog,
ligesom når du tager 51 næste semester og du laver med OCaml,
du kan håndtere anonyme funktioner.
Så det er præcis, hvad du har her.
Så du ønsker at sætte i sum, en slags sumværdi.
Men du kan kun gøre det én gang.
Så du vil ikke kalde det funktion sum, give det en funktion erklæring.
I stedet kan du bare bruge det som en anonym funktion.
Og du har set dette en masse.
Du vil se et eksempel på dette i et par slides.
Ja, vil vi se.
GABE: Godt spørgsmål.
Hvornår kan du bruge en anonym funktion her?
Dybest set, når du vil have noget, som en begivenhed, at ske.
Så når musen er klikket for eksempel
du vil nogle funktion, der skal kaldes.
Så du passerer til begivenheden handler, du sender til arrangementet,
slags, den funktion, du ønsker at blive kaldt.
Og hvad du passerer er ligesom i slutningen
af dagen, blot en pointer til at instruktion, til funktionen.
Så det er ikke ligesom du passerer hele koden, ligesom
en pegepind til funktionen.
Og så, når nogen klikker på mus, så denne funktion bliver kaldt.
>> Davin: Arrays, så du har en array erklæring.
Så, for at et array sætte tingene i.
Rigtig hurtig, hvad vil det udskrive?
Hvad vil det tredje element være?
>> PUBLIKUM: "JS".
>> Davin: Højre, ville det være "JS".
Vent, gå tilbage.
Hvad er længden?
>> PUBLIKUM: Tre.
Davin: Tre, ikke?
Præcis hvad du synes.
OK, nu gå.
Arrays, kan du tilføje ting til dem.
Så du kan gå ud over deres oprindelige grænser.
Bare noget at huske på.
PHP, JavaScript, de er lidt lidt mere tilgivende i form af ting
sådan.
Objekter, meget gerne structs i C, meget
ligesom associative arrays i PHP.
I har alle haft erfaringer med dette.
Så JSON, når du passerer JSON frem og tilbage i p-sæt otte,
det er dit objekt.
>> Så ja, eksempelvis rigtig hurtig eksempel.
Her er et objekt.
Den måde du referere dette objekt, så bare virkelig hurtig,
lad os sige, at jeg ønskede at finde ud, OK, hvad er kurset?
Og så objektet navn her er CS50.
Og så, hvis jeg havde en associativ array, hvordan ville jeg gøre det?
Jeg kommer til at bruge en nøgle, ikke?
Så jeg har navnet på arrayet.
Jeg har beslag, citater, nøgle, end citater, endebeslag,
og der vil referere at element inde i mit associative array.
Hvordan kan jeg refereres kursus inde i mit objekt?
Nogen kender?
>> Publikum: [uhørligt].
>> Davin: Hvad sker der?
PUBLIKUM: CS50.course.
Davin: Right, ja.
Så CS50.course.
Så den måde, du referere tingene inde i en JSON objekt er med en prik.
>> PUBLIKUM: Du kan også bruge matrix syntaks.
>> Davin: OK, fint.
>> GABE: Du kan også bruge CS50 beslag, snor, ligesom anførselstegn.
PUBLIKUM: Jeg synes det er identisk med PHP.
GABE: Det er det samme.
Davin: Fint!
Men du vil se dette andre steder.
Ja, så holde ud.
Det er, hvad jeg lige sagde.
Så ind i en JavaScript jQuery eksempel.
Så dette er min DOM, ikke?
Rigtig hurtig, så jeg har en hoved, hej verden, krop.
Jeg har en knap.
Den siger "skubbe mig", så jeg ønsker at presse den.
Og jeg ønsker at gøre noget når det er klikket.
Højre, næste.
>> Højre, så dette er min JavaScript.
Så jQuery er blot en lettere måde at skrive JavaScript.
Så dette, og hvad jeg har tænkt mig at vise du næste, bliver jQuery,
er identiske.
Så de vil gøre de samme ting.
Just jQuery tendens til at være lidt lettere.
Folk har en tendens til at lide det mere.
Det har en masse funktioner.
Så folk har tendens til at bruge jQuery.
Du alle brugte jQuery i den sidste p-sæt.
Så hvad vil det gøre?
Hvad vil denne JavaScript-- så dette er blot almindelig JavaScript.
Hvad vil det gøre?
>> Så først, du ser vinduet onload.
Right?
Så vi ikke se, at før.
Så dette kommer til at vente indtil hele vinduet belastninger.
Så det kommer til at vente, indtil html, alle de billeder belastning
før det gør noget.
Så lad os sige vores DOM er indlæst.
Alt er der.
Så hvad vil der ske?
Ja?
>> PUBLIKUM: Knap vises.
>> Davin: Knappen er der allerede.
Ja, så knappens allerede.
Men det kommer til at sige, OK, hvis jeg klikker på knappen,
så knappens allerede der, ligesom HTML-tag.
Vent, gå tilbage reelle hurtig.
Dette tag lige ret her er går allerede at være en knap.
Der er allerede en knap.
Men så, JavaScript tag, lige her,
den siger, OK, jeg vil have at få element efter ID,
så søgeknappen bare siger, OK, jeg vil have at kortlægge denne variabel til denne knap.
Så variabel er blot en nemmere måde at få adgang til denne knap.
Og jeg siger, OK, hvis jeg klikker der knap, så hvis jeg klikker det element,
og dette element refererer til på knappen, hvis jeg klikker på det,
så jeg vil ringe til en funktion.
Her er en af ​​dem anonym funktioner vi talte om.
>> Bare ring nogle funktion.
Inde denne funktion, dybest set noget, vi har set en masse, alarm.
Du klikker på søgeknappen.
Det kommer til at dybest set har en knap.
Du klikker på det.
Du får denne indberetning.
X ud.
Det er det.
Ja?
>> PUBLIKUM: Så hvis du sætter scriptet [Uhørligt], script-tag i din HTML?
>> Davin: Du kan sætte scriptet tag lige i hovedet
fordi du har denne onload.
Det er også, at du har et klik.
Så det kommer til at vente, indtil du klikker på noget.
Men onload er bare for at være sikker, for at gøre at alt belastninger i din HTML
forhånd.
Ja?
Du ønsker at sige noget?
>> GABE: [uhørligt].
Davin: Ja.
>> PUBLIKUM: Så onLoad undviger definere variable søgeknappen
ved blot at sige document.getElementById søgeknappen dot [uhørligt].
>> Davin: Definitely, men derefter din streng bliver bare enormt.
Præcis, så det er bare at gøre det lettere for dig, ja.
Ja?
>> Publikum: Hvor gjorde vi skabe window.onload?
Eller document.ready?
>> Davin: Ja, der er.
Ja, der er, jeg kontrolleret.
>> GABE: Ikke for dem at bekymre sig om.
>> Davin: OK, så jeg har tænkt mig at fortælle dig alligevel.
Så dybest set, bare i almindelighed, så window.onload venter, indtil din DOM, alle
din HTML, belastninger.
Det venter, indtil dine billeder belastning.
Den venter, før alt belastninger.
document.ready, det bare venter, indtil dine DOM belastninger.
Når HTML er alle der, når din DOM er der, begynder at køre.
Det er den eneste forskel.
>> GABE: Hurtig tilregnelighed kontrollere her.
Så det kan ses slags ligesom en linje kode, ikke?
Fordi det er window.onload svarer til en masse ting.
Når JavaScript læser dette, sandt eller falsk, bliver den funktion udføres.
Falsk.
OK?
Hvad sker der her, er du bare passerer denne funktion som en anonym funktioner
at window.onload.
Og så når det går til rent faktisk at få henrettet?
Når vinduet belastninger.
Det er en begivenhed.
Så det er jus t ting vi er taler om tidligere, ikke?
Så når begivenheden sker, funktionen sker.
Samme ting med onclick.
>> Davin: OK, så nogen tog væk document.ready.
Men det vil være nøjagtig same--
PUBLIKUM: Den dollartegn, der er en document.ready.
Det er en genvej.
>> Davin: Åh, det er?
OK, så det betyder document.ready, genvej.
Men dette er den samme som window.onload undtagen den lille forskel
Jeg fortalte dig om.
Og det er jQuery.
Så dette er nøjagtig den samme thing-- dette er JavaScript.
Dette er bare-- nogle mennesker tænker på det som en mere let, strømlinet udgave
der har masser af funktionalitet at du sandsynligvis vil bruge.
Så dette gør præcis det samme.
>> Så ting at slags påpege.
Så i det andet eksempel, vi havde document.getElementById,
så vi havde denne lange streng, der kommer til at få
elementet ved hvad ID det har.
Det har erstattet af denne indkaldelse lige her.
Så du ser dollartegn, så kan du se tilbud, hashtag.
Hashtag er altid en vælger.
Den siger, OK, det har at gøre med et ID.
Hvad er vælgeren for en klasse?
>> PUBLIKUM: Dot.
>> Davin: Dot, højre.
Hvis du bare kommer til at Vælg et mærke, hvad er det?
Det er bare det tag, nøjagtigt.
Og du kan bruge det her, så godt.
>> GABE: Og tag, mener vi ligesom div, for eksempel, eller hoved.
>> Davin: Eller organ eller p eller noget lignende, ja.
Så her, OK, i stedet for at sige document.getElementById,
det er bare præcis det samme.
Lige i jQuery, det er kortere.
Så det er enklere.
Så, ikke mere onclick, skal du blot klikke.
jQuery funktion, kalder denne funktion.
Alert er nøjagtig den samme.
Så det er en lille smule mindre eller lidt
kortere, tænke lidt bit-- folk det er lidt nemmere at skrive,
en lille smule lettere at forstå.
Men dette er jQuery.
En masse mennesker få lidt lidt forvirret og bekymret
og de tror, ​​OK, jQuery er anderledes end JavaScript.
Jeg skal huske disse to forskellige ting.
Det er ikke.
Jeg mener, det er anderledes syntaks.
Men jQuery er JavaScript.
Det er bare en tilsyneladende bedre version,
kan være lettere at forstå, at folk bruger.
GABE: Ja, for at være ærlig, at dollartegn
som du ser i jQuery, det er bare navn på en funktion, jQuery definerer.
Det har ikke noget specielt.
Er Det er bare navnet på en funktion, ligesom du kan definere dollartegn.
>> Davin: Ja, så talte om dette.
Nogle nyttige ting.
Jeg ser tilbage på de gamle quizzer.
I de seneste par quizzer, de har måtte bruge ting som dette.
Så document.ready, så sørge for alt er
indlæst, inden du begynder at gøre ting.
Vælg et ID, eller vælg en klasse, det ville bare
være quote dot nogle klasse, ende citat.
Send, så hvis du er sender en formular og opkald
denne funktion efter formularen anført.
Value, så lad os sige, jeg havde en formular indsendelse, ligesom et brugernavn, en e-mail,
uanset hvad.
Jeg havde en tekstboks.
Så jeg skriver i denne tekstboks.
Tja, hvis du ønsker at få værdien ud af den tekstboks, du bruger dot val.
Og så, hernede, dot HTML er den samme
er ligesom dokument dot getElementById dot innerHTML.
Så det kommer til at vende tilbage du HTML fra ID.
Her du bare bruge nogle ID eller hvad dot HTML.
Det får den HTML fra dette element.
Hvis du ønskede at så ændre det HTML, kan du give det noget.
Så du ville være ligesom dot HTML, og derefter indeni, citater, nye HTML eller noget.
>> GABE: OK, så AJAX.
Jeg kan virkelig godt lide at forstå AJAX rigtig godt.
Så jeg vil have dig fyre til forstå AJAX rigtig godt.
For hvis du gør, du temmelig meget at gå
at forstå alt det, har at gøre med HTTP, PHP,
JavaScript fordi det hele kommer sammen i AJAX.
AJAX er ikke et sprog.
AJAX er en teknik.
Og det bruger masser af forskellige værktøjer.
AJAX står for asynkron JavaScript XML.
Så fremgangsmåden sproget, dataene.
>> Så det vigtigste sprog, vi bruger i AJAX til at udløse alt
og til at håndtere alt senere er JavaScript.
Det er derfor, det vedrører meget tæt på JavaScript.
Og så asynkron er fordi vi ikke gør det
alle på én gang, når vi indlæsning af siden.
Det er den ting, som vi kan gøre tingene slags parallelt.
Hovedidéen bag AJAX er, at du vil
det at få nogle specifikke oplysninger.
For eksempel, når du skriver nye brugernavn når du registrerer et brugernavn,
mit brugernavn er abc123.
Og så, i slutningen af formular, skal du klikke på Send.
Og det måtte gå til serveren, og derefter kontrollere, om i databasen,
abc123 er der allerede.
Og hvis det er der allerede, det siger, brugernavn allerede findes i databasen.
Og de, er du nødt til at fylde ud hele skemaet igen.
Og det var virkelig, virkelig dårlig.
>> Og så siger folk, OK, kan hvorfor vi ikke bare
gøre en lille HTTP-anmodning til lige tjekke at se, om brugeren er i databasen
før brugeren måtte indsende hele formen?
Så for eksempel når bruger færdig skrive abc123,
lad os bare gå til serveren lidt bit og bare få en sand eller falsk
fra serveren for at se om det er et gyldigt brugernavn eller ej.
OK, så det er en af ​​de vigtigste anvendelser af AJAX dag stadig.
>> Davin: Så virkelig hurtig, i en Ajax opkald i jQuery,
du kan angive, at du ønsker det skal være synkron.
Du bør ikke gøre dette.
Men du kan gøre det.
Og hvis du gjorde det, hvad der ville ske?
Nå, for eksempel, når du er få nyheder eller hvad,
din browser er bare at vente indtil hele opkaldet er afsluttet
stedet for at lade dig gøre andet ting lige efter du klikker på det.
>> GABE: Det er ikke passerer længere.
Oh my god.
Undskyld!
Yup.
"I fortiden, klient nødvendig til anmodning
hele indholdet af en hjemmeside. "
Det er, hvad jeg sagde.
Det giver os mulighed for at sende ekstra GET eller POST
anmodninger uden at have at genindlæse vores browser.
Så i slutningen af ​​dagen, er vi faktisk gør en HTTP forespørgsler
her ved hjælp af JavaScript.
Fordi før, kun vi brugte JavaScript at ændre HTML, der allerede kom.
Og nu kan vi bruge det til at interface med web-servere så godt.
Den måde dette sker er vi kunden.
Davin er en klient.
Og han har alle de JavaScript kører fordi HTML er dum.
JavaScript er smart.
Så Davin Davin har sit smarte del og hans stumme del.
Han kommer til at bruge sin smarte del nu.
Han kommer til at bruge JavaScript til anmodning, for eksempel,
hvorvidt abc123 er i databasen eller ej.
>> Så Davin, please, du lige send mig en HTTP-anmodning.
Tak.
Så han har lige sendt en HTTP-anmodning.
Du ser det?
Og det er kun på samme måde at enhver HTTP-forespørgsel sendes.
Browseren, Google Chrome eller noget, er
kommer til at se, at Davin s forsøger at sende en HTTP-anmodning,
vil hjælpe hm en lille smule.
Og det kommer til at gå hele vejen til serveren.
Nu er serveren vil have PHP her, eller et andet sprog.
Ligesom i en normal HTTP-anmodning.
Det er temmelig meget en normal HTTP-anmodning.
>> Og så serveren vil sige, OK,
Davin vil have mig til at kontrollere, om denne abc123 er i databasen.
Gå tale med modellen.
Modellen siger, det er ikke. abc123 er en god brugernavn.
Og da, webserveren vil bruge PHP til at gøre en form for fil.
Det kunne være bogstaveligt talt bare en fil der indeholder "ja" i det, eller "nej,
eller noget lignende.
Det kunne være en hvilken som helst fil.
>> Det kunne være som jeg har tænkt mig at Send Davin et billede af en and
hvis det er i databasen, og Send et billede af en hamster
hvis det ikke er i databasen.
Det ville være slags dum, men det vil fungere.
OK, så jeg sender en and til Davin.
Davin fik en and.
Og nu, hvem der skal at håndtere duck?
Davin smarte del igen, så JavaScript, ikke?
JavaScript sendte anmodning, og JavaScript
kommer til at modtage anmodningen og fortolke det på en eller anden form.
>> Og i denne forstand, det vil sige, OK, hvis ænder så er jeg god.
Hvis hamster, så jeg har tænkt mig at sige, nej, brugernavn allerede
findes i databasen.
Men som regel, du er ikke kommer til at sende en and.
Du kommer til at sende noget lidt smartere.
Og det, vi bruger, er XML.
Og for nylig, vi bruger JSON.
JSON er bare JavaScript Object Notation, som
er dybest set får du en Hele JavaScript objekt.
Og du sætter den i en fil, ligesom at CS50 objekt, du fyre så.
Du sætter den i en fil, og du sender det over til Davin.
>> Så i dette tilfælde, ville jeg lave et JavaScript objekt
og bare sige, brugeren eksisterer, ja.
Eller bruger eksisterer, nej.
Og sende den tilbage til ham.
Og hvorfor JSON?
Fordi den person hvem der modtager denne er
vil bruge JavaScript at håndtere svar.
Og JavaScript virker så godt, fordi det hedder JavaScript Object Notation.
Right?
Så han kan bare kalde en funktion og få denne nice objekt fra svaret.
Og så vil han vide, om at brugeren er i databasen eller ej.
>> Så du ser, det hele kommer sammen i webserveren,
og så er der en HTTP til anmodning og en HTTP respons og alt.
Så sørg for at fyre forstå denne AJAX kald
fordi det hjælper dig med at forstå alle af de begreber, vi taler om.
>> Så her er et eksempel AJAX med jQuery.
Og her, vi gør med get JSON.
Så vi prøver ikke at få en billede af en kat her, eller en and.
Vi forsøger at få en JSON-fil.
Og så vi vente til det er gjort, prik gjort.
Det betyder, jeg venter på svar.
Det kan tage lidt tid.
Derefter skal du se en lille belastning.
Hvis du ønsker at gøre det i dit websted.
Så dot gjort, og hvad så sker, når det er gjort?
Du passerer i en anonym funktion, ligesom vi så før.
Fordi gjort, er en begivenhed, bare ligesom at klikke på en mus eller hvad,
for jQuery.
Så du passerer i denne funktion med data, tekst, status, og jqXHR.
Og dybest set, det er blot nogle variabler
som du kan bruge senere til at have status for HTTP-anmodning,
de data, det vil til at sende tilbage til dig.
Så kan du senere fortolke det og gøre noget meningsfuldt med det.
Og hvis det mislykkes, når det måske ikke?
Nå, når HTTP-anmodning giver dig en 500 eller noget lignende.
Derefter går det at fortælle dig status, hvilken slags fejl, der var,
og alle mulige ting.
Du er nødt til at sikre, at håndtere begge tilfælde
ellers går programmet vanvittigt.
>> Davin: Så ja, det er præcis hvad du så på din sidste p-sæt.
Selve AJAX opkald er i get JSON.
Det er opkaldet.
Og så prik gjort, er ligesom kontrollerer det, hvis det er en succes.
Hvis det lykkes, du ønsker at gøre noget med dataene.
Du får tilbage fra at Anmodning data JSON.
Det er, hvad du får tilbage.
Så hvis du husker fra din p-sæt, en masse af jer var ligesom data beslag i
eller hvad, dot link eller titel.
Uanset hvad der kommer tilbage fra JSON, uanset
felterne er i denne JSON objekt, det er, hvad du får tilbage.
Data, hvad du får tilbage.
Tekst status, bare noget, lader dig vide, hvad der skete.
Og så, den jqXHR, det er bare jQuery XML HTTP-anmodning.
Det er ligesom et objekt.
Og så mislykkes, ligesom Gabe sagde.
GABE: I vores lille eksempel på abc123 bare for at kontrollere, om det er i databasen
eller ej, ville dataene være noget du ville gøre, hvis data dot brugernavn findes,
hvilket er, hvad din PHP genereret for dig, hvis data dot brugernavn eksisterer, så
Jeg har tænkt mig at advare, bruger navn findes allerede.
Else, jeg bare vil lade den Brugeren fortsætte udfylde formularen.
OK, sikkerhed, cool.
>> Davin: Skal jeg?
>> GABE: Jeg kan lide denne ene.
Så noget, der ser bekendt.
Vi er næsten færdig.
Så dette er blot et eksempel du fyre så i klassen.
Du brugte argv1 her.
Det er ligesom en kommandolinje argument.
Og vi mem kopiering som i en puffer af størrelse 12.
Hvad er problemet her?
Buffer overflow!
Fordi vi har en buffer på størrelse 12.
argv1 kan have en størrelse på to milliarder.
Vi gør ikke nogen grænse kontrol.
Så vi kan kopiere en masse hukommelse.
Og vi vil være særligt dårligt om dette.
Hvad kan vi gøre, det er meget, meget betyder i dette tilfælde?
Ja?
PUBLIKUM: En del af de to milliarder ting indeholder eksekverbar kode, der returnerer
[Uhørligt].
GABE: Præcis.
Så det er den form for ting, som folk bruger
at jailbreake en iPhone, for eksempel.
Så den slags.
Fordi du bare kan gøre enheden fuldbyrde en kode, som du kan lide.
Rettelsen, så rettelsen er let.
Bare tjek for grænserne.
Du tjekke for null fordi vi altid kontrollere for null
når vi har at gøre med strenge.
Og så, du tager streng længde før.
Og hvis strengen Længden er en gyldig streng
længde, hvilket er inden for 0 og 12, så vi er gode.
>> Davin: Hvis du ikke tjekke for null, virkelig hurtig, hvad vil der ske?
Det vil seg fejl.
Hvorfor vil det seg fejl?
Fordi du ringer strlen på null.
GABE: Ja.
Sandt eller falsk, ved hjælp af en adgangskode er en god idé.
>> PUBLIKUM: Falsk.
>> GABE: Falsk.
Brug mange passwords, og store, lange dem.
Hængelås ikoner garantere sikkerheden.
>> PUBLIKUM: Falsk.
>> GABE: Falsk.
Det betyder ikke noget.
Det er bare et ikon.
SSL beskytter mod en mand i midten angreb.
PUBLIKUM: Falsk.
GABE: Falsk.
OK, så alle dem, er falske.
Nice.
[Uhørligt]
Ønsker du at tale om det?
Din tur.
Davin: Typer af angreb, mand i midten.
Hvad er en mand i midten angreb?
Publikum: [uhørligt].
Davin: Hvis du sender en HTTP anmodning, kunne de gøre det, ikke?
Men hvis du sender HTTPS, de sandsynligvis ikke vil være i stand til at gøre dette.
Der er masser af point langs forbindelsen.
Du har routere.
Du har DNS-servere.
Hvis nogen er i stand til fysisk se, hvad du sender,
så en person er i stand til at faktisk få mellem dig,
klienten, og serveren, og er i stand til at se, hvad du sender,
dette er en mand i midten angreb.
Så for at se, hvad du forsøger at komme fra serveren, eller er i stand til at see-- værre,
du måske være i stand til at se cookies eller noget lignende.
>> Så for eksempel, hvis du ikke bruger SSL, han
kunne være i stand til at se din session ID-cookies.
Og dette kaldes sessionskapring fordi han ser dine ID-cookies,
og så er han i stand til at gå til den pågældende hjemmeside og foregive at være dig.
Fordi ligesom i PHP, husk når vi er logget ind, hvad gør vi?
Vi sætter session id lig ID.
Så der identificerer dig.
Det er derfor, du kan se din portefølje og ikke alle andres portefølje.
>> Tja, hvis jeg er i stand til at få det cookie, så kan jeg logge på den pågældende side.
Og så kan jeg bare se dine ting og begynde at købe og sælge ting.
Så det er sessionskapring.
Men du skal ikke være i stand til at-- så du kan bruge manden i midten angreb
selv om de bruger SSL.
Men du skal ikke være i stand til.
Hvis de bruger SSL, du ikke kan session hijack.
Hvorfor?
Fordi det hele er krypteret, ret? hvis det er krypteret,
og jeg er stadig en mand i midten, jeg stadig få dine data.
Det er fint.
Men det er krypteret.
Så kan jeg ikke rigtig bruge det.
Så det er to.
>> Rigtig hurtig, cross site request forfalskning.
Det er bare, hvis der er et link og at link gør noget
at du ikke mener, det bør gøre.
Altså for eksempel, hvis linket var kommer til at købe aktier eller sælge aktier,
og du vidste ikke, at.
Du har klikket på linket, sendt en anmodning, har købt
eller solgt noget, du var ikke min mening at gøre.
Det er det.
>> Cross site scripting, så her, du passerer ind via variabel q,
stedet for at passere i en slags af værdi, måske q er som et navn.
Så i stedet for at passere Q er lig Davin eller sådan noget,
hvis du ikke bruger HTML særlige tegn, hvis du
ikke undslippe denne for at sikre det er OK, så jeg kunne gå i stedet,
lad os sige i her, jeg siger print eller sådan noget,
så kunne jeg gå i her et script opkald.
>> Så i stedet for bare at få en variabel,
Jeg vil derefter udføre dette script opkald.
Så inde at script ringe, hvad gør den?
Dokument dot placering, der kommer til at ændre placeringen af ​​dokumentet.
Så jeg har tænkt mig at omdirigere til et andet sted.
Det hedder skurk i dette eksempel, meget god.
Kunne ikke tænke på ordet.
Og så, hvad der er endnu værre er, at jeg har tænkt mig
til derefter indstille cookie, som er nogle variabel Jeg har i denne hjemmeside.
Jeg har tænkt mig at sætte den lige til dokumentet dot cookie.
Derfor vil jeg at stjæle dine cookie.
Og jeg har tænkt mig at omdirigere nogle oplysninger til et websted
at du ikke skal være adgang.
Og alt dette sker, fordi du er ikke undslippe hvad du har set.
Ja?
>> PUBLIKUM: Så bare til gøre klart, er det
vulnerable.com at er sårbare over for denne.
Så link kan forekomme på en given side.
Nogen klikker på det, går til vulnerable.com.
Du har en cookie til vulnerable.com.
Lad os sige, Facebook er sårbar, så facebook.com.
Du har din Facebook cookie.
Hvad det gør, er du gå til facebook.com,
det er straks omdirigere dig at badguy.com,
men inklusive din cookie oplysninger.
Så det er en hurtig omdirigering, men din Facebook cookie
er inkluderet i denne omdirigering, og det er, hvordan de [uhørligt].
GABE: Ja, der er nogle meget gennemsnitlige ting
at folk kan gøre, hvis der er dette.
For eksempel Facebook hvis det tillades alle til at ændre dit brugernavn,
og de gjorde ikke nogen sundhedstjek, så du
kunne indsætte et JavaScript ting, ændrer dit billede til en hamster.
Og der indsætter det samme JavaScript i alle, der ser din side.
Så alle, der ser din side har det samme i brugernavnet.
Og fordi det er en virus, det spreder eksponentielt.
Davin: Vi vil springe det sidste en, og så er vi færdige.
Så dette er blot endnu et eksempel.
Så dette er de ikke undslippe deres SQL tabel.
Så du kan slippe det.
Så du ønsker at flygte ting.
Det var det foregående eksempel med korset site scripting.
Undskyld vi kørte lidt sent.
I morgen, undskyld!
I morgen har vi kontortid.
Så kontortid i Cabbot 8:00 til 11:00.
De kontortid er strengt for quizspørgsmål.