>> [Apžvalga: Viktorina 1]
[Ali Nahm, Oreoluwa Barbarinsa Lucas Freitas Rob Bowden] [Harvardo universiteto]
[Tai CS50.] [CS50.TV]
[Lucas Freitas] Sveiki visi. Tai peržiūra viktorina 1.
Lygiai taip pat dėl ​​atsakomybės atsisakymo, tai - aš turiu galvoje, mes ketiname bandyti padengti
kiek medžiaga, kaip įmanoma, tačiau tai nereiškia, kad
mes ketiname padengti visų dalykų, kad gali būti viktorina 1.
Taigi, įsitikinkite, kad jūs taip pat pažvelgti į paskaitą išvaizdą, profiliuočiai, viską, ką gali.
Viktorina 1 bus trečiadienį, kitą trečiadienį.
Todėl įsitikinkite, kad mokytis. Tai bus, gana daug, kaip ir pirmasis viktorinoje
dėl savo formato, bet tai tikriausiai bus daug sunkiau.
Bent jau pernai, kai aš paėmė 50, aš maniau jis buvo daug sunkiau.
Taigi mokytis daug.
>> Aš ruošiuosi padengti duomenų struktūras ir Huffman kodavimas.
Tai yra kažkas, kad daug žmonių mano, yra sudėtinga,
bet aš ruošiuosi pabandyti padaryti tai taip paprasta, kaip įmanoma.
Pirmiausia, ką mes norime jus vaikinai žinoti viktorina 1 yra
suprasti konceptualią aprašymai kiekvienam iš duomenų struktūrų, kad aš ketina pateikti.
Tai reiškia, kad jūs neturite iš tikrųjų
įgyvendinti maišos lentelę jūsų viktorina 1.
Mes nenorime, kad jums įgyvendinti visą maišos lentelę, gal mes pasistengsime
kad jums įgyvendinti tam tikras funkcijas,
dažniausiai operacijas, tačiau mes neketiname, kad jums įgyvendinti viską.
Todėl labai svarbu, kad jūs suprantate už kiekvieno duomenų struktūros koncepcija
ir taip pat, kad jūs galėsite koduoti C,
tik dažniausiai operacijos jie turi kiekvienam duomenų struktūra.
Ir taip pat galės peržiūrėti patarimų ir structs,
nes jie atrodo daug šių duomenų struktūros.
>> Pirma, susiję sąrašus. Susiję sąrašai yra iš tikrųjų labai panašus į masyvų,
bet tarp susietą sąrašą ir masyvo skirtumas,
visų pirma, tai, kad susijęs sąrašas turi labai lanksčią dydį,
o masyvų jūs turite pasirinkti arba labai didelį dydį masyvo,
taip, jūs žinote, kad jūs ketinate turėti galimybę laikyti visus savo duomenis toje matricoje,
ar turite naudoti malloc turėti lanksčią ilgį masyvo.
Iš susijusių sąrašų tai labai lengva tiesiog gauti daugiau elementų,
įdėti daugiau elementų, susijusioje sąrašo arba pašalinti elementus.
Ir iš tikrųjų, jei jūs nenorite susieti sąrašas turi būti išspręstos,
Jūs galite ieškoti ir pašalinti elementus pastoviu metu
taip O (1) laikas, todėl labai patogu.
Jūs tiesiog turite būti atsargūs, visada atminkite, kad malloc ir be mazgų,
tik todėl, kad jei jūs neturite, jums teks Atminties nutekėjimas.
Taigi susiję sąrašai - iš mazgo apibrėžimas yra tiesiog patinka tai, ką mes turime teisę ten.
Aš įdėti int n, bet jūs galite saugoti visus duomenis, kuriuos norite.
Taigi, jei norite išsaugoti eilutę, tai gerai.
Jei norite išsaugoti struct, tai gerai, dviguba, ką tik norite.
Aš tiesiog įdėti int n, čia pavyzdžių.
Ir jūs turite žymeklį į kitą mazgą.
Taigi, iš esmės, susijęs sąrašas turi tam tikrus duomenis, ir tada ji atkreipia dėmesį į kitą mazgą.
Jei tai paskutinis elementas susijęs sąrašą, jis ketina atkreipti dėmesį į NULL.
Taigi tai iš susietą sąrašo pavyzdys.
>> Gerai, kad dabar pažiūrėkime, ką mes turėtume daryti, jei noriu įterpti į susietą sąrašo elementą.
Pirma, funkcija įterpti bus tipo tuščia
nes aš nenoriu grįžti nieko.
Ir aš ruošiuosi imtis int kaip argumentą,
nes aš noriu žinoti, ką aš noriu įterpti.
Taigi, kas yra pirmas dalykas, kurį turėtų daryti? Na, turėčiau malloc ant newnode,
kad yra pirmoji eilutė.
Aš tiesiog sukurti naują mazgą įdėti į susietą sąrašą.
Taigi, ką aš galiu padaryti? Na, mes žinome, kad mūsų realizavimo susijusių sąrašus
klasėje, mes visada įdėti į galvą kaip pasaulinį kintamąjį.
Taigi, ką mes galime padaryti, tai pakeisti galvą.
Galiu padaryti ši nauja mazgas bus naujas vadovas,
ir jis ketina atkreipti dėmesį į ankstesniame galvos.
Kaip mes galime tai padaryti? Pirmas dalykas, ką turite padaryti,
yra pakeisti "n" į naują mazgas vertės,
kuri buvo perduota funkcija.
Tada newnode yra šalia bus galva.
Vadovas bus newnode. Taigi, tai gana paprasta.
Išbraukiant mazgas, mes galime padaryti, tai kaip -
Vienas iš būdų mes galime padaryti, ty,
gerai, jei aš norėjau ištrinti, pavyzdžiui, 3,
ką aš galėčiau padaryti, tai tiesiog nukreipkite ankstesnę mazgas
prie kito mazgo 3.
Taigi, aš tiesiog padaryti kažką panašaus.
Bet kas yra su tai daro problema?
Turiu Atminties nutekėjimas, todėl aš neturiu prieigos prie skaičiaus 3 nebėra.
Su, kad problema yra, kad aš nesiruošia galės nemokamai, kad mazgas.
Aš ruošiuosi Atminties nutekėjimas ir (nesuprantamas) ketina manęs nekenčia.
Taigi, užuot, kad aš tikriausiai turėtų turėti laikiną rodyklę.
Todėl aš įdėti temp. Ji ketina atkreipti dėmesį į mazgą, kad aš noriu ištrinti.
Ir tada aš galiu perkelti ankstesnių mazgų taško iki kito mazgo
mazgas, kad aš noriu ištrinti.
Ir, pagaliau, galiu nemokamai žymiklį.
Ar turiu nemokamai žymiklį, kad aš sukūriau teisę ten?
Aš neturiu, paprasčiausiai todėl, kad -
Skirtumas tas, kad šis mazgas buvo sukurtas naudojant malloc,
todėl krūvą, o tai vienas buvo tiesiog deklaruoti kaip NULL jungiklis kamino.
Taigi aš neturiu išlaisvinti ją.
>> Gerai. Taigi, dabar pakalbėkime apie kaminus.
Kaminai yra gana paprasta.
Mes padarėme kaminai ir eiles klasėje tiesiog naudojant matricas,
bet jums turėtų būti pažįstamas - tiesiog reikia žinoti
kad jūs taip pat gali tai padaryti šūsnis eilėse naudojant susijusius sąrašus taip pat.
Taigi, jei turite masyvą, kas būtų kamino?
Kamino, pirma, turės turėti dydį.
Jūs turite saugoti tai, kas iš kamino, kad jūs turite dabar dydis.
Taip pat jums reikės masyvą, šiuo atveju skaičių,
bet jei norite, tai gali būti masyvas
eilučių, iš struct masyvas, nieko, kad norite išsaugoti.
Apie kamino: tarp kamino ir susietą sąrašą skirtumas
yra tai, kad kamino turite tik patekti į paskutinį elementą, kuris buvo įdėti į steką.
Tai vadinama paskutinė, first out.
Tiesiog kaip jūs turite padėklai kaminą,
jei jūs įtraukėte dėklą ant kamino viršaus,
jūs turite pirmiausia pašalinti šį dėklą turėti prieigą prie kitų padėklai.
Tai tas pats, su šūsnis.
Taigi, jei aš noriu, pavyzdžiui, pridėti elementą į steką, ką turėčiau daryti?
Tai vadinama stumti, ir tai gana paprasta.
Pirmas dalykas, kurį turite padaryti, tai patikrinti, ar kamino dydis
nėra didesnis arba lygus kamino pajėgumus.
Nes jei jau yra visu pajėgumu, jūs negalite pridėti ką nors kita.
Ir tada jei ne, jums tereikia pridėti elementą į steką.
Ir, pagaliau, prieaugio dydį. Taigi, tai gana paprasta.
Taigi aš tiesiog pridėkite numerį 2.
Ir jei aš noriu, kad pop, o tai reiškia, kad aš noriu pašalinti
paskutinis elementas, kurį buvo įtraukta ir grąžina elemento vertę,
Pirmas dalykas, aš turiu patikrinti, kad kamino nėra tuščias.
Nes jei ji tuščia, aš negaliu grįžti nieko.
Tokiu atveju, aš grįžti -1.
Priešingu atveju, aš ruošiuosi Mažėja iš spec dydį,
ir grįžti numerius (s.size).
Kodėl aš Mažėja dydį ir tada grįžti s.size?
Taip, nes šiuo atveju, Spec dydis 4,
ir aš noriu grįžti ketvirtą elementą, tiesa?
Bet kas yra ketvirto elemento indeksas? Trys.
Kadangi aš dydis - tai bus 3, aš galiu tik grąžinti s.numbers (s.size)
nes tai 3. Taigi tai tiesiog rodyklė.
>> Dabar eilės. Eilės yra beveik tas pats dalykas.
Vienintelis skirtumas yra tas, kad vietoj to, kad yra paskutinė, first out,
jūs turite pirmiausia, first out.
Tikriausiai, jei jūs laukia eiti į koncertą,
jums nebus laimingas, jei jums turėjo krūvą vietoj eilėje.
Būdamas paskutinis žmogus ateiti bus pirmasis asmuo įvesti koncertą.
Jūs tikriausiai negali būti laimingas.
Eilėje, pirmasis asmuo, gauti taip pat yra pirmasis asmuo išeiti.
Taigi į eilę apibrėžimą, be kurių dydį masyvo,
Jūs taip pat turite turėti galvą, kuri yra prie kamino galvos indeksas.
Taigi pirmasis elementas dabar.
Įtraukti į eilę yra tas pats, kaip siekti kaminai.
Jei buvo labai naivus, tai būtų tiesiog pasakyti,
gerai, aš galiu tik daryti lygiai tą patį, kaip aš padariau paspaudimu.
Galiu tik patikrinti, ar jis nėra nei talpa.
Jei taip, tai aš return false, priešingu atveju aš galiu tik eksportuoti naują vertę
ir tada prieaugio dydį.
Bet kodėl tai yra blogai?
Pažiūrėkime šį pavyzdį.
Bandau į eilę daiktų krūva,
ir tada aš ruošiuosi dequeue ir į eilę.
Yra komandų daug, bet tai labai paprasta.
Aš ruošiuosi į eilę 5, todėl pridėti 5, tada 7,
1, 4, 6, ir tada aš noriu dequeue kažką,
o tai reiškia, kad aš ruošiuosi pašalinti pirmąjį elementą.
Taigi, aš ruošiuosi pašalinti numerį 3, tiesa?
Pirmasis elementas. Gerai.
Dabar, jei aš stengiuosi į eilę kažkas, kas nutiks?
Pagal mano įgyvendinimą,
Aš buvau ketinate daryti kitą numerį indekso q.size.
Šiuo atveju, dydis 8,
taip 8 puslapis bus čia paskutinėje vietoje.
Jei aš stengiuosi į eilę 1 čia, aš norėčiau būti perrašyti paskutinę poziciją
numeriu 1, kuris yra visiškai neteisinga.
Ką aš noriu padaryti, tai apsukti ir eiti į pirmąją poziciją.
Gal jūs tiesiog pasakyti, gerai, aš tiesiog patikrinti
jei aš iš tikrųjų galite įdėti ką nors ten.
Jei ne, aš tiesiog pasakyti, oh, nauji visu pajėgumu
iš tikrųjų talpa - 1, ir jūs negalite įdėti elementą ten.
Bet kas yra problema? Problema ta, kad jei aš tiesiog dequeue viską čia
ir tada bandau pridėti ką nors kita, tai tik pasakyti,
gerai, tu buvai ne visu pajėgumu, kuris yra 0.
Taigi jūsų eilė dingo.
Jūs turite wrap aplink, ir vyniojimo aplink būdas
kad jūs vaikinai išmoko viziją ir kitų psets naudoju mod.
Galite pabandyti jį namuose suprasti, kodėl jūs darytumėte q.size + q.head
mod talpa, bet jei jums patikrinti čia,
matome, kad tai veikia.
Taigi paskutiniame pavyzdyje, q.size buvo 8
ir galva buvo 1, nes ji buvo tokia pozicija čia masyvo.
Taigi, tai bus 8 + 1, 9. Mod talpa 9 būtų 0.
Tai būtų eiti į indeksą 0. Mes reikiamoje padėtyje.
Ir bandykite eilę namuose.
Kai kurie svarbūs dalykai: pabandykite suprasti skirtumą tarp kamino ir eilės skirtumą.
Namuose, pasistenkite labai gerai susipažinęs su įgyvendinimo į eilę, dequeue, push ir pop.
Ir taip pat suprasti, kai norite naudoti kiekvieną iš jų.
>> Taigi leiskite pailsėti 10 sekundes iš pokemons krūva.
O dabar grįžkime prie duomenų struktūros.
Hash lenteles. Daug žmonių bijojo hash lenteles.
ir problema nustatyti 6, rašybos tikrintuvas.
Maišos lentelės ir bando, daug žmonių bijo jų.
Jie galvoja, kad jie taip sunku suprasti. Taip?
[Rob Bowden] Problema nustatyti 5. >> Problema nustatyti 5, taip. Ačiū Rob.
Taip. Šeši buvo Huff n Puff, taip.
Problema nustatyti 5 buvo Rašybos tikrintuvas, ir jums teko naudoti arba maišos lentelę arba pabandyti.
Daug žmonių manė, kad jie buvo super sunku suprasti, bet jie iš tikrųjų labai paprasta.
Kas yra maišos lentelė, iš esmės? Maišos lentelė sujungtų sąrašų masyvo.
Vienintelis skirtumas tarp masyvo ir maišos lentelė
yra tai, kad maišos lentelė turite kažką vadinama maišos funkcija.
Kas yra maišos funkcija?
Aš nežinau, jei jus vaikinai gali skaityti čia.
Tai iš maišos lentelės pavyzdys.
Taigi, jūs galite pamatyti, kad turite su 31 elementų masyvas.
O ką mes galime padaryti, maišos lentelės turi maišos funkcija
kad ketina išversti raktą, kiekvienas int į indeksą.
Jei, pavyzdžiui, jei aš noriu pasirinkti B. Harrison,
Norėčiau įdėti B. Harrison mano maišos funkcijas,
ir maišos funkcija sugrįš 24.
Taigi aš žinau, kad norite išsaugoti B. Harrison 24.
Štai tarp tiesiog masyvą ir turintys maišos lentelę skirtumas.
Maišos lentelės jūs turite funkcija, kuri ketina papasakoti
kur laikyti duomenis, kuriuos norite išsaugoti.
Dėl maišos funkcija, jūs norite ieškoti maišos funkcija
tai yra determinuota ir gerai pasiskirsto.
Kaip matote čia, matote, kad duomenų, kuriais norėjau parduotuvėje daug iš tikrųjų buvo 19
, o ne naudojant 31 ir 30 ir 29, kurie buvo nemokamai.
Taigi maišos funkcija, kad aš nebuvo labai gerai pasiskirsto.
Kai mes sakome, gerai pasiskirsto, tai reiškia, kad mes norime turėti,
maždaug, bent 1 ar 2 kiekvienam -
patinka, 1 arba 2 skirtumas kiekvienai iš masyvų indeksai.
Jūs norite turėti, maždaug, tą patį skaičių elementų kiekvieną susietą sąrašas masyve.
Ir tai lengva patikrinti, ar tai galioja maišos lentelės matyti, kaip maišos lenteles.
>> Tada medžiai. Tai medis.
Medžiai informatikos yra aukštyn kojom dėl kokios nors priežasties.
Taigi čia jūs turite medžio šaknį ir tada lapai.
Jūs tiesiog reikia žinoti, kad tėvų ir vaikų nomenklatūrą.
Kiekvienas mazgas turi savo vaikus, kurie yra mazgai, kurie yra žemiau tėvų.
Taigi, pavyzdžiui, 2 bus tėvų už 3 ir kitų vaiko teisę ten,
o 3 bus už 1 tėvų ir kiti vaikai, kurie yra ten.
Ir 1 bus 3 vaikas, ir pan.
Mes turime kažką daug įdomesnis, vadinamas dvejetainis paieškos medis,
, kurioje visos panaudotos dėl mazgo dešinėje reikšmės
ketiname būti dešinėje, čia - į dešinę,
ketinate būti didesnė nei šaknų elementas.
Taigi, jei aš turiu skaičių 5 čia dešinės pusės, visi elementai
ketinate būti didesnis nei 5, o kairėje
visi elementai bus mažesnis nei 5.
Kodėl tai naudinga?
Na, jei aš noriu patikrinti, ar skaičius 7 yra čia, pavyzdžiui,
Aš tiesiog eikite į 5 pirmas ir aš pamatyti, yra 7 didesnis arba mažesnis nei 5?
Tai didesnis, todėl aš žinau, tai teks būti medžio dešinėje.
Taigi turiu daug mažiau dalykų pažvelgti.
Įgyvendinant dvejetainis paieškos medis, mazgas, aš tik ketina turėti duomenis,
taip int n, jūs taip pat galėtų turėti eilutę
ar kas nors norėjo.
Jūs tiesiog turite būti atsargūs, apibrėžiančius, kas yra didesnis, kas mažesnis.
Taigi, jei jūs turėjote sekas, pavyzdžiui, galima nustatyti
kad visi tie dalykai, dėl teisės ketinate turėti didesnį ilgį,
kairėje teks mažesnes ilgio, todėl tikrai ne jums.
>> Kaip aš galiu įgyvendinti suras BST?
Pirmas dalykas, mes turime padaryti, tai patikrinti, ar šaknis yra NULL.
Jei tai NULL, tai reiškia, kad dalykas, ten nėra
nes jūs neturite net medį, tiesa?
Taigi aš return false.
Priešingu atveju, aš ruošiuosi patikrinti, ar skaičius yra didesnis
nei į šaknies vertės.
Aš ruošiuosi pabandyti surasti elementą dešinėje
iš medžio.
Jūs matote, kad aš naudoju rekursija čia.
Ir tada, jei tai yra mažiau, aš pažvelgti į kairę.
Ir, pagaliau, kitaip, jei tai ne mažiau ar ne daugiau,
tai reiškia, kad ji pati vertė.
Taigi aš tiesiog grąžina true.
Jūs galite pamatyti, kad čia aš, jei jei jei.
Ir atminkite, kad viktorina 0, mes turėjome problemą, kad turėjo, jei, jei, jei,
ir jums turėjo rasti neefektyvumą,
ir neefektyvumas buvo, kad jums naudoti, jei.
Jūs turite naudoti, jei, nors, jei kitur, jei ir kitur.
Taigi, man reikia naudoti if ir else if ir dar čia?
Ar kas nors - Tikrai?
[Studentų kalbant, nesigirdi]
Tai puiku. Taigi, ji sako, kad nesvarbu,
tik todėl, kad neefektyvumas, kad mes turėjome prieš
buvo ta, kad, nes, galbūt, jei kai sąlyga buvo patenkinta,
todėl jūs turite atlikti veiksmą, bet tada jūs ketinate patikrinti visas kitas sąlygas.
Tačiau šiuo atveju, jis grįžo iš karto, todėl nesvarbu.
Taigi jūs neturite naudoti if.
>> Ir pagaliau, pakalbėkime apie tai, bando,
kuris yra visiems mėgstamiausia.
Bandymas yra masyvus medis.
Tai labai greitai ieškoti vertybes, bet ji naudoja daug atminties.
Ir tai paprastai filtruoti žodžius, todėl, kai jūs
nori įgyvendinti, pavyzdžiui, aš nežinau, kaip telefonų knygos jūsų telefone
, ir jūs norite, kad būtų galima B tipo
ir tiesiog žmonių pavardes, kurie B.
Tai labai paprasta įgyvendinti, kad naudojant pabandyti, pvz.
Kaip Jūs apibrėžtumėte mazgas pabandyti?
Jūs tiesiog turite turėti bool, kad ketina būti is_word.
Tai rodo, kad, naudojant visus simbolius iki tos mazgas,
Jums buvo suteikta galimybė sudaryti žodį
ir tada jūs turėsite rodykles masyvo mazgų.
Ar matote, kad mes turime patronuojančių mazgų masyvas, todėl mazgas * masyvas? Taip?
Taigi, pažiūrėkime, kaip kad veiks. Dėl patikrinti rašybą,
mes turime apie 27 elementų masyvas,
nes mes turime visus laiškus plius kabutes.
Prieš čia aš tik ketina naudoti 2, nes aš noriu, kad būtų galima rašyti ant lentos.
Gerai. Taigi tai iš bandymas pavyzdys.
Jei aš tiesiog nustatyti pirmą mazgas, aš turiu apie 2 elementų masyvas
kurie yra 2 patarimų nulis, todėl aš tiesiog įdėti "a" ir "b".
Ir aš ruošiuosi turėti bool, kad sako is_word.
Tai bus false pirmąjį,
tik todėl, kad prieš tai jūs neturite jokių simbolių.
Taigi tuščias žodis žodis. Taigi, tai klaidinga.
Jei aš noriu pridėti "a" į šį žodyną, ką man daryti?
Norėčiau tiesiog malloc naują mazgas "a",
ir tada pridėti savo žodį tiesa.
Taigi, tai tik reiškia, kad to, "" bus tiesa. Prasmės?
Tada, jei noriu pridėti "ba", aš turiu malloc 1 už "b",
ir tada aš ruošiuosi įkurti boolean false,
nes "b" pats savaime nėra žodis.
Tada aš ruošiuosi malloc dar vieną "a", todėl "ba",
ir tada aš ruošiuosi įkurti tai žodis tiesa.
Kadangi "ba" yra žodis.
Ir tada jei aš noriu pamatyti, jei "b" yra šio žodyno
Galiu tik eiti į pirmąjį, "b". Aš einu žemyn, ir aš pažvelgti į tai žodis, ir ji sako klaidinga.
Taigi tai nėra žodis. Jei aš noriu patikrinti "ba",
Aš einu į pirmąjį, "b", tada eikite į "a", ir matau, tiesa, todėl žodis. Prasmės?
Daug žmonių gauti painioti bando. Ar ne?
>> Galiausiai Huffman kodavimas. Huffman kodavimas yra labai naudinga
išsaugoti atmintį ir suspausti tekstinius failus,
tik dėl to, kiek kartų jūs naudojate "a" ir "e", pavyzdžiui, daug,
savo dokumentų, bet aš nežinau, jei jūs vaikinai naudoti "Q" arba "Z", kaip daug.
Atsižvelgdama tik 1 baitas už kiekvieną požymį,
kiekvienas - į 256 simbolių, kad mes turime ASCII lentelės nėra labai optimalus,
tik todėl, kad yra keletas ženklų, kad jūs naudojate, tuo labiau,
todėl jūs tikriausiai turėtų naudoti tuos mažiau atminties.
Kaip naudotis Huffman kodavimas?
Mes turime padaryti Huffman medį.
Huffman medis mazgai
kurie turi simbolį, kuris ketina būti, pavyzdžiui, "a", "b", "c" raidė,
kokia raidė turite, dažnis, kad yra dažnis, kad žodis yra tekste,
kad jums buvo sukurti Huffman medį,
ir tada mazgas, kuris ketina atkreipti į Huffman medžio kairėje
ir dar vienas mazgas, kad ketina atkreipti į dešinę. Taigi tiesiog norėčiau medį.
Kaip jums sukurti Huffman medį?
Jūs ketinate pasiimti 2 mazgų, kurie turi mažiausią dažnį.
Jei turite kaklaraištį jūs ketinate pasiimti 2 mazgų
kurie turi mažiausias ASCII reikšmes, taip pat.
Tada jūs ketinate sukurti naują medį iš tų 2 mazgų
kad ketina turėti bendrą dažnį patronuojančios mazgas.
Ir tada jūs ketinate pašalinti 2 vaikus iš miško
ir pakeisti juos su tėvu.
Ir jūs ketinate pakartoti, kad, kol jūs turite tik 1 medį miške.
Taigi pažiūrėkime, kaip galėtumėte padaryti Huffman medį ZAMYLA.
Jūs galite pamatyti čia, kad visi laiškai turi dažnį 1, išskyrus "A", tai yra dažnis 2.
Taigi, aš sukūriau mazgai visų laiškų, kuriuos aš dedu tvarka ASCII reikšmė ir dažnį.
Taigi, jei aš noriu kurti pirmąjį medį, tai bus su raide "L" ir "M".
Taigi čia. Iš poros dažnis bus 2
nes tai 1 + 1, tada kitas 2 su mažiausių dažnių yra "Y" ir "Z".
Ir tada aš turiu juos visus yra - turime 2 dažnį.
Taigi, kuris iš jų yra tie, kurie turi mažiausią ASCII vertės kito?
"A" ir "L". Taigi, aš sukurti naują mazgą,
ir pagaliau, tai 4 ir 2, todėl 2 bus kairėje pusėje.
Ir tai Huffman medis.
Tada, jei aš noriu parašyti tekstą,
kaip ir dvejetainiai konvertuoti į tekstą, naudojant Huffman medis yra labai lengva.
Pavyzdžiui, jeigu aš sakau, kad juda į kairę yra 0 ir juda į dešinę yra 1,
Kas yra, kad ketina atstovauti?
Taigi, pavyzdžiui, 1, 1, labai teisingas, teisus,
ir tada 0, todėl paliko būtų L, tada 1, 0, 0.
Taigi, 1, 0, kad tik 1, 0, '".
Ir tada 0, 1, todėl "Z".
Ir tada 1, 0, 0 - ne.
0, 0 bus "Y", todėl tingus.
Taigi, kad viskas man, Rob ketina perimti.
>> [Rob Bowden] Taigi, savaitė 7 dalykų.
Mes turime daug eiti per tikrai greitai.
Bitinis operatoriai, buferio,
CS50 biblioteka, tada, HTML, HTTP, CSS.
Visi kaip nuo 15 iki 20 minučių.
Bitinis operatoriai. Yra 6 iš jų, kad jums reikia žinoti.
Bitinis ir finansų įstaigos Mokėjimo arba XOR, kairysis SHIFT, dešiniuoju Shift ir ne.
Teisė perkelti, o ne jūs vos matė paskaitą visiems.
Mes eiti per jį greitai čia, bet tai gera žinoti, kad tai yra 6, kad egzistuoja.
Atminkite, kad Bitinis operatoriai, pavyzdžiui, kai jūs darote, 3 + 4.
Jūs nesate susijusius su 3 ir 4 dvejetainiai.
Su Bitinis operatorių jūs iš tikrųjų susiduriame su atskirais bitai ir skaičiais 3 4.
>> Taigi pirmasis, kad mes pasakyti Bitinis ne,
ir visi, tai yra apversti visus bitus.
Taigi čia, jei rašote tai C, tai būtų ne rašyti
kaip ~ 11.011 ar kas, jums parašys tau patinka ~ 4,
ir tada jis būtų apversti dvejetainis 4.
Taigi čia, ~ kai kurių dvejetainis skaičius 1101101 ketina tiksliai apversti visas 1-ųjų iki 0 "ir visi 0 ųjų iki 1 s.
Kaip ten sako, dažną tai,
ir mes pamatyti jį šiek tiek, tai kaip mes norime sugalvoti kai skaičius
kur visi bitai yra 1, išskyrus vieną iš jų.
Todėl paprastai lengviau išreikšti numerį
kur tik, kad vienas bitas yra nustatytas,
ir tada imtis jį ~, todėl kiekvienas kitas bitas yra nustatytas, išskyrus tą vieną.
Taigi, tai, ką mes ketiname naudoti daugiau bitų.
>> Bitinis arba. Čia yra 2 dvejetainiai skaičiai, ir šie 2 numeriai
yra gana tipiškas, nes jie sudaro visas įmanomas
derinys bitų jums gali prireikti veikti.
Čia kai aš or'd kiekvieną šiek tiek, mes tiesiog vyksta palyginti tiesiai žemyn.
Taigi kairėje pusėje turime 1 ir 1.
Kai aš Bitinis | tiems, ką aš ketina gauti? Vienas.
Tada Bitinis | 0 ir 1 ketina duoti man? Vienas.
Bitinis 1 ir 0 bus tas pats, vienas.
Bitinis 0 | 0 ketina duoti man 0.
Taigi tik tuo atveju, kai gaunu 0 yra 0 | 0 atvejis.
Ir jūs galite galvoti, kad, kaip savo loginių atokiausių regionų.
Taigi, jei manote, 1 kaip tiesa ir 0 kaip klaidingą, tas pats taikoma čia.
Taigi tiesa, ar tiesa yra tiesa, teisingas ar klaidingas, yra tiesa.
Neteisinga ar tiesa yra tiesa, melagingą arba klaidingą yra vienintelis dalykas, kuris tikrai klaidinga.
Štai pavyzdys, kad jūs turėtumėte žinoti,
kaip gana geras pavyzdys, kai Bitinis operatoriai naudojami.
Čia jei mes ar kapitalas "" su Ox20,
ir mes pažvelgti į juos per sekundę, kurią mes gauname kažką.
Ir jei mes arba mažosiomis raidėmis "a" su Ox20, kurią mes gauname kažką.
Taigi galime atsigriebti ASCII lentelę.
Gerai. Čia mes matome, kad "A" yra -
čia mes turime "A" yra dešimtainis 65.
Bet aš eisiu su šešioliktainis, kuris Ox41.
Tikime, kad mes matėme jį klasėje. Manau, mes matėme tai savo klasėje
kad tai gana lengva paversti šešioliktainį į dvejetainį.
Taigi čia, jei norite įdėti į 4 dvejetainiai
tai tiesiog bus 0100.
Tai 1 vieta, 2 vieta, 4 vieta, todėl tai yra 4.
Tada galite padalyti 1 į dvejetainės, kuri ketina būti 0001.
Ir todėl tai bus "A" dvejetainėje atstovavimas.
Atsižvelgiant mažosiomis raidėmis "a", tai dabar bus Ox61,
jei, skirstant juos į viršų į savo dvejetainiu, todėl 6 -
Leiskite iš tikrųjų tai padaryti - nėra jokio trintukas? Trintukas.
Ox61. Taigi padalijant 6 dvejetainiais bus 0 + 4 + 2 + 0.
Ir padalijimas 1 bus 0001.
Pažvelgus tarp šių 2 skirtumų,
matome, kad vienintelis skirtumas tarp mažosios ir kapitalo "A" tai vienas bitas.
Taigi, grįžtant prie čia - gerai.
Grįžtant prie čia, jei pažvelgsime į tai, ką tiek Ox20 yra
taip padalijimas Ox20 į savo binary,
yra 0010, 0000.
Ox20, tik tiek, kad yra nustatyta tai yra tiek, kad mes esame susiję su,
su perjungti kapitalo ir mažosiomis raidėmis "A".
Jei aš arba "A", kuri yra tai viena, "',
jei aš arba "" su Ox20,
ką aš ketina gauti?
[Studentų, nesigirdi] >> mažosiomis '', nes jis ketina apversti šį šiek tiek į 1.
Ir jei aš, arba "" su Ox20, ką aš ketina gauti?
Mažosiomis raidėmis, nes tik ORING "" su Ox20,
Aš tiesiog bus ORING šį vieną tiek į 1, tai jau 1, todėl nesvarbu.
Taigi, mes turime "A" ir "A".
>> Bitinis ir. Vėlgi, mes galime galvoti apie tai, kaip mūsų logiškai ir kolega.
Kairėje pusėje mes turime tikra ir teisinga.
Tai bus teisinga, ir visais atvejais,
klaidinga ir teisinga, ar tiesa ir klaidinga, arba false & klaidinga,
nė vienas iš šių dalykų yra tiesa.
Taigi, ką mes galų gale gauti 1000.
Taigi, dabar, čia, čia, kur aš naudojamas patikimas Bitinis ne,
kur mes turėjome Ox20.
Taigi tai yra Ox20.
Dabar tai, ką noriu daryti, Bitinis ~ iš Ox20.
Tai vyksta apversti visus bitus.
Taigi turiu 1101, 1111.
Ir taip "" anded su ~ Ox20 ketina duoti man, ką?
Tik tiek mums tikrai reikia galvoti apie tai, tai viena,
nes jei visi šie bitai yra nustatyti 1,
tada mes ketiname gauti būtent tai, kas "buvo
išskyrus, galbūt, ką šis bitas yra.
Nes jei tai buvo 1, dabar jis bus nustatytas į 0,
nes kokia tai, anded su tai bus 0.
Taigi, kas yra "A" ir ~ Ox20 ketina duoti man?
[Studentai atsakyti, nesigirdi] >> O kas yra "" ir - tai "A".
Ir kas yra "" & ~ Ox20 ketina duoti man?
"A." Kadangi tai yra šiuo metu 1.
Anding su šiuo 0 ketina padaryti tai 0,
ir dabar mes ketiname gauti "A".
>> Abu yra "", ir paskutinis, bet ne mažiau kaip tokio tipo,
mes turime XOR. Tai labai panašus arba
išskyrus tai reiškia tik arba.
Tai, ką jūs paprastai galvojame, kaip ir realiame pasaulyje.
Taigi, jūs arba "x" ar "y", o ne abu.
Čia 1 ^ 1 bus 0.
Kadangi tiesa, tai - jis neveikia, taip pat su logiška true ir false
kaip finansų įstaigos Mokėjimo ir ir arba padaryti,
bet tiesa ^ tiesa yra klaidinga.
Kadangi mes tik norime grąžina true, jei tik vienas iš jų yra tiesa.
Taigi 1 ^ 1 yra 0. Ką apie 0 ^ 1?
Yra 1. 1 ^ 0 yra 1, 0 ^ 0 yra 0.
Taigi visais atvejais, 0 Bitinis kažkas 0 bus 0.
1 Bitinis kažkas 0 arba 0 Bitinis 1,
jei ji | arba ^, tai bus 1, o jei tai ir tai bus 0.
Ir tik tuo atveju, kai 1 Bitinis 1 nėra 1 yra su išskirtiniu ar.
Štai 0110.
Taigi čia dabar, naudojant XOR - todėl mes atgal į 20.
"" ^ Ox20 yra šių 2 bitai mes palyginti.
Taigi 1 ^ 0 ketina duoti man, ką? Vienas.
"" ^ Ox20 ketina duoti man? Mažosiomis raidėmis.
"" ^ Ox20 ketina duoti man? Kapitalo A.
Nes viskas, ką šis daro, tai XORing su Ox20
veiksmingai prakeiktas ką šis bitas yra.
Jei tai yra 0, tai dabar taps 1.
Kadangi tai yra 1, 1 ^ 1 yra 0.
Taigi, mūsų "" tapo "", o mūsų '"tapo" ".
Taigi XOR yra tikrai patogus būdas tik prakeiktas bylos.
Jūs tiesiog norite pakartoti per raidžių eilutę
ir pakaitomis į kiekvieną simbolį bylą,
jūs tiesiog XOR viskas su Ox20.
>> Dabar mes palikome pamainą. Kairysis SHIFT yra tik ketina, iš esmės,
stumti visus numerius į, ar į kairę, ir įdėkite 0 aisiais už jų.
Taigi čia mes turime 00.001.101.
Mes ketiname siekti 3 0 anketa iš dešinės,
ir mes 01.101.000.
Be nonbinary požiūriu,
matome, kad tai tikrai susiduriame 13 kairę persikėlė su 3, kuris suteikia mums 104.
Taigi kairėje perjungimas, matome čia x << y yra iš esmės x * 2 ^ m.
13 * 2 ^ 3, 2 ^ 3 yra 8, tai 13 * 8 yra 104.
Jei tiesiog galvoti apie dvejetainius apskritai, kaip kiekvienas skaitmuo,
jei mes pradėsime iš dešinės, tai 1 vieta, tada 2 vieta, tada 4 vieta.
Taigi stumdami 0 aisiais iš dešinės
mes tiesiog stumia dalykus, kurie buvo į 4 vietą į 8 vietą,
ir tai, kad buvo ir su 8 vietą su 16 vietą.
Kiekvieną pamainą tiesiog daugina iš 2. Taip?
[Studentų] Kas atsitinka, jei pastumiama 5?
[Bowden] Jei atitraukiama 5 jums tiesiog prarasti skaitmenų.
Neišvengiamai, tai tas pats. Kaip, sveikieji skaičiai yra tik 32 bitų,
todėl, jei jūs įtraukiate 2 tikrai didelius sveikuosius skaičius, jis tiesiog netelpa į sveikasis skaičius.
Taigi, tai tas pats čia. Jei atitraukiama 5,
mes tiesiog prarasti, kad vienas.
Ir tai tipo, ką reiškia "beveik"
kur, jei jums pereiti per toli, jūs prarasite bitai.
>> Teisė perėjimas bus atvirkščiai,
kur mes einame įgrūsti 0 išjungta, galų gale,
ir mūsų tikslais, užpildykite 0 aisiais iš kairės.
Taigi, kaip tai padaryti, mes iš esmės eigos, ką mes jau padaryta.
Ir mes matome, kad trys 0 naujo dešinėje ką tik nenukrito,
ir mes jau stumdosi 1101 visą kelią į dešinę.
Tai daro 104 >> 3, kuris yra efektyviai, x / 2 ^ m.
Taigi, dabar, čia, tai panaši idėja.
Kodėl tai tik grubiai x / 2 ^ m, o ne iš tikrųjų x / 2 ^ y?
Nes jei aš atitraukiama 4, būčiau prarado 1.
Iš esmės, ką galvoti, tiesiog manau, sveikasis skaičius pasidalijimas apskritai.
Taigi, pavyzdžiui, 5/2 yra 2. Tai ne 2,5.
Tai pati idėja čia. Kai mes padalinti iš 2,
mes galime prarasti nelyginis bitai pakeliui.
Taigi dabar - viskas už Bitinis. Tai viskas, ką reikia žinoti.
Prisiminti naudojimo atvejais matėme klasėje,
kaip tiek kaukė naudinga Bitinis operatorių,
ar jūs juos naudoti bitų kaukes.
Didžiosios raidės ir mažosios raidės, perdirbimas yra gana prototipu pavyzdys.
>> Gerai, kad buferio perpildymo atakų.
Kas nors prisimena, kas buvo negerai su šia funkcija?
Atkreipkite dėmesį, mes paskelbėme apie 12 baitų masyvas, 12 simbolių,
ir tada mes nukopijuoti į mūsų buferis 12 simbolių visą eilutę baro.
Taigi, kas yra problema čia?
Magiškas skaičius 12 turi gana daug iš karto iškrenta kaip - Kodėl 12?
Ką daryti, jei juosta būna, kad daugiau nei 12 simbolių?
Ką daryti, jei juosta yra milijonai simbolių?
Čia klausimas yra memcpy. Jei juosta yra pakankamai ilgas,
tai bus tik visiškai - "c", "c" nerūpi, kad tai buvo tik 12 simbolių;
"C" nerūpi, kad ji netelpa, kad daug baitų.
Jis tiesiog visiškai perrašyti char, kad 12 baitų mes skirti už jį,
ir viskas pro jį atmintyje, kad iš tikrųjų nėra priklauso tai buferio
su kokia eilutė baras.
Taigi tai buvo vaizdas matėme klasės
kur mes turime kamino auga.
Jūs turite būti naudojami šių nuotraukų ar susipažinti su jais dar kartą.
Mes turime kamino auga, atminties adresai prasideda 0 viršuje
ir augti žemyn patinka 4 milijardus apačioje.
Mes turime masyvo "c" kažkur atmintyje,
tada mes turime žymiklį Baras teisė po juo,
ir tada mes turime šį išsaugotą kadro rodyklės mūsų atgalinio adreso ir mūsų pagrindinė rutina savo kamino.
Prisiminti, ką atgalinis adresas yra?
Tai kai pagrindinis vadina funkcija foo ragina funkciją juostą,
neišvengiamai, baras grąžą.
Taigi, kai baro grįžta, jie turi žinoti, kad jis grįžta į foo, kad pavadino jį.
Taigi, atgalinis adresas yra funkcija, kad ji adresas grįžti kada funkcija grąžina.
Todėl, kad tai svarbu, buferio perpildymo atakų yra todėl, patogiai
hakeriai norite pakeisti tą atgalinį adresą.
Vietoj grįžta į foo, aš ruošiuosi grįžti ten, kur įsilaužėlis nori man grįžti.
Ir, patogiai, kur hakeris dažnai nori grįžti į
yra buferio, kad mes iš pradžių turėjo pradžia.
Taigi pastebėti, vėlgi, Little Indian.
Prietaisas yra iš Mažosios Indijos sistemos pavyzdys,
taip sveikasis skaičius arba rodyklė saugomi su baitais poliais.
Taigi čia matome - tai yra? Taip.
Matome Ox80, OxC0, Ox35, OxO8.
Prisiminti šešioliktainius skaitmenis?
Mes neturime atvirkštinės šešioliktainius skaitmenis Little Indian,
nes 2 šešioliktainius skaitmenis sudaro vieną baitą, ir mes pakeisti baitų.
Štai kodėl mes ne aukštesnėje, kaip, 80530CO8.
Mes saugoti, vietoj to, kiekvieną 2 skaitmenų pora, pradedant iš dešinės.
Kad adresas nurodo pradžios adresą
mūsų buferis, kad mes iš tikrųjų norėjo nukopijuoti į pirmąją vietą.
Todėl, kad tai naudinga, nes ką daryti, jei užpuolikas
atsitiko, užuot eilutę, kuri buvo ką tik
nekenksmingas eilutę kaip, jų pavadinimas ar kažkas,
ką daryti, jei, vietoj to, kad eilutė buvo tik keletas abejotinam kodui
kad padarė viską, ką norėjo, kad ji daryti?
Taigi, jie gali - Aš negaliu galvoti apie bet vėsioje kodą.
Tai gali būti bet kas, nors. Bet katastrofiškas kodas.
Jei jie nori, jie gali tiesiog padaryti kažką ne SEG gedimus, bet tai būtų beprasmiška.
Jie paprastai padaryti jį nulaužti savo sistemą.
>> Gerai. CS50 biblioteka.
Tai, iš esmės, getInt, getString, visi šios funkcijos mes Jums pateikti.
Taigi, mes turime char * string, ir tai abstrakcija, kad mes susprogdino toli
tam tikru metu semestro klausimu.
Atminkite, kad eilutė yra tik simbolių masyvas.
Taigi čia matome sutrumpintą versiją getString.
Jūs turėtumėte pažvelgti atgal į jį prisiminti, kaip jis iš tiesų įgyvendinti.
Pagrindiniai duomenys yra, pastebėsite, mes gauname vieną simbolį vienu metu
nuo standartu, kuris yra kaip mums rašyti į klaviatūrą.
Taigi vieną simbolį vienu metu, ir jei mes per daug simbolių,
todėl, jei n + 1 yra didesnis nei pajėgumų,
tada mes turime didinti savo buferio talpą.
Taigi čia mes padvigubinti mūsų buferio dydį.
Ir tai nuolat vyksta, mes įterpti simbolį į mūsų buferis
kol mes gausime naują eilutę ar failo pabaigą ar kas,
Tokiu atveju, mes baigsite su eilutę ir tada realus getString
traukiasi atmintį, pavyzdžiui, jei mes skiriama per daug atminties jis bus grįžti ir trauktis truputį.
Taigi, mes rodo, kad ne, tačiau pagrindinė idėja yra
jis turi skaityti vienas simbolis vienu metu.
Jis gali ne tik skaityti visą dalyką vienu metu,
nes jų buferis yra tik tam tikro dydžio.
Taigi, jei seka, kad jis bando įterpti į buferį yra per didelis, tada jis būtų perkrautas.
Taigi čia mes užkirsti kelią, kad tik skaityti vieną charakterį
tuo metu ir auga kai mes turime.
Taigi getInt ir kiti CS50 bibliotekos funkcijas linkę naudoti getString
jų diegimas.
Taigi, aš pabrėžė svarbius dalykus čia.
Ji ragina getString gauti eilutę.
Jei getString negrąžino atminties,
prisiminti, kad getString mallocs kažką, todėl kai tik galite skambinti getString
jūs neturėtumėte (neįskaitomai) nemokamai, kad seka, kad jūs turite.
Taigi čia, jeigu jai nepavyko malloc kažką, mes grįžtame INT_MAX kaip tik vėliavą,
ei, mes ne iš tikrųjų galėtų gauti sveikąjį skaičių.
Jūs turėtumėte ignoruoti, ką aš sugrįšiu pas tave, arba
jūs neturėtumėte laikyti tai galiojantį įėjimo.
Galiausiai, darant prielaidą, kad pavyko, mes naudojame sscanf su šia specialia vėliava,
o tai reiškia, pirmosios rungtynės sveikasis skaičius,
tada atitiktų bet kokius simbolius po to sveikojo skaičiaus.
Taigi pastebėsite mes norime, kad ji lygi 1.
Taigi sscanf grįžta kiek atitikmuo, jei sėkmingai padarė?
Jis grįš 1, jei jis sėkmingai atitiko sveikasis skaičius,
jis grįš 0, jei jis neatitiko sveikasis skaičius, ir jis grįš 2
jei ji atitiko sveikasis skaičius po tam tikru simboliu.
Taigi pastebėsite mes pakartoti, jei mes atitiktų nieko, bet 1.
Taigi, jei mes įrašytas 1, 2, 3, C arba 1, 2, 3, X,
tada 1, 2, 3 gaus saugomi sveikojo skaičiaus,
X gaus saugomi pobūdžio,
sscanf sugrįš 2, ir mes norėtume pakartoti, nes mes tik norime sveikasis skaičius.
>> Greitai pučia per HTML, HTTP, CSS.
Hypertext Markup Language yra struktūra ir semantika iš interneto.
Štai pavyzdys iš paskaitos, kurioje mes turime HTML žymes.
Mes turime galvos žymeles, kūno žymes
mes turime pavyzdžių, tuščių žymeles, kur mes iš tikrųjų neturi pradžios ir glaudžiai tegus,
mes tiesiog nuorodą ir įvaizdį.
Nėra uždarymo paveikslėlio žymelę, ten tik vienas tegus kad įvykdo viską tegus reikia daryti.
Ryšys yra pavyzdys, mes pamatyti, kaip jums nuorodą į CSS,
Scenarijus, kaip jums nuorodą į išorinį JavaScript pavyzdys.
Tai gana paprasta, ir nepamirškite, kad HTML nėra programavimo kalba.
Čia prisimenu, kaip jūs nustatyti formą arba bent jau kas tai darys?
Tokia forma yra veiksmų ir metodą.
Metodai bus tik kada nors matyti yra GET ir POST.
Taigi gauti yra versija, kur dalykas bus įdėti į URL.
PO, kur ji nėra įdėti į URL.
Vietoj to, bet iš formos duomenų įterpiamas daugiau paslėptas HTTP užklausos.
Taigi čia, veiksmo apibrėžia kur HTTP užklausa eina.
Kur jis vyksta yra google.com / paieškos.
Metodas. Prisiminti tarp GET ir POST skirtumus,
ir tiesiog pasakyti, kaip, pavyzdžiui, jei norite žymę kažką.
Jūs niekada galės žymę POST URL
nes duomenys nėra įtraukti į URL.
>> HTTP, dabar yra hiperteksto perdavimo protokolas.
Hiperteksto perdavimo protokolas, galima tikėtis, kad ji perkelti
Hypertext Markup Language, ir ji veikia.
Tačiau ji taip pat perduoda visus vaizdus jums rasti internete,
bet parsisiųsti galite padaryti pradėti kaip HTTP užklausos.
Taigi HTTP tik iš World Wide Web kalba.
Ir čia reikia pripažinti šią HTTP prašymą natūra.
Čia HTTP/1.1 pusėje tiesiog sako tai versija
protokolo aš naudoju.
Tai gana daug, visada bus HTTP/1.1, kaip jūs jį pamatyti.
Tada mes matome, kad tai buvo GET, alternatyva yra POST, kad jūs galite pamatyti.
Ir adresą, kad aš bandžiau aplankyti buvo www.google.com/search?q = bla, bla, bla.
Taigi, nepamirškite, kad tai, klaustukas q = blah blah blah,
yra daiktų, pateiktų pagal forma rūšiuoti.
Atsakas gali grįžti į mane atrodytų kažką panašaus į tai.
Vėlgi, pradedant nuo protokolo, kuris ketina būti, kad
Po būsenos kodą. Čia tai 200 Gerai.
Ir, pagaliau, interneto puslapis, kuriame aš iš tikrųjų paprašė bus laikomasi.
Galimas statusas kodas galite pamatyti, ir jūs turėtumėte žinoti keletą iš jų.
200 Gerai jūs tikriausiai matė anksčiau.
403 Forbidden, 404 Not Found, 500 vidinė serverio klaida
paprastai, jei jūs einate į svetainę, ir kažkas tai susmulkintos arba jų PHP kodas sugenda,
kadangi, atsižvelgiant į prietaiso turime, kad didelis Orange Box
kad ateina ir sako, pavyzdžiui, kad kažkas yra negerai, šis kodas neveikia
ar ši funkcija yra blogai.
Paprastai svetainių nenoriu žinoti, ką veikia tikrai neblogai,
todėl vietoj jie tiesiog suteikti jums 500 vidinė serverio klaidos.
>> TCP / IP yra 1 sluoksnis pagal HTTP.
Atminkite, kad yra internetas ne iš World Wide Web.
Pavyzdžiui, jei jums žaisti online žaidimas, kuris neturi eiti per HTTP,
jis išgyvena kitoks - jis vis dar naudojasi internetu,
bet jis nenaudoja HTTP.
HTTP yra tik vienas pavyzdys, protokolo pastatytas ant TCP / IP.
IP pažodžiui reiškia "Internet Protocol.
Kiekvienas kompiuteris turi IP adresą, jie yra tie 4 skaitmenų dalykai
kaip 192.168.2.1 ar kas, kad yra linkęs būti vietinis.
Bet tai IP adreso modelis.
Taigi, DNS, Domain Name Service,
kad tai, ką reiškia tokie dalykai kaip google.com realų IP adresą.
Taigi, jei rašote, kad IP adresą į URL,
kad būtų tave "Google", tačiau nėra linkę prisiminti tuos dalykus.
Jūs linkę vietoj prisiminti google.com.
Paskutinis dalykas, mes turime, yra uostai, jei tai yra TCP IP dalis.
TCP ar daugiau. Pagalvokite apie, pavyzdžiui, jūs turite savo interneto naršyklės veikimą.
Gal turite kokių nors pašto programa veikia;
O gal jūs turite kokį nors kitą programą, kuri naudoja interneto veikia.
Jie visi turi prieigą prie interneto,
bet jūsų kompiuteris turi tik 1 WiFi kortelę ar whatever.
Taigi uostai yra taip, kad mes galime padalinti
kaip šios paraiškos gali naudotis internetu.
Kiekviena paraiška gauna 1 konkretų uostą, kad jis gali klausytis,
ir pagal nutylėjimą, HTTP naudoja portą 80.
Kai kurie elektroninio pašto tarnybos naudoja 25.
Žemos sunumeruoti tie linkę būti saugomos.
Jūs paprastai galima gauti didesnės sunumeruoti tie patys.
>> CSS, Cascading Style Sheets.
Mes stiliaus tinklalapius su CSS, o ne HTML.
Yra 3 vietos galite įdėti savo CSS.
Jis gali būti Inline tarp stiliaus žymeles, arba visiškai atskirą failą ir tada susieti in
Ir čia yra tik CSS pavyzdys.
Jūs turite pripažinti, šį modelį,
kur pirmasis pavyzdys mes atitikimo kūno tegus,
ir čia mes centravimo kūno tegus.
Antrasis pavyzdys, mes suderinimo dalykas
su ID apačią, ir mes taikant kai stilių, kad.
Atkreipkite dėmesį, kad asmens tapatybės poraštės teksto suderina į kairę,
o tekste-išlygina centras.
Apačia yra kūno viduje.
Ji, priešingai, text-align į kairę, nors kūnas sako text-align centrą.
Tai visa pakopinių dalis.
Jūs galite turėti - galite nurodyti stilių kūno,
ir tada viskas organizme galite nurodyti daugiau konkrečių stilių,
ir viskas veikia taip, kaip tikitės.
Labiau specifiniai CSS specifiers viršesnės.
Manau, kad viskas.
>> [Ali Nahm] Sveiki visi. Jei aš galėčiau tik gauti jūsų dėmesį.
Aš Ali ir aš ruošiuosi eiti per PHP ir SQL tikrai greitai.
Taigi, mes galime pradėti. PHP yra trumpas PHP: Hypertext Preprocessor.
Ir kaip jūs visi turėtumėte žinoti, tai server-side scripting language,
ir mes ją naudoti nugaros pabaigoje interneto svetainėse,
ir kaip jis atlieka daug skaičiavimų, už-scenos dalis daug.
Sintaksė. Tai nėra, kaip C, staigmena, siurprizas.
Jis visada turi prasidėti, jei matote, - aš negaliu judėti į priekį.
Jūs galite pamatyti, jums reikia naujų rūšių petnešos ir tada jums taip pat reikia? Php.
Tai visada, kaip jums reikia įrėminti PHP tekstą, savo PHP kodą.
Taigi jis gali būti ne tik kaip C, kur rūšies įdėti jį pirmas.
Jūs turite visada aplink jį.
Ir dabar pagrindinis sintaksė yra tai, kad visi kintamieji turi pradėti su $ ženklu.
Ką jums reikia padaryti, kai jūs juos apibrėžiant; jums reikia padaryti, tai
kai jūs kalbate su jais vėliau.
Jūs visada reikia, kad $. Tai jūsų naujas geriausias draugas, gana daug.
Jūs neturite - skirtingai nei C, jums nereikia įdėti kokia kintamojo tipo, ji yra.
Taigi, nors jūs turite $, jums nereikia įdėti, pavyzdžiui,
int x arba eilutė y taip toliau, taip toliau.
Taigi, šiek tiek skiriasi.
Kaip šio rezultato, tai reiškia, kad PHP yra silpnai tipo.
PHP yra silpnai tipo kalba, ir ji silpnai įvedėte kintamuosius.
Kitaip tariant, tai reiškia, kad jūs galite perjungti įvairių kintamųjų tipus.
Galite išsaugoti savo numerį 1 kaip int,
jūs galite laikyti jį kaip eilutę, ir jūs galite laikyti jį kaip plūdės,
ir viskas bus, kad numeris 1.
Net jei jūs ją saugoti įvairių formų,
jis vis dar - kintamasis rūšys vis dar turintis pabaigos.
Taigi, jei jums atrodo čia, jei pamenate iš pset 7,
daugelis iš jūsų tikriausiai turėjo problemų su šiuo klausimu.
Dvi lygios ženklai, 3 lygių požymiai, 4 lygių požymiai.
Gerai, nėra 4 lygių požymių, bet yra 2 ir 3.
Galite naudoti 2 lygias ženklus patikrinti vertybes.
Tai galite patikrinti per tipams.
Taigi, jei jūs galite pamatyti pirmajame pavyzdyje,
Turiu num_int == num_string.
Taigi jūsų int ir jūsų eilutė yra tiek techniškai, 1,
bet jie skirtingų rūšių. Tačiau dvigubas lygių, tai bus dar praeiti.
Tačiau trigubų lygiųjų, jis pasitikrina vertę, taip pat įvairių rūšių.
Tai reiškia, kad jis nesiruošia perduoti toje Antruoju atveju čia
kur jūs naudojate 3 lygias ženklus vietoj.
Štai esminis skirtumas, kad jūs visi turėtų parodė dabar.
>> Styginių sąryšis yra dar vienas galingas dalykas, kad jūs galite naudoti PHP.
Tai iš esmės tik tai patogus taškas ženklinimą,
ir tai, kaip galite susieti eilutes kartu.
Taigi, jei turite katę, ir jūs turite šunį, ir jūs norite įdėti 2 eilutes kartu,
galite naudoti laikotarpį, o tai tipo kaip ji veikia.
Jūs taip pat galite tiesiog įdėti juos šalia vienas kito,
kaip matote čia, apačioje, pavyzdžiui,
kur aš echo eilutę 1, tarpo eilutę 2.
PHP žinosite pakeisti juos tokiais.
Masyvai. Dabar, PHP, yra 2 skirtingų rūšių matricos.
Jūs galite turėti reguliariai masyvus, ir jūs taip pat gali turėti Association matricos,
ir mes ketiname eiti per juos dabar.
Nuolatinis matricos yra tik tai C,
ir todėl jūs turite indeksai, sunumeruoti.
Dabar mes tik ketina sukurti vieną ir įdėti -
todėl tai, kaip mes sukurti tuščią masyvą, tada mes ketiname
įdėti į indekso numeris 0.
Mes ketiname įdėti numeris 6, reikšmę 6.
Galite pamatyti jį apačioje čia.
Where's - ne indekso numerį 1 mes ketiname įdėti vertė metų skaičių 4,
ir todėl jūs galite pamatyti ten 6, yra 4,
ir tada kaip mes spausdinti dalykus,
kai mes bandome ir atspausdins reikšmę, saugomą indekso numerį 0,
tada mes pamatysime vertės 6 yra atspausdintas. Kietas?
Štai įprastas matricos jums.
Kitas būdas galite taip pat pridėti dalykų reguliariai masyvų dabar
tai galite tiesiog pridėti juos pabaigoje.
Tai reiškia, kad jūs neturite nurodyti konkretų indeksą.
Jūs galite pamatyti skaičių, tada laužtiniuose skliaustuose nėra nurodyta indeksas.
Ir tai žino - PHP žinos tik pridėti jį prie sąrašo, kitam vietos pabaigos.
Taigi galite pamatyti 1 teisę ten tuo 0 vietoje,
2 nuskriejo tiesiai ten pirmą vietą.
3 eina - papildoma ten taip pat.
Taigi, kad šios rūšies prasmę. Jūs tiesiog nuolat pridedant jį,
ir tada, kai mes pakartodamas skaičiaus 1 puslapis,
jis bus išspausdinti vertę 2.
>> Tada mes turime masyvus, kurie Association masyvai.
Association masyvai, o turintys skaitmeninius rodiklius,
kas jie yra, jie turi indeksus, kurie pagal eilutę.
Jūs galite pamatyti, o ne - aš atsikratė visų tų skaičių rodiklių,
ir dabar atėjo key1, key2, Key3, ir jie tarp dvigubų kabučių, reiškia, kad jie visi stygos.
Taigi, mes galime turėti, šiame pavyzdyje.
To pavyzdys yra tai, kad mes turime tf, ir tai puslapis, pavadinimas.
Mes ketiname daryti "Ali", kaip pavadinimas, tuo indeksu, kalorijų valgyti,
mes galime įdėti int šį kartą vietoj eilutę,
ir tada indekso patinka, mes galime įdėti visą spektrą jo viduje.
Taigi tai yra natūra - tai panaši sąvoka kaip mes turėjome
indeksai su skaičiais, bet dabar mes galime pakeisti indeksus aplink
juos kaip stygos, o ne.
Jūs taip pat galite tai padaryti, be to, tik tai daryti atskirai,
jūs galite padaryti jį visą į vieną gabalą. Taigi, galite matyti, kad masyvo, tf,
ir tada mes nustatome juos visus į vieną milžinišką kvadratinį apkabos rinkiniu.
Taigi, kad gali pagreitinti.
Tai daugiau stilistinės pasirinkimas nei ne.
Mes taip pat turime kilpas.
C mes turime kilpas, kad darbas, kaip šis.
Mes turėjome savo masyvą, ir mes nuėjome nuo 0 indekso sąrašo pabaigoje,
ir mes spausdinti visus, tiesa?
Išskyrus problema yra, Association masyvai,
mes nebūtinai žinome tuos skaitmeninius rodiklius
nes dabar mes turime styginių indeksus.
Dabar mes naudojame foreach kilpos, kurios, vėlgi, jūs, tikiuosi, naudojamų pset 7.
Foreach kilpos bus tiesiog žinau, kiekvieną dalį, sąrašą.
Ir tai nebūtinai turi tiksliai žinoti, skaitmeninis indeksas, kad jūs turite.
Taigi, jūs turite foreach sintaksė, todėl foreach, jūs įtraukėte masyvo.
Taigi, mano matrica vadinama pset, tada kaip, žodį kaip,
ir tada įdėti šią vietos laikiną kintamąjį, kad jūs ketinate naudoti
tik konkretaus daikto, kad ketina surengti specifinis -
vienas egzempliorius arba vieną skyrių masyvo.
Pset skaičius rengs 1, tada gal eis skaičius 6,
ir tada jis laikys numerį 2.
Bet tai garantuoja, kad eiti per kiekvieną vertės, kad yra masyve.
Naudingos funkcijos, kad jums reikia žinoti, PHP yra reikalaujama,
kad leidžia užtikrinti, kad jūs taip pat tam tikrus failus, echo, išeiti, tuščias.
Aš labai rekomenduoju jums pažvelgti pset 7 ir pažvelgti šių funkcijų.
Galbūt turite žinoti tiems,
todėl aš tikrai žinau, kas, būtent, tie visi daro.
>> O dabar mes ketiname eiti per apimtį tikrai greitai.
Apimties, PHP yra natūra funky dalykas, skirtingai nuo C
ir todėl mes tiesiog ketinate eiti per jį greitai.
Taigi galime sakyti, kad mes pradėti tuo rodyklę, kad mes turime ten.
Ir mes ketiname pradėti $ i. Taigi kintamojo "i" bus 0,
ir mes tik ketina išlaikyti spausdinimo jį, kad didelis baltas langas ten.
Mes ketiname pradėti I0, ir tada mes ketiname pakartoti jį.
Taigi, čia yra 0.
Ir tada mes ketiname prieaugio jį už kilpos,
ir tada tai bus vertė 1.
Vienas iš jų yra mažesnis nei 3, todėl jis ketina kirsti, kad linijos,
ir tada mes ketiname pamatyti vėl spausdinti.
Mes ketiname prieaugio jį vėl 2,
ir 2 yra mažesnis nei 3, todėl jis bus perduoti už linijos, ir jis bus išspausdinti 2.
Tada jums dėmesį, kad 3 yra ne mažesnis kaip 3, todėl mes išeiti iš už linijos.
Taigi dabar mes jau išėjo, tada mes ketiname eiti į Nutraukimas funkcijos.
Gerai. Taigi jūs turite pažymėti, kad šis kintamasis, mes sukūrėme,
"i" kintamasis, yra ne vietoje scoped.
Tai reiškia, kad tai nėra vietos ir kilpos,
ir kad kintamasis mes vis dar galite prisijungti ir keisti po to, o ji vis dar bus veiksminga.
Taigi, jei jūs einate į funkciją dabar pamatysite, kad mes taip pat naudoti "i" kintamasis,
ir mes ketiname prieaugio "i" + +.
Jūs, manyčiau, pirmiausia, remiantis C, kad tai, kad "i" kintamasis kopija.
Tai visiškai skirtingas dalykas, kuris yra teisingas.
Taigi, kai mes jį atspausdinti, mes ketiname spausdinti "i" + +, kuri ketinate spausdinti, kad 4,
ir tada mes ketiname - atsiprašau.
Tada mes ketiname baigti iš tos funkcijos,
ir mes ketiname būti ten, kur, kad rodyklė yra dabar.
Tai reiškia, kad po to, tačiau, nors funkcija pasikeitė "i" reikšmė,
jis nesikeitė ne funkcija,
nes funkcija turi atskirą taikymo sritį.
Tai reiškia, kad, kai mes echo "i", ji negali keisti atsižvelgiant į funkcijos taikymo sritį,
ir taip, tada mes ketiname vėl spausdinti 3.
Įvairių dalykų apie taikymo sritį PHP nei C
>> Dabar PHP ir HTML.
PHP yra naudojama, kad tinklalapiai dinamiškas.
Jis rūšies daro ką skiriasi.
Mes turime ji skiriasi nuo HTML.
Su HTML, mes visada tik turėti tą patį statinį dalyką, pavyzdžiui, kaip Rob parodė,
o PHP, galite pakeisti dalykus pagal tai, kas yra vartotojas.
Taigi, jei aš turiu tai, aš, "Jūs esate prisijungęs kaip -" o po to vardas,
ir aš galiu pakeisti pavadinimą. Taigi dabar vardas Juozapas,
ir ji turi "apie mane", bet tada aš taip pat gali pakeisti pavadinimą, kad Tommy.
Ir tai būtų kitas dalykas.
Taigi mes taip pat galime keisti įvairių dalykų apie jį,
ir jis bus parodyti kitokį turinį remiantis pavadinimu.
Taigi, PHP gali natūra pakeisti tai, kas vyksta jūsų svetainėje.
Tas pats čia. Vis dėlto pažymi, kad jie turi kitokį turinį,
net jei yra techniškai dar susipažinimo tą patį tinklalapį ant paviršiaus.
Generatoriniai HTML. Yra 2 skirtingų būdų, kad galite tai padaryti.
Taigi mes pereiti per šią teisę dabar. Pirmasis būdas yra, jūs turite - taip, atsiprašau.
Taigi, jums tereikia savo Regular kilpa PHP programavimo kalba,
ir tada echo PHP ir jums echo iš HTML.
Naudojant kas Rob jums parodė, HTML scenarijų
ir tada naudojant PHP spausdinti tiesiog atsispausdinti jį į tinklalapį.
Alternatyvus būdas yra daryti taip, jei atskirti PHP ir HTML.
Taigi jūs galite turėti PHP eilutę, kuri prasideda už linijos,
tada jums gali turėti HTML eilutę atskiroje dalykas,
ir tada baigti kilpą, vėl su PHP.
Taigi, tai tipo atskirti jį.
Kairėje pusėje, jūs galite, kad turite visus -
tai tik 1 riekė PHP.
Dešinėje matote, kad jūs turite PHP linija,
turite HTML liniją, ir jūs turite PHP replikos.
Taigi, atskiriant jį į tai, ką jie daro.
Ir jums dėmesį, kad bet kuriuo atveju, už vieną iš jų,
jie vis dar atsispausdinti paveikslėlį, vaizdo, vaizdo,
kad HTML dar atspausdintas tokiu pačiu būdu.
Ir tada jūs vis dar galėsite pamatyti 3 vaizdai rodomi jūsų svetainėje.
Taigi tai 2 skirtingi būdai daro tą patį.
>> Dabar mes turime formas ir prašymus. Kaip Rob jums parodė,
yra formų HTML, ir mes tiesiog vėjas per tai.
Turite ieškinį ir jūs turite būdą, ir jūsų veiksmai
tipo rodo jums, kur jūs ketinate siųsti, ir metodas ar
tai bus GET arba POST.
Ir GET užklausa, kaip sakė Rob, reiškia, kad jūs ketinate įdėti jį į formą
ir pamatysite, kaip URL, o POST prašymo jūs nematysite į URL.
Taigi, šiek tiek skiriasi.
Tačiau vienas dalykas, kad panašus dalykas
yra tai, kad POST ir GET yra vienodai nesaugus.
Taigi jūs manote, kad tik todėl, kad nematote jį į URL,
tai reiškia, kad žinutė yra saugesnis,
bet jūs vis dar galite pamatyti savo slapukų informaciją, kad jūs siunčiate.
Taigi nemanau, kad apie vieną ar kitą.
Kitas dalykas, reikia pažymėti, kad jūs taip pat turite skyriuje kintamuosius.
Vaikinai naudoti tai pset 7 gauti savo vartotojo ID informacija.
Kas nutiko, kad jūs galite naudoti šį masyvą,
$ _SESSION, ir tada Jūs galėsite prieiti prie skirtingų dalykų
ir laikyti skirtingus dalykus visoje puslapių.
Paskutinis >> dalykas yra tai, kad mes turime SQL, struktūrizuotų užklausų kalbą,
ir tai yra programavimo kalba, valdyti duomenų bazes.
Kas tiksliai yra duomenų bazės? Jie kolekcijos stalų,
ir kiekviena lentelė gali turėti panašių rūšių objektus.
Taigi mes turėjome vartotojų lentelę jūsų finansų pset.
Ir kodėl jie naudingi? Nes tai iš nuolat saugoti informaciją būdas.
Tai sekimo dalykus ir valdyti dalykų būdas
ir iš tikrųjų matyti, kad skirtingų puslapių ir sekti.
Kadangi, jei jūs tiesiog laikyti jį, kad vienas iš karto metu
ir tada naudokite jį vėliau, jūs negalėsite prisijungti prie nieko, kad jūs išsaugojote.
Mes turime 4 pagrindinių dalykų, kad mes naudojame SQL komandas.
Mes turime pasirinkti, įterpti, ištrinti ir atnaujinti.
Tai yra tikrai svarbu, kad jus vaikinai žinoti jūsų viktorinoje.
>> Mes greitai pereiti pasirinkite dabar.
Iš esmės, jūs pasirinkdami eilučių iš duomenų bazės.
Taigi, jei turite, čia -
mes turime šiuos 2 skirtingus dalykus, ir mes norime, kad pasirinktumėte iš klasių lentelę
kur nuostabus - kur nuostabus stulpelio reikšmė yra 1.
Taigi galite pamatyti čia, mes turime šiuos 2 dalykus klasės pavadinimas,
CS50 ir Stat110, ir mes turime klasės ID ir šūkį.
Taigi, mes norime pasirinkti visus tos informacijos.
Tada jūs galite pamatyti čia, kad tai rūšies skinti iš tos nuostabus skiltyje
kur visi dalykai yra 1, tada ji turi identifikatorius klasės, klasės pavadinimą ir šūkį, kad gali pasirinkti iš.
Kaip tiksliai tai padaryti kodą? Jūs turite naudoti PHP.
Taigi, tai tipo kaip PHP ir SQL yra susiję vieni su kitais.
Dabar mes turime kodą, ir mes ketiname naudoti mūsų užklausos funkcija
kaip tai darėme pset 7, ir mes ketiname paleisti SQL užklausą.
Tada mes ketiname turėti -
mes visada turime patikrinti, ar eilės numeriai trigubas lygi, jei klaidinga.
Taigi dar kartą, jūs norite patikrinti rūšį ir vertę,
ir tada, jei jis neveikia, tada jūs norite atsiprašyti, kaip įprasta, kaip tai darėme pset 7.
Priešingu atveju, jūs norite kilpos per visa su tais patogu
foreach kilpos, kad mes tiesiog perėjo.
Dabar, kad mes apsisukimo per ir mes padarėme tai praeityje,
Tarkime, kad mūsų užklausos praėjo, dabar mes turime foreach ciklą.
Ir pirmoje eilėje jis turi, kad čia eilė, čia, tai supakuota.
Ji ketina atsispausdinti visą informaciją, kad jis įgytas.
Taigi jis ketina išspausdinti apačioje "Nori išmokti HTML?"
Tada jis ketina pereiti į kitą eilutę, nes jis baigtas pirmasis už linijos,
ir taip, tada jis ketina spausdinti antroje eilutėje jį,
kuris bus STAT110, Surasti visas akimirkas.
>> Ir paskutinis dalykas yra SQL pažeidžiamumų.
Žinau Davidas palietė šis šiek tiek per paskaitą.
Galite skaityti tai vėliau. Tai tikrai juokinga.
SQL injekcija yra keblus dalykas natūra.
Tarkime, kad jūs tiesiog klijuoti tuos kintamuosius tiesiai į jūsų užklausą,
kaip matote toje pirmoje eilutėje.
Taigi, atrodo gerai, tiesa? Jūs tiesiog išleisti vartotojo vardą
ir slaptažodį į savo SQL užklausą ir norite išsiųsti jį išjungti ir gauti viską, kas yra jūsų duomenų lentelėje.
Tai atrodo gana paprasta. Taigi, tarkim kažkas pasiuntė,
slaptažodžio, tai AR tekstas čia -
iš tiesų turėtų būti raudonas langelis.
Taigi galime sakyti, kad jie įdėti, kad slaptažodį į - tai, ką jie patenka.
Taigi jie išleisti ARBA "1" = 1.
Rūšies kvailas slaptažodį turėti.
Dabar galime tik pakeisti jį, ir jums dėmesį, kad tame SQL užklausoje dabar
jis bus vertinamas kaip visada tiesa, nes jūs dėmesį, kad
galite SQL užklausos pasirinkti visą šią informaciją
arba galite tiesiog 1 = 1.
Taigi, tai visada bus įvertinti true.
Kad nesiruošia tikrai veikia, nes tai reiškia, kad įsilaužėlis gali įsilaužti į jūsų sistemą.
Sprendimas yra tai, kad turite naudoti SKVN sistema,
tai reiškia, kad turite naudoti klaustukų,
o tai, ką jūs vaikinai naudojami pset 7,
kur jūs ketinate naudoti klaustuką vietoj kur norite įdėti ką nors,
ir tada jūs ketinate turėti kablelį, tada turėsite po to,
po savo eilutę, įvairūs kintamieji, kuriuos norite pakeisti į savo klaustuku.
Taigi jums pažymėti, kad čia dabar turiu šiuos raudonos klaustukų.
Tada aš įdėti po mano stygos kintamuosius taip, aš žinau, kad pakeisti juos ta pačia tvarka vėliau.
Tai leis įsitikinti, kad, jei kas nors ją, kaip tai,
ir jie turi arba 1 = 1 situaciją, kad bus įsitikinkite,
iš nugaros pabaigoje, įsitikinkite, kad ji nėra iš tikrųjų nutraukti SQL užklausą.
Gerai, kad yra gana daug, PHP ir SQL viesulas.
Geriausios kloties jums visiems, ir dabar Ore
>> [Oreoluwatomiwa Babarinsa] Gerai visiems. Laikas eiti per tam tikrą JavaScript
ir keletas kitų dalykų, labai greitai, todėl mes negalime turėti jums iki vakarą.
"JavaScript". Taip. JavaScript yra natūra cool dalykas, esą.
Tai, ką jūs iš tikrųjų reikia žinoti apie JavaScript, tai tarsi
kliento pusėje pabaigoje, ką jūsų interneto app ketinate daryti.
Yra keletas dalykų, jūs tiesiog nenorite rūpintis visą laiką serverio pusėje.
Visi mažai sąveika, pabrėžiant vieną dalyką, todėl kažkas dingsta.
Jūs tikrai nenorite turėti pasikalbėti su savo serverio visas tuo metu.
Ir kai tai nėra net įmanoma padaryti serverio pusėje.
Tai kodėl mes turime kažką panašaus į "JavaScript".
Cool dalykų apie "JavaScript": Tai yra dinamiškai įvedėte.
Ką tai reiškia, kad jūsų programa nereikia žinoti
kas, būtent, yra šie kintamieji kai rašote jį.
Tai bus tiesiog tarsi figure it out, kaip jis veikia.
Kitų dalykų, kurie yra kietas apie tai: Tai garbanotas petnešomis kalba,
o tai reiškia, sintaksė panaši į C ir PHP.
Jūs neturite daryti daug perdaryti, kai jūs mokotės JavaScript.
Čia mes turime šiek tiek "JavaScript".
Įdomus dalykas čia yra tai, kad, jei jūs žiūrite į jį,
mes turime JavaScript tiek teisę ten galvos žyma.
Kas yra nėra iš esmės tiesiog įtraukti "JavaScript" failą.
Tai vienas iš būdų, galite įtraukti "JavaScript" į savo programą.
Tada antrasis šiek tiek yra iš tikrųjų kai Inline Javaskriptą,
labai panašus į inline stiliaus su CSS,
ir jūs tik raštu tam tikrą kodą labai greitai ten.
JavaScript turi masyvų.
Tiesiog dar vienas būdas išlaikyti duomenis apie labai naudinga.
Labai malonu ir lengva sintaksė.
Galite naudoti skliaustus prieiti viską ir išlaikyti viskas kartu.
Nieko pernelyg sudėtinga.
The cool dalykas apie JavaScript ir skriptų kalba apskritai
yra tai, kad jūs neturite jaudintis dėl matricų dydžių.
Jūs galite tiesiog naudoti array.length ir sekti juo,
taip pat masyvas gali augti arba mažėti, kaip jums reikia jį.
Taigi jums nereikia net nerimauti bet rūšiuoti,
O ne, man reikia skirti daugiau dalykų, ar ko nors panašaus.
>> Cool dalykas čia yra tai, kad "JavaScript" turi kažką vadinama objektus.
Tai Objektinis kalba, todėl tai, ką ji yra, iš esmės,
būdas jums grupės duomenis kartu, šiek tiek panašus į struct,
, bet jūs galite ja naudotis kaip struct arba masyvą sintaksė.
Tai gana paprasta, ir ką jūs galite padaryti su tai grupė duomenų kartu
jei turite duomenų krūva, kad manimi susijusią.
Nes tai visų dalykų, kuriuos reikia apibūdinti automobilį,
Jums nereikia turėti jį skirtingose ​​vietose krūva.
Jūs galite tiesiog klijuoti jį į 1 objektą JavaScript.
Kaip jūs turbūt žinote, Iteracja yra vienas iš tų varginančių užduotis.
Jūs tiesiog padaryti jį virš vėl. Jums reikia pasikalbėti su kiekvieno objekto į automobilį,
ar jums reikia eiti per kiekvieną sąrašo elementą ar kažką panašaus.
Taigi, "JavaScript" yra panaši į PHP foreach sintaksė.
Šiuo atveju, tai pagal kilpą.
Norite naudoti šį tik objektus.
Yra keletas problemų, kurios atsiranda, jei jūs naudojate tai ant matricos.
Jis paprastai yra vienas iš tų dalykų, nors, kad yra labai naudinga,
nes jums pašalinti važtaraščius daug
nes jūs neturite traukti viską į savo objektą patys.
Jūs neturite prisiminti visus pagrindinius pavadinimus.
Jūs tiesiog tarsi gauti juos atgal šioje sintaksė.
Be to, su, jūs tiesiog norite prisiminti
kad jūs gaunate atgal visus raktus, labai panašiai kaip maišos lentelė.
Jei prisimenate to, kai jūs įdėti į eilutę galite gauti kažką iš
kad būtų susietą vertę su juo.
Ką jūs galite padaryti su tai galite pasakyti, viskas gerai,
Aš įdėti į automobilį, ir aš jį pavadino "Ferrari".
Taigi, galite įdėti į styginių Ferrari dar kartą vėliau, ir jūs galite gauti, kad iš.
Ir jūs galite padaryti, kad kilpa, su į kilpą.
Taigi tik daugiau apie objektus. Svarbiausias dalykas iš to, ką jums reikia prisiminti,
yra tai, kad galite naudoti objekto struct kaip sintaksės, jei norite su jais,
išskyrus atvejus, kai tai, ką jūsų ketina naudoti kaip eilutę yra neteisingas kintamojo vardas.
Taigi, jei jums pažvelgti, kad mes turime raktą su tarpais.
Na, jei jūs įdėti object.key, erdvė, su, erdvė, erdvės,
kad tik nebūtų prasmės sintaksiškai.
Taigi, jūs tik galite padaryti, kad su šio kronšteino sintaksė rūšiuoti.
>> Be to, "JavaScript" yra labai apimtis-protinga PHP.
Jūs turite 2 būdus, kaip spręsti apimtį.
Jūs negalite turėti var priešais kintamąjį,
ir kad tik reiškia, kad tai yra globali.
Galite pamatyti jį iš bet kur. Net jei buvo įdėti šią nuorodą į if,
niekur kitur kodą po šiuo klausimu galima pamatyti, kad kintamasis.
Kitas dalykas, nors tai su var, tai tik kokia funkcija esate in
Jei nesate funkcija, gerai, tai globali.
Bet jei esate funkciją jis matomas tik per tą funkciją.
Aš neturiu pavyzdį, bet taip. Tai vienas iš tų dalykų, kur
galite valdyti ką kintamieji norite būti pasaulinė,
Kokie kintamieji norite būti vietos, bet jūs turite būti atsargūs, apie tai,
nes jūs neturite smulkių grūdelių kontrole, ką daryti C tipo,
kur, jei kažkas yra deklaruota už linijos, jis ketina likti, kad kilpa.
Dalykas, mes iš tikrųjų rūpi, naudojant JavaScript manipuliuoja tinklalapius, tiesa?
Aš turiu galvoje, tai kodėl mes darome tai.
>> Norėdami tai padaryti, mes naudojame kažką vadinama DOM.
Document Object Model.
Iš esmės, ką ji daro, tai trunka visą savo HTML
ir modeliai jį į objektų, kurie yra įdėtos per viena kitai krūva.
Jūs pradedate su kažką panašaus į tai.
Jūs turite, dešinėje man kodo krūva ten tai tarsi -
Galima būtų galvoti, kad būčiau labai sunku manipuliuoti,
nes norite būti apdorojant per teksto krūva
ir turintys gabalas be dalykų. O kas, jei jis nebuvo tinkamai suformatuotas?
Blogi dalykai įvyktų.
Taigi JavaScript rūpinasi tai už jus, ir jūs gaunate gražią duomenų struktūra,
kaip vienas ant mano kairę, kur jūs tiesiog turite dokumentą,
ir viduje, kad jūs turite kažką vadinama HTML
ir viduje, kad jūs turite galvą ir kūną,
ir viduje, kad galvos turite pavadinimą, taip toliau, taip toliau, taip toliau.
Tai supaprastina manipuliuoti tinklalapį, kad tai tik,
oh, aš tik noriu pasikalbėti su šio objekto.
Rūšiuoti labai panašiai taip, kaip norėtumėte pasikalbėti su kito objekto galite padaryti patys.
Kaip ir sakiau, visi DOM yra dokumento objektas.
Bet tai tik viena vieta, ir tada jūs galite eiti per jį rasti dalykų,
ir jūs galite padaryti - tai senas stilius daro, ten,
kur jūs document.getElementById, tada vardas,
ir kaip jūs galite tikriausiai pasakys, tai pasireiškia labai griozdiškas po kurio laiko.
Taigi, jūs tikriausiai nenorite daryti. Štai kodėl mes turime
Kitas dalykas, mes ketiname kalbėti apie po to.
Svarbiausias dalykas čia yra tai, kad viskas gerai, kad turite visus šiuos elementus, tiesa?
Taigi gal aš galiu pakeisti kažką, kai puslapis apkrovoms spalvą.
Na ir kas? Ką daryti, jei mano vartotojas paspaudžia kažką?
Noriu padaryti kažką įdomaus, kai jie paspaudžia kažką.
Štai kodėl mes turime renginius.
Galite iš esmės, rasti bet kokį jūsų DOM elementas,
ir tada sako, ei. Kai tai įkelia ar kas nors jį paspaudžia
arba kai jie pelė per jį, kažką daryti su juo.
O kas jums yra, jūs turite funkcijas, tvarkyti tai už jus.
Šios funkcijos yra renginių krautuvai.
Kas they're - tai tik išgalvotas būdas pasakyti,
ši funkcija vykdoma tik tada, kai šis renginys vyksta.
Taigi ji tvarko renginį, kuris vyksta.
Tai kaip jums būtų išdėstyti įvykio prižiūrėtojas.
Turiu šiek mygtuką, kai jūs spustelėkite, ji sprogsta.
Taigi ne spustelėkite mygtuką.
Tai yra vienas iš būdų artėja, tiesa?
Jūs turite mygtuką tegus, ir spustelėkite turite eilutę, kad sako,
Oh, beje, aš man tai sprogstamasis dalykas.
Priešingu atveju, tai tik kaip įprastas mygtuko ką tik padarė.
Jūs taip pat gali tai padaryti kitu būdu,
greiferiniai DOM elementas, bet mes išsaugosime, kad, kai mes kalbame apie jQuery.
>> JQuery: Tai biblioteka, kuri yra kryžminio naršyklės.
Jūs galite naudoti ją beveik nieko.
Ir tai tik suteikia jums įrankius, dirbti su daug.
Kadangi Javaskriptą, o galingas, neturi visų įrankius, jūs turite
out of the box, kad tikrai kovai web app galbūt norėsite daryti.
Todėl supaprastina dalykų, suteikia Jums daug funkcijų
out of the box, kad galėtumėte paprastai turi rašyti sau, vėl ir vėl ir vėl.
Ir tik daro ką labai paprasta.
Jūs taip pat turite selektoriai, kurie leidžia priimti visus tuos elementus
iš DOM daug daugiau tiesiog, vietoj to, kad naudoti šiuos labai ilgas funkcija skambučius.
Daugiau apie šias selektoriai. Jūs turite, ten jūs, tarkime,
Noriu gauti elementą su ID "uola".
Na, jQuery, tai tik $ ir tada seka, turi svarą, ir tada "uola".
Tai labai paprasta ir daug greičiau nei tradicinių JavaScript būdas spręsti šią problemą.
Ir jūs turite panašių dalykų klasių ir elementų tipų.
JQuery yra - viena iš įdomių funkcijų yra, galite rūšiuoti suspausti
žemyn jūsų klausimus apie savo DOM labai, labai greitai.
Dabar mes grįžome į renginio tvarkymo, ir tai, kaip jums tvarkyti vieną įvykį JQuery.
Taigi, ką mes ketiname čia mes norim pasakyti, viskas gerai. Turiu scenarijaus žymą, tiesa?
Taigi turiu šį inline JavaScript.
Ką mes ketiname padaryti, tai mes ketiname pasakyti, viskas gerai.
Kai dokumentas yra paruoštas, o tai reiškia, kad dokumentas įkeltas,
mes ketiname eiti į tą funkciją, ir mes ketiname pasakyti, viskas gerai,
ši funkcija iš tikrųjų daryti ką nors kita.
Tai iš esmės sakydamas, viskas gerai, man gauti su ID elementas "myid."
Ir tada duokite funkciją prižiūrėtojas kad vykdančiai kai jūs spustelėkite jį.
Iš esmės, ką tai daro, yra, ji sako, viskas gerai.
Puslapis pakrautas, todėl aš ruošiuosi į, rasti šį elementą,
suteikti jai šį renginį prižiūrėtojas, ir jis iš esmės nustato savo puslapį už jus.
Ir tai, kaip jūs norite galvoti apie renginio valdymą.
Jūs tiesiog norite galvoti apie, viskas gerai, kai kažkas atsitinka, ką aš noriu, kad taip atsitiktų?
Jūs nenorite galvoti apie, gerai, man reikia įsitikinti, kad tai, ką derybas su šio dalyko,
šis dalykas bla bla bla, nes jums tiesiog nori pasikalbėti dalykas, kalbant apie įvykius.
Kai tai atsitiks, tai atsitiks. Kai tai atsitiks, tai atsitiks.
Ir jei viskas sukelti kitų dalykų, tai puiku.
Bet jūs nenorite pabandyti ir padaryti sudėtingą kodą
kur jūs suaktyvina daug dalykų tuo pačiu metu,
nes esate tik ketina suteikti sau galvos.
>> Gerai. Dabar mes galime gauti mūsų puslapis tvarkyti įvykių,
bet tarkim mano vartotojas paspaudžia mygtuką.
Ką daryti, jei aš noriu, kad siųsti šį prašymą į serverį,
bet aš nenoriu, kad atnaujinti puslapį, nes nereikėtų perkrauti naują puslapį
kiekvieną kartą gauna natūra varginantis, ir kodėl aš turiu
vėl traukti žemyn galva, ir vėl apačia,
ir visi puslapio elementai vėl
tiesiog atnaujinti sveikinimą ar laiko?
Štai kodėl mes turime kažką panašaus į "Ajax".
Ką mes galime padaryti čia su "Ajax" yra, mes galime pasakyti, viskas gerai,
Noriu siųsti kai kuriuos duomenis į serverį,
ir aš noriu gauti atsakymą atgal, kad aš galiu atnaujinti savo puslapį,
arba gal tiesiog ką nors algoritmą apskaičiuoti, kad nebūtinai parodyti nieko vartotojui.
Ką reikia padaryti? Na, jums reikia URL jums reikia pasikalbėti.
Jūsų serveris negali tiesiog stebuklingai klausytis iš niekur.
Jūs turite turėti tam tikrą vietą, jūs siunčiate šiuos duomenis.
Ir jums taip pat reikia kai kuriuos duomenis siųsti, o gal tai dataless užklausą.
Jūs tiesiog norite ping į serverį ir sako, ei, aš gyvas, ar kažkas panašaus.
Ir tada jūs norite funkciją, kuri iš esmės tvarko sėkmės.
Tarkime, jūs grįžti šiek tiek informacijos iš jūsų serverio,
, ir jūs norite pakeisti vartotojo vardą į savo puslapį.
Taigi, jūs galėtumėte gauti informaciją atgal,
ir jūs stumti, kad į ekraną.
Kas atsitinka, kai puslapis yra pasirengusi,
kuriate ant click funkciją šio mygtuko vadinamas pasveikinimo.
Ką tai tada tikrai yra, kai tas mygtukas nuspaustas,
kalbate greetings.php, jūs padaryti POST prašymo
ir jūs sakote, ei, man gauti kažką iš savo puslapio.
Mes tikrai nereikia aprašyti, kad bet greetings.php,
tegul tiesiog pasakyti, suteikia atgal "Hello world".
Taigi, mes grįžti šį "Hello World" ir sėkmės tai,
darant prielaidą, kad niekas negerai, tada mes tiesiog eiti į šią tikslinę vietą
kad mes nurodytas ir mes tiesiog klijuoti atsakymą ten.
Ir tai yra labai paprastas būdas sukurti Ajax prašymą.
>> Labai greitai, Rob tarsi paminėtas šis jau
kas gali suklysti, blogi dalykai gali atsitikti,
todėl jūs norite susipažinti su šiais HTTP atsakymo kodus.
Kas tai yra tik, kaip, 200, viskas buvo gerai.
Kažkas, blogų dalykų nutiko.
Tai paprastai dalykas, kurį norite prisiminti.
Bet tai malonu žinoti visiems.
Ir galiausiai, kai mes išgyveno visa tai,
turime labai greitai kalbėti apie dizainą,
ir tada mes galime jums viską palikti.
Dizainas. Ką jūs norite prisiminti.
Užduoti sau šiuos klausimus: Kas bus naudojant šią?
Ką jie jį naudoti? Ką mano vartotojai rūpi?
Ką jie rūpi?
Jūs tiesiog nenorite, kad app ir tegul jis tik auga
ir tapo šis milžinas, nežabotas dalykas, kad jūs net negalite užbaigti.
Jūs norite turėti atskirus tikslus ir planus ir dalykų, kuriuos norite pašalinti.
Padaryti pastangų. Visa tai sako, iš esmės,
kad būtų lengva, kad vartotojas galėtų jį naudoti; negalima daryti milžinišką lašelis iš teksto, kaip šios skaidrės yra iš tikrųjų.
Jūs tiesiog norite būti kažkas, kur jis yra labai lengva ką nors eiti
ir daryti tai, ką jie nori daryti.
Jūs nenorite, kad jie turi plaukti 5 puslapiai
gauti į savo pagrindine funkcija jūsų svetainę.
Jei "Google" turėjo 5 puslapių prieš galite net ieškoti ką nors,
niekas juo naudotis.
Ir galiausiai, popieriaus prototipas, tikslinė grupė.
Ar geras dizainas ir bandymų praktiką.
Tiesiog todėl, kad jūs manote, kad jis dirba už jus,
nereiškia, niekam mano, kad tai veikia.
Bet taip, kad viskas.
[CS50.TV]