1 00:00:00,000 --> 00:00:02,270 >> [Review: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Harvard Egyetem] 3 00:00:04,620 --> 00:00:07,660 [Ez a CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Üdvözlünk mindenkit. Ez a felülvizsgálat a kvíz 1. 5 00:00:11,610 --> 00:00:15,040 Ahogy a felelősségi nyilatkozat, ez - úgy értem, fogunk próbálja fedezni 6 00:00:15,040 --> 00:00:17,770 annyi anyagot, amennyit csak lehetséges, de ez nem jelenti azt, hogy 7 00:00:17,770 --> 00:00:20,780 fogjuk, hogy minden olyan dolog, hogy lehet kvíz 1.. 8 00:00:20,780 --> 00:00:25,270 Tehát biztos, akkor is vessen egy pillantást előadás, szakaszok, mindent, amit lehet. 9 00:00:25,270 --> 00:00:28,240 Kvíz 1. lesz szerdán, jövő szerdán. 10 00:00:28,240 --> 00:00:33,800 Tehát biztos, hogy tanulni. Ez lesz, nagyjából, mint az első teszt 11 00:00:33,800 --> 00:00:36,390 tekintve formátumban, de ez valószínűleg lesz sokkal nehezebb. 12 00:00:36,390 --> 00:00:39,600 Legalábbis tavaly, amikor vettem 50, azt hittem, sokkal nehezebb. 13 00:00:39,600 --> 00:00:42,410 Tehát tanulni sokat. 14 00:00:42,410 --> 00:00:45,190 >> Fogom fedezni adatstruktúrák és Huffman kódolás. 15 00:00:45,190 --> 00:00:47,910 Ez olyan dolog, hogy sok ember úgy gondolja, összetett, 16 00:00:47,910 --> 00:00:51,930 de meg fogom próbálni, hogy ez olyan egyszerű, amennyire csak lehetséges. 17 00:00:51,930 --> 00:00:56,330 Először is, amit szeretnénk, ha tudnátok a kvíz 1, hogy 18 00:00:56,330 --> 00:01:00,970 megérteni a fogalmi leírásokat az egyes adatszerkezetek, hogy én fogom bemutatni. 19 00:01:00,970 --> 00:01:03,960 Ez azt jelenti, hogy nem kell, hogy ténylegesen 20 00:01:03,960 --> 00:01:07,020 végre egy hash tábla a kvíz 1.. 21 00:01:07,020 --> 00:01:10,250 Nem akarjuk, hogy végre egy egész hash tábla, talán megpróbáljuk 22 00:01:10,250 --> 00:01:13,090 , hogy ha végre bizonyos funkciókat, 23 00:01:13,090 --> 00:01:16,940 leggyakoribb műveleteket, de nem fogunk, hogy ha végre mindent. 24 00:01:16,940 --> 00:01:21,010 Ezért fontos, hogy megértsék a koncepció mögött minden adatstruktúra 25 00:01:21,010 --> 00:01:23,510 és azt is, hogy meg tudja-e kódolni C, 26 00:01:23,510 --> 00:01:27,880 csak a leggyakoribb műveletek vannak az egyes adatstruktúra. 27 00:01:27,880 --> 00:01:30,090 És azt is tudja, hogy felülvizsgálja mutatók és struktúrákat, 28 00:01:30,090 --> 00:01:33,470 mert úgy tűnik, sokat ezek az adatok struktúrákat. 29 00:01:33,470 --> 00:01:37,380 >> Első kapcsolódó listákat. Csatolt listák valójában nagyon hasonlít a tömbök, 30 00:01:37,380 --> 00:01:39,930 de a különbség a láncolt lista és egy sor, 31 00:01:39,930 --> 00:01:45,160 először is, az, hogy egy láncolt lista van egy nagyon rugalmas méret, 32 00:01:45,160 --> 00:01:50,060 míg a tömbök van, hogy vagy válasszon egy nagyon nagy méretű a tömb, 33 00:01:50,060 --> 00:01:53,710 így tudod, hogy fogsz tudni tárolja az összes adatot, hogy tömbben, 34 00:01:53,710 --> 00:01:59,370 vagy meg kell használni malloc, hogy egy rugalmas hossza tömb. 35 00:01:59,370 --> 00:02:03,680 A kapcsolt listák nagyon könnyű, hogy csak minél több elemet, 36 00:02:03,680 --> 00:02:07,210 fel több elemet a láncolt lista, vagy távolítsa el elemeket. 37 00:02:07,210 --> 00:02:09,370 És valóban, ha nem akarja, hogy a láncolt lista kell válogatni, 38 00:02:09,370 --> 00:02:13,950 lehet keresni, és távolítsa el elemek állandó időben, 39 00:02:13,950 --> 00:02:16,800 így O (1) idő, így nagyon kényelmes. 40 00:02:16,800 --> 00:02:20,660 Csak óvatosnak kell lennünk, hogy mindig emlékezni malloc és ingyenes a csomópontok, 41 00:02:20,660 --> 00:02:25,510 csak azért, mert ha nem, akkor memóriavesztés. 42 00:02:25,510 --> 00:02:31,480 Így kapcsolódik listák - meghatározása a csomópont, mint amit mi ott. 43 00:02:31,480 --> 00:02:35,110 Tettem int n, de tárolni kívánt adatokat. 44 00:02:35,110 --> 00:02:37,280 Tehát, ha szeretné tárolni egy string, semmi baj. 45 00:02:37,280 --> 00:02:41,690 Ha szeretne tárolni a struct, ez rendben van, egy dupla, amit akarsz. 46 00:02:41,690 --> 00:02:44,630 Én az imént int n a példák itt. 47 00:02:44,630 --> 00:02:46,800 És van egy mutató a következő csomópontot. 48 00:02:46,800 --> 00:02:51,940 Tehát, alapjában véve, a láncolt lista néhány adat, és akkor pont a következő csomópontot. 49 00:02:51,940 --> 00:02:56,710 Ha ez az utolsó elem a láncolt lista, hogy fog mutatni a NULL. 50 00:02:56,710 --> 00:02:59,060 Tehát ez egy példa egy láncolt lista. 51 00:02:59,250 --> 00:03:05,960 >> Oké, most nézzük meg, mit kell tennünk, ha azt szeretnénk beszúrni egy elemet a láncolt lista. 52 00:03:05,960 --> 00:03:08,810 Először is, a funkció betét típusú lesz érvénytelen 53 00:03:08,810 --> 00:03:11,350 mert nem akarom, hogy vissza semmit. 54 00:03:11,350 --> 00:03:14,200 És fogok venni egy int argumentumként, 55 00:03:14,200 --> 00:03:17,090 mert azt akarom, hogy tudja, mit akarok szúrni. 56 00:03:17,090 --> 00:03:21,840 Tehát mi az első dolog, amit meg kell csinálni? Nos, azt kell malloc on newnode, 57 00:03:21,840 --> 00:03:24,240 úgy, hogy az első sorban. 58 00:03:24,240 --> 00:03:27,580 Én csak egy új csomópont, hogy a láncolt lista. 59 00:03:27,580 --> 00:03:32,360 Szóval, mit tehetek? Nos, tudjuk, hogy a mi megvalósításai kapcsolt listák 60 00:03:32,360 --> 00:03:38,180 osztályban, mindig fel a fejét, mint egy globális változót. 61 00:03:38,180 --> 00:03:41,800 Tehát mit tehetünk a változás a fejét. 62 00:03:41,800 --> 00:03:44,300 Tudom, hogy ez az új csomópont lesz az új vezetője, 63 00:03:44,300 --> 00:03:46,670 és ez fogja mutatni az előző fejét. 64 00:03:46,670 --> 00:03:50,390 Hogyan tudjuk ezt? Az első dolog, amit meg kell tennie, 65 00:03:50,390 --> 00:03:54,770 megváltozik az "n" az új csomópont értéket, 66 00:03:54,770 --> 00:03:57,530 melyet át a funkciót. 67 00:03:57,530 --> 00:04:01,050 Ezután newnode a következő lépés lesz a feje. 68 00:04:01,050 --> 00:04:05,800 A fej lesz newnode. Szóval, ez elég egyszerű. 69 00:04:05,800 --> 00:04:10,090 Törlése egy csomópont, meg tudjuk csinálni, mint a - 70 00:04:10,090 --> 00:04:14,790 Ennek egyik módja, amit tehetünk, hogy mondjam, 71 00:04:14,790 --> 00:04:18,160 rendben van, ha akartam törölni, például 3, 72 00:04:18,160 --> 00:04:24,850 mit tehetnék ez csak pont az előző csomópont 73 00:04:24,850 --> 00:04:27,580 a következő csomópontot 3. 74 00:04:27,580 --> 00:04:29,400 Szóval, én csak ilyet. 75 00:04:29,400 --> 00:04:33,400 De mi az a probléma ezzel, hogy? 76 00:04:33,400 --> 00:04:37,400 Van egy memóriavesztés, így nem férnek hozzá a 3-as szám már. 77 00:04:37,400 --> 00:04:42,480 A probléma azzal van, hogy én nem lesz képes felszabadítani a csomópont. 78 00:04:42,480 --> 00:04:45,360 Megyek, hogy a memóriavesztés és (érthetetlen) fog utálni. 79 00:04:45,360 --> 00:04:49,370 Tehát ahelyett, hogy talán érdemes egy ideiglenes mutató. 80 00:04:49,370 --> 00:04:53,210 Így tettem temp. Ez lesz, hogy pont a csomópont, amit törölni kíván. 81 00:04:53,210 --> 00:04:58,170 És akkor tudom mozgatni az előző csomópontok pont a következő csomópont 82 00:04:58,170 --> 00:05:00,390 A csomópont, amit törölni kíván. 83 00:05:00,390 --> 00:05:02,730 És végül, azt is szabad a mutatót. 84 00:05:02,730 --> 00:05:07,480 Van, hogy szabad a mutató, amit teremtett ott? 85 00:05:07,480 --> 00:05:09,560 Nem kell, csak azért, mert - 86 00:05:09,560 --> 00:05:13,430 A különbség az, hogy ez a csomópont jött létre malloc, 87 00:05:13,430 --> 00:05:17,280 így ez a halom, míg ez csak nyilvánították NULL kapcsoló a verem. 88 00:05:17,280 --> 00:05:20,000 Szóval nem kell kiszabadítani. 89 00:05:20,000 --> 00:05:22,030 >> Oké. Most beszéljünk stack. 90 00:05:22,030 --> 00:05:24,680 Stacks nagyon egyszerű. 91 00:05:24,680 --> 00:05:29,540 Mi volt stack és sorok az osztályban csak a tömbök, 92 00:05:29,540 --> 00:05:32,820 de meg kell ismernie - csak tudatában kell lennie 93 00:05:32,820 --> 00:05:40,740 hogy akkor is ezt halom a sorban a kapcsolt listák is. 94 00:05:40,740 --> 00:05:44,460 Tehát, ha van egy tömb, mi lenne a stack? 95 00:05:44,460 --> 00:05:46,810 Egy halom egyrészt lesz, hogy a méretet. 96 00:05:46,810 --> 00:05:49,950 Meg kell tárolni mekkora a verem, hogy van most. 97 00:05:49,950 --> 00:05:52,980 És azt is meg kellett volna egy sor, ebben az esetben a számok, 98 00:05:52,980 --> 00:05:55,120 de ha akarod, akkor egy tömb 99 00:05:55,120 --> 00:06:00,380 a vonósok, egy sor struktúra, bármit, amit szeretnénk tárolni. 100 00:06:00,380 --> 00:06:03,240 A stack: A különbség egy verem, és a láncolt lista 101 00:06:03,240 --> 00:06:08,590 az, hogy a halom csak férnek hozzá az utolsó elem került a verem. 102 00:06:08,590 --> 00:06:11,770 Úgy hívják utolsó, first out. 103 00:06:11,770 --> 00:06:15,090 Csakúgy, mint hogy van egy halom tálcák, 104 00:06:15,090 --> 00:06:17,670 ha tesz egy tálcát a tetején a verem, 105 00:06:17,670 --> 00:06:22,670 el kell távolítani ezt a tálcát, hogy hozzáférjenek a többi tálcát. 106 00:06:22,670 --> 00:06:26,310 Ez ugyanaz a dolog halom. 107 00:06:26,310 --> 00:06:31,220 Tehát, ha azt akarom, hogy például egy elemet egy köteg, mit tegyek? 108 00:06:31,220 --> 00:06:34,070 Úgy hívják push, és ez elég egyértelmű. 109 00:06:34,070 --> 00:06:37,130 Az első dolog, amit meg kell tennie, hogy ellenőrizze, hogy a méret a verem 110 00:06:37,130 --> 00:06:40,150 nem nagyobb vagy egyenlő, mint a kapacitás a verem. 111 00:06:40,150 --> 00:06:45,810 Mert ha már vannak teljes kapacitással, akkor nem lehet hozzá semmi mást. 112 00:06:45,810 --> 00:06:51,140 És ha nem, akkor csak meg kell hozzá az elemet a verem. 113 00:06:51,140 --> 00:06:54,530 És végül, növelni a méretét. Szóval ez elég egyértelmű. 114 00:06:54,530 --> 00:06:57,140 Szóval, én csak hozzá a 2-es szám. 115 00:06:57,140 --> 00:07:00,350 És ha azt akarom, hogy a pop, ami azt jelenti, hogy az eltávolítani kívánt 116 00:07:00,350 --> 00:07:03,870 Az utolsó elem, amely adunk hozzá, és visszatér az érték az elem, 117 00:07:03,870 --> 00:07:09,180 Az első dolog, amit meg kell ellenőrizni, hogy a verem nem üres. 118 00:07:09,180 --> 00:07:11,510 Mert ha ez üres, nem tudok vissza semmit. 119 00:07:11,510 --> 00:07:14,820 Ebben az esetben, én vissza -1. 120 00:07:14,820 --> 00:07:18,960 Egyébként, én megyek csökkentse a méret a spec, 121 00:07:18,960 --> 00:07:22,510 és vissza a számok (s.size). 122 00:07:22,510 --> 00:07:27,230 Miért csökkentse a méretet, majd vissza s.size? 123 00:07:27,230 --> 00:07:30,930 Ez azért van, mert ebben az esetben a spec van 4-es méretű, 124 00:07:30,930 --> 00:07:33,810 és azt akarom, hogy visszatérjen a negyedik elem, nem igaz? 125 00:07:33,810 --> 00:07:36,030 De mi is az index a negyedik elem? Három. 126 00:07:36,030 --> 00:07:44,510 Mivel én nem méret - lesz 3, én csak vissza s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 mert 3. Tehát csak az index. 128 00:07:48,410 --> 00:07:50,380 >> Most sorba. Sorok nagyjából ugyanaz a dolog. 129 00:07:50,380 --> 00:07:54,950 Az egyetlen különbség az, hogy ahelyett, hogy utolsó, first out, 130 00:07:54,950 --> 00:07:57,480 akkor az első be, első ki. 131 00:07:57,480 --> 00:07:59,460 Talán ha várja, hogy menjen egy koncertre, 132 00:07:59,460 --> 00:08:04,260 akkor nem lenne boldog, ha már egy halom, hanem a sorban. 133 00:08:04,260 --> 00:08:07,730 Mivel az utolsó, aki jött volna az első, aki meg a koncert. 134 00:08:07,730 --> 00:08:09,760 Valószínűleg nem lenne boldog. 135 00:08:09,760 --> 00:08:15,020 A sorban az első, aki kap is az első, aki kijutni. 136 00:08:15,020 --> 00:08:18,720 Így a meghatározása sor, amellett, hogy a méret a tömbben, 137 00:08:18,720 --> 00:08:23,360 akkor is van, hogy a fej, amely az index, hogy a fejét a verem. 138 00:08:23,360 --> 00:08:29,000 Tehát az első elem most. 139 00:08:29,000 --> 00:08:32,710 Enqueue az ugyanaz, mint a push stack. 140 00:08:32,710 --> 00:08:34,980 Ha nagyon naiv, akkor csak azt mondom, 141 00:08:34,980 --> 00:08:39,289 Nos, csak nem pontosan ugyanaz a dolog, mint én a push. 142 00:08:39,289 --> 00:08:44,030 Én csak ellenőrizni, ha ez nem túl a kapacitást. 143 00:08:44,030 --> 00:08:48,760 Ha így van, akkor return false, különben csak exportálni az új értéket 144 00:08:48,760 --> 00:08:50,630 majd növelni a méretét. 145 00:08:50,630 --> 00:08:52,750 De miért van ez a baj? 146 00:08:52,750 --> 00:08:55,010 Nézzük ezt a példát. 147 00:08:55,010 --> 00:08:57,020 Próbálok sorba állítását egy csomó dolgot, 148 00:08:57,020 --> 00:08:58,390 aztán megyek dequeue és sorba állítását. 149 00:08:58,390 --> 00:09:00,550 Van egy csomó parancs, de ez nagyon egyszerű. 150 00:09:00,550 --> 00:09:04,790 Megyek sorba állítását 5, adjunk hozzá 5, majd a 7, 151 00:09:04,790 --> 00:09:09,310 1., 4., 6., és akkor szeretnék dequeue valamit, 152 00:09:09,310 --> 00:09:12,000 ami azt jelenti, hogy megyek, hogy távolítsa el az első elemet. 153 00:09:12,000 --> 00:09:14,640 Szóval megyek, hogy távolítsa el a 3-as szám, nem igaz? 154 00:09:14,640 --> 00:09:17,320 Az első elem. Oké. 155 00:09:17,320 --> 00:09:21,450 Most, ha megpróbálom sorba állítását valami mást, hogy mi fog történni? 156 00:09:21,450 --> 00:09:24,290 Szerint a végrehajtás, 157 00:09:24,290 --> 00:09:31,040 Azt akartam, hogy a következő szám az index q.size. 158 00:09:31,040 --> 00:09:35,140 Ebben az esetben, a mérete 8, 159 00:09:35,140 --> 00:09:38,640 így az index 8 lesz itt az utolsó pozícióban. 160 00:09:38,640 --> 00:09:43,900 Ha megpróbálom sorba állítását 1. itt, azt is felülírja az utolsó pozíció 161 00:09:43,900 --> 00:09:45,870 Az 1-es szám, ami teljesen rossz. 162 00:09:45,870 --> 00:09:49,870 Amit én akarok a kerületi és menj az első helyen. 163 00:09:49,870 --> 00:09:52,870 Lehet, hogy azt mondjuk, nos, csak azt kell ellenőrizni 164 00:09:52,870 --> 00:09:55,600 ha ténylegesen tenni valamit. 165 00:09:55,600 --> 00:09:58,560 Ha nem, én csak azt mondom, ó, az új, teljes kapacitással 166 00:09:58,560 --> 00:10:02,010 valójában mennyiség - 1, és nem tudod elem van. 167 00:10:02,010 --> 00:10:06,150 De mi a probléma? A probléma az, hogy ha én csak dequeue mindent itt 168 00:10:06,150 --> 00:10:08,240 és aztán megpróbálja felvenni valami mást, akkor csak azt mondom, 169 00:10:08,240 --> 00:10:11,210 Nos, volt teljes kapacitással, ami 0-ra. 170 00:10:11,210 --> 00:10:13,620 Tehát a sorban elment. 171 00:10:13,620 --> 00:10:16,990 Meg kell kerületi, és olyan módon, a csomagolás körül 172 00:10:16,990 --> 00:10:22,040 hogy ti tanult látomásos és egyéb psets használta mod. 173 00:10:22,040 --> 00:10:29,090 Meg lehet próbálni, hogy otthon, hogy megértsük, miért tennéd q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod kapacitás, de ha megnézed itt, 175 00:10:31,080 --> 00:10:34,760 láthatjuk, hogy működik. 176 00:10:34,760 --> 00:10:37,760 Így a legutóbbi példa, q.size volt 8 177 00:10:37,760 --> 00:10:47,590 és a fej 1 volt, mert ebben a helyzetben itt a tömb. 178 00:10:47,590 --> 00:10:51,970 Így lesz 8 + 1, 9. Mod kapacitás 9 lesz 0-ra. 179 00:10:51,970 --> 00:10:56,640 Ez megy a mutató 0-ra. Mi lesz a megfelelő pozícióba. 180 00:10:56,640 --> 00:10:59,750 És akkor próbálja ki a sorban otthon. 181 00:10:59,750 --> 00:11:04,950 Néhány fontos dolog: próbáld megérteni a különbséget a verem, és a sorban. 182 00:11:04,950 --> 00:11:11,620 Otthon, próbálj meg nagyon jól ismeri a végrehajtási Enqueue, dequeue, nyomja és a pop. 183 00:11:11,620 --> 00:11:16,560 És azt is megérteni, ha használná mindegyiket. 184 00:11:16,560 --> 00:11:22,830 >> Szóval pihenni 10 másodpercig egy csomó Pokemons. 185 00:11:22,830 --> 00:11:26,080 És most térjünk vissza az adatszerkezeteket. 186 00:11:26,080 --> 00:11:29,770 Hash táblák. Sokan voltak, félek hash táblák. 187 00:11:29,770 --> 00:11:33,650 A probléma meg a 6., helyesírás-ellenőrző. 188 00:11:33,650 --> 00:11:35,980 Hash táblák és próbálkozás, egy csomó ember, hogy félek tőlük. 189 00:11:35,980 --> 00:11:38,540 Azt hiszik, hogy annyira nehéz megérteni. Igen? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Probléma készlet 5. >> Probléma készlet 5, igen. Köszönöm, Rob. 191 00:11:41,490 --> 00:11:43,370 Igen. Hat volt Huff n 'Puff, igen. 192 00:11:43,370 --> 00:11:49,340 Probléma meg az 5. helyesírás-ellenőrző, és ha kellett, hogy vagy a hash tábla, vagy egy próbát. 193 00:11:49,340 --> 00:11:55,360 Sokan gondolták, hogy ők szuper nehéz megérteni, de ők valójában nagyon egyszerű. 194 00:11:55,360 --> 00:12:01,290 Mi az a hash tábla, gyakorlatilag? A hash tábla egy tömb, láncolt listák. 195 00:12:01,290 --> 00:12:06,730 Az egyetlen különbség a tömb és a hash tábla 196 00:12:06,730 --> 00:12:09,730 az, hogy a hash tábla van egy úgynevezett hash függvényt. 197 00:12:09,730 --> 00:12:12,080 Mi az a hash függvény? 198 00:12:12,080 --> 00:12:13,970 Nem tudom, hogy ti is itt olvasható. 199 00:12:13,970 --> 00:12:16,090 Ez egy példa egy hash tábla. 200 00:12:16,090 --> 00:12:19,220 Tehát látható, hogy van egy sor 31 elemekkel. 201 00:12:19,220 --> 00:12:22,440 És mit csinálunk a hash tábla egy hash függvény 202 00:12:22,440 --> 00:12:26,660 hogy fog fordítani a kulcsot, minden int egy index. 203 00:12:26,660 --> 00:12:31,740 Ha például, ha azt szeretné, hogy válasszon a B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Azt tegye B. Harrison én hash függvények, 205 00:12:34,190 --> 00:12:36,960 és a hash függvény visszatér 24. 206 00:12:36,960 --> 00:12:40,930 Szóval tudom, hogy szeretnék tárolni B. Harrison 24. 207 00:12:40,930 --> 00:12:46,580 Szóval ez a különbség csak úgy, egy tömböt, és miután egy hash tábla. 208 00:12:46,580 --> 00:12:48,740 A hash tábla akkor van olyan funkció, amely fogja mondani, 209 00:12:48,740 --> 00:12:54,740 hol tárolja az adatokat, hogy a tárolni kívánt. 210 00:12:54,740 --> 00:12:57,040 A hash függvény, meg akarom nézni a hash függvény 211 00:12:57,040 --> 00:13:00,600 hogy a determinisztikus és jól elosztott. 212 00:13:00,600 --> 00:13:07,810 Mint látható itt, akkor láthatjuk, hogy sok az adat, hogy szerettem volna tárolni valójában 19 213 00:13:07,810 --> 00:13:12,470 ahelyett, hogy a 31. és a 30. és 29., melyek minden szabad. 214 00:13:12,470 --> 00:13:16,920 Így a hash függvényt, amit használtam nem volt túl jól elosztott. 215 00:13:16,920 --> 00:13:20,710 Amikor azt mondjuk, jól elosztott, azt jelenti, hogy azt akarjuk, hogy, 216 00:13:20,710 --> 00:13:26,520 durván, legalább 1 vagy 2 az egyes - 217 00:13:26,520 --> 00:13:32,190 mint például, a különbség 1 vagy 2 az egyes indexek a tömbök. 218 00:13:32,190 --> 00:13:43,950 Azt akarjuk, hogy nagyjából az azonos számú elemet az egyes láncolt lista a tömbben. 219 00:13:43,950 --> 00:13:48,600 És ez könnyen ellenőrizhető, ha ez érvényes a hash tábla, nézet, mint hash táblákat. 220 00:13:48,600 --> 00:13:51,770 >> Majd fák. Ez egy fa. 221 00:13:51,770 --> 00:13:56,400 Fák számítástechnika fejjel lefelé valamilyen okból. 222 00:13:56,400 --> 00:14:00,150 Tehát itt van a gyökere a fa, majd a levelek. 223 00:14:00,150 --> 00:14:05,630 Akkor csak azt tudom, a nómenklatúra a szülők és a gyermek. 224 00:14:05,630 --> 00:14:12,880 Mindegyik csomópontnak megvan a gyermekek számára, melyek a csomópontok, amelyek alatt a szülő. 225 00:14:12,880 --> 00:14:19,660 Így például a 2 lesz a szülő és a 3, a többi gyermek ott, 226 00:14:19,660 --> 00:14:25,290 míg a 3. lesz a szülő 1 és a többi gyerek, hogy ott vannak. 227 00:14:25,290 --> 00:14:29,990 És 1 lesz 3 gyermeke, és így tovább. 228 00:14:29,990 --> 00:14:34,610 Van valami sokkal érdekesebb, úgynevezett bináris kereső fa, 229 00:14:34,610 --> 00:14:39,040 ahol minden érték a jobb oldalon egy csomópont 230 00:14:39,040 --> 00:14:41,660 lesz a jobb, itt - a jobb oldalon, 231 00:14:41,660 --> 00:14:46,780 lesz nagyobb, mint az elemet a gyökér. 232 00:14:46,780 --> 00:14:49,780 Tehát, ha van az 5-ös szám itt, minden eleme a jobb oldalon 233 00:14:49,780 --> 00:14:51,940 lesz nagyobb, mint 5, és a bal oldalon 234 00:14:51,940 --> 00:14:56,770 minden eleme lesz kevesebb, mint 5. 235 00:14:56,770 --> 00:14:58,780 Miért van ez hasznos? 236 00:14:58,780 --> 00:15:01,660 Nos, ha azt akarom, hogy ellenőrizze, hogy a 7-es szám van itt, például, 237 00:15:01,660 --> 00:15:05,960 Én csak az 5-ös az első, és én fogom látni, 7 nagyobb vagy kisebb, mint 5? 238 00:15:05,960 --> 00:15:09,540 Ez nagyobb, ezért tudom, hogy lesz, hogy legyen jobb a fa. 239 00:15:09,540 --> 00:15:13,980 Így sokkal kevesebb dolgot nézni. 240 00:15:13,980 --> 00:15:19,520 A megvalósítása egy bináris keresést fa, a csomópont, én csak megy, hogy az adatok, 241 00:15:19,520 --> 00:15:21,750 így int n, akkor is van egy sor 242 00:15:21,750 --> 00:15:23,630 vagy bármit, amit akart. 243 00:15:23,630 --> 00:15:28,100 Csak meg kell legyen óvatos meghatározzák, hogy mi a nagyobb, ami kevésbé. 244 00:15:28,100 --> 00:15:30,390 Tehát, ha már húrok, például, definiálhatunk 245 00:15:30,390 --> 00:15:34,690 hogy ezeket a dolgokat a jobb oldalon megy, hogy a nagyobb hosszúságú, 246 00:15:34,690 --> 00:15:40,940 A bal oldali megy, hogy a kisebb hosszúságú, így tényleg rajtad múlik. 247 00:15:40,940 --> 00:15:44,930 >> Hogyan végrehajtani keressünk BST? 248 00:15:44,930 --> 00:15:47,840 Az első dolog, amit meg kell tennie, hogy ellenőrizze, hogy a gyökér NULL. 249 00:15:47,840 --> 00:15:50,920 Ha ez NULL, az azt jelenti, hogy a dolog nem létezik 250 00:15:50,920 --> 00:15:53,330 mert nem is egy fa, nem igaz? 251 00:15:53,330 --> 00:15:55,790 Szóval vissza hamis. 252 00:15:55,790 --> 00:15:58,740 Egyébként, én fogom ellenőrizni, ha a szám nagyobb, 253 00:15:58,740 --> 00:16:01,720 értéknél a gyökér. 254 00:16:01,720 --> 00:16:04,250 Fogom, hogy megpróbálja megtalálni az elem a jobb oldalon 255 00:16:04,250 --> 00:16:08,590 a fa. 256 00:16:08,590 --> 00:16:11,310 Azt látom, hogy én vagyok a rekurzió itt. 257 00:16:11,310 --> 00:16:14,150 És aztán, ha ez kevesebb, fogom nézni a bal oldalon. 258 00:16:14,150 --> 00:16:18,330 És végül, ellenkező esetben, ha ez nem kevésbé, vagy nem nagyobb, 259 00:16:18,330 --> 00:16:20,660 ez azt jelenti, hogy ez az érték is. 260 00:16:20,660 --> 00:16:23,010 Szóval én csak vissza igaz. 261 00:16:23,010 --> 00:16:26,360 Láthatjuk, hogy itt voltam, ha, ha, ha. 262 00:16:26,360 --> 00:16:30,820 És ne feledd, a kvíz 0, mi volt a probléma, hogy még, ha, ha, ha, 263 00:16:30,820 --> 00:16:32,780 és meg kellett volna találni a hatékonyság, 264 00:16:32,780 --> 00:16:35,180 és a hatékonyság volt, hogy használható, ha. 265 00:16:35,180 --> 00:16:39,060 Meg kellett volna használni, ha else if, else if és más. 266 00:16:39,060 --> 00:16:44,240 Így kell használni else if és az else if és az else itt? 267 00:16:44,240 --> 00:16:46,200 Tudja valaki - Igen? 268 00:16:46,200 --> 00:16:51,140 [Student beszéd, nem hallható] 269 00:16:51,140 --> 00:16:53,480 Ez tökéletes. Tehát azt mondja, hogy nem számít, 270 00:16:53,480 --> 00:16:55,930 csak azért, mert a hatékonyság, hogy mi volt korábban 271 00:16:55,930 --> 00:16:59,550 az volt, hogy azért, mert, talán ha néhány feltétel teljesül, 272 00:16:59,550 --> 00:17:03,570 így csináltak valamit, de akkor is lesz, hogy ellenőrizze az összes egyéb feltétel. 273 00:17:03,570 --> 00:17:06,319 De ebben az esetben, akkor vissza azonnal, így nem számít. 274 00:17:06,319 --> 00:17:09,220 Szóval nem kell használni else if. 275 00:17:09,220 --> 00:17:11,740 >> És végül, beszéljünk próbálkozás, 276 00:17:11,740 --> 00:17:13,800 amely mindenki kedvence. 277 00:17:13,800 --> 00:17:15,980 A próbát egy fa a tömbök. 278 00:17:15,980 --> 00:17:20,369 Ez nagyon gyorsan keresni értékeket, de használ sok memóriát. 279 00:17:20,369 --> 00:17:22,530 És ez általában Szűrés szavak, így amikor 280 00:17:22,530 --> 00:17:27,920 szeretnénk végrehajtani, például, nem is tudom, mint egy telefonkönyv a telefon 281 00:17:27,920 --> 00:17:30,440 és azt szeretné, hogy képes legyen B típusú 282 00:17:30,440 --> 00:17:32,510 és csak nevét, akik B. 283 00:17:32,510 --> 00:17:37,960 Ez nagyon könnyen megvalósítható, hogy egy próbát, pl. 284 00:17:37,960 --> 00:17:39,820 Hogyan határozná meg a csomópont egy próbát? 285 00:17:39,820 --> 00:17:43,910 Csak ki kell, hogy egy bool, hogy lesz is_word. 286 00:17:43,910 --> 00:17:48,660 Ez jelzi, hogy használja az összes karakter előtt csomópont, 287 00:17:48,660 --> 00:17:51,920 voltál képes, hogy egy szót, 288 00:17:51,920 --> 00:17:57,230 és akkor lesz egy sor mutató a csomópontok. 289 00:17:57,230 --> 00:18:03,120 Látod, hogy van egy sor szülő csomópont, így a node * tömb? Igen? 290 00:18:03,120 --> 00:18:06,050 Nézzük, hogy ez hogyan fog működni. A helyesírás-ellenőrzés, 291 00:18:06,050 --> 00:18:08,230 van egy sor 27-elemek, 292 00:18:08,230 --> 00:18:12,150 azért van, mert a betűk és az idézőjel. 293 00:18:12,150 --> 00:18:17,800 Mielőtt itt én csak fogja használni 2, mert azt akarom, hogy képes írni a fórumon. 294 00:18:17,800 --> 00:18:20,230 Oké. Tehát ez egy példa egy próbát. 295 00:18:20,230 --> 00:18:25,600 Ha csak meg az első csomópont, én is egy sor 2 elem 296 00:18:25,600 --> 00:18:29,290 hogy a 2 mutatókat NULL, úgyhogy csak fel "a" és "b". 297 00:18:29,290 --> 00:18:32,430 És én fogom, hogy egy bool, amely azt mondja is_word. 298 00:18:32,430 --> 00:18:34,420 Ez lesz, hogy hamis az az első, 299 00:18:34,420 --> 00:18:37,370 csak azért, mert előtte meg nincs karaktereket. 300 00:18:37,370 --> 00:18:40,900 Tehát egy üres szó, nem egy szó. Tehát hamis. 301 00:18:40,900 --> 00:18:46,320 Ha szeretne hozzáadni "a" a szótár, mit kell tennem? 302 00:18:46,320 --> 00:18:49,760 Én csak malloc új csomópontot az "A", 303 00:18:49,760 --> 00:18:54,630 , majd adjunk hozzá a szó igaz. 304 00:18:54,630 --> 00:19:00,180 Tehát ez csak jelzi, hogy miután "a" lesz igaz. Értelme? 305 00:19:00,180 --> 00:19:04,120 Akkor, ha azt akarom, hogy add 'ba', én is, hogy malloc 1. 'b', 306 00:19:04,120 --> 00:19:07,550 aztán megyek, hogy hozzanak létre a logikai hamis, 307 00:19:07,550 --> 00:19:10,160 mert a "b" önmagában nem egy szó. 308 00:19:10,160 --> 00:19:13,010 Aztán megyek malloc másik az "A", így a "ba" 309 00:19:13,010 --> 00:19:16,290 aztán megyek, hogy hozzanak létre ez egy szó igaz. 310 00:19:16,290 --> 00:19:18,950 Mivel a "ba" egy szó. 311 00:19:18,950 --> 00:19:21,910 És ha azt akarom, hogy ha a "b" ebben a szótárban, 312 00:19:21,910 --> 00:19:26,730 Én is csak megy az első, "b". Lemegyek, és nézd meg a szó, és azt mondja, hamis. 313 00:19:26,730 --> 00:19:30,110 Tehát ez nem egy szó. Ha azt szeretné, hogy ellenőrizze "ba" 314 00:19:30,110 --> 00:19:38,010 Megyek az első, "b", aztán megy a 'a', és látom, igaz, így ez a szó. Értelme? 315 00:19:38,010 --> 00:19:41,950 Sokan összezavarodnak a próbálkozás. Nem? 316 00:19:41,950 --> 00:19:44,740 >> Végül Huffman kódolás. Huffman-kódolás nagyon hasznos 317 00:19:44,740 --> 00:19:47,550 A helytakarékosság és tömöríteni szöveges fájlok, 318 00:19:47,550 --> 00:19:52,270 csak azért, mert sokszor használja az "a" és "e", például, 319 00:19:52,270 --> 00:19:57,710 a dokumentumokat, de nem tudom, ha ti a 'q' vagy 'z' annyi. 320 00:19:57,710 --> 00:20:02,040 Ha csak 1 bájt minden egyes karakter, 321 00:20:02,040 --> 00:20:08,520 minden egyes - a 256 karakter, hogy van az ASCII táblázat nem túl optimális, 322 00:20:08,520 --> 00:20:11,410 csak azért, mert vannak olyan karakterek használata sokkal több, 323 00:20:11,410 --> 00:20:15,180 ezért valószínűleg kevesebb memóriát számára. 324 00:20:15,180 --> 00:20:17,560 Hogyan használhatom Huffman kódolást? 325 00:20:17,560 --> 00:20:20,010 Meg kell csinálni a Huffman fa. 326 00:20:20,010 --> 00:20:23,370  A Huffman fának csomópont 327 00:20:23,370 --> 00:20:27,760 amelyek egy szimbólum, amely olyan lesz, mint "a", "b", "c", a levél, 328 00:20:27,760 --> 00:20:32,990 bármilyen betű van, a frekvencia, az a frekvencia, hogy a szó jelenik meg a szövegben, 329 00:20:32,990 --> 00:20:36,280 hogy te is megteremti a Huffman fa, 330 00:20:36,280 --> 00:20:41,800 majd a csomópontot, hogy fog mutatni, hogy a bal oldalon a Huffman fa 331 00:20:41,800 --> 00:20:47,210 és egy másik csomópont, hogy fog mutatni a jobb. Tehát, mint egy fa. 332 00:20:47,210 --> 00:20:49,440 Hogyan épít a Huffman fa? 333 00:20:49,440 --> 00:20:54,020 Fogsz felvenni a 2. csomópontok a legalacsonyabb frekvenciákat. 334 00:20:54,020 --> 00:20:56,490 Ha van egy döntetlen fogsz felvenni a 2. csomópont 335 00:20:56,490 --> 00:20:59,870 hogy a legalacsonyabb ASCII értékeket is. 336 00:20:59,870 --> 00:21:02,420 Akkor fogsz egy új fát ki azokat a 2. csomópont 337 00:21:02,420 --> 00:21:08,030 hogy megy, hogy a kombinált frekvenciát a szülő csomópont. 338 00:21:08,030 --> 00:21:13,240 És akkor fogsz, hogy távolítsa el a 2 gyermek az erdőből 339 00:21:13,240 --> 00:21:15,570 és cseréld ki a szülő. 340 00:21:15,570 --> 00:21:18,930 És fogsz megismételni, hogy addig, amíg már csak 1 fa az erdőben. 341 00:21:18,930 --> 00:21:23,840 Nézzük, hogyan tennéd a Huffman fa ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Itt látható, hogy a leveleket már frekvencia 1, kivéve az "A", amely a frekvencia 2. 343 00:21:29,220 --> 00:21:34,090 Ezért hoztam létre csomópontok minden betű tettem, hogy az ASCII értékét és gyakoriságát. 344 00:21:34,090 --> 00:21:40,090 Tehát, ha azt akarom, hogy létrehozza az első fát, akkor az "L" és "M". 345 00:21:40,090 --> 00:21:43,100 Szóval itt van. A frekvencia a pár lesz 2 346 00:21:43,100 --> 00:21:49,470 mert ez 1 + 1, akkor a következő 2 a legalacsonyabb frekvenciák "Y" és "Z". 347 00:21:49,470 --> 00:21:53,180 És akkor már az összes közülük - a frekvencia 2. 348 00:21:53,180 --> 00:22:00,470 Tehát melyek azok, amelyek a legalacsonyabb ASCII értéket a következő? 349 00:22:00,470 --> 00:22:04,830 "A" és "L". Így hozza létre az új csomópont, 350 00:22:04,830 --> 00:22:09,930 és végül, ez 4 és 2, így a 2 lesz a bal oldalon. 351 00:22:09,930 --> 00:22:12,430 És ez a Huffman fa. 352 00:22:12,430 --> 00:22:16,060 Akkor, ha azt akarom, hogy írjon egy szöveget, 353 00:22:16,060 --> 00:22:24,440 mint bináris átalakítani a szöveget, a Huffman fa nagyon egyszerű. 354 00:22:24,440 --> 00:22:30,220 Például, ha azt mondom, hogy mozog, hogy a bal oldalon van egy 0 és mozog jobbra egy 1, 355 00:22:30,220 --> 00:22:32,410 Mi az, hogy fogja képviselni? 356 00:22:32,410 --> 00:22:35,530 Szóval, mint 1, 1, ezért jobb, jobb, 357 00:22:35,530 --> 00:22:40,370 majd 0, tehát balra lenne L, majd 1, 0, 0-ra. 358 00:22:40,370 --> 00:22:43,950 Tehát 1, 0, így csak 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 És akkor 0, 1, így a "Z". 360 00:22:47,540 --> 00:22:52,170 És akkor 1, 0, 0 - nincs. 361 00:22:52,170 --> 00:22:56,780 0, 0 lesz, "Y", így lusta. 362 00:22:56,780 --> 00:23:06,060 Szóval ez mind nekem, Rob fogja átvenni. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Tehát, a hét 7 dolog. 364 00:23:08,400 --> 00:23:11,390 Már van egy csomó, hogy menjen át nagyon gyorsan. 365 00:23:11,390 --> 00:23:13,430 Bitenkénti operátorok, puffer túlcsordulás, 366 00:23:13,430 --> 00:23:16,760 CS50 könyvtár, akkor a HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Mindent mint a 15 és 20 perc. 368 00:23:20,990 --> 00:23:24,330 Bitenkénti operátorok. Jelenleg 6 nekik, hogy meg kell tudni. 369 00:23:24,330 --> 00:23:31,200 Bitenkénti és bitenkénti vagy, XOR, bal shift jobb shift, és nem. 370 00:23:31,200 --> 00:23:35,420 JOBB SHIFT és nem alig látott előadás egyáltalán. 371 00:23:35,420 --> 00:23:40,480 Majd megy át gyorsan, de akkor jó tudni, hogy ezek a 6., hogy létezik. 372 00:23:40,480 --> 00:23:45,070 Ne feledje, hogy bitenkénti operátorok, mint ha nem 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Nem foglalkozik a bináris a 3. és 4.. 374 00:23:49,420 --> 00:23:56,550 A bitenkénti operátorok akkor tulajdonképpen foglalkozik az egyes bitek a számok a 3. és 4.. 375 00:23:56,550 --> 00:23:59,120 >> Tehát az első, hogy azt mondjuk a bitenkénti nem, 376 00:23:59,120 --> 00:24:02,340 és mindent meg tesz, fordítsa a bit. 377 00:24:02,340 --> 00:24:05,500 Tehát itt, ha írsz ezt a C-ben, akkor nem írja 378 00:24:05,500 --> 00:24:09,380 a ~ 11.011, vagy bármi, akkor írja meg, mint a ~ 4, 379 00:24:09,380 --> 00:24:12,970 és akkor ez megfordítja a bináris 4. 380 00:24:12,970 --> 00:24:24,800 Tehát itt, ~ néhány bináris szám 1101101 lesz pontosan a flip csupa 1-0-ra és a mind a 0-1-es. 381 00:24:24,800 --> 00:24:27,600 Mint mondják, a gyakori használata ezt, 382 00:24:27,600 --> 00:24:30,830 és majd meglátjuk, hogy egy kicsit olyan, mint szeretnénk, hogy dolgozzon ki egy számot 383 00:24:30,830 --> 00:24:35,460 ahol az összes bit értéke 1, kivéve az egyiket. 384 00:24:35,460 --> 00:24:38,560 Szóval, ez általában könnyebb kifejezni a számot 385 00:24:38,560 --> 00:24:40,630 ahol csak, hogy egyetlen bit be van állítva, 386 00:24:40,630 --> 00:24:44,650 majd vegye a ~ a, tehát minden bit be van állítva, kivéve, hogy az egyik. 387 00:24:44,650 --> 00:24:50,300 Szóval ez az, amit mi fogunk használni, inkább egy kicsit. 388 00:24:50,300 --> 00:24:58,220 >> Bitorientált vagy. Itt van 2 bináris számokat, és ezek a 2 szám 389 00:24:58,220 --> 00:25:00,780 elég reprezentatív, hiszen ők képviselik minden lehetséges 390 00:25:00,780 --> 00:25:07,290 kombinációs bitek, amire szüksége lehet, hogy működik. 391 00:25:07,290 --> 00:25:13,540 Itt, amikor or'd minden bit, mi csak lesz összehasonlítani egyenesen lefelé. 392 00:25:13,540 --> 00:25:15,410 Tehát a bal oldalon van egy 1-es és a 1. 393 00:25:15,410 --> 00:25:20,510 Amikor bitenkénti | azok, mit fogok kapni? Egy. 394 00:25:20,510 --> 00:25:25,320 Ezután bitenkénti | 0 és 1 fog adni nekem? Egy. 395 00:25:25,320 --> 00:25:27,840 Bitenkénti 1 és 0 lesz ugyanaz a dolog, egy. 396 00:25:27,840 --> 00:25:31,880 Bitenkénti 0 | 0 fog adni nekem 0-ra. 397 00:25:31,880 --> 00:25:37,300 Tehát az egyetlen eset, amikor kapok 0 van a 0 | 0 eset. 398 00:25:37,300 --> 00:25:40,020 És azt hiszem, hogy csakúgy, mint a logikai ors. 399 00:25:40,020 --> 00:25:44,830 Tehát, ha úgy gondolja, 1 igaz 0 hamis, ugyanez érvényes itt. 400 00:25:44,830 --> 00:25:50,040 Így igaz, vagy igaz, igaz, igaz vagy hamis igaz. 401 00:25:50,040 --> 00:25:57,150 Hamis vagy igaz, igaz, hamis, vagy hamis az egyetlen dolog, ami valójában hamis. 402 00:25:57,150 --> 00:26:00,100 Itt a példa, amit tudnia kell 403 00:26:00,100 --> 00:26:05,160 mint egy nagyon jó példa arra, amikor a bitenkénti operátorok használnak. 404 00:26:05,160 --> 00:26:08,660 Itt, ha mi, vagy tőkét "A" OX20, 405 00:26:08,660 --> 00:26:11,830 és akkor nézd meg ezeket a második, akkor kap valamit. 406 00:26:11,830 --> 00:26:16,020 És ha mi, vagy kisbetűs "a"-val OX20, kapunk valamit. 407 00:26:16,020 --> 00:26:26,750 Szóval húzza fel ASCII tábla. 408 00:26:26,750 --> 00:26:34,000 Oké. Itt azt látjuk, hogy "A" - 409 00:26:34,000 --> 00:26:36,920 itt van "A" decimális 65. 410 00:26:36,920 --> 00:26:45,120 De én megyek hexadecimális, ami Ox41. 411 00:26:45,120 --> 00:26:48,280 Biztos vagyok benne láttuk az osztályban. Azt hiszem, láttam az osztályban 412 00:26:48,280 --> 00:26:52,730 hogy ez elég könnyű átalakítani a hexadecimális bináris. 413 00:26:52,730 --> 00:26:55,280 Tehát itt, ha azt szeretnénk, hogy 4 bináris, 414 00:26:55,280 --> 00:26:59,550 ez csak lesz 0100. 415 00:26:59,550 --> 00:27:03,620 Ez az 1-es sor, 2. helyét, 4-es szinten, így ez 4. 416 00:27:03,620 --> 00:27:08,550 Aztán lehet rész 1 bináris, ami lesz 0001. 417 00:27:08,550 --> 00:27:14,280 És ez lesz a képviselete "A" bináris. 418 00:27:14,280 --> 00:27:22,720 A kezelés ideje alatt kisbetűs "a", ez most lesz Ox61, 419 00:27:22,720 --> 00:27:27,050 ahol felosztása e fel a saját bináris, így a 6 - 420 00:27:27,050 --> 00:27:37,830 Nézzük ténylegesen csinálni - nem látható a radír? Radír. 421 00:27:37,830 --> 00:27:48,220 Ox61. Tehát felosztása 6. bináris lesz 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 És felosztása 1 lesz 0001. 423 00:27:54,610 --> 00:27:56,520 Ami a különbség a 2, 424 00:27:56,520 --> 00:28:04,250 azt látjuk, hogy az egyetlen különbség a kisbetűs és a tőke 'A' ez egyetlen bit. 425 00:28:04,250 --> 00:28:11,810 Így jön vissza ide - rendben van. 426 00:28:11,810 --> 00:28:15,920 Visszatérve ide, ha megnézzük, hogy mi a bit OX20 van, 427 00:28:15,920 --> 00:28:22,210 így felosztása OX20 bele bináris, 428 00:28:22,210 --> 00:28:27,310 a 0010, a 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, az egyetlen bit van beállítva ez a kicsit, hogy arról van szó,, 430 00:28:33,470 --> 00:28:38,210 A váltás a tőke és a kisbetűs "a". 431 00:28:38,210 --> 00:28:47,610 Ha én, vagy "A", ami ez, az "A", 432 00:28:47,610 --> 00:28:50,580 ha én, vagy "A" OX20, 433 00:28:50,580 --> 00:28:53,490 mit fogok kapni? 434 00:28:53,490 --> 00:28:58,960 [Student, nem hallható] >> kisbetűs "a", mert ez lesz a flip ezt a kicsit, hogy az 1. 435 00:28:58,960 --> 00:29:04,170 És ha én, vagy "a"-val OX20, mit fogok kapni? 436 00:29:04,170 --> 00:29:08,780 Kisbetűs egy, mert csak fejekhez, "a"-val OX20, 437 00:29:08,780 --> 00:29:14,580 Én csak lesz fejekhez, ez az egyetlen bit az 1, ez már egy 1, így nem számít. 438 00:29:14,580 --> 00:29:17,960 Tehát, hogy az "a" és "a". 439 00:29:17,960 --> 00:29:24,820 >> Bitorientált és. Ismét el tudunk képzelni ezt a logikus és párja. 440 00:29:24,820 --> 00:29:28,180 A bal oldalon van, igaz és igaz. 441 00:29:28,180 --> 00:29:31,160 Ez lesz, hogy igaz legyen, és minden esetben, 442 00:29:31,160 --> 00:29:36,270 hamis és igaz vagy igaz-hamis, vagy téves és hamis, 443 00:29:36,270 --> 00:29:38,550 egyik sem ezek a dolgok igazak. 444 00:29:38,550 --> 00:29:44,170 Tehát mi a végén kezd 1000. 445 00:29:44,170 --> 00:29:48,830 Tehát most, itt, itt, ahol én is használtam a megbízható bitenkénti nem, 446 00:29:48,830 --> 00:29:52,230 ahol volt OX20. 447 00:29:52,230 --> 00:29:54,350 Tehát ez OX20. 448 00:29:54,350 --> 00:29:59,570 Most már, hogy mit akarok csinálni, bitenkénti ~ az OX20. 449 00:29:59,570 --> 00:30:03,600 Hogy fog fordítsa a bit. 450 00:30:03,600 --> 00:30:09,330 Szóval 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 És így "A" kapcsolatba kerülnek a ~ OX20 fog adni, hogy mit? 452 00:30:18,940 --> 00:30:22,430 Az egyetlen bit valóban meg kell gondolni ezt, 453 00:30:22,430 --> 00:30:26,020 mivel ha az összes ilyen bit értéke 1, 454 00:30:26,020 --> 00:30:29,000 akkor mi lesz, hogy pontosan mi az "A" volt, 455 00:30:29,000 --> 00:30:31,260 kivéve, talán, hogy mi ez a kicsit. 456 00:30:31,260 --> 00:30:34,460 Mert ha ez a 1, most lesz állítva a 0, 457 00:30:34,460 --> 00:30:39,810 mert akármi is ez, kapcsolatba kerülnek ezzel lesz 0-ra. 458 00:30:39,810 --> 00:30:43,280 Tehát mi az 'A' & ~ OX20 fog adni nekem? 459 00:30:43,280 --> 00:30:48,200 [A diákok választ, nem hallható] >> És mi az "a" és - ez az "A". 460 00:30:48,200 --> 00:30:52,170 És mi az "a" és ~ OX20 fog adni nekem? 461 00:30:52,170 --> 00:30:56,720 "A." Mivel ez jelenleg a 1. 462 00:30:56,720 --> 00:30:59,570 Anding ezzel 0 lesz, hogy ez a 0, 463 00:30:59,570 --> 00:31:02,530 és most mi lesz, hogy egy "A". 464 00:31:02,530 --> 00:31:06,600 >> Mindkettő "A", és végül, de nem utolsó sorban az ilyen típusú, 465 00:31:06,600 --> 00:31:10,830 van XOR. Ez nagyon hasonlít, vagy 466 00:31:10,830 --> 00:31:14,400 kivéve azt jelenti, hogy kizárólag vagy. 467 00:31:14,400 --> 00:31:18,420 Ez olyan, mint amit általában gondolnak, mint vagy a valós világban. 468 00:31:18,420 --> 00:31:23,190 Szóval, te vagy a "x" vagy "y", de nem mindkettő. 469 00:31:23,190 --> 00:31:28,700 Itt 1 ^ 1 lesz 0-ra. 470 00:31:28,700 --> 00:31:33,650 Mert igaz, ez - ez nem működik olyan jól a logikai igaz és hamis 471 00:31:33,650 --> 00:31:37,150 mint bitenkénti és és vagy nem, 472 00:31:37,150 --> 00:31:40,100 de igaz ^ igaz, hamis. 473 00:31:40,100 --> 00:31:44,810 Mert mi csak azt akarjuk, hogy visszatérjen igaz, ha csak az egyik igaz. 474 00:31:44,810 --> 00:31:50,950 Tehát 1 ^ 1 0. Mi a helyzet a 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 1 lehet. 1 ^ 0 1, 0 ^ 0 0.. 476 00:31:56,010 --> 00:32:03,890 Szóval, minden körülmények között, 0 bitenkénti valami 0 lesz 0-ra. 477 00:32:03,890 --> 00:32:10,270 1 bitenkénti valami 0 vagy 0 bitenkénti 1 478 00:32:10,270 --> 00:32:14,660 ha ez | vagy ^, akkor lesz 1, és ha ez és ez lesz 0-ra. 479 00:32:14,660 --> 00:32:20,850 És az egyetlen eset, amikor 1 bitenkénti 1 nem 1 kizárólagos vagy. 480 00:32:20,850 --> 00:32:24,580 Az 0110. 481 00:32:24,580 --> 00:32:36,520 Tehát itt most a XOR - tehát újra itt vagyunk 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ OX20 ezek a 2 bit vagyunk képest. 483 00:32:43,480 --> 00:32:50,020 Tehát egy 1 ^ 0 fog adni nekem, mi? Az egy. 484 00:32:50,020 --> 00:32:58,430 'A' ^ OX20 fog adni nekem? Kisbetű a. 485 00:32:58,430 --> 00:33:04,010 'A' ^ OX20 fog adni nekem? Capital A. 486 00:33:04,010 --> 00:33:09,310 Mert bármit ezt csinálja, ez XOR logikai és OX20 487 00:33:09,310 --> 00:33:15,380 hatékonyan essek bármit ez a kicsit. 488 00:33:15,380 --> 00:33:21,240 Ha ez 0, ez most fog válni 1.. 489 00:33:21,240 --> 00:33:26,160 Mivel ez egy 1, 1 ^ 1 0. 490 00:33:26,160 --> 00:33:33,280 Tehát "a" lett "A" és a "A" lett "a". 491 00:33:33,280 --> 00:33:36,910 Tehát XOR egy igazán kényelmes módja csak essek az ügy. 492 00:33:36,910 --> 00:33:39,960 Azt akarod, hogy végighaladni egy sor betű 493 00:33:39,960 --> 00:33:44,330 és alternatív esetében minden egyes karakter, 494 00:33:44,330 --> 00:33:50,680 csak XOR mindent OX20. 495 00:33:50,680 --> 00:33:55,220 >> Most már bal shift. Bal Shift csak megy, hogy alapvetően, 496 00:33:55,220 --> 00:34:01,250 nyomja az összes számokat, vagy balra, és helyezze be a 0-mögöttük. 497 00:34:01,250 --> 00:34:05,550 Tehát itt van 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Fogunk álljon 3 0 által a jobb, 499 00:34:08,560 --> 00:34:13,580 és megkapjuk 01.101.000. 500 00:34:13,580 --> 00:34:16,380 A nonbináris szempontból, 501 00:34:16,380 --> 00:34:24,699 azt látjuk, hogy ez tényleg foglalkozó 13 bal eltolt 3, ami nekünk a 104. 502 00:34:24,699 --> 00:34:32,530 Tehát a bal változó, amit itt látunk, x << y alapvetően x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3-8, így 13 * 8-104. 504 00:34:40,139 --> 00:34:45,679 Ha csak gondol bináris általában, hogy az egyes szám, 505 00:34:45,679 --> 00:34:49,530 ha elkezdjük a jobb, ez az 1-es helyen, majd a 2. helyét, akkor a 4-es helyére. 506 00:34:49,530 --> 00:34:51,330 Tehát nyomva a 0-k a jobb 507 00:34:51,330 --> 00:34:55,080 mi csak nyomja a dolgokat, amelyek a 4-es hely a 8-as helyen, 508 00:34:55,080 --> 00:34:57,920 és a dolgok, amelyek a 8-as hely, hogy a 16. helyét. 509 00:34:57,920 --> 00:35:01,280 Minden műszakban csak megsokszorozza 2. Igen? 510 00:35:01,280 --> 00:35:05,210 [Diák] Mi történik, ha tolódott 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Ha tolódott 5 akkor csak veszíteni számjegy. 512 00:35:10,790 --> 00:35:15,410 Elkerülhetetlen, hogy ez ugyanaz a dolog. Mint egész csak 32 bit, 513 00:35:15,410 --> 00:35:20,750 Tehát, ha hozzá 2 igazán nagy egész, csak nem fér el egy egész szám. 514 00:35:20,750 --> 00:35:23,660 Szóval ez ugyanaz a dolog itt. Ha tolódott 5, 515 00:35:23,660 --> 00:35:25,650 mi lenne most elveszíti azt. 516 00:35:25,650 --> 00:35:28,820 És ez az a fajta, amit gondolok a "durván" 517 00:35:28,820 --> 00:35:37,470 ahol, ha váltás túl messze, akkor elveszíti bit. 518 00:35:37,470 --> 00:35:39,830 >> JOBB SHIFT lesz az ellenkezőjét, 519 00:35:39,830 --> 00:35:43,090 , hova megyünk, hogy dugjon 0-k ki a végét, 520 00:35:43,090 --> 00:35:48,400 és céljainknak, töltse ki a 0-balról. 521 00:35:48,400 --> 00:35:52,910 Tehát ezt, mi alapvetően megfordult, amit már megtette. 522 00:35:52,910 --> 00:35:57,780 És azt látjuk, hogy a három 0-k jobb most esett le, 523 00:35:57,780 --> 00:36:02,020 és már tolta a 1101 egészen jobbra. 524 00:36:02,020 --> 00:36:08,380 Ez tesz 104 >> 3, amely hatékonyan, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Tehát most, itt, ez egy hasonló ötlet. 526 00:36:11,200 --> 00:36:18,720 Miért van az, csak nagyjából x / 2 ^ y, és valójában nem x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Mert ha én tolódott 4, elvesztettem volna 1. 528 00:36:22,240 --> 00:36:25,950 Alapvetően, mit gondol, gondoljunk csak az egész osztás általában. 529 00:36:25,950 --> 00:36:31,070 Tehát, mint 5/2 2 lehet. Ez nem 2.5. 530 00:36:31,070 --> 00:36:35,000 Ez ugyanaz a gondolat itt. Ha elosztjuk 2-vel, 531 00:36:35,000 --> 00:36:39,910 mi is elveszítjük páratlan bit az út mentén. 532 00:36:39,910 --> 00:36:43,870 Tehát most - ennyi bitenkénti. Ez minden, amit tudnod kell. 533 00:36:43,870 --> 00:36:46,340 Ne feledje, a használati esetek láttunk az osztályban, 534 00:36:46,340 --> 00:36:49,340 mint egy kis maszk hasznos bitenkénti operátorok, 535 00:36:49,340 --> 00:36:53,220 vagy használja őket kicsit maszkok. 536 00:36:53,220 --> 00:36:58,620 Nagybetűk és kisbetűk, konverziók egy nagyon prototipikus példa. 537 00:36:58,620 --> 00:37:01,640 >> Oké, buffer overflow támadások. 538 00:37:01,640 --> 00:37:05,110 Bárki, aki emlékszik, mi volt a baj ezzel a funkcióval? 539 00:37:05,110 --> 00:37:10,140 Figyeljük meg, hogy kijelentette, egy sor 12 byte, 12 karakter, 540 00:37:10,140 --> 00:37:18,510 majd másoljuk be a puffer 12 karakter az egész szöveget bárban. 541 00:37:18,510 --> 00:37:25,080 Akkor mi a probléma? 542 00:37:25,080 --> 00:37:32,270 A bűvös 12-es szám meg eléggé, azonnal kiugrik az - miért 12? 543 00:37:32,270 --> 00:37:35,050 Mi van, ha bár történetesen több, mint 12 karakter? 544 00:37:35,050 --> 00:37:41,200 Mi van, ha bár több millió karaktereket? 545 00:37:41,200 --> 00:37:46,010 Itt a kérdés memcpy. Ha bár elég hosszú, 546 00:37:46,010 --> 00:37:50,330 akkor csak teljesen - a "c", "c" nem érdekli, hogy ez csak 12 karakter; 547 00:37:50,330 --> 00:37:53,280 A "c" nem érdekli, hogy nem fér, hogy hány bájt. 548 00:37:53,280 --> 00:37:58,250 Ez csak teljesen felülírja char, a 12 bájt már kiosztott rá, 549 00:37:58,250 --> 00:38:01,830 és minden múltban a memóriában, hogy valójában nem tartozik a tárolóba 550 00:38:01,830 --> 00:38:06,520 , bármilyen a húr bár. 551 00:38:06,520 --> 00:38:09,780 Tehát ez volt az a kép láttunk az osztályban 552 00:38:09,780 --> 00:38:12,220 ahol megvan a verem felnőni. 553 00:38:12,220 --> 00:38:16,040 Meg kell használni ezeket a képeket, vagy megismerkedhet velük újra. 554 00:38:16,040 --> 00:38:21,260 Megvan a stack nőnek fel, a memória címek 0-val kezdődnek, a felső 555 00:38:21,260 --> 00:38:26,270 és a nő le, mint 4 milliárd az alján. 556 00:38:26,270 --> 00:38:28,820 Megvan array "c" valahol a memóriában, 557 00:38:28,820 --> 00:38:32,260 akkor mi van a mutató, bár jobb alatta, 558 00:38:32,260 --> 00:38:38,720 és akkor mi van ez mentette frame mutatóra, a feladó címét, és a szülő rutin verem. 559 00:38:38,720 --> 00:38:40,800 Ne feledje, mi a visszatérési cím? 560 00:38:40,800 --> 00:38:45,360 Ez az, amikor fő meghív egy függvényt ize, meghív egy függvényt bár, 561 00:38:45,360 --> 00:38:48,100 elkerülhetetlen, bár visszatér. 562 00:38:48,100 --> 00:38:52,610 Tehát, amikor bár visszatér, tudniuk kell, hogy ez megy vissza az ize, hogy hívták. 563 00:38:52,610 --> 00:39:01,360 Tehát a visszatérési címet a címe a funkció, hogy vissza kell térnie, amikor a függvény. 564 00:39:01,360 --> 00:39:05,830 Ennek az az oka, hogy ez fontos a buffer overflow támadások, mert kényelmesen, 565 00:39:05,830 --> 00:39:09,580 hackerek szeretné változtatni, hogy feladó címét. 566 00:39:09,580 --> 00:39:14,950 Ahelyett, hogy megy vissza az ize, én megyek vissza oda a hacker akarja, hogy menjek vissza. 567 00:39:14,950 --> 00:39:17,760 És, kényelmesen, ahol a hacker gyakran akar visszamenni 568 00:39:17,760 --> 00:39:22,400 a kezdete a puffer, amit eredetileg. 569 00:39:22,400 --> 00:39:26,170 Tehát észre, megint Little Indian. 570 00:39:26,170 --> 00:39:28,490 A készülék egy példa egy kis indiai rendszer, 571 00:39:28,490 --> 00:39:34,140 így az egész, vagy a mutató tárolja a bájt fordított. 572 00:39:34,140 --> 00:39:38,980 Tehát itt látjuk - ez? Igen. 573 00:39:38,980 --> 00:39:45,660 Látjuk Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Ne feledje, a hexadecimális számjegy? 575 00:39:48,250 --> 00:39:50,640 Nem fordított hexadecimális számjegyek Little Indian, 576 00:39:50,640 --> 00:39:56,110 mert 2 hexadecimális számjegy teszik ki egyetlen byte, és fordított a bájt. 577 00:39:56,110 --> 00:40:00,300 Ezért nem tárolja, mint 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Tároljuk helyett, egy pár 2 számjegy, kezdve a jobb oldalon. 579 00:40:07,520 --> 00:40:10,880 Ez a cím utal a címre a start 580 00:40:10,880 --> 00:40:15,190 a mi buffer, amit valójában akartam másolni be az első helyen. 581 00:40:15,190 --> 00:40:19,230 Ennek az az oka, hogy ez hasznos, mert mi van, ha a támadó 582 00:40:19,230 --> 00:40:24,100 történt, ahelyett, hogy egy sor, amely csak 583 00:40:24,100 --> 00:40:27,060 egy ártalmatlan sor, mint a nevüket, vagy valami, 584 00:40:27,060 --> 00:40:33,900 mi lenne, ha ahelyett, hogy a szöveg is csak néhány tetszőleges kód 585 00:40:33,900 --> 00:40:38,610 hogy volt, amit akartak vele csinálni? 586 00:40:38,610 --> 00:40:45,630 Így tudták - Nem tudok mondani olyan jó kódot. 587 00:40:45,630 --> 00:40:47,780 Ez lehet bármi, mégis. Minden katasztrofális kódot. 588 00:40:47,780 --> 00:40:51,440 Ha azt akarták, tudták csak tenni valamit szegmens hibák, de ez értelmetlen lenne. 589 00:40:51,440 --> 00:40:54,950 Ők általában nem azt feltörni a rendszert. 590 00:40:54,950 --> 00:40:59,930 >> Oké. CS50 könyvtár. 591 00:40:59,930 --> 00:41:04,800 Ez alapvetően getInt, getString, mindazokat a funkciókat, amit biztosított az Ön számára. 592 00:41:04,800 --> 00:41:10,630 Tehát char * karakterláncot, és ez az absztrakció, hogy elsöpörte 593 00:41:10,630 --> 00:41:12,450 valamikor a félév során. 594 00:41:12,450 --> 00:41:18,220 Ne feledje, hogy a szöveg csak egy sor karakter. 595 00:41:18,220 --> 00:41:23,240 Tehát itt látunk egy rövidített változata getString. 596 00:41:23,240 --> 00:41:25,920 Akkor nézd vissza, hogy ne feledje, hogy ez is megvalósul. 597 00:41:25,920 --> 00:41:30,950 A legfontosabb részletek, észre kapunk egy-egy karaktert egy időben 598 00:41:30,950 --> 00:41:34,570 A standard, amely olyan, mint mi adjuk ki a billentyűzetet. 599 00:41:34,570 --> 00:41:37,890 Tehát egy karakter egy időben, és ha túl sok karaktert, 600 00:41:37,890 --> 00:41:40,580 így ha n + 1-nél nagyobb kapacitású, 601 00:41:40,580 --> 00:41:44,140 akkor meg kell növelni a kapacitását a puffer. 602 00:41:44,140 --> 00:41:47,780 Tehát itt vagyunk megduplázza a méretét a puffer. 603 00:41:47,780 --> 00:41:51,840 És ez megy tovább, mi be a karaktert a puffer 604 00:41:51,840 --> 00:41:56,220 amíg nem kap egy új vonal vagy fájl vége, vagy bármi, 605 00:41:56,220 --> 00:41:59,380 ebben az esetben, mi történik a húr, és akkor az igazi getString 606 00:41:59,380 --> 00:42:05,120 zsugorodik a memóriát, mint ha mi juttatott túl sok memóriát megyek vissza, és csökken egy kicsit. 607 00:42:05,120 --> 00:42:08,830 Tehát nem azt mutatják, hogy, de a fő gondolata az, 608 00:42:08,830 --> 00:42:11,960 azt, hogy olvasni egy karaktert egy időben. 609 00:42:11,960 --> 00:42:17,140 Nem csak olvasni egy egészet egyszerre, 610 00:42:17,140 --> 00:42:19,550 mert a puffer csak egy bizonyos méretet. 611 00:42:19,550 --> 00:42:26,590 Tehát, ha a húr, amely megpróbálja beilleszteni puffer túl nagy, akkor ez túlcsordul. 612 00:42:26,590 --> 00:42:28,940 Tehát itt megakadályozza, hogy csak olvasott egyetlen karaktert 613 00:42:28,940 --> 00:42:33,750 egy időben, és egyre nagyobb, amikor szükségünk van rá. 614 00:42:33,750 --> 00:42:40,270 Így getInt a másik CS50 könyvtári funkciókat hajlanak arra, hogy getString 615 00:42:40,270 --> 00:42:42,310 azok megvalósítása. 616 00:42:42,310 --> 00:42:45,370 Szóval kiemelte a fontos dolgokat. 617 00:42:45,370 --> 00:42:49,460 Felszólítja getString, hogy egy húr. 618 00:42:49,460 --> 00:42:51,710 Ha getString nem tért vissza a memória, 619 00:42:51,710 --> 00:42:54,270 ne feledjük, hogy getString mallocs valami, így ha hívja getString 620 00:42:54,270 --> 00:42:57,820 akkor nem (érthetetlen), szabad, hogy a húr, amit kapott. 621 00:42:57,820 --> 00:43:02,870 Tehát itt, ha nem malloc valamit, amit vissza INT_MAX, mint csak egy zászló, amely, 622 00:43:02,870 --> 00:43:05,650 Hé, valójában nem voltak képesek, hogy egy egész szám. 623 00:43:05,650 --> 00:43:10,830 Meg kell figyelmen kívül hagyni, amit én vissza hozzád, vagy 624 00:43:10,830 --> 00:43:15,540 akkor nem kell kezelni ezt, mint egy érvényes bemenet. 625 00:43:15,540 --> 00:43:21,360 Végül, feltételezve, hogy nem sikerült, az általunk használt sscanf, hogy a különleges zászló, 626 00:43:21,360 --> 00:43:23,820 ami azt jelenti, hogy első meccsen az egész, 627 00:43:23,820 --> 00:43:26,770 akkor illik egyik karakter után egész. 628 00:43:26,770 --> 00:43:29,070 Így észre, azt akarjuk, hogy egyenlő 1. 629 00:43:29,070 --> 00:43:32,940 Tehát sscanf vissza, hogy hány mérkőzés, ha sikeresen tette? 630 00:43:32,940 --> 00:43:37,010 Vissza fog térni 1, ha sikeresen illeszkedik egy egész szám, 631 00:43:37,010 --> 00:43:40,890 majd vissza 0, ha nem egyezik egész szám, és vissza fog térni 2 632 00:43:40,890 --> 00:43:45,920 ha ez egy egész párosított majd néhány karakter. 633 00:43:45,920 --> 00:43:49,780 Így észre, hogy újra, ha egyezik valami, de 1. 634 00:43:49,780 --> 00:43:55,230 Tehát, ha léptünk 1, 2, 3, a C, vagy 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 majd az 1, 2, 3 kapnánk tárolt egész szám, 636 00:43:57,400 --> 00:43:59,620 X kapnánk tárolt a karakter, 637 00:43:59,620 --> 00:44:06,410 sscanf visszatér 2, és mi újra, mert csak szeretne egy egész. 638 00:44:06,410 --> 00:44:09,810 >> Gyorsan fúj a HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 HyperText Markup Language szerkezetét és szemantikáját az interneten. 640 00:44:15,340 --> 00:44:19,960 Itt a példa előadás, ahol már a HTML-címkéket. 641 00:44:19,960 --> 00:44:22,110 Van fejét címkéket, test címke, 642 00:44:22,110 --> 00:44:27,770 van példa az üres címkéket, ahol valójában nincs kezdő és záró tag, 643 00:44:27,770 --> 00:44:30,820 már csak linket, és a kép. 644 00:44:30,820 --> 00:44:38,480 Nincs záró kép tag, ott csak egy tag, amely megvalósítja mindazt, amit a címke kell tennie. 645 00:44:38,480 --> 00:44:41,950 A link egy példa, majd nézze meg, hogyan hivatkoznak CSS, 646 00:44:41,950 --> 00:44:45,910 A script egy példa arra, hogy hogyan hivatkoznak külső JavaScript. 647 00:44:45,910 --> 00:44:53,100 Ez nagyon egyszerű, és ne feledd, a HTML nem programozási nyelv. 648 00:44:53,100 --> 00:44:58,250 Itt emlékszem, hogyan határozná meg egy űrlapot, vagy legalábbis, hogy ez mit fog csinálni? 649 00:44:58,250 --> 00:45:01,740 Ez a forma olyan cselekvés és a módszer. 650 00:45:01,740 --> 00:45:06,210 A módszerek, akkor mindig csak látni a GET és a POST. 651 00:45:06,210 --> 00:45:09,040 Úgyhogy az a változat, ahol a dolog kerül fel az URL-ben. 652 00:45:09,040 --> 00:45:11,680 POST, ahol ez nem hozott a URL. 653 00:45:11,680 --> 00:45:18,520 Ehelyett minden adatot a nyomtatvány egészül több rejtett a HTTP kérés. 654 00:45:18,520 --> 00:45:22,390 Tehát itt, intézkedéseket határozza meg, ahol a HTTP kérés megy. 655 00:45:22,390 --> 00:45:27,490 Ha megy a google.com / search. 656 00:45:27,490 --> 00:45:32,890 Módszer. Ne feledje, a különbség a GET és a POST, 657 00:45:32,890 --> 00:45:37,200 , és csak azt mondom példaként, ha azt szeretnénk, hogy könyvjelző valamit. 658 00:45:37,200 --> 00:45:40,660 Ön soha nem lesz képes a kedvencei a POST URL 659 00:45:40,660 --> 00:45:44,970 mivel az adatok nem szerepel az URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, most a HyperText Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 A HyperText Transfer Protocol, akkor elvárják, hogy át 662 00:45:54,080 --> 00:45:57,710 HyperText Markup Language, és ez. 663 00:45:57,710 --> 00:46:00,170 De ez is át olyan képeket talál az interneten, 664 00:46:00,170 --> 00:46:05,400 mindenféle letöltés csinál indul, mint egy HTTP kérés. 665 00:46:05,400 --> 00:46:10,350 Tehát HTTP csak a nyelv a World Wide Web. 666 00:46:10,350 --> 00:46:15,610 És itt meg kell ismerni ezt a fajta egy HTTP kérés. 667 00:46:15,610 --> 00:46:19,300 Itt HTTP/1.1 az oldalon, csak azt mondja, hogy ez a verzió 668 00:46:19,300 --> 00:46:21,570 A protokoll én használ. 669 00:46:21,570 --> 00:46:25,770 Ez nagyjából mindig lesz HTTP/1.1, ahogy látni fogod. 670 00:46:25,770 --> 00:46:30,110 Ekkor azt látjuk, hogy ez volt a GET, a másik, hogy POST, hogy lehet látni. 671 00:46:30,110 --> 00:46:40,790 És az URL-t, hogy akartam látogatás www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Úgy emlékszem, hogy ez, a kérdőjel q = bla-bla-bla, 673 00:46:44,240 --> 00:46:49,040 az a fajta dolog, hogy nyújtja be a formában. 674 00:46:49,040 --> 00:46:51,830 A válasz talán visszatér hozzám fog kinézni. 675 00:46:51,830 --> 00:46:54,050 Ismét, kezdve a protokoll, ami lesz, hogy a 676 00:46:54,050 --> 00:46:59,190 majd az állapot kódot. Itt van 200 OK. 677 00:46:59,190 --> 00:47:05,060 És végül, az internetes oldalt, hogy én valóban kértem követi. 678 00:47:05,060 --> 00:47:08,210 A lehetséges állapot kódot lehet látni, és tudnia kell, többen. 679 00:47:08,210 --> 00:47:12,770 200 OK akkor valószínűleg látott. 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 általában, ha elmész egy honlapon, és valami elromlott vagy PHP kódot összeomlik, 682 00:47:22,140 --> 00:47:24,930 míg a készülék van, hogy a nagy narancssárga doboz 683 00:47:24,930 --> 00:47:27,830 hogy jön, és azt mondja, mint valami rossz, ez a kód nem működik 684 00:47:27,830 --> 00:47:30,380 vagy ez a funkció rossz. 685 00:47:30,380 --> 00:47:33,230 Általában honlap nem akarom, hogy tudja, milyen funkciókat valóban rossz, 686 00:47:33,230 --> 00:47:37,880 Tehát ahelyett, hogy ők majd csak kapsz 500 Internal Server hibák. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP 1 réteg alatt HTTP. 688 00:47:43,050 --> 00:47:47,550 Ne feledje, hogy az interneten kívül a World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Mint ha játszani egy online játék, amely nem megy át HTTP, 690 00:47:52,270 --> 00:47:55,740 ez megy keresztül a másik -, hogy még mindig az internet, 691 00:47:55,740 --> 00:47:58,900 de nem használ HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP csak egy példa a protokoll épülő TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP szó szerint azt jelenti Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Minden számítógépnek van IP-címe, ezek a 4 számjegyű dolgokat 695 00:48:11,500 --> 00:48:16,510 mint a 192.168.2.1, vagy bármi más, hogy inkább legyen egy helyi. 696 00:48:16,510 --> 00:48:23,390 De ez a minta az IP-cím. 697 00:48:23,390 --> 00:48:29,060 Tehát a DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 ez az, ami lefordítja a dolgokat, mint a google.com a tényleges IP-címet. 699 00:48:33,410 --> 00:48:37,700 Tehát, ha azt írja, hogy az IP-címet egy URL-t, 700 00:48:37,700 --> 00:48:40,850 hogy hozna, hogy a Google, de inkább nem emlékszem ezeket a dolgokat. 701 00:48:40,850 --> 00:48:45,470 Meg inkább emlékezni google.com helyett. 702 00:48:45,470 --> 00:48:51,560 Az utolsó dolog, amit meg a port, ahol ez a TCP része az IP. 703 00:48:51,560 --> 00:48:54,880 TCP nem több. Gondolj, mondjuk, akkor a böngésző fut. 704 00:48:54,880 --> 00:48:58,670 Lehet, hogy néhány e-mail alkalmazás fut; 705 00:48:58,670 --> 00:49:02,150 lehet, hogy egy másik program, amely az interneten fut. 706 00:49:02,150 --> 00:49:05,090 Mindannyian kell az internet-hozzáférést, 707 00:49:05,090 --> 00:49:08,100 , de a számítógép csak 1 WiFi kártya vagy bármi. 708 00:49:08,100 --> 00:49:10,780 Tehát port az is, hogy képesek vagyunk, hogy osszuk el 709 00:49:10,780 --> 00:49:13,550 hogy ezek az alkalmazások képesek használni az internetet. 710 00:49:13,550 --> 00:49:17,230 Minden alkalmazás kap 1 speciális port, hogy képes hallgatni, 711 00:49:17,230 --> 00:49:19,670 és alapértelmezés szerint a HTTP-as portot használja a 80. 712 00:49:19,670 --> 00:49:22,410 Egyes e-mail szolgáltatások használata 25. 713 00:49:22,410 --> 00:49:24,490 Az alacsony sorszámú is hajlamosak fenntartva. 714 00:49:24,490 --> 00:49:29,270 Ön általában tudja, hogy a magasabb számozású is magad. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Mi stílus weboldalak CSS, nem HTML. 717 00:49:36,030 --> 00:49:38,440 Jelenleg 3 helyen akkor tegye a CSS. 718 00:49:38,440 --> 00:49:46,300 Ez lehet egyenes, a stílus címkéket, vagy egy teljesen különálló fájlt, majd kapcsolódik be 719 00:49:46,300 --> 00:49:48,470 És itt csak egy példa a CSS. 720 00:49:48,470 --> 00:49:50,450 Meg kell ismerni ezt a mintát, 721 00:49:50,450 --> 00:49:54,310 ahol az első példa a mi felel a body tag, 722 00:49:54,310 --> 00:49:56,680 és itt mi központosító a body tag. 723 00:49:56,680 --> 00:50:00,420 A második példa, mi az a dolog illő 724 00:50:00,420 --> 00:50:04,740 azonosító lábléc, és mi alkalmazása néhány stílusok, hogy. 725 00:50:04,740 --> 00:50:07,310 Figyeljük meg, hogy ID lábléc szöveg igazodik a bal oldalon, 726 00:50:07,310 --> 00:50:09,840 míg a szövegtörzs-igazítja központ. 727 00:50:09,840 --> 00:50:13,180 Lábléc a testben. 728 00:50:13,180 --> 00:50:16,470 Ez helyett, text-align maradt, annak ellenére, hogy a test szerint text-align center. 729 00:50:16,470 --> 00:50:18,880 Ez az egész kaszkád része. 730 00:50:18,880 --> 00:50:22,110 Akkor lehet - megadhatja stílusok a test, 731 00:50:22,110 --> 00:50:25,320 majd a dolgok a szervezetben megadhatja konkrétabb stílus, 732 00:50:25,320 --> 00:50:28,160 és működnek a dolgok, mint ahogy várnánk. 733 00:50:28,160 --> 00:50:34,420 Konkrétabb CSS specifikációk az elsőbbséget. 734 00:50:34,420 --> 00:50:46,140 Azt hiszem, ez az. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Szia mindenkinek. Ha tudtam csak, hogy a figyelmet. 736 00:50:49,260 --> 00:50:53,990 Én vagyok, Ali és én megyek keresztül, PHP és SQL nagyon gyors. 737 00:50:53,990 --> 00:51:00,310 Így el tudjuk kezdeni. PHP rövid a PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 És mint minden tudnia kell, hogy ez egy szerver-oldali programozási nyelv, 739 00:51:03,730 --> 00:51:06,800 és használja a hátsó weboldalak, 740 00:51:06,800 --> 00:51:12,540 és hogyan csinál sok a számítások, a mögött színfalak rész. 741 00:51:12,540 --> 00:51:17,510 Syntax. Ez nem olyan, mint a C, micsoda meglepetés. 742 00:51:17,510 --> 00:51:22,060 Mindig meg kell kezdeni az, ha látod, a - nem tudok előrehaladni. 743 00:51:22,060 --> 00:51:31,340 Láthatjuk, hogy szükség van az új típusú fogszabályozó és akkor is szükség van az? Php. 744 00:51:31,340 --> 00:51:35,780 Ez mindig, hogy hogyan kell a keret a PHP szöveget, a PHP kódot. 745 00:51:35,780 --> 00:51:39,180 Így nem csak, mint a C, ahol ilyen tedd az első. 746 00:51:39,180 --> 00:51:42,290 Meg kell, hogy mindig körül azt. 747 00:51:42,290 --> 00:51:47,610 És most, a fő szintaxis hogy minden változót kell kezdeni a $ karaktert. 748 00:51:47,610 --> 00:51:49,490 Meg kell csinálni, ha éppen meghatározásakor őket, meg kell csinálni 749 00:51:49,490 --> 00:51:51,860 ha utalsz, hogy őket később. 750 00:51:51,860 --> 00:51:56,510 Mindig kell, hogy a $. Ez az új legjobb barátja, elég sok. 751 00:51:56,510 --> 00:52:01,690 Nem - ellentétben a C, akkor nem kell, hogy milyen típusú változót is. 752 00:52:01,690 --> 00:52:04,940 Tehát amíg szükséged van a $, akkor nem kell tenni, mint a, 753 00:52:04,940 --> 00:52:09,470 int x vagy string y, satöbbi, satöbbi. 754 00:52:09,470 --> 00:52:11,490 Tehát egy kis különbség. 755 00:52:11,490 --> 00:52:15,590 Ennek eredményeként a, az azt jelenti, hogy a PHP egy gyengén típusát. 756 00:52:15,590 --> 00:52:19,310 A PHP egy gyengén típusú nyelv, és ez gyengén gépelt változókat. 757 00:52:19,310 --> 00:52:24,020 Más szavakkal ez azt jelenti, hogy meg lehet váltani a különböző változó típusok. 758 00:52:24,020 --> 00:52:27,230 Tárolhatja az 1, mint egy int, 759 00:52:27,230 --> 00:52:29,650 lehet tárolni, mint egy húr, és akkor tárolja, mint a float, 760 00:52:29,650 --> 00:52:33,550 és ez mind az, hogy 1-es szám. 761 00:52:33,550 --> 00:52:36,080 Annak ellenére, hogy te tárolja a különböző formák, 762 00:52:36,080 --> 00:52:39,120 még mindig - a változó típusok még mindig tartja a végén. 763 00:52:39,120 --> 00:52:41,540 Tehát, ha meg itt, ha emlékszel a Pset 7, 764 00:52:41,540 --> 00:52:43,500 Sokan talán már kérdés ezzel. 765 00:52:43,500 --> 00:52:47,280 Két azonos jelek, 3 egyenlő jelek, 4 egyenlő jeleket. 766 00:52:47,280 --> 00:52:49,990 Jól van, de nincsenek 4 egyenlő jelek, de vannak a 2. és 3.. 767 00:52:49,990 --> 00:52:53,320 Használja 2. azonos jeleket, hogy ellenőrizze az értékeket. 768 00:52:53,320 --> 00:52:55,830 Meg tudja nézni az egész típusok. 769 00:52:55,830 --> 00:52:58,770 Tehát, ha látod az első példa, 770 00:52:58,770 --> 00:53:02,210 Van num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Tehát az int, és a húr egyaránt, technikailag, 1, 772 00:53:06,710 --> 00:53:10,790 de ők különböző típusú. De a két egyenlő, akkor az még át. 773 00:53:10,790 --> 00:53:15,510 Ahhoz azonban, hogy a hármas egyenlők, ellenőrzi érték, valamint a különböző típusú. 774 00:53:15,510 --> 00:53:18,760 Ez azt jelenti, hogy ez nem fog múlni, hogy a második esetben is, 775 00:53:18,760 --> 00:53:22,350 hová a 3 egyenlő jelek helyett. 776 00:53:22,350 --> 00:53:26,590 Szóval ez egy nagy különbség, hogy érdemes minden kimutatták már. 777 00:53:26,590 --> 00:53:31,570 >> Karakterlánc összefűzés egy másik hatékony dolog, amit lehet használni a PHP. 778 00:53:31,570 --> 00:53:34,080 Ez alapvetően csak a praktikus dot jelöléssel, 779 00:53:34,080 --> 00:53:36,230 és ez hogyan lehet kötni húrok együtt. 780 00:53:36,230 --> 00:53:40,800 Tehát ha Cat és van kutya, és azt szeretné, hogy a 2. húrok együtt, 781 00:53:40,800 --> 00:53:44,080 akkor az idő, és ez a fajta, hogyan működik. 782 00:53:44,080 --> 00:53:46,660 Akkor is csak tegyük őket egymás mellé, 783 00:53:46,660 --> 00:53:49,030 mint látható itt az alsó példában, 784 00:53:49,030 --> 00:53:51,610 ahol már echo karakterlánc 1, hely húr 2.. 785 00:53:51,610 --> 00:53:56,930 PHP tudni fogja helyettesíteni ezeket. 786 00:53:56,930 --> 00:53:59,780 Tömbök. Most, PHP, van 2 különböző tömbök. 787 00:53:59,780 --> 00:54:03,180 Lehet rendszeres tömbök, és akkor is asszociatív tömbök, 788 00:54:03,180 --> 00:54:06,040 és fogunk menni rajtuk keresztül most. 789 00:54:06,040 --> 00:54:08,280 A rendszeres tömbök csak ez a C-ben 790 00:54:08,280 --> 00:54:11,240 és így van indexek meg vannak számlálva. 791 00:54:11,240 --> 00:54:13,160 Most mi csak létre fog hozni egy és fel - 792 00:54:13,160 --> 00:54:15,500 Szóval így hozunk létre egy üres tömböt, aztán megyünk 793 00:54:15,500 --> 00:54:17,310 helyezni a indexszám 0-ra. 794 00:54:17,310 --> 00:54:19,200 Megyünk, hogy a 6-os szám, az érték 6. 795 00:54:19,200 --> 00:54:21,500 Láthatjuk, hogy az alján van. 796 00:54:21,500 --> 00:54:24,240 Where's - az index 1-es szám fogunk tenni érték 4-es számú, 797 00:54:24,240 --> 00:54:26,720 és így láthatja, van egy 6, van egy 4, 798 00:54:26,720 --> 00:54:29,160 aztán ahogy mi nyomtatás dolgokat, 799 00:54:29,160 --> 00:54:33,550 amikor megpróbálja kinyomtatni a tárolt érték az index 0, 800 00:54:33,550 --> 00:54:36,900 aztán majd meglátjuk az értéket 6 kinyomtatását. Cool? 801 00:54:36,900 --> 00:54:40,160 Szóval ez a rendszeres tömbök neked. 802 00:54:40,160 --> 00:54:42,750 Egy másik módja, akkor is hozzá dolgokat rendszeres tömbök már 803 00:54:42,750 --> 00:54:44,780 az, ha csak akkor fűzze őket a végén. 804 00:54:44,780 --> 00:54:47,240 Ez azt jelenti, hogy nem kell megadni az adott index. 805 00:54:47,240 --> 00:54:51,000 Láthatjuk számot, majd a szögletes zárójelben nincs index megadva. 806 00:54:51,000 --> 00:54:56,270 És akkor tudni fogja, hogy - PHP tudni fogja, hogy csak hozzá, hogy a végén a lista, a következő szabad helyet. 807 00:54:56,270 --> 00:54:59,190 Így láthatjuk a 1. ott azon a 0 helyen, 808 00:54:59,190 --> 00:55:02,690 2 ment ott az első helyen. 809 00:55:02,690 --> 00:55:04,690 A 3 megy - egészül ki ott is. 810 00:55:04,690 --> 00:55:06,720 Tehát ez a fajta van értelme. Te csak mindig hozzátéve, hogy, 811 00:55:06,720 --> 00:55:09,360 és amikor mi visszhangzó indexe 1-es szám, 812 00:55:09,360 --> 00:55:13,080 kiírja az érték 2. 813 00:55:13,080 --> 00:55:16,800 >> Aztán ott van a tömbök, amelyek asszociatív tömbök. 814 00:55:16,800 --> 00:55:19,370 Az asszociatív tömbök, ahelyett, hogy a numerikus indexek 815 00:55:19,370 --> 00:55:23,630 mit csinálnak az, hogy vannak indexek, amelyek a húr. 816 00:55:23,630 --> 00:55:25,670 Láthatjuk, ahelyett, hogy - megszabadultam az összes ilyen szám indexek 817 00:55:25,670 --> 00:55:32,140 és most ez kulcs1, key2, KEY3, és ők idézőjelek, jelezve, hogy ők mind szálakat. 818 00:55:32,140 --> 00:55:34,470 Tehát mi is van egy példa erre. 819 00:55:34,470 --> 00:55:38,790 A példa erre az, hogy mi van a tf, és ez az index nevét. 820 00:55:38,790 --> 00:55:42,030 Megyünk, hogy "Ali", mint a neve, az index, kalória evett, 821 00:55:42,030 --> 00:55:47,640 tudunk rakni egy int ezúttal helyett egy string, 822 00:55:47,640 --> 00:55:52,240 , majd az index embernek tetszik, tudunk rakni egy egész sor belsejébe. 823 00:55:52,240 --> 00:55:55,490 Tehát ez a fajta - ez egy hasonló fogalom, hogy hogyan kellett 824 00:55:55,490 --> 00:55:58,930 indexek számokat, de most már meg tudjuk változtatni az indexek körül 825 00:55:58,930 --> 00:56:03,890 hogy azokat húrok helyett. 826 00:56:03,890 --> 00:56:06,070 Megteheti ezt, emellett csak csinálja külön-külön, 827 00:56:06,070 --> 00:56:09,400 meg tudod csinálni mindezt egy darab. Így láthatjuk, hogy a TF az, hogy tömb, 828 00:56:09,400 --> 00:56:13,350 aztán mi meg őket egy hatalmas szögletes zárójel készlet. 829 00:56:13,350 --> 00:56:15,220 Annak érdekében, hogy képes gyorsítsák fel a dolgokat. 830 00:56:15,220 --> 00:56:19,730 Ez inkább stilisztikai választás, mint nem. 831 00:56:19,730 --> 00:56:21,550 Mi is hurkok. 832 00:56:21,550 --> 00:56:26,020 A C-ben van hurkok, hogy a munka, mint ez. 833 00:56:26,020 --> 00:56:29,690 Mi volt a sor, és mentünk a mutató 0 és a végén a lista, 834 00:56:29,690 --> 00:56:31,740 és nyomtassa ki az egészet, igaz? 835 00:56:31,740 --> 00:56:33,880 Kivéve, hogy a probléma az, hogy az asszociatív tömbök, 836 00:56:33,880 --> 00:56:36,610 nem feltétlenül ismeri azokat a számszerű mutatók 837 00:56:36,610 --> 00:56:39,610 mert most már a string indexeket. 838 00:56:39,610 --> 00:56:44,800 Most használd foreach hurok, ami megint, akkor remélhetőleg használt Pset 7. 839 00:56:44,800 --> 00:56:48,930 Foreach hurok is csak azt tudom, minden egyes része a lista. 840 00:56:48,930 --> 00:56:52,450 És nem kell tudni, hogy pontosan a numerikus index, hogy van. 841 00:56:52,450 --> 00:56:56,490 Szóval a foreach szintaxis, így foreach, akkor tegye a tömb. 842 00:56:56,490 --> 00:57:00,430 Szóval a tömb neve Pset, majd ahogy a szót, 843 00:57:00,430 --> 00:57:04,530 és akkor, hogy ezt a helyi ideiglenes változó, hogy fogsz használni 844 00:57:04,530 --> 00:57:10,690 csak az adott dolog, ami fog tartani az adott - 845 00:57:10,690 --> 00:57:14,770 egy példányát vagy egy szakasz a tömb. 846 00:57:14,770 --> 00:57:18,350 Pset num tart 1, és akkor talán tartalmazza majd a 6-os szám, 847 00:57:18,350 --> 00:57:20,410 és akkor tartsa a 2-es szám. 848 00:57:20,410 --> 00:57:26,630 De ez biztos, hogy menjen át minden egyes értéket, ami a tömbben. 849 00:57:26,630 --> 00:57:30,530 Hasznos funkció, amit tudnia kell a PHP az szükséges, 850 00:57:30,530 --> 00:57:35,880 így gondoskodik arról, hogy te, beleértve bizonyos fájlokat, echo, kilépés, üres. 851 00:57:35,880 --> 00:57:40,490 Azt ajánlom, nézd meg Pset 7, és nézd meg ezeket a funkciókat. 852 00:57:40,490 --> 00:57:42,810 Lehet, hogy ismeri azokat, 853 00:57:42,810 --> 00:57:47,060 úgyhogy biztosan tudni, hogy mi, pontosan, ezek mind csinálnak. 854 00:57:47,060 --> 00:57:50,080 >> Most fogunk átmenni köre nagyon gyorsan. 855 00:57:50,080 --> 00:57:53,490 A kör, PHP egyfajta funky dolog, ellentétben a C, 856 00:57:53,490 --> 00:57:56,170 és így mi csak menni rajta gyorsan. 857 00:57:56,170 --> 00:57:58,930 Mondjuk kezdjük abban nyíllal, hogy mi van ott. 858 00:57:58,930 --> 00:58:02,900 És meg fogjuk kezdeni $ i. Tehát a változó "i" lesz 0, 859 00:58:02,900 --> 00:58:06,730 és mi csak fog tartani nyomtatást azt, hogy a nagy fehér doboz ott. 860 00:58:06,730 --> 00:58:09,220 Fogunk kezdeni I0, aztán megyünk echo azt. 861 00:58:09,220 --> 00:58:12,670 Tehát ott van a 0-ra. 862 00:58:12,670 --> 00:58:15,210 És akkor mi lesz, hogy megnöveljük a for ciklus, 863 00:58:15,210 --> 00:58:17,810 és akkor lesz 1 értéket. 864 00:58:17,810 --> 00:58:20,070 Az egyik kisebb, mint 3, így fog át, hogy a hurok, 865 00:58:20,070 --> 00:58:23,230 majd fogjuk látni, hogy a nyomtatott újra. 866 00:58:23,230 --> 00:58:25,520 Fogunk megnöveljük ismét 2 867 00:58:25,520 --> 00:58:29,860 és 2 kisebb, mint 3, így kihagyom a for ciklus, és akkor nyomtassa ki a 2.. 868 00:58:29,860 --> 00:58:35,100 Akkor vegye figyelembe, hogy 3 nem kevesebb, mint 3, így fogunk törni a for ciklus. 869 00:58:35,100 --> 00:58:40,050 Tehát most már kilépett, majd fogunk menni aFunction. 870 00:58:40,050 --> 00:58:45,010 Oké. Így kell megjegyezni, hogy ez a változó, amit létrehoztunk, 871 00:58:45,010 --> 00:58:48,270 Az "i" változó, nem helyi távcsöves. 872 00:58:48,270 --> 00:58:50,280 Ez azt jelenti, hogy nem a helyi hurok, 873 00:58:50,280 --> 00:58:58,060 és a változó még ma is hozzáférhet és módosíthatja utána, és akkor is hatékony legyen. 874 00:58:58,060 --> 00:59:02,160 Tehát, ha bemegy a funkciót most, látni fogja, hogy mi is használjuk az "i" változó, 875 00:59:02,160 --> 00:59:05,320 és mi lesz növekmény 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Azt hiszem, az első, amely a C, hogy ez egy példányt a "i" változó. 877 00:59:09,410 --> 00:59:12,830 Ez egy teljesen más dolog, ami helyes. 878 00:59:12,830 --> 00:59:16,560 Tehát, ha nyomtatni fogunk nyomtatni 'i' + +, ami megy, hogy nyomtassa ki, hogy a 4, 879 00:59:16,560 --> 00:59:19,640 aztán megyünk - sajnálom. 880 00:59:19,640 --> 00:59:22,030 Aztán mi lesz a vége, ki ezt a funkciót, 881 00:59:22,030 --> 00:59:24,820 és mi lesz, ha ez a nyíl van most. 882 00:59:24,820 --> 00:59:29,190 Ez azt jelenti, hogy akkor, ugyanakkor, bár a funkció megváltoztatta az értéke "i", 883 00:59:29,190 --> 00:59:32,620 ez nem változott a függvényen kívülre, 884 00:59:32,620 --> 00:59:35,060 mert a funkció egy külön köre. 885 00:59:35,060 --> 00:59:38,960 Ez azt jelenti, hogy ha echo "i", nem változott a funkció hatáskörének, 886 00:59:38,960 --> 00:59:43,660 így aztán megyünk nyomtatni 3. újra. 887 00:59:43,660 --> 00:59:47,520 A különböző dolog köre a PHP, mint a C- 888 00:59:47,520 --> 00:59:51,130 >> Most a PHP és a HTML. 889 00:59:51,130 --> 00:59:53,510 PHP használják, hogy a weboldalak dinamikus. 890 00:59:53,510 --> 00:59:58,660 Ez a fajta teszi a dolgokat más. 891 00:59:58,660 --> 01:00:02,090 Van különbözik a HTML. 892 01:00:02,090 --> 01:00:05,230 A HTML, mindig csak ugyanaz a statikus dolog, mint például, hogy Rob azt mutatták, 893 01:00:05,230 --> 01:00:09,370 míg a PHP, meg tudod változtatni a dolgokat alapján, hogy ki a felhasználó. 894 01:00:09,370 --> 01:00:11,830 Tehát, ha én ezt, én, "Te néven jelentkezett be -", majd a nevét, 895 01:00:11,830 --> 01:00:14,420 és meg tudom változtatni a nevet. Tehát most a neve Joseph, 896 01:00:14,420 --> 01:00:18,880 és ez a "rólam", de akkor én is megváltoztathatja a nevét, hogy Tommy. 897 01:00:18,880 --> 01:00:21,700 És lenne egy másik dolog. 898 01:00:21,700 --> 01:00:23,840 Így akkor is megváltoztathatja a különböző dolgokat róla, 899 01:00:23,840 --> 01:00:27,070 és megmutatja a különböző tartalmak neve alapján. 900 01:00:27,070 --> 01:00:31,430 Így PHP fajta változás, mi folyik a honlapon. 901 01:00:31,430 --> 01:00:33,540 Ugyanaz itt. Mégis, vegye figyelembe, hogy a különböző tartalmak, 902 01:00:33,540 --> 01:00:38,870 még ha technikailag még hozzáférését, hogy ugyanaz a weboldal a felszínen. 903 01:00:38,870 --> 01:00:43,450 Generálása HTML. Vannak 2 különböző módon lehet csinálni. 904 01:00:43,450 --> 01:00:48,980 Akkor megyünk át, hogy most. Az első módszer, akkor - igen, sajnálom. 905 01:00:48,980 --> 01:00:51,150 Szóval csak a szokásos for ciklus a PHP-ben, 906 01:00:51,150 --> 01:00:56,270 és akkor visszhang a PHP és visszhang ki a HTML. 907 01:00:56,270 --> 01:00:58,720 A mi Rob mutattam a HTML script 908 01:00:58,720 --> 01:01:04,030 és akkor használja a PHP print, hogy csak nyomtassa ki a weboldal. 909 01:01:04,030 --> 01:01:09,520 A másik út az, hogy nem, mint ha külön ki a PHP és a HTML. 910 01:01:09,520 --> 01:01:11,940 Szóval lehet, hogy egy sor PHP, amely elindítja a for ciklus, 911 01:01:11,940 --> 01:01:16,020 akkor lehet, hogy a vonal a HTML egy külön dolog, 912 01:01:16,020 --> 01:01:19,700 és akkor a végén a hurok, ismét, a PHP. 913 01:01:19,700 --> 01:01:21,800 Szóval ez a fajta elválasztó ki. 914 01:01:21,800 --> 01:01:24,020 A bal oldalon, lehet, hogy már az összes - 915 01:01:24,020 --> 01:01:26,360 ez csak 1 darab PHP. 916 01:01:26,360 --> 01:01:28,510 A jobb oldalon látható, hogy van egy sor PHP, 917 01:01:28,510 --> 01:01:32,540 van egy sor HTML, és van egy sor PHP újra. 918 01:01:32,540 --> 01:01:36,870 Így elkülönítve azt ki, mit csinálnak. 919 01:01:36,870 --> 01:01:39,330 És akkor vegye figyelembe, hogy akár így, akár őket, 920 01:01:39,330 --> 01:01:41,980 még mindig nyomtassa ki a képet, a kép, a kép, 921 01:01:41,980 --> 01:01:44,540 úgy, hogy még mindig van nyomtatva a HTML ugyanúgy. 922 01:01:44,540 --> 01:01:49,870 És akkor még mindig látni a 3 kép jelenik meg a honlapon. 923 01:01:49,870 --> 01:01:52,820 Tehát 2 különböző módon ugyanazt a dolgot. 924 01:01:52,820 --> 01:01:55,060 >> Most formák és kéréseket. Ahogy Rob mutattam, 925 01:01:55,060 --> 01:01:59,400 Vannak formák HTML, és mi csak szellő ezen. 926 01:01:59,400 --> 01:02:02,040 Van egy akció, és van egy módszer, és a műveletet 927 01:02:02,040 --> 01:02:04,350 fajta megmutatja, hol fogsz küldeni, és a módszer az, hogy 928 01:02:04,350 --> 01:02:06,960 ez lesz a GET vagy POST. 929 01:02:06,960 --> 01:02:11,220 És egy GET kérést, mint Rob azt mondta, azt jelenti, hogy fogsz, hogy azt olyan formában 930 01:02:11,220 --> 01:02:15,760 és akkor látni, mint egy URL-t, míg a POST kérést nem jelenik meg egy URL-t. 931 01:02:15,760 --> 01:02:17,840 Tehát egy kis különbség. 932 01:02:17,840 --> 01:02:19,950 Azonban egy dolog, hogy egy hasonló dolog 933 01:02:19,950 --> 01:02:22,560 az, hogy a POST és GET egyaránt bizonytalan. 934 01:02:22,560 --> 01:02:26,430 Szóval, azt gondolhatja, hogy csak azért, mert nem látja, hogy az URL-ben, 935 01:02:26,430 --> 01:02:28,790 azt jelenti, hogy a POST biztonságosabb, 936 01:02:28,790 --> 01:02:34,420 de még mindig látni a cookie-kat, hogy milyen adatokat küldünk. 937 01:02:34,420 --> 01:02:38,260 Tehát nem hiszem, hogy az egyik vagy a másik. 938 01:02:38,260 --> 01:02:42,160 A másik figyelemre méltó dolog az, hogy te is részt változókat. 939 01:02:42,160 --> 01:02:45,850 Ti használta ezt a Pset 7, hogy a felhasználói azonosítóját. 940 01:02:45,850 --> 01:02:48,550 Az történt, hogy akkor használja ezt asszociatív tömb, 941 01:02:48,550 --> 01:02:53,310 A $ _SESSION, és akkor vagyunk képesek elérni a különböző dolgokat 942 01:02:53,310 --> 01:02:57,720 és tárolja a különböző dolgokat az egész oldalt. 943 01:02:57,720 --> 01:03:00,750 >> Utolsó dolog, hogy van SQL Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 és ez a programozási nyelv kezelni adatbázisokat. 945 01:03:04,360 --> 01:03:08,220 Pontosan mit, van adatbázis? Ők gyűjtemények asztalok, 946 01:03:08,220 --> 01:03:10,630 és az egyes táblák esetében is hasonló jellegű tárgyakat. 947 01:03:10,630 --> 01:03:14,990 Tehát volt egy tábla a felhasználók a pénzügyi Pset. 948 01:03:14,990 --> 01:03:20,610 És miért vannak hasznos? Mert ez egy módja annak, tartósan tárolja az adatokat. 949 01:03:20,610 --> 01:03:22,840 Ez egy módja nyomon dolgok és kezelése a dolgokat 950 01:03:22,840 --> 01:03:25,890 és valóban látta, hogy a különböző oldalak és nyomon követése. 951 01:03:25,890 --> 01:03:29,930 Míg ha csak tárolja azt, hogy az ember közvetlen pillanatban 952 01:03:29,930 --> 01:03:33,720 majd később, akkor nem fogja tudni elérni semmit, mentette. 953 01:03:33,720 --> 01:03:37,660 Jelenleg 4 legfontosabb dolog, hogy használjuk az SQL parancsokat. 954 01:03:37,660 --> 01:03:40,190 Van SELECT, INSERT, törlése és frissítése. 955 01:03:40,190 --> 01:03:42,880 Ezek nagyon fontos, ha tudnátok, a kvíz. 956 01:03:42,880 --> 01:03:45,990 >> Majd gyorsan átvesszük válassza most. 957 01:03:45,990 --> 01:03:48,540 Alapvetően, akkor kiválasztja sorokat egy adatbázisban. 958 01:03:48,540 --> 01:03:52,400 Tehát, ha van, itt - 959 01:03:52,400 --> 01:03:56,740 van a 2 különböző dolgokat, és azt akarjuk, hogy válasszon az osztályok táblázat 960 01:03:56,740 --> 01:04:01,480 ahol félelmetes - ahol a félelmetes oszlop az érték 1. 961 01:04:01,480 --> 01:04:04,460 Tehát itt is látszik, van ezeket a 2 dolog az osztály nevét, 962 01:04:04,460 --> 01:04:08,490 CS50 és Stat110, és mi van az osztály azonosítók és a szlogen. 963 01:04:08,490 --> 01:04:13,150 Tehát szeretnénk válassza ki az összes információt. 964 01:04:13,150 --> 01:04:17,480 Akkor láthatod itt, hogy ez a fajta szedés ki, hogy a félelmetes oszlop, 965 01:04:17,480 --> 01:04:25,170 ahol minden dolog 1, majd azt a class azonosító, osztály nevét és a szlogen, hogy vedd ki. 966 01:04:25,170 --> 01:04:28,100 Pontosan hogyan csinálod ezt a kódot? Ki kell használni a PHP. 967 01:04:28,100 --> 01:04:33,830 Tehát ez a fajta, hogy a PHP és SQL kapcsolódnak egymáshoz. 968 01:04:33,830 --> 01:04:38,130 Most a kódot, és fogjuk használni a lekérdezés funkció 969 01:04:38,130 --> 01:04:41,370 ahogy tettük Pset 7, és mi fog futni az SQL lekérdezést. 970 01:04:41,370 --> 01:04:43,870 Aztán mi lesz, hogy - 971 01:04:43,870 --> 01:04:46,280 mindig kell ellenőrizni, ha sor hármas egyenlő, ha hamis. 972 01:04:46,280 --> 01:04:49,010 Tehát még egyszer, azt szeretné, hogy ellenőrizze a típusát és értékét, 973 01:04:49,010 --> 01:04:53,880 és ha ez nem működik, akkor azt szeretné, hogy bocsánatot kérjen, mint mindig, mint mi a Pset 7. 974 01:04:53,880 --> 01:04:55,870 Ellenkező esetben azt szeretnénk, hogy hurok segítségével mindent azokkal praktikus 975 01:04:55,870 --> 01:04:59,410 foreach hurok, hogy most ment át. 976 01:04:59,410 --> 01:05:01,280 Most, hogy a ciklusok keresztül, és már tette korábban, 977 01:05:01,280 --> 01:05:05,080 tegyük fel, hogy a lekérdezési eltelt, most már a foreach ciklus. 978 01:05:05,080 --> 01:05:11,050 És az első sorban van, így itt a sorban, itt van, ez dobozos. 979 01:05:11,050 --> 01:05:14,010 Ez lesz, hogy nyomtassa ki az összes információt, hogy ütött. 980 01:05:14,010 --> 01:05:18,070 Ezért van, hogy nyomtassa ki az alján "Wanna Learn HTML-t?" 981 01:05:18,070 --> 01:05:23,370 Akkor fog menni a következő sorban, mert elkészült az első for ciklus, 982 01:05:23,370 --> 01:05:26,510 és így aztán ez megy, hogy nyomtassa ki a második sorban is, 983 01:05:26,510 --> 01:05:32,120 ami lesz STAT110, megtalálja a pillanatokat. 984 01:05:32,120 --> 01:05:34,290 >> Még egy utolsó dolog, SQL sérülékenység. 985 01:05:34,290 --> 01:05:37,300 Tudom, hogy David érintette ezt egy kicsit az előadás. 986 01:05:37,300 --> 01:05:40,730 Elolvashatja később. Ez tényleg vicces. 987 01:05:40,730 --> 01:05:45,320 SQL Injection egyfajta trükkös dolog. 988 01:05:45,320 --> 01:05:49,890 Tegyük fel, hogy csak tartsa azokat a változókat jobbra a lekérdezés, 989 01:05:49,890 --> 01:05:52,290 ahogy látható, hogy az első sorban. 990 01:05:52,290 --> 01:05:54,520 Tehát úgy tűnik rendben van, igaz? Te csak egy olyan, a felhasználó nevét 991 01:05:54,520 --> 01:05:58,820 és jelszót az SQL lekérdezést, és azt szeretné, hogy a hajó ki és kap mindent ami az adatok táblázatban. 992 01:05:58,820 --> 01:06:01,450 Úgy tűnik, elég egyszerű. Tehát mondjuk valaki tesz be, 993 01:06:01,450 --> 01:06:04,910 a jelszót, ezt vagy szöveg itt - 994 01:06:04,910 --> 01:06:06,780 kell ténylegesen a piros doboz. 995 01:06:06,780 --> 01:06:11,920 Tehát mondjuk, hogy tegye, hogy a jelszót - ez az, amit meg. 996 01:06:11,920 --> 01:06:16,520 Így ők üzembe vagy "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Egyfajta ostoba jelszó van. 998 01:06:20,880 --> 01:06:25,070 Most csak cserélje ki az, és akkor vegye figyelembe, hogy az adott SQL lekérdezést most, 999 01:06:25,070 --> 01:06:29,090 értékeli, hogy mindig igaz, mert akkor vegye figyelembe, hogy 1000 01:06:29,090 --> 01:06:32,240 tudod SQL query jelölje mindezt az információt 1001 01:06:32,240 --> 01:06:35,420 vagy ha csak 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Annak érdekében, hogy mindig lesz, hogy értékelje az igazi. 1003 01:06:41,030 --> 01:06:46,610 Ez nem fog igazán működni, mert ez azt jelenti, hogy a hacker betörni a rendszerbe. 1004 01:06:46,610 --> 01:06:49,300 A megoldás erre az, hogy van, hogy az OEM-rendszer, 1005 01:06:49,300 --> 01:06:51,360 ami azt jelenti, hogy kell használni kérdőjelek, 1006 01:06:51,360 --> 01:06:53,350 melyik az, amit a srácok használnak Pset 7, 1007 01:06:53,350 --> 01:06:57,620 hol akarsz használni egy kérdőjel helyett, ahol el kívánja helyezni valamit, 1008 01:06:57,620 --> 01:07:01,430 és akkor fogsz, hogy egy vesszőt, és akkor lesz utána, 1009 01:07:01,430 --> 01:07:07,610 után a húr, a különböző változók kívánt cserélni be a kérdőjel. 1010 01:07:07,610 --> 01:07:10,330 Tehát akkor itt megjegyezni, hogy most ezeket a piros kérdőjel. 1011 01:07:10,330 --> 01:07:15,420 Aztán fel a változókat, miután a húrok, így tudom, hogy cserélje ki ebben a sorrendben utána. 1012 01:07:15,420 --> 01:07:18,470 Ez biztosítja, hogy ha valaki nem úgy, mint ez, 1013 01:07:18,470 --> 01:07:24,050 és nekik van a vagy 1 = 1 a helyzet, hogy győződjön meg róla, 1014 01:07:24,050 --> 01:07:30,490 a hátsó végén, győződjön meg róla, hogy ez valójában nem törik az SQL lekérdezést. 1015 01:07:30,490 --> 01:07:33,660 Oké, szóval nagyjából azt, a forgószél a PHP és SQL. 1016 01:07:33,660 --> 01:07:41,520 Sok szerencsét mindenkinek, és most, hogy Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Oké mindenkinek. Ideje menni át néhány JavaScript 1018 01:07:44,270 --> 01:07:48,840 és néhány más dolog, nagyon gyorsan, így nem tartja fel ma este. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Igen. JavaScript egyfajta klassz dolog, állítólag. 1020 01:07:56,930 --> 01:07:59,090 A dolog, amit igazán tudni kell JavaScript, ez a fajta, mint 1021 01:07:59,090 --> 01:08:03,810 a kliens-oldali végén, amit a web app fog csinálni. 1022 01:08:03,810 --> 01:08:08,280 Van néhány dolog, amit csak nem akarom, hogy vigyázzon az egész idő alatt a szerver oldalon. 1023 01:08:08,280 --> 01:08:12,880 Minden kis kölcsönhatások, kiemelve egy dolog, hogy valami eltűnik. 1024 01:08:12,880 --> 01:08:15,340 Tényleg nem akarom, hogy beszélni, hogy a szerver minden ideje. 1025 01:08:15,340 --> 01:08:18,069 És bizonyos, hogy ez nem is lehetséges, hogy a szerver oldalon. 1026 01:08:18,069 --> 01:08:21,899 Ezért kell valami, mint a JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Cool dolog JavaScript: A dinamikusan típusos. 1028 01:08:24,359 --> 01:08:27,149 Ez azt jelenti, hogy a program nem kell tudni 1029 01:08:27,149 --> 01:08:30,970 mit, pontosan, a változók, ha írsz ki. 1030 01:08:30,970 --> 01:08:34,510 Ez lesz csak egyfajta kitalálni, mint fut. 1031 01:08:34,510 --> 01:08:37,520 Más dolog, hogy jó róla: Ez egy zárójel nyelv, 1032 01:08:37,520 --> 01:08:41,359 ami azt jelenti, a szintaxis hasonló a C és a PHP. 1033 01:08:41,359 --> 01:08:47,050 Nem kell sokat utómunka, ha tanulunk a JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Itt van egy kis JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Érdekes dolog itt az, hogy ha megnézzük azt, 1036 01:08:52,560 --> 01:08:56,330 van egy kis JavaScript ott a head tag. 1037 01:08:56,330 --> 01:08:59,479 Mi ez alapvetően csak magában a JavaScript fájlt. 1038 01:08:59,479 --> 01:09:02,260 Ez az egyik módja, akkor is a JavaScriptet a programba. 1039 01:09:02,260 --> 01:09:06,910 Aztán a második kicsit valóban néhány inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 nagyon hasonlít egy inline stílus CSS, 1041 01:09:10,790 --> 01:09:16,180 és te csak írásban egy kódot nagyon gyorsan ott. 1042 01:09:16,180 --> 01:09:18,120 JavaScript tömbök. 1043 01:09:18,120 --> 01:09:20,850 Csak egy újabb módja annak, hogy az adatok körül, nagyon hasznos. 1044 01:09:20,850 --> 01:09:25,180 Nagyon szép és egyszerű szintaxis. 1045 01:09:25,180 --> 01:09:29,870 A szögletes zárójelek eléréséhez mindent, és folyamatosan mindent együtt. 1046 01:09:29,870 --> 01:09:35,020 Semmi sem túl bonyolult. 1047 01:09:35,020 --> 01:09:38,630 A hűvös dolog JavaScript és script nyelvek általában 1048 01:09:38,630 --> 01:09:40,920 az, hogy nem kell aggódnia, array méretben. 1049 01:09:40,920 --> 01:09:43,880 Lehet csak használni array.length és nyomon követi azt, 1050 01:09:43,880 --> 01:09:46,960 valamint a tömb növekszik vagy csökken, ahogy szükség van rá. 1051 01:09:46,960 --> 01:09:49,279 Szóval nem is kell aggódnod a fajta, 1052 01:09:49,279 --> 01:09:57,050 Ó, nem, azt kell, hogy fordítsanak több dolgot, vagy ilyesmi. 1053 01:09:57,050 --> 01:10:00,090 >> A jó dolog az, hogy a javascript úgynevezett tárgyakat. 1054 01:10:00,090 --> 01:10:04,800 Ez egy objektum-orientált nyelv, akkor mi azt is, lényegében, 1055 01:10:04,800 --> 01:10:10,100 a módját, hogy csoportos adatokat együtt, némileg hasonló a struktúra, 1056 01:10:10,100 --> 01:10:17,280 de lehet hozzáférni, mint egy struct vagy egy asszociatív tömb szintaxist. 1057 01:10:17,280 --> 01:10:22,520 Elég egyszerű, és mit lehet csinálni ezzel az csoportadatokat együtt 1058 01:10:22,520 --> 01:10:24,810 ha van egy csomó adat, ami kapcsolódik. 1059 01:10:24,810 --> 01:10:26,850 Mert ez a dolog, amit szükséges egy olyan autót, 1060 01:10:26,850 --> 01:10:29,050 akkor nem kell, hogy ez egy csomó különböző helyeken. 1061 01:10:29,050 --> 01:10:35,300 Lehet csak kibír be 1 objektum JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Mint azt bizonyára tudják, iterációjával egyike azoknak unalmas feladatokat. 1063 01:10:39,090 --> 01:10:43,810 Csak csináld több mint egy újra. Meg kell beszélni, hogy minden tárgy az autóban, 1064 01:10:43,810 --> 01:10:47,340 vagy meg kell, hogy menjen át minden elem egy listában, vagy valami ilyesmi. 1065 01:10:47,340 --> 01:10:51,770 Tehát JavaScript is, hasonlóan a PHP, a foreach szintaxis. 1066 01:10:51,770 --> 01:10:54,590 Ebben az esetben ez egy a hurok. 1067 01:10:54,590 --> 01:10:57,300 Ha szeretné használni ezt csak a tárgyakat. 1068 01:10:57,300 --> 01:11:01,030 Vannak problémák fordulhatnak elő, ha ezt a tömböt. 1069 01:11:01,030 --> 01:11:03,750 Ez általában az egyik olyan dolog, mégis, ez nagyon hasznos, 1070 01:11:03,750 --> 01:11:06,590 mert megszünteti a sok felső 1071 01:11:06,590 --> 01:11:10,270 mert nem kell, hogy húzza fel mindent az objektumot egyedül. 1072 01:11:10,270 --> 01:11:12,300 Nem kell emlékezni az összes kulcsfontosságú neveket. 1073 01:11:12,300 --> 01:11:18,270 Csak valami, hogy vissza ebben a szintaxis. 1074 01:11:18,270 --> 01:11:21,500 Ebben, és az, csak azt, hogy emlékezni 1075 01:11:21,500 --> 01:11:27,180 hogy kapsz vissza a kulcsokat, egy nagyon hasonló módon hash tábla. 1076 01:11:27,180 --> 01:11:30,880 Ha emlékszel attól, ha hozna egy string is kaphat valamit 1077 01:11:30,880 --> 01:11:33,840 volna, hogy a társult értéket vele. 1078 01:11:33,840 --> 01:11:36,360 Mit lehet tenni ez akkor azt mondják, rendben, 1079 01:11:36,360 --> 01:11:42,120 Tettem egy autó, és hívtam, hogy egy Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Így tesz a karakterlánc Ferrari később újra, és lehet kapni, hogy ki. 1081 01:11:45,290 --> 01:11:50,000 És meg tudod csinálni, hogy a hurok, az a hurok. 1082 01:11:50,000 --> 01:11:53,320 Tehát csak többet tárgyakat. A legfontosabb dolog e, meg kell emlékezni 1083 01:11:53,320 --> 01:12:00,340 az, hogy tudod használni az objektumot struct hasonló szintaxist, amikor csak akar ezekkel, 1084 01:12:00,340 --> 01:12:04,590 kivéve, ha az fog használni, mint a karakterlánc nem érvényes változó neve. 1085 01:12:04,590 --> 01:12:07,650 Tehát, ha megnézzük, hogy van, hogy van kulcs terek. 1086 01:12:07,650 --> 01:12:12,500 Nos, ha úgy döntesz, hogy tegye object.key, a tér, és, tér, terek, 1087 01:12:12,500 --> 01:12:15,320 hogy csak nem lenne értelme szintaktikailag. 1088 01:12:15,320 --> 01:12:22,730 Szóval csak lehet csinálni, hogy ez a fajta zárójeles formával. 1089 01:12:22,730 --> 01:12:26,520 >> Szintén JavaScript nagyon hatály-bölcs a PHP. 1090 01:12:26,520 --> 01:12:29,050 Van 2 módon kezelésének hatálya alá. 1091 01:12:29,050 --> 01:12:31,960 Nem lehet, hogy a var előtt egy változó, 1092 01:12:31,960 --> 01:12:34,060 és ez csak azt jelenti, hogy ez a globális. 1093 01:12:34,060 --> 01:12:37,050 Láthatjuk, hogy bárhonnan. Akkor is, ha úgy döntesz, hogy ezt egy if, 1094 01:12:37,050 --> 01:12:42,430 bárhol máshol a kódot, miután ezen a ponton lehetett látni, hogy a változó. 1095 01:12:42,430 --> 01:12:46,730 A másik dolog, mégis, a var, akkor korlátozott, amit a funkció éppen be 1096 01:12:46,730 --> 01:12:48,870 Ha nem a funkció, nos, ez a globális. 1097 01:12:48,870 --> 01:12:53,900 De ha van egy funkció, hogy ez csak akkor látható, ezen belül a funkciót. 1098 01:12:53,900 --> 01:12:56,420 Én nem egy példa, de igen. Ez az egyik olyan dolog, ahol 1099 01:12:56,420 --> 01:12:59,900 tudja kezelni, amit változókat akarsz lenni a globális, 1100 01:12:59,900 --> 01:13:03,810 milyen változókat akarsz lenni a helyi, de nem kell, hogy legyen óvatos erről, 1101 01:13:03,810 --> 01:13:06,890 mert nem az a fajta finomszemcsés szabályozás csinálsz C, 1102 01:13:06,890 --> 01:13:15,820 ahol, ha valami bejelentett egy for ciklus, ez meg fog maradni, hogy a hurok. 1103 01:13:15,820 --> 01:13:18,790 A dolog, amit valóban törődnek a JavaScript-et manipulálni weboldalakat, ugye? 1104 01:13:18,790 --> 01:13:21,800 Úgy értem, hogy ez miért csináljuk ezt. 1105 01:13:21,800 --> 01:13:23,840 >> Ehhez használjuk úgynevezett a DOM. 1106 01:13:23,840 --> 01:13:25,850 A Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Alapvetően, mit csinál ez mindent visz a HTML 1108 01:13:29,430 --> 01:13:34,110 és modellek ki egy csomó objektumok egymásba ágyazott. 1109 01:13:34,110 --> 01:13:37,080 Ha elindul valami ilyesmi. 1110 01:13:37,080 --> 01:13:44,770 Van, a jó nekem, egy csomó kód arra nézve, hogy ez a fajta - 1111 01:13:44,770 --> 01:13:46,640 Azt gondolom, hogy lenne nagyon nehéz manipulálni, 1112 01:13:46,640 --> 01:13:48,700 mert akkor lenne elemzés egy csomó szöveget 1113 01:13:48,700 --> 01:13:52,080 és miután a darab egymástól a dolgokat. És mi van, ha nem megfelelően formázott? 1114 01:13:52,080 --> 01:13:54,880 Rossz dolgok történnek. 1115 01:13:54,880 --> 01:13:58,140 Tehát JavaScript gondoskodik ezt neked, és kapsz egy szép adatstruktúra, 1116 01:13:58,140 --> 01:14:01,390 mint az egy a bal oldalamon, ahol csak egy dokumentumot, 1117 01:14:01,390 --> 01:14:03,530 és benne, hogy van valami úgynevezett HTML, 1118 01:14:03,530 --> 01:14:05,600 és belül, hogy van a fej és a test, 1119 01:14:05,600 --> 01:14:08,420 és belül, hogy a fejét már egy címet, satöbbi, satöbbi, satöbbi. 1120 01:14:08,420 --> 01:14:11,810 Ez leegyszerűsíti manipulálni egy internetes oldalt, hogy ez csak, 1121 01:14:11,810 --> 01:14:14,190 Ó, én csak azt szeretném, hogy beszélni ezt az objektumot. 1122 01:14:14,190 --> 01:14:21,340 Valahogy nagyon hasonló módon szeretnél beszélni egy másik objektumot te készítetted. 1123 01:14:21,340 --> 01:14:25,980 Mint mondtam, a DOM van a document objektum. 1124 01:14:25,980 --> 01:14:29,290 Vagy ez csak egy helyen, és akkor mehet benne, hogy a dolgok, 1125 01:14:29,290 --> 01:14:33,880 és meg tudod csinálni - ez a régi stílusú csinálja, ott, 1126 01:14:33,880 --> 01:14:38,130 ahol te document.getElementById, majd a nevét, 1127 01:14:38,130 --> 01:14:42,420 és akkor talán mondani, ez mindig nagyon nehézkes egy idő után. 1128 01:14:42,420 --> 01:14:44,480 Szóval, akkor valószínűleg nem akarom. Ezért van 1129 01:14:44,480 --> 01:14:48,760 A következő dolog, fogunk beszélni után. 1130 01:14:48,760 --> 01:14:52,510 A legfontosabb dolog az, hogy minden rendben, akkor ezek az elemek, nem igaz? 1131 01:14:52,510 --> 01:14:56,400 Így talán meg tudom változtatni a színét a valamit, amikor az oldal betöltődik. 1132 01:14:56,400 --> 01:14:58,380 Akkor mi? Mi történik, ha a felhasználó rákattint valamit? 1133 01:14:58,380 --> 01:15:00,540 Azt akarom, hogy valami érdekes, ha rákattintanak valamit. 1134 01:15:00,540 --> 01:15:02,600 Ezért van eseményeket. 1135 01:15:02,600 --> 01:15:05,330 Ön alapvetően talál eleme a DOM, 1136 01:15:05,330 --> 01:15:08,560 majd azt mondják, hé. Amikor ez betölti vagy valaki rákattint, 1137 01:15:08,560 --> 01:15:11,410 vagy akkor, amikor az egér fölé, vele valamit. 1138 01:15:11,410 --> 01:15:15,330 És mi van az, hogy olyan funkciók, amelyek kezelik ezt neked. 1139 01:15:15,330 --> 01:15:17,980 Ezek a funkciók eseménykezelőt. 1140 01:15:17,980 --> 01:15:20,440 Mi tetlen - ez csak egy divatos szóval, 1141 01:15:20,440 --> 01:15:23,500 Ez a funkció csak akkor hajtódik végre, ha az esemény megtörténik. 1142 01:15:23,500 --> 01:15:28,070 Így kezeli az esetre, ha bekövetkezik. 1143 01:15:28,070 --> 01:15:30,810 Így akkor feküdt ki egy eseménykezelő. 1144 01:15:30,810 --> 01:15:34,750 Van néhány gomb, és ha rákattint, akkor felrobban. 1145 01:15:34,750 --> 01:15:40,560 Tehát ne kattintson a gombra. 1146 01:15:40,560 --> 01:15:42,910 Ez az egyik módja a közeledő, igaz? 1147 01:15:42,910 --> 01:15:46,430 Van egy gomb tag, és kattintásra van egy sor, amely azt mondja, 1148 01:15:46,430 --> 01:15:50,460 Ja, mellesleg én ezt robbanó dolog számomra. 1149 01:15:50,460 --> 01:15:53,990 Egyébként, ez csak, mint egy hagyományos gomb csak sor. 1150 01:15:53,990 --> 01:15:56,550 Megteheti ezt egy másik módja, 1151 01:15:56,550 --> 01:16:02,770 a rángatás a DOM elem, de majd menteni, hogy miután beszélünk jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Ez egy olyan könyvtár, amely cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Használhatja a nagyjából semmit. 1154 01:16:09,580 --> 01:16:12,090 És ez csak ad egy csomó eszköz dolgozni. 1155 01:16:12,090 --> 01:16:15,850 Mivel a JavaScript, míg erős, nem rendelkezik az összes szükséges eszközöket 1156 01:16:15,850 --> 01:16:20,550 ki a dobozt, hogy valóban kezelni a web app érdemes csinálni. 1157 01:16:20,550 --> 01:16:24,650 Tehát ez leegyszerűsíti egy csomó dolgot, ad egy csomó funkció 1158 01:16:24,650 --> 01:16:28,760 ki a dobozból, amit egyébként meg kell írni magát, újra és újra és újra. 1159 01:16:28,760 --> 01:16:31,600 És csak teszi a dolgokat nagyon egyszerű. 1160 01:16:31,600 --> 01:16:35,780 Arra is van szelektor, amelyek segítségével vegye ki az összes olyan elemet, 1161 01:16:35,780 --> 01:16:42,800 az Ön DOM sokkal egyszerűbben, ahelyett, hogy ezeket a nagyon hosszú függvényhívás. 1162 01:16:42,800 --> 01:16:46,630 Bővebben ezekről a választók. Van, ott akkor, mondjuk 1163 01:16:46,630 --> 01:16:49,800 Azt szeretnénk, hogy egy elem az ID "rock". 1164 01:16:49,800 --> 01:16:56,450 Nos, jQuery, ez csak $, majd egy string, amely egy font, majd a "rock". 1165 01:16:56,450 --> 01:17:01,960 Ez nagyon egyszerű, és sokkal gyorsabb, mint a hagyományos JavaScript módja a probléma megoldásában. 1166 01:17:01,960 --> 01:17:06,120 És hasonló dolgokat osztályok és elemek típusok. 1167 01:17:06,120 --> 01:17:08,140 jQuery - az egyik nagyszerű tulajdonsága az, akkor valami tömöríteni 1168 01:17:08,140 --> 01:17:14,350 le a lekérdezéseket a DOM nagyon, nagyon gyors. 1169 01:17:14,350 --> 01:17:18,980 Most már vissza eseménykezelés, és ez az, hogy hogyan kellene kezelni egy esemény jQuery. 1170 01:17:18,980 --> 01:17:23,090 Szóval, mit fogunk itt azt mondjuk, rendben. Van egy script tag, nem igaz? 1171 01:17:23,090 --> 01:17:25,400 Szóval van ez a inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Mit fogunk tenni az fogjuk mondani, minden rendben. 1173 01:17:27,750 --> 01:17:30,860 Ha a dokumentum elkészült, ami azt jelenti, a dokumentum betöltődött, 1174 01:17:30,860 --> 01:17:34,660 fogunk menni, hogy ezt a funkciót, és meg fogjuk mondani, rendben, 1175 01:17:34,660 --> 01:17:37,060 Ez a funkció valójában valami mást csinál. 1176 01:17:37,060 --> 01:17:42,320 Ez alapvetően azt mondja, rendben van, hogy nekem az elemet az ID "MyID." 1177 01:17:42,320 --> 01:17:47,960 És akkor, hogy ez egy funkciót kezelőt, amely végrehajtja ha rákattint. 1178 01:17:47,960 --> 01:17:49,820 Alapvetően Mi ez, azt mondja, minden rendben. 1179 01:17:49,820 --> 01:17:52,630 Az oldal betöltésekor, úgyhogy megyek az, meg ez az elem, 1180 01:17:52,630 --> 01:17:56,420 hogy ez az esemény kezelő, és alapvetően beállítja az oldal az Ön számára. 1181 01:17:56,420 --> 01:18:00,520 És ez hogyan akarok gondolni eseménykezelés. 1182 01:18:00,520 --> 01:18:06,310 Csak azt akarom gondolni, minden rendben, ha valami történik, amit akarok, hogy megtörténjen? 1183 01:18:06,310 --> 01:18:10,520 Nem akarok gondolni, oké, azt kell, hogy győződjön meg róla, ez a dolog beszél ez a dolog, 1184 01:18:10,520 --> 01:18:14,660 ez a dolog, bla-bla-bla, mert csak azt, hogy beszélni dolog, tekintve az események. 1185 01:18:14,660 --> 01:18:17,650 Amikor ez megtörténik, ez történik. Amikor ez történik, ami történik. 1186 01:18:17,650 --> 01:18:20,240 És ha a dolgok kiváltó más dolog, ez nagyszerű. 1187 01:18:20,240 --> 01:18:22,150 De te nem akarod próbálni, és nem bonyolult kód 1188 01:18:22,150 --> 01:18:24,130 hová kiváltó több dolgot egyszerre, 1189 01:18:24,130 --> 01:18:28,860 mert csak most fog adni magadnak a fejem. 1190 01:18:28,860 --> 01:18:32,340 >> Rendben. Most már tudjuk, hogy a lap kezelni az eseményeket, 1191 01:18:32,340 --> 01:18:35,640 de mondjuk a felhasználó egy gombra kattint. 1192 01:18:35,640 --> 01:18:38,040 Mit tegyek, ha szeretné küldeni a kérelmet vissza a szerver, 1193 01:18:38,040 --> 01:18:41,100 de nem akarom, hogy újra az oldalt, mert miután újratölteni egy új oldalt 1194 01:18:41,100 --> 01:18:44,390 minden egyes alkalommal kap elég fárasztó, és miért van szükség 1195 01:18:44,390 --> 01:18:47,430 , hogy húzza le a fejléc újra, és a lábléc újra 1196 01:18:47,430 --> 01:18:49,670 és minden eleme az oldal újra 1197 01:18:49,670 --> 01:18:53,180 csak azért, hogy frissíteni kell az üdvözlés vagy az idő? 1198 01:18:53,180 --> 01:18:55,290 Tehát ezért van valami hasonló Ajax. 1199 01:18:55,290 --> 01:18:59,150 Mit tehetünk itt Ajax mondhatjuk, rendben, 1200 01:18:59,150 --> 01:19:01,290 Szeretném küldeni néhány adatot a szerverre, 1201 01:19:01,290 --> 01:19:04,010 és azt szeretné, hogy egy választ, így tudom frissíteni az oldalam, 1202 01:19:04,010 --> 01:19:12,120 vagy talán csak némi algoritmikus számítás nem feltétlenül mutat semmit a felhasználónak. 1203 01:19:12,120 --> 01:19:15,500 Mit kell tenni? Nos, meg kell egy URL-t meg kell beszélni. 1204 01:19:15,500 --> 01:19:18,650 A szerver nem csak varázsütésre hallgatni a semmiből. 1205 01:19:18,650 --> 01:19:21,960 Be kell, hogy egy adott hely, akkor küldjük az adatokat. 1206 01:19:21,960 --> 01:19:26,240 És akkor is kell néhány adatot küldeni, vagy talán ez egy dataless lekérdezést. 1207 01:19:26,240 --> 01:19:31,380 Azt akarod, hogy ping vissza a szerverre, és azt mondják, hé, én élek, vagy valami ilyesmi. 1208 01:19:31,380 --> 01:19:35,150 És akkor azt szeretné, hogy a funkció alapvetően kezeli sikerrel. 1209 01:19:35,150 --> 01:19:38,250 Tegyük fel, hogy vissza bizonyos információkat a szerver, 1210 01:19:38,250 --> 01:19:42,960 és meg akarja változtatni a felhasználó címét a saját oldalon. 1211 01:19:42,960 --> 01:19:44,930 Így kap az adatokat vissza, 1212 01:19:44,930 --> 01:19:48,860 és akkor nyomja meg, hogy a képernyőre. 1213 01:19:48,860 --> 01:19:51,170 Mi történik, ha az oldal készen áll, 1214 01:19:51,170 --> 01:19:56,500 létrehoz egy kattintásra funkció ezt a gombot az úgynevezett üdvözlő. 1215 01:19:56,500 --> 01:19:58,810 Mi ez, akkor nem az, ha ez a gomb megnyomása 1216 01:19:58,810 --> 01:20:03,700 beszélsz greetings.php, csinál egy POST kérést, 1217 01:20:03,700 --> 01:20:07,290 és azt mondod, hé, hozz nekem valamit az oldalon. 1218 01:20:07,290 --> 01:20:09,890 Nem igazán kell leírni, de greetings.php, 1219 01:20:09,890 --> 01:20:12,480 mondjuk, adja vissza "hello world". 1220 01:20:12,480 --> 01:20:15,650 Így vissza ez a "hello world", és a sikere ez, 1221 01:20:15,650 --> 01:20:20,730 feltételezve, hogy semmi baj, akkor megyünk erre a cél helyre 1222 01:20:20,730 --> 01:20:25,720 hogy meghatározott, és mi csak kibír a válasz ott. 1223 01:20:25,720 --> 01:20:31,560 És ez egy nagyon egyszerű módja felállítása Ajax lekérdezést. 1224 01:20:31,560 --> 01:20:34,340 >> Nagyon gyorsan, Rob egyfajta említette már, 1225 01:20:34,340 --> 01:20:37,170 dolgok rosszra, rossz dolgok történnek, 1226 01:20:37,170 --> 01:20:42,660 ezért azt szeretné, hogy megismerkedjen ezekkel a HTTP válasz kódokat. 1227 01:20:42,660 --> 01:20:46,030 Mik ezek csak, mint a 200, minden ment rendben. 1228 01:20:46,030 --> 01:20:48,670 Valami más, rossz dolgok történtek. 1229 01:20:48,670 --> 01:20:50,790 Ez általában a dolog, amit akarok emlékezni. 1230 01:20:50,790 --> 01:20:53,440 De jó tudni, hogy az összes ilyen. 1231 01:20:53,440 --> 01:20:55,970 És végül, ha egyszer már ment keresztül, hogy minden, 1232 01:20:55,970 --> 01:20:58,680 beszélnünk kell nagyon gyorsan a design, 1233 01:20:58,680 --> 01:21:00,620 és akkor hagyom, hogy minden távozzon. 1234 01:21:00,620 --> 01:21:03,410 Design. Dolog, amit akar emlékezni. 1235 01:21:03,410 --> 01:21:06,950 Kérdezd meg magadtól ezeket a kérdéseket: Ki lesz ezzel? 1236 01:21:06,950 --> 01:21:09,580 Mit fognak használni azt? Mit a felhasználók érdekel? 1237 01:21:09,580 --> 01:21:11,750 Mit sem törődnek? 1238 01:21:11,750 --> 01:21:14,500 Csak nem akarja, hogy egy app, és hagyja, hogy ez csak nőni 1239 01:21:14,500 --> 01:21:18,270 és legyen ez a hatalmas, mindent felemésztő dolog, amit nem is befejezni. 1240 01:21:18,270 --> 01:21:23,900 Azt akarod, hogy diszkrét célok és tervek, és a dolgok szeretne foglalkozni. 1241 01:21:23,900 --> 01:21:29,000 Legyen könnyű. Mindez azt mondja, alapvetően, 1242 01:21:29,000 --> 01:21:34,950 megkönnyítik a felhasználó számára, hogy, ne, hogy ez egy hatalmas folt a szöveg, mint ez a dia, valóban. 1243 01:21:34,950 --> 01:21:38,020 Csak azt akarom, hogy legyen valami, ahol nagyon könnyű valakit, hogy menjen a 1244 01:21:38,020 --> 01:21:40,800 és amit akarnak. 1245 01:21:40,800 --> 01:21:42,920 Nem akarom, hogy navigálni 5 oldal 1246 01:21:42,920 --> 01:21:45,460 hogy az elsődleges funkciója a webhelyen. 1247 01:21:45,460 --> 01:21:49,290 Ha a Google már 5 oldal előtt akkor is keres valamit, 1248 01:21:49,290 --> 01:21:53,080 senki sem használja. 1249 01:21:53,080 --> 01:21:55,890 És végül, a papír prototípus, fókuszcsoportos. 1250 01:21:55,890 --> 01:21:59,220 Legyen jó tervezés és tesztelési gyakorlattal. 1251 01:21:59,220 --> 01:22:00,730 Csak azért, mert úgy gondolod, hogy működik az Ön számára, 1252 01:22:00,730 --> 01:22:04,860 nem azt jelenti, bárki más azt hiszi, hogy működik-e. 1253 01:22:04,860 --> 01:22:14,490 De igen, ez az. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]