JASON Hirschhorn: Välkommen, alla, till vecka 10. Det här är en spännande vecka eftersom imorgon är Quiz 1, som vi kommer att få i en sekund. Idag i avsnitt kommer vi att gå över vissa resurser för frågesport och då kommer jag att svara på alla och alla frågor ni har. Och vi kommer äntligen slut med några övningsproblem. Vi kan tillbringa hela avsnittet svara på frågor. Vi kan tillbringa hela avsnittet gå över övningsproblem. Vi kommer bara att expandera för att fylla utrymme och tid har vi. Så jag satte denna lista upp varje vecka, men det är särskilt viktigt här veckan. För att studera, om du inte började redan, oh boy. Men förhoppningsvis har du redan börjat. Och du går igenom det material och resurser som anges här. Jag skulle starkt rekommendera ett antal av dessa. Särskilt föreläsningsanteckningar är oerhört viktig och hjälpsam. Den study.cs50.net erbjuder en bra primer på en hel del de ämnen som vi täckte. Det har också några bra öva problem. Och sedan, är Google stor, också. Jag vet inte vad du skulle använda den till. Men använder Google, liksom. Nå ut till mig om du har några frågor, kommentarer eller funderingar. Titta över översyn session bilder från igår kväll. Eller, om du har tid, titta på videon. De ger en mycket bra material och information. Och försöka täcka om inte alla, många av de ämnen som vi har täckt och att du skulle kunna se på frågesporten. På tal om testet, att kommer att vara i morgon. Det är 75 minuter lång. Många av er tar det på 1 klockan, och en del av er är ta det på 5:30. För den tid du tar den och den plats du tar det, se till att du kolla in dokumentet på CS50.net hemsida. Kom ihåg att du kan få en 8 1/2 med 11 ark för att ta med dig. Ofta behöver man inte använda det här ark alls under testet. Men egentligen är det en otroligt hjälpsam studieverktyg. Så att sätta ihop detta blad är det som Jag tillbringade förmodligen tre eller fyra timmar gör när jag studerade för CS50, och det var lätt den mest användbara sätt jag kunde studera för testet. Så även om du har några andras studieguider för att titta på och använda som referenser, rekommenderar jag starkt göra din egen studiehandledning, sätta det där tillsammans. Det hjälper verkligen att du lär dig allt material. Sist men inte minst i detta avsnitt, Efter frågesporten i morgon finns det en mer lecture - nästa måndag. Det finns ytterligare en del, inte nästa Tisdag före Thanksgiving, men den Tisdag efter det. Vi kommer att träffa varandra för en sista goodbye party och även göra några häftiga saker för att få ni glada om fortsatta studier i datavetenskap. Det finns ytterligare ett projekt, en mer rättvisa, ytterligare en hackathon. Vi närmar oss slutet på CS50, vilket är spännande - men också, om du är som mig, lite sorgligt. Innan jag går vidare, är det någon som har några frågor om vad vi har täckt hittills? OK, bra låt oss gå igenom några frågor att du har för frågesport och ämnen vi kan täcka. Så det här är en lista som jag satt ihop. Det är på intet sätt uttömmande, utan förhoppningsvis kommer att friska upp minnet om du har några frågor om någon av dessa ämnen, eller om du har frågor om övningsproblem från frågesporter i år tidigare. Jag hade ett par frågor som var mailade till mig, men jag vill avvakta om de för en sekund. Är det någon som har några frågor, problem som de inte förstod, svar som de inte förstod att komma igång? Avi. PUBLIK: Kan du bara gå över DOM och Ajax riktigt snabbt? Liksom, vad vi behöver veta eller borde förstår om dem? JASON Hirschhorn: Jag kommer att svara på allmänhet frågan om, vad gör jag behöver veta om givet ämne x? Eftersom jag har en känsla av att många av er kommer att fråga mig det, eller är nyfiken på det. Så till den grad att ämnet var täckt av föreläsning, eller sektion, eller på study.cs50.net, ett problem set, du bör känna till det. Så du behöver inte veta alla typer av tagg som är tillgängliga i HTML eller varje typ av attribut eller egendom du kan ge något i CSS. Men om du såg den i en föreläsning exempel om du såg den i ett problem set, bör du nog känna med det, särskilt saker du såg på föreläsning. Så vi diskuterade dokumentet objektmodell lite i avsnitt, mer så i föreläsning. Du bör vara bekant med så mycket av det. Och du bör känna till Ajax i samma utsträckning. Vi såg aldrig oerhört avancerad eller komplicerade exempel på Ajax, så du kommer inte att bli ombedd att göra något oerhört komplicerat. Men du kan bli ombedd, hur gör jag göra ett Ajax samtal med jQuery? Vilket är något som du har sett ett antal gånger innan, både i granska session och i föredrag, och det är bara två-ish rader kod. Så det är något som du bör känna till. Men återigen, för alla dessa frågor, om du har sett det innan, är det rättvist spel. Och vi kan fråga dig - självklart, vi är kommer att fråga dig saker du inte har sett förut. Kodning något du har inte sett förut. Vilket inte är att säga att du har inte sett verktyg för att lösa detta problem tidigare. Du har sett dessa verktyg. Till exempel, på quiz 1, om du behöver för att koda strlen. Vi har inte kodat strlen innan. Men du vet hur man använder en for-loop, du vet hur man använder, om förhållanden. Du vet hur man skriver variabler i C. Det kommer att bli samma sak här. Du kommer inte att bli ombedd att göra något du inte har sett förut, men du kan bli ombedd att, liksom, sätta något tillsammans på ett nytt sätt, eller lösa en annan typ av problem. Förlåt, det var inte specifik för din fråga, men jag kan inte svara på om varje ämne vad du göra eller inte behöver veta. Men också, tyvärr, sista på det. Vi har spenderat betydligt mer tid på länklistor än vad vi har på Ajax. Du använde inte Ajax i ett problem set. Ett av de centrala inslagen i det Problemet satt det var länklistor. Och vi tillbringade mycket tid i föreläsning och avsnitt använder den. Så oddsen är länklista kommer att komma upp mer ofta på frågesport än Ajax vilja. Eller de frågor som har att göra med länk Listan kommer att vara värt mer poäng. Så kan du verkligen fokusera och smal in på saker som är mer sannolikt att komma upp eftersom vi har spenderade mer tid på dem. OK några andra frågor? Yeah. PUBLIK: Kan vi gå över användningen av anonyma funktioner i JavaScript? Jag är en är lite förvirrad om det. JASON Hirschhorn: Så i JavaScript - Jag försöker tänka på hur jag skulle kunna skriva detta på - så låt oss faktiskt öppna upp denna kod. Så detta är kod som vi gjorde förra veckan. Och du har sett det här förut, om du var här i avsnitt förra veckan. Eller du har sett något liknar detta tidigare. Men du kan titta på detta första raden. Detta är hur du börjar - alla har sett det här förut. Om du vill lägga lite JavaScript-kod, du lägga den inuti denna, förutsatt du använder jQuery. Detta säger, gör ingenting tills dokumentet är laddad. Och sedan, Curt, ser du här vi gör något sånt här - funktions öppna föräldra, stängd paren. Så vi ger det här fungera ett namn. Vi kommer inte att definiera denna funktion är tänkt att köra och sedan kalla det ett gäng gånger. Vi säger bara detta dokument redan tar en funktion. Ett par saker att göra. Och vi vill inte att spendera tid ge den ett namn eller spara den för evighet. Vi vill bara att köra vissa saker. Så en anonym funktion sorterar av tjänar detta syfte. När du inte ska använda något om och om igen, så att du inte behöver för att ge den ett namn - som du just vill använda den en gång - du skulle bara säga funktion, för Exempelvis, i det här fallet, och du är bara definierar något som kan du ge ett namn. Liksom, vi kunde dra denna funktion ut och ge den ett namn och sedan kalla det fungera här. Men vi behöver inte, eftersom vi inte vill slösa tid att ge den ett namn eller slösa något i vårt namn rymden. Och du ser att en hel del. Till exempel ser vi att en hel del i detta kod, men du har sett det här förut när du klickar på något - köra denna typ av kod. Vi skulle kunna definiera den kod som vi vill att köra när vi klickar på, i det här fallet, denna ID, som en separat funktion och sedan köra den funktionen. Men i det här fallet, vi bara hoppa det steget och flytta det till här och bara för att definiera allt som vi vill ska hända och inte ge den ett namn. Som fortfarande kan inte ha svarat på din fråga. PUBLIK: Nej, det gör det. Jag menar, jag antar att jag bara inte riktigt få varför det skulle vara en fungerar alls, dock. Därför att det är inte riktigt att kallas. Det har egentligen inte ett namn. JASON Hirschhorn: Det är en funktion i meningen att det är en serie av steg, som om du skulle sätta in en funktion. Och så det är därför vi kallar det anonym funktion. Vi kommer inte att ge den ett namn. Vi ska inte slösa försöka för att nämna det, men vi kunde. Anonyma funktioner du kan alltid ge ett namn. Så till exempel, den här koden här, vi kunde sätta denna kod i en funktion och sedan ringa denna funktion här. I stället säger vi, vi kommer inte att bry sig om det. Vi ska bara skriva det bra här. Det är som att ibland när du skriver en fyra slinga i C - ni har sett det här förut - kanske du är iterera genom ett forloop in i är lika med 0. Jag är mindre än strlen. Eller du går igenom några array, kan du spara array index i någon variabel. Och du använder den variabeln. Så du behöver inte skriva array fäste jag om och om och om igen. Och det är ungefär som en dummyvariabel. Det är inte serverar annat än mycket ändamål för att göra din kod lite renare och lättare att läsa. Liknande funktion här. Bara gör det lite lättare, men funktionellt är det ingen skillnad. Besvarar det din fråga? PUBLIK: Ja. JASON Hirschhorn: OK .. Mario? PUBLIK: I går de ofta sätter funktion parenteser händelse. Betyder det något? Eller är det för saker som att de skulle göra document.ready funktion händelse. JASON Hirschhorn: Vi har sett detta, och igen, det är mindre saker som förmodligen jag inte vill spenderar för mycket tid på. Därför att jag ibland inte vill att folk få utflippad att de inte hört talas om dessa saker så mycket. Men vi pratade lite om händelsehanterare. Så händer något, och sedan denna funktion utförs. Och sedan vill vi också veta några detaljer om vad hände i denna händelse. Så tänker tillbaka på problem set 4. Det är förmodligen det enklaste sättet att förstå att bryta ut. Det fanns lite kod - som en händelse skulle inträffa, men händelse kan betyda många saker. Om kan betyda musen klickas, den kan innebära att du träffa en piltangent, et cetera, et cetera. Men det är allt sparas i denna generiska som kallas händelser. Och då kan vi säga, är denna händelse denna sak? Eller är denna händelse den här saken? Eller, vad för slags hände med denna händelse? Så det är därför du skapar den variabeln där för att spara den extra information om exakt vad som hände den du kommer att vilja utnyttja i funktionen. Men återigen, det är förmodligen en av de mindre viktiga saker att vara super bekant med. OK, vilka andra frågor har människor hade, eller stötestenar som de har uppstod vid granskning? Vi kommer tillbaka till den listan. Hur är det under praktiska frågor, om människor har redan tagit dem? Vad fanns vissa problem som snubblade ni upp? Jag vet för ett faktum att förra årets frågesport var verkligen svårt. PUBLIK: Kan du förklara vad en SQL-injektion attack är? JASON Hirschhorn: OK, bra. Så vi pratade om det här lite. Det finns en föreläsning om säkerhet. Och återigen, som jag nämnde tidigare, detta är en åt sidan. Men du kommer att bli frustrerad på frågesport när du läser någon liten två poäng fråga, och du är som, när har jag någonsin lärt dig det? Alla dessa saker i dessa föreläsningar att du inte trodde att du behövde vet, eller du kan släta över eftersom de hade inte att göra med Problemet set, de kommer sannolikt komma upp igen på frågesport. Så, coola, roliga saker som du bara tänkte David berättade för dig att njuta, han berätta för dig att njuta och att du bara vara super entusiastiska över att lära sig allt det är att lära sig om datavetenskap. Dessa saker kommer också upp på frågesporter. Så, även dessa små saker som inte gjorde direkt relatera till ditt problem ställa, eftersom ni känner till från Quiz 0, antagligen kommer att komma upp. Och det här är ett bra exempel av något. Så en SQL-injektion attacker är när du få lite information från användaren och du vill infoga den i en tabell med en SQL INSERT-sats, men du inte sanera inmatning förväg. Så, självklart har vi sett SQL-satser. Jag ska bara öppna - kom igen - går vi till översynen - Jag tror, ​​som täckte det? Jag tror Samala gjorde. Så vi kan få - PUBLIK: Var hittade du den här? JASON Hirschhorn: Så om du går till CS50.net, frågesporter, och då kan rulla över och få diabilder från överläggningarna. Men du kan se det här är ett bra exempel av en SQL-injektion attack. Vi tar en del information från användaren och de ger oss en sträng, och sedan vi vill infoga den strängen i en databas. Generellt kommer vi att sanera det inmatning, vilket innebär att det inte finns några tecken som är farliga. Till exempel i SQL-strängar, dessa citat - apostrof eller citationstecken - betyda något. De menar avsluta denna sträng här. Och så om användaren ger dig en enda eller en dubbel citationstecken, kan de vara försöker resa upp din SQL-fråga och sätt in en del dåliga saker i den. Och om de gör det, kan de vinna kontroll av din databas eller göra något saker som du inte vill att de ska göra. Så det är därför när vi tar SQL frågor, sanera vi ingången innan sätta in den i databasen, vilket innebär att vi undkomma dessa tecken. Vi kommer att prata om det i en sekund. Men lång historia kort, en SQL-injektion attack är om du inte gör det - om du inte tar hand om den ingående de gav dig innan du lägger din databas, kan de, som du ser ner här, kör en fråga som, faktiskt - de sätter in sin kod här nere och detta väljer linje här nere kommer att välja allt från bordet, oavsett om vad lösenordet ges. Eftersom du har den eller 1 är lika med 1. Så det är i grund och botten, lång historia kort, ett sätt att ta över databasen. Frågan är då, för er, är var i p set 7 gjorde du desinficera alla ingångarna på dina SQL-frågor? Vart tog det steget hända? Var tror du förhindra SQL-injektion attacker från att hända i p set 7? Yeah. PUBLIK: Crypt? JASON Hirschhorn: Så det var inte krypta. Vi gjorde inte du gör detta för detta särskilt problem ställa, men det händer i frågefunktionen. Vi skrev faktiskt det åt dig, och vi tog hand om desinficerande ingångar för dig. Men i år tidigare, har eleverna haft att skriva ingångarna på egen hand. I p set 7, en hel del av er - låt mig öppna upp en annan fil. Så du kommer att märka dig här en hel del människor, i problem set 7, inte ringa denna funktion på strängar. Denna funktion, htmlspecialchars, igen - denna sträng kan ha vissa saker som i HTML betyda något annat. Som ett stag, en kvadrat eller en vinkel fäste betyda något i HTML. Och så om du skriver ut det till skärmen eller om du bara ta det och skriva ut det till din HTML, som kan gör något du inte förväntar dig. Så htmlspecialchars går över alla de tecken som har speciell möte och undgår dem. Så det blir utskriven som texten man vill se, i stället för skruva upp din HTML. Vi kallade den funktionen i rubriken. Och många människor har glömt att ring som funktion i kod du skrev. Så, till exempel, hade om ett aktienamn ett vinkelfäste i den och du har glömt att kalla denna funktion, den vinkeln fäste kunde ha kastat av vad HTML såg ut. Men att kalla denna funktion kommer undan att så det faktiskt skrivs ut som en vinkelfäste och inte kasta av din HTML-kod. Av samma anledning som vi har sett, ibland, snedstreck före citattecken i en printf linje eftersom vi inte vill att citationstecken ner på strängen. Vi vill skriva ut dem ut till skärmen. Så allt detta är samma idé. Besvarar det din fråga? PUBLIK: Kind of. JASON Hirschhorn: Har du har en uppföljning? PUBLIK: Jag antar att SQL-injektion attack har att göra med det? Jag förstår inte hur de två är relaterade. Varför skulle du göra det specialchars? JASON Hirschhorn: OK, så SQL injektion attack är när du injicerar några skadliga strängar i någons program, och de bara ta den och köra SQL-frågan med en sträng du gav dem. Som ni kan se här nere, att skulle kunna vara problematiskt. Så hur du förebygga mot det är du tar deras sträng som de ger du - så här sträng här - och du sanera det. Du fly alla de saker som är potentiellt problematiska. Så du behöver inte tolka dem som något som betyder något. Och ett exempel på det med HTML är denna funktion. Så det är samma idé här. Och jag bara visa er andra exempel på när du har sett den här idén tidigare. Att fly användarens input före utskrift ut den till en skärm eller tar den inne i en SQL-sats. Publik: Så i detta fall, kan användaren är jävlas med programmeraren. JASON Hirschhorn: Ja. Med alla dessa säkerhetsattacker, det är alltid generellt användaren, eller någon, försöker röra med dig, programmeraren. Och dessa finns sätt du kan förebygga mot dem. PUBLIK: Så jag har en fråga om hashfunktioner. I Quiz 1 från 2011, finns det två frågor om ensidiga hashar. Och jag undrar bara vad det innebar. JASON Hirschhorn: OK, vilken frågesport? 2011? PUBLIK: Ja. PUBLIK: Quiz 1? PUBLIK: [OHÖRBAR]. Det är som att hashing ett lösenord. Det är inte att sätta saker och ting - JASON Hirschhorn: Vilken sida var det? PUBLIK: Jag tror det var 9 eller 10, eller båda. JASON Hirschhorn: Okej, gå vidare, Curt. Du kan svara på när vi ser. PUBLIK: Jag tror det talar om hashing ett lösenord. Liksom, när någon kommer in ett lösenord, du förvandla den till en krypterad sak. Det är det lösenord hash, vilket är skiljer sig från en hash-funktion som sätter något i en hashtabell. JASON Hirschhorn: Låt oss se. Låt mig dra upp vad de ge som svaret. Och då ska vi gå igenom det. Så Curt gav ett bra exempel av en envägs hash. När vi har sett det här förut, vi ta lösenord och vrid - komma ihåg, i p set 7, någon kanske ha ett lösenord som bara lösenord, men då blir krypterad i några riktigt långa sak. Den envägshashvärde innebär att det är mycket lätt att gå från en väg till den andra, men det är mycket svårt att gå från den andra vägen tillbaka. Och så du vet, när du checkar människors lösenord i problem set 7, skulle du ta deras - så, till exempel, säger att de ville ändra sitt lösenord, ber du dem för deras gamla lösenord. Du tog sitt gamla lösenord. Du krypterat det. Och sedan jämförde två krypteringar snarare än unencrypting den ursprungliga en, för det är verkligen svårt att gå den vägen. Yeah. PUBLIK: Hur i djupet gör vår förståelse för TelNet vara? JASON Hirschhorn: Om det nämndes kort i föreläsning, bara en kort förståelse. Återigen tillbaka till svaret till avi-fråga - ju fler saker kommer upp, desto mer sannolikt det är att du måste vara super bekant med dem. Om de bara har kommit upp på föreläsning, det är bara ett ställe. Men om de kommer upp i föreläsning, avsnitt, och ett problem set, då du förmodligen att vara super bekant med dem. Så jag hade en fråga från tidigare om - är var hösten 2010 - Quiz 1, låt oss dra upp - denna fråga på stackar och köer, som vi tillbringar en hel del tid talar om i föredrag, även även om vi inte riktigt någonsin slå den i avsnitt. Så denna fråga är att ge dig en serie kommandon och frågar dig vad blir tryckt i det här fallet. Så det här är en helt rimlig fråga som kan ställas på dig killar, och då ni ska kunna svara på det. Så varför inte titta på det för 30 sekunder, och sedan om någon vill föreslå svaren på mig, och då vi kommer att gå igenom den. Okej, som har ett svar på fråga 27? Yeah. Publik: Är det 1, 2, 3, 3? JASON Hirschhorn: Det stämmer. 27 är 1, 2, 3, 3. Så låt oss titta på hur vi fick det. Först säger vi, om s är en kö, vad får skrivas ut? Så en q är först in, först ut. Vi har sett det förut. Vi såg bilden av folket väntar på Apple Butik för att köpa någon produkt. De första människorna i är de första människorna ut. De första sakerna i en kö är de första saker. Så om vi driva något i en kö, du trycker på 1, sedan pop vi 1. Pop betyder bara ta ut. I det här fallet, bara ta något. Vi tar ut den första sak, det är en 1. Så vi ska lägga saker vi skriva ner här borta. Detta är inte längre i vår kö. Då kan vi driva på en 2 och en 3, och vi poppar av första. Återigen, eftersom det är en kö. Så vi får en 2, så vi satte på en annan 3 och kalla pop igen. Vår 3 är först. Och sedan hade vi en hel massa annat och samtal pop. Men återigen, eftersom detta är en kö, först in, först ut. Vi tar ut det första som någonsin satt i. Det är vår 3. Och, i det här fallet, vi var inte orolig om alla dessa andra saker. Så det är om detta är en kö. Har du frågor om en kö? En stack är annorlunda. Vad är en förkortning som vi har för att förstå en skorsten? PUBLIK: Sist in, först ut. JASON Hirschhorn: LIFO, tror jag. Sist in, först ut. Så vi såg ett exempel på en stapel av brickor i en matsal. Oavsett vad facket är på topp raggas upp. Och sedan om nya brickor kommer in, får de sätta på toppen. Och sedan allt som är på top raggas upp. Så dessa brickor på undersidan kanske stanna där ett tag. I detta fall, återigen, vi ska dra ut det. Vi trycker på en, så man står först i tur. Och vi pop något av. Och det finns bara en sak där, så vi flyttar 1 här nere. Sedan vi satte på 2 och 3 och vi pop något av. Men återigen, eftersom detta är en kö - eller det är en stack, snarare - Vi tar allt var i sist. Vad som än är i sista kommer ut först. Och 3 är i sist. Så vi satte 3 där nere, då Vi satte på en annan 3 och vi pop något igen. Slutligen, vi sätter på 4, 5, 6 och 7, och här dyker vi. Och eftersom det är en bunt, vi tar allt sattes i sista och skriva det här nere. Så vi sluta med 1, 3, 3, 7. Är det någon som har några frågor om stackar och köer, eller detta exempel? OK. Låt oss gå tillbaka till listan med ämnen. Inte på det sättet, det här sättet. Vilka andra frågor har människor? PUBLIK: Jag vet inte hur viktigt detta är, men jag var förvirrad av skillnad mellan olika typer av språk som uppmärkning, som sammanställts, tolkas. JASON Hirschhorn: Det är en bra fråga. Jag tror att det är något viktigt, så låt oss gå över det snabbt. De stora språken som vi har sett hittills är C, PHP och JavaScript, när det gäller av programmeringsspråk. HTML, som du nämnde, är inte ett programmeringsspråk. Det är ett märkspråk. Och sedan har vi CSS, vilket också är inte ett programmeringsspråk. Vi har också sett SQL, vilket inte ett programmeringsspråk heller. Så SQL kan du skriva frågor till en databas. HTML är ett märkspråk. Den definierar hur saker är uppbyggda. Och CSS tillåter dig att styla saker. Det är förmodligen den omfattning för vad du behöver veta om dessa tre. Men det är mer intressant att figur ut skillnaderna mellan C, PHP, och JavaScript. Så en av de största skillnaderna, som du nämnde, är hur de är sammanställts, eller vad motsvarigheten är. Så C sammanställs. Vi skulle alltid köra en kompilator. Och sedan var är dina misstag när du kör C-kompilator? Var kommer det visa dig fel i koden? Hur vet du att det finns en fel i din kod i C? PUBLIK: Det visar i terminalen. JASON Hirschhorn: Det visar på terminal som du kompilerar. Och om det är fel, det kommer faktiskt inte kompilera det. Så du vet att det finns fel rätt bort, i förväg, innan du även köra din kod. Naturligtvis kan du köra din kod och får en segmentering fel, men det var förmodligen för att du gjorde några dumma logik sak. Men koden med tekniskt alla rätt och kunde springa. Så C-kod blir kompileras i förväg. Hur är PHP-kod? Var var fel i din PHP-kod? Hur visste du att du hade fel i din PHP-kod? PUBLIK: Kör tid? JASON Hirschhorn: Ja, när du skulle köra det, skulle du köra PHP-kod i ryggen. Och då skulle du visa en skärm. Du kan se en del saker på toppen, men då skulle du se, liksom, en del apelsin, fula bord. Och det skulle ge dig ett linjenummer och säg, bla, bla, bla, det här fungerade inte. Så PHP tolkas rad för rad och exekveras på servern. Och då resultatet är skickas över till dig. Bra. Kördes på servern rad för rad och sedan skickas till dig. Och om det finns ett fel, det ska skicka du felet, men du kan ha fått en del saker i förväg. Så en del av det kan ha fungerat, men senare, kanske vissa saker inte har inte fungerat. Hur är JavaScript? Var såg du JavaScript-fel? I p set 8, när du fick en fel, hur visste du? Var skulle det dyka upp? Publik: I konsolen vid bottnen. JASON Hirschhorn: I konsol, på botten. Det skulle också ge dig radnumret, och det skulle dyker upp på botten. Och Javascript var inte avrättades på servern. JavaScript lagras på användarens dator, och sedan när det var dags att köra JavaScript JavaScript var kör rad för rad på klient, på din sida. Inte servern, klientsidan. Och på samma sätt, var det kör rad för rad. Och sedan när du skulle få ett felmeddelande, det skulle dyka upp längst ner. På samma sätt som PHP, en del av det kan exekvera, och då kanske du får ett fel senare. Även en liten skillnad från PHP, om du fick ett JavaScript-fel - säga att du inte gjorde det rätta kod för en varningsruta - du kan hålla igång ditt program. Den varningsruta inte skulle fungera, men ditt program skulle vara bra. Bara kanske den funktionen skulle misslyckas. Så det finns några av de största skillnad när det gäller hur dessa språk, eller hur programmeringskoden du skriver faktiskt utvärderas. Det finns också andra skillnader i gäller - den största skillnaden vi har sett i termer av variabler på de olika språken. Så kan någon ge mig en skillnad mellan variabler på de tre språken? Ja. PUBLIK: I C, de är strikt skrivit. I de andra två, de är löst skrivit. JASON Hirschhorn: Och vad betyder det? PUBLIK: Att i C, måste du deklarera typ av variabeln när du deklarerar variabeln, liknande interbool eller röding. JASON Hirschhorn: Excellent. I C, alltid hade vi att sätta en typ av en variabel. Och vi kunde inte riktigt blanda typer. Du kan inte göra ett heltal plus en sträng. Men som vi har sett i dessa andra språk, du faktiskt kan blanda olika typer, och du aldrig riktigt har att ge något som en typ, någonsin. Så hur vet vi saker är variabler i PHP och Javascript? PUBLIK: I PHP, de börjar med ett dollartecken. I JavaScript, när du deklarerar dem, måste du ha en bar. JASON Hirschhorn: Höger. Så i PHP, de börjar med ett dollartecken. I JavaScript måste de ha bar, men ibland gör de faktiskt inte måste ha bar. Men det är rätt. Så det är en stor skillnad mellan variablerna. Jag tror att de är förmodligen, utanför toppen av mitt huvud, de två största skillnaderna mellan dessa tre språk. Men, ja. PUBLIK: Och omfattningen av C-variabler är begränsad till de klammerparenteser, där de andra, det är precis som, den dör om det är på bara en funktion, men annars Det är - JASON Hirschhorn: Höger. Så omfattning är något annorlunda i C. Som du kommer ihåg, klammerparenteser definierar räckvidden för variabler. Så om det definierades inuti en om tillstånd, som är inne i en for-loop, variabeln existerar bara där. I JavaScript, är om en variabel definierad inuti en om tillstånd - i en för loop - det ska finnas för denna funktion, men det kommer inte att föreligga utanför den funktionen. Så omfattning är lite mer flexibel i JavaScript och PHP. Att svara på frågan? OK, några andra frågor? Vi kan göra ytterligare fyra minuter av frågor, då vi ska hoppa in kodning. PUBLIK: Kan vi gå in i Ajax och tala om vad det är? JASON Hirschhorn: Prata med Avi efter. Han frågade den frågan tidigare. PUBLIK: Min dåliga. JASON Hirschhorn: Inga bekymmer. PUBLIK: Vad är JSON? JASON Hirschhorn: Vad är JSON? Vad är din fråga? PUBLIK: Bara riktigt snabbt, skillnaden mellan print och eko i PHP. JASON Hirschhorn: Varför inte du google skillnaden mellan tryck och eko? Liten skillnad. Inte så stor grej. Men du bör definitivt google det, och som ger dig ett bra svar. JSON, förmodligen större i en affär. Står för JavaScript Object Notation. Och när har vi sett JSON används? När har du sett - varför ens vet ordet JSON? När har du sett den? PUBLIK: När vi fick aktiekurser för finansiering. JASON Hirschhorn: Så du såg det när du fick aktiekurser för finansiering. Och varför gjorde du det? PUBLIK: När vi hämta all den information som kom i det formatet. JASON Hirschhorn: Så du skulle få - ja. Varsågod. PUBLIK: [OHÖRBAR] upplysningar av ett objekt? JASON Hirschhorn: Båda av dem sätta ihop är svaret vi letar efter. Du vill ha information från denna andra webbsida. Och du hoppas att när du är att få den informationen, skulle det vara presenteras för dig i någon typ av standardiserat format. Alla är förmodligen bekant med kommaseparerade värden. Du kan exportera ett Excel-kalkylblad eller någon typ av kalkylblad som en lista med kommaseparerade värden. Och kommatecken dela alla de olika områdena. JavaScript Object Notation - JSON - är en annan typ av standardiserade layout av saker. Och det är ofta hur vi tar information från våra Ajax frågor. Så i det här fallet, vi fick det från Yahoo webbplats. De återvänder saker att oss i en JSON objekt. Och då vet vi, eftersom det är en standard, vad det är kommer att se ut. Så vi kan iterera igenom arrayen som har återvänt till oss, den rad av objekt som returneras till oss. Vi behöver antagligen behöver veta nycklarna, men de i allmänhet ger dig dokumentation på hemsidan när du hämtar några JSON notation för dem. På samma sätt kan du JSON koda för ett objekt. Så det finns en funktion JSON streck koda. Och så att du kan ta ett objekt som du har skapat, JSON koda det, och ge det vidare till något annars, om du vill. Och JSON avkoda existerar också för ett liknande syfte, eller för motsatt ändamål. PUBLIK: Behöver vi veta kodning för hashtabeller och försöker? Eller behöver vi bara förstå hur de används, konceptuellt? JASON Hirschhorn: Så, räck upp handen om du gjorde en hashtabell för p set 4 med en länklista. Eller p set 5. Så det var en stor majoritet av folket. P set 5, 6, vem vet. För länge sedan. Så de allra flesta av er gjorde hash tabeller med länklistor. Och eftersom det är förmodligen mer gemensam strategi, och eftersom vi tillbringade en hel del tid att göra länklistor och hash tabeller, bör du nog vara ganska bekant med hur man koda en hash-tabell och en länklista. Och om du tänker tillbaka på det problemet set, det var inte riktigt så hårt som du förväntat. Och det fanns mycket mindre kod än du förväntat. Jag skulle säga att du bör veta hur man koda en hashtabell eller en länklista. Inte för att du skulle bli ombedd att nödvändigtvis, men du bör säkert vet det. Dessutom, om du tittar igenom tidigare frågesporter, det har varit en hel del frågor om att skriva funktioner på länklistor eller dubbelt-länkade listor. Det verkar komma upp varje år. Rätt sätt in på en länklista, höger bort från en länklista, höger infoga för en dubbelt-länkad lista, et cetera. Så att, jag känner mig ganska bekväm säger att du borde veta det. För försök, skulle jag säga att du borde säkert vet hur det fungerar, och kanske ge lite pseudokod för hur att koda den och ställa in den. Men det skulle inte vara det värsta i världen om du inte vet hur man koda den i C. Det skulle vara bra om du visste hur man koda den i C, men jag tror förmodligen pseudokod för ett försök skulle vara det du behöver att veta för ett försök. PUBLIK: Extra kredit? JASON Hirschhorn: Och samma med, om vi gå in i binära sökträd, kanske du behöver - och du har sett tidigare, vi har gjort en hel del - du vet hur binärt sökträd fungerar. Du bör nog kunna ställa en upp i pseudo-kod. Men eftersom den stora majoriteten av människor gjorde inte det på problemet set, skulle jag säga att det är nog mindre viktigt att du vet hur man ska koda och ställa upp i ett träd så. Fler frågor? Vi kan också be dem hela när vi går igenom en del problem. OK, vi kommer att gå vidare. Hoppa att glida för nu. På tal om träd, är att den första fråga jag har för er. Eftersom detta är ett problem. Jag skulle säga att det är mycket troligt att du kommer får ett problem så här på din frågesport ber dig att koda någon typ av insats, ta bort, söka, för en typ av datastruktur som vi har sett. Det kommer upp varje år och vi tillbringade en mycket tid på den andra halvan av denna termin att gå över dessa datatyper. Så just nu har jag definierat en nod i ett binärt sökträd. Och vad jag vill att du ska göra ges ett binärt sökträd som startar vid denna nod stjärna rot, slutföra genomförande av funktionen nedan, som råkar vara en hitta-funktionen. Och gör det med och utan rekursioner. Så jag vill att du ska skriva två funktioner. Man gör detta med rekursion, en göra detta utan rekursion. Och ta inte för givet att det root kommer att vara icke-noll. Så vi letar efter det heltal i i trädet börjar vid roten, och vi behöver att skriva detta rekursivt och iterativt. Yeah. PUBLIK: Så du vill att vi ska returnera sant Om vi ​​tycker att det är, och falskt om vi inte att den är. JASON Hirschhorn: Hur visste du? Hur visste du det? PUBLIK: Jag frågade först, men jag var antagande, eftersom det står bool på I början av funktionen. JASON Hirschhorn: Höger. Den säger bool, så jag behöver inte ens att berätta vad jag förväntar dig att återvända eftersom det står där. Men det är rätt. Avkastning, sant eller falskt. Så innan du börjar, skulle jag rekommendera, Om du inte är bekant med binära sökträd, snabbt dra en bild på den för att få din förståelse, rätt. Det kommer också att hjälpa dig när du skriver din kod och kontrollera det. Återigen, du behöver inte heller så mycket tid på frågesport för att göra alla de saker att vi ber dig att göra. Så skriver pseudokod är till stor hjälp. Och vi ger allmänt om - om pseudokoden är helt korrekt, det är vanligen 50% på en fråga. Så det är inte en hård och snabb regel, men om du bara skriva pseudokod och det är korrekt, det är i allmänhet 50%. Så jag skulle alltid rekommendera - Om du ont om tid, eller ens om du försöker bara lista ut det - börjar med pseudokod. Och slutligen, om du kunde skriva detta allt i C, det skulle vara fantastiskt. Så låt oss ta tre minuter att arbeta med detta program. Och sedan ska vi skriva pseudokod för det bara en gång, och sedan vi ska koda den rekursivt och sedan iterativt. Om du har några frågor, känner gratis upp handen. Gott att gå runt och svara på dem innan vi börjar som en grupp. Låt oss fortsätta, och vi ska pseudokod den rekursiva versionen av detta, och då kommer vi att koda den. Så en rekursiv funktion behöver två saker. Detta kan vara en fråga som du skulle bli tillfrågad. Needs två saker. Vem kan räcka upp handen och berätta vad de två sakerna en rekursiv Funktionen behöver? Per definition har två saker. Vilka är dessa två saker? Nya händer. Ja, Alden. PUBLIK: Så jag är inte riktigt säker på om detta är terminologin, men - JASON Hirschhorn: Jag är glad du höjer din hand. PUBLIK: Den behöver en bas fall och det krävs en rekursiv steg. JASON Hirschhorn: Perfect. Den behöver ett basfall och ett rekursivt steg. Så vad är vår bas fallet här? PUBLIK: F rot lika lika null. Tyvärr, bara i pseudokod, om det är null. Om roten är null. JASON Hirschhorn: Om roten är null. Det är utmärkt. Det är vår bas fallet. Det är vad vi ska att kolla varje gång. Och basfallet är det första du gör. Om du träffar basfallet, du är klar. Nu behöver vi vår rekursiva anrop, och jag skulle vara villig att satsa att vi behöver ett par rekursiv samtal här. Eftersom det är ett träd, och vi kunde gå flera sätt. Så om roten är noll, vi är bra. Vad vill föreslå dig? Och nu ska jag börja ringa ut på er, för jag vet att ni alla vet detta. Men Annie, vad ska nästa rad bli? Tänk om vi hittat det? Vad gör vi? PUBLIK: Om vi ​​hittat den? JASON Hirschhorn: Eller vad bör vara att - ge mig pseudokod för linje där vi hittade den. PUBLIK: Om jag är lika med roten i? JASON Hirschhorn: Och vad gör vi? PUBLIK: Returnera sant. JASON Hirschhorn: Great. Så om jag är jag - åh, de är båda kallade jag. Det blir förvirrande. Men om jag är jag tillbaka sant. Det är förmodligen nästa vi bör göra. Vettigt. OK, nu har vi inte gjort vår rekursiva ringa ännu, men eftersom en rekursiv samtal skulle kalla denna funktion igen. Så vad ska nästa linje pseudokod vara? Anna. Publik: vänster sida. JASON Hirschhorn: Var specifik, dock. Detta är ett binärt sökträd, så vad inte kontrollerar den vänstra sidan innebära? PUBLIK: Så nod - Jag är ledsen, rot. Och sedan arrow vänster. Nod, node, sorry. Jag tänker inte läsa det ordentligt. Det kallas nod, eller hur? JASON Hirschhorn: Det kommer att kallas rot i den funktionen, men hur som helst. Den vänstra sidan - ja? Publik: Om det inte är lika med i, då kommer vi att ringa funktionen igen? JASON Hirschhorn: Det stämmer. Om den inte är lika i, vi ska att anropa funktionen igen. Men vilken sida av trädet ska vi att anropa funktionen igen? Publik: På den vänstra sidan. JASON Hirschhorn: Vi är inte alltid kommer att kalla det vänster, om det inte lika det. PUBLIK: Åh, förlåt. Ring till höger. JASON Hirschhorn: Vi vill veta specifikt, men - kom ihåg, i en binärt sökträd, allt för att den vänstra sidan är mindre. Allt till höger sidan är större. Så det är bara inte - ja, gå vidare. PUBLIK: Om det är mindre än jag, då - om det är till vänster - JASON Hirschhorn: Så om ri är mindre än - så om vårt nummer är mindre än jag, vilken sida vill vi att gå till? PUBLIK: Vi vill gå till den högra sidan. JASON Hirschhorn: Vi vill gå - Låt mig dra en snabb träd. Om det är 5, kommer detta att vara 3. Så om ri är mindre än fem, vad sida vill vi att gå till? PUBLIK: Förlåt, vad? JASON Hirschhorn: Vårt nummer är mindre än det antal vi är tittar på just nu. PUBLIK: Åh, då vi vill ha att gå till den vänstra sidan. Yeah. Ursäkta. JASON Hirschhorn: Exakt. Inga problem. I det binära sökträdet, allt lägre är till vänster, större är till höger. Så om vårt nummer är mindre än det jag vi kollar - eftersom du ser i nod, den har en i - då du vill gå till vänster. Och det är lätt. Vad är det den andra raden i pseudokod vi måste skriva? Carlos? PUBLIK: Samma sak, du bara byta den till en större än-tecken och gå till höger. JASON Hirschhorn: Kan du säger det en gång till? PUBLIK: Om vårt nummer är större än jag, gå till höger. JASON Hirschhorn: Excellent jobb på pseudokod. Låt oss göra det i verkliga kod. Och återigen, denna pseudo kommer förmodligen få dig, eftersom det är korrekt, 50% på den här frågan. Men denna pseudo översätter också en till ett i huvudsak i koden. Så låt oss göra det i C. Vem kan ge mig den första raden i koden? Egentligen först, innan jag gör det, låt mig stanna - PUBLIK: Jag har en fråga. Varför gjorde du indrag på linje jag gav dig? JASON Hirschhorn: Eftersom Jag kunde inte skriva. Jag vet inte. Du har rätt. Den linjen ska vara borta. OK, här är vår funktion. Och låt mig stanna, också, vår definition av en nod. Vad händer om vi inte skriva typedef? Är det någon som vet? PUBLIK: Det skulle inte kompilera. JASON Hirschhorn: Det skulle kompilera, ja. PUBLIK: Skulle det bara förklara en exempel istället för att göra det till en ny typ du kan deklarera flera fall av? JASON Hirschhorn: Så det skulle inte vet - det skulle inte bara förklara en typ. Du kan fortfarande göra en massa noder. PUBLIK: Men skulle inte vi behöva skriva struct node varje gång? JASON Hirschhorn: Det stämmer. Du måste skriva struct node varje gång, istället för att bara nod. Men med typedef kan du bara skriva nod varenda gång. OK, vem har inte gett - Ja, Avica. PUBLIK: Om root lika jämlikar null, returnera false. JASON Hirschhorn: Great, och det är vår bas fallet. Nästa rad kod. Någon som inte har gett mig en kodrad ännu? Yeah. PUBLIK: Root pilen i är lika lika med jag. Tillbaka sedan sant. JASON Hirschhorn: Great. Nästa rad? Yeah. Någon annan? Och sedan kan du gå nästa. PUBLIK: Else om root pil Jag är mindre än jag tillbaka Funktionen heter find rot - JASON Hirschhorn: Förlåt. PUBLIK: Retur find root pekar på vänster kommatecken i.. JASON Hirschhorn: Så om ri är större än saken i trädet, vill vi gå till vänster? PUBLIK: Nej, jag hade det bytt. JASON Hirschhorn: Vilken? PUBLIK: Nej, ja. Jag har en mindre än underteckna det. JASON Hirschhorn: Höger, om ri är mindre än vad som finns i roten - vår nuvarande rot - då vi vill gå till vänster. Och vad är den sista raden, eller hur? PUBLIK: I grund och botten samma sak, utom växla större än eller som är lika med mindre än och vänster till höger. JASON Hirschhorn: Excellent. Är det någon som har några frågor om det här? Så en del andra saker som skulle vara korrekta är att kan vara den-ltiff. Gissa, tekniskt sett, ingen av dessa egentligen också vara-ltiff. Dessutom finns det nog bara ett fall här nere. Så det är nog din sista fallet. Du behöver inte ens att-ltiff. Men antagligen bra att skriva det, att vara tydlig. Yeah. PUBLIK: Så du tror inte att testet - om vi gör fel, till exempel, i syntax - små syntaxfel - hur som får tas i frågesport? JASON Hirschhorn: Generellt på frågesport, små syntaxfel eller små stil felen inte förlorar du poäng. Så om du har glömt ett semikolon Här skulle det vara OK. Om du har glömt att stänga denna parentes, det skulle vara OK. Enorma syntaxfel som förändrar funktionella innebörden av koden dramatiskt, kan du få tas bort poäng för. Eller i allmänhet, bara gradering dig på om din kod fungerar, även - inte dess design så mycket, och inte dess stil. Låt oss nu koda en iterativ version av find. Så det kommer att vara ganska lika, men det säkert kommer att bli några viktiga skillnader. Men vår pseudokod kan förmodligen gå - vi kan fortfarande ta en linje av pseudokod och räkna ut vad det linjen är i det här fallet. Så i en iterativ version, vad tror du, Julia, bör vara den första raden? PUBLIK: Återigen, i iterativ boolean, du måste ställa in en for-loop, eller hur? JASON Hirschhorn: OK. PUBLIK: Så för liknande, k, för x är lika med 0, x är mindre än jag. Eller nej, x är mindre än den storleken på trädet. JASON Hirschhorn: Trädet. Så vi vet inte riktigt storleken på träd, och vi vet inte riktigt för hur många gånger vi kan gå, så vad är en annan typ av slinga som kan vara bättre i detta fall? PUBLIK: Om annat? JASON Hirschhorn: Om annat inte kan vara en ögla. Så vad är en typ av slinga kan vi bara kvar till några fall är uppfyllt? Vad är den enda typ av loop i C förutom en for-loop? PUBLIK: Medan. JASON Hirschhorn: När, exakt. I en while-slinga, inte behöver veta hur - en while-slinga och slinga kan göra exakt samma sak, men det fina med om en while-slinga är att vi inte behöver att veta hur stor vår trädet är. Så vi kommer att gå fram till vad? PUBLIK: Tills det är lika storlek - JASON Hirschhorn: Tja, det är mycket liknar vår rekursiva fallet. Så - PUBLIK: Medan rot Jag är inte lika med jag. JASON Hirschhorn: Det är riktigt nära. Även rot i - Låt oss prova. Jag tror inte att [OHÖRBAR] där rot jag inte lika i.. Vi kan behöva ändra det i en liten bit, men det låter som det är ganska bra, för nu. Så vi kommer att göra det. Kom också ihåg, vi kan inte ta på sig per fråga. Du behöver inte anta att root kommer att vara icke-noll. Så vad tror du att det mycket första vi bör göra är? PUBLIK: Bara göra samma sak sak som tidigare. Om roten är lika jämlikar null, returnera false. JASON Hirschhorn: Great. Så det kan vara null. Så vi vill bli av den direkt. Och sedan ska vi kontrollera om rot jag inte lika i.. Så säger vi söker i detta träd för 3, rot jag inte lika i, nu vi är i vår while-slinga. Vad vill vi göra? Och återigen, det kommer att vara ganska liknar vår rekursiva versionen. Yeah. PUBLIK: Så du skulle vilja att iterera, eller fortsätt ner trädet så länge roten inte är lika med noll. JASON Hirschhorn: Så länge rot är inte lika med noll? PUBLIK: Roten streck i inte är lika med noll. Bara roten, ja. Som länge som roten är inte lika med noll. JASON Hirschhorn: Så du vill att ändra detta i roten inte är lika med noll? PUBLIK: Ja. PUBLIK: Vi skulle kunna kombinera dessa, eller hur? Vi behöver inte det om, till en början. JASON Hirschhorn: OK, så om vi inte - om vi kombinerar dem, så vi kommer att göra medan roten inte är lika noll, och om roten råkar vara noll vid början, vad gör vi här nere? PUBLIK: returnera false. JASON Hirschhorn: Great. Så båda hållen förmodligen skulle ha fungerat. Detta är ett annat sätt, och detta kombinerar den. Men återigen, om du gjorde hur som helst, vi är inte att ta av designen pekar på frågesport. Men det ser bra ut. Så medan roten inte är lika null, vad är det första Det vi vill kontrollera? Någon annan? Null, vad är det första? Publik: Om ri är mindre än - åh, antar jag, om vi redan hittade den i roten. Så om rot pilen i är lika med i - JASON Hirschhorn: Förlåt? PUBLIK: Om root pil i är lika lika med i - JASON Hirschhorn: Vad gör vi? PUBLIK: Returnera sant. JASON Hirschhorn: Great. Och vad händer nu? Jeff, vad är nästa kodrad? PUBLIK: Om jag är mindre än roten pil i, då roten lika rot pil vänster. JASON Hirschhorn: Root jämlikar rot pil vänster. Så det är förmodligen det största Skillnaden här i denna iterativa version i motsats till den rekursiv version. Den rekursiva versionen, vi anropa funktionen igen. Vi kommer att uppdatera rot när vi kallar den nya funktionen. Här är vi inte ringer en ny funktion. Vi är helt enkelt bara att uppdatera rot i denna funktion. Det är utmärkt. Och vad är den sista kodraden? Ja, Mario? PUBLIK: Else rot equals rot pil höger. JASON Hirschhorn: Förlåt? PUBLIK: Root equals rot pil höger. JASON Hirschhorn: Kan du också skriva något sådant här? PUBLIK: Jag har ingen aning. JASON Hirschhorn: Du kan inte. Du kan inte göra plus jämlikar. OK, så det ser bra ut. Varför gör vi inte bara att för att rensa den. Det ser bra ut, och det skulle fungera. Och vi skulle bryta ut. Om root vänster var noll eller rot höger var noll, skulle vi komma upp hit. Root skulle vara lika med noll. Vi skulle bryta sig ur vår slinga, och vi skulle returnera false. Så när vi bryta sig ur loop, återvänder vi falskt. Och återigen, var perfekt för en while-slinga här eftersom vi inte vet hur big vårt träd är. Vi försökte skriva på för slingan, men vi insåg du har att räkna ut hur stort det är i förväg. Yeah. PUBLIK: Om detta inte var en binär sökträd, skulle det vara riktigt matte-y att skriva det iterativt, eller hur? Liksom, om det var ett träd, men inte nödvändigtvis - så det var inte allt mindre på vänster, och allt större till höger. Det skulle vara riktigt svårt att iterera över det, eller hur? Vi skulle behöva spara det som var tidigare på i trädet och gå tillbaka, och sånt. JASON Hirschhorn: Om det inte var en binär sökträd, om det bara var en träd och det var inte sorteras ut så här - och vi insåg tidigare när Anna hjälpte oss att göra det sorterad hjälper oss en hel del - vi skulle behöva, ja, alltid spara där vi var tidigare. Men det kan finnas en hel del där vi var previouslys. Det kan finnas en hel del överordnade noder. Förmodligen det bästa sättet att göra det skulle vara att hålla skjuta saker på vissa typ av skorsten eller kö. Du skulle aldrig behöva koda det här eftersom det är ett svårt problem. Men du skjuta vissa saker på en bunt eller kö och sedan pop dem, och sedan utvärdera dem. Och sedan har en annan sak där du faktiskt är att sätta noderna, och sedan skapa det, och sedan söka igenom det. Det kan vara det bästa sättet att göra det. OK, några frågor om det här problemet? PUBLIK: Det här är på en relaterad not. Kommer vi att jämföra körtider för hashtabeller, binär sökträd, et cetera? JASON Hirschhorn: Förmodligen. Så låt oss göra det riktigt snabbt. Gångtid för hash table - vilka är de andra? Binär trädet? PUBLIK: Länklistor. JASON Hirschhorn: OK, låt oss göra insats. Vad är den stora O för insats på en hash-tabell? Vilka antaganden du gör? PUBLIK: Du sätter in på början av länklistan. JASON Hirschhorn: Förmodligen den första antagande är att det inte finns några kollisioner. Om inga kollisioner, då införingstiden är en. Om det finns kollisioner, och du är gör separat kedja och infoga i början av länklistan, då insättning är också konstant. Om du gör en hash-tabell, men du har en annan metod för att hantera med kollisioner, vad är en annan metod? Vad är är en annan metod att hantera kollision i en hash-tabell? PUBLIK: Linjär programmering. JASON Hirschhorn: Linjär programmering. Så vi kommer att fortsätta leta för nästa öppen plats. Det är inte konstant inför tid. Du kan behöva gå igenom hela tabellen, så att kan vara stora O n. Yeah. PUBLIK: Annars bara kedja? JASON Hirschhorn: Vi gjorde separat kedja. Det var den första. Det är vad länken listan. Den fantasinamn är separat kedja. Det kan vara någon typ av liststrukturen vi råkar göra i länklista. Så återigen, insättning på en hash-tabell skulle kunna vara konstant tid. Hur är det med insättning på en stacker kö? PUBLIK: Är inte det konstant? JASON Hirschhorn: Det är konstant tid. Du är bara att trycka på den. OK. Insättning, vilka var de andra? På ett försök? Vad är stor O för insättning på ett försök? PUBLIK: Längd är konstant. Längd på det längsta - längden av ordet du sätter in. JASON Hirschhorn: Förlåt? Vänta, så vad var det jag hör? Du sa - vad sa du? Vad var ditt svar, Marcus? Publik: Längden av ordet du sätter in i tecken, antar att det är ett tecken försök. JASON Hirschhorn: OK, så längden av ordet. Vi kommer att göra ett antagande om att det är en teckensträng. Du sa något annat, dock. Du sa längden på den längsta ordet. PUBLIK: Det är bara konstant, eller hur? JASON Hirschhorn: Varför skulle det vara konstant? PUBLIK: Liksom, om du använder stora O notation, då den inte varierar beroende på antal saker som är redan i försök. JASON Hirschhorn: Så vi skulle säger att det är konstant tid. Det är konstant sätts in, och det beror på att denna idé - säga att vi har ett ord som är 45, eller ett ord som är 60, att har ett konstant antal. Och det skulle bara läggas i konstant tid. I praktiken är emellertid skulle det inte vara, uppenbarligen inträffa i en millisekund, till exempel. Men vi skulle säga stort O är konstant för ett försök. Och det är en av dess största fördelarna. Vad sägs om att föras in i en länklista? Bara en generisk, sorterade länklista? Yeah. PUBLIK: Jag hade en fråga. I testet, skulle de någonsin frågar oss ingstiden som är fyra steg, eller något? Eller är det bara - när du säger ingstiden är en, det betyder bara konstant tid? JASON Hirschhorn: Ja, de skulle alltid fråga, är det stort O n? Big O av log n? N kvadrat konstant. Det är egentligen den enda de du behöver veta. Hur är det med insättning på sorterade länklista? PUBLIK: Jag hade en fråga - en fråga - JASON Hirschhorn: Vad är svaret på den frågan, men? PUBLIK: Vänta, vad gjorde ni? JASON Hirschhorn: Vad är stort O i insättning i en sorterad länklista? PUBLIK: en? Nej vänta, Nej vänta, n. JASON Hirschhorn: N. Förutom länklistan. Och vad var din fråga? PUBLIK: Så skulle du skriva o av k eller o av 1 för - JASON Hirschhorn: Oh. Jag skulle skriva o 1, antagligen. Det fanns en annan datastruktur som skulle ha varit bra. Träd, binärt sökträd. Vad är insättning på ett binärt sökträd? PUBLIK: Logga in. JASON Hirschhorn: Så, vad är det värsta fallet i ett binärt sökträd? Så om vi råkar börja på 5, och varje antalet är större än 5, så vi har 5, 7, 9, 11, et cetera. I det här fallet, det är i princip bara en länk lista, och vi måste sätta in alla vägen i slutet. Så det är stor O n. Det kan vara vår värsta fall på ett binärt sökträd. Självklart skulle du aldrig bygga ett binärt sökträd med 5 i mellersta, att veta 5 skulle vara det lägsta numret. Men det kan vara, om du är börjar från noll. Eventuella frågor om detta innan jag gå vidare till en annan fråga? Det var en bra fråga. Jag skulle känna stor O - PUBLIK: Hur är det att söka för de fyra? JASON Hirschhorn: Definitivt vi gjorde sökning och sortering. Vi gjorde alla dessa algoritmer, höger. Vänta, var det för Quiz 1? Var som omfattas - Skulle du ha det Frågan om Quiz 1? Den stora O runtime av binär sökning, insättnings sortera, bubbla sort? PUBLIK: Ja. JASON Hirschhorn: Om du hade att Frågan om Quiz 0, oddsen är att du inte kommer få exakt samma fråga på Quiz 1. Kanske ändå bra att känna dem. Du ska förhoppningsvis känna gh redan. Men andra logaritmiska drifttider är nog bra att veta. Saker som inte täcks på Quiz 0. Liksom alla dessa aktörer på dessa abstrakta datatyper. OK, låt oss gå vidare. Den här borde vara ganska snabb. Och det här är ett nytt språk har vi inte faktiskt kodat i tidigare. Detta är en fråga frågar att koda i PHP. Så överväga PHP-array nedan. Skriv PHP och / eller HTML-koder så att den ut en tabell med två kolumner med TF namn och hus. Du har aldrig gjort det här förut, detta problem uppstår. Men detta bör vara väl förtrogen med vad du gjorde i problem set 7. Så jag skulle vara villig att satsa du kommer att vara ombedd att koda något i PHP som är mycket likt det som du gjorde i problem set 7. För det första är array inte så specifikt. Vilken typ av array är detta? PUBLIK: Associative. JASON Hirschhorn: Det är en associativ array. Och vad är skillnaden mellan en associativ array och ett objekt? Publik: Ett ändamål array har ett index av heltal och en associativ array är ett index på en sträng, eller något liknande. JASON Hirschhorn: Så en matris med föremål skulle index för heltal, men ett objekt har fält. Den har de fältnamn som namnge, hus, student. Har du en idé? PUBLIK: Tja, associativ array är i PHP, eller hur? Och objektet i JavaScript? JASON Hirschhorn: Ärligt talat, det finns ingen verkliga skillnaden mellan de två. Båda har strängar som nycklar, och kan har i stort sett allt som värde. Olika språk kallar en sak associativ array, en sak som ett objekt. Så ärligt talat, det finns ingen riktig skillnad, men det finns säkert några syntaktiska skillnader mellan de två. Yeah. PUBLIK: Så är objekt kodas även under huven som en hashtabell, då? JASON Hirschhorn: Vad gör du menar, kodat under huven? PUBLIK: Vi fick höra att associativ array var tekniskt en hash-tabell. Så är objekt också tekniskt en hash-tabell? JASON Hirschhorn: Jag tänker inte att svara på den frågan. Jag återkommer till dig på det. Men jag skulle inte tänka på vare sig av dem så. Men, på något sätt, associativ array och objekt, i allmänhet, människor använder dem termer omväxlande. I det här fallet, den svala delen är att du kan använda knapparna. Strängar som nycklar, snarare än bara enkla siffror. Så jag har pratat om detta ett tag. Förhoppningsvis, vissa människor har kommit igång med detta. Vi kommer att skriva lite PHP och HTML kod, så att vi får en två-kolonn bord med TFS namn och hus. OK, jag också skulle vilja ha en rubrik ro på denna tabell. Så jag ska gå rakt in i detta. Vi kommer att lämna in, nytt, och vi kommer att - OK. Hur startar jag en tabell? Vad är taggen, Michael, att starta en tabell? PUBLIK: Table. JASON Hirschhorn: Table. Och om jag öppnar ett tag, vad mer behöver jag? PUBLIK: Ett huvud? Eller, jag antar, klass. JASON Hirschhorn: Så, sorry. Antag att vi redan har skrivit doctab, HTML, allt det där. Men om jag öppnar denna tabell tag, vad mer behöver jag skriva? för validering av HTML? PUBLIK: Stäng den. JASON Hirschhorn: Stäng taggen. Hur skriver jag en nära-table-tagg? PUBLIK: Dot slash bord. JASON Hirschhorn: Slash bord, stor. Förmodligen är vettigt att skriva både av dem tillsammans eftersom du måste göra det. OK, om jag vill ha en rubrikrad, hur gör Jag skriver en rubrikrad med titlar? PUBLIK: Är det mindre än 10 tim nära - TR, ja. JASON Hirschhorn: TR? PUBLIK: Sedan samma sak, snedstrecket, ja. JASON Hirschhorn: OK, och ge mig två kolumner. PUBLIK: T D? JASON Hirschhorn: OK. Jag vill ha två kolumner. Innebär detta att ge mig två kolumner? Hur många kolumner är det här? One. Så låt oss kopiera och klistra in den här. Så egentligen, på frågesport, all denna kod att vi har skrivit så långt var faktiskt ges till dig. Men du bör nog ändå vet hur man skriver det. Yeah. PUBLIK: Ditt hus är mellan de två. JASON Hirschhorn: Boom. Det ska gå just där, eller hur? Bra samtal. Så återigen, är all denna kod faktiskt ges till dig på själva testet. Men det är kul att skriva det, och du bör veta hur man skriver det. Så det är här du behöver att starta din kod. Vad behöver vi för att skriva här? Förlåt, jag måste ändra namnet på denna fil. Så vi sparade den i en. HTML-fil, inte i en. PHP-fil. Dessa saker skulle betyda något i ett. PHP-fil. Så vi är i en. HTML-fil. Vad är det första Jag måste skriva? Jag vill lägga en del PHP kod på en HTML. PUBLIK: PHP, som en annan morot och frågetecken PHP, eller hur? JASON Hirschhorn: Great. Och hur gör jag avslutar det? PUBLIK: Med ett frågetecken. JASON Hirschhorn: Det är utmärkt. Det är det första jag behöver om jag vill att lägga lite PHP-kod här. PUBLIK:. Jag trodde en PHP fil kan ta HTML. JASON Hirschhorn: Ja. A. PHP-fil kan ta lite HTML och visas. Det var mitt fel. Jag försökte bara härma vad det var på frågesport. OK, ledsen att förvirra dig. Ja, practice.HTML. Nu ska vi sätta någon PHP-kod i. Vilken är den första raden i PHP-kod jag ska skriva? Jag ska gå igenom denna samling och göra det till en tabell. Yeah. PUBLIK: Du kan antingen använda en för H slinga eller en for-loop. JASON Hirschhorn: OK, vad vill du använda? PUBLIK: Jag skulle använda en for-loop. För, och då du gör dollartecken Jag är lika med 0 semikolon dollar sign i mindre än 2. Och då semikolon i dollar sign i plus plus. JASON Hirschhorn: Hur du vet att använda en 2? PUBLIK: Därför att det fanns två associativa arrayer inom större associativ array. JASON Hirschhorn: Så den stora saken är inte ett intresseföretag array. Den stora grejen är bara en vanlig array. Men du har rätt, det finns två associativa arrayer i våra större utbud. Det är därför du använder två. Jag mår dåligt om man antar att de är 2, så vad är ett sätt att skriva detta utan att man antar att de är 2? PUBLIK: [OHÖRBAR]? JASON Hirschhorn: OK, hur skriver du det? PUBLIK: Foreach dollartecken tfs eller liknande dollartecken tf. JASON Hirschhorn: OK, så för varje tfs som tfs, vill jag, nu igen, har mitt bord. Så vem kan ge mig den nästa kodrad? PUBLIK: Skriv ut och sedan på citat, fäste tr slut fäste, slut citat. End parenteser, semikolon. JASON Hirschhorn: OK, och vad är det som går att göra? PUBLIK: Det kommer att säga, ny rad. Det kommer att sätta tagga för en ny rad. JASON Hirschhorn: Höger, detta PHP, liksom vi talade om tidigare - detta PHP kommer att utvärderas, och sedan det kommer att skriva ut till den här filen en bord släptåg, och sedan att HTML kommer att utvärderas. Vi bara kopierar här HTML vi hade här uppe. Yeah. PUBLIK: [OHÖRBAR]? JASON Hirschhorn: Förlåt? Den är här. Fall 2012. Titta inte på svaren, Låt oss lösa det tillsammans. Så vi skriver ut tabellrad. Så du är förmodligen i swing saker. Vad är nästa rad av kod måste vi skriva? Assam, ge mig nästa kodrad. PUBLIK: Du behöver tf namn. Tf öppen parentes citattecken namnge slutna parentes. JASON Hirschhorn: Ge mig deras namn. PUBLIK: Du måste skriva ut det. [inplacering UTTRYCKER] JASON Hirschhorn: OK, Hur skriver jag ut det? [inplacering UTTRYCKER] JASON Hirschhorn: jag saknar något nu. Vad är det jag missar? PUBLIK: Du behöver ett dollartecken. JASON Hirschhorn: Vad annars är det jag saknar? Allt vi har skrivit hittills är tr. PUBLIK: Stäng st efter det. JASON Hirschhorn: Så vi behöver att stänga tr efter. Vem ser vad vi saknar på rad 16? Ja, Anna. PUBLIK: Du måste öppna en td och klammerparenteser. JASON Hirschhorn: Och var vi sätter klammerparenteser? PUBLIK: Runt tf namnet. JASON Hirschhorn: Gillar du? PUBLIK: Ja. Och stäng sedan td. JASON Hirschhorn: Gillar det? PUBLIK: Behöver du citat tecken bredvid klammerparenteserna? JASON Hirschhorn: Här? Nej, det gör du inte. Så det är exakt rätt. Yeah. PUBLIK: Så skillnaden mellan det och encatenating med prickar är, om du använder punkter, skulle du måste ha dubbla citattecken, då en punkt, då pricken - JASON Hirschhorn: Rätt. Så du säger att det finns en ultimat sätt att skriva det så. Vad operatorn i JavaScript? PUBLIK: Ett plustecken. Du glömde att sätta klammer tillbaka. JASON Hirschhorn: Great. Och det finns ytterligare en rad av kod saknas. Vem kan ge mig den sista raden av kod vi saknar? PUBLIK: Bara exakt samma sak, bara med hus i stället för namn. Bra JASON Hirschhorn: Great. Och din syntax är exakt rätt för få saker i ett intresseföretag array. Så i själva testet, du är faktiskt gett upp förrän här. Så här koden gavs till dig. Allt du tvungen att skriva var dessa fyra rader och kom ihåg att stäng tabellen taggen. Ni gjorde faktiskt allt detta och mer. Yeah. PUBLIK: Så det skulle vara funktionellt samma om du bara hade att alla i ett stort tryck samtal, eller hur? Och sedan bara sammanfogas på den, et cetera? JASON Hirschhorn: Gillar det? PUBLIK: Ja. Det skulle inte se bra ut om du var titta på det när du inspekterar elementet på din webbplats, eller hur? JASON Hirschhorn: Jag håller med. Om jag laddat denna webbsida, skulle jag vara kunna se denna PHP-kod, någonsin? PUBLIK: Nej. JASON Hirschhorn: Nej. Och faktiskt, jag skulle inte. PUBLIK: Det här är inte HTML, eller hur? Så du kanske kan - JASON Hirschhorn: Så här PHP skulle utvärderas serversidan. PHP är alltid utvärderas serversidan, så du aldrig kunna se PHP-kod. PUBLIK: Men du skulle kunna se resultatet av utskrifter. JASON Hirschhorn: Höger. Och det ärligt kanske inte sätta allt på spel. Det kan formatera det fint för dig, eller det kan sätta den på en rad. Oklar. Men ja, bra poäng. PUBLIK: Hur kommer det har ingen text markering för någon av PHP-kommandon? För jag kommer ihåg att se det. JASON Hirschhorn: För att det är en . HTML-filen här uppe i toppen. Varsågod. PUBLIK: Om vi ​​gjorde den första metoden med den för loopar, rätt, om vi ville komma åt en tfs, skulle vi göra tfs fäste 0 fäste, sedan [OHÖRBAR]? JASON Hirschhorn: Du skulle - så du säger att det för loop, du skulle göra i dollartecken tfs Fäste 1 eller jag, höger. Eller dollartecken jag stänger fäste och sedan hakparentes citationstecken, ja. OK, utmärkt. Vi har ytterligare en snabb en. Sju minuter, så jag vill ha att gå över detta. Detta är ett annat exempel. Vi är nu ett helt annat språk. Vi har lite HTML-kod. Det är ganska liten på skärmen, men Jag vill att du tittar igenom den verkligen snabbt, och kan någon berätta för mig, om jag skulle läsa den här webbsidan, vad jag skulle få se? Beskriv allt om denna webbsida. Noah? Vad vill jag? Publik: kod vid den främre änden av Google med en känsla för text och en Skicka-knappen. JASON Hirschhorn: Och vad skulle knappen säga? PUBLIK: Skicka. Åh, sökning. Jag är ledsen. JASON Hirschhorn: Det skulle säga sökning. Kom ihåg namn. Vad använder vi namn? Detta namn attribut, vad är som används för? [inplacering UTTRYCKER] PUBLIK: Det är namnet för när en användare klickar på? JASON Hirschhorn: Det skulle kunna vara. Men vad är det vi vanligtvis ser - varför ger vi detta namn kö? Varför gör vi det? Yeah. PUBLIK: Använder inte det blir index av super globala variabeln? JASON Hirschhorn: Ja, i allmänhet när denna form skulle lämna, och sedan var Detta skulle underkasta sig? Vilken sida? Noa, vilken sida skulle underkasta sig? PUBLIK: Jag är inte säker. JASON Hirschhorn: Där kunde vi kan hitta den? Var hittar du det sida ställs till? Vilken kodrad? PUBLIK: Form åtgärd. JASON Hirschhorn: Exakt. Action. Så det lämnar till söksidan. Bakstreck sökning. Så det är exakt rätt. Vilken metod? PUBLIK: Hämta. JASON Hirschhorn: Hämta. Exakt. Så vi läser detta. Detta kommer att vara en form. Du har helt rätt. Två saker på formen, titeln på sidan och toppen skulle vara Google. Så här är två frågor som du bör kunna svara på den här sidan. Om HTML bor på denna webbplats och användaren matar bugg i denna text fält här, vilken URL kommer användaren att hitta sig själv på skicka formuläret? Så vi har det här. Jag kommer att gå tillbaka till denna sida, dock. Jag ska skriva upp det här första delen. Kan alla se hit? OK, Mario, tror du att du vet? Vilken sida? PUBLIK: omvänt snedstreck sökning. JASON Hirschhorn: Jag tänker att flytta ner hit. OK, backslash sökfråga markera q lika bugg. Någon som har ett annat förslag? Yeah. Så hur får vi det? Tja, vi har sett det här förut. Och du kom med detta tidigare. Du hade rätt, Noa, att åtgärder att berätta vad sida ska vi. Vi vet också vilken metod. Vi gör få. Och skillnaden mellan get och post är att få visas i URL och post inte. Så om jag skrev inlägget direkt i metod, vad skulle vara annorlunda? PUBLIK: Det skulle bara vara snedstreck sökning. JASON Hirschhorn: Det skulle bara vara slash sökning. Ingenting över här skulle hända. Men eftersom det är ett får, URL visas på följande sätt. Först ser vi ett frågetecken och Vi ser namnet och värdet. Säg att det var en annan textfält och Jag gav det ett namn på r och jag in ett värde, larv. Vad skulle det nu se ut? Jag har ytterligare ett textfält, ger jag en namn på r och ett värde på larv. PUBLIK: När bar du skulle ha et-tecknet larv. JASON Hirschhorn: Det är inte et-tecken. PUBLIK: Eller bara vad den och symbolen. JASON Hirschhorn: Ja, nej. Du hade rätt, jag hade fel. Det är som en g.. PUBLIK: Caterpillar. r lika med larv, sorry. JASON Hirschhorn: Finns det ingen r där? Publik: Nej, det finns. JASON Hirschhorn: Vi ska tala om det efter lektionen. Det är precis rätt. Så den och är korrekt. Och då kan du ha många av dessa, och de skulle alla behöva förkortas tillsammans med det och. Så det är exakt rätt. Det finns ytterligare en fråga. Skissa denna HTML för DOM, med start med dokument. Vi skulle kunna göra det på två minuter. Vi gör det här borta. Jag ska gå tillbaka till den här webbsidan. OK, börjar vi med dokument. Vad händer nu? Så när du läser igenom - PUBLIK: HTML. JASON Hirschhorn: HTML är nästa. Vi kommer att gå tag efter tag. Vad är efter HTML? PUBLIK: Head. JASON Hirschhorn: Head. Vad är efter huvudet? PUBLIK: Titel. JASON Hirschhorn: Titel. Och titeln har ett värde på Google, men jag tänker inte skriver att i för nu. OK, var kommer kroppen gå? PUBLIK: Också komma bort av HTML. JASON Hirschhorn: Exakt. Body lossnar härifrån. Kan alla se varför så är fallet? Du bör nog kunna räkna denna ut, också, även om jag inte hade denna fina inbuktning. Indraget ger den sorts bort, men du kan se att huvudet tagg har stängts, vilket innebär att vi troligen kan inte gå ner hit. Vi måste gå tillbaka till vad var precis innan huvudet tag, eller under det. Vi är till och med huvudet taggen. Och i kroppen går formulär. Under formen finns det två ingångar. OK. Det är allt jag har. Quiz 1 är i morgon. Jag är så glad för er. Det kommer att bli skitkul. Om du har - PUBLIK: [applåder] JASON Hirschhorn: Åh sluta, sluta. Men nej, jag skojar. Om du har några frågor, rätt efter avsnitt, jag ska vara ute. Om du har några frågor ikväll, välkommen att ringa, e-post, Gchat, brevduva mig. Lycka till i morgon. Ha en underbar Thanksgiving rast, om jag inte ser dig innan dess. Och jag kommer att se dig efter Thanksgiving på tisdagen för vår sista avsnitt fest någonsin. PUBLIK: [OHÖRBAR]. JASON Hirschhorn: Great. OK, jag får se er nästa vecka, eller i två veckor. Och lycka till i morgon.