1 00:00:00,000 --> 00:00:02,270 >> [Opis: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard University] 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] Vabljeni vsi. To je pregled za kviz 1. 5 00:00:11,610 --> 00:00:15,040 Tako kot odpoved, to je - mislim, da bomo poskušali kritje 6 00:00:15,040 --> 00:00:17,770 toliko materiala, kot je mogoče, vendar to ne pomeni, da 7 00:00:17,770 --> 00:00:20,780 bomo zajemajo vse stvari, ki se lahko v kvizu 1. 8 00:00:20,780 --> 00:00:25,270 Torej, se prepričajte, da ste tudi, da pogled na predavanju, profili, vse, kar lahko. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 se bo v sredo, naslednjo sredo. 10 00:00:28,240 --> 00:00:33,800 Torej, se prepričajte, da preuči. To se dogaja, da je, precej, tako kot prve kviz 11 00:00:33,800 --> 00:00:36,390 v zvezi s svojo obliko, vendar pa je verjetno, da bo veliko težje. 12 00:00:36,390 --> 00:00:39,600 Vsaj lani, ko sem 50, sem mislil, da je veliko težje. 13 00:00:39,600 --> 00:00:42,410 Torej študij veliko. 14 00:00:42,410 --> 00:00:45,190 >> Jaz grem za kritje podatkovne strukture in Huffman kodiranja. 15 00:00:45,190 --> 00:00:47,910 To je nekaj, kar veliko ljudi, ki mislijo, da je zapletena, 16 00:00:47,910 --> 00:00:51,930 ampak bom poskusil, da bi bilo tako enostavno, kot je mogoče. 17 00:00:51,930 --> 00:00:56,330 Najprej, kaj želimo vi vedeli za kviz 1 je 18 00:00:56,330 --> 00:01:00,970 razumevanje konceptualne opisi vsakega od podatkovnih struktur, da bom predstavil. 19 00:01:00,970 --> 00:01:03,960 To pomeni, da vam ni treba dejansko 20 00:01:03,960 --> 00:01:07,020 izvajati razpršene tabele v vašem kvizu 1. 21 00:01:07,020 --> 00:01:10,250 Ne želimo si, da izvajajo celoten razpršene tabele, morda bomo poskušali 22 00:01:10,250 --> 00:01:13,090 da se boste izvajati nekatere funkcije, 23 00:01:13,090 --> 00:01:16,940 najpogostejše operacije, vendar pa ne bomo, da se boste izvajati vse. 24 00:01:16,940 --> 00:01:21,010 Zato je pomembno, da razumete koncept za vsako strukturo podatkov 25 00:01:21,010 --> 00:01:23,510 in tudi, da ste sposobni kodo v C, 26 00:01:23,510 --> 00:01:27,880 le najbolj pogoste operacije, ki jih imajo za vsako strukturo podatkov. 27 00:01:27,880 --> 00:01:30,090 In prav tako lahko pregledali napotke in struktur struct, 28 00:01:30,090 --> 00:01:33,470 ker je videti veliko teh podatkovnih struktur. 29 00:01:33,470 --> 00:01:37,380 >> Prvič, povezani seznam. Povezani seznami so pravzaprav zelo podobna nizi 30 00:01:37,380 --> 00:01:39,930 vendar razlika med povezani seznam in niz, 31 00:01:39,930 --> 00:01:45,160 najprej, je, da ima povezani seznam zelo fleksibilen velikosti, 32 00:01:45,160 --> 00:01:50,060 V nizi, medtem ko boste morali bodisi izbrati zelo veliko za matrike, 33 00:01:50,060 --> 00:01:53,710 Toliko, da veš, da boš lahko shranite vse svoje podatke v tem polju, 34 00:01:53,710 --> 00:01:59,370 ali pa boste morali uporabiti malloc da imajo prilagodljivo dolžino niza. 35 00:01:59,370 --> 00:02:03,680 V povezanih seznamih to je zelo enostavno, da samo dobili več elementov, 36 00:02:03,680 --> 00:02:07,210 dal več elementov v povezanem seznamu ali odstranite elemente. 37 00:02:07,210 --> 00:02:09,370 In dejansko, če ne želite, povezani seznam je treba sortirati, 38 00:02:09,370 --> 00:02:13,950 lahko poiščete in odstranite elemente v enakem času, 39 00:02:13,950 --> 00:02:16,800 tako O (1) časa, tako da je zelo priročno. 40 00:02:16,800 --> 00:02:20,660 Moraš biti previden, da se vedno spomnim na malloc in brez vozlišča, 41 00:02:20,660 --> 00:02:25,510 samo zato, ker če ne, boš imel spomin razpoka. 42 00:02:25,510 --> 00:02:31,480 Tako povezani seznami - opredelitev vozlišče je tako kot tisto, kar imamo tukaj. 43 00:02:31,480 --> 00:02:35,110 Sem dal int n, vendar pa lahko shranite vse podatke, ki jih želite. 44 00:02:35,110 --> 00:02:37,280 Torej, če želite shraniti niz, v redu je. 45 00:02:37,280 --> 00:02:41,690 Če želite shraniti zgradimo, je že v redu, dvojni, kar hočeš. 46 00:02:41,690 --> 00:02:44,630 Pravkar sem dal int n za primere tukaj. 47 00:02:44,630 --> 00:02:46,800 In ti so kazalec na naslednje vozlišče. 48 00:02:46,800 --> 00:02:51,940 Torej, v bistvu, povezani seznam ima nekaj podatkov, nato pa kaže na naslednje vozlišče. 49 00:02:51,940 --> 00:02:56,710 Če je zadnji element v povezanem seznamu, se dogaja, da kaže na null. 50 00:02:56,710 --> 00:02:59,060 Torej je to primer povezani seznam. 51 00:02:59,250 --> 00:03:05,960 >> Ok, zdaj pa poglejmo, kaj moramo storiti, če želim, da vstavite element v povezanem seznamu. 52 00:03:05,960 --> 00:03:08,810 Prvič, funkcija vložek bo tipa praznine 53 00:03:08,810 --> 00:03:11,350 zato, ker ne želim, da se vrnete ničesar. 54 00:03:11,350 --> 00:03:14,200 In jaz bom vzeti int kot argument, 55 00:03:14,200 --> 00:03:17,090 zato, ker hočem, da veš, kaj hočem vstaviti. 56 00:03:17,090 --> 00:03:21,840 Torej, kaj je prva stvar, ki jo je treba storiti? No, naj malloc na newnode, 57 00:03:21,840 --> 00:03:24,240 tako, da je prva črta. 58 00:03:24,240 --> 00:03:27,580 Jaz sem samo ustvarja novo vozlišče, da v povezanem seznamu. 59 00:03:27,580 --> 00:03:32,360 Torej, kaj lahko storim? No, vemo, da v naših izvedb povezanih seznamov 60 00:03:32,360 --> 00:03:38,180 v razredu, smo vedno dal glavo kot globalno spremenljivko. 61 00:03:38,180 --> 00:03:41,800 Torej, kaj lahko storimo, je spremeniti glavo. 62 00:03:41,800 --> 00:03:44,300 Lahko bo to novo vozlišče bo novi vodja, 63 00:03:44,300 --> 00:03:46,670 in to se dogaja, da kaže na prejšnjo glavo. 64 00:03:46,670 --> 00:03:50,390 Kako lahko to storimo? Prva stvar, moram narediti 65 00:03:50,390 --> 00:03:54,770 je spremeniti "n" v novo vozlišče vrednosti, 66 00:03:54,770 --> 00:03:57,530 ki je bil sprejet na funkcijo. 67 00:03:57,530 --> 00:04:01,050 Potem newnode je zraven se bo glava. 68 00:04:01,050 --> 00:04:05,800 Glava se bo newnode. Torej, to je zelo preprosta. 69 00:04:05,800 --> 00:04:10,090 Pri brisanju vozlišča, lahko to storite tako - 70 00:04:10,090 --> 00:04:14,790 Eden od načinov, da bi lahko to je, torej 71 00:04:14,790 --> 00:04:18,160 ok, če sem hotel izbrisati, na primer, 3, 72 00:04:18,160 --> 00:04:24,850 kaj lahko storim, je le točka prejšnje vozlišče 73 00:04:24,850 --> 00:04:27,580 na naslednje vozlišče od 3. 74 00:04:27,580 --> 00:04:29,400 Torej, jaz bi samo nekaj takega. 75 00:04:29,400 --> 00:04:33,400 Toda kaj je problem s tem, da je? 76 00:04:33,400 --> 00:04:37,400 Imam pomnilnika, tako da nimam dostopa do številke 3. anymore. 77 00:04:37,400 --> 00:04:42,480 Problem pri tem je, da ne bom, da se lahko osvobodi, da vozlišče. 78 00:04:42,480 --> 00:04:45,360 Jaz bom moral pomnilnika in (nerazumljivo), se dogaja, da me sovraži. 79 00:04:45,360 --> 00:04:49,370 Torej, namesto da bi delal, da bi moral verjetno morali začasno kazalec. 80 00:04:49,370 --> 00:04:53,210 Zato sem dal temp. To se dogaja, da kaže na vozlišče, ki ga želim izbrisati. 81 00:04:53,210 --> 00:04:58,170 In potem sem lahko premaknete prejšnje vozlišča točke na naslednje vozlišče 82 00:04:58,170 --> 00:05:00,390 vozlišča, ki ga želim izbrisati. 83 00:05:00,390 --> 00:05:02,730 In končno sem lahko brezplačno kazalec. 84 00:05:02,730 --> 00:05:07,480 Ali moram sprostiti kazalec, da sem ustvaril prav tam? 85 00:05:07,480 --> 00:05:09,560 Jaz ne bi bilo treba, samo zato, ker - 86 00:05:09,560 --> 00:05:13,430 Razlika je, da je bila ta vozlišča ustvarjena s pomočjo malloc, 87 00:05:13,430 --> 00:05:17,280 tako da je v kup, medtem ko je bil ta le deklariran kot stikalo NULL na kupu. 88 00:05:17,280 --> 00:05:20,000 Tako da mi ni treba osvoboditi. 89 00:05:20,000 --> 00:05:22,030 >> Ok. Torej, zdaj kaj je govoril o kupih. 90 00:05:22,030 --> 00:05:24,680 Stacks so precej enostavna. 91 00:05:24,680 --> 00:05:29,540 Naredili smo skladi in vrste v razredu samo z nizi, 92 00:05:29,540 --> 00:05:32,820 vendar bi morali biti seznanjeni - samo zavedati, 93 00:05:32,820 --> 00:05:40,740 da lahko naredite tudi nizov v čakalnih vrst Uporaba povezanih seznamov, kot dobro. 94 00:05:40,740 --> 00:05:44,460 Torej, če imate niz, kaj bi bilo kup? 95 00:05:44,460 --> 00:05:46,810 Stack, prvi, bodo morali imeti velikosti. 96 00:05:46,810 --> 00:05:49,950 Imate za shranjevanje, kar je velikost dimnika, ki jo imate sedaj. 97 00:05:49,950 --> 00:05:52,980 In tudi vi bi imeli niz, v tem primeru številkah 98 00:05:52,980 --> 00:05:55,120 če pa želite, lahko je matrika 99 00:05:55,120 --> 00:06:00,380 nizov, niz struct, vse, kar želite shraniti. 100 00:06:00,380 --> 00:06:03,240 O dimnika: razlika med dimnik in povezani seznam 101 00:06:03,240 --> 00:06:08,590 je, da je v kupu imate dostop le do zadnjega elementa, ki je bila dana v dimnika. 102 00:06:08,590 --> 00:06:11,770 To se imenuje zadnji noter, prvi ven. 103 00:06:11,770 --> 00:06:15,090 Tako kot imate skladovnice pladnjev, 104 00:06:15,090 --> 00:06:17,670 Če čaka na pladenj na vrhu kupa, 105 00:06:17,670 --> 00:06:22,670 boste morali najprej odstraniti ta pladenj, da imajo dostop do drugih pladnjev. 106 00:06:22,670 --> 00:06:26,310 To je ista stvar s skladovnice. 107 00:06:26,310 --> 00:06:31,220 Torej, če želim, da, na primer, dodati element na kupu, kaj naj storim? 108 00:06:31,220 --> 00:06:34,070 Temu se reče pritisk, in to je precej enostavna. 109 00:06:34,070 --> 00:06:37,130 Prva stvar, kar morate storiti je, da preveri, če velikost dimnika 110 00:06:37,130 --> 00:06:40,150 ni večje ali enako zmogljivostjo dimnika. 111 00:06:40,150 --> 00:06:45,810 Ker če ste že na polno zmogljivostjo, ne morete kaj dodali. 112 00:06:45,810 --> 00:06:51,140 In potem, če ne, boste morali dodati element dimnika. 113 00:06:51,140 --> 00:06:54,530 In končno, prirastek velikosti. Tako da je precej enostavna. 114 00:06:54,530 --> 00:06:57,140 Torej sem dodati številko 2. 115 00:06:57,140 --> 00:07:00,350 In če želim, da pop, kar pomeni, da želim, da se odstranijo 116 00:07:00,350 --> 00:07:03,870 zadnji element, ki je bil dodan in vrne vrednostjo elementa, 117 00:07:03,870 --> 00:07:09,180 Prva stvar, ki sem moral preveriti, je, da je sveženj ni prazna. 118 00:07:09,180 --> 00:07:11,510 Ker če je prazna, ne morem vrniti ničesar. 119 00:07:11,510 --> 00:07:14,820 V tem primeru Vračam -1. 120 00:07:14,820 --> 00:07:18,960 V nasprotnem primeru bom pojemanje velikosti spec, 121 00:07:18,960 --> 00:07:22,510 in vrnitev številk (s.size). 122 00:07:22,510 --> 00:07:27,230 Zakaj sem pojemanje velikosti in se nato vrne s.size? 123 00:07:27,230 --> 00:07:30,930 To je zato, ker v tem primeru, spec ima velikost 4, 124 00:07:30,930 --> 00:07:33,810 in želim, da se vrnete četrti element, kajne? 125 00:07:33,810 --> 00:07:36,030 Toda kaj je indeks četrti element? Tri. 126 00:07:36,030 --> 00:07:44,510 Ker mi velikost - se bo 3, lahko sem vrnil s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 ker je 3. Torej to je samo kazalo. 128 00:07:48,410 --> 00:07:50,380 >> Zdaj čakalnih vrst. Čakalne vrste so precej isto stvar. 129 00:07:50,380 --> 00:07:54,950 Edina razlika je, da namesto da zadnji noter, prvi ven, 130 00:07:54,950 --> 00:07:57,480 imate prvi noter, prvi ven. 131 00:07:57,480 --> 00:07:59,460 Verjetno, če čakaš, da greš na koncert, 132 00:07:59,460 --> 00:08:04,260 ti ne bi bil zadovoljen, če bi imeli kup namesto čakalne vrste. 133 00:08:04,260 --> 00:08:07,730 Ker je zadnja oseba, da pridejo bi bila prva oseba, ki za vstop na koncert. 134 00:08:07,730 --> 00:08:09,760 Vam verjetno ne bi bil zadovoljen. 135 00:08:09,760 --> 00:08:15,020 V čakalni vrsti, prva oseba, ki se v je tudi prva oseba, da gremo ven. 136 00:08:15,020 --> 00:08:18,720 Torej, v opredelitvi vrste, ki imajo poleg velikosti v matriki, 137 00:08:18,720 --> 00:08:23,360 Prav tako imeti glavo, ki je indeks z glavo dimnika. 138 00:08:23,360 --> 00:08:29,000 Torej, prvi element prav zdaj. 139 00:08:29,000 --> 00:08:32,710 Enqueue je ista stvar kot zagon za dimnike. 140 00:08:32,710 --> 00:08:34,980 Če ste bili zelo naiven, bi si rekel, 141 00:08:34,980 --> 00:08:39,289 no, lahko sem samo narediti točno isto stvar, kot sem storil pritiskom. 142 00:08:39,289 --> 00:08:44,030 Jaz lahko samo preveri, če je ne presegajo zmožnosti. 143 00:08:44,030 --> 00:08:48,760 Če je, se bom vrnil false, sicer bi le lahko izvozite novo vrednost 144 00:08:48,760 --> 00:08:50,630 in nato prirastek velikosti. 145 00:08:50,630 --> 00:08:52,750 Toda zakaj je to narobe? 146 00:08:52,750 --> 00:08:55,010 Poglejmo primer. 147 00:08:55,010 --> 00:08:57,020 Poskušam enqueue kup stvari, 148 00:08:57,020 --> 00:08:58,390 in potem bom dequeue in enqueue. 149 00:08:58,390 --> 00:09:00,550 Obstaja veliko ukazov, ampak to je zelo preprosta. 150 00:09:00,550 --> 00:09:04,790 Grem enqueue 5, tako da dodamo 5 in nato 7. 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, nato pa želim dequeue nekaj, 152 00:09:09,310 --> 00:09:12,000 kar pomeni, da bom odstraniti prvi element. 153 00:09:12,000 --> 00:09:14,640 Torej bom odstraniti številko 3, kajne? 154 00:09:14,640 --> 00:09:17,320 Prvi element. Ok. 155 00:09:17,320 --> 00:09:21,450 Zdaj, če sem poskusil enqueue nekaj drugega, kaj se bo zgodilo? 156 00:09:21,450 --> 00:09:24,290 Glede na moje izvajanje, 157 00:09:24,290 --> 00:09:31,040 Nameraval sem dal naslednjo številko indeksa q.size. 158 00:09:31,040 --> 00:09:35,140 V tem primeru znaša 8, 159 00:09:35,140 --> 00:09:38,640 tako da bo indeks 8 je tukaj v zadnjem položaju. 160 00:09:38,640 --> 00:09:43,900 Če skušam enqueue 1 tukaj, jaz bi se prepisali zadnji položaj 161 00:09:43,900 --> 00:09:45,870 na število 1, ki je popolnoma narobe. 162 00:09:45,870 --> 00:09:49,870 Kaj želim storiti, je ovijte okoli in šel na prvo mesto. 163 00:09:49,870 --> 00:09:52,870 Mogoče bi samo rekel, dobro, sem moral preveriti 164 00:09:52,870 --> 00:09:55,600 če sem lahko dejansko dal nekaj tam. 165 00:09:55,600 --> 00:09:58,560 Če ne, bom samo rekel, oh, novo polno zmogljivost 166 00:09:58,560 --> 00:10:02,010 je pravzaprav kapaciteta - 1, in ne morete postaviti element tam. 167 00:10:02,010 --> 00:10:06,150 Toda kaj je problem? Problem je, da če sem dequeue vse tukaj 168 00:10:06,150 --> 00:10:08,240 in potem sem poskusil dodati nekaj drugega, bi samo rekel, 169 00:10:08,240 --> 00:10:11,210 No, ste bili pri polni zmogljivosti, ki je 0. 170 00:10:11,210 --> 00:10:13,620 Torej je vaša čakalna vrsta izginila. 171 00:10:13,620 --> 00:10:16,990 Moraš ovijte okoli, in način ovije okoli 172 00:10:16,990 --> 00:10:22,040 da vi naučili v vizionarskih in drugih psets bil z uporabo mod. 173 00:10:22,040 --> 00:10:29,090 Lahko ga preizkusite doma razumeti, zakaj bi to naredila q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod zmogljivosti, če pa si oglejte tukaj, 175 00:10:31,080 --> 00:10:34,760 lahko vidimo, da deluje. 176 00:10:34,760 --> 00:10:37,760 Torej, v zadnjem primeru, q.size je bilo 8 177 00:10:37,760 --> 00:10:47,590 in glava je bila 1, ker je bil ta položaj tukaj matrike. 178 00:10:47,590 --> 00:10:51,970 Tako bo 8 + 1, 9. Mod zmogljivost 9 bi bilo 0. 179 00:10:51,970 --> 00:10:56,640 To bi šel z indeksom 0.. Bomo v pravem položaju. 180 00:10:56,640 --> 00:10:59,750 In nato poskusite čakalne vrste doma. 181 00:10:59,750 --> 00:11:04,950 Nekatere pomembne stvari: poskusite razumeti razliko med kupu in čakalne vrste. 182 00:11:04,950 --> 00:11:11,620 Doma, poskusite dobiti zelo dobro seznanjeni z izvajanjem enqueue, dequeue, potiskanje in pop. 183 00:11:11,620 --> 00:11:16,560 In tudi razumeti, ko bi lahko uporabite vsako od njih. 184 00:11:16,560 --> 00:11:22,830 >> Torej, dajmo se sprostite za 10 sekund, s kupom Pokemons. 185 00:11:22,830 --> 00:11:26,080 In zdaj se vrnimo k podatkovnih struktur. 186 00:11:26,080 --> 00:11:29,770 Hash tabel. Veliko ljudi je bilo strah hash tabel. 187 00:11:29,770 --> 00:11:33,650 V problem nastavite 6, Spell Checker. 188 00:11:33,650 --> 00:11:35,980 Razpršene tabele in poskuša, veliko ljudi je strah od njih. 189 00:11:35,980 --> 00:11:38,540 Mislijo, da so tako težko razumeti. Ja? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problem nastavite 5. >> Problem nastavite 5, ja. Hvala, Rob. 191 00:11:41,490 --> 00:11:43,370 Ja. Šest je Huff n "Puff, ja. 192 00:11:43,370 --> 00:11:49,340 Problem nastavite 5 je Spell Checker in si moral uporabiti bodisi razpršene tabele ali poskusiti. 193 00:11:49,340 --> 00:11:55,360 Veliko ljudi misli, da so bili zelo težko razumeti, ampak oni so pravzaprav zelo preprost. 194 00:11:55,360 --> 00:12:01,290 Kaj je razpršena tabela, v bistvu? Hash tabela je matrika povezanih seznamov. 195 00:12:01,290 --> 00:12:06,730 Edina razlika med matriko in razpršene tabele 196 00:12:06,730 --> 00:12:09,730 je, da imate v razpršene tabele nekaj, kar ti hash funkcijo. 197 00:12:09,730 --> 00:12:12,080 Kaj je funkcija hash? 198 00:12:12,080 --> 00:12:13,970 Ne vem, če lahko vi preberete tukaj. 199 00:12:13,970 --> 00:12:16,090 To je primer razpršene tabele. 200 00:12:16,090 --> 00:12:19,220 Torej, lahko vidite, da imate matriko z 31 elementi. 201 00:12:19,220 --> 00:12:22,440 In kaj počnemo v razpršene tabele je imel funkcijo razpršitve 202 00:12:22,440 --> 00:12:26,660 da se bo prevesti ključ, vsak int na podlagi indeksa. 203 00:12:26,660 --> 00:12:31,740 Če je, na primer, če želim, da izberejo za B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Jaz bi dal B. Harrison v mojih hash funkcij, 205 00:12:34,190 --> 00:12:36,960 in funkcija hash bodo vrnili 24. 206 00:12:36,960 --> 00:12:40,930 Zato sem vedel, da želim shraniti B. Harrisona v 24. 207 00:12:40,930 --> 00:12:46,580 Tako da je razlika med samo ob matriko, ki ima razpršene tabele. 208 00:12:46,580 --> 00:12:48,740 V razpršene tabele boste imeli funkcijo, ki se dogaja, da vam povem, 209 00:12:48,740 --> 00:12:54,740 kjer je za shranjevanje podatkov, ki jih želite shraniti. 210 00:12:54,740 --> 00:12:57,040 Za funkcije razpršitve, ki jo želite pogledati za funkcijo razpršitve 211 00:12:57,040 --> 00:13:00,600 da je deterministična in dobro porazdeljena. 212 00:13:00,600 --> 00:13:07,810 Kot lahko vidite tukaj, boste videli, da je veliko podatkov, ki sem želel trgovini dejansko 19 213 00:13:07,810 --> 00:13:12,470 namesto da se uporabi 31, 30 in 29, ki so bile vse zastonj. 214 00:13:12,470 --> 00:13:16,920 Torej hash funkcijo, da sem uporabil ni bilo zelo dobro porazdeljena. 215 00:13:16,920 --> 00:13:20,710 Ko rečemo, dobro porazdeljena, to pomeni, da želimo imeti, 216 00:13:20,710 --> 00:13:26,520 grobo vsaj 1 ali 2 za vsako - 217 00:13:26,520 --> 00:13:32,190 podobno, razlika 1 ali 2, za vsako od indeksi v nizi. 218 00:13:32,190 --> 00:13:43,950 Hočeš, da imajo približno enako število elementov v vsakem povezanem seznamu v array. 219 00:13:43,950 --> 00:13:48,600 In to je enostavno, da preveri, če je veljavna v razpršene tabele, vidijo kot hash tabel. 220 00:13:48,600 --> 00:13:51,770 >> Potem drevesa. To je drevo. 221 00:13:51,770 --> 00:13:56,400 Drevesa v računalništvu je z glavo navzdol zaradi nekega razloga. 222 00:13:56,400 --> 00:14:00,150 Torej, tukaj imate koren drevesa in nato liste. 223 00:14:00,150 --> 00:14:05,630 Moral bi vedeti, nomenklature za starše in otroke. 224 00:14:05,630 --> 00:14:12,880 Vsako vozlišče ima svoje otroke, ki so vozlišča, ki so nižje od staršev. 225 00:14:12,880 --> 00:14:19,660 Tako, na primer, 2 se bo matično za 3 in za druge otroka tam, 226 00:14:19,660 --> 00:14:25,290 3 pa se bo od staršev za 1. in drugi otroci, ki so tam. 227 00:14:25,290 --> 00:14:29,990 In 1 se bo 3 je otrok, in tako naprej. 228 00:14:29,990 --> 00:14:34,610 Imamo nekaj veliko bolj zanimivo, ki se imenuje binarno iskalno drevo, 229 00:14:34,610 --> 00:14:39,040 pri kateri so vse vrednosti na pravico do vozlišča 230 00:14:39,040 --> 00:14:41,660 se bo na desni strani, prav tukaj - na desni strani, 231 00:14:41,660 --> 00:14:46,780 se bo večja od elementa v korenu. 232 00:14:46,780 --> 00:14:49,780 Torej, če imam številko 5 tukaj, vsi elementi na desni 233 00:14:49,780 --> 00:14:51,940 se bo večja od 5, in na levi 234 00:14:51,940 --> 00:14:56,770 vse elemente, ki bo manjši od 5. 235 00:14:56,770 --> 00:14:58,780 Zakaj je to koristno? 236 00:14:58,780 --> 00:15:01,660 No, če želim, da preveri, če je številka 7 sem, na primer, 237 00:15:01,660 --> 00:15:05,960 Pravkar sem šel do 5. prvi in ​​bom videl, je 7 več ali manj kot 5? 238 00:15:05,960 --> 00:15:09,540 To je več, tako da sem vedel, da bo moral biti na desni strani drevesa. 239 00:15:09,540 --> 00:15:13,980 Tako da imam veliko manj stvari gledati. 240 00:15:13,980 --> 00:15:19,520 Pri izvajanju binarnega iskalnega drevesa, vozlišča, bom samo, da imeti podatke, 241 00:15:19,520 --> 00:15:21,750 Tako int n, bi lahko imeli tudi niz 242 00:15:21,750 --> 00:15:23,630 ali kaj si hotel. 243 00:15:23,630 --> 00:15:28,100 Moraš biti previden pri opredelitvi, kaj je večje, kar je manj. 244 00:15:28,100 --> 00:15:30,390 Torej, če ste imeli strune, na primer, lahko določite 245 00:15:30,390 --> 00:15:34,690 da vse te stvari o pravici se dogaja, da imajo večjo dolžino, 246 00:15:34,690 --> 00:15:40,940 levo se dogaja, da imajo nižje dolžin, tako da je res odvisno od vas. 247 00:15:40,940 --> 00:15:44,930 >> Kako lahko izvajajo našli za BST? 248 00:15:44,930 --> 00:15:47,840 Prva stvar, ki jo boste morali storiti je, da preveri, če je korenina NULL. 249 00:15:47,840 --> 00:15:50,920 Če je NULL, to pomeni, da je predmet, ne obstaja 250 00:15:50,920 --> 00:15:53,330 ker nimate niti drevo, kajne? 251 00:15:53,330 --> 00:15:55,790 Zato sem se vrne false. 252 00:15:55,790 --> 00:15:58,740 Drugače pa grem preveriti, če je število večje 253 00:15:58,740 --> 00:16:01,720 od vrednosti v korenu. 254 00:16:01,720 --> 00:16:04,250 Jaz bom poskusil najti element na desni strani 255 00:16:04,250 --> 00:16:08,590 drevesa. 256 00:16:08,590 --> 00:16:11,310 Vidiš, da sem z rekurzijo tukaj. 257 00:16:11,310 --> 00:16:14,150 In potem, če je manj, grem iskati na levi strani. 258 00:16:14,150 --> 00:16:18,330 In končno, v nasprotnem primeru, če ni manjši ali večji, 259 00:16:18,330 --> 00:16:20,660 to pomeni, da je samo vrednost. 260 00:16:20,660 --> 00:16:23,010 Torej sem vrne true. 261 00:16:23,010 --> 00:16:26,360 Tukaj lahko vidite, da sem uporabil, če, če, če. 262 00:16:26,360 --> 00:16:30,820 In ne pozabite, v kvizu 0, smo imeli problem, ki je imel, če, če, če, 263 00:16:30,820 --> 00:16:32,780 in ti naj bi našli neučinkovitost, 264 00:16:32,780 --> 00:16:35,180 in neučinkovitost je bila, da ga uporablja, če. 265 00:16:35,180 --> 00:16:39,060 Moral bi uporabiti, če else if, else, in drugje. 266 00:16:39,060 --> 00:16:44,240 Torej, naj uporabim if in else if in ostalo tukaj? 267 00:16:44,240 --> 00:16:46,200 Ali kdo - ja? 268 00:16:46,200 --> 00:16:51,140 [Student nastopanje, neslišno] 269 00:16:51,140 --> 00:16:53,480 To je popolno. Torej, ona je rekel, da ni važno, 270 00:16:53,480 --> 00:16:55,930 samo zato, ker neučinkovitosti, ki smo jih imeli pred 271 00:16:55,930 --> 00:16:59,550 je bil, da zato, ker morda, če je izpolnjen pogoj, nekaj, 272 00:16:59,550 --> 00:17:03,570 da ste izvedli dejanje, potem pa grejo, da preverite vse druge pogoje. 273 00:17:03,570 --> 00:17:06,319 Toda v tem primeru se je vrnila takoj, tako da ni važno. 274 00:17:06,319 --> 00:17:09,220 Torej vam ni treba uporabiti, če drugega. 275 00:17:09,220 --> 00:17:11,740 >> In končno, kaj je govoril o poskusih 276 00:17:11,740 --> 00:17:13,800 ki je najljubši vsakogar. 277 00:17:13,800 --> 00:17:15,980 Poskus je drevo nizi. 278 00:17:15,980 --> 00:17:20,369 To je zelo hitro poiskati vrednosti, temveč ga uporablja veliko pomnilnika. 279 00:17:20,369 --> 00:17:22,530 In to je običajno za filtriranje besed, tako da, ko boste 280 00:17:22,530 --> 00:17:27,920 želijo izvajati, na primer, ne vem, kot telefonski imenik v vašem telefonu 281 00:17:27,920 --> 00:17:30,440 in želite, da bi lahko s tipom B 282 00:17:30,440 --> 00:17:32,510 in samo še imena ljudi, ki imajo B. 283 00:17:32,510 --> 00:17:37,960 To je zelo enostaven za izvedbo, da z uporabo poskusiti, npr. 284 00:17:37,960 --> 00:17:39,820 Kako opredeljujete vozlišče v poskusu? 285 00:17:39,820 --> 00:17:43,910 Moraš imeti bool, da se dogaja, da se is_word. 286 00:17:43,910 --> 00:17:48,660 To pomeni, da z uporabo vseh znakov pred tem vozlišču, 287 00:17:48,660 --> 00:17:51,920 ti so sposobni, da se tvori besedo, 288 00:17:51,920 --> 00:17:57,230 in potem boste imeli niz kazalcev do vozlišč. 289 00:17:57,230 --> 00:18:03,120 Lahko vidite, da imamo celo paleto matičnih vozlišč, tako da vozlišča * niz? Ja? 290 00:18:03,120 --> 00:18:06,050 Torej, da vidimo, kako bo to delovalo. Za preverjanje črkovanja, 291 00:18:06,050 --> 00:18:08,230 imamo niz 27 elementov, 292 00:18:08,230 --> 00:18:12,150 saj imamo vse črke plus opuščaj. 293 00:18:12,150 --> 00:18:17,800 Preden sem bom samo za uporabo 2, ker želim, da bi lahko napisali na tablo. 294 00:18:17,800 --> 00:18:20,230 Ok. Torej je to primer poskusu. 295 00:18:20,230 --> 00:18:25,600 Če sem definiranje prvega vozlišča, bom imel celo paleto 2 elementov 296 00:18:25,600 --> 00:18:29,290 da sta 2 kazalci na NULL, zato sem dal "A" in "B". 297 00:18:29,290 --> 00:18:32,430 In jaz bom imel bool, ki pravi is_word. 298 00:18:32,430 --> 00:18:34,420 To se dogaja, da so napačne za prvo, 299 00:18:34,420 --> 00:18:37,370 samo zato, ker pred tem nimate nobenih znakov. 300 00:18:37,370 --> 00:18:40,900 Tako prazna beseda ni beseda. Tako da je lažna. 301 00:18:40,900 --> 00:18:46,320 Če želim dodati "A" do tega slovarja, kaj bi morali storiti? 302 00:18:46,320 --> 00:18:49,760 Jaz bi samo še, da malloc novo vozlišče za "a", 303 00:18:49,760 --> 00:18:54,630 in nato dodajte svojo besedo, da res. 304 00:18:54,630 --> 00:19:00,180 Tako da samo predstavlja, da ko "" se bo res. Smisla? 305 00:19:00,180 --> 00:19:04,120 Potem, če želim dodati BA, bom moral malloc 1 za "b", 306 00:19:04,120 --> 00:19:07,550 in potem bom ustanovila logičnim na false, 307 00:19:07,550 --> 00:19:10,160 ker "b", sam po sebi ni beseda. 308 00:19:10,160 --> 00:19:13,010 Potem bom malloc še eno za "a", tako da BA, 309 00:19:13,010 --> 00:19:16,290 in potem bom ustanovila, da je beseda res. 310 00:19:16,290 --> 00:19:18,950 Ker "ba" je beseda. 311 00:19:18,950 --> 00:19:21,910 In potem, če želim, da vidim, če je "b" v tem slovarju, 312 00:19:21,910 --> 00:19:26,730 Lahko pridem na prvo, 'B'. Sem šel dol in gledam, je beseda, ki pravi, napačna. 313 00:19:26,730 --> 00:19:30,110 Torej, to ni beseda. Če bi želeli preveriti, BA, 314 00:19:30,110 --> 00:19:38,010 Grem na prvo, 'B', nato pa pojdite na "a", in vidim, res, zato je beseda. Smisla? 315 00:19:38,010 --> 00:19:41,950 Veliko ljudi se zmedeni poskusih. Ne? 316 00:19:41,950 --> 00:19:44,740 >> Nazadnje Huffman kodiranje. Huffman kodiranje je zelo koristen 317 00:19:44,740 --> 00:19:47,550 varčevati s pomnilnikom in stiskanje besedilne datoteke, 318 00:19:47,550 --> 00:19:52,270 samo zato, ker veliko krat ste uporabili "a" in "e", na primer, 319 00:19:52,270 --> 00:19:57,710 v dokumentih, vendar ne vem, če vi uporabljate "Q" ali "Z" toliko. 320 00:19:57,710 --> 00:20:02,040 Ima samo 1 bajt za vsako posamezno značaja, 321 00:20:02,040 --> 00:20:08,520 vsak - na 256 znakov, ki jih imamo v tabeli ASCII ni zelo optimalna, 322 00:20:08,520 --> 00:20:11,410 samo zato, ker obstaja nekaj znakov, ki jih uporabljate veliko več, 323 00:20:11,410 --> 00:20:15,180 tako da boste morali verjetno porabijo manj pomnilnika za tiste. 324 00:20:15,180 --> 00:20:17,560 Kako uporabljam Huffman kodiranje? 325 00:20:17,560 --> 00:20:20,010 Moramo narediti Huffman drevo. 326 00:20:20,010 --> 00:20:23,370  Huffman drevo ima vozlišč 327 00:20:23,370 --> 00:20:27,760 ki je simbol, ki se bo, kot so, "a", "b", "c", pisma, 328 00:20:27,760 --> 00:20:32,990 karkoli črka imajo frekvenco, ki je frekvenca, ki se pojavlja v besedilu, 329 00:20:32,990 --> 00:20:36,280 da si ustvari Huffman drevo za, 330 00:20:36,280 --> 00:20:41,800 in nato vozlišče, ki se dogaja, da kaže na levi strani Huffman drevesa 331 00:20:41,800 --> 00:20:47,210 in drugo vozlišče, ki se dogaja, da kaže na desno. Torej, tako kot drevo. 332 00:20:47,210 --> 00:20:49,440 Kako si zgraditi Huffman drevo? 333 00:20:49,440 --> 00:20:54,020 Boste izbrali 2 vozlišč, ki imajo najnižje frekvence. 334 00:20:54,020 --> 00:20:56,490 Če imate kravato boste izbrali 2 vozlišča 335 00:20:56,490 --> 00:20:59,870 ki imajo najnižje vrednosti ASCII, kot dobro. 336 00:20:59,870 --> 00:21:02,420 Potem boste ustvarili novo drevo iz teh 2 vozlišč 337 00:21:02,420 --> 00:21:08,030 da se dogaja, da imajo kombinirano frekvenco v matični vozlišče. 338 00:21:08,030 --> 00:21:13,240 In potem boste odstranili 2 otroka iz gozda 339 00:21:13,240 --> 00:21:15,570 in jih nadomestiti s staršev. 340 00:21:15,570 --> 00:21:18,930 In ti boš ponovil, da dokler imate samo 1 drevo v gozdu. 341 00:21:18,930 --> 00:21:23,840 Pa poglejmo, kako bi vam Huffman drevo za ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Tukaj lahko vidite, da so vse črke frekvenco 1, razen za "A", ki ima frekvenco 2. 343 00:21:29,220 --> 00:21:34,090 Zato sem ustvaril vozle za vsa pisma ki sem jih po vrstnem redu vrednosti ASCII in pogostosti. 344 00:21:34,090 --> 00:21:40,090 Torej, če želim ustvariti prvo drevo, bo z "L" in "M". 345 00:21:40,090 --> 00:21:43,100 Torej je tu. Pogostost para bo 2. 346 00:21:43,100 --> 00:21:49,470 ker je 1 + 1, potem naslednji 2 z najnižje frekvence so "Y" in "Z". 347 00:21:49,470 --> 00:21:53,180 In potem imam vse od njih, da - imajo frekvenco 2. 348 00:21:53,180 --> 00:22:00,470 Torej, katere so tiste, ki imajo najnižjo vrednost ASCII za naslednjo? 349 00:22:00,470 --> 00:22:04,830 'A' in 'L'. Zato sem ustvariti novo vozlišče, 350 00:22:04,830 --> 00:22:09,930 in končno, da je 4 in 2, tako da 2 se bo na levi strani. 351 00:22:09,930 --> 00:22:12,430 In to je Huffman drevo. 352 00:22:12,430 --> 00:22:16,060 Potem, če hočem napisati nekaj besedila, 353 00:22:16,060 --> 00:22:24,440 kot v binarno pretvoriti v besedilo z uporabo Huffman drevo je zelo enostavno. 354 00:22:24,440 --> 00:22:30,220 Na primer, če rečem, da se premika na levo 0 in se gibljejo na desni strani je 1, 355 00:22:30,220 --> 00:22:32,410 Kaj je, da gre za zastopanje? 356 00:22:32,410 --> 00:22:35,530 Tako kot 1, 1, zato desno, desno, 357 00:22:35,530 --> 00:22:40,370 in potem 0, tako levi je L, nato 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Torej, 1, 0, tako da samo 1, 0, "". 359 00:22:43,950 --> 00:22:47,540 In potem 0, 1, tako da 'Z'. 360 00:22:47,540 --> 00:22:52,170 In potem 1, 0, 0 - št. 361 00:22:52,170 --> 00:22:56,780 0, 0 bo "Y", tako len. 362 00:22:56,780 --> 00:23:06,060 Tako, da je vse za mano, Rob bo prevzel. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Torej, teden 7 stvari. 364 00:23:08,400 --> 00:23:11,390 Imava veliko, da gredo skozi zelo hitro. 365 00:23:11,390 --> 00:23:13,430 Bitni operaterji, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 CS50 knjižnica, nato pa HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Vse v kot 15 do 20 minut. 368 00:23:20,990 --> 00:23:24,330 Bitni operaterji. Obstaja 6 od njih, ki jih morate vedeti. 369 00:23:24,330 --> 00:23:31,200 Bitni in bitni ali XOR, premik v levo, desno premik, in ne. 370 00:23:31,200 --> 00:23:35,420 Pravica izmeno in ne boste komaj videl na predavanju sploh. 371 00:23:35,420 --> 00:23:40,480 Bomo šli nad njim hitro tukaj, ampak to je dobro vedeti, da so to 6, ki obstajajo. 372 00:23:40,480 --> 00:23:45,070 Ne pozabite, da so operaterji bitni kot takrat, ko si naredil 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Niste se ukvarjajo z binarno 3. in 4.. 374 00:23:49,420 --> 00:23:56,550 Z operaterji bitni ste dejansko ukvarjajo s posameznimi bitov števil 3 in 4. 375 00:23:56,550 --> 00:23:59,120 >> Torej, prvi, ki bomo rekli, je bitni ni, 376 00:23:59,120 --> 00:24:02,340 in vse kar naredi je flip vse bitov. 377 00:24:02,340 --> 00:24:05,500 Torej tukaj, če ste to pisanje v C, ne bi ga napisali 378 00:24:05,500 --> 00:24:09,380 kot ~ 11.011 ali karkoli, bi napisali, da je všeč ~ 4, 379 00:24:09,380 --> 00:24:12,970 in potem bi flip binarno predstavitev 4. 380 00:24:12,970 --> 00:24:24,800 Torej, tukaj, ~ nekaterih binarno število 1101101 se dogaja, da ravno flip vse 1 na 0 in vse je 0 do 1 je. 381 00:24:24,800 --> 00:24:27,600 Kot sem rekel, tam, pogosta uporaba tega 382 00:24:27,600 --> 00:24:30,830 pa ga bomo videli v nekaj, je, kot smo želeli, da pridejo gor z nekaj več 383 00:24:30,830 --> 00:24:35,460 kjer so vsi bitov 1, razen za eno od njih. 384 00:24:35,460 --> 00:24:38,560 Torej, to je ponavadi lažje izraziti številko 385 00:24:38,560 --> 00:24:40,630 če se le da en sam bit nastavljen, 386 00:24:40,630 --> 00:24:44,650 in nato vzemite ~ od tega, da se vsak drugi bit nastavljeno, razen za tole. 387 00:24:44,650 --> 00:24:50,300 Tako da je tisto, kar bomo uporabili bolj malo. 388 00:24:50,300 --> 00:24:58,220 >> Negacija po bitih ali. Tukaj so 2 binarna števila in ti 2 številke 389 00:24:58,220 --> 00:25:00,780 so zelo reprezentativna, saj predstavljajo vse mogoče 390 00:25:00,780 --> 00:25:07,290 Kombinacija bitov bi morali delovati naprej. 391 00:25:07,290 --> 00:25:13,540 Tukaj, ko sem or'd vsak bit, smo le, da bo primerjati naravnost navzdol. 392 00:25:13,540 --> 00:25:15,410 Torej na levi strani imamo 1 in 1. 393 00:25:15,410 --> 00:25:20,510 Ko sem bitni | tistimi, kaj bom dobil? Ena. 394 00:25:20,510 --> 00:25:25,320 Potem bitni | 0 in 1 se dogaja, da me? Ena. 395 00:25:25,320 --> 00:25:27,840 Bitni 1 in 0 se bo ista stvar, en. 396 00:25:27,840 --> 00:25:31,880 Bitni 0 | 0 se dogaja, da me 0. 397 00:25:31,880 --> 00:25:37,300 Torej edini primer, kjer sem dobil 0, je v 0 | 0 primera. 398 00:25:37,300 --> 00:25:40,020 In lahko si misliš, da je tako kot vaše logično najbolj oddaljenih regij. 399 00:25:40,020 --> 00:25:44,830 Torej, če mislite, da 1 kot resničen in 0 kot lažno, Isto velja tukaj. 400 00:25:44,830 --> 00:25:50,040 Torej res, ali res drži, drži ali ne drži. 401 00:25:50,040 --> 00:25:57,150 Napačne ali res drži, lažna ali napačna, je edina stvar, ki je dejansko napačna. 402 00:25:57,150 --> 00:26:00,100 Tukaj je primer, ki bi morali vedeti 403 00:26:00,100 --> 00:26:05,160 kot zelo dober primer, ko se uporabljajo bitni operaterji. 404 00:26:05,160 --> 00:26:08,660 Tukaj, če bomo ali kapital "" z Ox20, 405 00:26:08,660 --> 00:26:11,830 in bomo pogled na to v sekundi, smo dobili nekaj. 406 00:26:11,830 --> 00:26:16,020 In če smo ali male črke 'a' z Ox20, smo dobili nekaj. 407 00:26:16,020 --> 00:26:26,750 Torej, kaj je dvigni ASCII tabelo. 408 00:26:26,750 --> 00:26:34,000 Ok. Tukaj vidimo, da je "A" - 409 00:26:34,000 --> 00:26:36,920 Tu imamo '"je desetiško 65. 410 00:26:36,920 --> 00:26:45,120 Ampak jaz bom šel z šestnajstiškem, ki je Ox41. 411 00:26:45,120 --> 00:26:48,280 Precej prepričan, da smo ga videli v razredu. Mislim, da smo ga videli v razredu 412 00:26:48,280 --> 00:26:52,730 da je precej enostavno pretvoriti iz šestnajstiško v binarno. 413 00:26:52,730 --> 00:26:55,280 Torej tukaj, če želim dati 4 v binarni, 414 00:26:55,280 --> 00:26:59,550 to je samo bo 0100. 415 00:26:59,550 --> 00:27:03,620 To je 1 na kraj, 2 je kraj, 4 je kraj, zato je to 4. 416 00:27:03,620 --> 00:27:08,550 Potem lahko po delih 1 v binarno, kar se dogaja, da je 0001. 417 00:27:08,550 --> 00:27:14,280 In tako to se bo zastopanost "A" v binarno. 418 00:27:14,280 --> 00:27:22,720 Ob male črke "a", to je zdaj dogaja, da se Ox61, 419 00:27:22,720 --> 00:27:27,050 kjer je razdelitev ti gor v svojo binarno, tako da 6 - 420 00:27:27,050 --> 00:27:37,830 Kaj je to dejansko storiti - ne obstaja radirka? Eraser. 421 00:27:37,830 --> 00:27:48,220 Ox61. Torej razdelite 6 v binarno se bo 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 In delitev 1 se bo 0001. 423 00:27:54,610 --> 00:27:56,520 Če pogledamo razlike med temi 2, 424 00:27:56,520 --> 00:28:04,250 vidimo, da je edina razlika med malimi in kapitala "A" to single bit. 425 00:28:04,250 --> 00:28:11,810 Torej se vrnemo na spletni strani - v redu. 426 00:28:11,810 --> 00:28:15,920 Prihajam nazaj tukaj, če pogledamo, kaj bit Ox20 je, 427 00:28:15,920 --> 00:28:22,210 Tako cepljenje Ox20 v svojo binarno, 428 00:28:22,210 --> 00:28:27,310 je 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, le malo, da se določi ta bit, da smo se ukvarjajo s, 430 00:28:33,470 --> 00:28:38,210 s preklapljanjem med kapitalom in male črke "a". 431 00:28:38,210 --> 00:28:47,610 Če sem ali "A", ki je ta, "", 432 00:28:47,610 --> 00:28:50,580 če sem ali "A" s Ox20, 433 00:28:50,580 --> 00:28:53,490 kaj bom dobil? 434 00:28:53,490 --> 00:28:58,960 [Študent, neslišno] >> male črke "a", saj se dogaja, da flip ta bit na 1. 435 00:28:58,960 --> 00:29:04,170 In če sem ali "" z Ox20, kaj bom dobil? 436 00:29:04,170 --> 00:29:08,780 Male črke, ker samo oring "" z Ox20, 437 00:29:08,780 --> 00:29:14,580 Jaz bom samo, da se oring to sam bit na 1, to je že 1, tako da ni važno. 438 00:29:14,580 --> 00:29:17,960 Tako smo dobili "A" in "a". 439 00:29:17,960 --> 00:29:24,820 >> Negacija po bitih in. Again, lahko razmišljamo o tem, kot je naš logično in kolegom. 440 00:29:24,820 --> 00:29:28,180 Na levi strani imamo res in resnične. 441 00:29:28,180 --> 00:29:31,160 To se dogaja, da bi bilo res, in za vse primere, 442 00:29:31,160 --> 00:29:36,270 false in true ali false true in ali false false &, 443 00:29:36,270 --> 00:29:38,550 nobena od teh stvari so resnične. 444 00:29:38,550 --> 00:29:44,170 Torej, kaj bomo na koncu dobili 1000. 445 00:29:44,170 --> 00:29:48,830 Torej, zdaj, tukaj, tukaj, kjer sem uporabil zaupljiv bitni ni, 446 00:29:48,830 --> 00:29:52,230 kjer smo imeli Ox20. 447 00:29:52,230 --> 00:29:54,350 Torej, to je Ox20. 448 00:29:54,350 --> 00:29:59,570 Zdaj, kaj želim storiti, bitni ~ od Ox20. 449 00:29:59,570 --> 00:30:03,600 To se dogaja, da flip vse bitov. 450 00:30:03,600 --> 00:30:09,330 Tako da imam 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 In tako "" anded s ~ Ox20 se dogaja, da mi kaj? 452 00:30:18,940 --> 00:30:22,430 Samo malo smo se res morali razmišljati o je to ena, 453 00:30:22,430 --> 00:30:26,020 saj, če so vsi ti biti nastavljeni na 1, 454 00:30:26,020 --> 00:30:29,000 potem bomo dobili točno tisto, kar "" je, 455 00:30:29,000 --> 00:30:31,260 razen, če je mogoče, kaj je to bit. 456 00:30:31,260 --> 00:30:34,460 Ker če bi bil 1, zdaj pa se dogaja, da je treba nastaviti na 0, 457 00:30:34,460 --> 00:30:39,810 ker ne glede na to, anded s tem se bo 0. 458 00:30:39,810 --> 00:30:43,280 Torej, kaj je "'& ~ Ox20 dogaja, da me? 459 00:30:43,280 --> 00:30:48,200 [Študenti odgovoriti, neslišno] >> In kaj je "" in - to je 'A'. 460 00:30:48,200 --> 00:30:52,170 In kaj je "'& ~ Ox20 dogaja, da me? 461 00:30:52,170 --> 00:30:56,720 "A." Ker je to trenutno 1. 462 00:30:56,720 --> 00:30:59,570 Anding s tem 0 se dogaja, da je 0, 463 00:30:59,570 --> 00:31:02,530 in zdaj bomo dobili 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Oba sta "," in ne nazadnje tudi te vrste, 465 00:31:06,600 --> 00:31:10,830 imamo XOR. To je zelo podobno, ali, 466 00:31:10,830 --> 00:31:14,400 razen to pomeni izključno ali. 467 00:31:14,400 --> 00:31:18,420 To je kot tisto, kar ponavadi mislili, ali v resničnem svetu. 468 00:31:18,420 --> 00:31:23,190 Torej, naredite kar koli "x" in "y", ne pa oboje. 469 00:31:23,190 --> 00:31:28,700 Tukaj 1 ^ 1 se bo 0. 470 00:31:28,700 --> 00:31:33,650 Ker je res, da je to - to ne deluje, kot tudi z logično true in false 471 00:31:33,650 --> 00:31:37,150 kot bitni & in ali to storili, 472 00:31:37,150 --> 00:31:40,100 ampak res ^ res je napačen. 473 00:31:40,100 --> 00:31:44,810 Ker smo le želeli vrniti true, če je le eden izmed njih res. 474 00:31:44,810 --> 00:31:50,950 Torej 1 ^ 1 0. Kaj pa 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 1. 1 ^ 0 1, 0 ^ 0 0. 476 00:31:56,010 --> 00:32:03,890 Torej, v vseh okoliščinah, 0 bitni nekaj 0 se bo 0. 477 00:32:03,890 --> 00:32:10,270 1 bitni Nekaj ​​0 ali 0 bitni 1, 478 00:32:10,270 --> 00:32:14,660 če je | ali ^, bo to 1, in če je to in to bo 0. 479 00:32:14,660 --> 00:32:20,850 In edini primer, kjer 1 bitni 1 ni 1, je z izključna ali. 480 00:32:20,850 --> 00:32:24,580 To je 0110. 481 00:32:24,580 --> 00:32:36,520 Torej, tukaj zdaj, z uporabo XOR - tako smo spet pri 20. 482 00:32:36,520 --> 00:32:43,480 "'^ Ox20 je ti 2 bitov bomo primerjali. 483 00:32:43,480 --> 00:32:50,020 Torej 1 ^ 0 se dogaja, da mi kaj? Ena. 484 00:32:50,020 --> 00:32:58,430 "'^ Ox20 se dogaja, da me? Male črke. 485 00:32:58,430 --> 00:33:04,010 "'^ Ox20 se dogaja, da me? Capital A. 486 00:33:04,010 --> 00:33:09,310 Ker karkoli že to počne, to XOR z Ox20 487 00:33:09,310 --> 00:33:15,380 učinkovito lahkota karkoli že to bit. 488 00:33:15,380 --> 00:33:21,240 Če je to 0, to je zdaj dogaja, da postane 1. 489 00:33:21,240 --> 00:33:26,160 Ker gre za 1, 1 ^ 1 je 0. 490 00:33:26,160 --> 00:33:33,280 Torej naš '"je postala" A ", in naše" "je postala" ". 491 00:33:33,280 --> 00:33:36,910 Tako da XOR je res priročen način samo lahkota zadevo. 492 00:33:36,910 --> 00:33:39,960 Pravkar želite ponoviti čez niz črk 493 00:33:39,960 --> 00:33:44,330 in izmenično pri vsakem en znak, 494 00:33:44,330 --> 00:33:50,680 si XOR vse z Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Zdaj smo premik v levo. Levo premik je le, da bo, v bistvu, 496 00:33:55,220 --> 00:34:01,250 potisnite vse številke v ali na levo, in vstavite 0 stoji za njimi. 497 00:34:01,250 --> 00:34:05,550 Torej, tukaj imamo 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Mi bomo za potiskanje 3 0 je prodiral po desni, 499 00:34:08,560 --> 00:34:13,580 in smo dobili 01.101.000. 500 00:34:13,580 --> 00:34:16,380 V nonbinary smislu, 501 00:34:16,380 --> 00:34:24,699 vidimo, da je res, da se ukvarja 13-levo premakne s 3, kar nam daje 104. 502 00:34:24,699 --> 00:34:32,530 Torej levo prestavljanje, vidimo tukaj, x << y je v bistvu x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 je 8, torej 13 * 8 je 104. 504 00:34:40,139 --> 00:34:45,679 Če le pomislite binarno na splošno, kako vsako številko, 505 00:34:45,679 --> 00:34:49,530 če začnemo z desne, to je 1 na mestu, nato pa na 2 je mesto, nato pa v 4 v mesto. 506 00:34:49,530 --> 00:34:51,330 Torej, s pritiskom na 0-ih z desne, 507 00:34:51,330 --> 00:34:55,080 smo samo potiska stvari, ki so bile v 4 kraju do 8 kraju, 508 00:34:55,080 --> 00:34:57,920 in stvari, ki so bile v 8 kraju na strani 16 v mestu. 509 00:34:57,920 --> 00:35:01,280 Vsak premik samo pomnoži z 2. Ja? 510 00:35:01,280 --> 00:35:05,210 [Študent] Kaj se zgodi, če se premakne za 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Če se premakne za 5, s katero bi samo izgubili številk. 512 00:35:10,790 --> 00:35:15,410 Neizogibno je, da gre za isto stvar. Všeč mi je, cela le 32 bitov, 513 00:35:15,410 --> 00:35:20,750 tako da, če boste dodali 2 res velika cela števila, to šele ne spada v celo število. 514 00:35:20,750 --> 00:35:23,660 Torej, to je ista stvar tukaj. Če se premakne za 5, 515 00:35:23,660 --> 00:35:25,650 mi bi samo izgubili, da je eden. 516 00:35:25,650 --> 00:35:28,820 In to je nekako, kaj mislim s "grobo" 517 00:35:28,820 --> 00:35:37,470 kjer, če prestavite predaleč, boste izgubili bitov. 518 00:35:37,470 --> 00:35:39,830 >> Zamika v desno se bo nasprotno, 519 00:35:39,830 --> 00:35:43,090 kjer bomo zabil 0 odpade na koncu, 520 00:35:43,090 --> 00:35:48,400 in za naše namene, izpolnite 0-ih z leve. 521 00:35:48,400 --> 00:35:52,910 Tako da to počne, smo v bistvu vzvratno vožnjo, kar smo že storili. 522 00:35:52,910 --> 00:35:57,780 In vidimo, da so tri 0 je na desni strani tik odlepil, 523 00:35:57,780 --> 00:36:02,020 in smo potisnili 1101 vse do konca v desno. 524 00:36:02,020 --> 00:36:08,380 To počne 104 >> 3, ki je učinkovito, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Torej, zdaj, tukaj, je podobna ideja. 526 00:36:11,200 --> 00:36:18,720 Zakaj je samo grobo x / 2 ^ y, in ne dejansko x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Ker, če sem se premakne za 4, jaz bi izgubili 1. 528 00:36:22,240 --> 00:36:25,950 V bistvu, kaj si misliš, samo pomislite, deljenja celih števil na splošno. 529 00:36:25,950 --> 00:36:31,070 Torej, kot 5/2 je 2. To ni 2.5. 530 00:36:31,070 --> 00:36:35,000 To je isto idejo tukaj. Ko delimo z 2, 531 00:36:35,000 --> 00:36:39,910 smo lahko izgubili ak bitov na poti. 532 00:36:39,910 --> 00:36:43,870 Torej, zdaj - da je za bitni. To je vse, kar morate vedeti. 533 00:36:43,870 --> 00:36:46,340 Zapomni si primere uporabe, smo videli v razredu, 534 00:36:46,340 --> 00:36:49,340 kot bit maska ​​je koristna za izvajalce bitni, 535 00:36:49,340 --> 00:36:53,220 ali ste jih uporabili za bitne maske. 536 00:36:53,220 --> 00:36:58,620 Tiskane črke in male črke, pretvorb je precej Prototipični primer. 537 00:36:58,620 --> 00:37:01,640 >> Ok, tako da buffer overflow napade. 538 00:37:01,640 --> 00:37:05,110 Kdo spomni, kaj je narobe s to funkcijo? 539 00:37:05,110 --> 00:37:10,140 OBVESTILO smo razglašena niz 12 bajtov, 12 chars, 540 00:37:10,140 --> 00:37:18,510 in potem kopirati v naše varovalnega pasu 12 znakov celoten niz bar. 541 00:37:18,510 --> 00:37:25,080 Torej, kaj je problem tukaj? 542 00:37:25,080 --> 00:37:32,270 Magična številka 12 bi bilo precej takoj pop kot - zakaj 12? 543 00:37:32,270 --> 00:37:35,050 Kaj pa, če bar zgodi, da je več kot 12 znakov? 544 00:37:35,050 --> 00:37:41,200 Kaj pa, če Bar je na milijone znakov? 545 00:37:41,200 --> 00:37:46,010 Tukaj je vprašanje memcpy. Če bar je dovolj dolgo, 546 00:37:46,010 --> 00:37:50,330 To bo šele v celoti - "c", "c" ne skrbi, da je bilo le 12 znakov; 547 00:37:50,330 --> 00:37:53,280 "C" ne skrbi, da ga ni mogoče vgraditi, da je veliko bajte. 548 00:37:53,280 --> 00:37:58,250 To bo šele popolnoma prepiše char, je 12 bajtov smo dodeljeni za to, 549 00:37:58,250 --> 00:38:01,830 in vse, kar mimo nje v spomin, da dejansko ne spadajo v to buffer 550 00:38:01,830 --> 00:38:06,520 s kakršnimi koli niz bar. 551 00:38:06,520 --> 00:38:09,780 Torej je bila to sliko smo videli v razredu 552 00:38:09,780 --> 00:38:12,220 kjer imamo kup odraščanja. 553 00:38:12,220 --> 00:38:16,040 Si je treba uporabiti za te slike ali pa ponovno seznanjeni z njimi. 554 00:38:16,040 --> 00:38:21,260 Imamo kup odraščanje, naslovi pomnilnika začnejo z 0 na vrhu 555 00:38:21,260 --> 00:38:26,270 in rastejo navzdol všeč 4000000000 na dnu. 556 00:38:26,270 --> 00:38:28,820 Mi imamo niz "C" nekje v spominu, 557 00:38:28,820 --> 00:38:32,260 potem imamo kazalec v vrstico desno pod njim, 558 00:38:32,260 --> 00:38:38,720 in potem imamo to shranjeno okvirja kazalec v naši povratnim naslovom in našega matičnega podprograma kup. 559 00:38:38,720 --> 00:38:40,800 Spomnite se, kaj naslov donos? 560 00:38:40,800 --> 00:38:45,360 To je, ko glavna pokliče funkcijo foo poziva bar funkcijo, 561 00:38:45,360 --> 00:38:48,100 neizogibno, bar donose. 562 00:38:48,100 --> 00:38:52,610 Torej, ko bar vrne, morajo vedeti, da se bo vrnil v foo, ki ga je imenoval. 563 00:38:52,610 --> 00:39:01,360 Tako Povratni naslov je naslov funkciji, ki jo ima, da se vrnete, ko je funkcija vrne. 564 00:39:01,360 --> 00:39:05,830 Razlog, da je pomembno za buffer overflow napade je zato, ker, preprosto, 565 00:39:05,830 --> 00:39:09,580 hekerji želeli spremeniti, da povratni naslov. 566 00:39:09,580 --> 00:39:14,950 Namesto da bi šel nazaj na foo, bom šel nazaj tja, kjer heker želi, da grem nazaj. 567 00:39:14,950 --> 00:39:17,760 In, prikladno, kjer heker pogosto hoče iti nazaj 568 00:39:17,760 --> 00:39:22,400 je začetek pufra, ki smo ga je bilo prvotno. 569 00:39:22,400 --> 00:39:26,170 Tako obvestilo, še enkrat, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Aparat je primer Little Indian sistema, 571 00:39:28,490 --> 00:39:34,140 Tako je celo, ali kazalec shranjeno z bajtov ukinjenih. 572 00:39:34,140 --> 00:39:38,980 Torej, tukaj vidimo - je to? Ja. 573 00:39:38,980 --> 00:39:45,660 Vidimo Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Spominjam se šestnajstiških številk? 575 00:39:48,250 --> 00:39:50,640 Ne bomo obrnili šestnajstiških številk v Little Indian, 576 00:39:50,640 --> 00:39:56,110 ker 2 šestnajstiških števk sestavljajo enotno bajt, in smo obrnili bajte. 577 00:39:56,110 --> 00:40:00,300 Zato ne hranimo, kot so, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Hranimo, namesto, vsak par 2 številk, začenši z desne. 579 00:40:07,520 --> 00:40:10,880 Ta naslov se nanaša na naslov začetka 580 00:40:10,880 --> 00:40:15,190 naše pufra, da smo dejansko želeli prekopirati v na prvem mestu. 581 00:40:15,190 --> 00:40:19,230 Razlog, da je koristno, ker, kaj če napadalec 582 00:40:19,230 --> 00:40:24,100 se je zgodilo, namesto da niz, ki je bil pravkar 583 00:40:24,100 --> 00:40:27,060 neškodljiv niz, kot svoje ime ali kaj podobnega, 584 00:40:27,060 --> 00:40:33,900 kaj če, namesto tega, da so niz le nekatere naključne kode 585 00:40:33,900 --> 00:40:38,610 da je storil vse, kar so hoteli to narediti? 586 00:40:38,610 --> 00:40:45,630 Tako da bi lahko - ne morem razmišljati o vseh kul kode. 587 00:40:45,630 --> 00:40:47,780 Lahko bi bilo karkoli, čeprav. Koli katastrofalna številka. 588 00:40:47,780 --> 00:40:51,440 Če bi hoteli, bi lahko nekaj naredi na segmentih napak, a to bi bilo nesmiselno. 589 00:40:51,440 --> 00:40:54,950 Ponavadi to kramp vaš sistem. 590 00:40:54,950 --> 00:40:59,930 >> Ok. CS50 knjižnica. 591 00:40:59,930 --> 00:41:04,800 To je, v bistvu, getInt, getString vse tiste funkcije, smo poskrbeli za vas. 592 00:41:04,800 --> 00:41:10,630 Torej imamo char * niz, in to je abstrakcija, ki smo odpihnilo 593 00:41:10,630 --> 00:41:12,450 na neki točki v času semestra. 594 00:41:12,450 --> 00:41:18,220 Ne pozabite, da je niz le nabor znakov. 595 00:41:18,220 --> 00:41:23,240 Torej, tukaj vidimo skrajšana različica getString. 596 00:41:23,240 --> 00:41:25,920 Moral bi se ozremo na to, da se spomnimo, kako je to dejansko izvaja. 597 00:41:25,920 --> 00:41:30,950 Ključni podatki so opazili, smo dobili v en znak naenkrat 598 00:41:30,950 --> 00:41:34,570 od standard, ki je prav tako kot nam tipkanje po tipkovnici. 599 00:41:34,570 --> 00:41:37,890 Torej sam znak naenkrat, in če bomo dobili preveč znakov, 600 00:41:37,890 --> 00:41:40,580 Torej, če je n + 1, večjo od zmogljivosti 601 00:41:40,580 --> 00:41:44,140 potem moramo povečati zmogljivosti našega medpomnilnika. 602 00:41:44,140 --> 00:41:47,780 Tako da tukaj smo podvojitvijo naše medpomnilnika. 603 00:41:47,780 --> 00:41:51,840 In da se ohranja bo, bomo vstaviti znak v našo buffer 604 00:41:51,840 --> 00:41:56,220 dokler ne prejmemo novo linijo ali konec datoteke ali karkoli, 605 00:41:56,220 --> 00:41:59,380 V tem primeru, bomo končali z vrvico in nato realno getString 606 00:41:59,380 --> 00:42:05,120 skrči spomin, kot če bomo dodeljenih preveč pomnilnika bom šel nazaj in skrči malo. 607 00:42:05,120 --> 00:42:08,830 Torej ne bomo prikazali, ampak glavna ideja je 608 00:42:08,830 --> 00:42:11,960 ima brati v en znak naenkrat. 609 00:42:11,960 --> 00:42:17,140 Ne more samo brati v vso stvar naenkrat, 610 00:42:17,140 --> 00:42:19,550 ker je njihov varovalni le določene velikosti. 611 00:42:19,550 --> 00:42:26,590 Torej, če je niz, ki ga je poskušal vstaviti buffer je prevelika, potem bi se razlivala. 612 00:42:26,590 --> 00:42:28,940 Tako da tukaj smo preprečili, da jih samo branje v enem značaja 613 00:42:28,940 --> 00:42:33,750 v času in vedno, kadar koli bi bilo potrebno. 614 00:42:33,750 --> 00:42:40,270 Torej getInt in druge funkcije knjižnice CS50 nagibajo k uporabi getString 615 00:42:40,270 --> 00:42:42,310 v njihovih izvedb. 616 00:42:42,310 --> 00:42:45,370 Zato sem poudaril pomembne stvari tukaj. 617 00:42:45,370 --> 00:42:49,460 Poziva getString, da bi dobili niz. 618 00:42:49,460 --> 00:42:51,710 Če getString ni vrnil spomin, 619 00:42:51,710 --> 00:42:54,270 ne pozabite, da getString mallocs nekaj, tako da vsakič, ko pokličete getString 620 00:42:54,270 --> 00:42:57,820 ne bi smeli (nerazumljivi) brezplačno, ki niz, ki ste jo dobili. 621 00:42:57,820 --> 00:43:02,870 Torej tukaj, če ne bi malloc nekaj vrnemo INT_MAX kot le zastave, da 622 00:43:02,870 --> 00:43:05,650 hej, nismo bili dejansko sposobni, da bi dobili celo število. 623 00:43:05,650 --> 00:43:10,830 Moral bi ignorirati vse, kar se vrnem k tebi, ali 624 00:43:10,830 --> 00:43:15,540 vam ne bi bilo treba to obravnavati kot veljavno vhod. 625 00:43:15,540 --> 00:43:21,360 Nazadnje, ob predpostavki, da je uspelo, bomo uporabili sscanf s tem posebne zastave, 626 00:43:21,360 --> 00:43:23,820 kar pomeni, prvo tekmo celo število, 627 00:43:23,820 --> 00:43:26,770 potem se ujemajo nobenih znakov po tem celo število. 628 00:43:26,770 --> 00:43:29,070 Torej, opazil si želimo, da enaki 1. 629 00:43:29,070 --> 00:43:32,940 Torej sscanf vrne koliko tekem, če uspešno postavil? 630 00:43:32,940 --> 00:43:37,010 To bo vrnil 1, če se uspešno ujema celo število, 631 00:43:37,010 --> 00:43:40,890 da se bodo vrnili 0, če se ne ujema z celo število, in se bo vrnil 2 632 00:43:40,890 --> 00:43:45,920 če se ujema število sledi nek znak. 633 00:43:45,920 --> 00:43:49,780 Tako smo opazili ponoviti, če bomo vse kaj drugega kot 1 tekmo. 634 00:43:49,780 --> 00:43:55,230 Če torej vnesena 1, 2, 3, C, ali 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 nato 1, 2, 3, sta se shrani v celo število 636 00:43:57,400 --> 00:43:59,620 X se shranijo na značaj, 637 00:43:59,620 --> 00:44:06,410 sscanf bi vrnil 2, in želimo ponoviti, ker smo le želeli celo število. 638 00:44:06,410 --> 00:44:09,810 >> Hitro piha skozi HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language je strukturo in semantiko na spletu. 640 00:44:15,340 --> 00:44:19,960 Tukaj je primer iz predavanja, kjer smo imeli oznake HTML. 641 00:44:19,960 --> 00:44:22,110 Imamo oznake glava, telo oznake, 642 00:44:22,110 --> 00:44:27,770 imamo primere praznih oznak, kjer smo dejansko nimajo začetka in tesno oznako, 643 00:44:27,770 --> 00:44:30,820 imamo samo povezavo in podobo. 644 00:44:30,820 --> 00:44:38,480 Ni zapiranje slike tag, tam je samo ena oznaka, ki dosega vse oznake mora storiti. 645 00:44:38,480 --> 00:44:41,950 Povezava je na primer, da bomo videli, kako se povezati z CSS, 646 00:44:41,950 --> 00:44:45,910 scenarij je primer, kako se povežete z zunanjim JavaScript. 647 00:44:45,910 --> 00:44:53,100 To je zelo enostavno, in ne pozabite, HTML ni programski jezik. 648 00:44:53,100 --> 00:44:58,250 Tu, se spomniš, kako bi definirali obliko ali vsaj kaj bi to naredili? 649 00:44:58,250 --> 00:45:01,740 Taka oblika je dejanje in metodo. 650 00:45:01,740 --> 00:45:06,210 Metode, ki vam bo vedno samo videti, so GET in POST. 651 00:45:06,210 --> 00:45:09,040 Torej, dobil je različica, kjer postane stvar dal v URL. 652 00:45:09,040 --> 00:45:11,680 POST je, če se ne dajo v URL. 653 00:45:11,680 --> 00:45:18,520 Namesto tega se vsi podatki iz obrazca se vstavi bolj skrito v zahtevi HTTP. 654 00:45:18,520 --> 00:45:22,390 Torej, tukaj, akcija opredeljuje kjer Zahteva HTTP gre. 655 00:45:22,390 --> 00:45:27,490 Kam gre, je google.com / search. 656 00:45:27,490 --> 00:45:32,890 Metoda. Ne pozabite razlike med GET in POST, 657 00:45:32,890 --> 00:45:37,200 in samo reči kot na primer, če želite, da nekaj zaznamkov. 658 00:45:37,200 --> 00:45:40,660 Nikoli ne boste mogli zaznamek POST URL 659 00:45:40,660 --> 00:45:44,970 ker se podatki, ki niso vključeni v URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, zdaj je Hypertext Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 Hypertext Transfer Protocol, bi pričakovali, da bi prenos 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, in to počne. 663 00:45:57,710 --> 00:46:00,170 Ampak to prenese tudi vse slike, ki jih najdete na spletu, 664 00:46:00,170 --> 00:46:05,400 vsi prenosi, ki jih naredite začeti čim zahtevo HTTP. 665 00:46:05,400 --> 00:46:10,350 Torej HTTP je samo jezik svetovnega spleta. 666 00:46:10,350 --> 00:46:15,610 In tukaj boste morali priznati takšno zahtevo HTTP. 667 00:46:15,610 --> 00:46:19,300 Tu HTTP/1.1 na strani samo pravi, da je različica 668 00:46:19,300 --> 00:46:21,570 protokola sem uporabo. 669 00:46:21,570 --> 00:46:25,770 To je precej vedno bo HTTP/1.1, kot boste videli. 670 00:46:25,770 --> 00:46:30,110 Potem vidimo, da je bil to GET, POST alternativa pa, da boste lahko videli. 671 00:46:30,110 --> 00:46:40,790 In URL, da sem poskušal obiskati bil www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Torej, ne pozabite, da je to, q vprašaj = bla bla bla, 673 00:46:44,240 --> 00:46:49,040 je vrsta stvari, ki se vloži na obrazcu. 674 00:46:49,040 --> 00:46:51,830 Odgovor je morda vrnil k meni, bi izgledala nekako takole. 675 00:46:51,830 --> 00:46:54,050 Again, začenši s protokolom, ki se dogaja, da se da, 676 00:46:54,050 --> 00:46:59,190 sledi statusno kodo. Tukaj je 200 OK. 677 00:46:59,190 --> 00:47:05,060 In končno, bo spletna stran, ki sem dejansko zahteval jih je treba upoštevati. 678 00:47:05,060 --> 00:47:08,210 Mogoče koda stanja lahko vidite, in da bi morali vedeti več od njih. 679 00:47:08,210 --> 00:47:12,770 200 OK, ste verjetno že videli. 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 Ponavadi, če greste na spletno stran, in kaj je zlomljena ali njihove PHP kodo zruši, 682 00:47:22,140 --> 00:47:24,930 ker je v aparatu imamo tako velik oranžna škatla 683 00:47:24,930 --> 00:47:27,830 da pride in reče, kot, da je nekaj narobe, ta koda ne deluje 684 00:47:27,830 --> 00:47:30,380 ali Ta funkcija je slabo. 685 00:47:30,380 --> 00:47:33,230 Ponavadi spletnih strani, ne želim, da vedo, katere funkcije so pravzaprav slaba, 686 00:47:33,230 --> 00:47:37,880 Torej, namesto da bi zdej dal 500 notranje napake strežnika. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP je 1 plast pod HTTP. 688 00:47:43,050 --> 00:47:47,550 Ne pozabite, da je internet izven svetovnega spleta. 689 00:47:47,550 --> 00:47:52,270 Všeč mi je, če igrajo spletne igre, ki ne gredo skozi HTTP, 690 00:47:52,270 --> 00:47:55,740 to se dogaja skozi drugačen - to je še vedno uporabljajo internet, 691 00:47:55,740 --> 00:47:58,900 vendar se ne uporabljajo HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP je samo en primer protokola, ki temelji na TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP dobesedno pomeni internetnega protokola. 694 00:48:07,820 --> 00:48:11,500 Vsak računalnik ima naslov IP, so ti 4-mestno stvari 695 00:48:11,500 --> 00:48:16,510 kot 192.168.2.1, ali karkoli, ki kaže, da je lokalna ena. 696 00:48:16,510 --> 00:48:23,390 Ampak to je vzorec IP naslov. 697 00:48:23,390 --> 00:48:29,060 Torej DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 To je tisto, kar se kaže stvari, kot so google.com z dejanskim IP naslov. 699 00:48:33,410 --> 00:48:37,700 Torej, če ste tip, da je IP naslov v URL, 700 00:48:37,700 --> 00:48:40,850 da bi vas na Googlu, ampak ponavadi ne spomniš tistih stvari. 701 00:48:40,850 --> 00:48:45,470 Ste nagnjeni k namesto spomnim google.com. 702 00:48:45,470 --> 00:48:51,560 Zadnja stvar, ki jo imamo, je pristanišča, kjer je ta del TCP IP. 703 00:48:51,560 --> 00:48:54,880 TCP ne več. Razmislite o tem, recimo, da imate svoj spletni brskalnik teče. 704 00:48:54,880 --> 00:48:58,670 Morda imate nekaj email aplikacije, ki teče; 705 00:48:58,670 --> 00:49:02,150 Mogoče imate kakšen drug program, ki uporablja internet teče. 706 00:49:02,150 --> 00:49:05,090 Vsi potrebujejo dostop do interneta, 707 00:49:05,090 --> 00:49:08,100 vendar pa ima vaš računalnik samo 1 WiFi kartico ali karkoli. 708 00:49:08,100 --> 00:49:10,780 Torej, vrata so način, da smo sposobni razdeliti 709 00:49:10,780 --> 00:49:13,550 kako so ti zahtevki lahko uporabljajo internet. 710 00:49:13,550 --> 00:49:17,230 Vsaka vloga dobi 1 posebna vrata, ki jih lahko poslušate na, 711 00:49:17,230 --> 00:49:19,670 in privzeto HTTP uporablja vrata 80. 712 00:49:19,670 --> 00:49:22,410 Nekatere e-poštne storitve uporabljajo 25. 713 00:49:22,410 --> 00:49:24,490 Nizke oštevilčena tisti ponavadi pridržane. 714 00:49:24,490 --> 00:49:29,270 Ti so običajno sposobni priti višje oštevilčene tiste 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 slog spletnih strani s CSS, ne s HTML. 717 00:49:36,030 --> 00:49:38,440 Obstajajo 3 krajev, ki jih lahko dajo svoj CSS. 718 00:49:38,440 --> 00:49:46,300 To je lahko inline, med slog oznake, ali v popolnoma ločeno datoteko in nato povezana prijavite 719 00:49:46,300 --> 00:49:48,470 In tu je samo primer CSS. 720 00:49:48,470 --> 00:49:50,450 Vi bi morali priznati ta vzorec, 721 00:49:50,450 --> 00:49:54,310 kjer prvi primer se sva ujemanje telesno oznako, 722 00:49:54,310 --> 00:49:56,680 in tu smo centriranje telesa oznako. 723 00:49:56,680 --> 00:50:00,420 Drugi primer, smo ujemanje stvar 724 00:50:00,420 --> 00:50:04,740 z ID nogo, in mi uporabo nekaterih stilov za to. 725 00:50:04,740 --> 00:50:07,310 Opazimo, da osebne noge besedilne poravnan na levo, 726 00:50:07,310 --> 00:50:09,840 ker se telo text-poravna center. 727 00:50:09,840 --> 00:50:13,180 Noga je v notranjosti telesa. 728 00:50:13,180 --> 00:50:16,470 To bo, namesto, text-align levo, čeprav telo pravi text-align center. 729 00:50:16,470 --> 00:50:18,880 To je cela kaskadno del. 730 00:50:18,880 --> 00:50:22,110 Lahko imaš - lahko določite sloge za telo, 731 00:50:22,110 --> 00:50:25,320 in potem se stvari v telesu, lahko določite več posebnih stilov, 732 00:50:25,320 --> 00:50:28,160 in stvari delujejo, kot ste pričakovali. 733 00:50:28,160 --> 00:50:34,420 Bolj specifične CSS projektantje prednost. 734 00:50:34,420 --> 00:50:46,140 Mislim, da je. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Pozdravljeni vsi skupaj. Če bi le lahko dobili vašo pozornost. 736 00:50:49,260 --> 00:50:53,990 Ali sem in bom šel skozi PHP in SQL zelo hitro. 737 00:50:53,990 --> 00:51:00,310 Torej, lahko začnemo. PHP je kratica za PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 In kot bi morali vsi veste, da je skriptni jezik na strani strežnika, 739 00:51:03,730 --> 00:51:06,800 in jih uporabljamo za zadnji konec spletne strani, 740 00:51:06,800 --> 00:51:12,540 in kako to počne veliko izračunov, v ozadju-scenes del. 741 00:51:12,540 --> 00:51:17,510 Sintaksa. To ni všeč C, presenečenje. 742 00:51:17,510 --> 00:51:22,060 Vedno se mora začeti z, če vidite, - ne morem premakniti naprej. 743 00:51:22,060 --> 00:51:31,340 Ogledate si lahko, kar potrebujete nove vrste naramnic in potem boste morali za? Php. 744 00:51:31,340 --> 00:51:35,780 To je vedno kaj imate za oblikovanje vaše PHP besedilo, vaš PHP kodo. 745 00:51:35,780 --> 00:51:39,180 Zato ne more biti zgolj kot C, kjer si nekako ga dal na prvo. 746 00:51:39,180 --> 00:51:42,290 Morate ga vedno obkrožajo. 747 00:51:42,290 --> 00:51:47,610 In zdaj, glavni skladnja je, da je treba vse spremenljivke začeti z znakom $. 748 00:51:47,610 --> 00:51:49,490 Jo morate storiti, če ste bili opredeljeni, morate to storiti 749 00:51:49,490 --> 00:51:51,860 ko ste se nanašajo na z njimi kasneje. 750 00:51:51,860 --> 00:51:56,510 Vedno morate, da je $. To je vaš novi najboljši prijatelj, precej. 751 00:51:56,510 --> 00:52:01,690 Saj ne - za razliko od C, vam ni treba dati kakšen spremenljive vrste je. 752 00:52:01,690 --> 00:52:04,940 Torej, ko boste potrebovali $, vam ni treba dati, kot so, 753 00:52:04,940 --> 00:52:09,470 int x ali niz y, in tako dalje, in tako dalje. 754 00:52:09,470 --> 00:52:11,490 Tako majhna razlika. 755 00:52:11,490 --> 00:52:15,590 Kot rezultat tega, to pomeni, da je PHP šibko tipa. 756 00:52:15,590 --> 00:52:19,310 PHP je šibko tip jezika, in to je slabo natipkano spremenljivk. 757 00:52:19,310 --> 00:52:24,020 Z drugimi besedami to pomeni, da lahko preklapljate med različnimi vrstami tipov spremenljivk. 758 00:52:24,020 --> 00:52:27,230 Lahko shranite številko 1 kot int, 759 00:52:27,230 --> 00:52:29,650 ga lahko shranite kot niz, in ga lahko shranite kot likvidna sredstva, 760 00:52:29,650 --> 00:52:33,550 in to bo vse, da številka 1. 761 00:52:33,550 --> 00:52:36,080 Čeprav ste jo shranite v različnih oblikah, 762 00:52:36,080 --> 00:52:39,120 je še vedno - je spremenljivka vrste še vedno drži na koncu. 763 00:52:39,120 --> 00:52:41,540 Torej, če pogledaš tukaj, če se spomnite iz pset 7, 764 00:52:41,540 --> 00:52:43,500 mnogi od vas verjetno imel težave s tem. 765 00:52:43,500 --> 00:52:47,280 Dve enaki znaki, 3 enake znake, 4 enakih znakov. 766 00:52:47,280 --> 00:52:49,990 Ok, ne obstajajo 4 enakih znakov, vendar obstajajo 2 in 3. 767 00:52:49,990 --> 00:52:53,320 Uporabljate 2 enakih znakov, da preveri vrednosti. 768 00:52:53,320 --> 00:52:55,830 To lahko preverite preko vrste. 769 00:52:55,830 --> 00:52:58,770 Torej, če si lahko ogledate v prvem primeru, 770 00:52:58,770 --> 00:53:02,210 Imam num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Torej vaša int in vaš niz sta oba, tehnično, 1, 772 00:53:06,710 --> 00:53:10,790 ampak oni so različne vrste. Ampak za dvojno enakimi, bo to še vedno mimo. 773 00:53:10,790 --> 00:53:15,510 Vendar pa se za trojno enakimi, preveri vrednosti kot tudi različne vrste. 774 00:53:15,510 --> 00:53:18,760 To pomeni, da je ne bo, da prenese v tem drugem primeru tukaj, 775 00:53:18,760 --> 00:53:22,350 , kjer boste uporabljali 3 enake znake namesto tega. 776 00:53:22,350 --> 00:53:26,590 Tako da je velika razlika, da bi morali vsi so pokazale zdaj. 777 00:53:26,590 --> 00:53:31,570 >> String združevanje je še ena močna stvar, ki jo lahko uporabite v PHP. 778 00:53:31,570 --> 00:53:34,080 To je v bistvu samo to priročno pika zapis, 779 00:53:34,080 --> 00:53:36,230 in to je, kako si lahko veže strune skupaj. 780 00:53:36,230 --> 00:53:40,800 Torej, če imate mačka in imate psa, in želite postaviti 2 strune skupaj, 781 00:53:40,800 --> 00:53:44,080 lahko uporabite obdobje, to pa je, kako to deluje. 782 00:53:44,080 --> 00:53:46,660 Lahko jih tudi samo mesto drug poleg drugega, 783 00:53:46,660 --> 00:53:49,030 kot lahko vidite tukaj, v spodnji primer, 784 00:53:49,030 --> 00:53:51,610 kjer sem echo niz 1, vesoljska niz 2. 785 00:53:51,610 --> 00:53:56,930 PHP bodo vedeli, da jih bodo zamenjali kot take. 786 00:53:56,930 --> 00:53:59,780 Nizi. Zdaj, v PHP, obstajajo 2 različni vrsti nizi. 787 00:53:59,780 --> 00:54:03,180 Lahko imaš redne nize, lahko pa tudi asociativne nize, 788 00:54:03,180 --> 00:54:06,040 in smo šli skozi njih prav zdaj. 789 00:54:06,040 --> 00:54:08,280 Redni nizi so le ta v C, 790 00:54:08,280 --> 00:54:11,240 in tako imate indekse, ki so oštevilčene. 791 00:54:11,240 --> 00:54:13,160 Zdaj smo šele tekoč, da ga ustvarite in dal - 792 00:54:13,160 --> 00:54:15,500 Tako je to, kako bomo ustvarili prazen niz, nato pa gremo na 793 00:54:15,500 --> 00:54:17,310 dana v indeksom 0.. 794 00:54:17,310 --> 00:54:19,200 Bomo dal številko 6 je vrednost 6. 795 00:54:19,200 --> 00:54:21,500 Si jo lahko ogledate na dnu tukaj. 796 00:54:21,500 --> 00:54:24,240 Where's - na indeksno številko 1, bomo dal vrednost število 4, 797 00:54:24,240 --> 00:54:26,720 in tako lahko vidite, da je 6, tam je 4, 798 00:54:26,720 --> 00:54:29,160 in nato kot sva tiskanje stvari, 799 00:54:29,160 --> 00:54:33,550 ko smo poskušali in natisniti vrednost, shranjeno na indeks število 0, 800 00:54:33,550 --> 00:54:36,900 potem bomo videli vrednost 6 se natisne. Kul? 801 00:54:36,900 --> 00:54:40,160 Tako da je redni nizi za vas. 802 00:54:40,160 --> 00:54:42,750 Drug način lahko dodate tudi stvari za redne nizi zdaj 803 00:54:42,750 --> 00:54:44,780 je, da jih lahko preprosto dodajte na koncu. 804 00:54:44,780 --> 00:54:47,240 To pomeni, da vam ne bi bilo treba določiti poseben indeks. 805 00:54:47,240 --> 00:54:51,000 Lahko vidite številko, in nato v oklepaju pa je indeks ni podan. 806 00:54:51,000 --> 00:54:56,270 In to vedo - PHP bodo vedeli, da jo dodajte na konec seznama, naslednjo prosto mesto. 807 00:54:56,270 --> 00:54:59,190 Torej si lahko ogledate na 1 ravno tukaj na tem mestu 0, 808 00:54:59,190 --> 00:55:02,690 2. šel tam na prvem mestu. 809 00:55:02,690 --> 00:55:04,690 3 gre - je tam dodana kot dobro. 810 00:55:04,690 --> 00:55:06,720 Tako da nekako smiselno. Ti si samo nenehno dodajanjem, 811 00:55:06,720 --> 00:55:09,360 in potem, ko sva odmeval indeks številko 1, 812 00:55:09,360 --> 00:55:13,080 bo izpisal vrednost 2. 813 00:55:13,080 --> 00:55:16,800 >> Potem imamo nize, ki so asociativne nize. 814 00:55:16,800 --> 00:55:19,370 Asociativne nize, namesto da numerične vrednosti, 815 00:55:19,370 --> 00:55:23,630 kaj storiti, je, da imajo indekse, ki so jih niza. 816 00:55:23,630 --> 00:55:25,670 Ogledate si lahko, namesto da bi - Znebil sem se vseh teh indeksov številka, 817 00:55:25,670 --> 00:55:32,140 in zdaj je key1, key2, key3, in oni so v narekovajih, da se označi, da oni vse strune. 818 00:55:32,140 --> 00:55:34,470 Torej imamo lahko zgled za to. 819 00:55:34,470 --> 00:55:38,790 Primer tega je, da imamo TF, in to je ime indeks. 820 00:55:38,790 --> 00:55:42,030 Bomo dal "Alija" kot ime na indeks, zaužitih kalorij, 821 00:55:42,030 --> 00:55:47,640 bomo lahko dal notr tokrat namesto niza, 822 00:55:47,640 --> 00:55:52,240 in nato na podlagi indeksnih všeč, lahko damo celotno paleto znotraj tega. 823 00:55:52,240 --> 00:55:55,490 Torej, to je nekako - to je podoben konceptu, kako smo se imeli 824 00:55:55,490 --> 00:55:58,930 indeksi s številkami, zdaj pa lahko spremenite indeksov okoli 825 00:55:58,930 --> 00:56:03,890 da jih imajo kot strune namesto tega. 826 00:56:03,890 --> 00:56:06,070 Prav tako lahko to storite, poleg samo delaš posamezno, 827 00:56:06,070 --> 00:56:09,400 lahko to storite vse v enem bloku. Torej, lahko vidite, da je TF na tem polju, 828 00:56:09,400 --> 00:56:13,350 in potem smo jih nastavite vse v enem velikan kvadratni oklepaj nizu. 829 00:56:13,350 --> 00:56:15,220 Tako da se lahko hitro stvari. 830 00:56:15,220 --> 00:56:19,730 To je bolj stilistične izbire kot ne. 831 00:56:19,730 --> 00:56:21,550 Imamo tudi zank. 832 00:56:21,550 --> 00:56:26,020 V C imamo zank, ki delujejo, kot je ta. 833 00:56:26,020 --> 00:56:29,690 Imeli smo niz, in smo šli od indeksa 0 do konca seznama, 834 00:56:29,690 --> 00:56:31,740 in vse to smo natisniti, kajne? 835 00:56:31,740 --> 00:56:33,880 Razen problem je, za asociativne nize, 836 00:56:33,880 --> 00:56:36,610 ne nujno vedeti tiste numerične vrednosti 837 00:56:36,610 --> 00:56:39,610 ker zdaj imamo indeksov nizov. 838 00:56:39,610 --> 00:56:44,800 Zdaj bomo uporabili foreach zanke, ki spet upajmo, uporabljene v pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach zanke bo samo vedeti, da vsak del seznama. 840 00:56:48,930 --> 00:56:52,450 In ni nujno, da veš točno številčno indeks, ki ga imate. 841 00:56:52,450 --> 00:56:56,490 Torej imate foreach sintakso, zato je foreach, si dal niz. 842 00:56:56,490 --> 00:57:00,430 Torej je moja matrika se imenuje pset, nato pa kot beseda kot, 843 00:57:00,430 --> 00:57:04,530 in potem dal to lokalno začasno spremenljivko, da boste za uporabo 844 00:57:04,530 --> 00:57:10,690 samo za določeno stvar, ki se dogaja, da imajo posebno - 845 00:57:10,690 --> 00:57:14,770 en primer ali en del matrike. 846 00:57:14,770 --> 00:57:18,350 Pset num bo imel 1, nato pa bo morda za število 6, 847 00:57:18,350 --> 00:57:20,410 in potem bo v njej številko 2. 848 00:57:20,410 --> 00:57:26,630 Vendar je bilo zagotovljeno, da gredo skozi vsako posamezno vrednost, ki je v matriki. 849 00:57:26,630 --> 00:57:30,530 Uporabne funkcije, ki jih morate vedeti v PHP, so potrebna, 850 00:57:30,530 --> 00:57:35,880 tako, da poskrbi, da ste tudi nekatere datoteke, echo, exit, prazen. 851 00:57:35,880 --> 00:57:40,490 Priporočam vam, pogled na pset 7 in pogled na teh funkcij. 852 00:57:40,490 --> 00:57:42,810 Morda boste morali vedeti, tiste, 853 00:57:42,810 --> 00:57:47,060 tako da bi zagotovo vedeli, kaj točno, ti so vsi počnejo. 854 00:57:47,060 --> 00:57:50,080 >> In zdaj smo šli skozi področje zelo hitro. 855 00:57:50,080 --> 00:57:53,490 V obsegu, PHP je nekako funky stvar, za razliko od C, 856 00:57:53,490 --> 00:57:56,170 in tako smo le, da bo šel skozi to hitro. 857 00:57:56,170 --> 00:57:58,930 Torej, recimo, da začnemo na tej puščice, da imamo tam. 858 00:57:58,930 --> 00:58:02,900 In bomo začeli s $ i. Torej je spremenljivka "i", se bo 0, 859 00:58:02,900 --> 00:58:06,730 in smo šele tekoč, da ga natisnete v tisti veliki beli škatli tam. 860 00:58:06,730 --> 00:58:09,220 Bomo začeli z I0, in potem bomo to odmeva. 861 00:58:09,220 --> 00:58:12,670 Tako da je 0. 862 00:58:12,670 --> 00:58:15,210 In potem bomo to prirastek, ki jih je za zanke, 863 00:58:15,210 --> 00:58:17,810 in potem se dogaja, da se vrednost 1. 864 00:58:17,810 --> 00:58:20,070 Eden od njih je manj kot 3, tako da se bo skozi, da je za zanke, 865 00:58:20,070 --> 00:58:23,230 in potem bomo videli, da ponovno natisnjen. 866 00:58:23,230 --> 00:58:25,520 Bomo spet prirastek do 2, 867 00:58:25,520 --> 00:58:29,860 in 2 je manj kot 3, tako da bo že minilo za zanke, in ga bomo natisnili 2. 868 00:58:29,860 --> 00:58:35,100 Potem boste, upoštevajte, da je 3 ne manj kot 3, tako da bomo iztrgajo iz zanke for. 869 00:58:35,100 --> 00:58:40,050 Torej, zdaj smo zapustili, nato pa smo šli v aFunction. 870 00:58:40,050 --> 00:58:45,010 Ok. Tako da boste morali upoštevati, da ta spremenljivka, ki smo jih ustvarili, 871 00:58:45,010 --> 00:58:48,270 "i" spremenljiva, ni lokalno zajeta. 872 00:58:48,270 --> 00:58:50,280 To pomeni, da to ni lokalen za zanke, 873 00:58:50,280 --> 00:58:58,060 in da spremenljivka še vedno lahko dostopate in spreminjate kasneje, in bo še vedno učinkovita. 874 00:58:58,060 --> 00:59:02,160 Torej, če greš v funkciji zdaj, boste videli, da imamo na voljo tudi na 'I' spremenljivka, 875 00:59:02,160 --> 00:59:05,320 in bomo prirastek "i" + +. 876 00:59:05,320 --> 00:59:09,410 Ti misliš, na prvi, ki temelji na C, da je to kopija "i" spremenljivko. 877 00:59:09,410 --> 00:59:12,830 To je povsem druga stvar, ki je pravilna. 878 00:59:12,830 --> 00:59:16,560 Torej, ko smo ga natisnete, gremo na tiskanje "i" + +, ki se bo izpisal, da je 4, 879 00:59:16,560 --> 00:59:19,640 in potem bomo - mi je žal. 880 00:59:19,640 --> 00:59:22,030 Potem bomo na koncu iz te funkcije, 881 00:59:22,030 --> 00:59:24,820 in bomo tam, kjer je zdaj, da puščica. 882 00:59:24,820 --> 00:59:29,190 To pomeni, da takrat, pa čeprav funkcija spremenila vrednost "i", 883 00:59:29,190 --> 00:59:32,620 ni spremenila izven funkcije, 884 00:59:32,620 --> 00:59:35,060 ker je funkcija ločeno področje. 885 00:59:35,060 --> 00:59:38,960 To pomeni, da, ko smo odmeva "i", ni pa v področje uporabe funkcije spremenila 886 00:59:38,960 --> 00:59:43,660 in tako potem gremo znova tiskati 3. 887 00:59:43,660 --> 00:59:47,520 Različne stvari o obsegu v PHP kot v C. 888 00:59:47,520 --> 00:59:51,130 >> Zdaj v PHP in HTML. 889 00:59:51,130 --> 00:59:53,510 PHP se uporablja za izdelavo spletne strani dinamično. 890 00:59:53,510 --> 00:59:58,660 Nekako naredi stvari drugačne. 891 00:59:58,660 --> 01:00:02,090 Imamo razlikuje od HTML. 892 01:00:02,090 --> 01:00:05,230 S HTML, imamo vedno samo isto stvar, kot je statično kako Rob je pokazala, 893 01:00:05,230 --> 01:00:09,370 ker so PHP, lahko spremenite stvari na podlagi kdo je uporabnik. 894 01:00:09,370 --> 01:00:11,830 Torej, če imam to, imam, "Vi ste prijavljeni kot -" in nato ime, 895 01:00:11,830 --> 01:00:14,420 in sem lahko spremenite ime. Torej, zdaj je ime Joseph, 896 01:00:14,420 --> 01:00:18,880 in je "o meni", potem pa sem lahko tudi spremenite ime, da ima Tommy. 897 01:00:18,880 --> 01:00:21,700 In da bi bila stvar drugačna. 898 01:00:21,700 --> 01:00:23,840 Torej, potem lahko spremenite tudi različne stvari o njem, 899 01:00:23,840 --> 01:00:27,070 in bo prikazoval različne vsebine glede na ime. 900 01:00:27,070 --> 01:00:31,430 Torej PHP lahko nekako spremeniti tisto, kar se dogaja v vaši spletni strani. 901 01:00:31,430 --> 01:00:33,540 Enako tukaj. Kljub temu, upoštevajte, da imajo drugačno vsebino, 902 01:00:33,540 --> 01:00:38,870 čeprav ste tehnično še vedno dostop do te iste spletne strani na površju. 903 01:00:38,870 --> 01:00:43,450 Generiranje HTML. Obstajata 2 različnih načinov, da lahko to storite. 904 01:00:43,450 --> 01:00:48,980 Torej bomo šli skozi te pravice zdaj. Prvi način je, da imate - ja, oprosti. 905 01:00:48,980 --> 01:00:51,150 Torej imate le svoj Regular za zanke v PHP, 906 01:00:51,150 --> 01:00:56,270 in potem odmeva v PHP, in vam odmeva iz HTML. 907 01:00:56,270 --> 01:00:58,720 Uporabo, kar vam Rob je pokazala, HTML, skript 908 01:00:58,720 --> 01:01:04,030 in nato s pomočjo PHP tisk, da ga samo natisnete s spletne strani. 909 01:01:04,030 --> 01:01:09,520 Druga možnost pa je, da to storite, če ste izločiti PHP in HTML. 910 01:01:09,520 --> 01:01:11,940 Tako da lahko imate linijo PHP, ki se začne v zanki, 911 01:01:11,940 --> 01:01:16,020 potem lahko imate linijo HTML v ločenem stvar, 912 01:01:16,020 --> 01:01:19,700 in potem si na koncu zanke, še enkrat, s PHP. 913 01:01:19,700 --> 01:01:21,800 Torej, to je nekako tako izloči. 914 01:01:21,800 --> 01:01:24,020 Na levi strani si lahko, da imaš vse - 915 01:01:24,020 --> 01:01:26,360 to je samo 1 kos PHP. 916 01:01:26,360 --> 01:01:28,510 Na desni lahko vidite, da imate linijo PHP, 917 01:01:28,510 --> 01:01:32,540 imate linijo HTML, in boste spet imeli linijo PHP. 918 01:01:32,540 --> 01:01:36,870 Torej ga izloči v to, kar počnejo. 919 01:01:36,870 --> 01:01:39,330 In boste, upoštevajte, da tako ali tako, za eno od njih, 920 01:01:39,330 --> 01:01:41,980 še vedno natisnete slike, slike, slike, 921 01:01:41,980 --> 01:01:44,540 tako da HTML vedno je natisnjena na enak način. 922 01:01:44,540 --> 01:01:49,870 In potem boste še vedno videli 3 slike prikažejo na vaši spletni strani. 923 01:01:49,870 --> 01:01:52,820 Torej, to je 2 različni načini počne isto stvar. 924 01:01:52,820 --> 01:01:55,060 >> Zdaj imamo oblik in zahtev. Kot vam Rob je pokazala, 925 01:01:55,060 --> 01:01:59,400 obstajajo oblike HTML, in bomo samo vetrič skozi to. 926 01:01:59,400 --> 01:02:02,040 Imate tožbo in imate metodo, in svoje dejanje 927 01:02:02,040 --> 01:02:04,350 lepo od tebe, kam greste, da ga pošljete kaže, in način, ali 928 01:02:04,350 --> 01:02:06,960 to se dogaja, da se GET ali POST. 929 01:02:06,960 --> 01:02:11,220 In zahtevek GET, kot je dejal Rob, pomeni, da boš dal v obliki 930 01:02:11,220 --> 01:02:15,760 in boste videli, da je URL, medtem ko je zahtevo POST ne boste videli v URL. 931 01:02:15,760 --> 01:02:17,840 Tako majhna razlika. 932 01:02:17,840 --> 01:02:19,950 Vendar pa je ena stvar, ki je podobna stvar 933 01:02:19,950 --> 01:02:22,560 je, da so POST in GET enako negotov. 934 01:02:22,560 --> 01:02:26,430 Torej si lahko mislite, da samo zato, ker si tega ne vidi v URL, 935 01:02:26,430 --> 01:02:28,790 to pomeni, POST je bolj varna, 936 01:02:28,790 --> 01:02:34,420 vendar še vedno lahko vidim v tvojih piškotkov v informacijah, ki jih pošiljate. 937 01:02:34,420 --> 01:02:38,260 Torej ne mislim, da je približno ena ali druga. 938 01:02:38,260 --> 01:02:42,160 Druga stvar je tudi omeniti, da imate tudi spremenljivke poglavje. 939 01:02:42,160 --> 01:02:45,850 Vidva to lahko uporabilo v pset 7, da bi dobili svoje uporabniško ime podatke. 940 01:02:45,850 --> 01:02:48,550 Zgodilo se je, da lahko uporabite to asociativno paleto, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, in potem ste mogli dostopati do različnih stvari 942 01:02:53,310 --> 01:02:57,720 in shranite različne stvari po vsej strani. 943 01:02:57,720 --> 01:03:00,750 >> Zadnja stvar je, da imamo SQL, strukturiran jezik poizvedb, 944 01:03:00,750 --> 01:03:04,360 in to je programski jezik za upravljanje podatkovnih baz. 945 01:03:04,360 --> 01:03:08,220 Kaj, točno, so baze podatkov? Oni so zbirke tabel, 946 01:03:08,220 --> 01:03:10,630 in vsaka tabela ima lahko podobne vrste objektov. 947 01:03:10,630 --> 01:03:14,990 Tako smo imeli mizo uporabnikov v vašem financ pset. 948 01:03:14,990 --> 01:03:20,610 In zakaj so koristne? Ker je to način za trajno shranjevanje podatkov. 949 01:03:20,610 --> 01:03:22,840 To je način za sledenje stvari in upravljanje stvari 950 01:03:22,840 --> 01:03:25,890 in dejansko videli na različnih straneh in sledenja. 951 01:03:25,890 --> 01:03:29,930 Ker se, če si jo shranite v tistem enem trenutku takojšnjo 952 01:03:29,930 --> 01:03:33,720 in ga nato uporabiti pozneje, ne boste mogli dostopati do ničesar, ki ste jih shranili. 953 01:03:33,720 --> 01:03:37,660 Imamo 4 glavne stvari, ki jih uporabljamo za SQL ukazi. 954 01:03:37,660 --> 01:03:40,190 Imamo izbiranje, vstavljanje, brisanje in posodabljanje. 955 01:03:40,190 --> 01:03:42,880 Tisti, ki so res pomembne za vas, da vedo za svoj kviz. 956 01:03:42,880 --> 01:03:45,990 >> Hitro bomo šli čez izberite zdaj. 957 01:03:45,990 --> 01:03:48,540 V bistvu, si izberete vrstice iz baze podatkov. 958 01:03:48,540 --> 01:03:52,400 Torej, če imate tukaj - 959 01:03:52,400 --> 01:03:56,740 imamo te 2 različne stvari, in želimo, da izberete iz tabele razredov 960 01:03:56,740 --> 01:04:01,480 kjer je super - če je vrednost v stolpcu 1 super. 961 01:04:01,480 --> 01:04:04,460 Tako lahko vidite, imamo teh 2 stvari ime razreda, 962 01:04:04,460 --> 01:04:08,490 CS50 in Stat110, in imamo ID razreda in slogan. 963 01:04:08,490 --> 01:04:13,150 Zato želimo, da izberete vse te informacije. 964 01:04:13,150 --> 01:04:17,480 Potem si lahko ogledate tukaj, da to je nekako pobiral te super stolpcu 965 01:04:17,480 --> 01:04:25,170 kjer so vse stvari 1, nato pa se je razred ID, ime razreda in slogan, da lahko izločiti. 966 01:04:25,170 --> 01:04:28,100 Kako pa to naredite v kodo? Boste morali uporabiti PHP. 967 01:04:28,100 --> 01:04:33,830 Tako da je nekako, kako so PHP in SQL povezane med seboj. 968 01:04:33,830 --> 01:04:38,130 Zdaj imamo kodo in bomo uporabite našo funkcijo poizvedbe 969 01:04:38,130 --> 01:04:41,370 kot smo to storili v pset 7, in bomo teči SQL poizvedbo. 970 01:04:41,370 --> 01:04:43,870 Potem bomo imeli - 971 01:04:43,870 --> 01:04:46,280 moramo vedno preveriti, če Row je trojni enaka, če false. 972 01:04:46,280 --> 01:04:49,010 Torej še enkrat, boste želeli preveriti vrsto in vrednost, 973 01:04:49,010 --> 01:04:53,880 in potem, če to ne deluje, potem pa bi se opravičil, kot običajno, kot smo to storili v pset 7. 974 01:04:53,880 --> 01:04:55,870 V nasprotnem primeru, da želite zanko skozi vse s tistimi, priročen 975 01:04:55,870 --> 01:04:59,410 foreach zanke, da smo pravkar šla mimo. 976 01:04:59,410 --> 01:05:01,280 Zdaj, ko smo zanka skozi in smo sami naredili v preteklosti, 977 01:05:01,280 --> 01:05:05,080 predpostavimo, da je minilo naše poizvedbe, zdaj imamo foreach zanke. 978 01:05:05,080 --> 01:05:11,050 In prva vrstica ima, tako da tukaj je vrstica, tukaj, to je v škatlah. 979 01:05:11,050 --> 01:05:14,010 To se dogaja, da natisnete vse podatke, da je lahko dobila. 980 01:05:14,010 --> 01:05:18,070 Tako se dogaja, da natisnete na dnu "Želite izvedeti HTML?" 981 01:05:18,070 --> 01:05:23,370 Potem se dogaja, da gredo v naslednjo vrstico, saj je bil izpolnjen prvi zanko, 982 01:05:23,370 --> 01:05:26,510 in tako potem se dogaja, da natisnete drugo linijo njej, 983 01:05:26,510 --> 01:05:32,120 ki se bo STAT110, Najdi vse trenutke. 984 01:05:32,120 --> 01:05:34,290 >> Še zadnja stvar, ki je na SQL ranljivosti. 985 01:05:34,290 --> 01:05:37,300 Vem, David dotaknili to malo na predavanju. 986 01:05:37,300 --> 01:05:40,730 To lahko preberete pozneje. To je res smešno. 987 01:05:40,730 --> 01:05:45,320 SQL Injection je nekako zapleteno stvar. 988 01:05:45,320 --> 01:05:49,890 Recimo, da ste pravkar držijo tiste spremenljivke, ki prav v vašo poizvedbo, 989 01:05:49,890 --> 01:05:52,290 kot vidite v prvi vrstici. 990 01:05:52,290 --> 01:05:54,520 Tako se zdi v redu, kajne? Ti si samo polaganje uporabniško ime 991 01:05:54,520 --> 01:05:58,820 in geslo za SQL poizvedbi, in ga želite poslati off in dobili vse, kar je v vaši podatkovni tabeli. 992 01:05:58,820 --> 01:06:01,450 To se mi zdi zelo preprosta. Torej recimo nekdo postavlja v, 993 01:06:01,450 --> 01:06:04,910 Za geslo te ali besedilo tukaj - 994 01:06:04,910 --> 01:06:06,780 biti dejansko v rdeče polje. 995 01:06:06,780 --> 01:06:11,920 Torej, recimo, da dajo to geslo v - to je tisto, kar so prišli. 996 01:06:11,920 --> 01:06:16,520 Torej, oni so uvedle ali "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Nekako neumno geslom, da imajo. 998 01:06:20,880 --> 01:06:25,070 Sedaj pa samo zamenjajte, in boste, upoštevajte, da je v tej poizvedbi SQL zdaj, 999 01:06:25,070 --> 01:06:29,090 se ocenjuje, da drži vedno, saj boste, upoštevajte, da 1000 01:06:29,090 --> 01:06:32,240 lahko SQL poizvedba izbere vse te informacije 1001 01:06:32,240 --> 01:06:35,420 ali si lahko samo še 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Tako da je vedno tekoč, da oceni, da res. 1003 01:06:41,030 --> 01:06:46,610 To se ne dogaja, da res deluje, ker to pomeni, da lahko hekerji vdreti v vaš sistem. 1004 01:06:46,610 --> 01:06:49,300 Rešitev za to je, da boste morali uporabiti sistem ZOP, 1005 01:06:49,300 --> 01:06:51,360 kar pomeni, da boste morali uporabiti vprałaje, 1006 01:06:51,360 --> 01:06:53,350 , ki je tisto, kar ste vi, ki se uporabljajo v pset 7, 1007 01:06:53,350 --> 01:06:57,620 , kjer boste uporabili vprašaj v mestu, kjer želite postaviti nekaj, 1008 01:06:57,620 --> 01:07:01,430 in potem boš imel vejico, in potem boste imeli kasneje, 1009 01:07:01,430 --> 01:07:07,610 Po nizu, različne spremenljivke, ki jih želite zamenjati v vaš vprašajem. 1010 01:07:07,610 --> 01:07:10,330 Tako boste, upoštevajte, da se tu zdaj imam te rdeče vprałaje. 1011 01:07:10,330 --> 01:07:15,420 Potem sem dal spremenljivke po mojih nizov, tako da vem, da jih bodo zamenjali v tem vrstnem redu potem. 1012 01:07:15,420 --> 01:07:18,470 Da bo poskrbel, da če ga nekdo ne kot je ta, 1013 01:07:18,470 --> 01:07:24,050 in imajo ali 1 = 1 situacijo, ki bo poskrbel, 1014 01:07:24,050 --> 01:07:30,490 na zadnjem koncu, se prepričajte, da v resnici ne bo prekinil SQL poizvedbo. 1015 01:07:30,490 --> 01:07:33,660 Ok, tako da je v bistvu vse, tornado PHP in SQL. 1016 01:07:33,660 --> 01:07:41,520 Veliko sreče vsem vam, in zdaj Ore 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Prav vsi. Čas je, da gredo čez nekaj JavaScript 1018 01:07:44,270 --> 01:07:48,840 in še nekatere druge stvari zelo hitro, tako da ne držiš nocoj. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Da. JavaScript je nekako kul stvar, domnevno. 1020 01:07:56,930 --> 01:07:59,090 Stvari, ki jih resnično morate vedeti o JavaScript, to je nekako kot 1021 01:07:59,090 --> 01:08:03,810 client-side konec, kaj vaša spletna aplikacija je, da se delaš. 1022 01:08:03,810 --> 01:08:08,280 Obstaja nekaj stvari, ki jih preprosto ne želijo skrbeti za ves čas na strani strežnika. 1023 01:08:08,280 --> 01:08:12,880 Vsi mali interakcije, ki poudarja eno stvar, da nekaj izgine. 1024 01:08:12,880 --> 01:08:15,340 Res ne želite imeti, da se pogovorite s svojim strežnikom ves čas za to. 1025 01:08:15,340 --> 01:08:18,069 In nekateri, ki sploh ni mogoče storiti na strani strežnika. 1026 01:08:18,069 --> 01:08:21,899 To je razlog, zakaj potrebujemo nekaj podobnega JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Kul stvari o JavaScriptu: Treba je dinamično natipkan. 1028 01:08:24,359 --> 01:08:27,149 Kaj to pomeni, da vaš program ni treba vedeti 1029 01:08:27,149 --> 01:08:30,970 kaj točno so spremenljivke, ko jo napišem. 1030 01:08:30,970 --> 01:08:34,510 To bom nekako pogruntal, saj je tekmovanje v teku. 1031 01:08:34,510 --> 01:08:37,520 Druge stvari, ki so kul o tem: To je kodrasti brace jezika, 1032 01:08:37,520 --> 01:08:41,359 kar pomeni, sintaksa je podobna C in PHP. 1033 01:08:41,359 --> 01:08:47,050 Vam ni treba storiti veliko predelati, ko ste učenje JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Tukaj imamo malo JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Zanimiva stvar tukaj je, da če gledate na to, 1036 01:08:52,560 --> 01:08:56,330 imamo malo JavaScript tam v glavo tag. 1037 01:08:56,330 --> 01:08:59,479 Kaj je pa v bistvu samo vključuje datoteko JavaScript. 1038 01:08:59,479 --> 01:09:02,260 To je eden od načinov, ki jih lahko vključite JavaScript v vašem programu. 1039 01:09:02,260 --> 01:09:06,910 Potem drugi malo je pravzaprav nekaj inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 Zelo podobna slogu inline s CSS, 1041 01:09:10,790 --> 01:09:16,180 in ti si samo pisanje nekaj kode zelo hitro tam. 1042 01:09:16,180 --> 01:09:18,120 JavaScript mora nize. 1043 01:09:18,120 --> 01:09:20,850 Samo še en način, da bi podatke okrog, zelo koristno. 1044 01:09:20,850 --> 01:09:25,180 Zelo lepo in enostavno sintakso. 1045 01:09:25,180 --> 01:09:29,870 Uporabite oklepajev za dostop do vsega in da je vse skupaj. 1046 01:09:29,870 --> 01:09:35,020 Nič preveč zapletena. 1047 01:09:35,020 --> 01:09:38,630 Kul stvar JavaScript in skriptnih jezikov na splošno 1048 01:09:38,630 --> 01:09:40,920 je, da vam ni treba skrbeti velikosti nizov. 1049 01:09:40,920 --> 01:09:43,880 Saj lahko uporabiš array.length in spremljate to, 1050 01:09:43,880 --> 01:09:46,960 in lahko tudi niz raste ali skrči, kot ga potrebujete, da. 1051 01:09:46,960 --> 01:09:49,279 Torej sploh ne treba skrbeti za katero koli vrsto, 1052 01:09:49,279 --> 01:09:57,050 oh no, moram nameniti več stvari, ali kaj podobnega. 1053 01:09:57,050 --> 01:10:00,090 >> Kul stvar tukaj je, da je JavaScript nekaj, kar ti predmeti. 1054 01:10:00,090 --> 01:10:04,800 To je objektno usmerjen jezik, tako da tisto, kar je bilo, je v bistvu 1055 01:10:04,800 --> 01:10:10,100 način za vas, da podatkov o skupini skupaj, kar je nekoliko podoben struct, 1056 01:10:10,100 --> 01:10:17,280 vendar pa lahko dostopate kot struct ali v povezovalne matrike sintakso. 1057 01:10:17,280 --> 01:10:22,520 To je zelo preprosta in kaj lahko narediš s tem je podatkovna skupina skupaj 1058 01:10:22,520 --> 01:10:24,810 če imate kup podatkov, ki je povezano. 1059 01:10:24,810 --> 01:10:26,850 Ker je to vse stvari, ki jih potrebujete za opis avtomobila, 1060 01:10:26,850 --> 01:10:29,050 vam ni treba, da ga imajo v kup različnih krajih. 1061 01:10:29,050 --> 01:10:35,300 Lahko samo držijo v 1 objekt v JavaScriptu. 1062 01:10:35,300 --> 01:10:39,090 Kot verjetno veste, ponavljanjem je eden od teh dolgočasno nalog. 1063 01:10:39,090 --> 01:10:43,810 Pravkar si to naredil preko znova. Moraš se pogovoriti z vsakim predmetom v avtu, 1064 01:10:43,810 --> 01:10:47,340 ali boste morali iti skozi vsako postavko na seznamu ali kaj podobnega. 1065 01:10:47,340 --> 01:10:51,770 Torej JavaScript je, podobno kot so PHP, ki foreach sintakso. 1066 01:10:51,770 --> 01:10:54,590 V tem primeru je v zanko. 1067 01:10:54,590 --> 01:10:57,300 To želite uporabljati samo na predmete. 1068 01:10:57,300 --> 01:11:01,030 Obstajajo nekatere težave, ki se pojavijo, če boste uporabili to na nizi. 1069 01:11:01,030 --> 01:11:03,750 Na splošno je ena od tistih stvari, čeprav, da je zelo koristno, 1070 01:11:03,750 --> 01:11:06,590 ker boste odpravili veliko režijske 1071 01:11:06,590 --> 01:11:10,270 ker nimate dvigni vse v vašem predmetu, ki ga sami. 1072 01:11:10,270 --> 01:11:12,300 Vam ni treba zapomniti vse ključne imena. 1073 01:11:12,300 --> 01:11:18,270 Pravkar ste nekako dobiti nazaj v to sintakso. 1074 01:11:18,270 --> 01:11:21,500 V tem, z na, si samo želim, da se spomnimo 1075 01:11:21,500 --> 01:11:27,180 da ste dobili nazaj vse ključe, na zelo podoben način, da se razpršene tabele. 1076 01:11:27,180 --> 01:11:30,880 Če se spomnite tega, ko bi si dal na vrvico, da bi dobili nekaj iz 1077 01:11:30,880 --> 01:11:33,840 , da bi z njim povezano vrednost z njo. 1078 01:11:33,840 --> 01:11:36,360 Kaj lahko naredim s tem je, da lahko rečemo, vse v redu, 1079 01:11:36,360 --> 01:11:42,120 Sem dal v avto, in sem ga poimenoval Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Tako da boste lahko spet dal v niz Ferrari kasneje, in lahko dobite to. 1081 01:11:45,290 --> 01:11:50,000 In lahko to storite v zanki z v zanko. 1082 01:11:50,000 --> 01:11:53,320 Torej, samo več o objektih. Ključna stvar pri tem morate zapomniti 1083 01:11:53,320 --> 01:12:00,340 je, da lahko uporabite objektno zgradimo kot sintakso, kadarkoli želite z njimi, 1084 01:12:00,340 --> 01:12:04,590 razen če je, kaj je tvoj uporabiti kot niz ni veljaven ime spremenljivke. 1085 01:12:04,590 --> 01:12:07,650 Torej, če pogledaš na da imamo ključ s presledki. 1086 01:12:07,650 --> 01:12:12,500 No, če bi dal object.key, prostor, s, prostor, prostori, 1087 01:12:12,500 --> 01:12:15,320 da le ne bi imelo smisla skladenjsko. 1088 01:12:15,320 --> 01:12:22,730 Torej si lahko le to, da s to vrsto nosilca sintakse. 1089 01:12:22,730 --> 01:12:26,520 >> Tudi JavaScript je obseg zelo pametno za PHP. 1090 01:12:26,520 --> 01:12:29,050 Imate 2 načina reševanja področje. 1091 01:12:29,050 --> 01:12:31,960 Ne moreš imeti var pred spremenljivko, 1092 01:12:31,960 --> 01:12:34,060 in to samo pomeni, da je to globalna. 1093 01:12:34,060 --> 01:12:37,050 Si jo lahko ogledate od koderkoli. Tudi če bi dal to v if stavek, 1094 01:12:37,050 --> 01:12:42,430 kjerkoli drugje v kodi po tej točki, da bi lahko videli, da spremenljivko. 1095 01:12:42,430 --> 01:12:46,730 Druga stvar, čeprav je z var, je omejena na karkoli funkcijo, da si noter 1096 01:12:46,730 --> 01:12:48,870 Če niste v funkciji, no, to je globalna. 1097 01:12:48,870 --> 01:12:53,900 Ampak, če ste v funkciji je vidna samo znotraj te funkcije. 1098 01:12:53,900 --> 01:12:56,420 Nimam primer, ampak, ja. To je ena od tistih stvari, kjer 1099 01:12:56,420 --> 01:12:59,900 lahko upravljate kar spremenljivke hočeš biti globalni, 1100 01:12:59,900 --> 01:13:03,810 kaj spremenljivke, ki jih želite, da se lokalne, vendar pa morate biti previdni, o tem, 1101 01:13:03,810 --> 01:13:06,890 ker nimate vrsto drobnih zrn nadzora delate v C, 1102 01:13:06,890 --> 01:13:15,820 kjer, če je kaj prijavljeni v zanko, gre za bivanje, da je za zanko. 1103 01:13:15,820 --> 01:13:18,790 Stvar, ki smo dejansko skrbi za uporabo JavaScript je manipuliranje spletnih strani, kajne? 1104 01:13:18,790 --> 01:13:21,800 Mislim, da je, zakaj to počnemo. 1105 01:13:21,800 --> 01:13:23,840 >> Za to bomo uporabili nekaj, kar ti DOM. 1106 01:13:23,840 --> 01:13:25,850 Object Model dokument. 1107 01:13:25,850 --> 01:13:29,430 V bistvu, kaj počne, je potrebno vse vaše HTML 1108 01:13:29,430 --> 01:13:34,110 in modelov ven v kup predmetov, ki so gnezdijo drug v drugega. 1109 01:13:34,110 --> 01:13:37,080 Začnete z nekaj podobnega. 1110 01:13:37,080 --> 01:13:44,770 Imate na desni strani za mano, kup kode tam, da je neke vrste - 1111 01:13:44,770 --> 01:13:46,640 Ti misliš, da bi bilo zelo težko manipulirati, 1112 01:13:46,640 --> 01:13:48,700 ker bi se pri razčlenjevanju skozi kup besedila 1113 01:13:48,700 --> 01:13:52,080 in imajo za kos narazen stvari. In kaj, če ni bil pravilno formatiran? 1114 01:13:52,080 --> 01:13:54,880 Slabe stvari se bo zgodilo. 1115 01:13:54,880 --> 01:13:58,140 Torej JavaScript skrbi za to za vas, in boste dobili lepo strukturo podatkov, 1116 01:13:58,140 --> 01:14:01,390 kot ena na moji levi, kjer boste morali dokument, 1117 01:14:01,390 --> 01:14:03,530 in v notranjosti, da imate nekaj, kar ti HTML, 1118 01:14:03,530 --> 01:14:05,600 in v notranjosti, da imate glavo in telo, 1119 01:14:05,600 --> 01:14:08,420 in znotraj tega naslova imate naslov, tako dalje, in tako dalje, in tako dalje. 1120 01:14:08,420 --> 01:14:11,810 To poenostavlja manipulacijo spletno stran, tako da je to samo, 1121 01:14:11,810 --> 01:14:14,190 oh, samo želim govoriti s tem predmetom. 1122 01:14:14,190 --> 01:14:21,340 Nekako zelo podoben način, ki bi govoril v drug predmet, ki ga sami naredili. 1123 01:14:21,340 --> 01:14:25,980 Kot sem rekel, vse DOM je v predmetu dokumenta. 1124 01:14:25,980 --> 01:14:29,290 Bodisi je to samo eno mesto in potem lahko greš v to, da bi našli stvari, 1125 01:14:29,290 --> 01:14:33,880 in lahko to storite - to je stari slog za to početje, tam, 1126 01:14:33,880 --> 01:14:38,130 kjer vam document.getElementById in nato ime, 1127 01:14:38,130 --> 01:14:42,420 in kot si verjetno lahko povem, to postane zelo okoren čez nekaj časa. 1128 01:14:42,420 --> 01:14:44,480 Torej si verjetno ne želite, da to storim. Zato imamo 1129 01:14:44,480 --> 01:14:48,760 Naslednja stvar, bomo govorili o po tem. 1130 01:14:48,760 --> 01:14:52,510 Ključna stvar tukaj je, da je vse v redu, imaš vse te elemente, kajne? 1131 01:14:52,510 --> 01:14:56,400 Mogoče bom lahko spremenite barvo nekaj, ko stran se nalaga. 1132 01:14:56,400 --> 01:14:58,380 Torej kaj? Kaj, če je moj uporabnik klikne kaj? 1133 01:14:58,380 --> 01:15:00,540 Želim, da narediš nekaj zanimivega, ko kliknejo nekaj. 1134 01:15:00,540 --> 01:15:02,600 Zato imamo dogodkov. 1135 01:15:02,600 --> 01:15:05,330 Lahko, v bistvu, našli nobenega elementa v vašem DOM, 1136 01:15:05,330 --> 01:15:08,560 in potem rekli, hej. Ko se to naloži ali nekdo klikne, 1137 01:15:08,560 --> 01:15:11,410 ali ko se z miško nad njim, nekaj storiti z njim. 1138 01:15:11,410 --> 01:15:15,330 In tisto, kar imate, je, da imate naloge, ki obravnavajo to za vas. 1139 01:15:15,330 --> 01:15:17,980 Te funkcije so viličarji dogodkov. 1140 01:15:17,980 --> 01:15:20,440 Kaj oni so - to je samo fancy način rekel, 1141 01:15:20,440 --> 01:15:23,500 ta funkcija se izvrši le, če je ta dogodek zgodi. 1142 01:15:23,500 --> 01:15:28,070 Tako da obravnava dogodek, ki se zgodi. 1143 01:15:28,070 --> 01:15:30,810 To je, kako bi si začrtate za obravnavo dogodkov. 1144 01:15:30,810 --> 01:15:34,750 Imam nekaj gumb, in ko jo kliknete, da eksplodira. 1145 01:15:34,750 --> 01:15:40,560 Tako da ne kliknite na gumb. 1146 01:15:40,560 --> 01:15:42,910 To je eden od načinov, da mu je, kajne? 1147 01:15:42,910 --> 01:15:46,430 Imate gumb oznako, in na klik imate niz, ki pravi, 1148 01:15:46,430 --> 01:15:50,460 oh, mimogrede, jaz to eksplozijo stvar zame. 1149 01:15:50,460 --> 01:15:53,990 Sicer pa je tako kot redni gumb pravkar ustvarili. 1150 01:15:53,990 --> 01:15:56,550 Prav tako lahko to storite na drug način, 1151 01:15:56,550 --> 01:16:02,770 ki jih oprijemalne DOM element, vendar bomo prihranili, da potem, ko smo govorili o jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: To je knjižnica, ki je navzkrižno brskalnik. 1153 01:16:07,580 --> 01:16:09,580 Lahko ga uporabite v precej karkoli. 1154 01:16:09,580 --> 01:16:12,090 In to samo vam daje veliko orodij za delo z. 1155 01:16:12,090 --> 01:16:15,850 Ker JavaScript, medtem ko je močan, nima vsa orodja, ki jih potrebujete 1156 01:16:15,850 --> 01:16:20,550 iz škatle, da bo res spopadli s spletno aplikacijo boste morda želeli storiti. 1157 01:16:20,550 --> 01:16:24,650 Tako poenostavlja veliko stvari, ki vam daje veliko funkcij 1158 01:16:24,650 --> 01:16:28,760 iz škatle, ki bi jih običajno morali sami napisati, znova in znova in znova. 1159 01:16:28,760 --> 01:16:31,600 In samo naredi stvari zelo preproste. 1160 01:16:31,600 --> 01:16:35,780 Imate tudi selektorje, ki vam omogočajo vzemite ven vse tiste elemente 1161 01:16:35,780 --> 01:16:42,800 iz vašega DOM veliko bolj preprosto, namesto da bi uporabili te zelo dolge klici funkcij. 1162 01:16:42,800 --> 01:16:46,630 Več o teh selektorjev. Imate, tam ste bili, recimo, 1163 01:16:46,630 --> 01:16:49,800 Želim, da bi dobili element z id "rock." 1164 01:16:49,800 --> 01:16:56,450 No, v jQuery, to je samo $, nato pa niz, ki ima pol kilograma, nato pa "skala". 1165 01:16:56,450 --> 01:17:01,960 To je zelo preprosta in veliko hitreje kot tradicionalne JavaScript načinu soočanja s tem problemom. 1166 01:17:01,960 --> 01:17:06,120 In imate podobne stvari za razrede in vrste elementov. 1167 01:17:06,120 --> 01:17:08,140 jQuery je - eden izmed kul funkcij je, da lahko nekako stisne 1168 01:17:08,140 --> 01:17:14,350 dol vaša vprašanja o vašem DOM zelo, zelo hitro. 1169 01:17:14,350 --> 01:17:18,980 Zdaj smo nazaj na ravnanje dogodek, in to je, kako bi ročaj enega dogodka v jQuery. 1170 01:17:18,980 --> 01:17:23,090 Torej, kaj bomo tukaj smo govoriš, v redu. Imam scenarij oznako, kajne? 1171 01:17:23,090 --> 01:17:25,400 Torej imam to inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Kaj bomo storili je, da bomo rekli, v redu. 1173 01:17:27,750 --> 01:17:30,860 Ko je dokument pripravljen, kar pomeni dokument bila nabita, 1174 01:17:30,860 --> 01:17:34,660 smo šli v tej funkciji, in bomo rekli, v redu, 1175 01:17:34,660 --> 01:17:37,060 Ta funkcija je dejansko počne nekaj drugega. 1176 01:17:37,060 --> 01:17:42,320 To je v bistvu rekel, v redu, daj mi elementa z ID "myid." 1177 01:17:42,320 --> 01:17:47,960 In potem bi to tudi funkcijo trener, ki izvrši, ko ga kliknete. 1178 01:17:47,960 --> 01:17:49,820 V bistvu, kaj to pa je, pravi, vse v redu. 1179 01:17:49,820 --> 01:17:52,630 Stran je naložen, tako da bom v, najti ta element, 1180 01:17:52,630 --> 01:17:56,420 da ga ta obravnavo dogodkov, in je v bistvu vzpostavlja svojo stran za vas. 1181 01:17:56,420 --> 01:18:00,520 In to je, kako si želeli, da razmišljajo o ravnanju dogodkov. 1182 01:18:00,520 --> 01:18:06,310 Pravkar si želeli, da razmišljajo o tem, v redu, ko se pojavi nekaj, kar ne želim, da se zgodi? 1183 01:18:06,310 --> 01:18:10,520 Vi ne želite, da razmišljajo o, ok, moram zagotoviti, da to stvar pogajanj s to stvarjo, 1184 01:18:10,520 --> 01:18:14,660 ta stvar bla bla bla, ker si samo želim govoriti stvar v smislu dogodkov. 1185 01:18:14,660 --> 01:18:17,650 Ko se to zgodi, se to zgodi. Ko se to zgodi, se zgodi. 1186 01:18:17,650 --> 01:18:20,240 In če stvari sprožijo druge stvari, to je super. 1187 01:18:20,240 --> 01:18:22,150 Vendar ne želite poskusiti in narediti zapleteno kodo 1188 01:18:22,150 --> 01:18:24,130 kje ste sprožilo več stvari hkrati, 1189 01:18:24,130 --> 01:18:28,860 saj ste šele tekoč, da si glavobol. 1190 01:18:28,860 --> 01:18:32,340 >> V redu. Zdaj bomo lahko dobili našo stran za obravnavo dogodkov, 1191 01:18:32,340 --> 01:18:35,640 ampak recimo moja uporabnik klikne gumb. 1192 01:18:35,640 --> 01:18:38,040 Kaj pa, če želim poslati prošnjo nazaj na strežnik, 1193 01:18:38,040 --> 01:18:41,100 vendar ne želim, da osvežite stran, saj bi morali naložiti novo stran 1194 01:18:41,100 --> 01:18:44,390 vsak čas postane nekako dolgočasno, in zakaj ga potrebujem 1195 01:18:44,390 --> 01:18:47,430 spet podirajo glavo, in še enkrat nogo 1196 01:18:47,430 --> 01:18:49,670 in vsi elementi strani spet 1197 01:18:49,670 --> 01:18:53,180 Samo za osvežitev pozdrav ali časa? 1198 01:18:53,180 --> 01:18:55,290 Tako da je, zakaj imamo nekaj podobnega Ajax. 1199 01:18:55,290 --> 01:18:59,150 Kaj lahko storimo tukaj z Ajax je, lahko rečemo, vse v redu, 1200 01:18:59,150 --> 01:19:01,290 Rad bi poslali nekaj podatkov na strežniku, 1201 01:19:01,290 --> 01:19:04,010 in želim, da bi dobili odgovor nazaj, da bom lahko posodobim svojo stran, 1202 01:19:04,010 --> 01:19:12,120 ali morda samo še nekaj algoritmično izračun, ki ni nujno pokazati ničesar za uporabnika. 1203 01:19:12,120 --> 01:19:15,500 Kaj morate to storiti? No, morate URL boste morali govoriti. 1204 01:19:15,500 --> 01:19:18,650 Vaš strežnik samo ne more čudežno poslušajo od nikoder. 1205 01:19:18,650 --> 01:19:21,960 Morate imeti posebno mesto ste pošilja te podatke. 1206 01:19:21,960 --> 01:19:26,240 In boste potrebovali tudi nekaj podatkov za pošiljanje, ali morda je dataless poizvedbo. 1207 01:19:26,240 --> 01:19:31,380 Pravkar želite ping nazaj na strežnik in reči, hej, jaz sem živ, ali nekaj takega. 1208 01:19:31,380 --> 01:19:35,150 In potem hočeš funkcijo, ki v bistvu ročaji z uspehom. 1209 01:19:35,150 --> 01:19:38,250 Recimo, da ste dobili nazaj nekaj podatkov iz vašega strežnika, 1210 01:19:38,250 --> 01:19:42,960 in želite spremeniti naslov uporabnika na njihovi strani. 1211 01:19:42,960 --> 01:19:44,930 Tako bi dobili podatke nazaj, 1212 01:19:44,930 --> 01:19:48,860 in bi ga potisnite, da na zaslon. 1213 01:19:48,860 --> 01:19:51,170 Kaj se zgodi, ko je stran pripravljena, 1214 01:19:51,170 --> 01:19:56,500 ustvarite na funkcijo klik za ta gumb imenovano greeter. 1215 01:19:56,500 --> 01:19:58,810 Kaj to potem pa je, ko je ta potisne gumb, 1216 01:19:58,810 --> 01:20:03,700 Ste govorili z greetings.php, vam bo zahtevo POST, 1217 01:20:03,700 --> 01:20:07,290 in si rekel, hej, daj mi nekaj iz vaše strani. 1218 01:20:07,290 --> 01:20:09,890 Ne bomo res morali opisati, ampak greetings.php, 1219 01:20:09,890 --> 01:20:12,480 reciva, daje nazaj "zdravo svet." 1220 01:20:12,480 --> 01:20:15,650 Tako smo dobili nazaj to "Hello World", in na uspeh to, 1221 01:20:15,650 --> 01:20:20,730 ob predpostavki, da gre nič narobe, potem pa gremo na to ciljno mesto 1222 01:20:20,730 --> 01:20:25,720 da smo opredelili in smo pravkar držijo odgovor tam. 1223 01:20:25,720 --> 01:20:31,560 In to je zelo preprost način za vzpostavitev Ajax poizvedbo. 1224 01:20:31,560 --> 01:20:34,340 >> Zelo hitro, Rob nekako omenil že prej, 1225 01:20:34,340 --> 01:20:37,170 stvari gre lahko narobe, lahko zgodijo slabe stvari, 1226 01:20:37,170 --> 01:20:42,660 tako da boste želeli, da se seznanite s temi odzivnimi oznakami HTTP. 1227 01:20:42,660 --> 01:20:46,030 Kaj je to so le, recimo, 200, je šlo vse v redu. 1228 01:20:46,030 --> 01:20:48,670 Nekaj ​​drugega, zgodilo slabe stvari. 1229 01:20:48,670 --> 01:20:50,790 To je na splošno stvar, ki jo želite zapomniti. 1230 01:20:50,790 --> 01:20:53,440 Vendar je lepo vedeti, da vse te. 1231 01:20:53,440 --> 01:20:55,970 In na koncu, ko smo šli skozi vse to, 1232 01:20:55,970 --> 01:20:58,680 moramo zelo hitro govorimo o načrtovanju, 1233 01:20:58,680 --> 01:21:00,620 in potem bomo lahko vam vse pustiti. 1234 01:21:00,620 --> 01:21:03,410 Zasnova. Stvari, ki jih želite zapomniti. 1235 01:21:03,410 --> 01:21:06,950 Vprašajte ta vprašanja: Kdo boste uporabljali to? 1236 01:21:06,950 --> 01:21:09,580 Kaj bodo jo uporabi za? Kaj pa moji uporabniki briga? 1237 01:21:09,580 --> 01:21:11,750 Kaj ne briga jih? 1238 01:21:11,750 --> 01:21:14,500 Si ne želim, da bi aplikacijo in pustite, da samo raste 1239 01:21:14,500 --> 01:21:18,270 in postane ta velikan, vse-dolgotrajen stvar, ki si ne more niti konča. 1240 01:21:18,270 --> 01:21:23,900 Želite imeti diskretnih cilje in načrte, in stvari, ki jih želite obravnavati. 1241 01:21:23,900 --> 01:21:29,000 Naj bo enostavno. Vse to se pravi, v bistvu, 1242 01:21:29,000 --> 01:21:34,950 bi bilo enostavno za uporabnika, da ga uporabljate, ne da bi bilo velikan pikica besedila, kot je ta tobogan je, pravzaprav. 1243 01:21:34,950 --> 01:21:38,020 Pravkar si želeli, da je nekaj, kjer je zelo enostavno za nekoga, da gredo v 1244 01:21:38,020 --> 01:21:40,800 in delajo, kar hočejo storiti. 1245 01:21:40,800 --> 01:21:42,920 Vi ne želite, da bi moral krmariti 5 strani 1246 01:21:42,920 --> 01:21:45,460 da bi dobili na svojo primarno funkcijo vaše spletne strani. 1247 01:21:45,460 --> 01:21:49,290 Če Google imela 5 strani, preden bi lahko celo poiskati nekaj, 1248 01:21:49,290 --> 01:21:53,080 nihče ne bi uporabili. 1249 01:21:53,080 --> 01:21:55,890 In nenazadnje, papir prototip, ciljna skupina. 1250 01:21:55,890 --> 01:21:59,220 Imajo dobro načrtovanje in testiranje praks. 1251 01:21:59,220 --> 01:22:00,730 Samo zato, ker misliš, da dela za vas, 1252 01:22:00,730 --> 01:22:04,860 ne pomeni, da kdo drug misli, da deluje. 1253 01:22:04,860 --> 01:22:14,490 Ampak ja, to je to. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]