1 00:00:00,000 --> 00:00:02,270 >> [Recenzija: Kviz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Sveučilište Harvard] 3 00:00:04,620 --> 00:00:07,660 [To je CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Dobro došli svi. Ovo je pregled za kviz 1. 5 00:00:11,610 --> 00:00:15,040 Baš kao disclaimer, ovo je - mislim, da ćemo pokušati pokriti 6 00:00:15,040 --> 00:00:17,770 što je više moguće, ali to ne znači da je 7 00:00:17,770 --> 00:00:20,780 ćemo pokriti sve stvari koje mogu biti u kvizu 1. 8 00:00:20,780 --> 00:00:25,270 Dakle, budite sigurni da je također uzeti pogledati predavanje, sekcija, sve što možete. 9 00:00:25,270 --> 00:00:28,240 Kviz 1 koja će se u srijedu, iduće srijede. 10 00:00:28,240 --> 00:00:33,800 Dakle, budite sigurni da se studij. To će biti, vrlo vjerojatno, kao i prvi kviz 11 00:00:33,800 --> 00:00:36,390 glede njegova formata, ali vjerojatno će biti mnogo teže. 12 00:00:36,390 --> 00:00:39,600 Barem, prošle godine kada sam uzeo 50, mislio sam da je to mnogo teže. 13 00:00:39,600 --> 00:00:42,410 Dakle proučiti puno. 14 00:00:42,410 --> 00:00:45,190 >> Idem pokriti strukture podataka i diferencijalno kodiranje. 15 00:00:45,190 --> 00:00:47,910 To je nešto što mnogi ljudi misle da je složen, 16 00:00:47,910 --> 00:00:51,930 ali ja ću pokušati učiniti ga kao jednostavan kao moguć. 17 00:00:51,930 --> 00:00:56,330 Prije svega, ono što želimo ti dečki znati za kviz 1 je 18 00:00:56,330 --> 00:01:00,970 konceptualne opise svake od podatkovnih struktura koje ću predstaviti. 19 00:01:00,970 --> 00:01:03,960 To znači da ne morate da se zapravo 20 00:01:03,960 --> 00:01:07,020 implementirati hash tablicu u kvizu 1. 21 00:01:07,020 --> 00:01:10,250 Mi ne želimo da provesti cijeli hash tablicu, možda ćemo pokušati 22 00:01:10,250 --> 00:01:13,090 da li provesti neke funkcije, 23 00:01:13,090 --> 00:01:16,940 najčešći operacije, ali mi ne ide kako bi ste provesti sve. 24 00:01:16,940 --> 00:01:21,010 Dakle, važno je da razumijete koncept iza svake strukture podataka 25 00:01:21,010 --> 00:01:23,510 i da ste u mogućnosti da kod u C, 26 00:01:23,510 --> 00:01:27,880 samo najčešći poslovi koje imaju za svaku strukturu podataka. 27 00:01:27,880 --> 00:01:30,090 I također moći pregledati naputke i tvorevina, 28 00:01:30,090 --> 00:01:33,470 jer se čini puno u tim strukturama podataka. 29 00:01:33,470 --> 00:01:37,380 >> Prvo, povezani liste. Povezane liste su zapravo vrlo slična polja, 30 00:01:37,380 --> 00:01:39,930 ali razlika između povezan popisu i niz, 31 00:01:39,930 --> 00:01:45,160 Prije svega, to je popis povezana je vrlo fleksibilan veličinu 32 00:01:45,160 --> 00:01:50,060 dok je u poljima morate birati bilo vrlo velikih dimenzija za niz, 33 00:01:50,060 --> 00:01:53,710 tako da znate da ćete biti u mogućnosti pohraniti sve svoje podatke na tom polju, 34 00:01:53,710 --> 00:01:59,370 ili morate koristiti malloc imati fleksibilno duljinu niza. 35 00:01:59,370 --> 00:02:03,680 U povezanim listama to je vrlo lako samo dobiti više elemenata, 36 00:02:03,680 --> 00:02:07,210 stavite više elemenata u popisu povezanom ili ukloniti elemente. 37 00:02:07,210 --> 00:02:09,370 A zapravo, ako ne želite popis povezana biti riješeno, 38 00:02:09,370 --> 00:02:13,950 možete potražiti i ukloniti elemente u stalnom vrijeme, 39 00:02:13,950 --> 00:02:16,800 pa O (1) vrijeme, tako da je to vrlo povoljno. 40 00:02:16,800 --> 00:02:20,660 Vi samo morati biti oprezni da se uvijek sjetiti da malloc i bez čvorova, 41 00:02:20,660 --> 00:02:25,510 Upravo zato, ako to ne učinite, imat ćete curenje memorije. 42 00:02:25,510 --> 00:02:31,480 Dakle povezane liste - definicija čvor je baš kao i ono što imamo ovdje. 43 00:02:31,480 --> 00:02:35,110 Stavio sam int n, ali možete pohraniti sve podatke koje želite. 44 00:02:35,110 --> 00:02:37,280 Dakle, ako želite pohraniti string, to je u redu. 45 00:02:37,280 --> 00:02:41,690 Ako želite pohraniti indetifikaciju, to je u redu, dvostruka, što god želite. 46 00:02:41,690 --> 00:02:44,630 Ja samo stavi int n za primjere ovdje. 47 00:02:44,630 --> 00:02:46,800 I imate pokazivač na sljedeći čvor. 48 00:02:46,800 --> 00:02:51,940 Dakle, u osnovi, popis povezani ima neke podatke, a onda to ukazuje na sljedeći čvor. 49 00:02:51,940 --> 00:02:56,710 Ako je posljednji element u popisu povezana, to će ukazati na NULL. 50 00:02:56,710 --> 00:02:59,060 Dakle, ovo je primjer popisa povezana. 51 00:02:59,250 --> 00:03:05,960 >> Ok, pa sad da vidimo što možemo učiniti ako želite umetnuti element u popisu povezane. 52 00:03:05,960 --> 00:03:08,810 Prvo, funkcija umetak će biti tipa void 53 00:03:08,810 --> 00:03:11,350 jer ne želim da se vrate ništa. 54 00:03:11,350 --> 00:03:14,200 I ja ću uzeti int kao argument, 55 00:03:14,200 --> 00:03:17,090 jer želim znati što želim umetnuti. 56 00:03:17,090 --> 00:03:21,840 Dakle, što je prva stvar koju sam trebao napraviti? Pa, ja bi trebao malloc na newnode, 57 00:03:21,840 --> 00:03:24,240 , tako da je prva linija. 58 00:03:24,240 --> 00:03:27,580 Ja sam samo stvara novi čvor staviti na popis povezana. 59 00:03:27,580 --> 00:03:32,360 Dakle, što mogu učiniti? Pa, mi znamo da u našoj implementacijama povezanim listama 60 00:03:32,360 --> 00:03:38,180 u razredu, uvijek smo stavili na glavu kao globalna varijabla. 61 00:03:38,180 --> 00:03:41,800 Dakle, ono što možemo učiniti je promijeniti glavu. 62 00:03:41,800 --> 00:03:44,300 Mogu vam to novi čvor biti novi šef, 63 00:03:44,300 --> 00:03:46,670 i to će ukazati na prethodnu glavu. 64 00:03:46,670 --> 00:03:50,390 Kako možemo učiniti? Prva stvar koju moram učiniti 65 00:03:50,390 --> 00:03:54,770 je promijeniti 'n' u novi čvor na vrijednosti, 66 00:03:54,770 --> 00:03:57,530 koji je donesen na tu funkciju. 67 00:03:57,530 --> 00:04:01,050 Zatim newnode je sljedeće će biti glava. 68 00:04:01,050 --> 00:04:05,800 Glava će biti newnode. Dakle, to je prilično jednostavan. 69 00:04:05,800 --> 00:04:10,090 Za brisanje čvora, možemo to učiniti kao što je - 70 00:04:10,090 --> 00:04:14,790 Jedan način na koji smo mogli napraviti to jest, 71 00:04:14,790 --> 00:04:18,160 ok, ako sam htio izbrisati, primjerice, 3, 72 00:04:18,160 --> 00:04:24,850 ono što sam mogao učiniti je samo točka na prethodni čvor 73 00:04:24,850 --> 00:04:27,580 na sljedeći čvor 3. 74 00:04:27,580 --> 00:04:29,400 Dakle, ja bih samo učiniti nešto takvo. 75 00:04:29,400 --> 00:04:33,400 No, ono što je problem s tim? 76 00:04:33,400 --> 00:04:37,400 Imam otjecanje memorije, tako da nemam pristup broja 3 više. 77 00:04:37,400 --> 00:04:42,480 Problem s tim je da ja neću biti u mogućnosti da se oslobodi tog čvora. 78 00:04:42,480 --> 00:04:45,360 Ja ću imati otjecanje memorije i (nerazumljivo) će me mrziti. 79 00:04:45,360 --> 00:04:49,370 Dakle, umjesto da radi, vjerojatno bi trebao imati privremeni pokazivač. 80 00:04:49,370 --> 00:04:53,210 Zato sam stavio temp. To će ukazati na čvoru da želim izbrisati. 81 00:04:53,210 --> 00:04:58,170 A onda sam se kretati prethodne čvorove točke na sljedeći čvor 82 00:04:58,170 --> 00:05:00,390 čvora da želim izbrisati. 83 00:05:00,390 --> 00:05:02,730 I na kraju, ne mogu osloboditi pokazivač. 84 00:05:02,730 --> 00:05:07,480 Moram li osloboditi pokazivač da sam stvoren upravo tamo? 85 00:05:07,480 --> 00:05:09,560 Ja ne moram, samo zato - 86 00:05:09,560 --> 00:05:13,430 Razlika je u tome da je ovaj čvor je stvoren pomoću malloc, 87 00:05:13,430 --> 00:05:17,280 tako da je u gomili, dok je ovaj samo je proglašen kao NULL prekidač u dimnjaku. 88 00:05:17,280 --> 00:05:20,000 Pa ja ne moram ga osloboditi. 89 00:05:20,000 --> 00:05:22,030 >> Redu. Tako sada pričajmo o hrpama. 90 00:05:22,030 --> 00:05:24,680 Stacks su prilično jednostavne. 91 00:05:24,680 --> 00:05:29,540 Napravili smo hrpe i redove u razredu samo pomoću polja, 92 00:05:29,540 --> 00:05:32,820 ali bi trebali biti upoznati - samo biti svjesni 93 00:05:32,820 --> 00:05:40,740 da i vi možete učiniti hrpe u redovima koriste povezane liste, kao dobro. 94 00:05:40,740 --> 00:05:44,460 Dakle, ako imate niz, što će biti stog? 95 00:05:44,460 --> 00:05:46,810 Stack, prvo, morat će imati veličinu. 96 00:05:46,810 --> 00:05:49,950 Morate spremiti što je veličina dimnjaka koji imate upravo sada. 97 00:05:49,950 --> 00:05:52,980 A isto tako da će imati niz, u ovom slučaju brojeva, 98 00:05:52,980 --> 00:05:55,120 ali ako želite, to može biti niz 99 00:05:55,120 --> 00:06:00,380 od žice, niz rekonstruirati sve što želite pohraniti. 100 00:06:00,380 --> 00:06:03,240 O dimnjaku: razlika između dimnjaka i popisu povezanom 101 00:06:03,240 --> 00:06:08,590 je da su u snopu imate samo pristup posljednjeg elementa koji je stavljen u snopu. 102 00:06:08,590 --> 00:06:11,770 To se zove posljednji u, prvi van. 103 00:06:11,770 --> 00:06:15,090 Baš kao da imate hrpu pladnjeva, 104 00:06:15,090 --> 00:06:17,670 ako stavite ladicu na vrhu dimnjaka, 105 00:06:17,670 --> 00:06:22,670 morate ukloniti tu ladicu prvi koji će imati pristup drugim ladicama. 106 00:06:22,670 --> 00:06:26,310 To je ista stvar s hrpe. 107 00:06:26,310 --> 00:06:31,220 Dakle, ako želim, primjerice, dodati element na stog, što da radim? 108 00:06:31,220 --> 00:06:34,070 To se zove push, i to je prilično jednostavan. 109 00:06:34,070 --> 00:06:37,130 Prva stvar koju morate učiniti je provjeriti je li veličina dimnjaka 110 00:06:37,130 --> 00:06:40,150 nije veći ili jednak kapacitet snopa. 111 00:06:40,150 --> 00:06:45,810 Zato, ako ste već na puni kapacitet, ne možete dodati bilo što drugo. 112 00:06:45,810 --> 00:06:51,140 A onda, ako ne, samo trebate dodati element na stog. 113 00:06:51,140 --> 00:06:54,530 I na kraju, povećajte veličinu. Dakle, to je prilično jednostavan. 114 00:06:54,530 --> 00:06:57,140 Zato sam samo dodati broj 2. 115 00:06:57,140 --> 00:07:00,350 A ako želim pop, što znači da želim ukloniti 116 00:07:00,350 --> 00:07:03,870 posljednji element koji je dodan i vratiti vrijednost elementa, 117 00:07:03,870 --> 00:07:09,180 Prva stvar koju moram provjeriti da li je stog nije prazan. 118 00:07:09,180 --> 00:07:11,510 Jer ako je prazna, ja ne mogu vratiti ništa. 119 00:07:11,510 --> 00:07:14,820 U tom slučaju, ja sam se vraćaju -1. 120 00:07:14,820 --> 00:07:18,960 Inače, idem na opadanje veličine spec., 121 00:07:18,960 --> 00:07:22,510 i vratiti brojeve (s.size). 122 00:07:22,510 --> 00:07:27,230 Zašto sam opadanje veličinu, a zatim se vratiti s.size? 123 00:07:27,230 --> 00:07:30,930 To je zato što, u ovom slučaju, spec. ima veličinu 4, 124 00:07:30,930 --> 00:07:33,810 i želim se vratiti Četvrti element, zar ne? 125 00:07:33,810 --> 00:07:36,030 No, ono što je indeks četvrtog elementa? Tri. 126 00:07:36,030 --> 00:07:44,510 Budući da ja to veličina - što će biti 3, ja samo mogu vratiti s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 zato što je 3. Dakle, to je samo index. 128 00:07:48,410 --> 00:07:50,380 >> Sada redova. Redovi su skoro ista stvar. 129 00:07:50,380 --> 00:07:54,950 Jedina razlika je u tome što umjesto da posljednja u, prvi van, 130 00:07:54,950 --> 00:07:57,480 imate prvi, out. 131 00:07:57,480 --> 00:07:59,460 Vjerojatno, ako čekate da ići na koncert, 132 00:07:59,460 --> 00:08:04,260 ne bi bio sretan ako bi imali hrpu umjesto red. 133 00:08:04,260 --> 00:08:07,730 Budući da je posljednja osoba koja dođe će biti prva osoba koja će ući u koncertu. 134 00:08:07,730 --> 00:08:09,760 Vi vjerojatno ne bi bili sretni. 135 00:08:09,760 --> 00:08:15,020 U redu, prva osoba koja se je i prva osoba koja je izaći. 136 00:08:15,020 --> 00:08:18,720 Dakle, u definiciji redu, osim što ima veličinu u nizu, 137 00:08:18,720 --> 00:08:23,360 također moraju imati glavu, što je indeks na glavu stog. 138 00:08:23,360 --> 00:08:29,000 Dakle, prvi element upravo sada. 139 00:08:29,000 --> 00:08:32,710 Postavi u red je ista stvar kao i guranje za dimnjake. 140 00:08:32,710 --> 00:08:34,980 Ako ste bili vrlo naivni, ti bi samo reći, 141 00:08:34,980 --> 00:08:39,289 dobro, ja samo mogu učiniti istu stvar kao i ja za guranje. 142 00:08:39,289 --> 00:08:44,030 Ja samo mogu provjeriti, ako to nije izvan kapaciteta. 143 00:08:44,030 --> 00:08:48,760 Ako je to, sam povratak false, inače ja samo mogu izvesti novu vrijednost 144 00:08:48,760 --> 00:08:50,630 a zatim povećajte veličinu. 145 00:08:50,630 --> 00:08:52,750 Ali zašto je to u redu? 146 00:08:52,750 --> 00:08:55,010 Pogledajmo ovaj primjer. 147 00:08:55,010 --> 00:08:57,020 Pokušavam enqueue hrpa stvari, 148 00:08:57,020 --> 00:08:58,390 a onda ću dequeue i enqueue. 149 00:08:58,390 --> 00:09:00,550 Postoji puno naredbi, ali to je vrlo jednostavan. 150 00:09:00,550 --> 00:09:04,790 Idem u red pet, pa dodati 5, a onda 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, a onda želim dequeue nešto, 152 00:09:09,310 --> 00:09:12,000 što znači da ću se maknuti prvi element. 153 00:09:12,000 --> 00:09:14,640 Tako ću maknuti broj 3, zar ne? 154 00:09:14,640 --> 00:09:17,320 Prvi element. Ok. 155 00:09:17,320 --> 00:09:21,450 Sada, ako sam pokušati enqueue nešto drugo, što će se dogoditi? 156 00:09:21,450 --> 00:09:24,290 Prema mom provedbu, 157 00:09:24,290 --> 00:09:31,040 Htjela sam staviti sljedeći broj u indeksnom q.size. 158 00:09:31,040 --> 00:09:35,140 U tom slučaju, veličina je 8, 159 00:09:35,140 --> 00:09:38,640 tako indeks 8 će biti ovdje u zadnjem položaju. 160 00:09:38,640 --> 00:09:43,900 Ako sam pokušati enqueue jedan upravo ovdje, ja bih se prepisati zadnju poziciju 161 00:09:43,900 --> 00:09:45,870 na broju 1, što je potpuno pogrešno. 162 00:09:45,870 --> 00:09:49,870 Ono što želim učiniti je omotati oko sebe i otići na prvu poziciju. 163 00:09:49,870 --> 00:09:52,870 Možda bi samo reći, dobro, samo moram provjeriti 164 00:09:52,870 --> 00:09:55,600 ako ja zapravo mogu staviti nešto postoji. 165 00:09:55,600 --> 00:09:58,560 Ako ne, ja samo kažem, oh, novi puni kapacitet 166 00:09:58,560 --> 00:10:02,010 je zapravo kapacitet - 1, a ne možete staviti element postoji. 167 00:10:02,010 --> 00:10:06,150 No, ono što je problem? Problem je u tome što ako sam samo dequeue sve ovdje 168 00:10:06,150 --> 00:10:08,240 i onda sam pokušati dodati nešto drugo, to bi samo reći, 169 00:10:08,240 --> 00:10:11,210 Pa, da ste bili u punom kapacitetu, što je 0. 170 00:10:11,210 --> 00:10:13,620 Dakle, vaš red je otišao. 171 00:10:13,620 --> 00:10:16,990 Morate zaokrenuti i način omatanje oko 172 00:10:16,990 --> 00:10:22,040 da ti dečki naučili u vizionara i drugim psets koristio mod. 173 00:10:22,040 --> 00:10:29,090 Možete probati kod kuće da razumijem zašto bi to q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod kapacitet, ali ako provjeriti upravo ovdje, 175 00:10:31,080 --> 00:10:34,760 možemo vidjeti da to radi. 176 00:10:34,760 --> 00:10:37,760 Tako je u posljednjem primjeru, q.size je 8 177 00:10:37,760 --> 00:10:47,590 a glava je bila 1, jer je takav stav ovdje od polja. 178 00:10:47,590 --> 00:10:51,970 Tako će biti 8 + 1, 9. Mod kapacitet 9 će biti 0. 179 00:10:51,970 --> 00:10:56,640 To će ići na indeksu 0. Mi ćemo biti na pravom mjestu. 180 00:10:56,640 --> 00:10:59,750 I onda probati red kod kuće. 181 00:10:59,750 --> 00:11:04,950 Neke važne stvari: pokušati shvatiti razliku između stog i red. 182 00:11:04,950 --> 00:11:11,620 Kod kuće, pokušati dobiti dobro upoznati s provedbom u red, dequeue, push i pop. 183 00:11:11,620 --> 00:11:16,560 A isto tako razumijem kad bi koristiti svaki od njih. 184 00:11:16,560 --> 00:11:22,830 >> Tako ćemo se opustiti u trajanju od 10 sekundi s hrpom Pokemon. 185 00:11:22,830 --> 00:11:26,080 A sad idemo natrag u strukture podataka. 186 00:11:26,080 --> 00:11:29,770 Tablice. Puno ljudi su se uplašili od hash tablica. 187 00:11:29,770 --> 00:11:33,650 Problem je u set 6, Provjeru pravopisa. 188 00:11:33,650 --> 00:11:35,980 Tablice i napad, puno ljudi se prepala od njih. 189 00:11:35,980 --> 00:11:38,540 Oni misle da su tako teško razumjeti. Da? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problem postaviti pet. >> Problem postaviti 5, da. Hvala Rob. 191 00:11:41,490 --> 00:11:43,370 Da. Šest je Huff n 'Puff, da. 192 00:11:43,370 --> 00:11:49,340 Problem postaviti pet je Provjeru pravopisa, a vi morali koristiti ili hash tablicu ili probati. 193 00:11:49,340 --> 00:11:55,360 Puno ljudi misli da su super teško razumjeti, ali oni su zapravo prilično jednostavna. 194 00:11:55,360 --> 00:12:01,290 Što je hash tablicu, u osnovi? Hash tablica je niz povezanih listama. 195 00:12:01,290 --> 00:12:06,730 Jedina razlika između niza i hash tablicu 196 00:12:06,730 --> 00:12:09,730 je da u hash tablicu imate nešto što se zove hash funkcija. 197 00:12:09,730 --> 00:12:12,080 Što je hash funkcija? 198 00:12:12,080 --> 00:12:13,970 Ja ne znam je li vi ovo možete pročitati ovdje. 199 00:12:13,970 --> 00:12:16,090 Ovo je primjer hash tablice. 200 00:12:16,090 --> 00:12:19,220 Dakle, možete vidjeti da imate niz sa 31 elemenata. 201 00:12:19,220 --> 00:12:22,440 I što nam je činiti u hash tablici imaju hash funkciju 202 00:12:22,440 --> 00:12:26,660 koji će prevesti ključ, svaka int na indeks. 203 00:12:26,660 --> 00:12:31,740 Ako, na primjer, ako želite odabrati za B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Ja bih stavio B. Harrison je u mojim hash funkcija, 205 00:12:34,190 --> 00:12:36,960 i hash funkcija će vratiti 24. 206 00:12:36,960 --> 00:12:40,930 Pa znam da želim pohraniti B. Harrison je u 24.. 207 00:12:40,930 --> 00:12:46,580 Dakle, to je razlika između samo imaju niz i ima hash tablicu. 208 00:12:46,580 --> 00:12:48,740 U hash tablicu ćete imati funkciju koja će vam reći 209 00:12:48,740 --> 00:12:54,740 gdje će se spremati podatke koje želite pohraniti. 210 00:12:54,740 --> 00:12:57,040 Za hash funkcije, želite izgledati za hash funkcije 211 00:12:57,040 --> 00:13:00,600 da je deterministički i dobro raspoređena. 212 00:13:00,600 --> 00:13:07,810 Kao što možete vidjeti ovdje, vidjet ćete da je mnogo podataka koji sam htjela dućan je zapravo 19 213 00:13:07,810 --> 00:13:12,470 umjesto da koristi 31 i 30 i 29, koji su svi bili slobodni. 214 00:13:12,470 --> 00:13:16,920 Dakle hash funkcija koja sam nije bio jako dobro raspoređena. 215 00:13:16,920 --> 00:13:20,710 Kad kažemo dobro raspoređena, to znači da želimo imati, 216 00:13:20,710 --> 00:13:26,520 otprilike najmanje 1 ili 2 za svaki od - 217 00:13:26,520 --> 00:13:32,190 slično, razlika od 1 ili 2 za svaku od indeksa u polja. 218 00:13:32,190 --> 00:13:43,950 Želite imati, otprilike, isti broj elemenata u svakoj popisu povezane u nizu. 219 00:13:43,950 --> 00:13:48,600 I to je lako provjeriti je li to vrijedi u hash tablicu, pogled kao hash tablice. 220 00:13:48,600 --> 00:13:51,770 >> Onda stabala. To je stablo. 221 00:13:51,770 --> 00:13:56,400 Stabla u računalnoj znanosti su naglavačke iz nekog razloga. 222 00:13:56,400 --> 00:14:00,150 Dakle ovdje imate korijen stabla, a zatim lišće. 223 00:14:00,150 --> 00:14:05,630 Vi samo treba znati nomenklaturu za roditelja i dijete. 224 00:14:05,630 --> 00:14:12,880 Svaki čvor ima svoje djece, koja su čvorovi koji su ispod roditelja. 225 00:14:12,880 --> 00:14:19,660 Tako, na primjer, 2 će biti roditelj za 3, a za drugo dijete ima pravo, 226 00:14:19,660 --> 00:14:25,290 dok je 3 će biti roditelj za 1. i ostala djeca koja su tamo. 227 00:14:25,290 --> 00:14:29,990 A 1 koja će se 3. dijete, i tako dalje. 228 00:14:29,990 --> 00:14:34,610 Imamo nešto mnogo zanimljivije, pod nazivom pretraživanje po binarnom stablu, 229 00:14:34,610 --> 00:14:39,040 u kojem svi su vrijednosti na desno od čvora 230 00:14:39,040 --> 00:14:41,660 će biti na desnoj strani, upravo ovdje - na desnoj strani, 231 00:14:41,660 --> 00:14:46,780 će biti veći od elementa u korijenu. 232 00:14:46,780 --> 00:14:49,780 Dakle, ako imam broj 5 upravo ovdje, svi elementi na desnoj strani 233 00:14:49,780 --> 00:14:51,940 će biti veći od 5, a na lijevoj strani 234 00:14:51,940 --> 00:14:56,770 svi elementi će biti manji od pet. 235 00:14:56,770 --> 00:14:58,780 Zašto je to korisno? 236 00:14:58,780 --> 00:15:01,660 Pa, ako želite provjeriti je li broj 7 je ovdje, na primjer, 237 00:15:01,660 --> 00:15:05,960 Ja samo ići na 5 prvi, a ja ću vidjeti, je 7 veći ili manji od 5? 238 00:15:05,960 --> 00:15:09,540 To je veći, tako da znam da će to biti na desno od stabla. 239 00:15:09,540 --> 00:15:13,980 Dakle, imam puno manje stvari za gledati. 240 00:15:13,980 --> 00:15:19,520 U provedbi binarno pretraživanje stabla, na čvoru, Samo ću morati imati podatke, 241 00:15:19,520 --> 00:15:21,750 tako int n, što bi također moglo imati niz 242 00:15:21,750 --> 00:15:23,630 ili bilo što ste htjeli. 243 00:15:23,630 --> 00:15:28,100 Vi samo morate biti oprezni na definiranje onoga što je veća, što je manje. 244 00:15:28,100 --> 00:15:30,390 Dakle, ako ste imali žice, primjerice, mogli definirati 245 00:15:30,390 --> 00:15:34,690 da su sve te stvari na pravom ćemo imati veću duljinu, 246 00:15:34,690 --> 00:15:40,940 lijevi će imati niže duljine, pa to je stvarno na vama. 247 00:15:40,940 --> 00:15:44,930 >> Kako mogu implementirati pronaći za BST? 248 00:15:44,930 --> 00:15:47,840 Prva stvar koju ćete morati učiniti je provjeriti da li je korijen NULL. 249 00:15:47,840 --> 00:15:50,920 Ako je NULL, to znači da je ne postoji 250 00:15:50,920 --> 00:15:53,330 jer nemate ni jedno stablo, zar ne? 251 00:15:53,330 --> 00:15:55,790 Tako sam se vratiti false. 252 00:15:55,790 --> 00:15:58,740 Inače, idem provjeriti je li broj veći 253 00:15:58,740 --> 00:16:01,720 od vrijednosti u korijenu. 254 00:16:01,720 --> 00:16:04,250 Ja ću pokušati pronaći element na desnoj strani 255 00:16:04,250 --> 00:16:08,590 od stabla. 256 00:16:08,590 --> 00:16:11,310 Vidite da sam koristeći rekurziju ovdje. 257 00:16:11,310 --> 00:16:14,150 A onda, ako je manje, idem pogledati lijevo. 258 00:16:14,150 --> 00:16:18,330 I na kraju, u protivnom, ako je ne manje ili ne i veći, 259 00:16:18,330 --> 00:16:20,660 to znači da je i sama vrijednost. 260 00:16:20,660 --> 00:16:23,010 Pa sam se vratiti točno. 261 00:16:23,010 --> 00:16:26,360 Možete vidjeti da sam, ako, ako, ako. 262 00:16:26,360 --> 00:16:30,820 I zapamtite, u kvizu 0, imali smo problem koji je imao, ako, ako, ako, 263 00:16:30,820 --> 00:16:32,780 a ti si trebao naći neučinkovitost, 264 00:16:32,780 --> 00:16:35,180 i neučinkovitost je da koristi, ako. 265 00:16:35,180 --> 00:16:39,060 Trebali bi imati koristi ako se, još ako je, drugo, ako i drugi. 266 00:16:39,060 --> 00:16:44,240 Dakle, trebao sam koristiti drugi, ako i drugi, ako i drugi ovdje? 267 00:16:44,240 --> 00:16:46,200 Zna li itko - Je li? 268 00:16:46,200 --> 00:16:51,140 [Student gledano, nečujno] 269 00:16:51,140 --> 00:16:53,480 To je savršeno. Dakle, ona govori da to ne smeta, 270 00:16:53,480 --> 00:16:55,930 Upravo zbog neučinkovitosti koje smo imali prije 271 00:16:55,930 --> 00:16:59,550 bio je to zato, možda ako neki uvjet bio zadovoljen, 272 00:16:59,550 --> 00:17:03,570 tako da su napravili neku akciju, ali onda ste bili će provjeriti sve ostale uvjete. 273 00:17:03,570 --> 00:17:06,319 No, u ovom slučaju, to se vratio odmah, tako da to nije važno. 274 00:17:06,319 --> 00:17:09,220 Dakle, ne morate koristiti if. 275 00:17:09,220 --> 00:17:11,740 >> I na kraju, pričajmo o pokušaja, 276 00:17:11,740 --> 00:17:13,800 koja je svačija omiljena. 277 00:17:13,800 --> 00:17:15,980 Pokušat je stablo polja. 278 00:17:15,980 --> 00:17:20,369 To je vrlo brz za traženje vrijednosti, ali to koristi puno memorije. 279 00:17:20,369 --> 00:17:22,530 I to je obično za filtriranje riječi, pa kada 280 00:17:22,530 --> 00:17:27,920 želite provesti, primjerice, ne znam, poput telefonskog imenika u telefonu 281 00:17:27,920 --> 00:17:30,440 a želite biti u mogućnosti to tip B 282 00:17:30,440 --> 00:17:32,510 i samo su imena ljudi koji imaju B. 283 00:17:32,510 --> 00:17:37,960 To je vrlo lako implementirati da koristite probati, na primjer. 284 00:17:37,960 --> 00:17:39,820 Kako definirate čvor u pokušaju? 285 00:17:39,820 --> 00:17:43,910 Vi samo morate imati Bool koja će se is_word. 286 00:17:43,910 --> 00:17:48,660 To predstavlja da koristite sve znakove prije tog čvora, 287 00:17:48,660 --> 00:17:51,920 ste bili u mogućnosti da se formira riječ, 288 00:17:51,920 --> 00:17:57,230 i onda ćete imati niz pokazivača na čvorove. 289 00:17:57,230 --> 00:18:03,120 Vidite li da imamo niz roditeljskih čvorova, pa čvora * niz? Da? 290 00:18:03,120 --> 00:18:06,050 Pa da vidimo kako se to neće raditi. Za provjeru pravopisa, 291 00:18:06,050 --> 00:18:08,230 imamo niz od 27 elemenata, 292 00:18:08,230 --> 00:18:12,150 jer imamo sva slova plus apostrof. 293 00:18:12,150 --> 00:18:17,800 Prije nego ovdje Samo ću koristiti dva, jer želim biti u stanju napisati na brodu. 294 00:18:17,800 --> 00:18:20,230 Ok. Dakle, ovo je primjer pokušaja. 295 00:18:20,230 --> 00:18:25,600 Ako sam samo definirati prvi čvor, ja ću imati niz od 2 elementa 296 00:18:25,600 --> 00:18:29,290 da su 2 upućuje na nulu, tako da sam samo stavio 'A' i 'B'. 297 00:18:29,290 --> 00:18:32,430 I ja ću imati Bool koji kaže is_word. 298 00:18:32,430 --> 00:18:34,420 To će biti false za prvo, 299 00:18:34,420 --> 00:18:37,370 Upravo zato, prije nego da nemate nikakve znakove. 300 00:18:37,370 --> 00:18:40,900 Dakle prazna riječ nije riječ. Tako da je lažna. 301 00:18:40,900 --> 00:18:46,320 Ako želim dodati 'A' na ovom rječniku, što bih to učiniti? 302 00:18:46,320 --> 00:18:49,760 Ja bih samo da malloc novi čvor za 'a', 303 00:18:49,760 --> 00:18:54,630 , a zatim dodati svoje riječi istina. 304 00:18:54,630 --> 00:19:00,180 Pa to samo izjavljuje da nakon '' će biti istina. Smisla? 305 00:19:00,180 --> 00:19:04,120 Zatim, ako želim dodati 'ba', morat ću malloc 1 za 'b', 306 00:19:04,120 --> 00:19:07,550 a onda ću postaviti Boolean false, 307 00:19:07,550 --> 00:19:10,160 jer 'b' samo po sebi nije riječ. 308 00:19:10,160 --> 00:19:13,010 Onda ću malloc jedan za 'A', pa 'ba', 309 00:19:13,010 --> 00:19:16,290 a onda ću postaviti je riječ istina. 310 00:19:16,290 --> 00:19:18,950 Zbog 'ba' je riječ. 311 00:19:18,950 --> 00:19:21,910 A onda, ako želim vidjeti ako 'b' je u tom rječniku, 312 00:19:21,910 --> 00:19:26,730 Ja samo mogu ići na prvoj, 'b'. Idem i ja pogledati je riječ, a on kaže netočno. 313 00:19:26,730 --> 00:19:30,110 Dakle, nije riječ. Ako želim provjeriti 'ba', 314 00:19:30,110 --> 00:19:38,010 Idem u prvoj, 'b', a zatim otići na 'A', a ja vidim istina, pa je riječ. Smisla? 315 00:19:38,010 --> 00:19:41,950 Puno ljudi se zbunjeni pokušaja. Ne? 316 00:19:41,950 --> 00:19:44,740 >> Konačno, diferencijalno kodiranje. Huffman kodiranje je vrlo korisno 317 00:19:44,740 --> 00:19:47,550 za spremanje memorije i stisnuti tekstualne datoteke, 318 00:19:47,550 --> 00:19:52,270 samo zato puno vremena koje koristite 'A' i 'e', ​​primjerice, 319 00:19:52,270 --> 00:19:57,710 u dokumentima, ali ja ne znam da li ste vi koristite "Q" ili "z" koliko. 320 00:19:57,710 --> 00:20:02,040 Nakon što je samo 1 bajt za svakog lika, 321 00:20:02,040 --> 00:20:08,520 svaki - na 256 znakova koje imamo u ASCII tablice nije baš optimalna, 322 00:20:08,520 --> 00:20:11,410 Upravo zato što postoje neki znakovi koji koriste mnogo više, 323 00:20:11,410 --> 00:20:15,180 tako da vjerojatno bi trebao koristiti manje memorije za one. 324 00:20:15,180 --> 00:20:17,560 Kako mogu koristiti diferencijalno kodiranje? 325 00:20:17,560 --> 00:20:20,010 Moramo napraviti Huffman stablo. 326 00:20:20,010 --> 00:20:23,370  Huffman stablo ima čvorove 327 00:20:23,370 --> 00:20:27,760 da imaju simbol koji će biti poput, '', 'b', 'c', pisma, 328 00:20:27,760 --> 00:20:32,990 bez obzira na pismo imate, frekvencija koja je frekvencija koja riječ pojavljuje u tekstu, 329 00:20:32,990 --> 00:20:36,280 da li su stvaranju Huffman stablo za, 330 00:20:36,280 --> 00:20:41,800 a zatim čvor koji će ukazati na lijevoj Huffman stabla 331 00:20:41,800 --> 00:20:47,210 i još jedan čvor koji će ukazati na desnoj strani. Dakle, baš kao i drvo. 332 00:20:47,210 --> 00:20:49,440 Kako ste izgraditi Huffman stablo? 333 00:20:49,440 --> 00:20:54,020 Ideš odabrati 2 čvorova koji imaju najniže frekvencije. 334 00:20:54,020 --> 00:20:56,490 Ako imate kravatu ćete odabrati dva čvorišta 335 00:20:56,490 --> 00:20:59,870 da imaju najniže ASCII vrijednosti kao dobro. 336 00:20:59,870 --> 00:21:02,420 Onda ćeš stvoriti novi stablo iz tih 2 čvorova 337 00:21:02,420 --> 00:21:08,030 koje će imati u kombinaciji frekvencije u roditeljski čvor. 338 00:21:08,030 --> 00:21:13,240 I onda ćeš ukloniti 2 djece iz šume 339 00:21:13,240 --> 00:21:15,570 i zamijeniti ih s roditeljem. 340 00:21:15,570 --> 00:21:18,930 I ti ćeš to ponoviti dok imate samo jednog stabla u šumi. 341 00:21:18,930 --> 00:21:23,840 Pa da vidimo kako će učiniti Huffman stablo za ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Možete vidjeti da sva slova imaju frekvenciju 1, osim za "A", koja ima frekvenciju 2. 343 00:21:29,220 --> 00:21:34,090 Tako sam stvorio čvorovi za sva slova sam stavio u red ASCII vrijednosti i učestalosti. 344 00:21:34,090 --> 00:21:40,090 Dakle, ako želim stvoriti prvi stablo, što će biti s 'L' i 'M'. 345 00:21:40,090 --> 00:21:43,100 Dakle, to je ovdje. Frekvencija para će biti 2 346 00:21:43,100 --> 00:21:49,470 jer je 1 + 1, onda sljedeći 2 s najnižim frekvencijama su 'Y' i 'Z'. 347 00:21:49,470 --> 00:21:53,180 I onda sam ih sve što - imaju frekvenciju od 2. 348 00:21:53,180 --> 00:22:00,470 Dakle, one koje su one koje imaju najnižu ASCII vrijednost za sljedeći? 349 00:22:00,470 --> 00:22:04,830 'A' i 'L'. Tako sam stvoriti novi čvor, 350 00:22:04,830 --> 00:22:09,930 i na kraju, to je 4 i 2, pa 2 će biti na lijevoj strani. 351 00:22:09,930 --> 00:22:12,430 A to je Huffman stablo. 352 00:22:12,430 --> 00:22:16,060 Zatim, ako želim napisati neki tekst, 353 00:22:16,060 --> 00:22:24,440 kao što je u binarnom pretvoriti u tekst, koristeći Huffman stablo je vrlo jednostavno. 354 00:22:24,440 --> 00:22:30,220 Na primjer, ako kažem da se kreće s lijeve strane je 0 i kreće na desnoj strani je 1, 355 00:22:30,220 --> 00:22:32,410 Što je u tome što će predstavljati? 356 00:22:32,410 --> 00:22:35,530 Dakle kao što 1, 1, pa desno, desno, 357 00:22:35,530 --> 00:22:40,370 te 0, tako da bi se ostavila L, a zatim 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Dakle, 1, 0, pa samo 1, 0, ''. 359 00:22:43,950 --> 00:22:47,540 A onda 0, 1, pa 'Z'. 360 00:22:47,540 --> 00:22:52,170 I onda 1, 0, 0 - nema. 361 00:22:52,170 --> 00:22:56,780 0, 0 će biti 'Y', tako lijeni. 362 00:22:56,780 --> 00:23:06,060 Dakle, to je sve za mene, Rob ide preuzeti. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Dakle, tjedan 7 stvari. 364 00:23:08,400 --> 00:23:11,390 Imamo puno ići preko jako brzo. 365 00:23:11,390 --> 00:23:13,430 Bitno operateri, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 knjižnica, a zatim HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Sve u kao 15 do 20 minuta. 368 00:23:20,990 --> 00:23:24,330 Bitno operateri. Postoje 6 od njih da trebate znati. 369 00:23:24,330 --> 00:23:31,200 Bitno i, bitovni ili, XOR, napustio pomak, zar pomak, i ne. 370 00:23:31,200 --> 00:23:35,420 Pravo pomak, a ne da se jedva vidio u predavanju na sve. 371 00:23:35,420 --> 00:23:40,480 Mi ćemo ići preko njega brzo ovdje, ali dobro je znati da su 6. da postoje. 372 00:23:40,480 --> 00:23:45,070 Zapamtite da Bitwise operateri kao kad ti 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Vi ne bave binarnog 3 i 4. 374 00:23:49,420 --> 00:23:56,550 S Bitno operaterima zapravo bave pojedinačne bitove brojevima 3 i 4. 375 00:23:56,550 --> 00:23:59,120 >> Dakle, prva koja mi ćemo reći je bitovni ne, 376 00:23:59,120 --> 00:24:02,340 a sve je to ipak okrenuti sve bitove. 377 00:24:02,340 --> 00:24:05,500 Pa evo, ako ste ovo pišem u C, ne bi ga pisati 378 00:24:05,500 --> 00:24:09,380 kao ~ 11.011 ili bilo što, što bi napisao da mi se ~ 4, 379 00:24:09,380 --> 00:24:12,970 i onda bi okretanje binarni prikaz 4. 380 00:24:12,970 --> 00:24:24,800 Pa evo, ~ nekog binarnog broja 1101101 će upravo okretanje sve 1 je na 0 a i sve je 0 do 1-a. 381 00:24:24,800 --> 00:24:27,600 Kao što sam rekao, česta upotreba toga, 382 00:24:27,600 --> 00:24:30,830 , a mi ćemo ga vidjeti u malo, je kao želimo da se s nekim brojem 383 00:24:30,830 --> 00:24:35,460 gdje su svi bitovi su 1, osim jednog od njih. 384 00:24:35,460 --> 00:24:38,560 Dakle, to je obično lakše izraziti broj 385 00:24:38,560 --> 00:24:40,630 gdje je upravo to jedan bit postavljen, 386 00:24:40,630 --> 00:24:44,650 a onda se na ~ od njega, tako da je svaki drugi bit je postavljen, osim za tu jednu. 387 00:24:44,650 --> 00:24:50,300 Dakle, to je ono što ćemo koristiti više u malo. 388 00:24:50,300 --> 00:24:58,220 >> Bitno ili. Ovdje su 2 binarni brojevi i ove 2 broja 389 00:24:58,220 --> 00:25:00,780 su prilično predstavnik, jer oni predstavljaju sve moguće 390 00:25:00,780 --> 00:25:07,290 Kombinacija bitova vam može trebati operirati. 391 00:25:07,290 --> 00:25:13,540 Evo, kad sam or'd svako malo, mi idemo samo usporediti ravno prema dolje. 392 00:25:13,540 --> 00:25:15,410 Tako se na lijevoj strani imamo jedan i jedan. 393 00:25:15,410 --> 00:25:20,510 Kad sam bitovima | onima, što ću dobiti? Jedan. 394 00:25:20,510 --> 00:25:25,320 Zatim bitwise | 0 i 1 će mi dati? Jedan. 395 00:25:25,320 --> 00:25:27,840 Bitno 1 i 0 će biti ista stvar, jedan. 396 00:25:27,840 --> 00:25:31,880 Bitno 0 | 0 će mi dati 0. 397 00:25:31,880 --> 00:25:37,300 Dakle, jedini slučaj u kojem sam se 0 je u 0 | 0 slučaj. 398 00:25:37,300 --> 00:25:40,020 A možete misliti da je baš kao i logičke ORS. 399 00:25:40,020 --> 00:25:44,830 Dakle, ako mislite od 1 kao istinske i 0 kao lažna, ista stvar vrijedi i ovdje. 400 00:25:44,830 --> 00:25:50,040 Dakle, istina ili istina je istina, istina ili laž je istina. 401 00:25:50,040 --> 00:25:57,150 Lažno ili istina je istina, lažna ili lažno je jedina stvar koja je zapravo lažna. 402 00:25:57,150 --> 00:26:00,100 Evo primjer koji bi trebali znati 403 00:26:00,100 --> 00:26:05,160 kao prilično dobar primjer kada se koriste Bitno operateri. 404 00:26:05,160 --> 00:26:08,660 Evo, ako mi ili grad '' s Ox20, 405 00:26:08,660 --> 00:26:11,830 a mi ćemo gledati na to u sekundi, dobili smo nešto. 406 00:26:11,830 --> 00:26:16,020 A ako smo ili malo '' s Ox20, dobili smo nešto. 407 00:26:16,020 --> 00:26:26,750 Tako ćemo podići ASCII tablice. 408 00:26:26,750 --> 00:26:34,000 Ok. Ovdje vidimo da je 'A' je - 409 00:26:34,000 --> 00:26:36,920 ovdje imamo '' je decimala 65. 410 00:26:36,920 --> 00:26:45,120 No, ja ću ići s heksadecimalnom, što je Ox41. 411 00:26:45,120 --> 00:26:48,280 Prilično siguran da ga je vidio u klasi. Mislim da smo ga vidjeli u razredu 412 00:26:48,280 --> 00:26:52,730 da je prilično lako pretvoriti heksadecimalni u binarne. 413 00:26:52,730 --> 00:26:55,280 Pa evo, ako želim staviti 4 u binarnom, 414 00:26:55,280 --> 00:26:59,550 da baš će biti 0100. 415 00:26:59,550 --> 00:27:03,620 To je jedna je mjesto, 2. mjesto, 4. mjesto, tako da je ovo 4. 416 00:27:03,620 --> 00:27:08,550 Onda sam se Split 1 u binarnom obliku, koja će se 0001. 417 00:27:08,550 --> 00:27:14,280 I tako to će biti predstavljanje 'A' u binarnom obliku. 418 00:27:14,280 --> 00:27:22,720 Uzimajući malim slovima '", sada će biti Ox61, 419 00:27:22,720 --> 00:27:27,050 gdje se, dijeleći ovih gore u svom binarnom, pa 6 - 420 00:27:27,050 --> 00:27:37,830 Neka je zapravo to učiniti - je nema gumicu? Gumica. 421 00:27:37,830 --> 00:27:48,220 Ox61. Dakle, dijeleći 6 u binarnom će biti 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 I cijepanje 1 koja će se 0001. 423 00:27:54,610 --> 00:27:56,520 Gledajući razlika između ova dva, 424 00:27:56,520 --> 00:28:04,250 vidimo da je jedina razlika između malih i kapitala 'A' je ovo jedan malo. 425 00:28:04,250 --> 00:28:11,810 Dakle, vraća se ovdje - u redu. 426 00:28:11,810 --> 00:28:15,920 Vraćajući se ovdje, ako ćemo gledati na ono malo Ox20 je, 427 00:28:15,920 --> 00:28:22,210 tako jak Ox20 u svom binarnom, 428 00:28:22,210 --> 00:28:27,310 je 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, samo malo da je postavljena je to malo da se bave, 430 00:28:33,470 --> 00:28:38,210 s prebacivanje između kapitala i mala slova "A". 431 00:28:38,210 --> 00:28:47,610 Ako sam ili '", što je ovaj jedan,' ', 432 00:28:47,610 --> 00:28:50,580 ako ja ili '' s Ox20, 433 00:28:50,580 --> 00:28:53,490 što ću dobiti? 434 00:28:53,490 --> 00:28:58,960 [Student, nečujno] >> malim slovom '", jer će se okrenuti ovu malo na jednoj. 435 00:28:58,960 --> 00:29:04,170 A ako sam ili '' s Ox20, što ću dobiti? 436 00:29:04,170 --> 00:29:08,780 Malim slovima, jer upravo ORing '' s Ox20, 437 00:29:08,780 --> 00:29:14,580 Samo ću se ORing ovu jednu malo na jednoj, to je već 1, tako da to nije važno. 438 00:29:14,580 --> 00:29:17,960 Tako smo dobili 'A' i 'A'. 439 00:29:17,960 --> 00:29:24,820 >> Bitno a. Opet, možemo misliti na to kao naš logičan i kolega. 440 00:29:24,820 --> 00:29:28,180 Na lijevoj strani imamo istinito i točno. 441 00:29:28,180 --> 00:29:31,160 To se događa da bi bilo istinito, a za sve slučajeve, 442 00:29:31,160 --> 00:29:36,270 lažna i istinita ili istinito i lažno, ili lažno i netočno, 443 00:29:36,270 --> 00:29:38,550 nitko od tih stvari su istinite. 444 00:29:38,550 --> 00:29:44,170 Dakle, ono što smo završiti dobivanje 1000. 445 00:29:44,170 --> 00:29:48,830 Tako sada, ovdje, ovdje gdje sam koristio vjerodostojna bitovima ne, 446 00:29:48,830 --> 00:29:52,230 gdje smo imali Ox20. 447 00:29:52,230 --> 00:29:54,350 Dakle, ovo je Ox20. 448 00:29:54,350 --> 00:29:59,570 Sada ono što želim učiniti, bitovima ~ od Ox20. 449 00:29:59,570 --> 00:30:03,600 To će se okrenuti sve bitove. 450 00:30:03,600 --> 00:30:09,330 Pa ja imam 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 I tako '' anded sa ~ Ox20 će mi dati ono? 452 00:30:18,940 --> 00:30:22,430 Samo malo mi stvarno trebamo razmišljati o tome je ovo jedan, 453 00:30:22,430 --> 00:30:26,020 jer, ako su sve ove bita postavljena na 1, 454 00:30:26,020 --> 00:30:29,000 onda ćemo dobiti upravo ono '"bio, 455 00:30:29,000 --> 00:30:31,260 osim, eventualno, što je ovo malo je. 456 00:30:31,260 --> 00:30:34,460 Jer, ako je bilo 1, sada će biti postavljena na 0, 457 00:30:34,460 --> 00:30:39,810 , jer bez obzira na to, anded s tim što će biti 0. 458 00:30:39,810 --> 00:30:43,280 Dakle, ono što je '' & ~ Ox20 će mi dati? 459 00:30:43,280 --> 00:30:48,200 [Studenti odgovoriti, nečujno] >> I ono što je '' i - to je '". 460 00:30:48,200 --> 00:30:52,170 I ono što je '' & ~ Ox20 će mi dati? 461 00:30:52,170 --> 00:30:56,720 'A.' Budući da je ovo trenutno 1. 462 00:30:56,720 --> 00:30:59,570 ANDing s ovim 0 ide kako bi to 0, 463 00:30:59,570 --> 00:31:02,530 a sad ćemo dobiti 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Obje su ',' i na kraju, ali ne manje važno od ovog tipa, 465 00:31:06,600 --> 00:31:10,830 imamo XOR. To je vrlo slično kao i, 466 00:31:10,830 --> 00:31:14,400 osim što znači isključivo ili. 467 00:31:14,400 --> 00:31:18,420 To je kao ono što obično smatramo ili u stvarnom svijetu. 468 00:31:18,420 --> 00:31:23,190 Znači li to bilo 'x' ili 'y', ali ne i oboje. 469 00:31:23,190 --> 00:31:28,700 Evo 1 ^ 1 će biti 0. 470 00:31:28,700 --> 00:31:33,650 Jer istina, to je - to ne radi, kao i sa logično pravi i lažni 471 00:31:33,650 --> 00:31:37,150 kao bitovima & i ili učiniti, 472 00:31:37,150 --> 00:31:40,100 ali istinito ^ istina je laž. 473 00:31:40,100 --> 00:31:44,810 Budući da smo se samo žele vratiti true ako samo jedan od njih je i istina. 474 00:31:44,810 --> 00:31:50,950 Dakle 1 ^ 1 0. Što je s 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Je 1. 1 ^ 0 je 1, 0 ^ 0 je 0. 476 00:31:56,010 --> 00:32:03,890 Dakle, u svim okolnostima, 0 bitovima nešto 0 će biti 0. 477 00:32:03,890 --> 00:32:10,270 1 bitovima nešto 0 ili 0 bitovima 1, 478 00:32:10,270 --> 00:32:14,660 ako je | ili ^, to će biti 1, a ako je i to će biti 0. 479 00:32:14,660 --> 00:32:20,850 I jedini slučaj gdje 1 bitovima 1 nije 1 je s ekskluzivnim ili. 480 00:32:20,850 --> 00:32:24,580 To je 0110. 481 00:32:24,580 --> 00:32:36,520 Dakle, ovdje je sada, koristeći XOR - pa smo se vratili na 20.. 482 00:32:36,520 --> 00:32:43,480 '' ^ Ox20 je ove 2 bita smo uspoređuju. 483 00:32:43,480 --> 00:32:50,020 Dakle 1 ^ 0 će mi dati što? Jedan. 484 00:32:50,020 --> 00:32:58,430 '' ^ Ox20 će mi dati? Malim slovima. 485 00:32:58,430 --> 00:33:04,010 '' ^ Ox20 će mi dati? Kapital A. 486 00:33:04,010 --> 00:33:09,310 Jer bez obzira na to radi, to XORing s Ox20 487 00:33:09,310 --> 00:33:15,380 je učinkovito flipping god to malo je. 488 00:33:15,380 --> 00:33:21,240 Ako je 0, to je sada će postati jedan. 489 00:33:21,240 --> 00:33:26,160 Budući da je to 1, 1 ^ 1 0. 490 00:33:26,160 --> 00:33:33,280 Tako je naša '' postao '', a naš '' postala '". 491 00:33:33,280 --> 00:33:36,910 Dakle XOR je stvarno zgodan način samo flipping slučaj. 492 00:33:36,910 --> 00:33:39,960 Vi samo želim ponoviti tijekom niz slova 493 00:33:39,960 --> 00:33:44,330 i izmjenjivati ​​slučaj svakog pojedinog lika, 494 00:33:44,330 --> 00:33:50,680 ste upravo XOR sve s Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Sada nam je preostalo pomak. Lijevi shift samo ide na, u osnovi, 496 00:33:55,220 --> 00:34:01,250 gurati sve brojeve u, ili u lijevo, i umetnite 0 je iza njih. 497 00:34:01,250 --> 00:34:05,550 Dakle, ovdje imamo 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Idemo gurnuti 3 0 je s desne strane, 499 00:34:08,560 --> 00:34:13,580 a mi smo dobili 01.101.000. 500 00:34:13,580 --> 00:34:16,380 U nebinarni uvjetima, 501 00:34:16,380 --> 00:34:24,699 vidimo da je to stvarno bave 13 Lijevi pomaknut s 3, što nam daje 104. 502 00:34:24,699 --> 00:34:32,530 Dakle lijevo klizećeg vidimo ovdje, x << y je u osnovi x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 je 8, tako da 13 * 8 104. 504 00:34:40,139 --> 00:34:45,679 Ako samo razmišljamo o binarnom općenito, kako svake znamenke, 505 00:34:45,679 --> 00:34:49,530 ako ćemo početi s desne strane, to je jedna je mjesto, a zatim u dva je mjesto, a zatim je četiri je mjesto. 506 00:34:49,530 --> 00:34:51,330 Dakle, gurajući u 0-ih s desne strane, 507 00:34:51,330 --> 00:34:55,080 mi smo samo gura stvari koje su bile u četiri je mjesto na 8. mjesto, 508 00:34:55,080 --> 00:34:57,920 i stvari koje su bile u osam je mjesta na 16. je mjestu. 509 00:34:57,920 --> 00:35:01,280 Svaki pomak samo množi sa 2. Da? 510 00:35:01,280 --> 00:35:05,210 [Student] Što će se dogoditi ako se pomaknuo za 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Ako pomaknuo za 5 ti bi samo izgubiti znamenke. 512 00:35:10,790 --> 00:35:15,410 Neizbježno, to je ista stvar. Kao, cijeli brojevi su samo 32 bita, 513 00:35:15,410 --> 00:35:20,750 Dakle, ako ste dodali 2 stvarno velika prirodna broja, to jednostavno ne uklapa u cijeli broj. 514 00:35:20,750 --> 00:35:23,660 Dakle, to je ista stvar ovdje. Ako pomaknuo za 5, 515 00:35:23,660 --> 00:35:25,650 mi bi samo izgubiti taj jedan. 516 00:35:25,650 --> 00:35:28,820 I to je vrsta ono što mislim "ugrubo" 517 00:35:28,820 --> 00:35:37,470 gdje ako pomak predaleko, gubite bitova. 518 00:35:37,470 --> 00:35:39,830 >> Pravo pomak će biti suprotno, 519 00:35:39,830 --> 00:35:43,090 gdje ćemo gurati 0 isključio kraju, 520 00:35:43,090 --> 00:35:48,400 i za naše potrebe, ispuniti 0-ih s lijeve. 521 00:35:48,400 --> 00:35:52,910 Dakle, to, mi smo u osnovi unazad što smo već učinili. 522 00:35:52,910 --> 00:35:57,780 A vidimo da su tri 0-a o pravu samo su otpali, 523 00:35:57,780 --> 00:36:02,020 i mi smo gurnuo 1101 skroz udesno. 524 00:36:02,020 --> 00:36:08,380 Ovaj je događaj 104 >> 3., koji je, učinkovito, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Pa sad, evo, to je slična ideja. 526 00:36:11,200 --> 00:36:18,720 Zašto je to samo okvirno x / 2 ^ y, a ne zapravo x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Jer ako sam bio pomaknut za 4, ja bi izgubio jedan. 528 00:36:22,240 --> 00:36:25,950 Uglavnom, što mislite o, samo mislim cjelobrojno dijeljenje u cjelini. 529 00:36:25,950 --> 00:36:31,070 Dakle, kao što je 5/2 je 2. To nije 2.5. 530 00:36:31,070 --> 00:36:35,000 To je ista ideja ovdje. Kad podijelimo s 2, 531 00:36:35,000 --> 00:36:39,910 možemo izgubiti ak bitova na putu. 532 00:36:39,910 --> 00:36:43,870 Dakle, sada - da je za Bitno. To je sve što trebaš znati. 533 00:36:43,870 --> 00:36:46,340 Sjetite se slučaja korištenja smo vidjeli u razredu, 534 00:36:46,340 --> 00:36:49,340 kao što je malo maska ​​je korisno za bitovni operatori, 535 00:36:49,340 --> 00:36:53,220 ili ih koristiti za bitne maske. 536 00:36:53,220 --> 00:36:58,620 Velika slova i mala slova, pretvorbi je prilično prototipski primjer. 537 00:36:58,620 --> 00:37:01,640 >> Ok, pa buffer overflow napada. 538 00:37:01,640 --> 00:37:05,110 Svatko se sjetiti što je u redu s tom funkcijom? 539 00:37:05,110 --> 00:37:10,140 Obavijest proglasimo niz od 12 bajtova, 12 znakova, 540 00:37:10,140 --> 00:37:18,510 i onda mi kopirati u naš tampon od 12 znakova cijeli niz bar. 541 00:37:18,510 --> 00:37:25,080 Dakle, ono što je ovdje problem? 542 00:37:25,080 --> 00:37:32,270 Magični broj 12 treba skoro odmah iskočiti kao - zašto 12? 543 00:37:32,270 --> 00:37:35,050 Što ako se dogodi da se bar više od 12 znakova? 544 00:37:35,050 --> 00:37:41,200 Što ako bar je milijune likova? 545 00:37:41,200 --> 00:37:46,010 Ovdje je pitanje memcpy. Ako bar je dovoljno dugo, 546 00:37:46,010 --> 00:37:50,330 to će samo potpuno - 'c', 'c' ne brine da je samo 12 znakova; 547 00:37:50,330 --> 00:37:53,280 'C' ne zanima me da se ne može uklopiti da mnogo bajtova. 548 00:37:53,280 --> 00:37:58,250 To će samo potpuno prebrisati char, 12 bajtova smo dodijeljeno za njega, 549 00:37:58,250 --> 00:38:01,830 i sve mimo njega u memoriji koji zapravo ne spadaju u tu tampon 550 00:38:01,830 --> 00:38:06,520 s bilo niz bar je. 551 00:38:06,520 --> 00:38:09,780 Dakle, to je slika koju je vidio u razredu 552 00:38:09,780 --> 00:38:12,220 gdje mi imamo hrpu odrastanja. 553 00:38:12,220 --> 00:38:16,040 Trebali bi se koristiti za ove slike i upoznajte se s njima opet. 554 00:38:16,040 --> 00:38:21,260 Mi imamo hrpu odrastanja, memorijske adrese početi na 0 na vrhu 555 00:38:21,260 --> 00:38:26,270 i narasti do sviđa 4000000000 na dnu. 556 00:38:26,270 --> 00:38:28,820 Mi imamo polja 'c' negdje u memoriji, 557 00:38:28,820 --> 00:38:32,260 onda mi imamo pokazivač crtičnog točno ispod njega, 558 00:38:32,260 --> 00:38:38,720 i onda imamo spremljene frame pokazivač u našoj adresi povratka i naše matične rutinu u hrpu. 559 00:38:38,720 --> 00:38:40,800 Sjetite se što je povratna adresa je? 560 00:38:40,800 --> 00:38:45,360 To je kada je glavni poziva funkciju Foo, poziva bar funkciju, 561 00:38:45,360 --> 00:38:48,100 neizbježno, bar vraća. 562 00:38:48,100 --> 00:38:52,610 Dakle, kada se vraća bar, oni moraju znati da to ide natrag u foo da ga zove. 563 00:38:52,610 --> 00:39:01,360 Dakle, povratak adresa je adresa funkcije koje mora vratiti do kada je funkcija vraća. 564 00:39:01,360 --> 00:39:05,830 Razlog je to važno za buffer overflow napada, jer je, jednostavno, 565 00:39:05,830 --> 00:39:09,580 hakeri željeli promijeniti tu povratnu adresu. 566 00:39:09,580 --> 00:39:14,950 Umjesto da ide natrag u foo, ja ću se vratiti tamo gdje hacker želi da se vrati na. 567 00:39:14,950 --> 00:39:17,760 A, povoljno, u kojem haker često želi vratiti u 568 00:39:17,760 --> 00:39:22,400 je početak tampon da smo izvorno imali. 569 00:39:22,400 --> 00:39:26,170 Dakle primijetiti, opet, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Aparat je primjer Little indijskom sustavu, 571 00:39:28,490 --> 00:39:34,140 pa cijeli broj ili pointer je pohranjen bajtova obrnuti. 572 00:39:34,140 --> 00:39:38,980 Dakle, ovdje vidimo - to? Da. 573 00:39:38,980 --> 00:39:45,660 Vidimo Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Zapamtite heksadecimalni znamenki? 575 00:39:48,250 --> 00:39:50,640 Mi ne preokrenu heksadecimalni znamenki u Little Indian, 576 00:39:50,640 --> 00:39:56,110 jer 2 heksadecimalni znamenki čine jedan bajt, a mi smo preokrenuti bajtova. 577 00:39:56,110 --> 00:40:00,300 Zato mi ne pohranu, kao što su, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Mi pohranu, umjesto toga, svaki par 2 znamenke, počevši od desne. 579 00:40:07,520 --> 00:40:10,880 To adresa odnosi na adresu početka 580 00:40:10,880 --> 00:40:15,190 našeg tampon da mi zapravo htjeli kopirati u na prvom mjestu. 581 00:40:15,190 --> 00:40:19,230 Razlog je to korisno je zato, što ako je napadač 582 00:40:19,230 --> 00:40:24,100 dogodilo, umjesto da je niz koji je sve to samo 583 00:40:24,100 --> 00:40:27,060 bezopasna niz poput, njihovo ime ili nešto, 584 00:40:27,060 --> 00:40:33,900 Što ako, umjesto toga, da string su samo neke proizvoljnog koda 585 00:40:33,900 --> 00:40:38,610 da je sve što su htjeli to učiniti? 586 00:40:38,610 --> 00:40:45,630 Tako su mogli - ne mogu se sjetiti bilo hladno koda. 587 00:40:45,630 --> 00:40:47,780 To bi moglo biti bilo što, ipak. Bilo pogubno code. 588 00:40:47,780 --> 00:40:51,440 Ako su htjeli, oni su samo mogli učiniti nešto na segmentima grešaka, ali to bi bilo besmisleno. 589 00:40:51,440 --> 00:40:54,950 Oni obično to učiniti za hack vaš sustav. 590 00:40:54,950 --> 00:40:59,930 >> Redu. CS50 knjižnica. 591 00:40:59,930 --> 00:41:04,800 To je, u osnovi, getInt, getString, sve te funkcije smo dali za tebe. 592 00:41:04,800 --> 00:41:10,630 Dakle, imamo char * string, a to je apstrakcija da smo raznio 593 00:41:10,630 --> 00:41:12,450 u nekom trenutku tijekom semestra. 594 00:41:12,450 --> 00:41:18,220 Ne zaboravite da je string je samo niz znakova. 595 00:41:18,220 --> 00:41:23,240 Dakle, ovdje vidimo sažeta verzija getString. 596 00:41:23,240 --> 00:41:25,920 Trebali bi se osvrnuti na to da se sjećam kako je to zapravo provodi. 597 00:41:25,920 --> 00:41:30,950 Ključne su detalji, primijetit ćemo dobiti u jednom liku u isto vrijeme 598 00:41:30,950 --> 00:41:34,570 od standard u, koji je baš kao i nama tipkati na tipkovnici. 599 00:41:34,570 --> 00:41:37,890 Dakle, jedan znak na vrijeme, a ako smo dobili previše znakova, 600 00:41:37,890 --> 00:41:40,580 tako da, ako je n + 1 je veći od kapaciteta, 601 00:41:40,580 --> 00:41:44,140 onda moramo povećati kapacitet naše tampon. 602 00:41:44,140 --> 00:41:47,780 Dakle ovdje smo udvostručenje veličine našeg tampon. 603 00:41:47,780 --> 00:41:51,840 I to stalno događa, a mi znak umetnuli u našu tampon 604 00:41:51,840 --> 00:41:56,220 dok ne primimo novu liniju ili kraj datoteke ili što god, 605 00:41:56,220 --> 00:41:59,380 u tom slučaju, mi smo gotovi s string, a zatim u stvarnom getString 606 00:41:59,380 --> 00:42:05,120 smanjuje memoriju, kao i ako smo dodijeljeni previše memorije to će se vratiti i smanjiti malo. 607 00:42:05,120 --> 00:42:08,830 Dakle, mi ne pokazuju da, ali glavna ideja je 608 00:42:08,830 --> 00:42:11,960 to mora pročitati u jednom liku u isto vrijeme. 609 00:42:11,960 --> 00:42:17,140 To se ne može samo čitati u cijelu stvar odjednom, 610 00:42:17,140 --> 00:42:19,550 jer pufera samo određene veličine. 611 00:42:19,550 --> 00:42:26,590 Dakle, ako je niz koji se pokušava umetnuti u tampon je prevelika, onda bi se preliti. 612 00:42:26,590 --> 00:42:28,940 Dakle, ovdje smo se spriječilo da se samo čita u jednom liku 613 00:42:28,940 --> 00:42:33,750 u isto vrijeme i raste svaki put kad trebamo. 614 00:42:33,750 --> 00:42:40,270 Dakle getInt i ostali CS50 knjižnica funkcije imaju tendenciju da koriste getString 615 00:42:40,270 --> 00:42:42,310 u njihove primjene. 616 00:42:42,310 --> 00:42:45,370 Tako sam istaknuo važne stvari ovdje. 617 00:42:45,370 --> 00:42:49,460 Ona poziva getString dobiti niz. 618 00:42:49,460 --> 00:42:51,710 Ako getString uspjeli vratiti pamćenje, 619 00:42:51,710 --> 00:42:54,270 sjetite se da getString mallocs nešto, pa kad god nazvati getString 620 00:42:54,270 --> 00:42:57,820 da ne bi trebali (nerazumljivo) osloboditi taj niz koji ste dobili. 621 00:42:57,820 --> 00:43:02,870 Pa evo, ako to nije malloc nešto, vraćamo INT_MAX samo kao zastavu koja, 622 00:43:02,870 --> 00:43:05,650 hej, nismo bili u mogućnosti da se zapravo cijeli broj. 623 00:43:05,650 --> 00:43:10,830 Vi bi trebali ignorirati ono što sam se vratiti k vama, ili 624 00:43:10,830 --> 00:43:15,540 ne treba tretirati kao valjani ulaz. 625 00:43:15,540 --> 00:43:21,360 Konačno, uz pretpostavku da je uspjela, koristimo sscanf s tom posebnom zastavom, 626 00:43:21,360 --> 00:43:23,820 što znači, prvo kolo cijeli broj, 627 00:43:23,820 --> 00:43:26,770 onda dalo nikakve znakove nakon toga cijeli broj. 628 00:43:26,770 --> 00:43:29,070 Dakle primijetiti želimo jednaka 1.. 629 00:43:29,070 --> 00:43:32,940 Dakle sscanf vraća koliko mečeva ako uspješno napravili? 630 00:43:32,940 --> 00:43:37,010 To će vratiti 1 ako se uspješno uskladiti cijeli broj, 631 00:43:37,010 --> 00:43:40,890 ona će se vratiti 0 ako to ne odgovara cijeli broj, i ona će se vratiti dva 632 00:43:40,890 --> 00:43:45,920 ako se podudaraju cijeli slijedi neki lik. 633 00:43:45,920 --> 00:43:49,780 Dakle, primijetit ćemo ponovno pokušati ako mi odgovaraju sve samo jednom. 634 00:43:49,780 --> 00:43:55,230 Dakle, ako se ušli 1, 2, 3, C, ili 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 onda 1, 2, 3 će se pohranjuju na cijeli broj, 636 00:43:57,400 --> 00:43:59,620 X bi se pohranjuju na karakter, 637 00:43:59,620 --> 00:44:06,410 sscanf će se vratiti dva, a mi bi ponovo pokušati, jer mi samo želimo cijeli broj. 638 00:44:06,410 --> 00:44:09,810 >> Brzo puše kroz HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language je struktura i semantika webu. 640 00:44:15,340 --> 00:44:19,960 Ovdje je primjer iz predavanja gdje smo HTML tagova. 641 00:44:19,960 --> 00:44:22,110 Imamo oznake glavi, tijelu oznake, 642 00:44:22,110 --> 00:44:27,770 imamo primjere praznih oznakama gdje smo zapravo nemaju početak i zatvoriti tag, 643 00:44:27,770 --> 00:44:30,820 imamo samo link i sliku. 644 00:44:30,820 --> 00:44:38,480 Nema zatvaranja slike tag, postoji samo jedna oznaka koja ostvaruje sve oznake treba učiniti. 645 00:44:38,480 --> 00:44:41,950 Link je primjer, vidjet ćemo kako se povezati s CSS, 646 00:44:41,950 --> 00:44:45,910 Scenarij je primjer kako se povezati s vanjskim JavaScript. 647 00:44:45,910 --> 00:44:53,100 To je prilično jednostavan, i zapamtite, HTML nije programski jezik. 648 00:44:53,100 --> 00:44:58,250 Evo, sjetite se kako bi definirali oblik ili barem ono što će to učiniti? 649 00:44:58,250 --> 00:45:01,740 Takav oblik ima neku akciju i metodu. 650 00:45:01,740 --> 00:45:06,210 Metode koje će samo ikada vidjeti su GET i POST. 651 00:45:06,210 --> 00:45:09,040 Dakle, dobili je verzija u kojoj je stvar dobiva staviti u URL. 652 00:45:09,040 --> 00:45:11,680 POST je mjesto gdje se ne stavi u URL-u. 653 00:45:11,680 --> 00:45:18,520 Umjesto toga, sve podatke iz obrasca je umetnuto više skriveno u HTTP zahtjev. 654 00:45:18,520 --> 00:45:22,390 Pa evo, akcija definira gdje HTTP zahtjev ide. 655 00:45:22,390 --> 00:45:27,490 Gdje će se google.com / search. 656 00:45:27,490 --> 00:45:32,890 Metoda. Zapamti razlike između GET i POST, 657 00:45:32,890 --> 00:45:37,200 i, samo reći kao primjer, ako želite nešto oznaka. 658 00:45:37,200 --> 00:45:40,660 Vi nikada neće biti u stanju oznaku URL POST 659 00:45:40,660 --> 00:45:44,970 jer podaci nisu uključena u URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, sad, je HyperText Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 HyperText Transfer Protocol, što se i očekuje da se prijenos 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, i to ne radi. 663 00:45:57,710 --> 00:46:00,170 No, to također prenosi sve slike možete naći na webu, 664 00:46:00,170 --> 00:46:05,400 bilo preuzimanja što bi početi kao HTTP zahtjev. 665 00:46:05,400 --> 00:46:10,350 Dakle HTTP je samo jezik World Wide Webu. 666 00:46:10,350 --> 00:46:15,610 I ovdje je potrebno prepoznati ovu vrstu HTTP zahtjev. 667 00:46:15,610 --> 00:46:19,300 Ovdje HTTP/1.1 na strani samo kaže da je verzija 668 00:46:19,300 --> 00:46:21,570 protokola koristim. 669 00:46:21,570 --> 00:46:25,770 To je prilično uvijek će biti HTTP/1.1, kao što ćete vidjeti. 670 00:46:25,770 --> 00:46:30,110 Tada smo vidjeli da je to GET, POST alternativa se, da bi mogli vidjeti. 671 00:46:30,110 --> 00:46:40,790 I URL koji sam pokušavao posjetiti bio www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Dakle, ne zaboravite da je ovo, upitnik q = bla bla bla, 673 00:46:44,240 --> 00:46:49,040 je vrsta stvari koje se podnosi obrazac. 674 00:46:49,040 --> 00:46:51,830 Odgovor se možda vratiti u meni će izgledati nešto poput ovoga. 675 00:46:51,830 --> 00:46:54,050 Opet, počevši s protokolom, što će biti da, 676 00:46:54,050 --> 00:46:59,190 slijedi kodom stanja. Ovdje je 200 u redu. 677 00:46:59,190 --> 00:47:05,060 I na kraju, web stranica koja zapravo sam tražio će uslijediti. 678 00:47:05,060 --> 00:47:08,210 Moguće status kod možete vidjeti, a vi bi trebali znati više od njih. 679 00:47:08,210 --> 00:47:12,770 200 OK vjerojatno ste vidjeli prije. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, 500 Internal Server Error 681 00:47:17,830 --> 00:47:22,140 obično ako odete na web stranicu i da nešto ne valja ili njihovi PHP kod ruši, 682 00:47:22,140 --> 00:47:24,930 dok je u aparatu imamo tako veliki narančasti okvir 683 00:47:24,930 --> 00:47:27,830 koji dolazi i kaže, kao što je, nešto nije u redu, ovaj broj ne radi 684 00:47:27,830 --> 00:47:30,380 ili ova funkcija je loše. 685 00:47:30,380 --> 00:47:33,230 Obično web stranice ne želite li znati što funkcije su zapravo loše, 686 00:47:33,230 --> 00:47:37,880 Dakle, umjesto da samo ću vam dati 500 Internal Server pogreške. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP je jedan sloj ispod HTTP. 688 00:47:43,050 --> 00:47:47,550 Ne zaboravite da je internet izvan World Wide Webu. 689 00:47:47,550 --> 00:47:52,270 Kao, ako igrate online igru ​​koja ne ide putem HTTP, 690 00:47:52,270 --> 00:47:55,740 to ide kroz različita - to je još uvijek koriste internet, 691 00:47:55,740 --> 00:47:58,900 ali to ne koristi HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP je samo jedan primjer od protokola izgrađen na TCP / IP-a. 693 00:48:02,470 --> 00:48:07,820 IP doslovno znači Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Svako računalo ima IP adresu, oni su ti 4-znamenkasti stvari 695 00:48:11,500 --> 00:48:16,510 kao što je 192.168.2.1, ili što god, koji se, lokalna jedan. 696 00:48:16,510 --> 00:48:23,390 No, to je obrazac IP adresu. 697 00:48:23,390 --> 00:48:29,060 Dakle, DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 to je ono što u prijevodu stvari poput google.com do stvarne IP adrese. 699 00:48:33,410 --> 00:48:37,700 Dakle, ako ste tip koji IP adresu u URL-u, 700 00:48:37,700 --> 00:48:40,850 da bi vas dovesti na Google, ali obično ne sjećam se tih stvari. 701 00:48:40,850 --> 00:48:45,470 Vi imaju tendenciju da se sjetite google.com umjesto. 702 00:48:45,470 --> 00:48:51,560 Posljednje što imamo je porta, gdje je to TCP dio IP. 703 00:48:51,560 --> 00:48:54,880 TCP radi više. Razmislite o tome, kao što je, imate svoj preglednik izvodi stranica. 704 00:48:54,880 --> 00:48:58,670 Možda imate neki e-mail aplikaciju da radi; 705 00:48:58,670 --> 00:49:02,150 možda imate neki drugi program koji koristi Internet trčanje. 706 00:49:02,150 --> 00:49:05,090 Svi oni trebaju pristup Internetu, 707 00:49:05,090 --> 00:49:08,100 ali vaše računalo ima samo jedan WiFi karticu ili bilo što drugo. 708 00:49:08,100 --> 00:49:10,780 Dakle priključci su način na koji smo mogli razdvojiti 709 00:49:10,780 --> 00:49:13,550 kako se ti programi su u mogućnosti koristiti internet. 710 00:49:13,550 --> 00:49:17,230 Svaka aplikacija dobiva jedan određeni port da se može slušati na, 711 00:49:17,230 --> 00:49:19,670 i po defaultu, HTTP koristi port 80. 712 00:49:19,670 --> 00:49:22,410 Neki e-mail usluge koriste 25. 713 00:49:22,410 --> 00:49:24,490 One s niskim brojem imaju tendenciju da se zadržana. 714 00:49:24,490 --> 00:49:29,270 Ti su obično u mogućnosti da biste dobili veći brojem onih za sebe. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Mi style web stranice s CSS, a ne s HTML. 717 00:49:36,030 --> 00:49:38,440 Postoje 3 mjesta možete staviti svoj CSS. 718 00:49:38,440 --> 00:49:46,300 To može biti u istoj razini, između stilskih oznaka, ili u potpunosti zasebnu datoteku, a zatim povezati u. 719 00:49:46,300 --> 00:49:48,470 I ovdje je samo primjer CSS. 720 00:49:48,470 --> 00:49:50,450 Trebali biste prepoznati ovaj uzorak, 721 00:49:50,450 --> 00:49:54,310 gdje je prvi primjer je da smo podudaranje tjelesnu oznaku, 722 00:49:54,310 --> 00:49:56,680 a ovdje smo centriranje tijela oznaku. 723 00:49:56,680 --> 00:50:00,420 Drugi primjer, mi odgovara stvar 724 00:50:00,420 --> 00:50:04,740 uz predočenje osobne podnožje, a mi smo primjeni neke stilove za to. 725 00:50:04,740 --> 00:50:07,310 Obavijest da je ID podnožje poravnava na lijevoj strani, 726 00:50:07,310 --> 00:50:09,840 dok je tijelo tekst poravnava centar. 727 00:50:09,840 --> 00:50:13,180 Podnožje je unutar tijela. 728 00:50:13,180 --> 00:50:16,470 To će se, umjesto toga, text-align napustio, iako tijelo kaže text-align centar. 729 00:50:16,470 --> 00:50:18,880 To je cijela kaskadno dio toga. 730 00:50:18,880 --> 00:50:22,110 Možete imati - možete odrediti stilove za tijelo, 731 00:50:22,110 --> 00:50:25,320 i tada su se stvari u tijelu možete navesti više specifične stilove, 732 00:50:25,320 --> 00:50:28,160 te stvari rade kao što ste očekivali. 733 00:50:28,160 --> 00:50:34,420 Konkretnije CSS specifiers imaju prednost. 734 00:50:34,420 --> 00:50:46,140 Mislim da je to. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Pozdrav svima. Kada bih samo mogao dobiti vašu pažnju. 736 00:50:49,260 --> 00:50:53,990 Ali sam i ja idem kroz PHP i SQL jako brzo. 737 00:50:53,990 --> 00:51:00,310 Dakle, možemo početi. PHP je kratica za PHP: Hypertext Preprocessoru. 738 00:51:00,310 --> 00:51:03,730 I kao što bi svi trebali znati, to je jezik skripti na strani poslužitelja, 739 00:51:03,730 --> 00:51:06,800 i mi ga koristiti za leđa kraj web stranice, 740 00:51:06,800 --> 00:51:12,540 i kako to radi puno računanja, na iza-scene dio. 741 00:51:12,540 --> 00:51:17,510 Sintaksa. To nije poput C, iznenađenje, iznenađenje. 742 00:51:17,510 --> 00:51:22,060 Ona uvijek mora početi s, ako možete vidjeti, - Ne mogu pomaknuti naprijed. 743 00:51:22,060 --> 00:51:31,340 Možete vidjeti što trebate nove vrste aparatića, a onda je potrebna i PHP?. 744 00:51:31,340 --> 00:51:35,780 To je uvijek koliko imate uokviriti vaše PHP tekst, PHP koda. 745 00:51:35,780 --> 00:51:39,180 Tako da ne mogu samo biti poput C, gdje ste vrsta staviti ga na prvo. 746 00:51:39,180 --> 00:51:42,290 Morate ga uvijek okružuju. 747 00:51:42,290 --> 00:51:47,610 I sada, glavna sintaksa je da su sve varijable trebaju početi s $ karaktera. 748 00:51:47,610 --> 00:51:49,490 Morate to učiniti kada ste ih definiraju, morate to učiniti 749 00:51:49,490 --> 00:51:51,860 kada govoriš im kasnije. 750 00:51:51,860 --> 00:51:56,510 Uvijek trebate to $. To je vaš novi najbolji prijatelj, prilično mnogo. 751 00:51:56,510 --> 00:52:01,690 Ne - za razliku od C, što ne treba staviti kakvu varijabla tipa je. 752 00:52:01,690 --> 00:52:04,940 Dakle, dok vi trebate dolara, ne morate staviti, kao što su, 753 00:52:04,940 --> 00:52:09,470 int x ili niz godina, i tako dalje, i tako dalje. 754 00:52:09,470 --> 00:52:11,490 Tako mala razlika. 755 00:52:11,490 --> 00:52:15,590 Kao rezultat toga, to znači da je slabo PHP tipa. 756 00:52:15,590 --> 00:52:19,310 PHP je slabo tipa jezik, a slabo je upisali varijabli. 757 00:52:19,310 --> 00:52:24,020 Drugim riječima, to znači da možete odabrati između različitih vrsta promjenjive vrste. 758 00:52:24,020 --> 00:52:27,230 Možete pohraniti svoj broj 1 kao int, 759 00:52:27,230 --> 00:52:29,650 možete ga spremiti kao niz, a možete ga spremiti kao float, 760 00:52:29,650 --> 00:52:33,550 i da će sve biti kako broj 1. 761 00:52:33,550 --> 00:52:36,080 Iako ste ga pohrane u različitim oblicima, 762 00:52:36,080 --> 00:52:39,120 to je još uvijek - varijabilni vrste još uvijek drži na kraju. 763 00:52:39,120 --> 00:52:41,540 Dakle, ako pogledate ovdje, ako se sjećate iz pset 7, 764 00:52:41,540 --> 00:52:43,500 mnogi od vas vjerojatno imali problema s tim. 765 00:52:43,500 --> 00:52:47,280 Dvije jednake znakove, 3 jednake znakove, 4 jednake znakovi. 766 00:52:47,280 --> 00:52:49,990 Ok, nema 4 jednake znakove, ali postoje 2 i 3. 767 00:52:49,990 --> 00:52:53,320 Možete koristiti 2 jednake znakove provjeriti vrijednosti. 768 00:52:53,320 --> 00:52:55,830 To možete provjeriti preko tipova. 769 00:52:55,830 --> 00:52:58,770 Dakle, ako se može vidjeti na prvi primjer, 770 00:52:58,770 --> 00:53:02,210 Imam num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Dakle, vaš int i vaš string su oboje, tehnički, 1, 772 00:53:06,710 --> 00:53:10,790 ali oni su različiti tipovi. No, za dvostruke jednakima, to će još proći. 773 00:53:10,790 --> 00:53:15,510 Međutim, za triple jednakima, provjerava vrijednost, kao i različite vrste. 774 00:53:15,510 --> 00:53:18,760 To znači da to neće proći u tom drugom slučaju ovdje, 775 00:53:18,760 --> 00:53:22,350 gdje ste koristeći tri jednake znakove umjesto. 776 00:53:22,350 --> 00:53:26,590 Dakle, to je velika razlika da bi trebali svi su pokazali sada. 777 00:53:26,590 --> 00:53:31,570 >> Gudački ulančavanje je još jedna moćna stvar koju možete koristiti u PHP-u. 778 00:53:31,570 --> 00:53:34,080 To je u osnovi samo to zgodan dot oznake, 779 00:53:34,080 --> 00:53:36,230 te da je, kako se može vezati konce zajedno. 780 00:53:36,230 --> 00:53:40,800 Dakle, ako imate mačku i imate psa, a vi želite staviti dvije žice zajedno, 781 00:53:40,800 --> 00:53:44,080 možete koristiti razdoblje, a to je vrsta kako se to radi. 782 00:53:44,080 --> 00:53:46,660 Također možete samo staviti ih jedni pored drugih, 783 00:53:46,660 --> 00:53:49,030 kao što možete vidjeti ovdje, u donjem primjeru, 784 00:53:49,030 --> 00:53:51,610 gdje sam odjek niz 1, prostor niz 2. 785 00:53:51,610 --> 00:53:56,930 PHP će znati da ih zamijeni kao takve. 786 00:53:56,930 --> 00:53:59,780 Polja. Sada, u PHP-u, postoje dvije različite vrste polja. 787 00:53:59,780 --> 00:54:03,180 Možete imati redovite polja, a također možete imati asocijativne nizove, 788 00:54:03,180 --> 00:54:06,040 i da ćemo proći kroz njih upravo sada. 789 00:54:06,040 --> 00:54:08,280 Redovni polja su samo ovo u C, 790 00:54:08,280 --> 00:54:11,240 pa imate indekse koji su numerirani. 791 00:54:11,240 --> 00:54:13,160 Sada mi samo ćemo stvoriti i staviti - 792 00:54:13,160 --> 00:54:15,500 pa to je kako smo stvorili prazan niz, onda ćemo 793 00:54:15,500 --> 00:54:17,310 staviti u indeksnom broja 0. 794 00:54:17,310 --> 00:54:19,200 Mi ćemo staviti broj 6, vrijednost 6. 795 00:54:19,200 --> 00:54:21,500 Možete ga vidjeti na dnu ovdje. 796 00:54:21,500 --> 00:54:24,240 Where's - na indeksnim brojem 1. ćemo staviti vrijednost broj 4, 797 00:54:24,240 --> 00:54:26,720 i tako možete vidjeti da postoji 6, ima 4, 798 00:54:26,720 --> 00:54:29,160 a onda kao da smo tiskanje stvari, 799 00:54:29,160 --> 00:54:33,550 kad smo pokušati ispisati u odnosu na vrijednost indeksa brojem 0, 800 00:54:33,550 --> 00:54:36,900 onda ćemo vidjeti vrijednost 6 se ispisati. Cool? 801 00:54:36,900 --> 00:54:40,160 Tako da je redoviti polja za vas. 802 00:54:40,160 --> 00:54:42,750 Drugi način možete dodati i stvari za redovite polja sada 803 00:54:42,750 --> 00:54:44,780 je možete samo ih dodati na kraju. 804 00:54:44,780 --> 00:54:47,240 To znači da ne morate da odredite određeni indeks. 805 00:54:47,240 --> 00:54:51,000 Možete vidjeti broj, a zatim u uglate zagrade nema index navedeno. 806 00:54:51,000 --> 00:54:56,270 I to će se znati - PHP će znati da samo ga dodati na kraju popisa, sljedeći slobodno mjesto. 807 00:54:56,270 --> 00:54:59,190 Tako možete vidjeti jedan upravo tamo na tom mjestu 0, 808 00:54:59,190 --> 00:55:02,690 2. otišao tamo na prvom mjestu. 809 00:55:02,690 --> 00:55:04,690 3 ide - dodaje kao i tamo. 810 00:55:04,690 --> 00:55:06,720 Dakle, ta vrsta ima smisla. Vi ste samo stalno ga dodate, 811 00:55:06,720 --> 00:55:09,360 a onda kad smo odjekuje indeks broj 1, 812 00:55:09,360 --> 00:55:13,080 to će ispisati vrijednost 2. 813 00:55:13,080 --> 00:55:16,800 >> Onda imamo polja koja su asocijativne nizove. 814 00:55:16,800 --> 00:55:19,370 Asocijativne matrice, umjesto brojčane pokazatelje, 815 00:55:19,370 --> 00:55:23,630 što učiniti je, da su indeksi koji su po žici. 816 00:55:23,630 --> 00:55:25,670 Možete vidjeti, a ne - Riješio sam se svih tih brojčanih pokazatelja, 817 00:55:25,670 --> 00:55:32,140 a sada je Key1, key2, key3, a oni su u navodnicima će značiti da su svi nizovi. 818 00:55:32,140 --> 00:55:34,470 Dakle, možemo imati primjer za to. 819 00:55:34,470 --> 00:55:38,790 Primjer za to je da imamo TF, a to je ime index. 820 00:55:38,790 --> 00:55:42,030 Idemo na put "Alija" kao ime, na indeksu, kalorija pojede, 821 00:55:42,030 --> 00:55:47,640 možemo staviti int ovaj put umjesto niza, 822 00:55:47,640 --> 00:55:52,240 i onda na index voli, možemo staviti cijeli niz unutar nje. 823 00:55:52,240 --> 00:55:55,490 Dakle, to je vrsta - to je sličan koncept kako smo imali 824 00:55:55,490 --> 00:55:58,930 indeksi s brojevima, ali sada možemo promijeniti indekse širom 825 00:55:58,930 --> 00:56:03,890 da ih ima kao žice umjesto. 826 00:56:03,890 --> 00:56:06,070 Također možete to učiniti, osim samo to radili pojedinačno, 827 00:56:06,070 --> 00:56:09,400 sve to možete napraviti u jednom komad. Dakle, možete vidjeti da je TF tog niza, 828 00:56:09,400 --> 00:56:13,350 i onda smo ih sve postaviti u jednom div kvadratnom bracket setu. 829 00:56:13,350 --> 00:56:15,220 Tako da se može ubrzati stvari. 830 00:56:15,220 --> 00:56:19,730 To je više stilska izbora nego ne. 831 00:56:19,730 --> 00:56:21,550 Također imamo petlje. 832 00:56:21,550 --> 00:56:26,020 U C imamo petlje da se ovako raditi. 833 00:56:26,020 --> 00:56:29,690 Imali smo niz, pa smo otišli s indeksom 0 do kraja popisa, 834 00:56:29,690 --> 00:56:31,740 a mi smo sve to ispisati, zar ne? 835 00:56:31,740 --> 00:56:33,880 Osim Problem je, za asocijativnih nizova, 836 00:56:33,880 --> 00:56:36,610 ne nužno znati one brojčane pokazatelje 837 00:56:36,610 --> 00:56:39,610 jer sada imamo indekse niza. 838 00:56:39,610 --> 00:56:44,800 Sada ćemo koristiti foreach petlje, koja je, opet, nadam se koriste u pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach petlje će samo znam svaki dio popisa. 840 00:56:48,930 --> 00:56:52,450 I to ne mora znati točno numerički indeks koji imate. 841 00:56:52,450 --> 00:56:56,490 Dakle, imate foreach sintaksu, pa je foreach, stavite niz. 842 00:56:56,490 --> 00:57:00,430 Tako je moj niz naziva pset, a onda kao, riječ kao, 843 00:57:00,430 --> 00:57:04,530 a onda staviti ovaj lokalni privremenu varijablu da idete na korištenje 844 00:57:04,530 --> 00:57:10,690 samo za određenu stvar koja će održati posebna - 845 00:57:10,690 --> 00:57:14,770 Jedan primjerak ili jedan dio niza. 846 00:57:14,770 --> 00:57:18,350 Pset broj će držati jedan, a zatim možda će održati broj 6, 847 00:57:18,350 --> 00:57:20,410 i onda će se održati broj 2. 848 00:57:20,410 --> 00:57:26,630 Ali, to je zasigurno proći kroz svaku vrijednost koja je u nizu. 849 00:57:26,630 --> 00:57:30,530 Korisne funkcije koje bi trebali znati u PHP su potrebna, 850 00:57:30,530 --> 00:57:35,880 tako da se čini sigurni da ste uključujući određene datoteke, jeka, izlaz, prazna. 851 00:57:35,880 --> 00:57:40,490 Ja visoko preporučiti pogledate pset 7 i pogledati tih funkcija. 852 00:57:40,490 --> 00:57:42,810 Možda ćete morati znati onima, 853 00:57:42,810 --> 00:57:47,060 pa bih svakako znati što je, zapravo, one su sve radili. 854 00:57:47,060 --> 00:57:50,080 >> A sad idemo proći kroz opsega jako brzo. 855 00:57:50,080 --> 00:57:53,490 U djelokrugu, PHP je vrsta funky stvar, za razliku od C, 856 00:57:53,490 --> 00:57:56,170 pa samo smo ići kroz njega brzo. 857 00:57:56,170 --> 00:57:58,930 Pa recimo da počnemo na toj strelici da smo tamo. 858 00:57:58,930 --> 00:58:02,900 I mi ćemo početi sa $ ja. Dakle varijabla 'ja' će biti 0, 859 00:58:02,900 --> 00:58:06,730 i mi idemo samo da bi ga tiskanje u toj velikoj bijeloj kutiji tamo. 860 00:58:06,730 --> 00:58:09,220 Mi ćemo početi s i0, a onda ćemo ga jeka. 861 00:58:09,220 --> 00:58:12,670 Dakle, tu je 0. 862 00:58:12,670 --> 00:58:15,210 A onda ćemo to povećavati strane za petlje, 863 00:58:15,210 --> 00:58:17,810 i onda će biti vrijednost 1. 864 00:58:17,810 --> 00:58:20,070 Jedan od njih je manje od 3, tako da će to proći kroz to za petlje, 865 00:58:20,070 --> 00:58:23,230 a onda ćemo vidjeti što ponovno ispisivati. 866 00:58:23,230 --> 00:58:25,520 Mi ćemo ga ponovno povećavati na 2, 867 00:58:25,520 --> 00:58:29,860 i 2 je manji od 3, tako da će proći za petlje, i to će ispisati dva. 868 00:58:29,860 --> 00:58:35,100 Tada ćete primijetiti da 3 nije manja od 3, tako da ćemo izaći iz for petlje. 869 00:58:35,100 --> 00:58:40,050 Dakle, sada smo izašli, a onda ćemo ići u aFunction. 870 00:58:40,050 --> 00:58:45,010 Ok. Dakle, morate imati na umu da je ova varijabla koje smo stvorili, 871 00:58:45,010 --> 00:58:48,270 'ja' varijable, lokalno ne scoped. 872 00:58:48,270 --> 00:58:50,280 To znači da to nije lokalne do petlje, 873 00:58:50,280 --> 00:58:58,060 i da je varijabla još uvijek može pristupiti i promijeniti nakon toga, a to će i dalje biti na snazi. 874 00:58:58,060 --> 00:59:02,160 Dakle, ako idete u funkciju sada, vidjet ćete da smo također koriste 'ja' varijablu, 875 00:59:02,160 --> 00:59:05,320 i idemo povećajte 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Vi mislite da bi, u početku, na temelju C, da je to kopija 'ja' varijablu. 877 00:59:09,410 --> 00:59:12,830 To je potpuno druga stvar, što je točno. 878 00:59:12,830 --> 00:59:16,560 Dakle, kada smo ga ispisali, idemo ispisati 'i' + +, koji će se ispisati da 4, 879 00:59:16,560 --> 00:59:19,640 a onda ćemo - žao. 880 00:59:19,640 --> 00:59:22,030 Onda idemo do kraja iz te funkcije, 881 00:59:22,030 --> 00:59:24,820 i da ćemo biti tamo gdje strelica koja je upravo sada. 882 00:59:24,820 --> 00:59:29,190 To znači da je tada, međutim, iako je funkcija promijenio vrijednost 'ja', 883 00:59:29,190 --> 00:59:32,620 to nije promijenio izvan funkcije, 884 00:59:32,620 --> 00:59:35,060 jer funkcija ima zasebnu opseg. 885 00:59:35,060 --> 00:59:38,960 To znači da kada smo jeka 'ja', da se nije promijenila u okviru funkcije, 886 00:59:38,960 --> 00:59:43,660 pa onda ćemo opet ispisati tri. 887 00:59:43,660 --> 00:59:47,520 Različite stvari o opsegu u PHP-u nego u C. 888 00:59:47,520 --> 00:59:51,130 >> Sada u PHP i HTML. 889 00:59:51,130 --> 00:59:53,510 PHP se koristi za izradu web-stranica dinamički. 890 00:59:53,510 --> 00:59:58,660 To je vrsta čini stvari drugačije. 891 00:59:58,660 --> 01:00:02,090 Imamo ga razlikuje od HTML. 892 01:00:02,090 --> 01:00:05,230 S HTML, mi smo uvijek samo imati isti statički stvar, kao što je pokazao kako je Rob, 893 01:00:05,230 --> 01:00:09,370 dok je PHP, možete promijeniti stvari na temelju koje je korisnik. 894 01:00:09,370 --> 01:00:11,830 Dakle, ako ja imam ovo, ja sam, "Vi ste prijavljeni kao -" a zatim ime, 895 01:00:11,830 --> 01:00:14,420 i ja mogu promijeniti ime. Dakle, u ovom trenutku je ime Joseph, 896 01:00:14,420 --> 01:00:18,880 i to je "o meni", ali onda sam se također može promijeniti ime imati Tommy. 897 01:00:18,880 --> 01:00:21,700 I to bi bilo nešto drugo. 898 01:00:21,700 --> 01:00:23,840 Pa onda možemo promijeniti različite stvari o njemu, 899 01:00:23,840 --> 01:00:27,070 i to će pokazati različite sadržaje na temelju imena. 900 01:00:27,070 --> 01:00:31,430 Dakle, PHP se nekako promijeniti ono što se događa u vašem web stranice. 901 01:00:31,430 --> 01:00:33,540 Sve ovdje. Ipak, imajte na umu da oni imaju različite sadržaje, 902 01:00:33,540 --> 01:00:38,870 iako su tehnički još uvijek pristupaju tom istu web stranicu na površini. 903 01:00:38,870 --> 01:00:43,450 Generiranje HTML. Postoje dva različita načina na koje možete to učiniti. 904 01:00:43,450 --> 01:00:48,980 Tako ćemo proći kroz to odmah. Prvi put je, imate - da, žao. 905 01:00:48,980 --> 01:00:51,150 Dakle, samo trebate svoje redovite za petlji u PHP-u, 906 01:00:51,150 --> 01:00:56,270 a onda odjek u PHP-u, a vi jeka iz HTML-a. 907 01:00:56,270 --> 01:00:58,720 Koristeći ono što vas Rob pokazali HTML pisma 908 01:00:58,720 --> 01:01:04,030 a zatim pomoću PHP ispis samo ga ispisati na web stranici. 909 01:01:04,030 --> 01:01:09,520 Drugi način je da to učinite što ako izdvojiti PHP i HTML. 910 01:01:09,520 --> 01:01:11,940 Na taj način možete imati liniju PHP koji počinje za petlju, 911 01:01:11,940 --> 01:01:16,020 onda možete imati liniju HTML-u zasebnu stvar, 912 01:01:16,020 --> 01:01:19,700 a onda na kraju petlje, opet, s PHP. 913 01:01:19,700 --> 01:01:21,800 Dakle, to je neka vrsta odvajajući ga van. 914 01:01:21,800 --> 01:01:24,020 S lijeve strane, možete da imate sve - 915 01:01:24,020 --> 01:01:26,360 to je samo jedan komad PHP. 916 01:01:26,360 --> 01:01:28,510 S desne strane možete vidjeti da imate liniju PHP, 917 01:01:28,510 --> 01:01:32,540 imate liniju HTML, i imate liniju PHP opet. 918 01:01:32,540 --> 01:01:36,870 Dakle, to odvajanje van u ono što oni rade. 919 01:01:36,870 --> 01:01:39,330 A vi ćete primijetiti da ni način, za bilo koji od njih, 920 01:01:39,330 --> 01:01:41,980 oni i dalje tiskati sliku, slika, slika, 921 01:01:41,980 --> 01:01:44,540 , tako da i dalje HTML je tiskan na isti način. 922 01:01:44,540 --> 01:01:49,870 A onda i dalje ćete vidjeti 3 slike prikazuju na Vašoj web stranici. 923 01:01:49,870 --> 01:01:52,820 Tako da je 2 različite načine rade istu stvar. 924 01:01:52,820 --> 01:01:55,060 >> Sada imamo obrasce i zahtjeve. Kao Rob vam pokazao, 925 01:01:55,060 --> 01:01:59,400 postoje oblici HTML, a mi ćemo samo povjetarac kroz to. 926 01:01:59,400 --> 01:02:02,040 Imate neku akciju i imate metodu, a vaša akcije 927 01:02:02,040 --> 01:02:04,350 Lijepo od vas gdje idete poslati ga pokazuje, a metoda je li 928 01:02:04,350 --> 01:02:06,960 to će biti GET ili POST. 929 01:02:06,960 --> 01:02:11,220 I GET zahtjeva, kao što je Rob je rekao, znači da ćeš ga staviti u obliku 930 01:02:11,220 --> 01:02:15,760 a vi ćete ga vidjeti kao URL-a, dok je zahtjev POST nećete vidjeti u URL-u. 931 01:02:15,760 --> 01:02:17,840 Tako mala razlika. 932 01:02:17,840 --> 01:02:19,950 Međutim, jedna stvar koja je slična stvar 933 01:02:19,950 --> 01:02:22,560 je da POST i GET jednako nesigurno. 934 01:02:22,560 --> 01:02:26,430 Dakle, možda ćete misliti da samo zato što ga ne vidim u URL-u, 935 01:02:26,430 --> 01:02:28,790 to znači POST je sigurniji, 936 01:02:28,790 --> 01:02:34,420 , ali još uvijek možete ga vidjeti u svojim kolačićima u informacije koje šaljete. 937 01:02:34,420 --> 01:02:38,260 Dakle, ne mislim da je o jednom ili drugom. 938 01:02:38,260 --> 01:02:42,160 Još jedna stvar na umu je da i vi imate varijable sekcija. 939 01:02:42,160 --> 01:02:45,850 Momci koristiti ovo u pset 7 da biste dobili svoj korisnički ID informacije. 940 01:02:45,850 --> 01:02:48,550 Ono što se dogodilo je da je možete koristiti ovaj asocijativni niz, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, a onda ste u mogućnosti pristupiti različite stvari 942 01:02:53,310 --> 01:02:57,720 i pohraniti različite stvari preko stranice. 943 01:02:57,720 --> 01:03:00,750 >> Zadnja stvar je da imamo SQL, strukturni upitni jezik, 944 01:03:00,750 --> 01:03:04,360 i to je programski jezik za upravljanje bazama podataka. 945 01:03:04,360 --> 01:03:08,220 Što je, zapravo, su baze podataka? Oni su zbirke stolova, 946 01:03:08,220 --> 01:03:10,630 te svaka tablica može imati slične vrste objekata. 947 01:03:10,630 --> 01:03:14,990 Tako smo imali tablicu korisnika u svom financijskom pset. 948 01:03:14,990 --> 01:03:20,610 I zašto su korisni? Zato jer je to način da se trajno pohranjivanje podataka. 949 01:03:20,610 --> 01:03:22,840 To je način za praćenje stvari i upravljanje stvari 950 01:03:22,840 --> 01:03:25,890 a zapravo ga vidjeti na različitim stranicama i praćenje. 951 01:03:25,890 --> 01:03:29,930 Dok ako samo ga pohraniti u tom jednom trenutku neposrednoj 952 01:03:29,930 --> 01:03:33,720 , a zatim ga koristiti kasnije, nećete biti u mogućnosti pristupiti sve što ste spremili. 953 01:03:33,720 --> 01:03:37,660 Imamo 4 glavne stvari koje koristimo za SQL naredbi. 954 01:03:37,660 --> 01:03:40,190 Imamo odaberite, umetanje, brisanje i ažuriranje. 955 01:03:40,190 --> 01:03:42,880 Oni su jako važni za vas dvoje znati za vaš kviz. 956 01:03:42,880 --> 01:03:45,990 >> Ćemo brzo ići preko odaberite upravo sada. 957 01:03:45,990 --> 01:03:48,540 U osnovi, ti si odabirom retke iz baze. 958 01:03:48,540 --> 01:03:52,400 Dakle, ako imate, upravo ovdje - 959 01:03:52,400 --> 01:03:56,740 imamo ove dvije različite stvari, a mi želimo da odaberete od stola klase 960 01:03:56,740 --> 01:04:01,480 gdje je strašan - gdje se u strašan stupcu vrijednost je 1. 961 01:04:01,480 --> 01:04:04,460 Tako možete vidjeti ovdje, imamo ove dvije stvari ime klase, 962 01:04:04,460 --> 01:04:08,490 CS50 i Stat110, a imamo klase brojeva i slogan. 963 01:04:08,490 --> 01:04:13,150 Dakle, želimo odabrati sve te informacije. 964 01:04:13,150 --> 01:04:17,480 Tada možete vidjeti ovdje da je to neka vrsta branje iz tog strašan stupcu, 965 01:04:17,480 --> 01:04:25,170 gdje su sve stvari koje su 1, i onda ima ID klase, ime klase i slogan koji se može izdvojiti. 966 01:04:25,170 --> 01:04:28,100 Kako točno ti to učiniti u kodu? Morate koristiti PHP. 967 01:04:28,100 --> 01:04:33,830 Dakle, to je vrsta kako PHP i SQL su međusobno povezane. 968 01:04:33,830 --> 01:04:38,130 Sada imamo kôd, a mi ćemo koristiti naš upit funkciju 969 01:04:38,130 --> 01:04:41,370 kao što smo to učinili u pset 7, a mi ćemo pokrenuti SQL upit. 970 01:04:41,370 --> 01:04:43,870 Tada ćemo imati - 971 01:04:43,870 --> 01:04:46,280 uvijek moramo provjeriti da li zaredom triple jednaka ako lažna. 972 01:04:46,280 --> 01:04:49,010 Pa opet, želite provjeriti vrstu i vrijednost, 973 01:04:49,010 --> 01:04:53,880 , a zatim, ako to ne uspije, onda vam želim ispričati, kao i obično, kao što smo to učinili u pset 7. 974 01:04:53,880 --> 01:04:55,870 Inače, želite petlje kroz sve s onima pri ruci 975 01:04:55,870 --> 01:04:59,410 foreach petlje da smo upravo otišao. 976 01:04:59,410 --> 01:05:01,280 Sada da smo petlje kroz a mi smo ga napravili u prošlosti, 977 01:05:01,280 --> 01:05:05,080 pretpostavimo da je naš upit prošlo, sada imamo foreach petlju. 978 01:05:05,080 --> 01:05:11,050 I prvi red ima, pa evo red, upravo ovdje, to je boksao. 979 01:05:11,050 --> 01:05:14,010 To će ispisati sve informacije da je stečen. 980 01:05:14,010 --> 01:05:18,070 Dakle, to će se ispisati na dnu "Želite li naučiti HTML?" 981 01:05:18,070 --> 01:05:23,370 Onda to će ići u sljedeći redak, jer je završio prvi za petlju, 982 01:05:23,370 --> 01:05:26,510 pa onda će se ispisati na drugu liniju za njega, 983 01:05:26,510 --> 01:05:32,120 koji će biti STAT110, pronaći sve trenutke. 984 01:05:32,120 --> 01:05:34,290 >> Jedna stvar je na SQL ranjivosti. 985 01:05:34,290 --> 01:05:37,300 Znam David se osvrnuo i na to malo u predavanju. 986 01:05:37,300 --> 01:05:40,730 Možete čitati tome kasnije. To je stvarno smiješno. 987 01:05:40,730 --> 01:05:45,320 SQL Injection je vrsta škakljivo. 988 01:05:45,320 --> 01:05:49,890 Recimo da ste samo držati one varijable izravno u vaš upit, 989 01:05:49,890 --> 01:05:52,290 kao što možete vidjeti u toj prvoj liniji. 990 01:05:52,290 --> 01:05:54,520 Tako se čini u redu, zar ne? Vi ste samo stavljanjem u ime korisnika 991 01:05:54,520 --> 01:05:58,820 i lozinku za vaše SQL upita, a želite ga brod off i dobiti sve što je u podatkovnoj tablici. 992 01:05:58,820 --> 01:06:01,450 To mi se čini prilično jednostavna. Tako recimo netko stavlja u, 993 01:06:01,450 --> 01:06:04,910 za lozinku, ovaj ili tekst ovdje - 994 01:06:04,910 --> 01:06:06,780 trebao zapravo biti u crvenoj kutiji. 995 01:06:06,780 --> 01:06:11,920 Pa recimo da su stavili tu lozinku u - to je ono što oni ulaze. 996 01:06:11,920 --> 01:06:16,520 Dakle, oni su stavljajući ILI "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Poput glupog lozinkom imati. 998 01:06:20,880 --> 01:06:25,070 Sada ćemo samo ga zamijeniti u, a vi ćete primijetiti da se u tom SQL upita sada, 999 01:06:25,070 --> 01:06:29,090 ocjenjuje se da uvijek istina, jer ćete na umu da 1000 01:06:29,090 --> 01:06:32,240 možete SQL upit odabrali sve ove informacije 1001 01:06:32,240 --> 01:06:35,420 ili se samo može imati 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Tako to uvijek ide na procjenu da se istina. 1003 01:06:41,030 --> 01:06:46,610 To se ne događa da se stvarno radi, jer to znači da je haker može provaliti u vašem sustavu. 1004 01:06:46,610 --> 01:06:49,300 Rješenje za to je da morate koristiti PDO sustava, 1005 01:06:49,300 --> 01:06:51,360 što znači da ćete morati koristiti upitnike, 1006 01:06:51,360 --> 01:06:53,350 što je ono što ti dečki koji se koriste u pset 7, 1007 01:06:53,350 --> 01:06:57,620 kamo idete koristiti upitnik u mjestu gdje želite staviti nešto, 1008 01:06:57,620 --> 01:07:01,430 i onda ćeš imati zarez, a onda ćete imati nakon toga, 1009 01:07:01,430 --> 01:07:07,610 nakon niza, različitih varijabli koje želite zamijeniti u svoj upitnikom. 1010 01:07:07,610 --> 01:07:10,330 Tako ćete na umu da se ovdje sada imam ove crvene upitnike. 1011 01:07:10,330 --> 01:07:15,420 Onda sam stavio varijable nakon mog žice tako da znam da ih zamijeni na tom bi nakon toga. 1012 01:07:15,420 --> 01:07:18,470 To će osigurati da, ako je netko to čini, 1013 01:07:18,470 --> 01:07:24,050 i oni imaju ili 1 = 1 situaciju, koja će osigurati, 1014 01:07:24,050 --> 01:07:30,490 na stražnjem kraju, pobrinite se da to neće zapravo razbiti SQL upita. 1015 01:07:30,490 --> 01:07:33,660 Ok, tako da je uglavnom to, vihor PHP i SQL. 1016 01:07:33,660 --> 01:07:41,520 Najbolji od sreće za sve vas, a sada se Ore 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Ok svatko. Vrijeme je da se ide preko neke JavaScript 1018 01:07:44,270 --> 01:07:48,840 i neke druge stvari vrlo brzo, tako da ti ne drže do večeras. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Da. JavaScript je vrsta cool stvar, navodno. 1020 01:07:56,930 --> 01:07:59,090 Ono što stvarno trebate znati o JavaScript, to je nešto kao 1021 01:07:59,090 --> 01:08:03,810 na strani klijenta kraj ono što vaše web app će biti događaj. 1022 01:08:03,810 --> 01:08:08,280 Ima nekih stvari koje jednostavno ne žele da se brine o svim vrijeme na strani poslužitelja. 1023 01:08:08,280 --> 01:08:12,880 Svi mali interakcije, naglašavajući jednu stvar, što je nešto nestane. 1024 01:08:12,880 --> 01:08:15,340 Stvarno ne želim razgovarati na poslužitelj cijelo vrijeme za to. 1025 01:08:15,340 --> 01:08:18,069 I neke to nije ni moguće učiniti na strani poslužitelja. 1026 01:08:18,069 --> 01:08:21,899 To je razlog zašto nam je potrebno nešto poput JavaScripta. 1027 01:08:21,899 --> 01:08:24,359 Cool stvari o JavaScriptu: To je dinamički upisali. 1028 01:08:24,359 --> 01:08:27,149 To znači da je vaš program ne treba znati 1029 01:08:27,149 --> 01:08:30,970 ono, točno, su varijable kada ga napisati. 1030 01:08:30,970 --> 01:08:34,510 To će samo kakve to shvatiti kao što je trčanje. 1031 01:08:34,510 --> 01:08:37,520 Ostale stvari koje su cool o njemu: To je kovrčava brace jezik, 1032 01:08:37,520 --> 01:08:41,359 što znači sintaksa je slična C i PHP. 1033 01:08:41,359 --> 01:08:47,050 Vi ne morate učiniti mnogo prerađuje kad učite JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Ovdje imamo malo JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Zanimljiva stvar ovdje je da, ako na to gledate, 1036 01:08:52,560 --> 01:08:56,330 imamo malo JavaScript tamo u glavu oznaku. 1037 01:08:56,330 --> 01:08:59,479 Što je to u osnovi je samo uključiti JavaScript datoteku. 1038 01:08:59,479 --> 01:09:02,260 To je jedan način na koji možete uključiti JavaScript u vašem programu. 1039 01:09:02,260 --> 01:09:06,910 Onda drugi malo je zapravo neka inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 Vrlo sličan umetnutom stilu s CSS, 1041 01:09:10,790 --> 01:09:16,180 a vi ste samo pisanje neki kod vrlo brzo tamo. 1042 01:09:16,180 --> 01:09:18,120 JavaScript je polja. 1043 01:09:18,120 --> 01:09:20,850 Samo još jedan način da se zadrži podatke okolo, vrlo korisno. 1044 01:09:20,850 --> 01:09:25,180 Vrlo lijepo i jednostavno sintakse. 1045 01:09:25,180 --> 01:09:29,870 Možete koristiti uglate zagrade za pristup sve i držati sve zajedno. 1046 01:09:29,870 --> 01:09:35,020 Ništa previše složen. 1047 01:09:35,020 --> 01:09:38,630 Kul stvar o JavaScript i skriptiranje jezika u cjelini 1048 01:09:38,630 --> 01:09:40,920 je da ne morate brinuti o veličinama polja. 1049 01:09:40,920 --> 01:09:43,880 Vi samo možete koristiti array.length i pratiti njega, 1050 01:09:43,880 --> 01:09:46,960 i niz može rasti ili se smanjiti kao što je potrebno da bi. 1051 01:09:46,960 --> 01:09:49,279 Tako da uopće ne morate brinuti o bilo kojoj vrsti, 1052 01:09:49,279 --> 01:09:57,050 Oh ne, moram izdvojiti više stvari, ili bilo što slično. 1053 01:09:57,050 --> 01:10:00,090 >> Super stvar ovdje je da JavaScript ima nešto što se zove predmeti. 1054 01:10:00,090 --> 01:10:04,800 To je objektno-orijentirani jezik, tako da ono što je je, u biti, 1055 01:10:04,800 --> 01:10:10,100 način za vas da se skupina podataka zajedno, nešto slično kao i rekonstruirati 1056 01:10:10,100 --> 01:10:17,280 , ali ga možete pristupiti kao struct ili u asocijativni niz sintakse. 1057 01:10:17,280 --> 01:10:22,520 To je prilično jednostavan i što možete učiniti s tim je skupina podataka zajedno 1058 01:10:22,520 --> 01:10:24,810 ako imate hrpu podataka koje je u vezi. 1059 01:10:24,810 --> 01:10:26,850 Budući da je sve ono što je potrebno kako bi opisao automobil, 1060 01:10:26,850 --> 01:10:29,050 ne morate ga imati u hrpa različitih mjesta. 1061 01:10:29,050 --> 01:10:35,300 Vi samo možete ga staviti u 1 objekta u JavaScriptu. 1062 01:10:35,300 --> 01:10:39,090 Kao što vjerojatno znate, Ponavljanje je jedan od onih zamornih zadataka. 1063 01:10:39,090 --> 01:10:43,810 Vi samo to učiniti preko iznova. Morate razgovarati svakog objekta u automobilu, 1064 01:10:43,810 --> 01:10:47,340 ili morate proći kroz svaku stavku na popisu ili nešto slično. 1065 01:10:47,340 --> 01:10:51,770 Dakle JavaScript mora, slična PHP, a foreach sintakse. 1066 01:10:51,770 --> 01:10:54,590 U ovom slučaju, to je za u petlji. 1067 01:10:54,590 --> 01:10:57,300 Želite koristiti to samo na objekte. 1068 01:10:57,300 --> 01:11:01,030 Postoje neki problemi koji se javljaju ako koristite ovaj na poljima. 1069 01:11:01,030 --> 01:11:03,750 Općenito je jedan od onih stvari, ipak, da je vrlo korisno, 1070 01:11:03,750 --> 01:11:06,590 zato što eliminirati puno pretek 1071 01:11:06,590 --> 01:11:10,270 jer ne moram podići sve što je u vašoj objekt po sebi. 1072 01:11:10,270 --> 01:11:12,300 Ne morate se sjetiti svih ključnih imena. 1073 01:11:12,300 --> 01:11:18,270 Vi samo vrsta ih dobiti natrag u ovoj sintaksi. 1074 01:11:18,270 --> 01:11:21,500 U to, uz Jer, samo želite da zapamtite 1075 01:11:21,500 --> 01:11:27,180 da ste dobivanje natrag sve tipke, na vrlo sličan način hash tablicu. 1076 01:11:27,180 --> 01:11:30,880 Ako se sjećate toga, kad bi stavili u nizu da bi mogao dobiti nešto 1077 01:11:30,880 --> 01:11:33,840 da bi pridruženu vrijednost s njom. 1078 01:11:33,840 --> 01:11:36,360 Ono što možete učiniti s ovim je što mogu reći, sve u redu, 1079 01:11:36,360 --> 01:11:42,120 Stavio sam u autu, a nazvao sam ga Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Tako možete staviti u string Ferrari ponovno kasnije, a možete dobiti to. 1081 01:11:45,290 --> 01:11:50,000 I to je moguće učiniti u petlji, uz Jer u petlji. 1082 01:11:50,000 --> 01:11:53,320 Dakle, samo više o objektima. Ključna stvar od toga trebate imati na umu 1083 01:11:53,320 --> 01:12:00,340 je da možete koristiti objekt indetifikaciju poput sintakse kad god želite s tim, 1084 01:12:00,340 --> 01:12:04,590 osim ako je ono što vaše će koristiti kao niz nije valjana ime varijable. 1085 01:12:04,590 --> 01:12:07,650 Dakle, ako pogledate da je tamo, imamo ključ s razmacima. 1086 01:12:07,650 --> 01:12:12,500 Pa, ako ste bili staviti object.key, prostor, prostor, prostor, 1087 01:12:12,500 --> 01:12:15,320 da jednostavno ne bi imalo smisla sintaktički. 1088 01:12:15,320 --> 01:12:22,730 Tako da samo može učiniti da se s ovom vrstom nosača sintakse. 1089 01:12:22,730 --> 01:12:26,520 >> Također, JavaScript vrlo opseg kap u PHP-u. 1090 01:12:26,520 --> 01:12:29,050 Imate dva načina rješavanja opseg. 1091 01:12:29,050 --> 01:12:31,960 Ne možete imati var ispred varijable, 1092 01:12:31,960 --> 01:12:34,060 a to samo znači da je to globalno. 1093 01:12:34,060 --> 01:12:37,050 Možete ga vidjeti s bilo kojeg mjesta. Čak i ako su ovo staviti u IF, 1094 01:12:37,050 --> 01:12:42,430 bilo gdje drugdje u kodu nakon te točke mogli ste vidjeti da je varijabla. 1095 01:12:42,430 --> 01:12:46,730 Još jedna stvar, iako je s var, to je ograničena na ono što je funkcija da ste u. 1096 01:12:46,730 --> 01:12:48,870 Ako niste u funkciji, dobro, to je globalni. 1097 01:12:48,870 --> 01:12:53,900 No, ako su u funkciji je samo vidljivi u roku tu funkciju. 1098 01:12:53,900 --> 01:12:56,420 Nemam primjer, ali, da. To je jedna od onih stvari u kojima 1099 01:12:56,420 --> 01:12:59,900 možete upravljati ono varijable želite biti globalna, 1100 01:12:59,900 --> 01:13:03,810 ono varijable želite biti lokalni, ali vi trebate biti oprezni o tome, 1101 01:13:03,810 --> 01:13:06,890 jer nemate vrstu finog zrna kontrole što učiniti u C, 1102 01:13:06,890 --> 01:13:15,820 gdje ako se nešto proglašen u for petlji, to će ostati u da je za petlju. 1103 01:13:15,820 --> 01:13:18,790 Što mi zapravo stalo pomoću JavaScript za manipulira web stranice, zar ne? 1104 01:13:18,790 --> 01:13:21,800 Mislim, to je razlog zašto smo to. 1105 01:13:21,800 --> 01:13:23,840 >> Da biste to postigli, koristimo nešto što se zove DOM. 1106 01:13:23,840 --> 01:13:25,850 Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Uglavnom, ono što se je to traje sve svoje HTML 1108 01:13:29,430 --> 01:13:34,110 i modele ga u hrpu objekata koji su uklopljeni u drugome. 1109 01:13:34,110 --> 01:13:37,080 Možete početi s nečim kao što je ovaj. 1110 01:13:37,080 --> 01:13:44,770 Imate, na desnoj strani za mene, hrpa koda vani to je vrsta - 1111 01:13:44,770 --> 01:13:46,640 Vi mislite da bi bilo vrlo teško manipulirati, 1112 01:13:46,640 --> 01:13:48,700 zato što bi se raščlanjivanja kroz hrpa teksta 1113 01:13:48,700 --> 01:13:52,080 i da se komad osim stvari. A što ako to nije pravilno formatiran? 1114 01:13:52,080 --> 01:13:54,880 Loše stvari će se dogoditi. 1115 01:13:54,880 --> 01:13:58,140 Dakle JavaScript brine to za vas, a vi dobiti lijep strukturu podataka, 1116 01:13:58,140 --> 01:14:01,390 poput one na moje lijeve strane, gdje je samo dokument, 1117 01:14:01,390 --> 01:14:03,530 i iznutra da imate nešto što se zove HTML, 1118 01:14:03,530 --> 01:14:05,600 i iznutra da imate glavu i tijelo, 1119 01:14:05,600 --> 01:14:08,420 i unutar tog naslova imate titulu, i tako dalje, i tako dalje, i tako dalje. 1120 01:14:08,420 --> 01:14:11,810 To pojednostavljuje manipulira web stranicu, tako da je to samo, 1121 01:14:11,810 --> 01:14:14,190 oh, ja samo želim razgovarati s ovim predmetom. 1122 01:14:14,190 --> 01:14:21,340 Na neki način vrlo sličan način na koji će razgovarati s drugim objektom ste napravili sami. 1123 01:14:21,340 --> 01:14:25,980 Kao što sam rekao, sve DOM je u objekt dokumenata. 1124 01:14:25,980 --> 01:14:29,290 Ili je to samo jedno mjesto, a onda možete ići u njemu pronaći stvari, 1125 01:14:29,290 --> 01:14:33,880 i možete to učiniti - to je stari stil to radi, tamo gore, 1126 01:14:33,880 --> 01:14:38,130 gdje radite document.getElementById, a zatim ime, 1127 01:14:38,130 --> 01:14:42,420 i kao što vjerojatno možete reći, to se jako nezgrapan nakon nekog vremena. 1128 01:14:42,420 --> 01:14:44,480 Dakle, vjerojatno ne želite učiniti. Zato imamo 1129 01:14:44,480 --> 01:14:48,760 Sljedeće čega ćemo govoriti o nakon toga. 1130 01:14:48,760 --> 01:14:52,510 Ključna stvar je u tome da, sve u redu, imate sve te elemente, zar ne? 1131 01:14:52,510 --> 01:14:56,400 Dakle, možda ja mogu promijeniti boju nešto kad se stranica učita. 1132 01:14:56,400 --> 01:14:58,380 Pa što? Što ako moja korisnik klikne nešto? 1133 01:14:58,380 --> 01:15:00,540 Želim to napraviti nešto zanimljivo kada kliknete nešto. 1134 01:15:00,540 --> 01:15:02,600 Zato imamo događaje. 1135 01:15:02,600 --> 01:15:05,330 Možete, zapravo, pronaći bilo koji element u vašem DOM, 1136 01:15:05,330 --> 01:15:08,560 i onda reći, hej. Kada se to učitava ili netko klikne, 1137 01:15:08,560 --> 01:15:11,410 ili kad su miš preko njega, učiniti nešto s njom. 1138 01:15:11,410 --> 01:15:15,330 I ono što ste je, imate funkcije koje obrađuju to za vas. 1139 01:15:15,330 --> 01:15:17,980 Ove funkcije su manipulatori događaj. 1140 01:15:17,980 --> 01:15:20,440 Što tek kuća - to je samo fancy način govoreći, 1141 01:15:20,440 --> 01:15:23,500 ova funkcija je izvršena tek kada se taj događaj dogodi. 1142 01:15:23,500 --> 01:15:28,070 Tako da obrađuje događaj koji se događa. 1143 01:15:28,070 --> 01:15:30,810 To je način na koji će nokautirati događaj rukovatelj. 1144 01:15:30,810 --> 01:15:34,750 Imam neku tipku, a kad kliknete na njega, što eksplodira. 1145 01:15:34,750 --> 01:15:40,560 Dakle, nemojte kliknuti na gumb. 1146 01:15:40,560 --> 01:15:42,910 To je jedan od načina da se približava, zar ne? 1147 01:15:42,910 --> 01:15:46,430 Imate gumb oznaku, a na klik imate niz koji kaže, 1148 01:15:46,430 --> 01:15:50,460 Oh, usput, radim ovo eksplodira stvar za mene. 1149 01:15:50,460 --> 01:15:53,990 Inače, to je samo kao redoviti gumb koji ste upravo napravili. 1150 01:15:53,990 --> 01:15:56,550 Također možete to učiniti na drugi način, 1151 01:15:56,550 --> 01:16:02,770 hvatajući DOM element, ali ćemo spasiti da nakon govorimo o jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: To je knjižnica koja je cross-preglednik. 1153 01:16:07,580 --> 01:16:09,580 Možete ga koristiti u prilično mnogo bilo što. 1154 01:16:09,580 --> 01:16:12,090 I to samo vam daje puno alata za rad s. 1155 01:16:12,090 --> 01:16:15,850 Zbog JavaScript, dok je moćna, nema sve potrebne alate 1156 01:16:15,850 --> 01:16:20,550 iz kutije da se stvarno borila web aplikaciju možda želite učiniti. 1157 01:16:20,550 --> 01:16:24,650 Dakle, to pojednostavljuje puno stvari, daje vam puno funkcija 1158 01:16:24,650 --> 01:16:28,760 iz kutije da bi se normalno morati sami pisati, iznova i iznova i iznova. 1159 01:16:28,760 --> 01:16:31,600 I samo čini stvari vrlo jednostavna. 1160 01:16:31,600 --> 01:16:35,780 Također imate selektora, koji vam uzmu sve one elemente 1161 01:16:35,780 --> 01:16:42,800 iz svog DOM mnogo više jednostavno, umjesto da se koriste ove vrlo duge funkcijske pozive. 1162 01:16:42,800 --> 01:16:46,630 Više o tim selektora. Imate, tamo ste, recimo 1163 01:16:46,630 --> 01:16:49,800 Želim da se element s ID "stijena". 1164 01:16:49,800 --> 01:16:56,450 Pa, u jQuery, to je samo $, a zatim niz koji ima kilograma, a zatim "stijena". 1165 01:16:56,450 --> 01:17:01,960 To je vrlo jednostavno i puno brže nego tradicionalne JavaScript načinu rješavanja ovog problema. 1166 01:17:01,960 --> 01:17:06,120 I imate slične stvari za nastavu i tipovi elemenata. 1167 01:17:06,120 --> 01:17:08,140 jQuery je - jedan od cool značajke se možete nekako stisnuti 1168 01:17:08,140 --> 01:17:14,350 Spusti svoje upite na vašem DOM vrlo, vrlo brzo. 1169 01:17:14,350 --> 01:17:18,980 Sada smo se vratili na rukovanje događaja, a to je način na koji će nositi jedan događaj u jQuery. 1170 01:17:18,980 --> 01:17:23,090 Dakle, ono što ćemo ovdje govorimo, u redu. Imam oznaku skriptu, zar ne? 1171 01:17:23,090 --> 01:17:25,400 Dakle, imam ovu inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Ono što ćemo učiniti je da ćemo reći, u redu. 1173 01:17:27,750 --> 01:17:30,860 Kada je dokument spreman, što znači da je dokument je bio opterećen, 1174 01:17:30,860 --> 01:17:34,660 ćemo ići na tu funkciju, a mi ćemo reći, sve u redu, 1175 01:17:34,660 --> 01:17:37,060 ova funkcija zapravo radi nešto drugo. 1176 01:17:37,060 --> 01:17:42,320 U osnovi je rekao, u redu, daj mi element s ID "myid." 1177 01:17:42,320 --> 01:17:47,960 A onda bi to funkciju rukovatelj, koji izvodi kada ga kliknete. 1178 01:17:47,960 --> 01:17:49,820 Uglavnom što to čini se, ona kaže, sve u redu. 1179 01:17:49,820 --> 01:17:52,630 Stranica se učitava, tako da ću u, pronaći taj element, 1180 01:17:52,630 --> 01:17:56,420 daj ga ovaj događaj rukovatelj, i to u osnovi postavlja svoju stranicu za vas. 1181 01:17:56,420 --> 01:18:00,520 A to je, kako se želim razmišljati o rukovanju događaja. 1182 01:18:00,520 --> 01:18:06,310 Vi samo želim razmišljati o tome, sve u redu, kada se nešto dogodi, što ne želim da se dogodi? 1183 01:18:06,310 --> 01:18:10,520 Ne želim razmišljati o tome, ok, moram se uvjeriti da je to stvar razgovore na ovu stvar, 1184 01:18:10,520 --> 01:18:14,660 ova stvar bla bla bla, jer se samo želite razgovarati stvar u smislu događaja. 1185 01:18:14,660 --> 01:18:17,650 Kada se to dogodi, to će se dogoditi. Kada se to dogodi, to će se dogoditi. 1186 01:18:17,650 --> 01:18:20,240 A ako se stvari pokreću i druge stvari, to je super. 1187 01:18:20,240 --> 01:18:22,150 Ali vi ne želite probati i učiniti komplicirano kod 1188 01:18:22,150 --> 01:18:24,130 gdje ste je izazvalo više stvari u isto vrijeme, 1189 01:18:24,130 --> 01:18:28,860 jer ste samo će dati sebi glavobolju. 1190 01:18:28,860 --> 01:18:32,340 >> Redu. Sada možemo dobiti naša stranica se nositi s događajima, 1191 01:18:32,340 --> 01:18:35,640 ali recimo moja korisnik pritisne gumb. 1192 01:18:35,640 --> 01:18:38,040 Što ako želim poslati taj zahtjev na poslužitelj, 1193 01:18:38,040 --> 01:18:41,100 ali ja ne želim da se ponovno učitati stranicu, jer potrebe za ponovno učitavanje novu stranicu 1194 01:18:41,100 --> 01:18:44,390 svaki put dobiva vrsta zamorno, i zašto mi treba 1195 01:18:44,390 --> 01:18:47,430 ponovno srušiti zaglavlje, i opet footer, 1196 01:18:47,430 --> 01:18:49,670 i svi elementi na stranici opet 1197 01:18:49,670 --> 01:18:53,180 samo osvježiti pozdrav ili vremena? 1198 01:18:53,180 --> 01:18:55,290 Dakle, to je razlog zašto smo nešto poput Ajaxa. 1199 01:18:55,290 --> 01:18:59,150 Ono što možemo učiniti ovdje s Ajax je, možemo reći, sve u redu, 1200 01:18:59,150 --> 01:19:01,290 Želim poslati neke podatke na server, 1201 01:19:01,290 --> 01:19:04,010 i želim dobiti odgovor natrag, tako da mogu ažurirati svoju stranicu, 1202 01:19:04,010 --> 01:19:12,120 ili možda samo napraviti neki algoritamski izračun koji ne mora pokazati ništa za korisnika. 1203 01:19:12,120 --> 01:19:15,500 Što trebate učiniti? Pa, trebate URL trebate razgovarati. 1204 01:19:15,500 --> 01:19:18,650 Vaš poslužitelj ne može samo magično sluša iz ničega. 1205 01:19:18,650 --> 01:19:21,960 Morate imati određeno mjesto šaljete ove podatke. 1206 01:19:21,960 --> 01:19:26,240 I također je potrebno neke podatke poslati, ili možda je to dataless upita. 1207 01:19:26,240 --> 01:19:31,380 Vi samo želite ping natrag poslužitelju i reći, hej, ja sam živ, ili nešto slično. 1208 01:19:31,380 --> 01:19:35,150 I onda želite funkciju koja u osnovi obrađuje s uspjehom. 1209 01:19:35,150 --> 01:19:38,250 Recimo da se vratim neke podatke s poslužitelja, 1210 01:19:38,250 --> 01:19:42,960 i želite promijeniti korisnikovu naslov na njihovoj stranici. 1211 01:19:42,960 --> 01:19:44,930 Tako da bi dobili informacije natrag, 1212 01:19:44,930 --> 01:19:48,860 i ti bi gurnuti da se na zaslonu. 1213 01:19:48,860 --> 01:19:51,170 Ono što se događa je, kada je stranica je spremna, 1214 01:19:51,170 --> 01:19:56,500 stvorite na klik funkciju za ovaj gumb zove pozdravljač. 1215 01:19:56,500 --> 01:19:58,810 Što to onda čini se, kad se guraju da gumb, 1216 01:19:58,810 --> 01:20:03,700 li razgovarati s greetings.php, napravite POST zahtjeva, 1217 01:20:03,700 --> 01:20:07,290 i ti kažeš, hej, daj mi nešto iz svoje stranice. 1218 01:20:07,290 --> 01:20:09,890 Mi stvarno ne treba opisati to, ali greetings.php, 1219 01:20:09,890 --> 01:20:12,480 recimo samo, vraća "Pozdrav svijetu". 1220 01:20:12,480 --> 01:20:15,650 Tako smo se vratiti ovu "Pozdrav svijetu", te o uspjehu toga, 1221 01:20:15,650 --> 01:20:20,730 pretpostavljajući ništa ne ide po zlu, onda mi samo ići na ovu ciljanu mjestu 1222 01:20:20,730 --> 01:20:25,720 koje smo naveli, a mi samo držati odgovor tamo. 1223 01:20:25,720 --> 01:20:31,560 I to je vrlo jednostavan način za postavljanje Ajax upita. 1224 01:20:31,560 --> 01:20:34,340 >> Vrlo brzo, Rob vrsta spomenuo to već, 1225 01:20:34,340 --> 01:20:37,170 stvari mogu poći po zlu, loše stvari mogu dogoditi, 1226 01:20:37,170 --> 01:20:42,660 pa želite da se upoznate s tim kodovima HTTP odgovor. 1227 01:20:42,660 --> 01:20:46,030 Koje su to samo, kao što je, 200, sve je prošlo u redu. 1228 01:20:46,030 --> 01:20:48,670 Nešto drugo, loše stvari se dogodilo. 1229 01:20:48,670 --> 01:20:50,790 To je uglavnom stvar koju želite zapamtiti. 1230 01:20:50,790 --> 01:20:53,440 No, to je lijepo znati sve to. 1231 01:20:53,440 --> 01:20:55,970 I na kraju, nakon što smo prošli kroz sve to, 1232 01:20:55,970 --> 01:20:58,680 moramo vrlo brzo govorimo o dizajnu, 1233 01:20:58,680 --> 01:21:00,620 i onda možemo dopustiti da svi napuste. 1234 01:21:00,620 --> 01:21:03,410 Dizajn. Stvari koje želite zapamtiti. 1235 01:21:03,410 --> 01:21:06,950 Zapitajte se ova pitanja: Tko će biti koristeći ovaj? 1236 01:21:06,950 --> 01:21:09,580 Ono što će im biti koristeći ga za? Što moji korisnici stalo? 1237 01:21:09,580 --> 01:21:11,750 Ono što ne im je stalo? 1238 01:21:11,750 --> 01:21:14,500 Vi jednostavno ne žele napraviti aplikaciju i neka ga samo rasti 1239 01:21:14,500 --> 01:21:18,270 i postati ovaj gigant, sve trajati stvar koju ne mogu ni završiti. 1240 01:21:18,270 --> 01:21:23,900 Želite imati diskretne ciljeve i planove i stvari koje želite baviti. 1241 01:21:23,900 --> 01:21:29,000 Učinite to bez napora. Sve to, kaže, u osnovi, 1242 01:21:29,000 --> 01:21:34,950 olakšavaju korisniku da ga koristiti, ne bi ga div blob teksta kao što je ovaj tobogan je, zapravo. 1243 01:21:34,950 --> 01:21:38,020 Vi samo želim da to bude nešto gdje je vrlo lako za nekoga da ide u 1244 01:21:38,020 --> 01:21:40,800 i učiniti ono što želite učiniti. 1245 01:21:40,800 --> 01:21:42,920 Vi ne želite da ih moraju kretati 5 stranica 1246 01:21:42,920 --> 01:21:45,460 doći do svoje primarne funkcije vaše stranice. 1247 01:21:45,460 --> 01:21:49,290 Ako Google je imao 5 stranica prije nego što bi mogao tražiti nešto, 1248 01:21:49,290 --> 01:21:53,080 nitko ne bi ga koristiti. 1249 01:21:53,080 --> 01:21:55,890 I na kraju, papira prototip, fokus grupa. 1250 01:21:55,890 --> 01:21:59,220 Imaju dobar dizajn i postupaka testiranja. 1251 01:21:59,220 --> 01:22:00,730 Samo zato što mislim da radi za vas, 1252 01:22:00,730 --> 01:22:04,860 ne znači da bilo tko drugi misli da to radi. 1253 01:22:04,860 --> 01:22:14,490 Ali, da, to je to. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]