[00:00:02] [MUSIC SPILLE] HANNAH: Hei, alle sammen. Takk til dere så mye for å komme ut i den motbydelig vær for quiz ett anmeldelse av økten. Som dere vet, quiz ett er dette onsdag. Så vi kommer til å gå gjennom en haug av emner. DAVIN: Hei, kan jeg si noe virkelig rask? HANNAH: Ja, Davin er det som skjer å si noe virkelig rask. DAVIN: Beklager. Bare virkelig rask, hvis du har spørsmål om quizen, kan du gå på nettet. Gå til 2014 quiz ett, om quizen. Det fikk logistikk om hvor du skal gå, når man skal gå. Hvis du samtidig registrert, er vi kommer til å ha en makeup quiz på 5:30. Eller hvis du har sendt meg et problem, du har noen andre problemet. Men 05:30 er det make-up tid på onsdag. Men hvis du har spørsmål, generelle spørsmål, online har alle logistikk. Så sjekk der først. [00:00:47] HANNAH: Awesome. Så her er den store listen over emner at vi kommer til å gå gjennom i dag. Jeg kommer til å dekke alt av C ting, som er den første kolonnen. Så C ting som vi dekket etter quiz null. Starter med en lenket liste, som inkluderer pekere. [00:01:05] Greit, så vi så dette i den siste gjennomgangen økt, så jeg kommer til å gå gjennom dette er en litt raskere. Bare heve hånden din hvis du vil ha meg til bremse ned eller ta noe lenger. Men vi bruke relaterte lister fordi vi startet i C med arrays. Og arrays er stor, men den Problemet er at de har en fast størrelse. Lenkede lister tillate oss å skape dynamisk størrelse datastrukturer. [00:01:28] Og vi har våre grunnleggende operasjoner, sette inn, slette og søke. Og vi kan gjøre innsats i verste fall konstant tid hvis vi bare sette den helt i begynnelsen. Slette og søke, verste Ved stor oh n tid. Så igjen, bare for å snu gjennom disse bildene, Jeg vet at vi så disse siste tiden, men vi ønsker å holde styr på vår lenket liste ved å holde styr på leder av vår lenket liste. Fordi vi vet at hver og en av de noder bare kommer til å peke på neste node i vår lenket liste. [00:01:58] Så det er slik vi holde styr. Selv om disse ikke er kontinuerlige biter av minnet, vi kan finne dem ved å bare følge ulike piler. Her er vår struktur for en lenket liste node. Vi så dette siste gang. Vi har vår struct node. Og det har to eiendommer. Nummer en, den faktiske verdien vi ønsker å lagre. I dette tilfellet er det et heltall. Det kan være en streng, det kunne være en røye, hva du vil. Og så må vi holde orden på neste node i vår lenket liste. Så det kommer til å bli en pekeren til neste node. Hvis du var bare å gjøre søk, som jeg sa før, du må følge dine piler ned. Innsetting, vil du holde styr av hvor resten av listen er. Og du ønsker å omdirigere hodet å peke på vår nye element, som i dette tilfellet er en, og da vil man peke til resten av den lenket liste. Så igjen, jeg vet dette er litt litt av en gjentakelse fra quiz null. Så vi må være veldig forsiktig om rekkefølgen vi gjøre disse pointings så vi gjør ikke miste oversikten over baksiden av listen. OK, noen spørsmål med bare enkeltvis knyttet lister? Awesome, OK, kult. [00:03:06] Så nå skal vi gå inn på noe bare litt mer komplisert, dobbelt knyttet lister. Så i tillegg til å holde spor av de neste node, vi ønsker også å holde styr av det foregående noden. Og dette gjør oss til, hvis vi er på et tidspunkt i vår lenket liste, ikke bare gå fremover, men også iterere bakover. Fordi som vi så i en enkeltvis lenket liste, hvis vi var på noen node, og plutselig, besluttet vi, faktisk, jeg ønsker å gå til noden rett før meg, du vil måtte gå alle vei tilbake til hodet og iterere gjennom før du funnet noden du var ute etter. [00:03:35] Så dette gjør ting litt lettere som vi er prøver å iterere gjennom vår lenket liste. Men det krever at vi skal holde styr på én mer peker, så enda en node stjerne. All right, så her kommer den morsomme delen. Vi kommer til å øve implementere fjern for dobbelt lenkede lister. Så dette er noe som er helt fritt vilt for quiz. Det dukket opp på tidligere tester. Så definitivt være forberedt å kode litt i C. Ikke glem at med alle denne morsomme PHP og Javascript, vi har fortsatt å huske å gjøre C. Så friske opp det hvis du føler deg rusten. [00:04:12] Greit, la oss se om vi kan gjøre dette. OK, kult. Så vi kommer til å prøve å redigere rett i her, og forhåpentligvis dette går som planlagt. Greit, er det noen som ønsker å gi meg et forslag til hvordan jeg skal begynne? Den eneste forutsetningen er jeg gjør er at jeg allerede har en struktur definert, en jeg viste på siste side, på det siste lysbildet. Og jeg lagring hodet mitt koblet liste i noen pekeren kalt liste. Ønsker noen å få meg i gang? [00:04:42] PUBLIKUM: Kan du lage en ny node å ringe gjennom listen? [00:04:45] HANNAH: Awesome, så vi kommer til å skape en ny node å krype gjennom listen. Jeg liker det. Jeg vil bare kalle det pekeren hvis det er OK. Og hvor skal det opprinnelig starte? [00:04:57] PUBLIKUM: Sannsynligvis på leder av listen. HANNAH: Beautiful. Vi ønsker å starte på hodet, som Jeg sa kommer til å bli lagret i listen. Awesome. Så langt, så bra. Og nå, er vårt mål å iterere gjennom listen inntil vi finner node med verdi n at vi ønsker å slette. OK? [00:05:13] Så nå er den delen der vi ønsker å iterere gjennom. Kan noen foreslå en måte å iterere gjennom? [00:05:19] PUBLIKUM: En sløyfe. [00:05:20] HANNAH: En sløyfe. Jeg elsker det. Spesielt kan vi prøve en stund loop. OK, og vi vet at vi har nådd slutten av vår liste når hva? PUBLIKUM: Når pekeren er null. HANNAH: Når pekeren er null. Vakker, jeg elsker det. OK, kult. Så beklager hvis min byks brace er slags falle utenfor skjermen. Vi brakte den tilbake. OK, kult. Hva blir det neste? [00:05:48] Så vi vet at vi ønsker å slette noden som har verdi n. Så la oss finne det tilfelle hvor vi faktisk finne vår node. Så hvordan ville jeg sjekke det? Jeg vil bare si hvis pekeren, og deretter hvis jeg ønsker å få verdi ut av pekeren, Jeg bare do arrow n, lik n, parameteren at vi ga til denne funksjonen, node som vi ønsker å faktisk slette. Eventuelle spørsmål fram til her? OK. OK, så nå la oss tegne et raskt bilde på bordet for å visualisere dette. [00:06:24] Så la oss si det er vår herlige node. Og det har en verdi, vil jeg bare si fire. Og den peker til neste node i vår lenket liste. Og det er ingenting før det. Så vi har vår forrige peker til ingenting. I dette tilfelle vi peke bakover. OK, bare å sette opp min lenket liste over her. Og vi har en liste som peker til denne strukturen til å begynne med. Jeg skal trekke et for fullstendighetens skyld. OK. Jeg vil peke dette fremover. Og jeg vil påpeke at en tilbake. Oops, beklager. Ja, fikk denne bakover. Gjøre det igjen. OK, det vi går. All right, fikk den. OK, her er vårt bilde. [00:07:21] OK, så vi ønsker å vurdere to tilfeller. Det første tilfellet er dersom node vi ønsker å slette er helt i starten av vår liste. Og så, den andre saken som vi ønsker å vurdere er om det er noe annet. Jeg forstår at dette er en helt rotete tegning av hele mitt sletting, men forhåpentligvis vil vi prøve å gjøre dette klart med noen kode. [00:07:40] OK, så la oss dekke saken hvor vi funnet vår node, og det er helt på start av vår lenket liste. Noen gi meg en forslag her til hva Jeg bør gjøre for å faktisk fjerne vår node? Det er litt vanskelig. OK? [00:07:56] PUBLIKUM: Du må ta node som vil være før den og gjøre det peker på en som ville være etter den, og ta noden som ville være etter det og gjøre det peker til noden før det. HANNAH: Nettopp. OK, slik dette er tilfellet where-- vi har to tilfeller. Vi har det tilfellet der node som vi leter etter er forsiden av listen. OK, og deretter slik at du beskrevet er ellers, ikke sant? Det er et annet sted i listen. Så du sa, må vi se på noden forrige, og gjøre den forrige node peker til den neste noden. Så la oss si vi er prøver å ta ut fem i mitt veldig rotete tegning over her. Vi ønsker å være sikker på at fire nå peker til seks. Fire sin neste punktene til seks. Og seks tidligere peker på fire. Det er vårt mål her, ikke sant? Dette er hva jeg tror du sa bare der borte. [00:08:56] OK, så la oss få det første stykket. La oss gjøre det har forrige pekeren forrige. Så fire neste skal peke til hva? Nøyaktig, i dette tilfelle seks. Så vi bør si pekeren, neste. OK? OK. Så la oss bli kvitt denne stygge bilde og prøve å tegne en litt bedre en. Vi har vår liste hodet her. Og som peker til den første noden i vår lenket liste, som vi sa er fire. Her er vår andre node, fem. Og vår tredje node, seks. Bare prøver å trekke nøyaktig samme bilde, bare litt mer renslig. OK, så fire neste opprinnelig peker på fem. Fem er neste punktene til seks. Seks tidligere peker på fem. Og fem tidligere peker på fire. Så mye bedre! OK, kult. [00:10:04] Så nå, hva vi gjorde bare her, denne linjen med kode, som sier pekeren forrige neste, så hva betyr det? Det betyr at hvis vi ser på fem, gå til forrige node, og det er neste skal nå punkt til fem neste. Så egentlig, er hva som gjør er som er slette denne pilen og gjør det hoppe rett over fem. Er det klart? Jeg vet det kan være litt sketchy. Jeg ser noen hodet nikker. Det er bra. OK, kult. Nå, hva er neste steg? [00:10:39] Jeg har nullstille neste. Nå, som andre pilen må jeg endre? Denne retten her. Seks tidligere. Vi ønsker ikke seks tidligere å peke på fem lenger. Vi ønsker at det å peke på fire. Betyr det bildet fornuftig? Så nå er vi faktisk kan ta fem. Så la oss få det stykke. Hva bør jeg gjøre før jeg null seks tidligere til fire? Noen ideer der ute? [00:11:14] PUBLIKUM: Frigjør noden mellom dem ved å sette den til null? HANNAH: Cool. Definitivt, er vår ende mål kommer til å være for å frigjøre den noden. Slik at vi kan gjøre det med her. Gratis pekeren. Absolutt. Men selv før det, la oss just-- vårt mål rett her er å sette markøren ved siden forrige lik pekeren forrige. Jeg vet dette er å få dekket opp. OK, la oss take-- kult. Kan alle se denne bunnlinjen? Eller er det super bittesmå? [00:11:50] Så før vi utfører denne linjen her, vi ønsker å sørge for at markøren ved siden av er ikke null. Fordi hvis pekeren neste er null, hva slags feil vil jeg få når jeg prøver å referere til en nullpeker? PUBLIKUM: Seg feil. HANNAH: En SEG feil, vakker. OK, så hvis det ikke er null, så vi kan tilbakestilles. Og vi har seks poeng igjen til fire. Spørsmål opp til dette punktet? Ja? [00:12:17] PUBLIKUM: I din første hvis setningen, gjorde du betyr å ha pilen neste, eller [uhørbart]? HANNAH: Jeg mente pekeren pil n. Så i utgangspunktet, det jeg prøver å gjøre er si, gjeldende node som jeg er itera over, gjeldende node som Jeg ser på, jeg er lagring i pekeren. Og jeg vil vite pekerens verdi, som i dette tilfellet er n. Og jeg ønsker å se, er noden jeg ser for noden Jeg tar sikte på å slette? Så det er derfor vi har her pekeren n. [00:12:47] PUBLIKUM: Så pilen går til n, sette deg verdien og lagre den i en node kalt n? [00:12:55] HANNAH: Så det er som om jeg er gå gjennom dette lenket liste og peker på fem. Hvis jeg ønsker å få denne verdien, hvis Jeg ønsker å få det nummeret, 5, Jeg må gjøre pekeren pil n. Cool? Yeah. [00:13:07] PUBLIKUM: N er navnet på variabelen? HANNAH: Ja. Så hvis vi vende tilbake ett lysbilde, n er navnet av verdien innsiden av node i vår lenket liste. Og jeg vet at det kan bli litt litt forvirrende fordi vi også ringer tingen at vi ønsker å slette n. Så det er der det en linje kommer fra. Yeah? [00:13:27] PUBLIKUM: Hva har du [Uhørbart] hvordan de fungerer? En peker [uhørbart]? [00:13:35] HANNAH: Sure. Er du snakker om-- hvilken linje? PUBLIKUM: Den siste linjen [uhørbart]. [00:13:44] HANNAH: Jada, OK. Så la oss se på bildet i For å forsøke å forklare dette. Jeg beklager, for kamera, spørsmålet var kan vi forklare pekeren arrow neste pekeren forrige. OK, så la oss si at vi er på fem og vårt mål er å slette fem. Så pekeren neste, hvilke av disse tre noder, gir dette oss? Det bringer oss til den sjette node, ikke sant? [00:14:10] OK, så nå vi spør for de seks tidligere. OK? Og vi nullstille dette å være lik fire, som skjedde til å være fem tidligere. Jeg vet, det er super vanskelig å holde styr på. Jeg virkelig anbefale deg tegne bilder hvis du får et spørsmål som dette. Ja? [00:14:30] PUBLIKUM: Er grunnen til at vi har ikke en [uhørbart]? [00:14:37] HANNAH: Nettopp. Så spørsmålet var, hvorfor gjøre vi ikke trenger å sjekke her? Hvorfor ikke vi trenger å sjekke at pekeren tidligere ikke er lik null? Og det er fordi vi har allerede skilt ut tilfelle dersom pekeren største helt i begynnelsen. Veldig godt spørsmål. Noe annet på dette? OK, kult. Så la oss avslutte det opp. Vi er nesten der. [00:14:59] Så hva om det er på hodet? Hva om i stedet for prøver å slette fem, vi faktisk ønsket å slette fire? Hva skulle jeg gjøre? Vel, jeg ønsker å nullstille hodet mitt til hva? Rop det ut? PUBLIKUM: Den ene etter den. HANNAH: Beautiful. OK, så vi ønsker liste å peke til hva vår pekeren neste node er. Bra. Og bare for fullstendighet s skyld, ville vi lurt å sjekke at så lenge vår liste ikke er null, så lenge vår listen er ikke tom, så vi ønsker å sette vår tidligere lik null. Spørsmålet så langt? Et steg from--? [00:15:53] PUBLIKUM: Ville det være hvis Listen er ikke lik null? [00:15:55] HANNAH: Ja, du har helt rett. Jeg er så lei meg. Er listen er ikke lik null. Awesome. Prøver å få alt dette på skjermen. Det er slags falle av. Sorry, folkens. Og sist men ikke minst, alle vi trenger å gjøre er retur. OK. Det var mye crammed i veldig raskt. Ta et sekund å se dette over. Fortell meg hvis du har spørsmål. Yeah? [00:16:20] PUBLIKUM: Hvis listen er på hode, then-- vent, glem. [00:16:26] HANNAH: OK, bra. Så dette er hvis listen er på hodet, fjerner vi den til hva vi satt inn. Yeah? [00:16:31] PUBLIKUM: Kan du forklare det første hvis setningen igjen? Dersom pekeren til n er lik n? HANNAH: Sure. Så vårt mål om hele denne funksjonen er å slette noden som har verdi n. Så hvis vi finner, som vi er itera gjennom vår liste, noden med verdi n, er at den vi ønsker å slette. Så alt av slettingen skjer innsiden av den store hvis setningen. Betyr det fornuftig? Cool. Yeah? [00:16:59] PUBLIKUM: Kanskje du bare ikke kan se det, men ikke du trenger også en linje for å bla gjennom listen? HANNAH: Awesome. La oss ta dette opp litt, og vi vil kaste det rett i bunnen. Kanskje styret ville har vært en litt bedre idé. Så hvordan ville jeg flytte pekeren fremover? [00:17:17] PUBLIKUM: Pointer tilsvarer pekeren pluss en. [00:17:20] HANNAH: Beautiful. Så som tillater oss å fortsette itera gjennom. OK. PUBLIKUM: Ville ikke det være en annen? HANNAH: En gang til? PUBLIKUM: Ville ikke det være et annet sted etter det store gamle hvis uttalelse [uhørbart]? HANNAH: Hvilken del? Jeg beklager. [00:17:38] PUBLIKUM: The traversering, bør ikke det være en annen? HANNAH: Du absolutt kunne ha et annet. Fordi jeg har en retur rett der, trenger du ikke et annet. Men ja, godt spørsmål. OK, ja? PUBLIKUM: Kan vi tenke på pekeren som går gjennom listen som å ta på verdien til hver node i listen? Eller skal vi tenke på det som form for eksternt i forhold til listen? [00:18:00] HANNAH: Enten en er greit, tror jeg. Måten jeg tenke meg at det er Jeg sier, OK, jeg peker. Og dette er meg. Dette er min hånd. Jeg kommer til å peke på den annen ting som jeg ønsker å iterere gjennom. Først kommer jeg til å peke til leder av listen. Og det forteller meg at jeg er kommer til å peke på fire. Og så meg, som ligger utenfor listen, Jeg kan peke på hvert av disse elementene. Så jeg tror på meg selv som pekeren. PUBLIKUM: Så når du sletter en av disse elementene, du slette selv, så å si. HANNAH: Nettopp. Så du slette ting du peker til. Så i eksempelet som vi så hvor vi er prøver å slette fem, når jeg peker til fem, Jeg ønsker å slette ting jeg peker til. Helt riktig. Ja? PUBLIKUM: Har vi tatt vare på tilfellet hvor n ikke er på listen? HANNAH: Hvis n er ikke på listen? Alt som kommer til å skje er at du er kommer til å iterere gjennom og iterere gjennom, og deretter, du kommer å få til pekeren blir null, og så kommer du til å bli gjort. [00:18:48] PUBLIKUM: Så har vi å returnere noe? HANNAH: Vi kunne. Den måten at hvis definert dette funksjon, jeg bare si at den returnerer ugyldig uansett. Men du kunne ha noe som returnerer et heltall, og har det tilbake negativ 1 hvis det mislykkes. Noe sånt. Spørsmål with-- ja? PUBLIKUM: [uhørlig]? HANNAH: Sorry? PUBLIKUM: [uhørlig]? HANNAH: Sure. Så det er actual-- når vi har gjort alt dette arbeidet med å flytte alle disse piler rundt, hele vår Målet var å bli kvitt noden at vi leter etter. Slik at i dette tilfellet, frigjør pekeren, hvis jeg peker til fem, det er som å slette denne middel node. Det er gratis pekeren del. Det fornuftig? [00:19:29] PUBLIKUM: Så selv trodde du gjorde ikke [uhørbart]? [00:19:31] HANNAH: Så vi antok i begynnelsen vi hadde noen liste som var already-- de hadde satt dette sammen. Så for å konstruere dette listen, må har de [uhørbart]. Cool. Noe annet med dette? Ja? [00:19:46] PUBLIKUM: Hva hvis listen ikke lik null linje? [Uhørbart]? HANNAH: Akkurat her? PUBLIKUM: Yeah. HANNAH: OK, jeg alt jeg gjør er jeg bare å sørge for at før jeg prøver å dereference liste, før jeg prøver å få tilgang til tidligere, Jeg vil være sikker på at det ikke er null så jeg ikke får en SEG feil. Cool. [00:20:08] OK, jeg vet at dette var ganske mye å komme gjennom. Så dette lysbildet vil være gjort tilgjengelig for deg. Så du kan gå gjennom den i mer detalj. Ja? [00:20:17] PUBLIKUM: Hvorfor listen [uhørbart]? HANNAH: Sure. Så liste egentlig peker til dette elementet akkurat her, det første element i listen. Så det kan ikke ha en tidligere. Ja? [00:20:31] PUBLIKUM: Har pekeren punkt til samme adresse i minnet? Betyr peker til den samme adresse i minnet som noden at den peker til? [00:20:40] HANNAH: Ja, det peker til denne noden i minnet. [00:20:43] PUBLIKUM: Høyre, så når du [uhørbart]? [00:20:47] HANNAH: På en måte, ja. OK. Greit, la oss gå sammen med dette. Og hvis du har flere spørsmål, værende på slutten, og vi kan gå gjennom det igjen. OK, kult. Nå, vi kommer til å gå videre til hasj, prøver tabeller, og trær, som du fikk super kjent med i p-set fem, stavekontroll. [00:21:04] Så hash table er bare en array med enkeltvis lenkede lister eller dobbelt knyttet lister som kommer ut av det. Så vi har en slags av assosiativ array. Og hvordan vi vite hvilke av disse arrays bøtter for å komme inn, vi bruker en hash-funksjon. Så i dette tilfellet, kan hvem som helst gjette hva hash-funksjon ville bli bare basert på noen av input og output? [00:21:31] PUBLIKUM: Letter antall alfabetet. HANNAH: Nettopp. Det setter bare dem i alfabetisk rekkefølge. Alt som starter med en A er satt inn i den første bøtte. Alt med et B er satt inn i andre bøtte, så videre, og så videre. Awesome, OK. Og en hash-funksjon er noen funksjon som tar inn et ord og vil fortelle deg hva bøtte det hører hjemme i. Så hvilken oppføring i vår matrise det hører hjemme i. [00:21:55] Så hver gang jeg gi min hash fungere et ord, det skal fortelle meg det samme plassere hver eneste gang. Så hvis vi bruker hash-funksjon fra forrige lysbilde hvor vi sortering av første bokstaven i alfabetet, hver gang jeg gi min hash-funksjon "eple" det skal alltid gi meg tilbake 0. Så hvis jeg har et eple å sette i min hash table, hvis jeg gir "eple" til min hash-funksjon, det skal si, gå sette den i bøtte 0. Hvis jeg leter etter en eple i min hash table og jeg sier, hvor kanskje eple levende, spør du din hash-funksjon. Og det står, gå til bøtte 0. All right? Spørsmål med hash funksjoner? Awesome. [00:22:34] Her er en litt mer detaljert forklaring av hva en hash-funksjon kan se ut. OK. Nå, problemet med hasj funksjonene er i en ideell verden, vi ville bare ha ett ting i hver bøtte. Men i virkeligheten, det er Ikke bare ett ord som starter med A. Det er ikke bare ett ord som begynner med B. Så i dette tilfellet, hvis vi plutselig får "bær" og vi ønsker å sette den inn i vårt hash table, og vi ser, oh, nei, er banan allerede der, hva skal vi gjøre? [00:23:03] Vel, vi har to alternativer. Det første alternativet er lineær sondering, som betyr bare gå finne neste tom bøtte. Gå finne neste tom tabell oppføring. Og bare sette "berry" der. Så jeg vet det er ment å gå med banan i bøtte en. Men bare sette den i bøtte tre, fordi bøtte tre er tom. Et annet alternativ er sannsynligvis hva du implementerer i p-set, hvor du hadde separat kjeding. Så hver av bøtter, hver av array elementer, ikke bare har en ord, men faktisk har en peker til en liste av ord. Slik at hvis du hadde banan i din hash table og du plutselig ønsket å legge til bær, ikke noe problem. Bare legg bær på slutten, eller til begynnelsen av din lenket liste. OK, awesome. Spørsmål med hasj tabeller før vi går videre? [00:23:58] OK. Trær og prøver. OK, så dette var et annet alternativ for å iverksette ordbok. Du kunne ha gjort et forsøk. Så det er en spesiell type tre som oppfører seg som en multi-level hash table. Så vil du se bildet der du har en matrise som peker på en haug med arrays som peker til en haug med arrays som peker til en haug med arrays. Og vi får se hva som vil se ut på en fremtidig lysbilde. Og mer generelt, et tre er bare noen datastruktur i hvilken dataene er organisert i noen hierarki. Så hvor vi så vi har en slags forståelse av en topp nivå, et neste nivå, en neste nivå, et neste nivå. Så dette er trolig mest klar med noen spesifikke eksempler. Så her er treet vårt. Du kan se at det har bestemte nivå at vi starter med at rotnoden, ett. Og vi kan gå ned gjennom treet vårt. [00:24:50] En binærtreet er en bestemt type data. Og den eneste spesifikasjonen for et binærtre er at hver node har høyst to blader. Slik at du ikke kommer til å se noen av disse nodene har tre eller fire eller et annet antall blader. Og så enda mer spesifikk er et binært søketre hvor hver node til venstre for node kommer til å ha en verdi mindre. Og hver verdi til retten kommer til å bli større. Så hvis du ser 44 er på vår rot, til venstre, 11, 22 og 33 er alle mindre enn vår rot. Og til høyre er alle nummer bigger-- 66, 55, og 77. Og denne egenskapen gjelder på alle nivåer i treet. [00:25:37] Så når vi går ned til 22, 11 og 33, 11 fremdeles er mindre enn 22 og 33 er større enn 22. Og dette gjør det lettere å søke fordi hvis vi leter etter et nummer, Vi vet nøyaktig hvilke gren å følge ned. Så dette bør minne deg en litt av binære søk. Yeah? [00:25:56] PUBLIKUM: Så når du er beskrive binære, du sa det har på de fleste to blader? HANNAH: Mm-hm. PUBLIKUM: Kan det ha mindre? HANNAH: Yeah. Så la oss si, for eksempel, du ikke har et likt antall ting og du kan ikke fylle opp alle dine blader, det er greit hvis man har en. OK? Awesome. Andre spørsmål på trær? OK. [00:26:16] Tilbake til våre prøver som jeg snakket om litt tidligere, hvordan vi har disse multi-level arrays. Så i dette tilfellet, starter vi på toppen. Og vi kan følge enhver ord ned. Så la oss si at vi ønsket å lete etter Turing. Vi starter på T, følger det ned til en matrise som inneholder U, og følg den ned før vi nå denne lille deltaet som forteller oss, ja, du fant et ord. Klar på prøver? Noe å gå dit? Ja? PUBLIKUM: Har symbol på deltaet nødt til å okkupere plass innenfor prøve? HANNAH: Ja, så det gjør ikke nødvendigvis engang trenger å være et delta. Men vi trenger noen måte å fortelle vår computer-- beklager, slik at vi vet at TUR er ikke et ord. Fordi la oss si at vi ikke har Dette konseptet med en delta, dette konseptet gratulasjoner, fant du et ord, det ville gå gjennom og iterere T-U-R, og deretter si, awesome, jeg fant det! Det må være et ord. Men det er egentlig ikke. Vi ønsker hele Turing å være et ord. Så vi må ha noe på enden som sier, gratulerer, du har funnet en legitim ord. PUBLIKUM: Så hvis du hadde som 26 bokstaver i alfabetet, ville du faktisk har 27 nøkler i forsøk? [00:27:24] HANNAH: Awesome, ja. Så egentlig, jeg tror at vil være på neste lysbilde. Ta-da! Der hvis du har en node i din prøve, er du kommer til å ha 27 barn i stedet for 26. Eventuelle spørsmål med det? Yeah? PUBLIKUM: Hvorfor prøver ta opp så mye plass [uhørbart] mens du går? Hvorfor er det anses å være [uhørbart]? HANNAH: Sure. La oss gå tilbake. Spørsmålet er, hvorfor er prøver så mye større enn noe sånt som en hash table. Så for hvert av disse nivåene, selv om de ikke er trukket her, du må ha alle 26 tegn. Og grunnen til at du ikke kan si, oh, men som for Turing, jeg trenger ikke å ha noen av disse samme tingene om nivået på U. Vel, hvis du plutselig ønsket å legge noe som var som T-H, du trenger for å ha det evnen til å legge det ordet. Så for hver enkelt bokstav, du kommer til å ha å ha en haug med matriser som kommer ut av det. Så du kan se hvordan det ville få virkelig stor, veldig fort. Andre spørsmål? OK. Yeah? [00:28:29] PUBLIKUM: Når er forsøk raskere enn hash tabeller? [00:28:33] HANNAH: Når er forsøk raskere enn hash tabeller? Så hvis du hadde en virkelig dårlig hash-funksjon. Så la oss si jeg var liksom: her er din hash-funksjon. Nei hva ordet saken du gir meg, jeg er alltid kommer til å sette den i matrisen entry 0. Og så ender vi opp med bare å sette alt i en stor lang lenket liste. Og så et oppslag tid ville ta i verste fall n hvis det er helt på slutten av vår liste. Med prøve, vi må bare iterere gjennom bokstavene i ordet. Så selv om vi har lagt en haug flere ord til vår prøve, det ikke ville ta oss lenger for å finne et bestemt ord. [00:29:09] Alt vi trenger å gjøre er, for eksempel i dette tilfellet la oss si at vi leter etter zoom, vi ville bare nødt til å iterere over Z-O-O-M, fire bokstaver. Så det er bare lengden av ordet zoom. Det spiller ingen rolle hvor mange flere ord vi satt i denne prøve. Vi kan alltid få det i de fire trinn. Awesome. Ja? [00:29:32] PUBLIKUM: Så [uhørbart] er en matrise, ikke sant? [00:29:34] HANNAH: Mm-hm. PUBLIKUM: Hvis du er leter etter [uhørbart], ville du må gå gjennom array å finne [uhørbart]? HANNAH: Sure. PUBLIKUM: Betyr ikke det ta mer tid? HANNAH: Hvis jeg skal til si at mitt utvalg er alltid kommer til å være A, B, C, D, E, F, G, blah blah blah, så hvis jeg alltid vet at det er i den samme rekkefølgen, hvis jeg alltid vet at det er i alfabetisk rekkefølge, Jeg kan bare si O er antall så og så i alfabetet. Bare hoppe til dette stedet. Fordi husk, med arrays, kan vi få tilgang noe element av denne matrisen i konstant tid hvis vi vet hvor vi leter. Yeah? [00:30:09] PUBLIKUM: På forrige skyv [uhørbart] 27, men 26 for den første. [00:30:14] HANNAH: Sorry? [00:30:15] PUBLIKUM: Er ikke den første ett 0, så ville ikke det være 26? [00:30:18] HANNAH: Jada, så når vi sier 27, det er kommer til å gi oss indekser 0 til og med 26. Men hvis du faktisk telle de ut, kommer det til å være 27. Godt spørsmål. Noe annet? Yeah? [00:30:31] PUBLIKUM: Så er forsøk tregere enn hash tabeller? [00:30:34] HANNAH: Prøver kommer til å være, i teori, raskere enn hash tabeller men tar opp mer minne. Yeah? PUBLIKUM: [uhørlig]? [00:30:45] HANNAH: Jeg beklager, det gjorde jeg ikke høre deg. PUBLIKUM: [uhørlig]. 0-25 gir deg 26. [00:30:54] HANNAH: 0-25 ville gi deg 26, høyre. [00:30:56] PUBLIKUM: Og så [uhørbart]. HANNAH: Høyre. Så antallet vi spesifisere er antall ting i vår array. Så hvis vi har 27, er det kommer til å gi oss 0 gjennom 26, noe som vil gi oss rom for, i dette tilfellet Jeg er ikke inkludert en apostrof. Så vi får 0 til 25 år er de første 26 bokstavene i alfabetet, eller alle 26 bokstavene i alfabetet. Og så det siste ting, på entry 26, er kommer til å være sjekken mark, eller deltaet. Noe annet? Awesome. Mistet min plass. OK, kult. [00:31:31] Så vi allerede berørt på dette. Men den store trade off mellom forsøk og hash tabeller er at prøver gir, i teori, konstant se opp ganger, men bruke en hel masse minne. Greit, nå har vi litt mindre kompliserte strukturer, og vi vil bli ferdig med C, og vi vil flytte rett sammen. [00:31:49] Så stabler, vi så dette i foredrag der du har noe sånt som en stabel med skuffer der det siste du sette på stabelen kommer å være det første du tar av. Så det er det som virkelig definerer en stabel er at det siste du sette på kommer til å bli den første ting du tar av. Og terminologien vi bruker hvis vi kommer til å sette noe, hvis vi kommer til å legge noe til stacken, kaller vi det presser. Og hvis vi tar noe off, vi kaller det popping. Og hvis vi skal implementere en stabel, vi må være sikker på å holde styr på både størrelse og kapasitet. Slik at det totale antall elementer kan vi hold og den nåværende antall elementer at vi holder. [00:32:27] Og svært likt, har vi køer. Og den eneste forskjellen er stedet for med stabler, vi sa det siste vi satt på er det første vi ta av. Så med køer, den første vi satt i kommer til å være den første tar vi ut. Så dette er som om du er faktisk stille opp på en butikk og du blir hjulpet, da den første personen i tråd bør være den første personen til å bli hjulpet. Slik at det ville være en kø. [00:32:52] Så vi trenger å holde styr på størrelse, kapasitet, og hodet siden vi er kommer til å ta alle av fronten av listen i stedet for ryggen. Spørsmål om det? Eventuelle C spørsmål som plager deg? Datastrukturer, noe av det morsomme ting? All right, kult. Så jeg skal overlate den til Alison til hoppe inn litt mer programmering. [00:33:14] ALISON: Åh, vi får se. Vi får se hvor godt jeg gjør her. OK, jeg skal prøve og fly gjennom slike ting, folkens. Hannah gikk veldig i dybden på alle hennes ting. Jeg kommer til å prøve å gi du en rask omgang oversikt slik at vi kan få til Davin med alle de morsomme Javascript og sikkerhets ting at kanskje du faktisk ønsker å høre mer om. [00:33:33] OK, som Hannah sa, hvis Har du spørsmål, Jeg kommer for fort, vær så snill, gi meg beskjed. Jeg vil svare på spørsmål som er nødvendig. Så for å starte, kommer vi til å begynne med trolig en av de aller første tingene du har lært med web programmering, tillatelser. Så chmod, dere burde har vært mestere på dette med alle web programmering som du har gjort i det siste. Det er i utgangspunktet bare en kommando som endrer tillatelsene eller tilgangsrettighetene av våre filsystem stedene. Selvfølgelig, å faktisk se disse, hvis du er å ha noen problemer med disse under dine oppgavesett, du kan ha brukt ls -l, som er lang, å få visning typen som dette, hvor du faktisk se alle tillatelser for en fil. [00:34:16] Og egentlig, vi bare kommer til å gå gjennom ganske raskt bare pen mye hva hver av disse mener. Så vi har d akkurat her, som bare står for katalogen. Tydeligvis akkurat her, ser vi rwx, som er lesbar, skrivbar, og kjørbar. Disse kan også være representert som biter, som vi skal komme inn på neste side. Så hver triade som vi så her, så det er tre triader. Vi har rwx, r ingenting x og r ingenting x for denne første filen. Det er denne generelle struktur. [00:34:49] Så vi har noen katalog. Vi har noen brukergruppe med disse tillatelsene. Noen gruppe som har disse tillatelsene, og en verden som har en tillatelse. Du kan tenke på disse som en triade. Du kan tenke på disse som tre biter. Slik at de kan holde verdier alt fra 0 opp til 7, og det er derfor ofte vi måtte du gjøre chmod 600 i stedet for chmod rw uansett. Vi får inn et eksempel der. Men i utgangspunktet, kan du tror av disse som enten bare rwx, eller du kan tenke på dem som noen nummeret der denne første her betegner et tall mellom 0 og 7, denne andre ett betegner et tall mellom 0 og 7, og den tredje betegner et tall mellom 0 og 7, OK? [00:35:38] r har en verdi på 4. w har en verdi på 2, og x har en verdi på 1, noe som er grunnen til at denne tillatelse her ville bli chmod 700. Fordi i dette tilfellet her, sier det vi har den første biten er det snudd på. Så vi har 4 for å lese. Den andre biten er snudd på for w, som er to, så nå har vi seks. Og den tredje biten er snudd på for x, som er en, slik at vi får syv. Og selvfølgelig, vår gruppe og vår verden er hver 0. Så dette er også den tilsvarende chmod 700. Og jeg vil definitivt prøve å forstå mapping mellom disse. Jeg er ikke sikker på om det har komme opp på en quiz før, men det ville være en spørsmål som jeg kan spørre. [00:36:18] Bare en liten bit å gå selv videre inn chmod her, her er meget generell Strukturen av en chmod anrop. Så selvfølgelig, har vi chmod her. Referanser, hva dette refererer til er som gir vi disse tillatelsene til eller som vi tar disse tillatelser unna. Så vi har en her i tillatelsene, som vi har gitt deg chmod et pluss x, som vi får se snart. et betyr bare gi disse spesifikke tillatelser til alle. Gi dem til alle. Så du kan godt ha u pluss x eller g pluss x eller o pluss x eller flere derav. Slik at første del er alltid kommer til å være referanser. Hvem er vi gi disse tillatelsene til, eller som vi tar dem bort fra? [00:37:03] Den andre er operatør. Så dere har jobbet hovedsakelig med pluss. Dette gir tillatelser til hvem du gir dem, mens minus, logisk, fjerner dem. Så ingenting for forferdelig der. Og så moduser er hva vi snakket om med lesing, skriving, eller utføring. Så et pluss x betyr gi kjørbar tillatelser til alle. Og deretter, selvfølgelig, av hvilke bestemt fil eller katalog. OK? Alle bra med chmod? Ikke så ille? [00:37:37] OK, så HTML, noen av dere er gammel nok to-- MySpace alder? Jeg sendte dette til min seksjon, og bokstavelig talt halvparten av folk så på meg som om jeg var gal. Og jeg var som, folkens, vi er ikke så gammel. Kom igjen. Så Hypertext Markup Language, det er ærlig talt bare en måte for deg å vise visse ting på nettet. Så det er et kodespråk. Det er ikke et skriptspråk. Det er ingen logikk i det. Det er ganske enkelt å endre måten noe blir vist. OK, så det er en viktig skille å gjøre. Det er ansett som et kodespråk, ikke et skriptspråk. [00:38:12] Så her vi har våre HTML-koder. På dette lysbildet er trolig det meste av de som du bør være kjent med og være veldig komfortabel med. Så åpenbart, har vi vår HTML-kode, som angir at alt i mellom disse to vil være HTML. Vi har noen link, som åpenbart vil gi deg en link til en ekstern nettside. Noen tittel, innenfor vårt hode her. Og vi har vår kropp med h1, som er en overskrift, så det vil gjøre det fint og fet og større. Og så har vi noen p, som er et ledd. Du bør nok vite og bli kjent med ting som hvordan du setter inn et bilde, er det noen andre header klasser? Jeg ville definitivt være komfortabel med div. Så disse har de fleste av tags at du bør være kjent med. Men selvfølgelig, som med alt i CS 50, listen er ikke uttømmende. Så sørg for at du pusser opp på den. [00:39:08] CSS, så CSS, hvis noen av dere se min seminar fra to uker siden, er egentlig bare en måte å style din nettside? OK, så vi har litt kodespråk. HTML, som tar seg av akkurat den teksten og hvor det kan være på siden. Men CSS er egentlig det som gjør den pen. Du kunne ha disse i HTML filer, men som vi vil snakke om senere, Jeg er ganske sikker på at det kan være neste lysbilde, det er vanlig praksis, og faktisk praksis at vi virkelig oppmuntre, for deg å holde dem adskilt når vi snakke om MVC og at hele paradigmet. Det er egentlig det dette strømmer inn. [00:39:42] Så CSS er bare en måte å gjøre ting ser pen. De tingene her, som kropp og #title og .info, disse kalles velgere og hva de gjør er de velge bestemte ting i HTML-fil og gjelder uansett stil, hva slags ting som du ønsker, for det bestemte element av web siden. Så her har vi en bakgrunnsfarge og fargen og en font familie det er å være påført på det som er i kroppen. Så hvis vi så tilbake her, det ville ikke gjelde for tittelen. Det ville bare gjelde for det som er i disse kroppen velgere, OK? [00:40:22] Med tittelen her, er dette kommer til å være det samme, fargen på teksten være blå er bare kommer å påvirke hva som er innenfor tittelen velgere. Samt info her, teksten vil være rosa, hva er info, som er rett her. Så det eneste som ville være rosa på denne siden er dato, mandag 17 november 2014. OK, så CSS er bare en måte å har mer kontroll over-- ja? [00:40:48] PUBLIKUM: Hvorfor har dere å bruke hasj med tittelen? [00:40:51] HANNAH: Neste bilde, lover! Vi vil komme dit. Så dette er grunnen til at vi må bruke hasj. Så velgere ta på tre hoved skjemaer som vi snakker med dere om. Jeg fyou ønsker å lære mer, det er mange der ute. Det er flott CSS dokumentasjon. Det er et kodenavn, som har å gjøre med bare din vanlige tagger i HTML. Så h1, p, div, h2, disse slags ting. Og vi kan bare nevne de som er. Så som vi ser her med kroppen, er det en normal tag. Så vi kan bare sette kroppen når vi snakker i vår CSS-fil. [00:41:26] Med tittel, hele grunnen til at vi har denne hash er har vi det er ansett som et ID. Så en ID skal alltid være unikt innenfor HTML-siden slik at når du er henvise til det, du vet at du bare henviser til en bestemt ting. Så i dette tilfellet her, med vår h1 her, CS 50 gjennomgang sesjon, vi har en id av tittelen. Så for å bare henvise til at del av vår HTML, gjør vi en hash tittel. Bare ved konvensjonen, er IDer utpekt med en hash foran dem. På samme måte ser vi info her er en klasse. Og så klasse med CSS er utpekt som en prikk klasse eller dot hva den klassen er. Så i dette tilfellet her, det er info. [00:42:10] Så jeg tar det tilbake. Begge disse vil bli rosa for vår CSS her fordi de begge har en klasse for info. Og i vår CSS-filen, har vi utpekt Alt som en klasse for info skal være rosa. Betyr det fornuftig? Ja? [00:42:27] PUBLIKUM: Hvis du skulle gjøre alt i legemet hvitt, og deretter prøver å gjøre noe inni den blå, ville det føre til problemer? [00:42:34] HANNAH: Så CSS er Cascading Style Sheets. Så uansett hva er mot bunnen vil ha forrang. Så hvis du gjør noe med kroppen, og du gjør alt hvitt, og deretter senere du endre tittelen eller du endre teksten i kroppen, det overskriver det. Så noe mot bunnen vil ha forrang. Ja? [00:42:56] Målgruppe: Og IDer er unike, men klasser kan være mer? HANNAH: Høyre. Så IDer skal være unike, og klasser kan referere til så mange ting som du ønsker. Andre spørsmål? Ja. [00:43:09] PUBLIKUM: [uhørlig]. Jeg lurer på om som gjør en forskjell. HANNAH: Jeg beklager, hva var spørsmålet? PUBLIKUM: Det er liten "F" og kapital "F." HANNAH: Så forskjellen mellom liten "f" og kapital "F" bør ikke gjøre en forskjell. Så "f" vil være 15 uansett. Cool, noe annet? Alle gode, CSS? Ja? [00:43:30] PUBLIKUM: Sorry. Kan du ha en klasse og en ID? [00:43:35] HANNAH: Ja, det kan du. Ting kan ha både en klasse og en ID. Og jeg anbefaler teste disse på egen hånd. CSS du vil lære best bare ved å gjøre noe, veldig enkel nettside, tegne opp noen CSS, og bare se hvordan de samhandler. Og du vil få en meget god, intuitiv sans for hvordan det fungerer. [00:43:56] OK, alle bra med CSS? Du kommer alle til å gjøre vakre nettsteder med CSS bedriften. OK, beste praksis, bare ting å huske på, ting at-- dette er grunnen til at vi forankre du for designer og whatnot. Så lukke alle HTML-koder. Så hvis du har en åpen kropp, Det bør være et tett legeme. Hvis du har et åpent ledd, Det bør være en nær ledd. Sjekk for å se siden din validerer. Dere bør være veldig kjent med dette fra p-set sju med CS 50 finans med W3 validator. Og som jeg sa tidligere, en av våre store paradigmer er å skille din stil med CSS fra din markup, som er HTML. Og så, selvfølgelig, har vi denne store XKCD ned her. Yay, comic relief! [00:44:38] OK, TCP / IP. Mellom disse og HTTP, utgangspunktet de er begge protokollene. Så du kan bare tenke av dem som et sett av regler som regulerer hvordan ting bevege seg over internett. Så overføring kontroll protokollen, eller Internett-protokollen, er bare en måte å sørge for at at data blir hvor det kommer og at vi vet om vi stadig mangler data. Så hvis dere tenker tilbake til foredrag et par uker siden med David hvor vi hadde fire konvolutter, de ble alle sammen som en av fire, to av fire, tre av fire, fire av fire, dette er bare et sett med regler. Vi sa: OK, når vi er sending av mer enn én pakke, vi kommer til å nummerere det med hvilket nummer det er og hvor mange som totalt brukeren skal få. [00:45:19] Og dette er bare å fortelle hvem mottar data om de har fått alt eller hvis noe har gått tapt på veien. Og de trenger å be om det igjen. Dette er egentlig bare et sett med regler. Det er hvordan du kan tenke på det, OK? Og også, angir den port, som dere can-- jeg vet under forelesning, de hadde en hel liste over porter. Men vi ikke har dem her akkurat nå. [00:45:41] Så Hypertext Transfer Protocol er, igjen, det er en annen protokoll. Så det er et annet sett med regler som styrer, i dette tilfellet hvordan hypertekst er overført. Så det bare tillater nettlesere å snakke med webservere. Og som vi sa her, er det som menneskelig håndtrykk. Det er bare en måte å styre hvordan webserveren er kommer til å samhandle med nettleseren din. Og vi har bare et par eksempler. Vi har noen forespørsler her hvor GET er metoden. Vi har HTTP 1.1, som er protokoll versjon for oss. Og deretter, som er vert, hvilke vi faktisk prøver å få tilgang. Og så, som du ser her, vi få litt respons med denne 200 OK som vår HTTP respons kode. Vi har en stor liste jeg kommer å trekke opp i ett sekund at dere bør være kjent med. Og vi har denne innholdstypen tekst / HTML, som bare sier hva slags data vi mottar fra serveren, OK? Dette vert og denne innholdstype er en del av HTTP-hodene. Du kan ha så få eller så lite som nødvendig for rammen av hva du arbeider med. Noen ganger vil du ha mye informasjon som kommer fra serveren. Kanskje de ber om mye av informasjon fra brukeren. Det varierer avhengig av sammenhengen. Hvis du ser på CS 50 Study, det er mye mer på det. Men vi har mye å få gjennom, så jeg kommer å gå rett fram hvis det er OK med dere? Cool. Hold på. Jeg har definitivt at hel liste of-- he! Jeg vet ikke hvorfor dette er hele veien over her. Jeg trodde jeg bokstavelig talt flyttet det mens jeg var sitting-- [00:47:15] DAVIN: du vil Må lære det? Eller ønsker du meg til å lære det? [00:47:17] PUBLIKUM: Jeg trodde vi kunne bare vise dem til å begynne med. Jeg mener, du kan gå inn dem videre, men jeg trodde det gjort mer fornuftig siden jeg ble bare snakker om HTTP-statuser. Så her er hele listen. Jeg antar det kommer til å skje er Davin kommer til å gå inn i dem senere. Men det er en hel liste, en forhåndsvisning av smak som kommer. OK, vi skal til blow-- dette kommer å være en PHP lynkurs som ingen andre. [00:47:41] Så PHP, Hypertext Preprocessor, det er en rekursiv backronym, noe som betyr at det het noe annet. Og da de var som dette ikke virkelig fornuftig. Slik at de bare kalt it-- og det var et akronym, slik at de bare gjorde det PHP Hypertext Preprocessor, som bare gir ingen mening. Morsom historie. Det er et programmeringsspråk. Så så mye som jeg understreke at HTML er ikke et programmeringsspråk, det er et kodespråk, PHP er et programmeringsspråk. Hvordan du vet at dette er fordi det er logisk. Det er conditionals. Vi har variabler, mens vi har ingen av disse tingene i HTML. [00:48:12] Greit, da vi har denne lille litt her som er som en smak av PHP. Så grunnleggende, variabelnavn starter med et dollartegn. Masse folk liker det. Minner av oss penger. Det er flott. Vi ønsker alle PHP. Så vi ikke spesifiserer en variabelens type lenger. Det er bestemt under kjøring. Tolken skal være like, oh, vil vi bare kjøre gjennom, og basert på konteksten, Vi får se hva typer typene disse variablene må ha. Det er ingen hovedfunksjon. Ting vil bare kjøre. Dere med import i din siste p-set, vil du legge merke til dette. Det var egentlig ikke en hovedfunksjon. Du bare skrev hva du ønsket å skje. Og det bare slags skjedde. Så det er PHP for deg. [00:48:56] Arrays er svært like. Vi har fortsatt denne braketten. Her har vi noen variable kalt arr, og det er lik to-- vi har vår normale brakett notasjon. Og vi har noen nøkkelverdien. Og den store forskjellen mellom C og PHP arrays er at vi kan ha dette associate-- vi kan knytte verdier til nøkler. Så i stedet for bare å ha en matrise som er indeksert ved antallet eller stillingen av dette element i matrisen, vi kan faktisk forbinder det med en nøkkel. Hvor vi kan si, OK, jeg vil uansett Verdien er forbundet med frukt. Og kanskje vi har frukt gikk til banan. Så det ville tilbake banan til oss. [00:49:41] Men i utgangspunktet, den mest mektig ting om dette er at hvis dere husker demo fra forelesning der vi i utgangspunktet omskrev stavekontrollen i PHP, og det var-- lookup var egentlig bare liker, eksisterer denne nøkkelen? Det er veldig snilt av kraften i det. Du trenger ikke å iterere gjennom array. Du trenger ikke å vite hva plass det er i. Det kan være på slutten eller begynnelsen. Så lenge du vet nøkkelen som er knyttet til verdien, PHP kan bare spytte at verdien rett ut igjen på deg, OK? [00:50:09] Og da har vi også bare har bare fordi vi kan ha viktige verdi-par betyr ikke at du må. Du kan også bare lage en normal utvalg som her, på bunnen, hvor den er bare en, to, tre, fire. De er våre verdier. Og faktisk, sine nøkler er indeksene. Så nøkkelen for en ville være null. Nøkkelen for to ville være ett. Så videre og så videre, med mindre du eksplisitt tildele en nøkkel, man kunne anta at den Verdien er bare deres indeks. Betyr det fornuftig for alle? Ingen spørsmål? Awesome. [00:50:38] OK, er foreach en måte å iterere gjennom arrays. Så vi har noe her, bare den generelle struktur. Så foreach, navnet på vår array, som uansett du ønsker å ringe hverandre element i array, og vi kan gjøre noe med at elementet eller med denne verdi. Så vi har et eksempel her. Vi har en assosiativ array med disse to oppføringer med bar å bli assosiert med foo og qux bli assosiert med baz. Så tastene er foo og baz. Verdier er bar og qux. Så foreach, har vi vår matrise her, som nøkkelen verdi par. Dette gir oss muligheten til å få tilgang både nøkkelen og verdi. Kanskje du bare vil ha den verdi, i hvilket tilfelle du kan bare gjøre som arr som $ verdi, og deretter du er bare å gå inn på verdien som du iterere gjennom. Men kanskje, for noen Derfor ønsker deg nøkkelen, som er grunnen til at jeg valgte dette eksempelet i stedet. Så du kan faktisk manipulere nøkkel og verdi i dette tilfellet. OK? Spørsmål? [00:51:41] PUBLIKUM: Hvis du ønsket å bare manipulere nøkkelen, vil du trenger å gjøre foreach-- [00:51:45] ALISON: Høyre. Så hvis du ønsket å manipulere bare nøkkelen, ville du fortsatt trenger dette syntaks fordi hvis du bare har arr som noe, som en ting, er det skal anta at du vil verdien, ikke nøkkelen. Så hvis du noen gang bare ha akkurat som arr som, kanskje dette er som $ element, det kommer til å anta at du spør for bare den verdi ved hvert punkt. Hvis du eksplisitt ønsker å gjøre noe med nøkkelen, selv om du ikke kommer til gjøre noe med verdien, du trenger denne strukturen som vi har her hvor du eksplisitt ber for både nøkkelen og verdien. Stort spørsmål. Noe annet? Cool. [00:52:27] All right, PHP og HTML. Åh, vi er tilbake til p-set sju igjen. Så dette bør se litt kjent. Så dette er noen enkel HTML-skjema som har noen innspill navn hei. Og vi ser vi har vår metode for GET. Og hvis vi husker fra vår p-set, når dette skjemaet er sendt, det sender et array kalt $ _GET som har alle disse innganger eller variabler fra skjemaet som skal være manipulert i vår PHP. Så i dette tilfellet, brukeren ville sette i deres navn. De sender det. Og vi ser at vi får noen utvalg her. Vi har vår GET array. Og vi har tilgang til navn. [00:53:11] Slik som sier, OK, gi meg verdi som er forbundet med navn, navngi være nøkkelen her. Og det er direkte tilordnet hva vi sa våre innspill navn er. Så dette var å gi deg nøkkelen til hva kommer til å være i ditt utvalg her. Betyr det fornuftig for alle? Ja? [00:53:32] PUBLIKUM: Sier navnet i GET referere til den lilla linjen i [uhørbart]? [00:53:36] ALISON: Det refererer til dette her. Så dette feltet akkurat her, det refererer til dette navnet her. Så dette kunne ha blitt navngitt som telefonnummer, eller hva. Dette navnet faktisk sier, hva ringer du dette feltet? Hvordan har du tenkt å referere til dette feltet? Og dette navnet er faktisk liker, vi er sier dette feltet kalles navn. Det er hvordan vi skal få tilgang til det. [00:53:59] PUBLIKUM: Så er det lyst, innspill navn lik Bob, og-- [00:54:02] ALISON: Høyre, så du ville få Bob der nede. Nøyaktig. Alle kule? All right, så GET versus POST, disse er de to hovedmåter at vi passerer data i en HTTP-forespørsel. Dere skulle ha sett begge disse forhåpentligvis. Så med GET, informasjonen er gått gjennom URL. Så hvis du noen gang gjør Google søk, YouTube, vil du sannsynligvis merke noen spørsmålstegn. Og så, alle ordene at du bare satt der. Og POST sender dataene i HTTP meldingsteksten. Så i motsetning til GET, du slags vurdere at dataene er skjult for brukeren. Men hva er egentlig viktig å forstå er at dette er fortsatt like usikkert som GET. Analogien jeg liker å bruke er hvis du har din bankkontonummer og du skriver det på utsiden av en konvolutt, det er ganske usikkert. Hvis du skulle skrive det på et stykke papir og legg det inn i konvolutten, det er fortsatt veldig usikre fordi alt du trenger å gjøre er å åpne den opp og se på det faktiske innholdet Meldingen kan å se det. Så dette er "skjult", og folk liker å tror det er sikkert, men det er virkelig ikke. Og jeg er sikker på at Davin vil komme inn på det mer, kanskje. Men det er en viktig skille å gjøre og noe virkelig godt å forstå. [00:55:15] OK, SQL, Structured Query Language. Alle ting som vi har sett så nylig! Så det er i utgangspunktet bare designet, selvsagt, for datahåndtering. Dere hadde mye erfaring med dette i tabellene med PHP MyAdmin. Og det er fire vanlige spørsmål at vi ønsker dere å vite. Så det er oppdatering, sette inn, velge og slette. Så sørg for at du vet de virkelig godt. Vi kommer til å gå gjennom dem veldig fort. [00:55:40] Så oppdatere, egentlig, som hva du kanskje tror det gjør, det bare oppdaterer data i databasen. Så vi har noen eksempel her. Dette er det generelle Strukturen av en oppdatering spørring. Så vi oppdatere tabellen at vi snakker om. Og vi ønsker å sette visse verdier, bestemte kolonner lik bestemte verdier. Så dette oppdaterer bare tabellen, endre verdier i alle radene i dette tilfellet. Så i dette ned her, en faktisk Eksempelvis har vi insert-- beklager. Dette lysbildet avanserte uten meg å realisere den. [00:56:17] Så dette oppdateringer bord satt col1 lik å VAL1 hvor huset er lik "Currier." Hva dette gjør er det bare endringer, bare det oppdaterer disse verdiene i bestemte steder. Så i denne første, endrer det disse verdier for alt i tabellen, OK? Det kommer til å endre dette kolonnen for hver enkelt oppføring, for hver enkelt rad. Men dette der, kunne du Tenk på det som en kvalifiseringskamp. Så det er bare kommer til å endre det i svært spesielle steder. Så i p-set sju, når du kanskje oppdatert mengden av kontanter at brukeren hadde, har du sannsynligvis hatt noen der ID lik session ID, ikke sant? [00:56:53] Fordi du ikke ønsker å endre mengden av kontanter for hver person som var å bruke ditt nettsted. Du ønsket å endre det for ett bestemt person, at personen som blir den som var å bruke det på den tiden. Høyre? OK, så sette inn, sette inn visse verdier i tabeller. Dette er som når du er å skape en helt ny bruker. Den generelle strukturen her er å sette inn i hva tabellen vi snakker om. Verdier, blir de verdiene som vi faktisk ønsker å sette inn. OK, slik som vi ser her, vi har sett den inn i tabellen. Dette er spesifikke kolonner med sine korresponderte verdier. Så dette sier, sette inn en ny rad innehold verdier VAL1 og val2 henhold disse spesifikke kolonner. [00:57:33] Så kanskje du bare ønsker å fylle ut halvparten av tingene i denne raden. Det er det denne delen her lar deg gjøre. Den lar deg faktisk bestemme hvilken del. Ja? [00:57:44] PUBLIKUM: Kan du bare [uhørbart] celler i raden [uhørbart]? [00:57:52] ALISON: Hvis du bare fylle ut visse deler av raden din, resten av disse cellene er bare tom. Så lenge du lar dem være tom, det er ikke et problem. Hvis du prøver å få tilgang til dem, er det kommer til å returnere noen tomt element. Men det er viktig å vite at i enkelte tabeller, de har for å få lov til å være null. Du kan ha kjørt inn i en problem under p-settet fordi vi ikke la noen av dine verdier være null. Men du kan angi en valgfri verdi i tabellen. [00:58:26] OK, velger, så dette er bare en måte å få spesifikke data fra en tabell på noen identifikator som du ønsker. Så velger stjernen fra bordet der col tilsvarer noe bare betyr, gi meg alle data knyttet hvor denne konkrete kolonnen er sant. Så stjernen i dette tilfellet vil returnere hele raden til deg, OK? [00:58:49] Og så, i dette tilfellet velger stjerne fra Tabellen bare gir deg hele tabellen. Og så, slette selvsagt, det bare sletter rad fra tabellen. Så slette fra tabellen, hva tabellen vi er refererer, hvor noen spesifikke identifikator eller noen betingelse er sann. Ja? [00:59:07] PUBLIKUM: Spørsmål. Hvorfor bruker du dobbelt sitater, og om du gjøre doble anførselstegn eller singel sitater, gjør det en forskjell? [00:59:13] ALISON: Doble sitater eller apostrof gjør ikke en forskjell i SQL. Jeg trodde jeg så et annet spørsmål. Ja? [00:59:20] PUBLIKUM: Betyr ikke det påvirke hva blir rømt fra spørringen? [00:59:25] ALISON: Rob? [00:59:27] ROB: Hva mener du med rømt fra spørringen? [00:59:31] PUBLIKUM: Hvis noen har en enkelt spørring i form of-- [00:59:36] ROB: Hvis noen skulle sette en eneste sitat i, deretter så lenge du desinfiserende dine innspill, så det spiller ingen rolle. Men hvis du bruker en enkelt sitat og du er feil rømmer dataen så ja, de trenger å sette et enkelt sitat for å bryte koden din. hvis du bruker doble anførselstegn, de trenger for å sette en dobbel sitere å bryte koden din. Men så lenge du unnslippe ting riktig, spiller det ingen rolle. Det er bare kommer til å bli oversatt til det riktige symbol allikevel. [00:59:59] PUBLIKUM: Hva betyr flukt? ALISON: Vel, som desinfiserende og rømning. Eksamen som vi har, den store XKCD komisk at de trekker opp der du har, oh-- ROB: Det er det siste lysbildet. ALISON: Det er det siste lysbildet, egentlig? Oh my god. Det vi går, perfekt. OK, så i utgangspunktet, kan du injiserer noe inn i denne SQL-spørring hvor det bryter din kode, eller som David viste i klassen, hvis vi har noen enkelt quote en lik 1 og hvis i vår kode, vi bare kopiere det inn, og vi har en avslutning enkelt sitat, hva som skjer er vi får noen uttrykk som evalueres til sann som vil la noen gå inn vår database og få data som vi ikke vil at de skal få. Så desinfiserende inngangene bare betyr å sørge for at vi rømmer disse tegn og betegner dem som tegn og ikke ting som bør tillates å bli tatt bokstavelig som vår SQL-setning. [01:01:04] Så det store ting som vi sa at dere skal bruke var HTML spesialtegn, som er noe som du kanskje ønsker å ta en titt på. OK, slette. Datatyper, vil alt dette være online. Siden vi har 15 minutter igjen, jeg er bare kommer til å gå rett gjennom dette. PHP og SQL, i utgangspunktet dette er bare vi hadde en spørring funksjon som bidratt til å beskytte mot disse ondsinnede angrep. Så når du bruker spørring, ble vi å sørge for at ting ble renovert og whatnot. [01:01:36] MVC er bare et design paradigme, slik modell, utsikt, controller. Det er bare en måte å holde ting fin og delt opp på samme måte at vi har en tendens til å faktor ut koden på funksjoner. Dette er bare et webdesign rammeverk som lar deg gjøre det samme. Jeg kommer til å hoppe over dette. [01:01:54] Dette er noe som jeg ville være super skjegg med. Det er et flott lite bord der. Det gir deg funksjonen eksempel på modellen. Jeg skal bare gjennom dette fordi jeg virkelig ønsker Davin å være i stand til å snakke. Hvis du har spørsmål, kan du gjerne. Jeg skal være her etter. Bare komme å snakke med meg. Med det har vi HTTP-statuser. Og Davin kommer til å blåse gjennom dette i 15 minutter. Dette kommer til å være stor. [01:02:17] DAVIN: OK. Uh, din mic? Yeah. Unnskyld. ALISON: måte å være forberedt. DAVIN: Nei, jeg er klar. Jeg er klar. La oss gjøre dette. Den er klar. OK. Unnskyld. Jeg sølte kaffe på meg selv. Jeg vet ikke om jeg er mer opprørt at jeg ser dum, eller at jeg ikke har kaffe lenger. Uansett, bare en rask kunngjøring om arket dere har. Så dette arket dere har er ikke den offisielle hva som skjer på quiz. Dette er den offisielle hva som skjer på quiz. Også, på nettsiden, forteller vi deg, OK, dette vil være på quiz. Så i den lille jukselappen du har, ikke offisielt. Og det er feil på den. Så best å ikke bare blindt bruke den. Så ja, det er det. Så la oss komme inn i denne virkelig rask. [01:03:05] Så HTTP statuser. Så hva skjer når den nettside, er alt i orden. Alt er OK. Alt kommer tilbake til deg slik du vil ha det til. Du får en 200 OK. 301, der har vi sett at 301 før? Vent, hva skjer? Unnskyld. Vi så jeg tinn foredrag under sikkerhet. Så i løpet av sikkerhet, så hvis David skrevet i http og så forsøkt å gå til cs50.net, du kommer til å se 301 flyttet. Hvorfor? Fordi det kommer til å omdirigere du automatisk til vår HTTPS. [01:03:35] Så 301 flyttet, bare det er utgangspunktet en omdirigering. Og du kan tenke på det som dette. Noen av statusene som starter med 2-tallet, de er like, OK, alt er OK. Noen av statusene som starter med tre, de er omdirigering. Statuser som starter med 4, det betyr det er en slags klient feil. Statuser som starter med 5, det er en slags server error. Så du slags bryte opp statusene sånn. Så 304 ikke modifiserte, så i din server.c p-sett, så la oss si at du lastet cat.html. Alt kommer tilbake, du får 200s, OK, stor. [01:04:03] La oss si du uthvilt det. Vel, innsiden som cat.html, har du en JPEG. Vel, er ikke at JPEG kommer til å få nytt. Du kommer ikke til å legge inn en annen GET forespørsel til serveren, og deretter få all denne informasjonen tilbake. Det kommer til å bare be-- at bildet er kommer til å bli lagret på din maskin. Og så at bildet vil være en 304. Så det er ikke blitt endret. Hvis du deretter lukke ut, klar cookies, og deretter oppdatere og prøver å laste den siden igjen, du kommer til å se 200s. Du kommer ikke til å se at 304. [01:04:28] 400, dårlig forespørsel, real rask, som om du skulle sende en JSON objekt til serveren og din JSON objekt var feil, vil du se noe sånt. 403, forbudt. Når ville du se en forbudt? Sannsynligvis Sannsynligvis? PUBLIKUM: Chmod. DAVIN: Chmod, ja. Så du har ikke satt tillatelser korrekt. 404, ikke funnet. Det er bare ikke der. Så hvis du skriver inn feil URL. 500, intern serverfeil, serveren sannsynligvis var ikke riktig konfigurert. Noe ikke på slutten, men noe på serversiden. Og 503? Mange mennesker så 503s i den siste p-set. Når skulle det skje? Jeg hørte hvisking. [01:05:05] PUBLIKUM: Når Google bestemmer du er en robot. DAVIN: Ja, da Google bestemmer du er en robot, du får 503s. Så det er en overbelastning. Hvis du har bedt om fra serveren for mye, det er vanligvis forbigående. Og de fleste av dere lagt merke til det. Så du så 503. Du har kanskje tatt litt pause, da de 503s gikk bort, og alt var bra. [01:05:20] Gabe: Ekte rask, da gjør dere få 500 i sannsynligvis dette siste oppgavesettet? Ja? [01:05:27] PUBLIKUM: Vanligvis hvis Serveren har en fil forlagt eller [uhørbart] deres maskin [uhørbart]. [01:05:34] Gabe: Så det kan være en konfigurasjon problemet i din PHP på serveren din. Men det kan være bare noe som et semikolon at din glemte. Hvis du skriver PHP, noen feil syntaks kanskje får du noe sånt. OK? [01:05:46] DAVIN: Cool. Vil du at jeg skal gjøre bare opp til AJAX? [01:05:51] Gabe: [uhørbart]. DAVIN: OK. Så hva er DOM? Hva betyr DOM står for? [01:05:55] PUBLIKUM: Document Object Model. DAVIN: Nice. Og hvorfor liker vi det? Awesome. Høyre, så det bare tillater oss å få tilgang HTML, tilgang til vår side svært raskt. Hvorfor? Fordi vi behandler våre side, behandle våre HTML-koder, behandling av alt som om de er stedene. Hvis vi behandle dem som de er objekter, så hva kan vi gjøre? Vel, vi kan kalle funksjoner på dem. Og dette er viktig hvorfor? Vel, fordi vi kommer til å bruke Javascript for å oppdatere vår HTML, oppdatere disse stedene. Så hvis vi behandler dem som objekter, vi kan da ringe funksjoner på dem. Jeg kommer til å komme inn i denne litt mer når jeg går inn i Javascript, men du har alle sett som document.getElementById. Så dokumentet er din element, få element av ID, så du kommer til å se for noen ID i en HTML-kode. Og så kan du gjøre noe annet til det. For eksempel slik document.body, så kan du legge barnet. Så du kommer til å finne dokumentet. Du har dokumentet. Du kommer til å finne kroppen. Du fant liket. Og så, du kommer til kalle noen funksjon på den. Så legge barnet, og du kan legge til noen HTML på enden inni kroppen din. Så i utgangspunktet, du er bare behandle det som et objekt. Du behandler HTML tagger som et objekt. Og det gjør det svært enkelt og raske til å gå gjennom dem. Men det kan du også å kalle funksjoner på dem slik at du kan manipulere og endre elementene. [01:07:04] Gabe: Gitt dette, hvorfor er Java slik en fin språk til å samhandle med HTML? Odds er, når folk velger språket for leseren, for klientsiden, Javascript er virkelig fin, det er virkelig god til å håndtere gjenstander. Og objektene er typen som objektene som vises i HTML, så det er veldig lett for Java å gjøre den slags håndtering. DAVIN: Nice. Så her er bare et eksempel. Så jeg tror på fjorårets quiz, eller kanskje to år siden, vi spurte du å lage et tre. Så dette er akkurat hva du vil gjøre. Så du starter ut med dokumentet. Og så har du i utgangspunktet bare se på kodene. Så hvis du ser, vi starte med en HTML-kode. Og så får du hint om hvordan til gjøre dette basert på innrykk. Så hodet slags grener av. Inne i hodet, har vi en annen tag for tittelen. Så da har vi en tittel tag. Og inni det, har vi noen streng. Og så vi representerer en streng i en sirkel. Og alle kodene er i firkanter. [01:07:54] Og hvis du ser, hvis vi tenke på dette som et tre, og la oss si at HTML er en forelder, så hode og kropp kommer til å være søsken. De er begge kommer til å være barn som forelder. Så fordi de er både søsken, de er kommer til å være litt ved siden av hverandre i treet vårt modell. Og så, du i utgangspunktet gjøre akkurat det samme. Så ikke vanskelig, men vi har bedt spørsmål som dette før på quiz. Gabe: Har noen har spørsmål så langt? Er det bra? DAVIN: Cool. Javascript, OK, godsakene. Så Javascript, hva er Javascript? Vel, er-- Java det er komplisert, men disse er noen av høydepunktene som du bør huske på. Først, det løst skrevet. Hva betyr det? Så PHP var-- ja, hva skjer? [01:08:35] PUBLIKUM: Du trenger ikke å eksplisitt oppgi hva slags variabel det er. DAVIN: Perfect. Så han sa at du ikke trenger å eksplisitt hvilken type variabel. Det er helt riktig. Så i C, hvis jeg hadde int i lik 50, deretter i PHP, er det akkurat som dette, $ i, tilsvarer 50. Så i Javascript, hva ville samtalen være? Var, ikke sant? Det ville være som Var jeg er lik 50. Men du trenger ikke å være aktig, OK, dette er en int. OK, dette er en streng. Du trenger ikke å gjøre det. Det er et tolket språk. Så hva betyr det? [01:09:04] PUBLIKUM: Ikke kompilert. [01:09:06] DAVIN: Hva betyr ikke kompilert bety? Yeah? [01:09:11] PUBLIKUM: Du trenger ikke å restrukturere koden for å få den klar for datamaskinen til å kjøre den. Det har bare tatt på tidspunktet for utførelse og datamaskinen [uhørbart]. DAVIN: Ja, så det kommer til å passere gjennom en tolk. Men du er helt riktig. Så du aldri kommer å kompilere det, ikke sant? Når du gjorde ditt PHP og Javascript-kode, du aldri kalt kompilere. Du aldri kalt noe sånt gjøre eller noe sånt. Det er fordi det er tolket. Så hver gang det går gjennom nettleseren, det går gjennom en tolk. Og det kommer til å tolke det bare i sanntid med en gang for deg. Så hva er noen positive og negative å ha et tolket språk og ha et kompilert språk? Så compiling-- ja, hva skjer? [01:09:50] PUBLIKUM: Tolket er tregere. DAVIN: I hvilken forstand? [01:09:57] PUBLIKUM: Etter at du har kompilere, trenger du ikke å gjøre noen ekstra skritt for å utføre det, mens dette [uhørbart]. [01:10:04] DAVIN: Høyre, perfekt. Så det du sier er i utgangspunktet at kompilering, når du kompilere, har du en Mange forhånd kostnader, ikke sant? Du kommer til å kompilere den. Men etter at du kompilere den, kompilatoren kommer til å optimalisere den. Det kommer til å være rask. Det kommer til utgangspunktet være så fort som det kan være. Med å tolke, du aldri har den upfront pris. Heller, det kommer til å være litt tregere hver eneste gang du tolke det. Og du er nødt til å tolke det hver eneste gang. Så i stedet for å ha denne én gang kostnader, nå er du nødt til å tolke det hver gang siden puss. [01:10:29] Så tolker er bra fordi du trenger ikke å kompilere den, men de er dårlig i at hver gang siden lastes, det er nødt til å tolke dette Script. Og det kommer til å kjøre litt saktere enn hvis du skulle kompilere den. Lar deg communicate-- oh, vent. Brukes til å manipulere innhold og utseende. Vi bare snakket om det. Den bruker DOM. AJAX, vil vi komme inn AJAX i en liten bit. Og så, det er klientsiden. Så PHP er server side. Javascript er klientsiden. Hva er positive til det? Det sier det. Det er raskere, ikke sant? Fordi du ikke har to-- det er raskere. Du trenger ikke å kommunisere med en annen enhet. Hvis du er bare på din klient, er du aldri nødt til å gå og se hva som er på serveren og deretter rapportere tilbake eller noe sånt. Så klientsiden har en tendens til være litt raskere. [01:11:15] Gabe: Ja, men dette betyr ikke at PHP er raskere enn Java eller noe av lignende. De kjører slags i samme fart fordi de er begge tolket språk. Det som er treg her er forespørselen. Så du faktisk kommer hele veien over til Brasil for å få litt informasjon som bor der. Men PHP og Javascript, de slags drives i samme hastighet. Det er ikke det at man er hurtigere enn den andre. Dette, også, lurespørsmål her. Så Java aldri blir maskinkode, sant eller usant? [01:11:47] PUBLIKUM: False. Gabe: False. Det må bli maskin kode fordi maskinkode er den eneste maskinen forstår. Selv om det ikke er utarbeidet, det fortsatt blir maskinkode fordi tolken er bare et program som går linje for linje og forvandler den linjen inn noe datamaskinen forstår. OK? Cool. [01:12:08] DAVIN: Her er bare en helt grunnleggende hello world Javascript-program. Så jeg vet ikke if-- du har sett dette. Men du må bare HTML her. Og i stedet for faktisk å sette Javascript i skriptkodene, så du vil normalt sette det i hodet. Du har skriptkodene. Du slippe den der. Alt vi har gjort her er vi har koblet in-- så vi har koblet i en Javascript-fil som dette. Og du har alle gjort dette, ikke sant? Så når du brukte jQuery og underscore.js i den siste p-set, du trenger ikke tonnevis med kode opp i skriptkodene, opp i hodet ditt. Du kan gjøre det, men i stedet du bare å koble den inn. Og dere henviser det i akkurat som du gjør med CSS. Så det bare gjør det lettere å lese så koden er ikke som 1000 linjer lang med tonnevis av funksjoner som du kan ikke bruke. [01:12:52] I stedet, du bare koble den inn. Det compartmentalizes det. Det er som å skrive noen header-fil, og da inkludert som header fil i C. Tenk på det akkurat som dette. Så hva betyr dette? Vel, dette kommer til å kjøre. Det kommer til å varsle. Så du kommer til å få litt dukke opp kalt hello world. Rask spørsmål, bare sunn fornuft sjekk, slik man ser her i kroppen, sier kroppen, HTML her. Hva kommer først? Må jeg se kroppen, HTML her, eller ser jeg varsel først? [01:13:19] PUBLIKUM: Alert. [01:13:20] DAVIN: Høyre. Han sier varsel. Hvorfor? [01:13:22] PUBLIKUM: Fordi du går fra topp til bunn. [01:13:24] DAVIN: Ja. Perfekt. Så han sier, du går fra topp til bunn, som er helt korrekt. Du kommer til å gå fra topp til bunn. Og i Javascript, jQuery, har du en funksjon som er som onload, eller klar, og som sier, OK, vent til alt dette HTML har lastet. Og så, kaller Javascript. Fordi vi ikke har det her, aller første som kommer til å skje er det kommer til å gå fra topp til bunn. Det kommer til å treffe som JS ringe, det kommer til å varsle. Etter at du klikker på OK, at varsling går unna. Så det kommer til å vise du kroppen HTML her. Nice. [01:13:54] OK, så bare virkelig rask, skriving i Javascript er super rask. For å erklære en variabel, ulike navn. Så i C, har du int i, du har å erklære hva slags type det er. PHP, $. Javascript, var. Vi snakket om dette. Greit, la oss gå. [01:14:11] Looper, samme ting. Samme. Funksjons erklæringer, så akkurat som du har sett i C. Eneste som er forskjellig er så når du komme til andre programmeringsspråk, som når du tar 51 neste semester og du gjør med Objective Caml, du kan håndtere anonyme funksjoner. Så det er akkurat hva du har her. Så du ønsker å sette i sum, en slags sumverdi. Men du kan bare gjøre det en gang. Så du ikke ønsker å kalle det funksjon sum, gi den en funksjon erklæring. I stedet, du bare bruke den som en anonym funksjon. Og du har sett dette mye. Du vil se et eksempel på dette i et par lysbilder. Ja, vi får se. Gabe: Godt spørsmål. Når kan det være lurt å bruke en anonym funksjon her? I utgangspunktet, når du vil ha noe, som en hendelse, til å skje. Så når musen er klikkes, f.eks du ønsker noen funksjon for å bli kalt. Så du passerer til arrangementet handler, passerer du til hendelsen, slag av den funksjon som du ønsker å bli kalt. Og hva du passerer er som, ved slutten av dagen, bare en peker til at undervisning, til funksjonen. Så det er ikke som du sender hele koden, like en peker til funksjonen. Og så, når noen klikker på mus, så den funksjonen blir kalt. [01:15:17] Davin: Arrays, slik at du har en rekke erklæring. Deretter til en matrise sette ting i. Virkelig rask, hva vil dette skrive ut? Hva vil det tredje elementet være? [01:15:31] PUBLIKUM: "JS". [01:15:32] DAVIN: Høyre, ville det være "JS". Vent, gå tilbake. Hvor lang? [01:15:37] PUBLIKUM: Tre. DAVIN: Tre, ikke sant? Nøyaktig hva du synes. OK, nå gå. Arrays, kan du legge ting til dem. Så du kan gå utover sine første grenser. Bare noe å huske på. PHP, Javascript, de er litt litt mer tilgivende i form av ting sånn. Objekter, veldig mye som structs i C, veldig mye som assosiative arrays i PHP. Dere har alle hatt erfaring med dette. Så JSON, når du passerer JSON frem og tilbake i p-set åtte, det er din objekt. [01:16:03] Så ja, eksempel, virkelig rask eksempel. Her er et objekt. Måten du refererer dette objekt, så bare virkelig rask, la oss si at jeg ønsket å finne ut, OK, hva er kurset? Og så objektnavnet her er CS50. Og så hvis jeg hadde en assosiativ array, hvordan skulle jeg gjøre det? Jeg skal bruke en nøkkel, ikke sant? Så jeg har navnet på tabellen. Jeg har brakett, sitater, nøkkel, end sitater, endebrakett, og som vil referere til at element inni mitt assosiativ array. Hvordan gjør jeg refererte Selvfølgelig inni mitt objekt? Noen som vet? [01:16:39] PUBLIKUM: [uhørlig]. [01:16:40] DAVIN: Hva skjer? PUBLIKUM: CS50.course. DAVIN: Høyre, ja. Så CS50.course. Slik at måten du refererer ting inne i en JSON objekt er med en prikk. [01:16:48] PUBLIKUM: Du kan også bruke array syntaks. [01:16:53] DAVIN: OK, greit. [01:16:54] Gabe: Du kan også bruke CS50 brakett, string, som anførselstegn. PUBLIKUM: Jeg tror det er identisk med PHP. Gabe: Det er det samme. DAVIN: Fine! Men du vil se denne andre steder. Ja, så holde det gående. Dette er hva jeg nettopp sa. Så inn i en Javascript jQuery eksempel. Så dette er min DOM, ikke sant? Virkelig rask, så jeg har en hode, hallo verden, kroppen. Jeg har en knapp. Det står "presse meg", så jeg ønsker å presse den. Og jeg ønsker å gjøre noe når det klikkes. Høyre, neste. [01:17:31] Høyre, så dette er min Script. Så jQuery er bare en enklere måte å skrive Javascript. Så dette, og hva jeg skal vise du neste, kommer til å være jQuery, er identiske. Slik at de vil gjøre de samme tingene. Bare jQuery har en tendens til å bli litt lettere. Folk har en tendens til å like det mer. Den har mye funksjonalitet. Slik at folk har en tendens til å bruke jQuery. Du alle brukt jQuery i den siste p-set. Så hva vil dette gjøre? Hva vil dette JavaScript-- så dette er bare ren Javascript. Hva vil dette gjøre? Hva vil det gjøre? [01:18:03] Så først, ser du vinduet onload. Høyre? Så fikk vi ikke se det før. Så dette kommer til å vente inntil hele vinduet belastninger. Så det kommer til å vente til HTML, alle bildene belastning før den gjør noe. Så la oss si vår DOM har lastet. Alt er der. Så hva kommer til å skje? Yeah? [01:18:19] PUBLIKUM: Button vises. [01:18:22] DAVIN: Knappen er allerede der. Ja, så knappens allerede der. Men dette kommer til å si, OK, hvis jeg klikker på knappen, så på knappen finnes allerede der, sånn HTML-kode. Vent, gå tilbake virkelig rask. Denne taggen akkurat her er kommer til å være en knapp allerede. Det er allerede en knapp. Men så, på Java tag, akkurat her, det sier, OK, jeg vil ha å få element av ID, så søk-knappen bare sier, OK, jeg vil ha å kartlegge denne variabelen til den knappen. Slik at variabelen er bare en enklere måte å få tilgang til den knappen. Og jeg sier, OK, hvis jeg klikker det knappen, så hvis jeg klikker som element, og dette elementet refererer til knappen, hvis jeg klikker på den, så jeg vil kalle en funksjon. Her er en av de anonyme funksjoner vi snakket om. [01:19:03] Bare ring noen funksjon. Innsiden som funksjon, i utgangspunktet noe vi har sett mye, våken. Du klikker på søkeknappen. Det kommer til å i utgangspunktet ha en knapp. Du klikker på det. Du får som varsler. X ut. Det var det. Yeah? [01:19:16] PUBLIKUM: Så hvis du putter skriptet [Uhørbart], script-koden i HTML? [01:19:21] DAVIN: Du kan sette skriptet tag rett i hodet fordi du har denne onload. Det er også at du har et klikk. Så det kommer til å vente til du klikker for noe. Men onload er bare for å være sikker, for å gjøre at alt lastes inn i HTML på forhånd. Yeah? Du ønsker å si noe? [01:19:40] Gabe: [uhørbart]. DAVIN: Yeah. [01:19:42] PUBLIKUM: Så onload unngår definere variabelen søk-knappen ved å bare si document.getElementById søkeknappen dot [uhørbart]. [01:19:49] DAVIN: Definitivt, men deretter strengen bare blir enorme. Akkurat, så dette er bare for å gjøre det enklere for deg, ja. Ja? [01:19:56] PUBLIKUM: Hvor gjorde vi skape window.onload? Eller document.ready? [01:19:58] DAVIN: Ja, det er. Ja, det er, sjekket jeg. [01:20:02] Gabe: Ikke for dem å bry seg om. [01:20:03] DAVIN: OK, så jeg kommer å fortelle deg uansett. Så i utgangspunktet, bare generelt, så window.onload venter til din DOM, alt HTML, laster. Den venter til din bilder belastning. Den venter til alt masse. document.ready, det bare venter til dine DOM laster. Når HTML er alle der, en gang din DOM er der, begynner å gå. Det er den eneste forskjellen. [01:20:23] Gabe: Hurtig tilregnelighet sjekk her. Så dette kan sees slags som en linje med kode, ikke sant? Fordi det er window.onload tilsvarer en haug med ting. Når Java leser dette, sant eller falsk, blir funksjonen utført. Falsk. OK? Hva skjer her, du er bare passerer denne funksjonen som en anonym funksjoner å window.onload. Og så når det kommer å faktisk bli henrettet? Når vindus belastninger. Det er en hendelse. Så det er jus t ting vi er snakket om tidligere, ikke sant? Så når hendelsen skjer, funksjonen skjer. Samme med onclick. [01:20:59] DAVIN: OK, så noen tok bort document.ready. Men dette vil være nøyaktig same-- PUBLIKUM: Dollartegnet, som er en document.ready. Det er en snarvei. [01:21:07] DAVIN: Å, er det? OK, så dette betyr document.ready, snarvei. Men dette er det samme som window.onload med unntak av den lille forskjell Jeg fortalte deg om. Og dette er jQuery. Så dette er nøyaktig samme thing-- dette er Script. Dette er just-- noen mennesker tenker på det som en mer lett vekt, slank versjon som har massevis av funksjonalitet at du vil sannsynligvis være å bruke. Så dette gjør akkurat det samme. [01:21:34] Så ting å slags påpeke. Så i den andre eksempel, vi hadde document.getElementById, så vi hadde dette lenge strengen som kommer til å få elementet av hva ID den har. Som er erstattet av denne samtalen her. Så du ser dollartegn, så ser du quote, hashtag. Hashtag er alltid en selektor. Den sier, OK, har dette å gjøre med en ID. Hva er velgeren for en klasse? [01:21:56] PUBLIKUM: Dot. [01:21:57] DAVIN: Dot, høyre. Hvis du bare skal til velg en tag, hva er det? Det er bare koden, akkurat. Og du kan bruke det her, også. [01:22:05] Gabe: Og etter tag, mener vi at div, for eksempel, eller hode. [01:22:08] DAVIN: Eller kroppen eller p eller noe sånt, ja. Så her, OK, i stedet for å si document.getElementById, dette er bare akkurat det samme. Bare i jQuery, er det kortere. Så det er enklere. Så da, ikke mer onclick, bare klikk. jQuery funksjon, kaller denne funksjonen. Alert er nøyaktig det samme. Så det er en liten bit mindre, eller litt kortere, litt bit-- folk tror det er litt lettere å skrive ut, litt enklere å forstå. Men dette er jQuery. Mange mennesker får litt litt forvirret og bekymret og de tror, ​​OK, jQuery er annerledes enn Script. Jeg må huske disse to forskjellige ting. Det er ikke. Jeg mener, det er annerledes syntaks. Men jQuery er Script. Det er bare en tilsynelatende bedre versjon som kan være lettere å forstå at folk bruker. Gabe: Ja, for å være ærlig, at dollartegn som du ser i jQuery, det er bare det navn på en funksjon som jQuery definerer. Det har ikke noe spesielt. Er Det er bare navnet på en funksjon, akkurat som du kan definere dollartegn. [01:23:03] DAVIN: Ja, så snakket om dette. Noen nyttige ting. Jeg var ser tilbake på de gamle spørrekonkurranser. I de siste par quizer, de har måtte bruke ting som dette. Så document.ready, så sørge for at alt er lastet før du begynner å gjøre ting. Velg en ID, eller velg en klasse, ville det bare være sitat dot noen klasse, sitat slutt. Send inn, så hvis du er sende inn et skjema og samtale denne funksjonen etter at skjemaet sender. Verdi, så la oss si at jeg hadde en form innsending, som brukernavn, e-post, uansett. Jeg hadde en tekstboks. Så jeg skriver inn at tekstboksen. Vel, hvis du ønsker å få verdien ut av at tekstboksen, bruker du dot val. Og så, her nede, dot HTML er den samme er som dokument dot getElementById dot innerhtml. Så det kommer til å gå tilbake du HTML fra at ID. Her, du bare bruke noen ID eller hva dot HTML. Som vil få HTML fra det elementet. Hvis du ønsket å endre deretter at HTML, kan du gi det noe. Så du ville være som dot HTML, og deretter innsiden, sitater, ny HTML eller noe. [01:24:05] Gabe: OK, så AJAX. Jeg liker å forstå AJAX veldig bra. Så jeg ønsker dere til forstå AJAX veldig bra. For hvis du gjør det, du er ganske mye som skjer å forstå alt som har å gjøre med HTTP, PHP, Java fordi det alt kommer sammen i AJAX. AJAX er ikke et språk. AJAX er en teknikk. Og den bruker mange ulike verktøy. AJAX står for asynkron Java XML. Så metoden, språk, data. [01:24:36] Så det viktigste språket som vi bruker i AJAX for å utløse alt og for å håndtere alt senere er Script. Det er derfor det er relatert svært nær Javascript. Og så asynkron er fordi vi ikke gjør det alt på en gang når vi legger i siden. Dette er ting som vi kan gjøre ting slags parallelt. Hovedideen bak AJAX er at du vil det å få noen spesifikk informasjon. For eksempel når du skriver ny brukernavn når du registrerer deg et brukernavn, mitt brukernavn er abc123. Og deretter, ved slutten av form, må du klikke på Send. Og det måtte gå til serveren, og deretter sjekke om i databasen, abc123 er allerede der. Og hvis det er der allerede, sier den: brukernavn allerede i databasen. Og de, må du fylle ut hele skjemaet på nytt. Og det var virkelig, virkelig ille. [01:25:23] Og da folk sier, OK, hvorfor kan ikke vi bare gjøre en liten HTTP-forespørsel til å bare sjekke for å se om denne brukeren er i databasen før brukeren måtte sende hele skjemaet? Så for eksempel når brukeren er ferdig å skrive abc123, la oss bare gå til serveren litt litt og bare få en ekte eller falsk fra serveren for å se om det er et gyldig brukernavn eller ikke. OK, så det er en av de viktigste bruker av AJAX i dag likevel. [01:25:49] DAVIN: Så virkelig rask, i en Ajax samtale i jQuery, du kan bety at du vil den skal være synkron. Du bør ikke gjøre dette. Men du kan gjøre det. Og hvis du gjorde det, hva ville skje? Vel, for eksempel når du er å få nyheter eller hva, Nettleseren din er bare kommer til å vente til at hele samtalen er ferdig stedet for å la deg gjøre andre ting riktig etter at du klikker på den. [01:26:14] Gabe: Det er ikke bestått lenger. Oh my god. Sorry! Yup. "I det siste, klient måtte forespørsel hele innholdet på en nettside. " Det var det jeg sa. Det tillater oss å sende ekstra GET eller POST forespørsler uten å ha å lesse nettleseren vår. Så på slutten av dagen, vi er faktisk gjør en HTTP-forespørsler her bruker Javascript. Fordi før, vi bare brukte Java å endre HTML som allerede kom. Og nå kan vi bruke den til grensesnitt med webserverne også. Måten dette skjer er at vi har klienten. Davin er en klient. Og han har all Javascript kjører fordi HTML er dumme. Javascript er smart. Så Davin Davin har sin smart del og hans dumme del. Han kommer til å bruke sin smart del nå. Han kommer til å bruke Javascript til forespørsel, for eksempel, om abc123 er i databasen eller ikke. [01:27:04] Så Davin, vær så snill, du bare send meg en HTTP-forespørsel. Takk. Så han bare sendte en HTTP-forespørsel. Du ser det? Og det er akkurat det samme måte at enhver HTTP-forespørsel er sendt. Leseren, Google Krom eller noe, er kommer til å se at Davin s prøver å sende en HTTP-forespørsel, kommer til å hjelpe hm litt. Og det kommer til å gå hele veien til serveren. Nå er serveren kommer til å ha PHP her, eller andre språk. Akkurat som i en vanlig HTTP-forespørsel. Det er ganske mye en normal HTTP-forespørsel. [01:27:31] Og så, serveren kommer til å si, OK, Davin vil at jeg skal sjekke om Dette abc123 er i databasen. Gå snakke med modellen. Modellen sier det er det ikke. abc123 er et godt brukernavn. Og da er webserveren skal bruke PHP til å gjengi noen form for fil. Det kan være bokstavelig talt bare en fil som inneholder "ja" i det, eller "nei, eller noe sånt. Det kan være en hvilken som helst fil. [01:27:54] Det kan være at jeg kommer til sende Davin et bilde av en and hvis det er i databasen og sende et bilde av 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 fikk en and. Og nå, som kommer å håndtere anda? Davin smarte del igjen, så Javascript, ikke sant? Java sendte forespørsel, og Java skal motta anmodningen og tolke det i en eller annen form. [01:28:22] Og i denne forstand, kommer det til å si, OK, hvis duck da er jeg god. Hvis hamster, så jeg kommer å si, nei, navn bruker allerede finnes i databasen. Men vanligvis, er du ikke kommer til å sende en and. Du kommer til å sende noe litt smartere. Og hva vi bruker er XML. Og mer nylig, bruker vi JSON. JSON er bare Java Object Notation, som er i utgangspunktet du får en Hele Javascript objekt. Og du putter den i en fil, akkurat som at CS50 objekt som dere så. Du setter den i en fil, og du sender det over til Davin. [01:28:53] Så i dette tilfellet, ville jeg lage en Javascript-objekt og bare si, bruker eksisterer, ja. Eller brukeren finnes, nei. Og sende den tilbake til ham. Og hvorfor JSON? Fordi personen hvem som mottar dette er kommer til å bruke Javascript å håndtere responsen. Og Javascript fungerer så bra fordi det heter Javascript Object Notation. Høyre? Så han kan bare ringe en funksjon og få denne fine objekt fra responsen. Og så, han kommer til å få vite om at brukeren er i databasen, eller ikke. [01:29:22] Så du ser, alt av det som kommer sammen i web-server, og så er det en HTTP til forespørsel og en HTTP respons og alt. Så sørg for at dere forstå dette AJAX samtale fordi det hjelper deg å forstå alt av konseptene vi snakker om. [01:29:37] Så her er et eksempel av AJAX med jQuery. Og her, vi gjør med komme JSON. Så vi ikke prøver å få en bilde av en katt her, eller en and. Vi prøver å få en JSON-fil. Og da vi vente til det er gjort, dot gjort. Det betyr at jeg venter på svar. Det kan ta en liten stund. Deretter ser du litt lasting. Hvis du ønsker å gjøre det i ditt nettsted. Så dot gjort, og deretter hva skjer når det er ferdig? Du passerer i en anonym funksjon, akkurat som vi har sett før. Fordi gjort er en hendelse, bare som å klikke en mus eller hva, for jQuery. Så du passerer i denne funksjonen med data, tekst, status, og jqXHR. Og innerst inne, at bare noen variabler som du kan bruke senere for å ha status for HTTP-forespørsel, dataene som det kommer å sende tilbake til deg. Så da kan du senere tolke det og gjøre noe meningsfylt med det. Og hvis det mislykkes, da kan det mislykkes? Vel, når det HTTP-forespørsel gir du en 500 eller noe sånt. Så, det kommer til å fortelle deg status, hva slags feil det var, og alle slags ting. Du må sørge for til å håndtere begge tilfeller ellers programmet går gale. [01:30:42] DAVIN: Så ja, dette er akkurat hva du så på den siste p-set. Selve AJAX samtale get JSON. Det vil si at anropet. Og så, er dot gjort som den sjekker om det er vellykket. Hvis det er vellykket, vil du for å gjøre noe med dataene. Du får tilbake fra det JSON forespørsel data. Det er hva du får tilbake. Så hvis du husker fra din p-set, mange av dere var som data braketten jeg eller hva, dot link eller tittel. Uansett kommer tilbake fra at JSON, uansett feltene er i den JSON objekt, det er hva du får tilbake. Data er hva du får tilbake. Tekst status, bare noe som gjør at du vet hva som skjedde. Og så, det er jqXHR, bare jQuery XML HTTP-forespørsel. Det er akkurat som et objekt. Og så mislykkes, akkurat som Gabe sa. Gabe: I vår lille eksempel på abc123 bare for å sjekke om det er i databasen eller ikke, dataene vil være noe du ville gjøre, hvis data dot brukernavn eksisterer, som er det din PHP generert for du, hvis data dot brukernavn finnes, så Jeg kommer til å varsle, bruker navnet finnes allerede. Else, jeg bare kommer til å la bruker fortsette å fylle ut skjemaet. OK, sikkerhet, kult. [01:31:50] DAVIN: Skal jeg? [01:31:52] Gabe: Jeg liker denne. Så noe som ser kjent ut. Vi er nesten ferdig. Så dette er bare et eksempel dere så i klassen. Du brukte argv1 her. Det er som en kommandolinje argument. Og vi mem kopiering som inn i en buffer av 12 størrelse. Hva er problemet her? Buffer overflow! Fordi vi har en buffer av størrelse 12. argv1 kan ha en størrelse på to milliarder. Vi gjør ikke noen grense sjekking. Så vi kan kopiere en mye minne. Og vi vil være spesielt dårlig om dette. Hva kan vi gjøre som er veldig, veldig mener i dette tilfellet? Ja? PUBLIKUM: En del av de to milliarder ting inneholder kjørbar kode som returnerer [Uhørbart]. Gabe: Nettopp. Så det er den type ting som folk bruker å jailbreak en iPhone, for eksempel. Så den slags ting. Fordi du kan bare gjøre enheten utføre noen kode som du liker. Reparasjonen, så reparasjonen er enkelt. Bare sjekk for grensene. Du sjekke for null fordi vi sjekker alltid for null når vi arbeider med strenger. Og så, du tar strenglengde før. Og hvis strengen Lengden er en gyldig streng lengde, som er innenfor 0- og 12, så vi er gode. [01:33:03] DAVIN: Hvis du ikke se etter null, virkelig rask, hva vil skje? Det vil SEG feil. Hvorfor vil det SEG feil? Fordi du ringer strlen på null. Gabe: Yeah. Sant eller usant, ved hjelp av én passord er en god idé. [01:33:19] PUBLIKUM: False. [01:33:20] Gabe: False. Bruke mange passord, og store, lange seg. Hengelås ikoner sikre sikkerheten. [01:33:26] PUBLIKUM: False. [01:33:27] Gabe: False. Det betyr ikke noe. Det er bare et ikon. SSL beskytter mot en Mannen i midten angrep. PUBLIKUM: False. Gabe: False. OK, så alle de som er falske. Nice. [Uhørbart] Lyst til å snakke om dette? Din tur. Davin: Typer av angrep, Mannen i midten. Hva er en mann i midten angrep? PUBLIKUM: [uhørlig]. DAVIN: Hvis du sender en HTTP forespørsel, kan de gjøre dette, ikke sant? Men hvis du sender HTTPS, de sannsynligvis ikke vil være i stand til å gjøre dette. Det er massevis av poeng sammen tilkoblingen. Du har rutere. Du har DNS-servere. Hvis noen er i stand til fysisk se hva du sender, slik at noen er i stand til å faktisk får mellom deg, klienten og serveren, og er i stand til å se hva du sender, dette er en mann i midten angrep. Så for å se hva du prøver å komme fra serveren, eller er i stand til å see-- verre, du kan være i stand til å se kapsler eller noe sånt. [01:34:16] Så for eksempel hvis du ikke bruker SSL, han kan være i stand til å se økten ID-informasjonskapsler. Og dette kalles session hijacking fordi han ser ID-cookies, og så er han i stand til å gå til det nettside og later til å være deg. Fordi akkurat som i PHP, husker når vi logget på, hva gjør vi? Vi setter session ID lik ID. Slik som identifiserer deg. Det er derfor du kan se din portefølje og ikke alle andres portefølje. [01:34:38] Vel, hvis jeg er i stand til å få denne informasjonskapselen, så kan jeg logge inn på den siden. Og så, jeg kan bare se tingene dine og begynne å kjøpe og selge ting. Så det er session kapring. Men du bør ikke være i stand to-- slik at du kan bruke mannen i midten angrep selv om de bruker SSL. Men du bør ikke være i stand til. Hvis de bruker SSL, du kan ikke session kapre. Hvorfor? Fordi det er alt kryptert, ikke sant? hvis det er kryptert, og jeg er fremdeles en mann i midten, jeg fortsatt få dataene. Det er greit. Men det er kryptert. Så jeg kan egentlig ikke bruke den. Så det er to. [01:35:09] Virkelig rask, cross site request forfalskning. Det er bare hvis det er en kobling og at koblingen gjør noe at du ikke tror det skal gjøre. Så for eksempel, hvis koblingen var kommer til å kjøpe aksjer eller selge aksjer, og du visste ikke det. Du klikket på linken, sendte en forespørsel, kjøpt eller solgt noe som du ikke mente å gjøre. Det er det. [01:35:25] Cross site scripting, så her, du sender inn via variabel q, stedet for å gå i en slags av verdi, er kanskje q som et navn. Så i stedet for å passere q equals Davin eller noe sånt, hvis du ikke bruker HTML spesielle tegn, hvis du rømmer ikke dette for å sikre at det er OK, så jeg kunne passere i stedet, la oss si i her sier jeg print eller noe sånt, så jeg kunne passere her et skript samtale. [01:35:51] Så, i stedet for bare å få en variabel, Jeg vil deretter utføre dette skriptet samtale. Så inne at skript ringe, hva gjør det? Dokument dot plassering, er at å gå til endre plasseringen av dokumentet. Så jeg kommer til å omdirigere til et annet sted. Det kalles bad guy i dette eksempelet, veldig bra. Kunne ikke tenke på ordet. Og så, hva er enda verre er at jeg kommer å så sette cookie, som er noen variabel jeg har i dette nettstedet. Jeg kommer til å sette den lik til dokumentet dot cookie. Derfor kommer jeg til å stjele din cookie. Og jeg kommer til å omdirigere litt informasjon til et nettsted at du ikke skal få tilgang til. Og alt dette skjer fordi du er ikke rømmer hva du har sett. Yeah? [01:36:29] PUBLIKUM: Så bare for å gjøre det klart, det er vulnerable.com at er utsatt for dette. Slik at koblingen kan vises på en gitt side. Noen klikker på den, går til vulnerable.com. Du har en cookie til vulnerable.com. La oss si at Facebook er sårbar, så facebook.com. Du har din Facebook cookie. Hva dette gjør, er du kommer til facebook.com, det umiddelbart omdirigere du å badguy.com, men inkludert din cookie-informasjon. Så det er en rask redirect, men din Facebook cookie er inkludert med at viderekobling, og det er hvordan de [uhørbart]. Gabe: Ja, det er noen veldig stygge ting at folk kan gjøre hvis det er dette. For eksempel, hvis Facebook tillatt alle å endre brukernavnet, og de gjorde ikke noe feilsjekkene, slik at du kunne sette inn en Javascript ting som endrer bildet ditt til en hamster. Og som setter inn den samme Java til alle som ser på siden din. Så alle som ser siden din har det samme i brukernavnet. Og fordi det er et virus, det sprer seg eksponentielt. DAVIN: Vi skal hoppe over den siste ett, og da vi er ferdige. Så dette er bare et eksempel. Så dette er de ikke rømmer sin SQL tabellen. Så du kan slippe den. Så du ønsker å unnslippe ting. Det var forrige eksempel med korset site scripting. Beklager vi kjørte litt sent. I morgen, beklager! I morgen har vi kontortid. Så kontortid i Cabbot 08:00 til 11:00. Kontorets åpningstider er strengt for spørsmålene.