[Apskats: Quiz 1] [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] [Tas ir CS50.] [CS50.TV] [Lucas Freitas] Laipni lūdzam ikvienu. Tas ir pārskats par viktorīnas 1. Tāpat kā atruna, tas ir - es domāju, mēs esam gatavojas izmēģināt, lai segtu tikpat daudz materiāla, cik vien iespējams, bet tas nenozīmē, ka Mēs ejam, lai segtu visas lietas, kas var būt viktorīnā 1. Tāpēc pārliecinieties, ka jūs arī to apskatīt lekciju, sekcijas, viss, kas ir iespējams. Viktorīna 1 būs trešdien, nākamo trešdien. Tāpēc pārliecinieties, lai izpētītu. Tas būs diezgan daudz, tāpat kā pirmajam viktorīnu par tā formātu, bet tas, iespējams, būs daudz grūtāk. Vismaz pagājušajā gadā, kad man bija 50, es domāju, ka tas bija daudz grūtāk. Tāpēc mācīties daudz. Es esmu gatavojas segt datu struktūras un Huffman kodēšanas. Tas ir kaut kas, ka daudzi cilvēki domā, ir sarežģīta, bet es esmu gatavojas, lai mēģinātu padarīt to pēc iespējas vienkāršāk. Pirmkārt, to, ko mēs vēlamies, lai jūs guys zināt par viktorīnu 1 ir saprastu konceptuālos apraksti par katru no datu struktūras, ka es esmu gatavojas sniegt. Tas nozīmē, ka jums nav faktiski īstenot hash tabulu jūsu viktorīnā 1. Mēs nevēlamies, lai jūs, lai īstenotu visu hash tabulu, varbūt mēs cenšamies lai jums ieviest dažas funkcijas, visbiežāk operācijas, bet mēs nebrauksim, lai jūs īstenotu visu. Tātad, tas ir svarīgi, ka jūs saprotat jēdzienu aiz katra datu struktūra un arī to, ka jums ir iespēja kodu C, tikai visbiežāk darbībām viņiem ir katram datu struktūra. Un arī būtu iespēja pārskatīt norādes un structs, tāpēc, ka tie parādās daudz šajās datu struktūras. Pirmkārt, saistībā sarakstus. Saistīti saraksti ir patiešām ļoti līdzīgi blokiem bet atšķirība starp saistīts sarakstu un masīva, pirmkārt, ir tāda, ka saistīts saraksts ir ļoti elastīga izmēru, bet masīvi jums ir vai nu jāizvēlas ļoti lielu izmēru masīva, lai jūs zināt, ka jūs gatavojas, lai varētu uzglabāt visus savus datus šajā masīvā, vai jums ir izmantot malloc lai būtu elastīga garumu masīvs. Kas saistītas sarakstos, tas ir ļoti viegli, lai tikai iegūtu vairāk elementiem, īstenot vairākus elementus saistītajā sarakstā vai noņemt elementus. Un faktiski, ja jūs nevēlaties saistīts saraksts tiks sakārtots, Jūs varat meklēt un noņemt elementus pastāvīgu laiku, tāpēc O (1) laiks, tāpēc tas ir ļoti ērti. Jums tikai jābūt uzmanīgiem, lai vienmēr atcerieties malloc un bez mezgliem, tikai tāpēc, ka, ja jums nav, jums ir atmiņas noplūde. Tātad, kas saistīti saraksti - definīcija mezglu ir tāpat kā tas, ko mēs esam turpat. Man int n, bet jūs varat saglabāt visus datus, ko vēlaties. Tātad, ja jūs vēlaties saglabāt virkni, tas ir labi. Ja jūs vēlaties saglabāt struct, tas ir labi, dubultā, ko jūs vēlaties. Es tikai izvirzīti int n, piemērus šeit. Un jums ir rādītāju uz nākamo mezglu. Tātad, būtībā, kas saistītas sarakstā ir daži dati, tad tas norāda uz nākamo mezglu. Ja tas ir pēdējais elements, kas saistīts sarakstā, tas notiek, lai norādītu uz nulles. Tātad šis ir piemērs saistīts saraksta. Labi, tāpēc tagad pieņemsim redzēt, kas mums ir jādara, ja es vēlos, lai ievietotu elementu saistītā sarakstā. Pirmkārt, funkcija ievietot būs tipa spēkā neesošu jo es nevēlos atgriezties neko. Un es esmu gatavojas veikt int kā argumentu, jo es gribu zināt, ko es gribu, lai ievietotu. Tātad, kas ir pirmā lieta, ko man vajadzētu darīt? Nu, es būtu malloc uz newnode, tāpēc, ka ir pirmā līnija. Es esmu tikai radot jaunu mezglu īstenot saistītajā sarakstā. Tātad, ko es varu darīt? Nu, mēs zinām, ka mūsu implementācijas saistīti sarakstu klasē, mēs vienmēr likt galvu kā globālo mainīgo. Tātad, ko mēs varam darīt, ir mainīt galvu. Es varu padarīt šo jauno mezglā būs jaunais vadītājs, un tas notiek, lai norādītu uz iepriekšējo galvu. Kā mēs varam darīt? Pirmā lieta, kas man ir jādara ir mainīt "n" jaunajā mezgla līdz vērtībai, kas tika nodots funkcijai. Tad newnode tālāk būs galvu. Galva būs newnode. Tātad, tas ir diezgan vienkārši. Dzēšanas mezglu, mēs varam darīt to, piemēram - Viens veids, kā mēs varētu darīt, proti, labi, ja es gribēju, lai dzēstu, piemēram, 3, ko es varētu darīt, ir vienkārši norādīt iepriekšējo mezglu uz nākamo mezglu 3. Tāpēc es vēlētos darīt kaut ko līdzīgu, ka. Bet kāda ir problēma ar to dara? Man ir atmiņas noplūde, tāpēc man nav piekļuves numuru 3 vairs. Problēma ar tas, ka es neesmu gatavojas, lai varētu atbrīvot šo mezglu. Es esmu nāksies atmiņas noplūde, un (nesaprotams) gatavojas ienīst mani. Tā vietā, lai to dara, es droši vien būtu pagaidu rādītājs. Tāpēc man temp. Tā gatavojas norādīt uz mezglu, ka es gribu, lai dzēstu. Un tad es varu pārvietot iepriekšējos mezglu punkta uz nākamo mezglu mezglā, ka es gribu, lai dzēstu. Un visbeidzot, es varu brīvi rādītāju. Vai man ir, lai atbrīvotu rādītāju, kas man radīja tieši tur? Man nav, tikai tāpēc, ka - Atšķirība ir tā, ka šis mezgls tika izveidots, izmantojot malloc, tāpēc tas ir kaudze, bet tas viens bija tikko paziņoja par NULL slēdzi kaudze. Tāpēc man nav, lai atbrīvotu to. Labi. Tāpēc tagad parunāsim par skursteņi. Skursteņi ir diezgan vienkārši. Mēs to darījām skursteņi un rindas klasē tikai izmantojot bloki, bet jums būtu jāzina - tikai jāapzinās ka jūs varat darīt, skursteņi rindās, izmantojot saistītos sarakstus, kā arī. Tātad, ja jums ir masīvs, kāds būtu kaudze? Kaudze, pirmkārt, būs jābūt izmēru. Jums ir, lai saglabātu to, kas ir lielums kaudze, ka jums ir tiesības tagad. Un arī jums būs masīvs, šajā gadījumā, kad numuri, bet, ja jūs vēlaties, tas var būt masīvs stīgas, masīvs struktūrai, kaut ko, ka jūs vēlaties saglabāt. Par kaudze: atšķirība starp kaudzi un saistītajā sarakstā ir tas, ka kaudze jums ir piekļuve pēdējo elementu, kas tika nodots kaudze tikai. To sauc pēdējais, pirmais ārā. Tāpat kā jums ir kaudze paplātes, ja jūs likts paplāti uz augšējās, Jums ir, lai novērstu, ka paplāti pirmais piekļūt citiem paplātes. Tas pats ar skursteņi. Tātad, ja es gribu, lai, piemēram, pievienot elementu kaudze, ko man darīt? To sauc push, un tas ir diezgan vienkārši. Pirmā lieta, kas jums jādara, ir pārbaudīt, ja lielums kaudze ir ne lielāks par vai vienāds ar jaudu krāvuma. Jo, ja jums jau ir uz pilnu jaudu, jūs nevarat pievienot kaut kas cits. Un tad, ja ne, jums vienkārši ir pievienot elementu kaudze. Un visbeidzot, pieauguma lielumu. Tāpēc tas ir diezgan vienkārši. Tāpēc es vienkārši pievienojiet numuru 2. Un, ja es gribu, lai pop, kas nozīmē, ka es vēlos, lai novērstu pēdējais elements, kas tika pievienots, un atgrieztu vērtību elementa Pirmā lieta, ko es būtu, lai pārbaudītu, ka kaudze nav tukšs. Jo, ja tas ir tukšs, es nevaru atgriezties neko. Tādā gadījumā, es esmu atpakaļ -1. Citādi, es esmu gatavojas Samazināt izmēru spec, un atgriezties numurus (s.size). Kāpēc es samazināšanās lielumu un pēc tam atgriezties s.size? Tas tādēļ, šajā gadījumā, spec ir lielums 4, un es gribu, lai atgrieztos ceturto elementu, vai ne? Bet kas ir indekss ceturtā elementa? Trīs. Tā kā man izmērs - būs 3, es varu tikai atgriezties s.numbers (s.size) jo tas ir 3. Tātad, tas ir tikai indekss. Tagad rindas. Rindas ir diezgan daudz to pašu. Vienīgā atšķirība ir tā, ka tā vietā, pēdējā, pirmais ārā, Jums ir pirmais iekšā, pirmais ārā. Iespējams, ja jūs gaida, lai dotos uz koncertu, jums nebūs laimīgs, ja jums bija kaudze, nevis rindā. Ir pēdējais cilvēks nākt būs pirmā persona, lai ievadītu koncertu. Jūs, iespējams, nebūs laimīgs. Rindā, pirmais cilvēks, lai saņemtu, ir arī pirmais cilvēks izkļūt. Tāpēc definīcijā rindā, turklāt ar izmēru masīvā, jums ir arī, lai būtu galva, kas ir indekss uz galvas skursteņa. Tātad pirmais elements tiesības tagad. Enqueue ir tas pats, kas push skursteņi. Ja tu būtu ļoti naivi, jūs vienkārši teikt, labi, es varu tikai darīt tieši to pašu, ko es darīju, lai push. Es varu tikai pārbaudīt, ja tas nav pēc jaudas. Ja tā ir, es atgriezties viltus, citādi es varu tikai eksportēt jaunu vērtību un tad pieauguma lielumu. Bet kāpēc tas ir nepareizi? Paskatīsimies šo piemēru. Es cenšos ierindod ķekars sīkumi, un tad es esmu gatavojas dequeue un ierindod. Tur ir daudz komandas, bet tas ir ļoti vienkārši. Es esmu gatavojas ierindod 5, lai pievienotu 5, tad 7, 1, 4, 6, un tad es gribu dequeue kaut ko, kas nozīmē, ka es esmu gatavojas noņemt pirmo elementu. Tāpēc es esmu gatavojas, lai noņemtu numuru 3, vai ne? Pirmais elements. Labi. Tagad, ja es mēģinātu ierindod kaut ko citu, kas notiek varētu notikt? Saskaņā ar manu īstenošanu, Es biju gatavojas nodot nākamo numuru indeksa q.size. Šajā gadījumā izmērs ir 8, tā indekss 8 būs tepat pēdējā pozīcijā. Ja es mēģinātu ierindod 1 tieši šeit, es būtu pārrakstot pēdējo pozīciju ar numuru 1, kas ir pilnīgi nepareizi. Ko es gribu darīt, ir wrap ap un iet uz pirmo pozīciju. Varbūt jūs vienkārši teikt, labi, man vienkārši ir pārbaudīt ja es patiesībā var likt kaut ko tur. Ja tā nav, es tikai saku, ak, jaunais pilnu jaudu ir faktiski jauda - 1, un jūs nevarat nodot elements tur. Bet kāda ir problēma? Problēma ir tā, ka, ja es tikai dequeue viss tepat un tad es cenšos, lai pievienotu kaut ko citu, tas vienkārši teikt, labi, jums bija ar pilnu jaudu, kas ir 0. Tātad jūsu rinda ir pagājis. Jums ir, lai wrap ap, un veids, iesaiņojuma ap ka jūs guys iemācījušies sapņotājs un citās psets bija, izmantojot mod. Jūs varat mēģināt to mājās, lai saprastu, kāpēc jūs darītu q.size + q.head mod jaudu, bet, ja jūs pārbaudīt tieši šeit, mēs varam redzēt, ka tas darbojas. Tātad pēdējā piemēram, q.size bija 8 un galva bija 1, jo tas bija šis amats šeit masīva. Tāpēc būs 8 + 1, 9. Mod jauda 9 būtu 0. Tas iet uz indeksu 0. Mums būs pareizā stāvoklī. Un tad mēģināt rindā mājās. Dažas svarīgas lietas: mēģināt saprast atšķirību starp kaudzi un rindā. Mājās, mēģināt iegūt ļoti pazīstams ar Rindu, dequeue, push un pop īstenošanā. Un arī saprast, ja jūs varētu izmantot katru no tiem. Tā ļauj atpūsties 10 sekundes ar ķekars pokemoniem. Un tagad iesim atpakaļ uz datu struktūras. Hash tabulas. Daudzi cilvēki bija bail no hash tabulu. jo problēma noteikti 6, pareizrakstības pārbaudītāju. Hash tabulas un cenšas, daudzi cilvēki bail no tiem. Viņi domā, ka viņi ir tik grūti saprast. Yeah? [Rob Bowden] Problēma noteikti 5. Problēma noteikti 5, jā. Paldies Rob. Jā. Seši bija Huff n "Puff, jā. Problēma noteikti 5 tika pareizrakstības pārbaudītāju, un jums bija izmantot vai nu hash tabulu vai izmēģināt. Daudzi cilvēki domā, ka viņi ir super grūti saprast, bet viņi faktiski ir diezgan vienkārši. Kas ir hash tabulu, pamatā? Hash tabulu ir masīvs saistītas sarakstiem. Vienīgā atšķirība starp masīvu un hash tabulu ir tā, ka hash tabulu, jums ir kaut ko sauc hash funkciju. Kas ir hash funkcija? Es nezinu, ja jūs guys var izlasīt šeit. Šis ir piemērs hash tabulu. Tātad jūs varat redzēt, ka jums ir masīvu ar 31 elementiem. Un tas, ko mēs darām hash tabulā ir jaucējfunkciju kas gatavojas tulkot taustiņu, katrs int uz indeksu. Ja, piemēram, ja es gribu izvēlēties B. Harrison, Es liktu B. Harisons manā hash funkciju, un hash funkciju varētu atgriezties 24. Tāpēc es zinu, ka es vēlos, lai saglabātu B. Harrison 24. Tā ka ir starpība starp tikai ar masīvu un ar hash tabulu. Hash tabulu, jums ir funkcija, kas ir tev pastāstīšu kur glabāt datus, kurus vēlaties saglabāt. Par hash funkciju, jūs vēlaties meklēt hash funkciju kas ir deterministisko un labi izplatīts. Kā jūs varat redzēt šeit, jūs redzēsiet, ka daudz datu, ka es gribēju veikalu patiesībā bija 19 nevis izmantojot 31 un 30 un 29, kas bija bez maksas. Tāpēc hash funkciju, ka es bija ne ļoti labi sadalītas. Kad mēs sakām labi izplatīts, tas nozīmē, ka mēs vēlamies, lai būtu, aptuveni vismaz 1 vai 2, katrs no - piemēram, atšķirība 1 vai 2 katrā no indeksiem blokiem. Jūs vēlaties, lai būtu, apmēram, vienu un to pašu elementu skaitu katrā saistīts sarakstā masīvā. Un tas ir viegli, lai pārbaudītu, vai tas ir derīgs hash tabulu, apskatīt kā hash tabulas. Tad koki. Tas ir koks. Koki datorzinātnēs ir otrādi, lai kāda iemesla dēļ. Tātad, šeit jums ir par koku saknes un tad lapām. Jums tikai vajadzētu zināt nomenklatūru vecākiem un bērnu. Katrs mezgls ir savi bērni, kas ir mezgli, kas ir zemāka par vecākiem. Tā, piemēram, 2 būs vecāks par 3, un, no otras bērnu turpat, bet 3 būs mātes par 1, un citi bērni, kas ir tur. Un 1 būs 3 s bērns, un tā tālāk. Mums ir kaut kas daudz vairāk interesantu, ko sauc bināro meklēšanas koku, kurā visas vērtības par tiesībām mezglu būs labajā pusē, tieši šeit - labajā pusē, būs lielāks nekā elementa saknes. Tātad, ja man ir numurs 5 tepat, visi elementi, labajā pusē būs lielāks par 5, kā arī pa kreisi Visi elementi ir būs mazāka par 5. Kāpēc tas ir lietderīgi? Nu, ja es gribu, lai pārbaudītu, vai skaitlis 7 ir šeit, piemēram, Es tikai iet uz 5 pirmais un es esmu dodas, lai redzētu, ir 7 lielāks vai mazāks par 5? Tas ir lielāks, tāpēc es zinu, tas būs jābūt labajā pusē no koka. Tāpēc man ir daudz mazāk stuff apskatīt. Ieviešanā bināro meklēšanas koku, mezglā, es esmu tikai nāksies iegūt datus, tāpēc int n, jūs varētu būt arī virkni vai kaut ko gribēja. Jums tikai jābūt uzmanīgiem, kas definē to, kas ir lielāks, kas ir mazāk. Tātad, ja jums bija stīgas, piemēram, jūs varētu definēt ka visas šīs lietas par tiesībām nāksies lielāku garumu, kreisās nāksies zemākas garumi, lai tas tiešām atkarīgs no jums. Kā es varu īstenot atrast par BST? Pirmā lieta, mums nāksies darīt, ir pārbaudīt, vai sakne ir NULL. Ja tas ir NULL, tas nozīmē, ka lieta nav tur tāpēc, ka jums nav pat ir koks, vai ne? Tāpēc es atgriezties viltus. Citādi, es esmu gatavojas, lai pārbaudītu, vai skaitlis ir lielāks nekā vērtība saknes. Es esmu gatavojas izmēģināt, lai atrastu elementu labajā pusē no koka. Tu redzi, ka es esmu, izmantojot rekursijas šeit. Un tad, ja tas ir mazāk, es esmu gatavojas apskatīt kreisi. Un, visbeidzot, pretējā gadījumā, ja tas nav mazāks vai lielāks, tas nozīmē, ka tā ir vērtība pati par sevi. Tāpēc es vienkārši atgriezties true. Jūs varat redzēt šeit, ka es izmantoti, ja, ja, ja. Un atcerēties, kas viktorīnā 0, mums bija problēmas, kas bija, ja, ja, ja, un jūs vajadzēja atrast neefektivitāti, un neefektivitāte bija, ka jūs izmantojāt, ja. Jums vajadzēja izmantot, ja cits, ja, kas cits, ja, un cits. Tātad, ja es izmantot cits, ja, un cits, ja, un vēl šeit? Vai kāds - jā? [Student runājot, dzirdams] Tas ir nevainojami. Tāpēc viņa saka, ka tas nav svarīgi, tikai tāpēc, neefektivitāti, kas mums bija pirms bija tas, ka, jo, varbūt, ja kāds nosacījums ir izpildīts, tāpēc esat veicis darbību, bet tad jūs gatavojas pārbaudīt visiem citiem apstākļiem. Bet šajā gadījumā, tas atgriezās uzreiz, tāpēc tas nav svarīgi. Tātad jums nav jāizmanto cits ja. Un visbeidzot, parunāsim par mēģinājumiem, kas ir ikviena mīļākie. Mēģināt ir koks masīvi. Tas ir ļoti ātri, lai meklētu vērtības, bet tā izmanto daudz atmiņas. Un tas parasti filtrēt vārdus, tad, kad jūs vēlamies īstenot, piemēram, es nezinu, kā tālruņu katalogā tālrunī un jūs vēlaties, lai varētu B tipa un vienkārši ir cilvēku vārdus, kuri ir B. Tas ir ļoti viegli īstenot, izmantojot izmēģināt, piemēram,. Kā jūs definētu mezglu izmēģināt? Jums vienkārši ir jābūt bool, kas būs is_word. Tas apliecina, ka, izmantojot visus burtus pirms minētā mezglā, Jums bija iespēja, lai veidotu vārdu, un tad jums ir masīvs norādes uz mezgliem. Vai jūs varat redzēt, ka mums ir masīvs mātes mezglu, tāpēc mezglu * masīvu? Yeah? Tātad, pieņemsim redzēt, kā tas darbosies. Par pareizrakstības pārbaude, mums ir masīvs 27 elementiem, jo mums ir visi burti plus apostrofu. Pirms šeit es esmu tikai gatavojas izmantot 2, jo es gribu, lai varētu rakstīt uz tāfeles. Labi. Tātad šis ir piemērs mēģināt. Ja es vienkārši definēt pirmā mezglā, es ņemšu masīvs 2 elementiem ka ir 2 norādes uz NULL, tāpēc es vienkārši ielieciet "a" un "b". Un es esmu nāksies bool, kas saka is_word. Tas būs viltus par pirmo, tikai tāpēc, pirms, ka jums nav nekādu rakstzīmes. Tik tukšs vārds nav vārds. Tātad, tas ir nepatiess. Ja es gribu piebilst, "A", lai šajā vārdnīcā, ko man darīt? Man vienkārši ir malloc jaunu mezglu "a", un tad pievienot savu vārdu taisnība. Tāpēc tas tikai apliecina, ka tam "", būs taisnība. Jēga? Tad, ja es vēlos, lai pievienotu "BA", es ņemšu malloc 1 par "b", un tad es esmu gatavojas izveidot boolean uz nepatiesu, jo "b", pats par sevi nav vārds. Tad es esmu gatavojas malloc vēl vienu "a", tāpēc "BA", un tad es esmu gatavojas izveidot tas ir vārds, kas ir taisnība. Jo "ba", ir vārds. Un tad, ja es gribu, lai redzētu, vai "b" ir šajā vārdnīcā, Es varu tikai iet ar pirmo, "b". Es iet uz leju, un es paskatos, ir vārds, un tā saka viltus. Tāpēc tas nav vārds. Ja es gribu, lai pārbaudītu "BA", Es eju uz pirmo, "b", un tad doties uz "a", un es redzu taisnība, tāpēc tas ir vārds. Jēga? Daudzi cilvēki saņemt sajaukt ar mēģinājumiem. Nē? Visbeidzot, Huffman kodēšana. Huffman kodēšana ir ļoti noderīga lai saglabātu atmiņu un saspiest teksta failus, tikai tāpēc, ka daudz reizes jūs izmantojat "a" un "e", piemēram, jūsu dokumentiem, bet es nezinu, vai jūs guys izmantot "Q" vai "Z", tik daudz. Ņemot tikai 1 baitu par katru rakstzīmi, katrs - ar 256 rakstzīmes, kas mums ir ASCII tabulā nav ļoti optimāls, tikai tāpēc, ka ir daži simboli, ko izmanto daudz vairāk, tāpēc jums, iespējams, izmanto mazāk atmiņas par tiem. Kā es varu izmantot Huffman kodēšana? Mums ir jādara Huffman koku.  Huffman koks ir mezglus kas ir simbols, kas notiek, ir, piemēram, "", "b", "c", vēstules, kāds burts ir, frekvence, kas ir frekvence, ka vārds parādās tekstā, ka jums bija radīt Huffman koku, un tad mezglu, kas gatavojas uzsvērt pa kreisi no Huffman koku un cits mezgls, kas notiek, lai norādītu uz labo pusi. Tātad, tāpat kā koks. Kā jūs veidot Huffman koku? Jūs gatavojas izvēlēties 2 mezgliem, kas ir zemākās frekvences. Ja jums ir kaklasaiti jūs gatavojas izvēlēties 2 mezgliem , kas ir zemākais ASCII vērtības, kā arī. Tad jūs gatavojas izveidot jaunu koku, no tiem 2 mezgliem ka nāksies kombinēto biežums mātes mezglā. Un tad jūs gatavojas, lai novērstu 2 bērnus no meža un aizstāt tos ar vecākiem. Un jūs gatavojas atkārtot, ka līdz brīdim, kad jums ir tikai 1 koku mežā. Tātad, pieņemsim redzēt, kā jūs varētu darīt Huffman koku ZAMYLA. Jūs varat redzēt šeit, ka visi burti ir biežums 1, izņemot "A", kas ir frekvenci 2. Tāpēc es izveidojis mezglu visām vēstulēm man, lai ASCII vērtību un biežumu. Tātad, ja es vēlos, lai izveidotu pirmo koku, tas būs ar "L" un "M". Tātad, tas ir šeit. No pāra biežums būs 2 tāpēc, ka tas ir 1 + 1, tad nākamais 2 ar zemāko frekvences ir "Y" un "Z". Un tad man ir visi no tiem ir - ir frekvenci 2. Tātad, kādi ir tie, kas ir zemākais ASCII vērtību nākamo? "A" un "L". Tāpēc es izveidoju jaunu mezglu, un, visbeidzot, tas ir 4 un 2, tāpēc 2 būs pa kreisi. Un tas ir Huffman koks. Tad, ja es gribu uzrakstīt kādu tekstu, piemēram, binārā, lai pārvērstu par tekstu, izmantojot Huffman koks ir ļoti viegli. Piemēram, ja es saku, ka pārvietojas pa kreisi, ir 0, un pārvietojas pa labi, ir 1, Kas ir tas, ka gatavojas pārstāvēt? Tātad, piemēram, 1, 1, tik labi, labi, un tad 0, lai pa kreisi būtu L, un pēc tam 1, 0, 0. Tātad 1, 0, lai tikai 1, 0, "". Un pēc tam ir 0, 1, tāpēc "Z". Un tad 1, 0, 0 - nav. 0, 0 būs "Y", lai slinks. Tātad tas ir viss, kas man, Rob ir gatavojas pārņemt. [Rob Bowden] Tātad, nedēļa 7 sīkumi. Mēs esam ieguvuši daudz, lai iet pa ļoti ātri. Bitu līmeņa operatoriem, bufera pārpildes, CS50 bibliotēka, tad HTML, HTTP, CSS. Viss tāpat kā 15 līdz 20 minūtes. Bitu līmeņa operatoriem. Ir 6 no tiem, kas jums ir jāzina. Bitu līmeņa un Bitu līmeņa vai, XOR, pa kreisi maiņu, pa labi maiņu, un ne. Tiesības maiņu, un jūs tikko redzēju lekciju vispār. Mēs iet pār to ātri šeit, bet tas ir labi zināt, ka tie ir 6, kas pastāv. Atcerieties, ka Bitu līmeņa uzņēmēji, piemēram, kad jūs 3 + 4. Jums nav darīšana ar bināro 3 un 4. Ar Bitu līmeņa operatoriem, jūs faktiski nodarbojas ar individuālo biti skaitļu 3 un 4. Tātad pirmais, kas mēs sakām, ir Bitu līmeņa nav, un visiem tas ir uzsist visas bitiem. Tātad šeit, ja jūs esat rakstiski to C, jums nav rakstīt kā ~ 11011 vai neatkarīgi, jūs varētu rakstīt to kā ~ 4, un tad tas būtu uzsist bināro pārstāvību 4. Tātad šeit, ~ daži bināro numuru 1101101 gatavojas tieši uzsist visas 1 s līdz 0 un visi 0 s līdz 1 s. Kā es saku, ka, bieži izmantojot to, un mēs redzēsim to mazliet, ir, piemēram, mēs vēlamies nākt klajā ar kādu numuru kur visi no bitiem ir 1, izņemot vienu no tiem. Tāpēc tas parasti ir vieglāk izteikt numuru ja tikai, ka vienu bitu ir noteikts, un tad ~ tā, lai katru otro bit ir noteikts, izņemot vienu. Tāpēc, ka tas, ko mēs gatavojamies izmantot vairāk mazliet. Bitu līmeņa vai. Šeit ir 2 binārie skaitļi, un šie 2 skaitļi ir diezgan reprezentatīvi, jo tie ir visi iespējamie kombinācija bitu jūs varētu nepieciešams darboties. Lūk, kad es or'd katru bitu, mēs esam tikai gatavojas salīdzināt taisni uz leju. Tātad, no otras puses, mums ir 1 un 1. Kad es Bitu līmeņa | tiem, ko es esmu gatavojas saņemt? Viens. Tad Bitu līmeņa | 0 un 1 ir gatavojas sniegt man? Viens. Bitu līmeņa 1 un 0 būs tas pats, vienu. Bitu līmeņa 0 | 0 gatavojas sniegt man 0. Tāpēc vienīgais gadījums, kad man 0 atrodas 0 | 0 gadījums. Un jūs varat iedomāties, ka, tāpat kā jūsu loģisko tālākajos reģionos. Tātad, ja jūs domājat par 1 kā patiesu un 0 kā viltus, tas pats attiecas šeit. Tātad taisnība, vai patiess ir taisnība, patiess vai nepatiess ir taisnība. Nepatiesa vai patiess ir patiess, nepatiess vai nepatiess ir vienīgā lieta, kas ir faktiski nepatiesa. Lūk, piemērs, ka jums vajadzētu zināt kā diezgan labs piemērs, kad tiek izmantoti Bitu līmeņa operatoriem. Lūk, ja mēs vai kapitāls "" ar Ox20, un mēs apskatīt šos sekundē, mēs kaut ko. Un, ja mēs vai mazie "" ar Ox20, mēs kaut ko. Tā ļauj uzvilkt ASCII tabulu. Labi. Šeit mēs redzam, ka "" ir - Šeit mums ir "" ir decimāls 65. Bet es iešu ar heksadecimālo, kas ir Ox41. Diezgan pārliecināts, ka mēs redzējām klasē. Es domāju, ka mēs redzējām to klasē ka tas ir diezgan viegli pārveidot no heksadecimālo uz bināro. Tātad šeit, ja es gribu, lai 4 uz bināro, tas ir tikai būs 0100. Tas ir 1 ir vieta, 2 ir vieta, 4 s vietu, tāpēc tas ir 4. Tad es varu sadalīt 1 uz bināro, kas gatavojas par 0001. Un tā tas būs pārstāvniecība "A", kas bināro. Ņemot mazos "", tas tagad notiek, lai būtu Ox61, ja, sadalot tos līdz savā bināro, lai 6 - Pieņemsim patiesībā to dara - tur nav dzēšgumija? Dzēšgumija. Ox61. Tātad, sadalot 6 uz bināro būs 0 + 4 + 2 + 0. Un sadalīšana 1 būs 0001. Aplūkojot starpību starp šīm 2, mēs redzam, ka vienīgā atšķirība starp mazajiem un kapitāla "A", tas ir vienu bitu. Tātad, atgriežoties šeit - labi. Atgriežoties šeit, ja mēs skatāmies uz to, kas mazliet Ox20 ir, tāpēc sadalīšana Ox20 savā bināro, ir 0010, 0000. Ox20, tikai mazliet, kas ir noteikts tas ir nedaudz, ka mēs esam saistīti ar, ar pārslēgšanās starp kapitālu un mazos burtus "A". Ja I vai 'A', kurā tas ir viens, "A", ja es vai "" ar Ox20, ko es esmu gatavojas saņemt? [Student, dzirdams] mazie burti "a", jo tas notiek, lai uzsist šo mazliet uz 1. Un, ja es vai "" ar Ox20, ko es esmu gatavojas saņemt? Mazajiem burtiem, jo ​​tikai Oring "" ar Ox20, Es esmu tikai būs Oring šo vienu bitu uz 1, tas jau ir 1, tāpēc tas nav svarīgi. Lai mēs iegūtu "A" un "A". Bitu līmeņa un. Atkal, mēs varam domāt par to kā mūsu loģiski un kolēģi. Kreisajā pusē, mums ir taisnība, un taisnība. Tas notiek, lai būtu patiesība, un par visiem gadījumiem, viltus un patiesa vai true un false, vai nepatiesa un nepatiess, neviena no šīm lietām ir taisnība. Tātad, ko mēs galu galā kļūst ir 1000. Tāpēc tagad, šeit, šeit, kur es esmu, ko izmanto drošs Bitu līmeņa nav, kur mums bija Ox20. Tāpēc tas ir Ox20. Tagad tas, ko es gribu darīt, Bitu līmeņa ~ no Ox20. Kas notiek, lai uzsist visas bitiem. Tāpēc man ir 1101, 1111. Un tā "" anded ar ~ Ox20 gatavojas sniegt man to, ko? Tikai mazliet mums tiešām ir nepieciešams domāt par ir tas viens, jo, ja visi no šiem bitiem ir iestatīts uz 1, tad mēs esam gatavojas saņemt tieši to, ko "" bija izņemot, iespējams, kāds tas mazliet ir. Jo, ja tas bija 1, tagad tas būs jānosaka līdz 0, jo neatkarīgi no tā, anded ar to būs 0. Tātad, kas ir "" un ~ Ox20 gatavojas sniegt man? [Studenti atbildēs dzirdams] Un, kas ir "", un - tas ir "." Un kas ir "" un ~ Ox20 gatavojas sniegt man? "A." Jo tas ir pašlaik 1. Anding šīs 0 gatavojas, lai padarītu to 0, un tagad mēs esam gatavojas iegūt "A". Abi ir "", un pēdējais, bet ne mazāk par šāda veida mums ir XOR. Tas ir ļoti daudz, piemēram, vai, izņemot tas nozīmē tikai vai. Tas ir tāpat kā tas, ko jūs parasti domā par vai reālajā pasaulē. Tātad, jūs vai nu "x" vai "y", bet ne abas. Šeit 1 ^ 1 būs 0. Jo taisnība, tas ir - tas nedarbojas, kā arī ar loģisku patieso un viltus kā Bitu līmeņa un, un vai arī, bet taisnība ^ true, ir nepatiess. Jo mēs tikai vēlamies, lai atgrieztos taisnība, ja tikai viens no viņiem ir taisnība. Tātad 1 ^ 1 ir 0. Kas par 0 ^ 1? Ir 1. 1 ^ 0, 1, 0 ^ 0 0. Tāpēc visos gadījumos 0 Bitu līmeņa kaut 0 būs 0. 1 Bitu līmeņa kaut 0 vai 0 Bitu līmeņa 1, ja tas ir | un ^, tas būs 1, un, ja tas ir un tas būs 0. Un vienīgais gadījums, kad 1 Bitu līmeņa 1 nav 1 ir ar ekskluzīvu vai. Tas ir 0110. Tātad šeit tagad, izmantojot XOR - tāpēc mēs esam atpakaļ uz 20. "" ^ Ox20 ir šie 2 biti mēs salīdzināja. Tātad 1 ^ 0 gatavojas sniegt man to, ko? Vienu. "" ^ Ox20 gatavojas sniegt man? Mazajiem burtiem. "" ^ Ox20 gatavojas sniegt man? Kapitāls A. Tāpēc, ka kāds to dara, tas XORing ar Ox20 efektīvi flipping kāds šis bits ir. Ja tas ir 0, tas ir tagad gatavojas kļūt par 1. Tā kā tas ir 1, 1 ^ 1 ir 0. Tātad, mūsu "a" ir kļuvusi "A", un mūsu "A" ir kļuvusi "". Tātad XOR ir ļoti ērts veids, kā vienkārši flipping lietu. Jūs vienkārši vēlaties atkārtot pār virkni vēstuļu un pārmaiņus lietu katru rakstzīmi, jūs vienkārši XOR visu ar Ox20. Tagad mēs esam atstājuši maiņu. Kreisi pāreja ir tikai gatavojas, būtībā, push visus numurus, vai pa kreisi, un ievietojiet 0 aiz viņiem. Tāpēc šeit mēs esam 00001101. Mēs ejam, lai push 3 0 ir no labās puses, un mēs 01101000. In nonbinary izteiksmē, mēs redzam, ka tas ir patiešām nodarbojas 13 kreiso nobīdi ar 3, kas dod mums 104. Tātad pa kreisi mainās, mēs redzam šeit, x << y būtībā x * 2 ^ y. 13 * 2 ^ 3, 2 ^ 3 ir 8, lai 13 * 8 ir 104. Ja jūs vienkārši domājat par bināro vispār, cik katra cipara, ja mēs sākam no labās puses, tas ir 1 ir vieta, tad 2 ir vieta, tad 4 vietā. Tātad, nospiežot 0 ir no labās puses, mēs esam tikai stumšanas lietas, kas bija gada 4 vietā uz 8 vietu, un lietām, kas bija par 8 vietā uz 16 vietu. Katra maiņa vienkārši reizina ar 2. Yeah? [Student] Kas notiek, ja jūs nobīdīts par 5? [Bowden] Ja nobīdīts 5 jūs tikai zaudēt cipariem. Neizbēgami, tas pats. Tāpat, veseli skaitļi ir tikai 32 biti, tādēļ, ja jūs pievienojat 2 patiešām lielas skaitļu, tas vienkārši neiederas veselam skaitlim. Tātad, tas ir tas pats šeit. Ja jūs nobīdīts 5, mēs tikai zaudēt, ka viens. Un tas ir veids, ko es domāju ar "aptuveni" kur, ja jūs maiņās pārāk tālu, jūs zaudējat bitiem. Tiesības pāreja būs pretējs, kur mēs ejam, lai bāzt 0 s pie beigām, un par mūsu mērķiem, aizpildiet 0 ir no kreisās puses. Tā darot, mēs būtībā atpakaļgaitā, ko mēs jau darīts. Un mēs redzam, ka trīs 0 ir labajā pusē ir tikai samazinājies off, un mēs uzstājām 1101 visu ceļu pa labi. To dara 104 3, kas ir, faktiski, x / 2 ^ y. Tāpēc tagad, šeit, tā ir līdzīga ideja. Kāpēc tas ir tikai apmēram x / 2 ^ y, un faktiski nav x / 2 ^ y? Jo, ja man bija nobīdīts par 4, es būtu zaudējis 1. Būtībā, ko jūs domājat, tikai domāju, ka skaitlim sadalījumu kopumā. Tātad, piemēram, 5/2, ir 2. Tas nav 2.5. Tā ir pati ideja šeit. Kad mēs to izdalot ar 2, mēs varam zaudēt nepāra biti gar ceļu. Tāpēc tagad - tas ir tas, lai Bitu līmeņa. Tas ir viss, kas jums ir jāzina. Atcerieties izmantot gadījumos mēs redzējām klasē, piemēram, mazliet maska ​​ir noderīga Bitu līmeņa operatoriem, vai arī izmantot tos bitu maskas. Lielie burti un mazie burti, pārrēķini ir diezgan prototipu piemērs. Labi, lai bufera pārpildes uzbrukumiem. Kāds atceras, kas bija nepareizi ar šo funkciju? Jāatzīmē, mums paziņoja, masīvs 12 baitu, 12 simboli, un tad mēs kopēt mūsu bufera 12 rakstzīmēm visa virkne bāru. Tātad, kāda ir problēma šeit? Maģiskais skaitlis 12 ir diezgan daudz nekavējoties pop no kā - Kāpēc 12? Ko darīt, ja josla notiek, ir vairāk nekā 12 rakstzīmes? Ko darīt, ja bārs ir miljoniem rakstzīmes? Šeit jautājums ir memcpy. Ja josla ir pietiekami ilgi, tas būs tikai pilnīgi - "c", "c" nav vienalga, ka tas bija tikai 12 rakstzīmes; "C" nav vienalga, ka tā nevar fit, ka daudzi baiti. Tas būs tikai pilnīgi pārrakstīt char, 12 baiti mēs esam piešķirti to, un viss pagātnē to atmiņu, kas nav faktiski pieder šim buferis ar kāda string josla ir. Tāpēc tas bija, mēs redzējām klasē attēlu kur mums ir mūsu kaudze aug. Jums vajadzētu izmantot, lai šos attēlus vai iepazīties ar tiem vēlreiz. Mums ir mūsu kaudze aug, atmiņas adreses sākas ar 0 augšā un augt uz leju, lai, piemēram, 4 miljardus apakšā. Mums ir mūsu Bloks "c" kaut kur atmiņā, tad mums ir mūsu rādītāju bar tieši zem tā, un tad mums ir šī saglabātas kadru rādītājs mūsu atgriešanās adresi un mūsu mātes rutīnas ir kaudze. Atcerieties, ko atgriešanās adrese ir? Tas ir, kad galvenais izsauc funkciju foo aicina funkciju bārs, neizbēgami, bārs atdevi. Tātad, kad bārs atgriežas, viņiem ir jāzina, ka tas atgriežās foo ka sauc to. Tāpēc atgriešanās adrese ir adrese, funkcijas, kas tai ir, lai atgrieztos, ja funkcija atgriež. Iemesla dēļ, ka ir svarīgi, lai bufera pārpildes uzbrukumiem ir tāpēc, ka ērti, hakeri gribētu mainīt šo atpakaļadresi. Tā vietā, lai dodas atpakaļ uz foo, es iešu atpakaļ kur hakeris grib doties atpakaļ uz. Un, ērti, ja hakeris bieži vēlas doties atpakaļ uz ir sākums bufera, ka mēs sākotnēji bija. Tātad paziņojums, atkal maz Indijas. Ierīce ir piemērs Little Indijas sistēma, tāpēc skaitlis vai rādītājs tiek saglabāts ar baitu samazināti. Tāpēc šeit mēs redzam - tas ir? Jā. Mēs redzam Ox80, OxC0, Ox35, OxO8. Atcerieties heksadecimālo cipari? Mums nav mainīt heksadecimālo cipari Little Indijas, jo 2 heksadecimālcipariem veido vienu baitu, un mēs mainīt baiti. Tieši tāpēc mums nav uzglabāt, piemēram, 80530CO8. Mēs glabāt, nevis, katru 2 cipariem pāri, sākot no labās puses. Ka adrese attiecas uz adresi sākuma mūsu bufera, ka mēs patiešām vēlējāmies, lai iekopēt pirmajā vietā. Iemesls tas ir noderīgi, ir tāpēc, kas notiks, ja uzbrucējs notika, tā vietā, virkni, kas bija tikko nekaitīgs virkne, piemēram, savu vārdu vai kaut ko, ko tad, ja tā vietā, lai string bija tikai daži patvaļīgu kodu kas bija neatkarīgi no viņi vēlas to darīt? Lai viņi varētu - es nevaru iedomāties nevienu atdzist kodu. Tas varētu būt kaut kas, lai gan. Jebkura postošas ​​kodu. Ja viņi vēlas, viņi var vienkārši darīt kaut ko SEG kļūdām, bet tas būtu bezjēdzīgi. Viņi parasti to dara kapāt jūsu sistēmā. Labi. CS50 bibliotēka. Tas ir, būtībā, getInt, getString visas tās funkcijas, mēs paredzēti jums. Tāpēc mums ir char * virkne, un tas ir abstrakcija, ka mēs pūta prom kādā brīdī semestra laikā. Atcerieties, ka virkne ir vienkārši masīvs rakstzīmes. Tāpēc šeit mēs redzam saīsinātu versiju getString. Jums vajadzētu atskatīties uz to atcerēties, kā tas ir faktiski īstenoti. Galvenās detaļas ir, ievērosiet mēs ar vienu rakstzīmi laikā no standarta, kas ir tāpat kā mums rakstīt uz klaviatūras. Tātad vienu rakstzīmi laikā, un, ja mēs pārāk daudz rakstzīmes, Tātad, ja n + 1 ir lielāks nekā jaudas, tad mums ir nepieciešams, lai palielinātu mūsu bufera. Tāpēc šeit mēs esam dubultojot apjomu mūsu bufera. Un ka tur notiek, mēs ievietotu rakstzīmi mūsu bufera līdz mēs saņemsim jaunu līniju vai beigu failu vai kāds, tādā gadījumā, mēs esam darīts ar stīgu un tad reālā getString samazinās atmiņu, piemēram, ja mēs piešķīra pārāk daudz atmiņas tā iešu atpakaļ un sarauties mazliet. Tāpēc mēs neparāda, ka, bet galvenā ideja ir tas ir lasīt vienā rakstura laikā. Tas var ne tikai lasīt visu lieta uzreiz, jo to buferis ir tikai noteiktu lielumu. Tātad, ja virkne, tā mēģina ievietot buferis ir pārāk liels, tad tas pārplūst. Tāpēc šeit mēs novērstu, ka, tikai lasot vienā rakstura laikā, un pieaug, kad mums ir nepieciešams. Tāpēc getInt un citas CS50 bibliotēkas funkcijas mēdz izmantot getString ar to īstenošanu. Tāpēc es uzsvēra svarīgas lietas šeit. Tā aicina getString saņemt virkni. Ja getString neizdevās atgriezties atmiņu, atcerieties, ka getString mallocs kaut ko, lai ikreiz, kad zvanīt getString Jums nevajadzētu (nesaprotams) atbrīvotu šo virkni, kas jums. Tātad šeit, ja tas nav malloc kaut ko, mēs atgriežamies INT_MAX kā tikai karogu, kas, hey, mēs faktiski nav iespējams saņemt veselam skaitlim. Jums vajadzētu ignorēt visu, es atgriežos pie jums, vai jums nevajadzētu uzskatīt to par derīgu ieguldījumu. Visbeidzot, pieņemot, ka izdosies, mēs izmantojam sscanf ar šo īpašo karogu, , kas nozīmē, ka vispirms atbilstu vesels skaitlis, pēc tam saskaņot visas rakstzīmes pēc šī skaitlim. Tāpēc ievērosiet, mēs gribam, lai vienāds 1. Tātad sscanf atgriežas cik daudz spēles, ja veiksmīgi? Tā atgriezīsies 1, ja tā veiksmīgi saskaņota vesels skaitlis, tas atgriezīsies 0, ja tas neatbilst veselam skaitlim, un tā atgriezīsies 2 ja tas atbilstu skaitlis sekoja neliels raksturs. Tāpēc ievērosiet mēs mēģinātu vēlreiz, ja mēs saskaņojam kaut kas, bet 1. Tātad, ja mēs ievadīta 1, 2, 3, C vai 1, 2, 3, X, tad 1, 2, 3 varētu iegūt glabājas vesels skaitlis, X varētu saņemt uzglabāts raksturs, sscanf atgriezīsies 2, un mēs varētu mēģināt vēlreiz, jo mēs tikai vēlamies veselam skaitlim. Ātri pūš caur HTML, HTTP, CSS. Hiperteksta iezīmēšanas valoda, ir struktūra un semantika no interneta. Šeit ir piemērs, no lekciju, kur mums ir HTML tagus. Mums ir galvenais tagus, ķermeņa tagus, mums ir piemēri tukši birkas, kur mēs faktiski nav sākuma un ciešu tagu, mums vienkārši ir saites un attēlu. Nav beigu attēla tagu, tur ir tikai viena tagu, kas varētu sasniegt visu, tag ir jādara. Saite ir piemērs, mēs redzēsim, kā jums saiti uz CSS, skripts ir piemērs tam, kā saiti uz ārēju JavaScript. Tas ir diezgan vienkārši, un atcerieties, HTML nav programmēšanas valoda. Lūk, atcerieties, kā jūs definētu formu, vai vismaz to, ko tas dara? Šāda forma ir darbību un metodi. Metodes, jums būs tikai kādreiz redzēt ir GET un POST. Tātad iegūt, ir versija, kurā lieta tiek likts URL. POST ir, ja tas nav likts URL. Tā vietā, visus datus no veidlapas iekļauj vairāk slēpta no HTTP pieprasījumu. Tātad šeit, darbības nosaka, ja HTTP pieprasījums iet. Ja tas notiek, ir google.com / search. Metodi. Atcerieties atšķirības starp GET un POST, un, vienkārši pateikt, kā, piemēram, ja jūs vēlaties, lai grāmatzīmi kaut ko. Jums nekad nebūs iespēja grāmatzīmi POST URL jo dati nav iekļauti URL. HTTP, tagad ir hiperteksta pārsūtīšanas protokols. Hiperteksta pārsūtīšanas protokols, jūs varētu sagaidīt to nodot Hiperteksta iezīmēšanas valoda, un tā dara. Bet tas ir arī nodod jebkuru attēlu jūs atrast tīmeklī, jebkura lejupielāde veicat sākt, HTTP pieprasījumu. Tāpēc HTTP ir tikai valoda World Wide Web. Un šeit jums ir nepieciešams atzīt šāda veida HTTP pieprasījumu. Šeit HTTP/1.1 uz pusi vienkārši saka, ka ir versija Protokola es esmu, izmantojot. Tas ir diezgan daudz vienmēr būs HTTP/1.1, kā jūs to redzat. Tad mēs redzam, ka tas bija GET, alternatīva ir POST, ka jūs varētu redzēt. Un URL, ko es centos apmeklēt bija www.google.com/search?q = blah, blah, blah. Tāpēc atcerieties, ka tas, jautājuma zīme q = blah blah blah, ir sava veida sīkumi, kas ir iesniegusi veidlapu. Atbilde tā varētu atgriezties pie manis varētu izskatīties kaut kas līdzīgs šim. Again, sākot ar protokolu, kas tiek būs, ka, kam seko statusa kodu. Lūk, tas ir 200 OK. Un visbeidzot, mājas lapas, ka es tiešām lūdza sekos. Iespējams statusa kods, jūs varētu redzēt, un jums vajadzētu zināt, vairāki no tiem. 200 Labi, jūs, iespējams, nav redzējis. 403 Forbidden, 404 Not Found, 500 Iekšējā servera kļūda Parasti, ja jums iet uz mājas lapā un kaut kas ir bojāts vai to PHP kodu avārijām, tā kā ierīces mums ir tik liels Oranžā , kas nāk uz augšu, un saka, piemēram, kaut kas nav kārtībā, šis kods nedarbojas vai šī funkcija ir slikti. Parasti mājas lapas negribu, ka jūs zināt, kādas funkcijas ir patiešām slikti, tā vietā viņi būs tikai jums 500 Iekšējā servera kļūdas. TCP / IP ir 1 slānis zem HTTP. Atcerieties, ka ir internets ārpus World Wide Web. Tāpat kā, ja jūs spēlēt tiešsaistes spēli, kas nav iet caur HTTP, tas iet cauri dažādi - tas joprojām ir, izmantojot internetu, bet tas neizmanto HTTP. HTTP ir tikai viens piemērs no protokola pamatā ir TCP / IP. IP burtiski nozīmē interneta protokolu. Katram datoram ir IP adrese, tie ir tie 4 ciparu lietas piemēram, 192.168.2.1, vai kāds, kas mēdz būt vietējais. Bet tas ir modelis IP adresi. Tātad DNS, Domain Name Service, ka tas, ko pārveido lietas, piemēram, google.com ar faktisko IP adresi. Tātad, ja jūs tipa, ka IP adresi URL, , kas dos jums Google, bet jūs nemēdz atcerēties tās lietas. Jums ir tendence, nevis atcerēties google.com. Pēdējā lieta, mums ir ostas, kur tas ir TCP daļa IP. TCP ir kas vairāk. Domāt par, piemēram, jums ir jūsu interneta pārlūkprogrammā, kas darbojas. Varbūt jums ir kāda e-pasta lietojumprogramma; varbūt jums ir kāda cita programma, kas izmanto interneta darbību. Viņiem visiem ir pieejams internets, bet jūsu dators ir tikai 1 WiFi karti vai neatkarīgi. Tātad ostas ir tā, ka mēs esam spējīgi sadalīt kā šie pieteikumi ir iespēja izmantot internetu. Katrs pieteikums saņem 1 konkrētu portu, ka tā var klausīties tālāk, un pēc noklusējuma, HTTP izmanto portu 80. Daži e-pasta pakalpojumus izmanto 25. Zemas numurētas tiem mēdz būt aizsargātas. Jums parasti ir iespēja saņemt augstāku numurētas tiem pats. CSS, Cascading Style Sheets. Mēs stils interneta lapas ar CSS, nevis HTML. Ir 3 vietas, jūs varat ievietot savu CSS. Tas var būt inline starp stila tagiem, vai pilnīgi atsevišķā failā, un pēc tam saistīt iekšā Un šeit ir tikai piemērs CSS. Jums vajadzētu atzīt šo modeli, ja pirmais piemērs ir, mēs esam saskaņojot ķermeņa tag, un šeit mēs esam centrējot ķermeņa tag. Otrs piemērs, mēs esam saskaņojot lieta ar ID kājenes, un mēs esam piemērot dažus stilus, lai to. Ievērojiet, ka ID kājenes teksta biznesa plānā pa kreisi, tā pamattekstu-līdzina centru. Kolektors ir ķermeņa iekšpusē. Tā vietā, teksta saskaņot pa kreisi, lai gan ķermenis saka teksta Līdzināt uz centru. Tas ir visai kaskādes daļa no tā. Jums var būt - jūs varat norādīt stilus organismā, un tad viss, kas organismā var norādīt konkrētāki stilus, un viss strādā, kā jūs sagaida. Konkrētāki CSS tehnisko specifikāciju priekšroka. Es domāju, ka tas arī viss. [Ali Nahm] Sveiki visiem. Ja es varētu tikai iegūt jūsu uzmanību. Es esmu Ali un es iešu cauri PHP un SQL tiešām ātri. Tātad, mēs varam sākt. PHP ir īss PHP: Hiperteksta Preprocessor. Un, kā jūs visi vajadzētu zināt, tas ir servera puses skriptu valoda, un mēs to izmantot atpakaļ beigām mājas lapas, un cik tas daudz par aprēķinu, kas aiz-ainas daļu. Sintakse. Tas nav, piemēram, C, pārsteigums, pārsteigums. Tas vienmēr ir jāsāk ar, ja jūs varat redzēt, - es nevaru virzīties uz priekšu. Jūs varat redzēt, jums ir nepieciešams jauna veida lencēm, un tad jums arī ir nepieciešams? Php. Tas vienmēr kā jums kadrēt PHP tekstu, savu PHP kodu. Tāpēc tas var būt tikai, piemēram, C, kur jūs veida nodot to pirmo reizi. Jums ir nepieciešams, lai vienmēr surround to. Un tagad, galvenais sintakse ir tāda, ka visi mainīgie ir nepieciešams, lai sāktu ar $ raksturu. Jums ir nepieciešams to darīt, ja jūs tos definējot, jums ir nepieciešams, lai to izdarītu ja jūs, kas attiecas uz tiem vēlāk. Jums vienmēr ir nepieciešams, ka $. Tā ir jūsu jauno labāko draugu, diezgan daudz. Jums nav - atšķirībā no C, jums nav nepieciešams, lai kāda veida mainīgo veida tā ir. Tāpēc, kamēr jums ir nepieciešams $, jums nav nepieciešams, lai, piemēram, int x vai string y, etcetera, etcetera. Tāpēc neliela atšķirība. , Kā rezultātā, tas nozīmē, ka PHP ir vāji tipa. PHP ir vāji tipa valoda, un tā ir vāji drukāti mainīgos. Citiem vārdiem sakot, tas nozīmē, ka jūs varat pārslēgties starp dažādiem mainīgo tipiem. Jūs varat saglabāt savu numuru 1, kā int, jūs varat saglabāt to kā virkni, un jūs varat saglabāt to kā peldēt, un tas viss būs, ka skaitlis 1. Pat ja jūs uzglabāt to dažādos veidos, tas joprojām ir - mainīgās veidi joprojām turot beigās. Tātad, ja jūs meklēt šeit, ja jūs atceraties no PSET 7, daudzi no jums, iespējams, bija problēmas ar to. Divas vienādas zīmes, 3 vienādas zīmes, 4 vienādas zīmes. Labi, nav 4 vienādas pazīmes, bet ir 2 un 3. Jūs varat izmantot 2 vienādas zīmes, lai pārbaudītu vērtības. To var pārbaudīt dažādos tipos. Tātad, ja jūs varat redzēt pirmo piemēru, Man ir num_int == num_string. Tātad jūsu int un jūsu string ir gan tehniski, 1, bet viņi dažādi veidi. Bet par dubulto vienāds, tas būs vēl iet. Tomēr, lai triple vienlīdzīgiem, tā pārbauda vērtību, kā arī dažāda veida. Tas nozīmē, ka tas nav gatavojas iet šajā otrajā gadījumā šeit kur jūs izmantojat 3 vienādas zīmes vietā. Tā ka ir liela atšķirība, ka jums ir visi ir parādījuši tagad. String konkatenācija ir vēl viens spēcīgs lieta, jūs varat izmantot PHP. Tas ir būtībā tikai tas ērts dot apzīmējums, un tas, kā jūs varat saistīt virknes kopā. Tātad, ja jums ir kaķis, un jums ir suns, un jūs vēlaties, lai arī 2 stīgas kopā, Jūs varat izmantot šo periodu, un tas ir veids, kā tā darbojas. Kā arī var vienkārši novietot blakus viens otram, kā jūs varat redzēt šeit apakšā, piemēram, kur esmu atkārtoju virkni 1, telpas stīgu 2. PHP zinās, lai aizstātu tos kā tādu. Masīvi. Tagad, PHP, ir 2 dažādi masīvi. Jums var būt regulāri bloki, un jūs varat arī asociatīvas bloki, un mēs esam gatavojas iet caur tiem, tiesības tagad. Regulāras masīvi ir tikai tas C, , un tāpēc jums ir indeksi, kas ir numurētas. Tieši tagad mēs esam tikai gatavojas, lai radītu vienu un nodot - tā tas ir, kā mēs veidojam tukšu masīvu, tad mēs ejam uz laiž indeksa numuru 0. Mēs gatavojamies nodot skaits 6, vērtību 6. Jūs varat redzēt to apakšā šeit. Where's - pie indeksa numuru 1, mēs esam gatavojas nodot vērtību skaits 4, un lai jūs varētu redzēt, tur ir 6, tur ir 4, un tad kā mēs esam drukāšanas lietas, kad mēs cenšamies un izdrukāt vērtību glabājas indeksa numuru 0, Tad mēs redzēsim vērtību 6 to izdrukāt. Cool? Tātad tas ir regulāri bloki jums. Vēl viens veids, kā jūs varat pievienot arī lietas, kas regulāri masīvi tagad ir tā, jūs varat vienkārši pievienot tos beigās. Tas nozīmē, ka jums nav, lai norādītu konkrētu indeksu. Jūs varat redzēt numuru, un tad kvadrātiekavās nav indekss norādīts. Un tas zinās - PHP zinās tikai pievienot to saraksta beigās, nākamā bezmaksas vietas. Tātad jūs varat redzēt 1 turpat tajā 0 vietas 2 devās tieši tur pirmajā vietā. 3 iet - pievieno arī tur. Tātad šāda veida jēga. Jūs vienkārši pastāvīgi pievienojot to, un tad, kad mēs esam atsaucoties uz indeksu numuru 1, tas izdrukāt vērtību 2. Tad mums ir bloki, kas ir asociatīvas bloki. Asociatīvas bloki, tā vietā, skaitliskos rādītājus, ko viņi dara, ir, tie ir rādītāji, kas ir ar auklu. Jūs varat redzēt, nevis - es got atbrīvoties no visiem tiem numuru indeksu, un tagad tas ir taustiņš1, key2, key3, un viņi ir pēdiņās, lai norādītu, ka viņi visi stīgas. Tātad, mēs varam būt piemērs par to. Tas piemērs ir tas, ka mums ir TF, un tas ir rādītājs vārdu. Mēs ejam, lai "Ali", kā nosaukums, pēc indeksu, kalorijas ēst, mēs varam nodot int šoreiz nevis virknes, un tad pie indeksa patīk, mēs varam likt visu masīvu iekšpusē no tā. Tātad šis ir veids - tas ir līdzīgs jēdziens, kā mums bija indeksi ar skaitļiem, bet tagad mēs varam mainīt indeksus apkārt , lai tos kā stīgas vietā. Jūs varat arī izdarīt, turklāt tikai darot to individuāli, jūs varat darīt to visu vienā rieciens. Tātad jūs varat redzēt, ka TF šī masīva, un tad mēs noteikti tos visus vienā milzu kvadrātiekavas komplektu. Tā, ka var paātrināt lietas uz augšu. Tas ir vairāk par stilistisko izvēle nekā nav. Mums ir arī cilpas. C mums ir cilpas, kas darbojas kā šis. Mums bija mūsu masīva, un mēs devās no indeksa 0 līdz beigām saraksta, un mēs izdrukāt to visu, vai ne? Izņemot problēma ir, asociatīvo masīvu, mēs ne vienmēr zina šos skaitliskos rādītājus jo tagad mums ir virknes indeksu. Tagad mēs izmantojam foreach cilpas, kas, atkal, jūs, cerams, ko izmanto PSET 7. Foreach cilpas būs tikai zināt, katru daļu sarakstu. Un tas nav jāzina, tieši ciparu indeksu, kas jums ir. Tātad jums ir foreach sintaksi, tāpēc tas ir foreach, jūs varat ievietot masīvs. Tātad mans masīvs sauc PSET, un tad kā, vārdu, jo, un tad jūs nodot šo vietējo pagaidu mainīgo, ka jūs gatavojas izmantot tikai konkrētā lieta, kas notiek, lai tur īpašs - vienā gadījumā vai viena sadaļa no masīva. PSET skaits rīkos 1, un tad varbūt tas būs turēt numuru 6, un tad tas turēs numuru 2. Bet tas ir garantēta, lai iet caur katru vērtību, kas ir masīvā. Noderīgas funkcijas, kas jums būtu jāzina, PHP ir nepieciešama, tā, kas padara pārliecināts, ka jūs esat, ieskaitot dažus failus, atbalss, izvešanu, tukša. Es ļoti iesakām jums apskatīt PSET 7 un apskatīt šīm funkcijām. Jums, iespējams, ir jāzina tiem, tāpēc es noteikti zinu, ko, tieši tā, tie visi dara. Un tagad mēs esam gatavojas iet cauri jomu tiešām ātri. Joma, PHP ir sava veida bailīgs lieta, atšķirībā no C, un tāpēc mēs esam tikai gatavojas iet caur to ātri. Tātad pieņemsim, ka mēs sākam tajā bultiņu, kas mēs esam tur. Un mēs esam gatavojas sākt ar $ i. Tāpēc mainīgais "i" būs 0, un mēs esam tikai gatavojas glabāt drukāšanas to, ka liels baltā kastē tur. Mēs ejam, lai sāktu ar I0, un tad mēs ejam, lai echo to. Tātad tur ir 0. Un tad mēs ejam, lai pieauguma to, ka attiecībā uz cilpas, un tad tas būs vērtība 1. Viens no tiem ir mazāk nekā 3, tāpēc tas ir gatavojas iet cauri, ka cilpas, un tad mēs ejam, lai redzētu to izdrukāt vēlreiz. Mēs ejam, lai pieauguma to vēlreiz līdz 2, un 2 ir mazāks nekā 3, tāpēc tas būs caurlaide uz cilpas, un tas būs drukāt 2. Tad jūs, ņemiet vērā, ka 3 ir ne mazāk kā 3, lai mēs izkļūtu no cilpa. Tāpēc tagad mēs esam iziet, un tad mēs ejam, lai dotos uz aFunction. Labi. Tātad jums ir atzīmēt, ka šis mainīgais, ko mēs esam izveidojuši, "i" mainīgais, nav vietas scoped. Tas nozīmē, ka tas nav vietējā cilpa, un mainīgais mēs joprojām var piekļūt un mainīt pēc tam, un tas joprojām būs efektīva. Tātad, ja jūs iedziļināties funkciju tagad, jūs redzēsiet, ka mēs izmantot arī "i" mainīgo, un mēs esam gatavojas pieauguma 'i' + +. Jūs domājat, ka, pirmkārt, pamatojoties uz C, ka tas ir kopija no "i" mainīgo. Tā ir pilnīgi cita lieta, kas ir pareizs. Tātad, kad mēs drukāt, mēs ejam, lai drukātu "i" + +, kas gatavojas izdrukāt ka 4, un tad mēs ejam - sorry. Tad mēs ejam, lai izbeigtu no šīs funkcijas, un mēs gribam būt, ja tas bultiņa ir šobrīd. Tas nozīmē, ka tad, tomēr, kaut gan funkcija mainījusies vērtību "i", tas nemaina ārpus funkciju, tāpēc, ka funkcija ir atsevišķa joma. Tas nozīmē, ka tad, kad mēs atbalss "i", tā nav mainījusies darbības jomā funkciju, un tad mēs ejam, lai drukātu 3 vēlreiz. Dažādas lietas par jomu PHP nekā C. Tagad PHP un HTML. PHP tiek izmantots, lai padarītu mājas lapas dinamiska. Tā veida padara lietas atšķirīgi. Mums ir tas atšķiras no HTML. Ar HTML, mēs vienmēr vienkārši ir pats statiska lieta, tāpat kā Rob parādīja, tā kā PHP, jūs varat mainīt lietas, pamatojoties uz kuriem lietotājs. Tātad, ja man ir tā, es esmu, "Jūs esat pieteicies kā -" un tad vārds, un es varu mainīt nosaukumu. Tātad tagad nosaukums ir Jāzeps un tas ir "par mani", bet tad es varētu arī mainīt nosaukumu, lai Tommy. Un tas būtu cita lieta. Tad mēs varam arī mainīt dažādas lietas par viņu, un tas liecina atšķirīgu saturu, pamatojoties uz nosaukuma. Tātad, PHP var veida mainīt to, kas notiek jūsu mājas lapā. Pats šeit. Tomēr ņemiet vērā, ka viņiem ir atšķirīgs saturs, pat ja Jums ir tehniski joprojām piekļūt to pašu mājas lapu virsmas. Radīt HTML. Ir 2 dažādi veidi, kā jūs varat darīt. Tāpēc mēs iet caur šīs tiesības tagad. Pirmais veids ir, jums ir - jā, sorry. Tātad jums vienkārši ir jūsu regulāri, lai cilpa PHP, un tad jūs atbalss PHP, un jūs atbalss no HTML. Izmantojot to, Rob parādīja, HTML skriptu un tad, izmantojot PHP drukāt tikai to izdrukāt, lai mājas lapā. Alternatīvs veids ir darīt tā, it kā jūs atdalītu PHP un HTML. Lai jūs varētu būt līnija PHP, kas sākas uz cilpas, tad jūs varat būt līniju HTML atsevišķā lieta, un tad jūs galu cilpa, atkal, ar PHP. Tātad, tas ir sava veida atdalot to ārā. Kreisajā pusē, jūs varat, ka jums ir visas - tas ir tikai 1 gabals PHP. Labajā pusē, jūs varat redzēt, ka jums ir līnija PHP, Jums ir līnija HTML, un jums ir līnija PHP vēlreiz. Tāpēc atdalot to ārā, ko viņi dara. Un jūs, ņemiet vērā, ka nu tā, vai nu no tām, viņi joprojām izdrukāt attēlu, attēlu, attēlu, lai HTML joprojām tiek drukāts tāpat. Un tad jūs joprojām redzēt 3 attēli parādīsies uz jūsu mājas lapā. Tātad, tas ir 2 dažādi veidi, kā darīt to pašu. Tagad mums ir formas un lūgumus. Kā Rob parādīja jums, ir formas HTML, un mēs vienkārši brīze, izmantojot šo. Jums ir rīkoties un jums ir metode, un jūsu darbība veida parāda, kur jūs gatavojas nosūtīt, un metode ir, vai tas būs GET vai POST. Un GET pieprasījumu, kā teica Rob, nozīmē, ka jūs gatavojas nodot to formā un jūs redzēsiet to kā URL, bet POST pieprasījums jums nebūs redzēt URL. Tāpēc neliela atšķirība. Tomēr viena lieta, kas ir līdzīga lieta ir tas, ka POST un GET ir vienlīdz nedrošs. Tātad jūs domājat, ka tikai tāpēc, ka jūs neredzat to URL, tas nozīmē, ka POST ir drošāka, bet jūs joprojām var redzēt to jūsu cookies uz informāciju, kas jums sūtāt. Tāpēc nedomāju, ka par vienu vai otru. Vēl viena lieta ir tas, ka jums ir arī sadaļā mainīgie. Jūs puiši izmanto šo PSET 7, lai saņemtu savu lietotāja ID informāciju. Kas notika, bija tas, ka jūs varat izmantot šo asociatīvo masīvu, $ _SESSION, un tad jūs varat piekļūt dažādas lietas un uzglabāt dažādas lietas pāri lapām. Pēdējā lieta ir tā, ka mums ir SQL, Strukturēts Query Language, un tas ir programmēšanas valoda, lai pārvaldītu datu bāzes. Kas, tieši tā, ir datu bāzes? Viņi kolekcijas tabulas, un katrs tabulā var būt līdzīga veida objektiem. Tāpēc mums bija tabulu lietotājiem jūsu finanšu PSET. Un kāpēc tie ir noderīgi? Jo tas ir veids, kā pastāvīgi uzglabāt informāciju. Tas ir veids, kā izsekot lietām un pārvaldīt lietas un faktiski redzēt to uz dažādām lapām un sekotu. Tā kā, ja jūs vienkārši glabāt to, ka viens tūlītēju brīdī un pēc tam izmantot to vēlāk, jūs nevarēsiet piekļūt kaut ko, ka jūs esat saglabājis. Mums ir 4 galvenās lietas, ko mēs izmantojam, lai SQL komandas. Mums ir izvēlēties, ievietot, dzēst un atjaunināt. Tie ir ļoti svarīgi, lai jūs guys zināt jūsu viktorīnas. Mēs ātri iet pār izvēlieties tiesības tagad. Būtībā, jūs esat izvēloties rindas no datu bāzes. Tātad, ja jums ir, tieši šeit - mēs esam šos 2 dažādas lietas, un mēs vēlamies, lai izvēlētos no klasēm tabulas kur laba - kur awesome kolonnā vērtība ir 1. Tātad jūs varat redzēt šeit, mums ir šīs 2 lietas klases nosaukumu, CS50 un Stat110, un mums ir klases ID un saukli. Tāpēc mēs vēlamies, lai atlasītu visu šo informāciju. Tad jūs varat redzēt šeit, ka tas ir sava veida atrauti no šīs laba kolonnas, kur visas lietas ir 1, un tad tas ir klases ID, klases nosaukumu un devīzi, ka tā var izvēlēties no. Kā tieši jūs darīt to kodu? Jums ir izmantot PHP. Tātad tas ir veids, kā PHP un SQL ir saistīti viens ar otru. Tagad mums ir mūsu kodu, un mēs spēsim izmantot mūsu vaicājumu funkcijas kā mēs to darījām PSET 7, un mēs esam gatavojas palaist SQL vaicājumu. Tad mēs ejam, lai būtu - mums vienmēr ir pārbaudīt, vai rinda ir triple vienlīdzīgas, ja nepatiesa. Tātad vēlreiz, jūs vēlaties, lai pārbaudītu veidu un vērtību, un tad, ja tas nedarbojas, tad jūs vēlaties, lai atvainoties, kā parasti, kā mēs to darījām PSET 7. Pretējā gadījumā jūs vēlaties, lai cilpa ar visu, ar tiem ērts foreach cilpas, ka mēs vienkārši piegāja. Tagad, ka mēs esam looping, izmantojot un mēs esam to pagātnes, pieņemsim, ka mūsu vaicājumu pagājis, tagad mums ir mūsu foreach cilpa. Un pirmajā rindā tas ir, tāpēc šeit ir rinda, tieši šeit, tas ir liekami. Tas notiek, lai izdrukāt visu informāciju, ko tā ir gotten. Tātad, tas notiek, lai izdrukāt apakšā "Gribu mācīties HTML?" Tad tas notiek, lai dotos uz nākamo rindu, jo tas ir pabeigts pirmais cilpa, Un tad tas notiek, lai izdrukāt otrajā rindā no tā, kas būs STAT110, Atrast visus momentus. Viens no pēdējā lieta ir par SQL ievainojamības. Es zinu, David pieskārās par šo mazliet lekciju. Jūs varat izlasīt šo vēlāk. Tas ir patiešām smieklīgi. SQL injekcijas, ir sava veida grūts lieta. Pieņemsim, ka jūs vienkārši stick šos mainīgos tiesības uz jūsu jautājumu, kā jūs varat redzēt, ka pirmajā rindā. Tāpēc šķiet labi, vai ne? Jūs vienkārši liekot lietotājvārdu un paroli, lai Jūsu SQL vaicājumu, un jūs vēlaties, lai kuģis to off un saņemt kāds ir jūsu datu tabulā. Tas šķiet diezgan vienkārši. Tā ļauj teikt, kāds liek, parole, šo vai tekstu tieši šeit - faktiski būtu sarkanā lodziņā. Tātad pieņemsim, ka viņi laiž šo paroli uz - ka tas, ko viņi ieiet. Tāpēc viņi liekot vai "1" = 1. Veida dumjš paroli, lai ir. Tagad vienkārši aizstāt to, un jūs ņemt vērā, ka šajā SQL vaicājumu tagad, novērtējums ir vienmēr ir taisnība, jo jūs ņemt vērā, ka Jūs varat SQL vaicājums atlasīt visu šo informāciju vai arī varat vienkārši ir 1 = 1. Tātad, tas vienmēr notiek, lai novērtētu taisnība. Tas nav gatavojas, lai tiešām strādāt, jo tas nozīmē, ka hakeris var ielauzties jūsu sistēmā. Risinājums ir tas, ka jums ir izmantot ACN sistēmu, kas nozīmē, ka jums ir izmantot jautājuma zīmes, kas ir tas, ko jūs guys izmantoti PSET 7, kur jūs gatavojas izmantot jautājuma zīmi vietā, kur jūs vēlaties, lai kaut ko, un tad jums nāksies komatu, un tad jums būs pēc tam, Pēc jūsu virknes, dažādi mainīgie, ka jūs vēlaties, lai aizstātu jūsu jautājuma zīmi. Tātad jūs piebilst, ka tagad man ir šīs sarkanās jautājuma zīmes. Tad man mainīgos pēc manas stīgas, lai es zinu, lai aizstātu tos minētajā kārtībā pēc tam. Tas nodrošinās, ka, ja kāds to dara, piemēram, tas, un tie ir vai 1 = 1 situāciju, kas būs pārliecināties, uz muguras beigās, pārliecinieties, ka tas nav reāli salauzt SQL vaicājumu. Labi, tā tas ir diezgan daudz to, viesulis PHP un SQL. Best of luck jums visiem, un tagad Ore [Oreoluwatomiwa Babarinsa] Labi ikvienam. Laiks iet pār kādu JavaScript un dažas citas lietas, ļoti ātri, tāpēc mums nav tur jums up šovakar. JavaScript. Jā. JavaScript ir veida atdzist lieta, it kā. Lietas, jums tiešām ir nepieciešams zināt par JavaScript, tas ir sava veida, piemēram, klienta puses beigām, kas jūsu mājas app gatavojas darīt. Ir dažas lietas, jūs vienkārši nevēlaties, lai rūpētos par visu laiku uz servera pusē. Visi maz mijiedarbību, uzsverot viena lieta, padarot kaut pazūd. Jūs tiešām nevēlaties, lai būtu runāt ar savu serveri, visu laiku par to. Un daži, ka nav pat iespējams izdarīt uz servera pusē. Tas ir iemesls, kāpēc mums ir nepieciešams kaut kas līdzīgs JavaScript. Labas lietas par JavaScript: Tā ir dinamiski drukāti. Ko tas nozīmē, ka jūsu programma nav nepieciešams zināt ko, tieši tā, ka mainīgie ir, ja jūs rakstīt to ārā. Tas būs tikai sava veida izdomāt, kā tas darbojas. Citas lietas, kas ir cool par to: Tas ir cirtaini lencēm valodu, kas nozīmē, sintakse ir līdzīga C un PHP. Jums nav jādara daudz pārstrādāt, ja jūs mācīties JavaScript. Šeit mums ir mazliet JavaScript. Interesanta lieta šeit ir tas, ka, ja paskatās uz to, mums ir mazliet JavaScript turpat galvas tag. Kas ir tas ir būtībā tikai ietver JavaScript failu. Tas ir viens veids, kā jūs varat iekļaut JavaScript savā programmā. Tad otrais mazliet ir faktiski daži inline JavaScript, ļoti līdzīgs inline stilu ar CSS, un jūs tikai rakstiski daži kodu ļoti ātri tur. JavaScript ir masīvi. Tikai vēl viens veids, lai saglabātu datus apkārt, ir ļoti noderīga. Ļoti jauki un viegli sintakse. Jūs varat izmantot kvadrātiekavas, lai piekļūtu visu un glabāt visu kopā. Nekas pārāk sarežģīts. Cool lieta par JavaScript un skriptu valodas vispār ir tas, ka jums nav jāuztraucas par masīva izmēru. Jūs varat izmantot array.length un sekot līdzi to, un arī masīvs var pieaugt vai sarukt, jo jums ir nepieciešams to. Tātad jums nav pat jāuztraucas par jebkāda veida, ak nē, man ir nepieciešams piešķirt vairāk lietas, vai kaut kā tā. Cool lieta ir tā, ka JavaScript ir kaut ko sauc objektus. Tā ir objektu orientētu valodu, tāpēc, kas tas ir, ir, būtībā, veids, lai jūs varētu grupas datiem kopā, nedaudz līdzīga struktūrai, bet jūs varat piekļūt to kā struktūrai vai asociatīvā masīva sintaksi. Tas ir diezgan vienkārši, un to, ko jūs varat darīt ar to, ir grupas dati, kā arī Ja jums ir ķekars datiem, kas ir saistīti. Jo tas ir visas lietas, jums ir nepieciešams, lai aprakstītu auto, Jums nav nepieciešams, lai būtu to ķekars dažādās vietās. Jūs varat stick to 1 objekta JavaScript. Kā jūs droši vien zināt, atkārtojot ir viens no šiem nogurdinošs uzdevumus. Jūs vienkārši darīt to pa atkal. Jums ir nepieciešams, lai sarunātos ar katru objektu ar automašīnu, vai jums ir nepieciešams, lai iet caur katru posteni sarakstā vai kaut kas tamlīdzīgs. Tātad JavaScript ir, līdzīgi PHP, kā foreach sintaksi. Šajā gadījumā, tas ir, lai cilpa. Jūs vēlaties izmantot šo tikai uz objektiem. Ir dažas problēmas, kas rodas, ja jūs izmantot šo par masīvu. Tas parasti ir viena no tām lietām, lai gan, ka ir ļoti noderīga, jo jums novērst daudz virs galvas jo jums nav pull up visu jūsu objektā pats. Jums nav atcerēties visas galvenās nosaukumiem. Jūs vienkārši veida saņemt tos atpakaļ šajā sintaksi. Šajā, ar, jūs vienkārši vēlaties, lai atcerēties ka jūs saņemat atpakaļ visas atslēgas, kas ir ļoti līdzīgi kā hash tabulu. Ja jūs atceraties no tā, ja jūs varētu īstenot virkni jūs varētu saņemt kaut ko kas ir saistīts vērtību ar to. Ko jūs varat darīt ar to ir varat teikt, visas tiesības, Man mašīnā, un es to sauca Ferrari. Tātad jūs varat ievietot virknes Ferrari atkal vēlāk, un jūs varat saņemt, ka out. Un jūs varat darīt, ka pa apli, ar In cilpa. Tik vienkārši vairāk par objektiem. Galvenais lieta no tā, jums ir nepieciešams atcerēties ir tas, ka jūs varat izmantot objektu struct, piemēram, sintakse, ja jūs vēlaties ar šiem, izņemot gadījumus, ja tas, ko jūsu gatavojas izmantot kā virkne nav derīgs mainīgā nosaukums. Tātad, ja paskatās, ka mums ir atslēga ar telpām. Nu, ja tu būtu, lai object.key, telpa, ar, telpas, telpas, tas vienkārši nebūtu jēgas sintaktiski. Lai jūs tikai varat darīt, ka ar šāda veida stiprinājuma sintaksi. Arī JavaScript ir ļoti joma gudrs PHP. Jums ir 2 veidi, kā risināt jomu. Jūs nevarat būt VAR priekšā mainīgo, un tas tikai nozīmē, ka šis ir globāla. Jūs varat redzēt no jebkuras vietas. Pat tad, ja tu būtu, lai to, ja paziņojums, jebkur citur savu kodu pēc šī punkta, jūs varētu redzēt, ka mainīgo. Vēl viena lieta, lai gan, ir ar VAR, tas ir tikai uz kāda funkcija jūs collas Ja jūs neesat funkciju, labi, tas ir globāls. Bet, ja jums ir funkcijas, ko tā ir redzama tikai šo funkciju. Man nav piemēru, bet, jā. Tā ir viena no tām lietām, kur Jūs varat pārvaldīt to mainīgie jūs vēlaties būt globāls, kādi mainīgie jūs vēlaties būt vietējā, bet jums ir jābūt uzmanīgiem par to, jo jums nav smalku graudu kontroles jūs darāt C tipa, kur, ja kaut kas tiek deklarēts par cilpu, tas būs palikt, ka cilpa. Lieta, ko mēs patiesībā rūp izmantojot JavaScript ir manipulējot interneta lapas, vai ne? Es domāju, ka ir iemesls, kāpēc mēs darām to. Lai to izdarītu, mums ir izmantot kaut ko sauc DOM. Dokumentu Object Model. Būtībā, ko tas ir tas aizņem visu savu HTML un modeļus, tā ārā ķekars objektiem, kas ligzdotu otru. Jūs sākt ar kaut kas līdzīgs šim. Jums ir, par tiesībām uz mani, ķekars kodu, kas tur, kas ir sava veida - Jūs domājat, ka gribētu būt ļoti grūti manipulēt, jo tu būsi analizējot caur ķekars teksta un kam gabals intervālu lietas. Un ko tad, ja tas nav pareizi formatēts? Sliktas lietas notiks. Tāpēc JavaScript rūpējas par to, lai jūs, un jums jauku datu struktūru, piemēram, viens no par manu kreiso, kur jums vienkārši ir dokuments, un iekšā, ka jums ir kaut ko sauc par HTML, un iekšā, ka jums ir galvu un ķermeni, un iekšā, ka galvā jums nosaukumu, etcetera, etcetera, etcetera. Tas vienkāršo manipulējot ar mājas lapu, lai tā ir tikai, Ak, es tikai vēlos runāt ar šo objektu. Kārtot ļoti līdzīgi kā jūs varētu runāt ar cita objekta veicāt sevi. Tāpat kā es teicu, viss DOM ir dokumenta objektu. Vai nu tā ir tikai viena vieta, un tad varat doties tajā, lai atrastu lietas, un jūs varat darīt to - tā ir vecā stila, kā darīt to, tur, kur jūs document.getElementById, un tad vārds, un kā jūs varat droši pateikt, tas kļūst ļoti smagnēja pēc brītiņa. Tātad, jūs, iespējams, nevēlaties, lai to izdarītu. Tieši tāpēc mēs esam nākamā lieta, ko mēs esam gatavojas runāt par pēc tam. Galvenais lieta šeit ir tas, ka, labi, jums ir visus šos elementus, vai ne? Tāpēc varbūt es varu mainīt krāsu kaut kad lapa slodzēm. Tātad, ko? Ko darīt, ja lietotājs noklikšķina uz kaut ko? Es gribu to darīt, kaut ko interesantu, noklikšķinot kaut ko. Tieši tāpēc mēs esam notikumus. Jūs varat, būtībā, atrast jebkuru elementu savā DOM, un tad saka, hey. Kad šis slodzes vai kāds noklikšķina uz to, vai tad, kad viņi peli pār to, kaut ko darīt ar to. Un kas jums ir, jums ir funkcijas, kas apstrādātu šo jums. Šīs funkcijas ir notikumu apstrādes. Kas tās ir bez - tas ir tikai iedomātā veids, kā pateikt, šī funkcija tiek izpildīta tikai tad, ja šis pasākums notiek. Tāpēc tas rokturi notikums, kas notiek. Tas ir, kā jūs varētu likt no notikumu apdarinātājs. Man ir dažas pogas, un, kad jūs noklikšķiniet uz tā, tā eksplodē. Tāpēc neklikšķiniet uz pogas. Tas ir viens veids, kā tuvojas to, labi? Jums ir pogu tag, un par klikšķi, jums ir virkne, kas saka, oh, starp citu, man šī sprāgstoša lieta par mani. Pretējā gadījumā, tas ir tāpat kā regulārs pogu, jūs tikko veikts. Jūs varat arī izdarīt vēl viens veids, satveršanas DOM elementu, bet mēs ietaupītu, ka pēc tam, kad mēs runājam par jQuery. JQuery: Tas ir bibliotēka, kas ir pārrobežu pārlūku. Jūs varat to izmantot diezgan daudz neko. Un tas tikai dod jums daudz instrumentu, lai strādāt ar jums. Tāpēc, ka JavaScript, bet spēcīgs, nav visas rīki jums ir nepieciešams no kastes, lai patiešām risinātu web app jūs varētu vēlēties darīt. Tāpēc tas vienkāršo daudzas lietas, sniedz jums daudz funkciju no kastes, ka jūs parasti ir rakstīt sevi, atkal un atkal un atkal. Un tikai padara lietas ļoti vienkārši. Jums ir arī pārslēdzējiem, kas ļauj jums veikt visus šos elementus no DOM daudz vairāk vienkārši, tā vietā, lai izmantotu šo ļoti ilgi funkciju zvani. Vairāk par šiem selektori. Jums ir, tur jums ir, teiksim Es vēlos saņemt elementu ar ID "klints". Nu, jQuery, tas ir tikai $ un tad virkne, kas ir mārciņu, un tad "rock". Tas ir ļoti vienkāršs un daudz ātrāk, nekā tradicionālās JavaScript veids, kā risināt šo problēmu. Un jums ir līdzīgas lietas, klases un elementu veidiem. jQuery ir - viens no atdzist iezīmes ir varat veida saspiest leju jūsu jautājumiem par savu DOM ļoti, ļoti ātri. Tagad mēs esam atpakaļ uz notikumu apstrādi, un tas, kā jūs varētu rīkoties viens notikums jQuery. Tātad, ko mēs ejam šeit ir, mēs esam sakot, viss ir labi. Man ir skriptu tag, vai ne? Tāpēc man ir šī inline JavaScript. Ko mēs gatavojamies darīt, ir, mēs ejam teikt, labi. Ja dokuments ir sagatavots, kas nozīmē, dokuments ir piekrauts, mēs gatavojamies iet uz šo funkciju, un mēs esam gatavojas teikt, visas tiesības, Šī funkcija ir faktiski dara kaut ko citu. Tas ir būtībā sakot, viss ir labi, atnesiet man elementu ar ID "myid." Un pēc tam sniedz to funkciju kopējs, kas izpilda tad, kad jūs noklikšķiniet uz tā. Būtībā, ko tas dara, ir, tā saka, viss ir labi. Lapa tiek ielādēta, tāpēc es esmu gatavojas in, atrast šo elementu, arī tā šo notikumu apdarinātājs, un tas būtībā izveido savu lapu, lai jums. Un tas, kā jūs vēlaties, lai padomātu par notikumu apstrādi. Jūs vienkārši vēlaties, lai padomātu par, labi, ja kaut kas notiek, ko es gribu, lai notiktu? Jūs nevēlaties, lai padomātu par, labi, man ir nepieciešams, lai pārliecinātos, ka šī lieta sarunas, lai šo lietu, šī lieta blah blah blah, jo jūs vienkārši vēlaties runāt lieta saistībā ar notikumiem. Kad tas notiek, tas notiek. Kad tas notiek, tas notiek. Un, ja viss izraisīt citas lietas, tas ir lieliski. Bet jūs nevēlaties, lai mēģinātu darīt sarežģītu kodu kur jūs izraisot vairākas lietas, tajā pašā laikā, jo jūs esat tikai gatavojas sev galvassāpes. Visas tiesības. Tagad mēs varam iegūt mūsu lapu, lai rīkotos pasākumus, bet pieņemsim, ka mans lietotājs noklikšķina uz pogas. Ko darīt, ja es vēlos, lai nosūtītu šo pieprasījumu atpakaļ uz serveri, bet es nevēlos, lai pārlādētu lapu, jo, ņemot pārlādēt jaunu lapu katru reizi kļūst veida garlaicīgs, un kāpēc man vajag nojaukt galvenes atkal un kājenes atkal, un visi elementi lapu vēlreiz tikai, lai atsvaidzinātu sveicienu vai laiks? Tātad, tāpēc mums ir kaut kas līdzīgs Ajax. Ko mēs varam darīt šeit ar Ajax ir, mēs varam teikt, visas tiesības, Es gribu nosūtīt dažus datus uz serveri, un es vēlos saņemt atbildi atpakaļ, lai es varētu atjaunināt manu lapu, vai varbūt vienkārši darīt kādu algoritmisko aprēķinu, kas nebūt neatspoguļo neko lietotājam. Kas jums nepieciešams, lai to izdarītu? Nu, jums ir nepieciešams URL, jums ir nepieciešams runāt. Jūsu serveris nevar vienkārši maģiski klausīties no nekurienes. Jums ir nepieciešams, lai būtu īpaša vieta sūtāt šos datus. Un jums ir vajadzīgs arī daži dati, lai nosūtītu, vai varbūt tā ir dataless vaicājumu. Jūs vienkārši vēlaties, lai ping atpakaļ uz serveri un teikt, hey, es esmu dzīvs, vai kaut kas tamlīdzīgs. Un tad jūs vēlaties funkciju, kas būtībā apstrādā ar panākumiem. Pieņemsim, ka jūs saņemsiet atpakaļ kādu informāciju no servera, un jūs vēlaties mainīt lietotāja nosaukumu savā lapā. Lai jūs varētu saņemt informāciju atpakaļ, un jūs push, ka uz ekrāna. Kas notiek, ir, kad lapa ir gatava, jums izveidot par klikšķi funkciju šai pogai sauc Sveicinātāja. Kas šo, tad tas ir, ja tas spied pogu, tu runā ar greetings.php veiciet POST pieprasījumu, un jūs sakāt, hey, atnesiet man kaut ko no savas lapas. Mums nav tiešām ir nepieciešams, lai aprakstītu to, bet greetings.php, pieņemsim tikai teikt, dod atpakaļ "hello pasauli." Tātad mēs saņemam atpakaļ šo "Hello World", kā arī par panākumiem to, pieņemot, ka nekas noiet greizi, tad mēs tikai iet uz šo mērķa vietu ka mēs noteikts, un mēs vienkārši stick atbildi tur. Un tas ir ļoti vienkāršs veids, kā izveidot Ajax vaicājumu. Ļoti ātri, Rob veida minēja šo jau, lietas var noiet greizi, sliktas lietas var notikt, lai jūs vēlaties, lai iepazītos ar šiem HTTP atbildes kodiem. Kas tie ir, ir tikai, piemēram, 200, viss gāja labi. Kaut kas cits, sliktas lietas notika. Tas parasti ir lieta, ko vēlaties atcerēties. Bet tas ir patīkami zināt, visi no tiem. Un visbeidzot, kad mēs esam izgājuši cauri visiem, ka, mums ir jārunā ļoti ātri par dizainu, , un tad mēs varam jums visu atvaļinājumu. Dizainu. Lietas, ko vēlaties atcerēties. Uzdodiet sev šos jautājumus: Kas būs, izmantojot šo? Ko viņi var izmantot to? Ko mans lietotājiem rūp? Ko viņi rūp? Jūs vienkārši nevēlaties, lai app, un ļaujiet tai tikai pieaugs un kļūt par šo milzu, visu patērē lieta, ka jūs pat nevarat pabeigt. Jūs vēlaties, lai būtu diskrēta mērķus un plānus, un lietas, ko vēlaties, lai risinātu. Dara to bez piepūles. Tas viss saka, būtībā, padara to viegli, lai lietotājs varētu izmantot to, nepadara to par milzu lāse teksta patīk šī slaida ir patiesībā. Jūs vienkārši vēlaties, lai būtu kaut kas, ja tas ir ļoti viegli, lai kāds iet un darīt to, ko viņi vēlas darīt. Jūs nevēlaties, lai viņiem būtu orientēties 5 lapām nokļūt jūsu galvenā funkcija jūsu vietā. Ja Google bija 5 lapas pirms jūs pat varētu meklēt kaut ko, neviens to izmantot. Un visbeidzot, papīra prototips, fokusa grupu. Ir labs dizains un testēšanas metodes. Tikai tāpēc, ka jūs domājat, ka tas strādā priekš jums, nenozīmē, ka kāds cits domā, ka tā darbojas. Bet jā, tas arī viss. [CS50.TV]