1 00:00:00,000 --> 00:00:02,750 >> [9. §] [kényelmesebb] 2 00:00:02,750 --> 00:00:04,750 [Rob Bowden] [Harvard Egyetem] 3 00:00:04,750 --> 00:00:06,750 [Ez a CS50.] [CS50.TV] 4 00:00:06,750 --> 00:00:12,130 >> Rendben. Alapvetően ma már mind fel nektek feltenni néhány kérdést. 5 00:00:12,130 --> 00:00:15,070 Én lehet, hogy vándorol néhány téma 6 00:00:15,070 --> 00:00:17,570 egy kicsit, ha senki sincs kérdéseket feltenni. 7 00:00:17,570 --> 00:00:20,660 Remélhetőleg igen. Van valakinek kérdése? 8 00:00:20,660 --> 00:00:25,220 Lehet, hogy a korábbi vetélkedők, a dolgok, hogy nem kényelmes megadva. 9 00:00:34,630 --> 00:00:37,850 >> Igen. >> [Tanítvány] megy át buffer overflow támadások? >> [Rob] Persze. 10 00:00:37,850 --> 00:00:45,530 A fő példa valóban lehet itt. 11 00:00:45,530 --> 00:00:48,720 A fő dolog mögött buffer overflow támadások 12 00:00:48,720 --> 00:00:51,540 van néhány puffer, itt. 13 00:00:51,540 --> 00:00:54,110 Char c - amely csak a 12-es méretű - 14 00:00:54,110 --> 00:00:57,580 de aztán illeszt valamit, hogy puffer 15 00:00:57,580 --> 00:01:00,050 de nem ellenőrzi, hogy pontosan mennyi vagyunk behelyezése. 16 00:01:00,050 --> 00:01:06,740 Itt vagyunk behelyezésével strlen (bar) a C, de ki tudja, meddig bár. 17 00:01:06,740 --> 00:01:11,970 Ha ez hosszabb, mint 12 karakter, akkor ez lesz a túlcsordulás a puffert. 18 00:01:11,970 --> 00:01:15,830 Nézzük ezt a képet - 19 00:01:15,830 --> 00:01:20,840 ha Ön 61 kapsz sokkal jobban ismerik ezt a fajta elrendezés 20 00:01:20,840 --> 00:01:25,760 és foglalkozik a mentett frame mutatóra és a feladó címét és a szülő rutin stack 21 00:01:25,760 --> 00:01:27,760 és az összes ilyen konkrét dolgokat. 22 00:01:27,760 --> 00:01:31,340 De itt csak meg kell tudni, hogy mi van 23 00:01:31,340 --> 00:01:35,990 ezt a kis helyet a puffer. 24 00:01:35,990 --> 00:01:39,480 Itt van c (0), és akkor van c, 1, 2, 3, 4, 5, és így tovább. 25 00:01:39,480 --> 00:01:44,810 Normális körülmények között szeretnénk tölteni a puffert, mint egy megszokott. 26 00:01:44,810 --> 00:01:50,480 Ha behelyezett 'szia' mi volna-e-h-l-l-o / 0, 27 00:01:50,480 --> 00:01:52,900 és aztán csak egy csomó üres hely. 28 00:01:52,900 --> 00:01:57,910 Ahhoz, hogy egy hacker - Ó, azt hiszem, ez a példa. 29 00:01:57,910 --> 00:02:02,470 Egy hacker kapunk valamit, mint ez, ahol 30 00:02:02,470 --> 00:02:04,760 amit ők kifejezetten próbálnak tenni a 31 00:02:04,760 --> 00:02:07,890 általában felülírják a feladó címét. 32 00:02:07,890 --> 00:02:12,510 Amikor hívja a funkciót, és a verem keret lesz a verembe 33 00:02:12,510 --> 00:02:14,690 hogy verem keret tudnia kell, hogyan - 34 00:02:14,690 --> 00:02:21,020 Nos, a funkció már az úgynevezett tudnia kell, hogyan, hogy visszatérjen a funkció nevezték. 35 00:02:21,020 --> 00:02:23,780 Tehát, ha fő meghívja ize, ize kell, hogy visszatérjen a fő, 36 00:02:23,780 --> 00:02:26,300 és hogy az, amit ez a feladó címét nem. 37 00:02:26,300 --> 00:02:28,800 De mi a hacker fogja tenni a 38 00:02:28,800 --> 00:02:30,820 felül pedig egy speciális visszatérési címet 39 00:02:30,820 --> 00:02:40,090 ahol újra - Little Indian - ez nem egyszerű, de minden byte visszafelé. 40 00:02:40,090 --> 00:02:47,300 Ez a visszatérési címet, mint amennyire a számítógép érintett 41 00:02:47,300 --> 00:02:51,390 visszatérve erre a címre egyenértékű visszatérés foo vagy a fő 42 00:02:51,390 --> 00:02:53,850 vagy bármi funkciót nevezte. 43 00:02:53,850 --> 00:02:54,800 Ezért van, hogy visszatérjen erre a címre 44 00:02:54,800 --> 00:02:58,130 ami csak azért történik, hogy erre a címre 45 00:02:58,130 --> 00:03:04,740 amelyek vagy néha, hogy mit csinálnak itt, hogy használja a feladó címét 46 00:03:04,740 --> 00:03:09,150 egy adott funkció, hogy tudják, már ott van. 47 00:03:09,150 --> 00:03:12,630 Nem emlékszem, mi a funkciója a neve. 48 00:03:12,630 --> 00:03:14,630 Majd keresse ki később. 49 00:03:14,630 --> 00:03:17,570 >> Itt mit csinálnak halad a feladó címét 50 00:03:17,570 --> 00:03:26,310 a verem is, és ez az, ahol a kissé furcsa 51 00:03:26,310 --> 00:03:29,530 vannak példák a memória, ahol - 52 00:03:29,530 --> 00:03:34,350 memória osztható csak olvasható, írható-olvasható, és a futtatható memória 53 00:03:34,350 --> 00:03:38,710 ahol láttuk, csak olvasható memória előtt, ahol az - 54 00:03:38,710 --> 00:03:43,960 ha azt mondom, char * s = helló nem tudom módosítani helló. 55 00:03:43,960 --> 00:03:46,200 Ez csak olvasható memória. 56 00:03:46,200 --> 00:03:49,570 Van még ez a gondolat a futtatható memória 57 00:03:49,570 --> 00:03:53,870 ahol a futtatható memória lenne a szövegét szegmensben a kódot. 58 00:03:53,870 --> 00:03:57,350 Nézzük a szokásos címtartomány elrendezés - 59 00:03:57,350 --> 00:04:03,090 Hiszem, hogy lesz egy jó kép - 60 00:04:08,200 --> 00:04:12,170 ez működik -, ahol megvan a verem itt. Van adat memória. 61 00:04:12,170 --> 00:04:16,360 Hagyja figyelmen kívül ezt alapvetően. Ez a mi kupac. 62 00:04:16,360 --> 00:04:18,810 És akkor mi van itt a fő program kódját. 63 00:04:18,810 --> 00:04:27,480 Ez hasonló az a hely, ahol fel is húrok, mint a char * = helló 64 00:04:27,480 --> 00:04:29,730 és ez csak olvasható. 65 00:04:29,730 --> 00:04:33,590 De azt is jelöli a fő programkód futtatható. 66 00:04:33,590 --> 00:04:37,950 És ha csinálsz ez, vagy az operációs rendszer nem, hogy helyesen 67 00:04:37,950 --> 00:04:40,910 akkor ez legyen az egyetlen hely a memóriában 68 00:04:40,910 --> 00:04:44,830 hogy a kód valóban végre 69 00:04:44,830 --> 00:04:48,550 ami azt jelenti, hogy ez a fajta puffer túlcsordulás támadás van itt 70 00:04:48,550 --> 00:04:53,800 hatástalan lenne, mert ez próbál végrehajtani memória akár itt a verem. 71 00:04:53,800 --> 00:04:57,230 Figyeljük meg, a képek az első. 72 00:04:57,230 --> 00:04:59,270 Megvan a verem felnőni. 73 00:04:59,270 --> 00:05:01,270 Itt a köteget növekszik lefelé. 74 00:05:01,270 --> 00:05:03,270 A CS50 céljából a köteg felnő. 75 00:05:03,270 --> 00:05:09,520 >> Lehetséges, hogy megkerüljék az adott típusú puffer túlcsordulás 76 00:05:09,520 --> 00:05:15,110 azáltal, hogy ezek a futtatható régiók memória nem végrehajtható régiókban. 77 00:05:15,110 --> 00:05:21,420 De ez csak azért történik, hogy ritkán van futtatható memória megjelölve futtatható. 78 00:05:21,420 --> 00:05:26,520 Csak látszik, hogy csak olvasható, és újra írni az egyetlen dolog, ami használt, 79 00:05:26,520 --> 00:05:28,990 így ez még mindig nagyon hatékony. 80 00:05:28,990 --> 00:05:31,950 És itt is tenni, amit akarunk. 81 00:05:31,950 --> 00:05:35,020 Ez valójában nem történik, mint a Pset 61 idén, 82 00:05:35,020 --> 00:05:38,400 de ha megnézzük a tavalyi kínálatát, vagy bármely korábbi évben 83 00:05:38,400 --> 00:05:44,110 Egy Pset a te kifejezetten kellene beilleszteni itt kódot, ami azt 84 00:05:44,110 --> 00:05:48,960 nyomtatni bizonyos értéket, vagy vissza értéket, amely különbözik a 85 00:05:48,960 --> 00:05:51,400 az értéket, ami azt nyomtatni. 86 00:05:51,400 --> 00:05:57,770 Vagy még inkább ügyesen, azt akarja, hogy telefonáljon vagy írjon - 87 00:05:57,770 --> 00:06:03,320 így ez vissza fog térni akár itt és akkor végre egy kis kódolás itt, 88 00:06:03,320 --> 00:06:09,720 és a legokosabb túlfolyás majd vissza, amit ez a feladó címe szokott lenni. 89 00:06:09,720 --> 00:06:11,970 Így még akkor is szükség van, hogy felülbírálja ezt 90 00:06:11,970 --> 00:06:16,720 feljönni ide, még mindig emlékszem, hogy a feladó címét valahol 91 00:06:16,720 --> 00:06:18,890 , hogy mi is vissza a fő, vagy bármi, 92 00:06:18,890 --> 00:06:23,800 és ez olyan, mintha soha nem is vette észre, hogy a dolgok rosszul. 93 00:06:23,800 --> 00:06:30,100 De a dolgok nem így, hogy ez a helyzet, amikor talán belseje itt gelbroke az iPhone. 94 00:06:30,100 --> 00:06:35,670 Mennek a dolgok, mint a normál - mint mi fut egy program, és a dolgok a végén visszatér 95 00:06:35,670 --> 00:06:38,540 bármi is kellene, hogy visszatérjen, de addig 96 00:06:38,540 --> 00:06:41,820 sikerült, hogy elpusztítsa az egész operációs rendszer. 97 00:06:41,820 --> 00:06:50,950 Önnek nem kell tudni, hogy kód érintő puffer túlcsordulást vagy valóban kihasználják azt. 98 00:06:50,950 --> 00:06:58,060 Önnek nem kell tudni, hogy az alapvető elképzeléseit ez a puffer, amit most túlcsordult, 99 00:06:58,060 --> 00:07:02,010 és ez az oka annak, hogy lehet túlcsordult, mert mi nem annak ellenőrzése, hogy 100 00:07:02,010 --> 00:07:06,110 vagyunk valójában határain belül is. 101 00:07:06,110 --> 00:07:09,880 >> [Student] A megoldás megakadályozza, hogy csak ellenőrzi a határokat? 102 00:07:09,880 --> 00:07:13,600 [Rob] Igen. Ebben az esetben a megoldás az lenne, 103 00:07:13,600 --> 00:07:20,850 Lehet akár mondják, ha strlen Bar nagyobb, mint 12-1 - 104 00:07:20,850 --> 00:07:24,970 azért, mert szükség van a / 0 a végén - 105 00:07:24,970 --> 00:07:34,090 vagy ha lehet kézzel csinálni egy for ciklus, hogy csak másolat az első 11 karakter, 106 00:07:34,090 --> 00:07:39,710 vagy bármit, ahol te tényleg ellenőrzi, hogy megbizonyosodjon arról, hogy nem túlcsordulás puffer. 107 00:07:45,580 --> 00:07:49,050 >> Egyéb kérdés? Igen? 108 00:07:49,050 --> 00:07:52,760 [Student] Tud beszélni próbál, és talán valami programozás (nem hallható). 109 00:07:52,760 --> 00:07:58,720 [Rob] Persze. 110 00:07:58,720 --> 00:08:03,500 Az aktuális program - 111 00:08:03,500 --> 00:08:08,190 mi soha nem teszel, ha egy végrehajtása trie a vizsgán 112 00:08:08,190 --> 00:08:12,840 azért, mert nem lenne tisztességes, hogy azok, akik nem hash táblákat. 113 00:08:12,840 --> 00:08:16,030 És hasonlóképpen mi soha nem neked végre egy hash tábla a vizsgán 114 00:08:16,030 --> 00:08:18,560 azért, mert nem lenne tisztességes, hogy azok, akik nem próbál. 115 00:08:18,560 --> 00:08:25,220 Meg kell azonban ismeri a struktúra egy trie vagy a struktúra egy hash tábla, vagy bármi. 116 00:08:25,220 --> 00:08:30,230 Ez tényleg igaz bármilyen adatszerkezetet láttunk. 117 00:08:30,230 --> 00:08:33,559 Csatolt listák, halmozott skews, bináris fák - 118 00:08:33,559 --> 00:08:38,190 akkor képesnek kell lennie arra, hogy meghatározza azokat a struktúrákat fejből. 119 00:08:38,190 --> 00:08:44,810 A trie - azt jelenti, hogy az egyetlen dolog, amit meg kell tennie, hogy talán kapsz 120 00:08:44,810 --> 00:08:50,070 néhány szót, vagy valami, és mi mondjuk megépíteni a trie hogy - 121 00:08:50,070 --> 00:08:52,870 adunk akkor talán egy sor szó 122 00:08:52,870 --> 00:08:56,280 és mi, mint építeni egy trie, amely ezt a szótárban. 123 00:08:56,280 --> 00:09:05,980 >> Csináljunk a szótár kutya és macska. 124 00:09:05,980 --> 00:09:10,790 Az ötlet a trie is indulunk ki ezt array - 125 00:09:10,790 --> 00:09:16,510 26. hely - 126 00:09:16,510 --> 00:09:24,490 és minden slot tényleges index a slot megfelel a levélben vagyunk érintett. 127 00:09:24,490 --> 00:09:28,560 Tehát itt, ha mi próbálunk beszúrni macska a mi trie 128 00:09:28,560 --> 00:09:35,360 Az első karakter a "c", ami lesz ", ha a = 0, akkor b = 1, c 2. 129 00:09:35,360 --> 00:09:38,090 Fogunk menni a második index, 130 00:09:38,090 --> 00:09:41,100 és fogunk létrehozni egy trie le ezt. 131 00:09:41,100 --> 00:09:47,080 Mi lesz, hogy 26-helyekkel. 132 00:09:47,080 --> 00:09:51,140 És akkor mi lesz az index a második karakter a macska. 133 00:09:51,140 --> 00:09:53,340 Az "a", ami lesz a 0. helyszínen. 134 00:09:53,340 --> 00:09:56,960 És ez megy, hogy 26-foltok. 135 00:09:56,960 --> 00:10:05,650 Akkor megyünk "t" és mi is, hogy az jön le, ami valójában milyen fontos 136 00:10:05,650 --> 00:10:13,990 mert - vessünk jön ide. Itt a trie a "t". 137 00:10:13,990 --> 00:10:23,370 Tegyük fel, hogy ez a mutató "t" 19. 138 00:10:23,370 --> 00:10:31,020 A lényeg, hogy emlékezzen a próbálkozások nem lehet csak nyomon követni ezeket a mutatókat. 139 00:10:31,020 --> 00:10:35,470 Azt is meg kell nyomon követni, hogy ez valójában a végén egy szót sem. 140 00:10:35,470 --> 00:10:38,570 Tehát, belseje itt szükségünk van valamilyen zászló, amely azt mondja 141 00:10:38,570 --> 00:10:41,520 oké, ez valójában a végén egy szót sem. 142 00:10:41,520 --> 00:10:46,830 Az ok, hogy ha később próbálja beilleszteni katasztrofális a mi szótár 143 00:10:46,830 --> 00:10:49,930 amely ugyanazt a kiindulási 3 karaktert 144 00:10:49,930 --> 00:10:57,250 de megy tovább fel kell ismernünk, hogy ez a végén egy szót sem. 145 00:10:57,250 --> 00:11:01,330 Vagy esetleg ha megpróbáljuk felnéz "CA", amely talán nem egy szó 146 00:11:01,330 --> 00:11:06,100 de most az van, akkor mi - 147 00:11:06,100 --> 00:11:10,270 vagy lenne c aztán nézzük a - 148 00:11:10,270 --> 00:11:13,940 fel kell ismernünk, hogy bár van egy mutató jön ki ez a csomópont 149 00:11:13,940 --> 00:11:15,940 ez nem jelent a végén a szót. 150 00:11:15,940 --> 00:11:19,430 >> Szóval, mit jelent az, hogy - mit akartál mondani? 151 00:11:19,430 --> 00:11:22,760 Mit jelent ez a struktúra néz ki? 152 00:11:22,760 --> 00:11:25,760 [Student] Ez egy sor mutató, amely 26 hosszú és majd bool voltak-e vagy sem volt. 153 00:11:25,760 --> 00:11:47,430 [Rob] Igen. Tehát lesz egy struct trie * mutató - itt fogjuk mondani [26] 154 00:11:47,430 --> 00:11:49,590 majd a pontosvessző itt. 155 00:11:49,590 --> 00:11:53,210 De a Pset, azt is számításba kell venni az aposztróf, 156 00:11:53,210 --> 00:11:58,170 ami azt jelentette, hogy szükséges hard-kód aposztróf index 27 vagy valami. 157 00:11:58,170 --> 00:12:00,440 De itt csak érdekel 26. 158 00:12:00,440 --> 00:12:11,830 És akkor van szükségünk, talán egy char vagy bool - nevezzük is szó. 159 00:12:11,830 --> 00:12:18,120 Ez a 2, a 3 dolog, azt hiszem, amit valaha is tudni kell próbálkozás - 160 00:12:18,120 --> 00:12:24,370 építési őket, a struktúra őket, és az utolsó dolog, amit a futási idő őket. 161 00:12:24,370 --> 00:12:28,250 >> Mi a futási egy trie - vagy a Keresés a trie? 162 00:12:28,250 --> 00:12:47,500 Ez az a pont, ahol azt mondják, hogy o (k), ahol k hossza a szó amit történetesen keres fel; 163 00:12:47,500 --> 00:12:53,850 de ugyanakkor azt mondjuk - legalábbis Pset 5 helyesírás kedvéért - azt mondjuk, hogy 164 00:12:53,850 --> 00:12:59,470 a leghosszabb szót a szótárban 45 karakter, így ez alapvetően 165 00:12:59,470 --> 00:13:04,900 O 45, amely konstans időben. 166 00:13:04,900 --> 00:13:09,660 Tehát, ha van egy felső korlátja a leghosszabb szót akkor - 167 00:13:09,660 --> 00:13:15,130 vagy akár, mint az angol szótár - van egy felső korlát a leghosszabb szót. 168 00:13:15,130 --> 00:13:19,970 Vagy bármelyik szótár - van egy leghosszabb kötve a felső szót. 169 00:13:19,970 --> 00:13:25,480 Nem számít, mit csinálsz állandó idő, 170 00:13:25,480 --> 00:13:33,810 de O k szép, mert ott valóban egy különbség futó mondjuk 171 00:13:33,810 --> 00:13:40,120 45 karakteres szó szemben az ábécé, amely csak szavak max. 3 karakter. 172 00:13:40,120 --> 00:13:52,870 A másik dolog, hogy az, hogy a - 173 00:13:52,870 --> 00:13:57,520 Ó, mert csak azt mondom, hogy 45 Előfordul, hogy a leghosszabb szót 174 00:13:57,520 --> 00:14:02,330 egyfajta buta, mert abban az időben mondjuk egy algoritmus O N. 175 00:14:02,330 --> 00:14:06,510 Hát rendben van, mert a memória esetében akár 2 ^ 32 byte, 176 00:14:06,510 --> 00:14:11,770 akkor N legfeljebb 4 milliárd, és ez az állandó idő, ezért egy bizonyos ponton 177 00:14:11,770 --> 00:14:14,870 ez butaság, hogy azt mondják, ez a fajta dolog, ahol van egy felső korlát 178 00:14:14,870 --> 00:14:19,540 hogy csak csökkenteni az állandó idő, mert minden állandó idő 179 00:14:19,540 --> 00:14:22,320 ha úgy gondolja, hogy ezen a módon. 180 00:14:22,320 --> 00:14:25,470 De valószínűleg elfogadják mindkét. 181 00:14:25,470 --> 00:14:31,780 Mindenesetre megmagyarázni sem, hogy O (1) azt jelenti, hogy egy felső-korlátos hosszúságú szó; 182 00:14:31,780 --> 00:14:34,070 O (k) azt jelenti, hogy a szó hossza - 183 00:14:34,070 --> 00:14:40,900 Nos, k jelenti a szó hossza. 184 00:14:44,060 --> 00:14:47,280 >> Igen. >> [Student] Nem a bool - mert ha elvégezte a trie 185 00:14:47,280 --> 00:14:53,220 úgy tűnt, hogy - akkor megy a macska, és akkor menj a következő mutató 186 00:14:53,220 --> 00:14:59,860 és akkor megmondani, hogy egyenlő igaz - azt teszel, hogy igaz, mint a t? 187 00:14:59,860 --> 00:15:06,560 [Rob] Nézzük hiszem, ez az a helyzet, ahol sok példát lehet csak próbálja meg, és elér 188 00:15:06,560 --> 00:15:12,310 egyszerű és / vagy szélsőséges példák és milyennek kellene lennie, úgyhogy gondolom, a szó "a". 189 00:15:12,310 --> 00:15:21,320 A mi eredeti trie - 190 00:15:21,320 --> 00:15:35,510 azt szeretnénk, hogy egy 1-itt, vagy azt akarnám, hogy egy 1. ide. 191 00:15:35,510 --> 00:15:41,350 Azt mondanám, hogy a végén valószínűleg vagy / vagy. 192 00:15:41,350 --> 00:15:46,000 Nem tudok egy okot - vagy tényleg te sem - 193 00:15:46,000 --> 00:15:51,060 Az ok, amiért nem tette oda, mert akkor nem is kell ilyen messzire menni. 194 00:15:51,060 --> 00:15:55,820 Soha nem kell kiosztani ezt trie. 195 00:15:55,820 --> 00:15:57,950 Mi csak fel a 1. ott. 196 00:15:57,950 --> 00:16:03,310 Ez még mindig mutat NULL. 197 00:16:03,310 --> 00:16:09,430 Ha mi csak megy, hogy egy karakter 198 00:16:09,430 --> 00:16:17,220 nincs ok arra, hogy kiterjesszék le egy másik trie csupán megjelölni ezt a levelet, mint használt. 199 00:16:17,220 --> 00:16:21,260 Hasonlóképpen, ha volna rá az "egy" ott lent 200 00:16:21,260 --> 00:16:27,860 akkor szükségszerűen az összes ilyen lenne csak 0 mindenkor. 201 00:16:27,860 --> 00:16:36,060 >> [Student], de nem kell egy induló trie, hogy pont ezt a "a"? 202 00:16:36,060 --> 00:16:43,570 [Rob] Van néhány globális vagy valami struct trie * t 203 00:16:43,570 --> 00:16:47,270 mely pontokon van, de ez csak egy mutató. 204 00:16:47,270 --> 00:16:51,500 Ez nem egy teljes értékű trie ami felé kell irányítani. 205 00:16:51,500 --> 00:17:02,000 [Student] Oké. Hogyan tudnánk hozzá a levél 'én' - a szó, amit? 206 00:17:02,000 --> 00:17:06,380 [Rob] A kérdés lehet felvenni. Várj. 207 00:17:06,380 --> 00:17:15,060 Ez egy olyan kérdés, ahol a trie önmagában - 208 00:17:15,060 --> 00:17:17,880 Nem tudom, ahogy a Pset írt volna meg. 209 00:17:17,880 --> 00:17:19,880 A korábbi struktúra rossz volt. 210 00:17:19,880 --> 00:17:41,690 De azt is megtehetik struct csomópont egy bool - és a mutató - 211 00:17:41,690 --> 00:17:46,500 van valójában többféle módon tudna írni. 212 00:17:46,500 --> 00:18:01,800 Alternatív megoldásként egy trie nem kell, hogy egy struct. 213 00:18:01,800 --> 00:18:21,250 Még az is lehet trie - typedef node * - 214 00:18:21,250 --> 00:18:34,760 csomópont [26] egy trie, és ez már nem struct. 215 00:18:34,760 --> 00:18:44,270 Most már lesz - Én próbálok gondolni az is, hogy Pset várt volna, ha. 216 00:18:44,270 --> 00:18:47,650 [Student] húztam fel, hogy a felülvizsgálati ülésén, és azt hiszem, hogy csak megy - 217 00:18:47,650 --> 00:18:50,670 mint ha van egy olyan, akkor folytassa a következő - >> [Rob] Így csinálják? 218 00:18:50,670 --> 00:18:53,750 [Student] És aztán, ha van egy igaz ott nem működik - 219 00:18:53,750 --> 00:18:58,710 [Rob] Igen. Ez működik. Ez hulladékok a tér - 220 00:18:58,710 --> 00:19:03,910 akkor feltétlenül kell egy teljesen más szintet trie, hogy nem kell az első helyen. 221 00:19:03,910 --> 00:19:08,410 Itt egyre ronda minden - 222 00:19:08,410 --> 00:19:11,530 Alapvetően mit akarok csinálni itt is társult - 223 00:19:11,530 --> 00:19:15,000 ahelyett, hogy 26-mutatók a próbálkozás, 224 00:19:15,000 --> 00:19:20,810 ez 26 bool mutató, bool mutató, bool mutató, és így tovább. 225 00:19:28,940 --> 00:19:34,410 >> [Student] Nem lehet, hogy a 2 tömbök? Egy sor bools és egy sor mutató? 226 00:19:34,410 --> 00:19:38,060 [Rob] Lehet, de akkor azt kell - 227 00:19:38,060 --> 00:19:41,500 2. tömbök Logikai és mutatók. 228 00:19:41,500 --> 00:19:47,340 Azt kell majd építeni a tömb Logikai - 229 00:19:47,340 --> 00:19:51,240 a tömb Logikai kell olyan nagy, mint a trie 230 00:19:51,240 --> 00:19:53,200 mert akkor nem csak 26 Logikai. 231 00:19:53,200 --> 00:19:57,010 Azt, hogy minden egyes lehetséges növekedni - 232 00:19:57,010 --> 00:20:03,240 mint a trie több mint 26 igaz vagy hamis lehetséges szavak. 233 00:20:03,240 --> 00:20:08,240 Ezen a ponton akkor is csak egy struktúra, amely a trie nő le. 234 00:20:08,240 --> 00:20:15,210 Ez nem lenne helyes, mert - mit akar itt? 235 00:20:15,210 --> 00:20:23,640 Tehát, trie * t - 236 00:20:23,640 --> 00:20:30,200 lehet tenni typedef (node ​​*) [26] trie; 237 00:20:30,200 --> 00:20:33,090 hogy lehet a szintaxis keresem. 238 00:20:36,740 --> 00:20:41,450 És ez csak a rendszeres trie. 239 00:20:44,900 --> 00:20:47,440 Nem vagyok benne biztos. 240 00:20:47,440 --> 00:20:54,850 De ez, ahogy tettük azt a véleményét, hogy tökéletesen működik is jól. 241 00:20:54,850 --> 00:20:57,850 Abban az esetben, ha ez csak bool a szót, majd egy sor 26 242 00:20:57,850 --> 00:21:01,750 akkor nem kell menni a következő szintre. 243 00:21:01,750 --> 00:21:05,420 Gondolkozom, ahogy én is csinálni. 244 00:21:07,500 --> 00:21:09,550 >> Egyéb kérdés? 245 00:21:09,550 --> 00:21:12,540 [Student] Lehet kérdéseket feltenni valami más? >> [Rob] Igen. 246 00:21:12,540 --> 00:21:19,040 [Tanítvány] megy át, mi a különbség, és amikor azt használni jQuery Ajax ellen? 247 00:21:19,040 --> 00:21:24,550 [Rob] azok önmagukban teljesen más. 248 00:21:24,550 --> 00:21:32,720 JQuery teszi lehetővé Ajax. Ez nem ad nekünk néhány egyszerűbb használata Ajax. 249 00:21:32,720 --> 00:21:38,480 De Ajax jön szállított JavaScript. JavaScript Ajax képességeit. 250 00:21:38,480 --> 00:21:47,490 Minden Ajax jelenti, összehasonlít Én már az oldalon, és ha azt akarom, hogy - 251 00:21:47,490 --> 00:21:52,820 amikor rákattintok a valami, amit nem kell újra az oldalt, hogy letölthető az új információt. 252 00:21:52,820 --> 00:21:55,020 Csak azt kérik, hogy új információkat. 253 00:21:55,020 --> 00:22:01,220 Akkor nézd meg, hogy a Facebook, vagy ilyesmi. 254 00:22:01,220 --> 00:22:05,580 Vizsgálja hálózat. 255 00:22:05,580 --> 00:22:07,460 Shrink ezt. 256 00:22:12,070 --> 00:22:14,940 Itt lent azt látjuk, hogy mi vagyunk egyre ezeket a kéréseket. 257 00:22:14,940 --> 00:22:18,990 Most, amikor rákattintok - nos, ez csinál Ajax, mielőtt még kattintson semmit. 258 00:22:18,990 --> 00:22:24,140 De ha rákattint a, akkor megy, hogy egy csomó kérelmek itt 259 00:22:24,140 --> 00:22:33,530 amely most, hogy ezeket a kérelmeket - Ó, most már itt van. 260 00:22:33,530 --> 00:22:36,590 Nézzük frissíteni. 261 00:22:36,590 --> 00:22:38,580 Ehhez újra. 262 00:22:38,580 --> 00:22:42,090 Látjuk, hogy megkapjuk ezeket a kéréseket, de ez még mindig folyamatban az oldal betöltése. 263 00:22:42,090 --> 00:22:47,400 Figyeljük meg a Facebook, hogy ezeket a folyamatos kérések után is a lap betöltődött. 264 00:22:47,400 --> 00:22:51,470 És ha rákattintok itt, akkor az, hogy még több kérelmet bizonyos adatok 265 00:22:51,470 --> 00:22:54,990 hogy válaszul a dolog, én csak kattintott. 266 00:22:54,990 --> 00:23:04,660 Ez az, amit Ajax. Ez lehetővé teszi, hogy húzza az adatokat, amelyeket nem töltötte le az oldalt eredetileg. 267 00:23:04,660 --> 00:23:12,050 >> JQuery külön. JQuery csak egy JavaScript könyvtár, ami egy csomó dolog könnyebb. 268 00:23:12,050 --> 00:23:28,660 JQuery ez sok az előnye, ez csak - 269 00:23:28,660 --> 00:23:34,030 dollárjel - dollár jel egy érvényes változó JavaScript. 270 00:23:34,030 --> 00:23:43,460 Tehát, jQuery - összes csinál mondja, mint a var $ = egy csomó dolgot - 271 00:23:43,460 --> 00:23:46,690 mint valami nagy funkció mindezt cucc benne - 272 00:23:46,690 --> 00:23:52,650 és akkor használni, hogy a dollár jel módon, mint 273 00:23:52,650 --> 00:24:23,940 $ ("# Footer".) Stílus ("text-align", "center"). 274 00:24:23,940 --> 00:24:32,330 JQuery adja nekünk ezt a fajta szintaxis, ahol egy nagy előny - 275 00:24:32,330 --> 00:24:35,650 azt más tulajdonságokkal rendelkezik, de, hogy mit akarunk, hogy összpontosítson a legtöbb 276 00:24:35,650 --> 00:24:38,760 csak, hogy képes kiválasztani elemeket, mint ez. 277 00:24:38,760 --> 00:24:42,780 Rendszeres, sima régi JavaScript meg tudod csinálni a dolgokat, mint 278 00:24:42,780 --> 00:24:50,490 dokumentum-dot-get elem ID footer-dot - Nem tudom, mi az, ezen a ponton - 279 00:24:50,490 --> 00:24:52,790 valamit a CSS vagy a stílust, vagy valami - 280 00:24:52,790 --> 00:24:58,930 de alternatívaként, mondjuk azt akartuk, hogy válassza ki az osztályban. 281 00:24:58,930 --> 00:25:06,330 Most stílus mindent osztályú lábléc ezt a stílust. 282 00:25:06,330 --> 00:25:16,070 Még ha azt akartuk, hogy stílust bármely pontját. 283 00:25:16,070 --> 00:25:22,000 Szóval, ez a választó -, hogy képes kiválasztani a dolgokat a dom, mint ez a hihetetlenül kényelmes 284 00:25:22,000 --> 00:25:29,420 mivel a jó öreg JavaScript meg kellett volna tennie a dokumentum-dot-get elemek osztály neve 285 00:25:29,420 --> 00:25:34,260 vagy bármi legyen is az, vagy ha akartam egy tag azt kell mondanom, hogy elemeket tag nevét. 286 00:25:34,260 --> 00:25:37,530 Tehát azt kell tudni, hogy az adott módon, hogy érhetem el az összes ezeket a dolgokat. 287 00:25:37,530 --> 00:25:40,810 A funkciók más lesz attól függően, hogy én vagyok egy osztály vagy azonosító 288 00:25:40,810 --> 00:25:46,420 vagy a tag, vagy mi, míg a jQuery csak nem nekem. 289 00:25:46,420 --> 00:25:53,120 >> [Student] a jQuery fogja használni, ha csinálsz kezdeti stílus az oldal? 290 00:25:53,120 --> 00:25:56,570 Vagy ahhoz, hogy módosítsa a stílus után ez már - >> [Rob] megváltoztatni. 291 00:25:56,570 --> 00:25:58,440 [Student] Miután ez már be van töltve. >> [Rob] Igen. 292 00:25:58,440 --> 00:26:07,020 Minden induló stílus - nos, még a - 293 00:26:07,020 --> 00:26:09,970 általában akkor használja ezt a fajta változás. 294 00:26:09,970 --> 00:26:14,330 Akkor nem változik - ez a munka tökéletesen megfelel. 295 00:26:14,330 --> 00:26:17,720 De általában nem változik a stílus, mint ez. 296 00:26:17,720 --> 00:26:20,610 Ehelyett azt, hogy ez egy új osztályt, vagy valami 297 00:26:20,610 --> 00:26:24,650 míg a CSS már definiálva, hogy az osztály egy bizonyos módon. 298 00:26:24,650 --> 00:26:28,920 Azáltal, hogy ezeket a tételeket én kiválaszt egy új osztályt 299 00:26:28,920 --> 00:26:32,200 Én alkalmazása a stílusok, amelyek már letöltött. 300 00:26:32,200 --> 00:26:36,720 [Student] Akkor válassza pár jelölőnégyzeteket, és azokat a dolgokat, amit választott 301 00:26:36,720 --> 00:26:41,820 teszi az új stílust, és kezdeni más. >> [Rob] Igen. 302 00:26:41,820 --> 00:26:45,490 A másik dolog, hogy emlékezzen a - 303 00:26:45,490 --> 00:26:48,350 Nos, több funkciót meg kell emlékezni a jQuery. 304 00:26:48,350 --> 00:26:55,570 Tegyük fel, hogy kiválasztja valami ID P. 305 00:26:55,570 --> 00:27:00,500 >> [Student] Mindig kell használni a font? 306 00:27:00,500 --> 00:27:09,600 [Rob] Ez azt jelenti, ID. Ez egyenértékű a CSS, ezért CSS választók - ez ihlette. 307 00:27:09,600 --> 00:27:12,410 Hol CSS, ha akartam stílus a lábléc - 308 00:27:12,410 --> 00:27:16,950 vagy valami azonosító lábléc - 309 00:27:16,950 --> 00:27:23,490 lenne, mint a text-align: center; 310 00:27:23,490 --> 00:27:28,820 akkor nem kell írni CSS a vizsgán, de meg kell tudni, hogy a választók. 311 00:27:28,820 --> 00:27:34,280 Meg kell tudni, hogy mi - meg kell tudni, hogyan kell olvasni. 312 00:27:34,280 --> 00:27:36,000 De mi soha - 313 00:27:36,000 --> 00:27:42,390 nem kell memorizálni a különböző lehetséges stílus dolgokat. Vagy ezek közül bármelyik. 314 00:27:42,390 --> 00:27:50,020 >> JQuery dolog, amit meg kell emlékezni - 315 00:27:50,020 --> 00:27:58,380 meg kell emlékezni dot-HTML, és egy közös minta jQuery - nézzük újra írni ezt. 316 00:27:58,380 --> 00:28:09,640 A közös minta már $ ("# f"). Html 317 00:28:09,640 --> 00:28:15,650 Ha fel egyszerűen zárójelbe azt jelenti, hogy a HTML; 318 00:28:15,650 --> 00:28:23,870 míg ha azt mondom, HTML, és tedd, amit akarok, itt - néhány linket valamit - 319 00:28:23,870 --> 00:28:30,410 amivel valami benne, a zárójelben már beállítja a HTML. 320 00:28:30,410 --> 00:28:33,760 Ez elég gyakran előfordul egy csomó funkció. 321 00:28:33,760 --> 00:28:38,360 Itt ugyanaz a helyzet a szöveget. 322 00:28:38,360 --> 00:28:41,720 A különbség a HTML és a szöveg, hogy a szöveg megy, hogy be ezt a 323 00:28:41,720 --> 00:28:46,350 mint szó kevésbé, mint a nagyobb, mint a helyett, mint egy horgony tag. 324 00:28:46,350 --> 00:28:53,000 És a szöveg lesz ugyanaz, ha én csak ezt. 325 00:28:53,000 --> 00:28:55,760 Ez lesz letölteni a szöveg a dokumentum - nem a HTML-dokumentum 326 00:28:55,760 --> 00:29:01,810 de csak a szöveg belül ezt az elemet. 327 00:29:01,810 --> 00:29:08,430 Egy másik az, ha a "f" történetesen egy azonosítót a bemeneti, 328 00:29:08,430 --> 00:29:14,250 majd a hash-f-pont-val - ha akarom állítani a bemenetet valami hasonló - 329 00:29:14,250 --> 00:29:17,900 mondjuk elütöttem egy négyzetet, és azt akarom, hogy alapértelmezett értéket - 330 00:29:17,900 --> 00:29:26,070 dot-val - Én nem is tudom - 3 - így automatikusan helyezze be a szövegmezőbe 3 331 00:29:26,070 --> 00:29:35,980 de ha azt mondom, 3-pont-val, hogy letölteni bármit jelenleg a szövegdobozba nekem. 332 00:29:35,980 --> 00:29:39,690 >> Ez hasznos Form Validation ahol 333 00:29:39,690 --> 00:29:48,030 ha csak szeretnénk, hogy győződjön meg arról, hogy azok ténylegesen töltötte ki az összes dolgot. 334 00:29:48,030 --> 00:29:54,710 Az egyik módja ennek, hogy az, ha miután elütöttem be ez elkerülhetetlenül küldött néhány oldalt a szerver - 335 00:29:54,710 --> 00:30:00,190 mint nekünk lenne PHP - és megpróbálja feldolgozni az adatokat, és azt mondaná, 336 00:30:00,190 --> 00:30:03,030 ők nem töltöttek ki valamit, hogy most már átirányítja őket a másik oldalra, hogy azt mondja 337 00:30:03,030 --> 00:30:05,050 Ön nem töltötte ki mindent. 338 00:30:05,050 --> 00:30:11,650 Ahelyett, hogy ezt, hogy a JavaScript / jQuery akkor csak látni, ha val üres. 339 00:30:11,650 --> 00:30:17,270 Vagy val - üres idézi. 340 00:30:17,270 --> 00:30:23,120 Ez lesz csak a - most is figyelmezteti őket, hogy nem töltötte ki ezen a területen. 341 00:30:23,120 --> 00:30:26,990 Elkerülhetetlen, hogy nem kell csinálni a PHP szerver oldali ellenőrzés, mivel 342 00:30:26,990 --> 00:30:31,210 ha csak letilthatja a JavaScriptet a böngészőben. 343 00:30:31,210 --> 00:30:36,180 De JavaScript kényelmessé teszi azok számára, akik már aktiválta, 344 00:30:36,180 --> 00:30:42,940 és gyakorlatilag kilencvenkilenc-pont valami százaléka böngészők azt manapság. 345 00:30:42,940 --> 00:30:46,630 Nagyon kevés ember kapcsolja JavaScript ki. 346 00:30:46,630 --> 00:30:52,850 Ez a felhasználó kényelmét. Annyit kell tennie, PHP érvényesítés. 347 00:30:52,850 --> 00:30:55,990 Meg kell csinálni a JavaScript érvényesítés. 348 00:30:55,990 --> 00:30:57,950 >> [Student] Mit jelent a # f utal ide? 349 00:30:57,950 --> 00:31:00,020 [Rob] Mit jelent a # f utal? 350 00:31:00,020 --> 00:31:04,350 Van néhány elem a dokumentumban ID 'f'. 351 00:31:04,350 --> 00:31:09,850 Majd nézd meg - valószínűleg a Facebookon rengeteg példát, ahol, ha jövök elemek 352 00:31:09,850 --> 00:31:17,820 keres itt a elemek tag látom az adott div, amit most kiemelt itt - 353 00:31:17,820 --> 00:31:22,670 vagy ez az egész oldal - igen, ez ott. Ennek ID pagelet_bluebar. 354 00:31:22,670 --> 00:31:26,730 A konzolon Feltételezem ők a jQuery. 355 00:31:26,730 --> 00:31:40,030 Így tudtam válassza pagelet_bluebar úgy, hogy kiválasztja, és én csináltam. 356 00:31:46,470 --> 00:31:52,250 Próbáljuk meg -, vagy lehet, hogy nem használja a jQuery, és a karakter térképezni, hogy valami mást. 357 00:31:52,250 --> 00:32:04,970 Egy jobb példa, amit én ismerek a jQuery - 358 00:32:04,970 --> 00:32:10,600 még mindig keresi a mi elem van - mi van itt osztályban egyenlő Navbar. 359 00:32:10,600 --> 00:32:12,330 Ez valami osztályú navigációs panelen, 360 00:32:12,330 --> 00:32:19,180 így belsejében a konzol tudjuk nézni a dolgot osztályú navigációs panelen. 361 00:32:19,180 --> 00:32:21,770 Itt tudjuk lépjünk át ezt, és látom, hogy ez az, ami. 362 00:32:21,770 --> 00:32:29,850 Ha akartam csinálni. Szöveg Ez a szöveg az, hogy így látom beállításait jelentés fenti log out 363 00:32:29,850 --> 00:32:35,760 amelyek mind-mind itt, de ez még mindig szöveget, hogy a HTML tag. 364 00:32:35,760 --> 00:32:52,230 Tudtam meg a HTML csak néhány kapcsolat, 365 00:32:52,230 --> 00:32:56,550 úgyhogy megszabadulni a bárban. Most, hogy megszabadultak a fejléc teljesen, csak hogy ez kapcsolódik a YouTube-ra. 366 00:32:56,550 --> 00:32:59,630 >> És van bármilyen formában példa? 367 00:32:59,630 --> 00:33:01,940 Itt egy űrlapot. 368 00:33:01,940 --> 00:33:05,830 Én a jobb gombbal, és vizsgáljuk elem, hogy jöjjön el ide. 369 00:33:05,830 --> 00:33:08,460 Látom, hogy az azonosító szöveges keresés, 370 00:33:08,460 --> 00:33:16,910 tehát itt, ha én ID szöveges keresést. 371 00:33:16,910 --> 00:33:23,190 Hozok rajta, és látom, hogy ez a helyes dolog, amit kerestem. 372 00:33:23,190 --> 00:33:27,670 Ha én akarok. Val adna nekem azt, amit begépelt ott. 373 00:33:27,670 --> 00:33:36,010 Ha akartam csinálni helló meg fogjuk változtatni, hogy itt a Hello - jQuery. 374 00:33:36,010 --> 00:33:45,780 Persze, tudtam csinálni, nevetséges, mint document.get elemet ID - szöveges keresés - 375 00:33:45,780 --> 00:33:54,000 Én nem is tudom, mi az a pont - pont értéke - Nem, elfelejtettem, hogy a fickó. 376 00:33:54,000 --> 00:33:59,110 Szóval, ez helló. Én nem tudom, hogy én meg azt egyenlő valamit. 377 00:33:59,110 --> 00:34:00,930 Igen, úgy, hogy megváltoztatta. 378 00:34:00,930 --> 00:34:07,510 De nem kell használni ezeket és nagyon sok weboldalak ezen a ponton használata jQuery. 379 00:34:07,510 --> 00:34:13,050 Még, mint a végleges projekt - ha csinálsz egy webes projekt - az első dolog, 380 00:34:13,050 --> 00:34:20,030 Azt javaslom, csak beleértve a jQuery így kap a kényelmet, ezeket a funkciókat. 381 00:34:22,580 --> 00:34:27,750 >> [Student] Azt hiszem, láttam egy másik módja, hogy egy elem a dom. 382 00:34:27,750 --> 00:34:32,520 Van, hogy használja dot, majd folyamatosan megy le? 383 00:34:32,520 --> 00:34:36,630 [Rob] lehet csinálni. Nem tudom, hogy ez nagyon jól működik. 384 00:34:36,630 --> 00:34:38,900 Nehéz navigálni így. 385 00:34:38,900 --> 00:34:43,179 Egy példa - Én sem tudom, ha bármilyen formában - 386 00:34:43,179 --> 00:34:48,940 de document.forms megy vissza a listáját, formák, ami ezen az oldalon, 387 00:34:48,940 --> 00:34:55,070 akkor meg tudom csinálni document.forms 0 lesz az első forma. 388 00:34:55,070 --> 00:35:03,070 Dot - Nem tudom, mi már hívott, hogy - így nem is volt neve, 389 00:35:03,070 --> 00:35:08,050 így talán bemenet működni fog. Nem. 390 00:35:08,050 --> 00:35:11,050 Én nem is tudom, hogyan lehet ezt -, hogy elem-I-tag nevét bemenet. 391 00:35:11,050 --> 00:35:23,630 Igen, kaptam a bemeneti, és most szeretné, hogy a 0-bemenet 392 00:35:23,630 --> 00:35:31,320 , és azt akarom, hogy válassza ki az értékét, így lesz szöveget. 393 00:35:31,320 --> 00:35:33,890 Kellett a végén csinál get elemek tag nevét egyébként. 394 00:35:33,890 --> 00:35:36,210 Lehet, hogy valamilyen módon, hogy kiválassza azt közvetlenül 395 00:35:36,210 --> 00:35:43,480 a forma 0, de a szép dolog ez is, mint nekem csak, hogy a címkéket az úgynevezett input 396 00:35:43,480 --> 00:35:49,880 amelyek a gyermek ebben a formában, különben, ha csak tehetem egyenesen elöl 397 00:35:49,880 --> 00:35:56,680 ez jelölje ki az összes elemet az egész oldalt, a teljes dokumentum 398 00:35:56,680 --> 00:36:00,580 nem csak, hogy a forma, és ez talán nem is az, aki akarok. 399 00:36:00,580 --> 00:36:06,180 Én nem is tudom, melyik az. Nem tudom. 400 00:36:06,180 --> 00:36:13,450 Azt hiszem, az első input elem oldalunkon ez a kis jelölőnégyzetet. 401 00:36:13,450 --> 00:36:20,450 >> [Student] Ez nagyon független 402 00:36:20,450 --> 00:36:27,420 és esetleg milyen buta, de a válasz gombot, azt mondja, hogy a PHP - 403 00:36:27,420 --> 00:36:35,660 Nem tudom, hogy ez a válasz gombot, vagy jegyzeteket, de azt mondja, PHP szerver oldali 404 00:36:35,660 --> 00:36:39,590 és JavaScript kliens oldali. Mi a különbség a 2? 405 00:36:39,590 --> 00:36:45,550 [Rob] A különbség a JavaScript kliens-oldali és a PHP szerver oldali. 406 00:36:45,550 --> 00:36:51,890 Ha már hallott slash / használt node js, mielőtt azt gondolja, hogy 407 00:36:51,890 --> 00:36:56,280 JavaScript nem csak kliensoldali de CS50 célokra is - 408 00:36:56,280 --> 00:36:59,340 vagy legalábbis ezt a kvízt céljaira is. 409 00:36:59,340 --> 00:37:03,800 PHP, hogy szerver oldali. No JavaScript. 410 00:37:03,800 --> 00:37:08,700 Amikor írsz a weboldalon lesz írni PHP a szerveren. 411 00:37:08,700 --> 00:37:11,670 Te soha nem kell írásban JavaScript a szerveren. 412 00:37:11,670 --> 00:37:17,190 JavaScript végül szerzés küldött a böngésző, ahol a JavaScript kódot végrehajtja. 413 00:37:17,190 --> 00:37:22,250 És a JavaScript kódot kell élni a böngészőben, mert különben, ha azt akarom, hogy 414 00:37:22,250 --> 00:37:25,830 csak nem bármilyen JavaScript-y dolog, mint rákattint erre, 415 00:37:25,830 --> 00:37:31,720 Nem vagyok újratöltése oldalon. Ez csak JavaScript újra formázás dolog számomra. 416 00:37:31,720 --> 00:37:36,490 Ha a JavaScript élt a szerveren, akkor azt kell, hogy elkerülhetetlenül kér valamit 417 00:37:36,490 --> 00:37:39,490 a szerver, hogy tudja, mit kell tenni. 418 00:37:39,490 --> 00:37:45,380 PHP - nincs olyan dolog, mint a PHP a böngészőben. 419 00:37:45,380 --> 00:37:52,090 Amikor kér egy oldalt - így mondjuk itt azt kérte, amelyet az adott oldal. 420 00:37:52,090 --> 00:37:57,270 Ez azt jelenti, hogy ez fog kérni - 421 00:37:57,270 --> 00:38:04,270 frissíteni - ez meg fog frissítse az oldalt - 422 00:38:04,270 --> 00:38:07,210 ezért ezt a kérést megy el a szerverre. 423 00:38:07,210 --> 00:38:13,190 Úgy látja, hogy azt vissza kell szolgáltatnia az adott téma ezzel a ID, 424 00:38:13,190 --> 00:38:23,740 most, hogy lesz egy kis PHP, hogy a PHP értelmező fogja értelmezni, hogy az oldalra 425 00:38:23,740 --> 00:38:28,680 és átalakítja azt csak a HTML, CSS, JavaScript talán, mindegy. 426 00:38:28,680 --> 00:38:36,930 Ez a PHP, amely feldolgozza a kérést, és beolvassa a teljes szöveget, meg ilyesmi 427 00:38:36,930 --> 00:38:39,170 , hogy én vagyok valóban keresi az adatbázisból. 428 00:38:39,170 --> 00:38:44,750 De mi elhagyja a szerver csak HTML / JS / CSS. 429 00:38:44,750 --> 00:38:48,630 Nincs a PHP, amely elhagyja a szervert, mert ha valójában nem 430 00:38:48,630 --> 00:38:53,890 akkor a böngésző nem lenne ötlete, mit kell csinálni vele, mert nem tudja, mi a PHP. 431 00:38:53,890 --> 00:39:00,250 De ugyanaz a gondolat, mert a JavaScript a kliens-oldali, 432 00:39:00,250 --> 00:39:02,250 soha nem lehet hozzáférni a MySQL belőle. 433 00:39:02,250 --> 00:39:07,430 Mivel a PHP szerver oldali te MySQL hozzáférést belőle. 434 00:39:07,430 --> 00:39:12,880 >> [Tanítvány] megy át néhány, a biztonsági aggályok a cookie-kat HTTP? 435 00:39:12,880 --> 00:39:18,390 [Rob] Ezek nem olyan dolgok fogunk tudni. 436 00:39:18,390 --> 00:39:24,500 Egyes biztonsági aggályok a cookie-kat HTTP. 437 00:39:24,500 --> 00:39:28,550 A nagy kérdés itt az, amit itt látunk, hogy a süti PHP / ID. 438 00:39:28,550 --> 00:39:33,560 Ez olyan, mintha az egyetemes PHP a munkamenet. 439 00:39:33,560 --> 00:39:39,550 A munkamenet van valami, hogy benne a PHP soha nem kell érvényesíteni 440 00:39:39,550 --> 00:39:45,690 mert ez a szerver, amely teljes ellenőrzése alatt az ülésen. 441 00:39:45,690 --> 00:39:47,690 Nem lehet megérinteni egyáltalán. 442 00:39:47,690 --> 00:39:53,120 De ez a süti - ez - 443 00:39:53,120 --> 00:39:57,500 és azt hiszem, akkor is be, mint én most, ha akarta használni, hogy - 444 00:39:57,500 --> 00:40:06,610 de ez az a süti, hogy a - elkerülhetetlenül csinál egy kérést a szerver. 445 00:40:06,610 --> 00:40:09,890 A szerver visszaküldi az oldalon. A kérelmet történik. 446 00:40:09,890 --> 00:40:12,580 Ez már nincs ötlete, hogy ki vagy. 447 00:40:12,580 --> 00:40:17,230 Szóval, a következő kérést csinál fog közé tartozik, hogy cookie-úgy, hogy tudja, 448 00:40:17,230 --> 00:40:19,810 Ez az a személy, aki ezt a kérést előtt. 449 00:40:19,810 --> 00:40:23,830 Ez a munkamenet adatokat társított a felhasználótól. 450 00:40:23,830 --> 00:40:28,210 Ezért nem kell, hogy jelentkezzen be minden egyes oldalt használja. 451 00:40:28,210 --> 00:40:33,380 A biztonsági kérdés itt az, hogy, hogy cookie-t küld ki a weben keresztül. 452 00:40:33,380 --> 00:40:41,490 Mi HTTPS itt, így ebben az esetben azt jelenti, hogy mi titkosítása ezt a cuccot. 453 00:40:41,490 --> 00:40:49,870 Valaki nem tud jönni, és csak lopni a sütit, és most már a szerver azt fogja hinni, ők engem. 454 00:40:49,870 --> 00:40:52,060 De egyenes HTTP tudnak. 455 00:40:52,060 --> 00:40:57,650 Csakúgy, mint ez Wireshark / FireSheep dolgot, ha csak hallgatni, hogy minden a wi-fis a levegőben 456 00:40:57,650 --> 00:41:01,380 és elfogják, amit akarsz, szóval igen. 457 00:41:01,380 --> 00:41:12,430 >> [Student] Valami hasonló biztonsági kockázat tárolja a felhasználói azonosítót utáni 458 00:41:12,430 --> 00:41:16,860 mert ez szabadon szerkeszthető konzolok és a dolgok. 459 00:41:16,860 --> 00:41:23,410 [Rob] Igen. Rengeteg kérdés, ahol, mint bármit, ami a felhasználó 460 00:41:23,410 --> 00:41:26,940 kell érvényesíteni. 461 00:41:26,940 --> 00:41:37,650 Rengeteg olyan esetek, amikor hasznos lenne, mint én vagyok, arról, hogy a post. 462 00:41:37,650 --> 00:41:39,650 Bla, bla, bla, bla, bla. Aztán nyomja meg a választ. 463 00:41:39,650 --> 00:41:44,540 Ez nagyon hasznos, ha a poszt kérelem tartalmazza az azonosítót, mivel 464 00:41:44,540 --> 00:41:48,610  Azt akarom, hogy társítani ezen a poszton velem. 465 00:41:48,610 --> 00:41:54,820 De nem tehetem, mert szabad vagyok, hogy a POST kérés - csakúgy, mint kézi 466 00:41:54,820 --> 00:41:57,820 jön a saját POST kérés - 467 00:41:57,820 --> 00:42:00,960 , amely a felhasználói azonosítót és most közzétesszük, mint te. 468 00:42:00,960 --> 00:42:07,440 Ez az, amiért a szerver oldali Én nem hivatkozhat utáni kérelmek, amelyek a megfelelő felhasználói azonosítót. 469 00:42:07,440 --> 00:42:09,720 Ezért kell, hogy tartozzon az én ülésén. 470 00:42:09,720 --> 00:42:15,140 Így néz ki a felhasználói azonosító a session tömb, és azt be, hogy az én adatbázisba 471 00:42:15,140 --> 00:42:17,580 a felhasználó, akik ténylegesen ezt a hozzászólást. 472 00:42:17,580 --> 00:42:19,580 [Student] És ez alapján a süti? 473 00:42:19,580 --> 00:42:24,690 [Rob] Igen. Használja a cookie-egyeznek meg, hogy a felhasználó, aki ezt a kérést. 474 00:42:24,690 --> 00:42:30,570 Ez húzza ki a felhasználói azonosítót az ülésen, és hogy majd beilleszti az adatbázisba 475 00:42:30,570 --> 00:42:32,960 használja, hogy a felhasználói azonosító. 476 00:42:32,960 --> 00:42:40,330 Ez tetszik gomb -, hogy mi valójában csinál - 477 00:42:40,330 --> 00:42:43,810 Nem fogom megtalálni itt. Ez lesz az Ajax függvény 478 00:42:43,810 --> 00:42:46,780 Mi az Ajax funkció? 479 00:42:46,780 --> 00:42:55,500 Hadd megtudja, mi a JavaScript. 480 00:42:55,500 --> 00:42:59,710 Ez egy CS50 projekt egy ideje. 481 00:42:59,710 --> 00:43:02,880 Nem emlékszem, mi az. 482 00:43:02,880 --> 00:43:12,530 Ajax funkció - minden Ajax funkció tesz, hogy egy Ajax kérés, hogy egy oldal ezzel ID - 483 00:43:12,530 --> 00:43:15,810 Az ID 22453. 484 00:43:15,810 --> 00:43:20,180 Ez nem is egy post kérést. Ez egy GET kérést, amely még könnyebbé teszi. 485 00:43:20,180 --> 00:43:27,860 Ha tudnám, mi az URL - ez olyasmi, mint ilyen / ID = 22453 - 486 00:43:27,860 --> 00:43:33,290 vagy? ID = 22453 - 487 00:43:33,290 --> 00:43:40,290 így ide látogató URL tetszik. 488 00:43:40,290 --> 00:43:44,600 Ami nem lenne olyan nagy probléma, de ez hihetetlenül könnyű írni a hurok 489 00:43:44,600 --> 00:43:48,500 amely csak megy, hogy látogassa meg a következő címet újra és újra, ezért látod 490 00:43:48,500 --> 00:43:51,180 Isawyouharvard adtuk ezer dolog. 491 00:43:51,180 --> 00:43:56,960 És általában CS50 alapú Isawyouharvard hozzászólások. 492 00:43:56,960 --> 00:44:01,200 Hogyan találom meg a legjobban tetszett? 493 00:44:01,200 --> 00:44:03,720 Hajlamosak arra, hogy törölt elég gyorsan is. 494 00:44:03,720 --> 00:44:06,490 Ez nem a leginkább kedvelt. Ott vagyunk. 495 00:44:06,490 --> 00:44:13,400 Csalók a leginkább tetszett az oldal - ez nagyon fontos, hogy ezt most. 496 00:44:13,400 --> 00:44:21,230 Oh wow. Ők már törölte az is, ettől az évtől, amelyeket 497 00:44:21,230 --> 00:44:25,590 megcsalta. Azok mind törölték. 498 00:44:25,590 --> 00:44:28,680 Soha nem lesz egy hozzászólást, hogy megkapja ezt a magas. 499 00:44:28,680 --> 00:44:32,860 Ez nyilvánvalóan megcsalta, hogy az a leginkább tetszett oldalt. 500 00:44:36,570 --> 00:44:39,310 >> További kérdések? 501 00:44:39,310 --> 00:44:46,050 [Diák] Mit kell tudni az XHTML? 502 00:44:46,050 --> 00:44:49,710 [Rob] Gyakorlatilag semmit. Csak mi az. 503 00:44:49,710 --> 00:44:59,220 A különbség közte és a HTML az, hogy az XML nagyon hasonló megjelenésű 504 00:44:59,220 --> 00:45:09,080 a HTML, kivéve a HTML már csak, hogy egy előre meghatározott címkéket. 505 00:45:09,080 --> 00:45:15,380 De XML - XML ​​olyan, mint egy általános formája, ahol tudod, hogy egy XML dokumentum 506 00:45:15,380 --> 00:45:17,580 bármilyen célból akarsz. 507 00:45:17,580 --> 00:45:25,950 Így például, ha akartam tudnék építeni egy XML tanfolyamok - 508 00:45:25,950 --> 00:45:28,860 és én tényleg hiszem, CS50 van egy API-e. 509 00:45:28,860 --> 00:45:31,590 Az XML dokumentum nézhet ki - 510 00:45:31,590 --> 00:45:39,330 tanfolyamok és persze kell egy kis vége tanfolyamok. 511 00:45:39,330 --> 00:45:48,920 Tudtam volna egy tanfolyamot, és lehetett volna név egyenlő CS50. 512 00:45:48,920 --> 00:45:58,080 Aztán a végén persze, és nem tudtam betenni az itt tanulók, 513 00:45:58,080 --> 00:46:07,010 , majd a belső hallgatók Van egy lista egy diák, akinek neve mindegy. 514 00:46:07,010 --> 00:46:10,180 Én a végén, hogy a tanuló és így tovább. 515 00:46:10,180 --> 00:46:16,070 Én csak úgy történnek, hogy épített egy tetszőleges XML dokumentum, de ez érvényes XML. 516 00:46:16,070 --> 00:46:23,700 XML - is ez az a fajta struktúra és a szép dolog - az oka annak, hogy még azt is hívják XML 517 00:46:23,700 --> 00:46:26,820 az, hogy ez a fajta dolog, nagyon könnyű értelmezni. 518 00:46:26,820 --> 00:46:32,580 Nagyon egyszerű, hogy ezt a dokumentumot, és egy sor belőle. 519 00:46:32,580 --> 00:46:39,370 És így XHTML egy kísérlet arra, hogy a HTML, hogy érvényes XML. 520 00:46:39,370 --> 00:46:42,580 Már ez úgy néz ki, nagyon hasonlít a HTML. 521 00:46:42,580 --> 00:46:52,160 Néhány különbség HTML meg tudja-e csinálni a dolgokat, mint input talán típusa megegyezik szöveg 522 00:46:52,160 --> 00:46:55,550 ami az alapértelmezett, így nem kell azt mondani, hogy. 523 00:46:55,550 --> 00:47:00,010 Tiltott. 524 00:47:00,010 --> 00:47:05,160 >> Van 2 dolog itt, hogy ezt az érvénytelen XHTML. 525 00:47:05,160 --> 00:47:08,750 Az első dolog az, hogy az összes XML-címkéket kell egy záró tag. 526 00:47:08,750 --> 00:47:13,040 Tehát abban az esetben, input kell tennem a - melyik irányba perjel ez? 527 00:47:13,040 --> 00:47:15,060 Ez az irány? Úgy néz ki rosszul. 528 00:47:15,060 --> 00:47:19,380 Másik irány. 529 00:47:19,380 --> 00:47:21,960 Self-záró tag. 530 00:47:21,960 --> 00:47:29,560 A másik dolog az, hogy az XML van szükség ilyen típusú, mint a kulcs-érték párokat. 531 00:47:29,560 --> 00:47:32,130 Szüksége van egy érték társul hozzá. 532 00:47:32,130 --> 00:47:35,050 Így, annak ellenére, hogy a fogyatékkal élő és önmagában kifejezi azt, amit akarok - 533 00:47:35,050 --> 00:47:37,110 ezt a bemenetet kell tiltani - 534 00:47:37,110 --> 00:47:39,110 ez érvénytelen XHTML. 535 00:47:39,110 --> 00:47:47,110 Amit valójában kell írni van tiltva egyenlő tiltva. 536 00:47:47,110 --> 00:47:49,620 Most XHTML. 537 00:47:49,620 --> 00:47:54,850 És ezek csak ezek az apró eltérések, amelyekkel a HTML XML-alapú ilyesmi. 538 00:47:54,850 --> 00:48:04,880 >> [Student] XML szól, mint húzza keresztül a saját X összességében, mint hogy miért van az, (nem hallható) 539 00:48:04,880 --> 00:48:19,450 [Rob] A dolog, mint egy CSV - a CSV éppen most értékek elválasztott - 540 00:48:19,450 --> 00:48:23,550 gondoljunk csak a táblázatot. A CSV alapvetően egy táblázatot. 541 00:48:23,550 --> 00:48:26,720 Van talán oszlopok és van egy csomó sorok 542 00:48:26,720 --> 00:48:29,600 társult adatokat azokat az oszlopokat, de ennyi. 543 00:48:29,600 --> 00:48:38,310 XML sokkal sokoldalú, hogy tudod - van egy tetszőleges adathierarchiát. 544 00:48:38,310 --> 00:48:43,200 Tudtam volna több tanfolyamot, hogy több diák belül 545 00:48:43,200 --> 00:48:45,460 ahol nehéz lenne azt gondolni, egy táblázatot, amely - 546 00:48:45,460 --> 00:48:51,010 csak, hogy egy táblázatkezelő - CSV különösen, mint csupán egy táblázatot - 547 00:48:51,010 --> 00:48:58,760 úgy, hogy egyetlen, amelynek minden táblázatkezelő CS50, 51., és 61., valamint az említett összes 548 00:48:58,760 --> 00:49:03,230 a diákok ezekhez időkben, talán találkozó idő, és minden ilyesmit. 549 00:49:03,230 --> 00:49:09,140 A másik dolog az, hogy a tag nevét, hogy egy szép név, hogy az összes elem 550 00:49:09,140 --> 00:49:13,140 így olvasás a CSV fájlt is nehéz, hogy megpróbálja feldolgozni, amit valójában lát. 551 00:49:13,140 --> 00:49:20,130 XML sokkal több ember által olvasható úgy, hogy ezért, mint a - jön néhány ember, aki nem 552 00:49:20,130 --> 00:49:26,380 igazán tudom, mi a CSV fájl, vagy mint a nem programozó, vagy valami - 553 00:49:26,380 --> 00:49:30,640 akkor nekik, mint a sablon XML fájlt, és követni tudják a vonalak és - 554 00:49:30,640 --> 00:49:33,590 Ó, kéne be a nevét. 555 00:49:33,590 --> 00:49:37,440 Ez egy sokkal használhatóbb formátumban. 556 00:49:37,440 --> 00:49:42,440 CSV rengeteg felhasználási hanem XML különböző célokra. 557 00:49:46,050 --> 00:49:49,680 >> További kérdések? 558 00:49:49,680 --> 00:49:51,900 További kérdések? 559 00:49:56,410 --> 00:50:00,520 [Student] Az előző kvíz - függőleges méretezést vagy horizontális méretezést. 560 00:50:00,520 --> 00:50:04,660 [Rob] akkor nem kell tudni, hogy. Nem hiszem, hogy még azt is megbeszéltük, hogy. 561 00:50:04,660 --> 00:50:07,340 Azt hiszem, hogy ez csak egy egyszeri comment. 562 00:50:07,340 --> 00:50:12,660 Oh. Vízszintes szemben a függőleges méretezést nem az, amit meg kell tudni. 563 00:50:12,660 --> 00:50:18,570 Azt hiszem, a különbség, mint - hát igen, a válasz gombot fogja mondani a különbséget. 564 00:50:18,570 --> 00:50:26,030 Függőleges skálázás csak mint ó, a számítógép csinál rosszul. Hozok egy jobbat. 565 00:50:26,030 --> 00:50:29,150 Mivel vízszintes méretezés ó, a számítógép csinál rosszul - 566 00:50:29,150 --> 00:50:33,360 hadd kap 20 őket, hogy minden munkát ugyanazt a feladatot. 567 00:50:40,300 --> 00:50:45,520 >> [Student] Mehetünk át a láncolt lista módja annak, hogy a sorban állás. >> [Rob] Persze. 568 00:50:45,520 --> 00:50:50,000 Ez könnyebb, mint a tömb utat. 569 00:50:50,000 --> 00:50:53,140 A láncolt lista módja annak, hogy a sorban állás. 570 00:50:53,140 --> 00:50:58,350 Először is, mit jelent a struktúra egy láncolt lista kinézni? 571 00:50:58,350 --> 00:51:17,060 [Student] csináljuk a - >> [Rob] Csináljuk a - igen. 572 00:51:17,060 --> 00:51:30,000 Int val, majd struct node * mellett; 573 00:51:30,000 --> 00:51:34,560 azért, hogy ezt fogjuk használni a példában. 574 00:51:34,560 --> 00:51:37,660 Nézzük tényleg írja fel ezt a dolgot. 575 00:51:40,030 --> 00:51:49,600 Csináljuk linked_list. 576 00:51:51,750 --> 00:51:53,750 A struktúra - 577 00:52:05,360 --> 00:52:13,060 Oké. Most néztem a sorban van a - 578 00:52:13,060 --> 00:52:16,090 nézzük csak, hogy egy globális sorban. 579 00:52:16,090 --> 00:52:23,130 Ez lesz node * sorba, és van egy dequeue funkcióval. 580 00:52:23,130 --> 00:52:28,330 Azt hiszem, ezek a dolgok is felborulhat igaz vagy hamis - csináljuk. 581 00:52:28,330 --> 00:52:38,690 Bool dequeue - és mi dequeueing - oh. Hmm. 582 00:52:38,690 --> 00:52:45,200 Int dequeue - mit csináljunk ilyet? 583 00:52:45,200 --> 00:52:54,340 Int dequeue és mi bool Enqueue, és meg kell sorba állítását valamilyen módon igaz. 584 00:52:54,340 --> 00:53:01,360 Csináljuk Enqueue először. 585 00:53:01,360 --> 00:53:06,520 Megvan a sorban. Azt szeretné szúrni valamit a sorba. 586 00:53:06,520 --> 00:53:12,720 Mi a legjobb módja, hogy? 587 00:53:12,720 --> 00:53:20,270 Erre a sorban éppen néz ki, van néhány globális mutató kezdeni. 588 00:53:20,270 --> 00:53:24,910 Ott a sorban. 589 00:53:24,910 --> 00:53:30,350 Feltételezve, hogy mi dequeue azáltal, hogy az első elem, 590 00:53:30,350 --> 00:53:36,570 hová megyünk, hogy szeretné szúrni a csomópont, hogy sorban a munka, mint kellene? 591 00:53:36,570 --> 00:53:43,440 [Student] A legvégén. >> [Rob] Igen. Sorok állítólag az első be, első ki. 592 00:53:43,440 --> 00:53:48,030 Ami azt jelenti, hogy az új elemet kell beilleszteni ide. Oké. 593 00:53:48,030 --> 00:53:53,220 >> Visszatérve a kódot, 594 00:53:53,220 --> 00:53:59,760 ami azt jelenti, hogy meg akarnak hurkot a sorban. 595 00:53:59,760 --> 00:54:10,210 Csináljuk node * áram = sorba, míg a jelenlegi nem egyenlő NULL. 596 00:54:10,210 --> 00:54:16,960 Én megtenném - Rendben, csináljuk külön-külön. 597 00:54:16,960 --> 00:54:20,460 Először is, a jelenlegi = sorban. 598 00:54:20,460 --> 00:54:24,660 Mit tegyünk, ha az áram indul a NULL? 599 00:54:24,660 --> 00:54:28,410 Majd ezt 2 módon. Az első ilyen módon. 600 00:54:28,410 --> 00:54:31,450 Mit tegyünk, ha a jelenlegi NULL? 601 00:54:31,450 --> 00:54:34,850 Ez felel meg, ha sor NULL? 602 00:54:38,550 --> 00:54:43,960 [Student] Meg fog visszatérni hamis. >> [Rob] Ha visszatérünk hamis? 603 00:54:43,960 --> 00:54:47,120 Mi a baj a behelyezése valamit egy üres listát? 604 00:54:47,120 --> 00:54:49,080 [Student] semmi baj ezzel. Bocsánat. 605 00:54:49,080 --> 00:54:55,980 [Rob] Igen. Tehát itt az egyetlen különbség a globális sorba küldik az új csomópontot. 606 00:54:57,840 --> 00:55:02,880 És akkor meg kell tennem az én ellenőrzése, ha sor NULL. 607 00:55:02,880 --> 00:55:05,960 Vissza hamis. 608 00:55:05,960 --> 00:55:20,910 Aztán sorba val egyenlő i, sorban következő értéke NULL, vissza igaz. 609 00:55:20,910 --> 00:55:25,890 Oké. Fogok ugrani a fegyvert itt. 610 00:55:25,890 --> 00:55:29,570 Emlékszel, mit csináltunk, hogy az utolsó időben 611 00:55:29,570 --> 00:55:35,660 ahol azt mondta, hogy sokkal könnyebb dolgozni node ** ez a fajta dolog. 612 00:55:35,660 --> 00:55:43,880 Tehát most aktuális lesz és sorban, és jön le, hogy itt - 613 00:55:43,880 --> 00:55:53,010 míg a jelenlegi -, míg * a jelenlegi nem egyenlő NULL - 614 00:55:53,010 --> 00:55:58,230 Engedjék meg, hogy ezt a jelenlegi - we'll beszélni ezt a második. 615 00:55:58,230 --> 00:56:00,860 Jelenlegi következő. Oké. 616 00:56:00,860 --> 00:56:12,910 Néztem ilyen módon, ez az iterációt minden az én mutatók, amíg el nem érem a null pointer. 617 00:56:12,910 --> 00:56:17,710 A null pointer lesz a mutató akarom cserélni az új csomópontot. 618 00:56:17,710 --> 00:56:21,910 Nézzük iPad verzió - 619 00:56:21,910 --> 00:56:27,800 ha az eredeti mutató, és a csatolt lista üres, akkor az aktuális fog mutatni itt. 620 00:56:27,800 --> 00:56:29,630 Ez fog mutatni null, 621 00:56:29,630 --> 00:56:34,440 így ez a mutató én a végén halad, hogy pont egy másik új csomópontot. 622 00:56:34,440 --> 00:56:38,150 Mivel, ha a példa ebben az esetben itt 623 00:56:38,150 --> 00:56:42,720 akkori fog mozogni innen - elcsesztem kicsit. 624 00:56:42,720 --> 00:56:50,700 Ahol a jelenlegi állítólag a címre a jelenlegi mellett. 625 00:56:50,700 --> 00:57:00,200 Ez az, amit akarok? Jelenlegi így * jelenlegi ad nekem egy csomópont. 626 00:57:00,200 --> 00:57:04,440 Következő bejárja a következőre. 627 00:57:04,440 --> 00:57:10,700 Én jelenleg mutatva itt. 628 00:57:10,700 --> 00:57:13,720 Csináljuk piros - úgyhogy jelenleg mutatva itt. 629 00:57:13,720 --> 00:57:19,710 Ezután * áram fog hivatkozni ezen a csomóponton. 630 00:57:19,710 --> 00:57:25,080 És a * jelenlegi következő hivatkozás a csomópont, de ez nem az, amit akarok. 631 00:57:25,080 --> 00:57:27,700 Azt akarom, hogy ez a mutató, hogy a csomópont. 632 00:57:27,700 --> 00:57:40,530 Tehát, hogy a mutató ezt csomópont-jel (* áram) mellett. 633 00:57:47,660 --> 00:57:54,360 >> Ezen a ponton az időben én már hivatalosan is elérte a csomópontot, hogy akarom cserélni. 634 00:57:54,360 --> 00:58:13,770 Nézzük cserélni az összes ilyen sorok áram - és most kész. 635 00:58:13,770 --> 00:58:21,760 Lehet, hogy elgépelés, de az ötlet az, hogy a betét a jelen módján 636 00:58:21,760 --> 00:58:28,130 könnyebb dolgozni a mutatókat, hogy meg akarjuk változtatni 637 00:58:28,130 --> 00:58:32,780 ahelyett, akiknek nyomon követni - oké, az én kezdő NULL? 638 00:58:32,780 --> 00:58:36,430 Ó, ez? Akkor létre kell hozni a start csomópontot, hogy valami különleges 639 00:58:36,430 --> 00:58:40,310 mást akarja, hogy halad-hatunk, amíg a következő dolog, amit pont NULL, 640 00:58:40,310 --> 00:58:46,740 aztán majd helyett, hogy - mi a következő dolog, - az én malloc csomóponthoz. 641 00:58:46,740 --> 00:58:50,740 Ahelyett, hogy kelljen külön azokat az eseteket, itt csak azokkal az esetben, 642 00:58:50,740 --> 00:58:54,990 mi az a mutató, amely NULL, hogy én már nem akarok lenni NULL, 643 00:58:54,990 --> 00:59:01,820 és ez megkönnyíti az életet, csak ezeket mind * aktuális most, mert - 644 00:59:01,820 --> 00:59:05,460 [Student] Még mindig akkora, mint egy csomópont? 645 00:59:05,460 --> 00:59:10,480 [Rob] Igen. Még mindig mallocing egy csomópont. 646 00:59:10,480 --> 00:59:12,980 [Student] Vajon lesz akkora, mint egy csomópont *? 647 00:59:12,980 --> 00:59:20,990 [Rob] Visszatérve itt, gondolom, a helyzet, ha ez a mi láncolt lista. 648 00:59:28,330 --> 00:59:33,190 Ez a fickó mutat ki NULL. 649 00:59:33,190 --> 00:59:36,950 Ezután miért loop, a jelenlegi pontok itt 650 00:59:36,950 --> 00:59:41,510 mert ez az a mutató, ami NULL. 651 00:59:41,510 --> 00:59:50,380 Most azt akarom változtatni ez a mutató, hogy pont egy új csomópontot. 652 00:59:50,380 --> 00:59:58,390 Először malloc, hogy az új csomópont - így malloc méretű csomópont. 653 00:59:58,390 --> 01:00:11,070 És, hogy visszaadja a csomópont *, és most változik ez a mutató épít a * jelenlegi egyenlők 654 01:00:11,070 --> 01:00:15,780 Az új csomópont, amit kiosztott. 655 01:00:15,780 --> 01:00:26,490 Tehát, ha a jelenlegi egy csomópont **, majd * az aktuális lesz egy csomópont * 656 01:00:26,490 --> 01:00:32,540 és ha én mallocing valamit a mérete csomópont, akkor ez visszatér a mutatót egy csomóponthoz 657 01:00:32,540 --> 01:00:39,630 így ez a csomópont * - így mindkét fél helyesen azonos típusú. 658 01:00:39,630 --> 01:00:46,610 És ha az, amit én csak elkülönített NULL volt, return false; 659 01:00:46,610 --> 01:00:54,750 más elvégezte, hogy mit akarok, hogy legyen - csak ezeket kell zárójel 660 01:00:54,750 --> 01:00:57,730 mert ez nem így a dolgok rendje működik. 661 01:00:57,730 --> 01:00:59,690 Anélkül, zárójelben, amit úgy értelmezik, mint 662 01:00:59,690 --> 01:01:03,010 jelenlegi nyíl-val hivatkozás feloldási ezt. 663 01:01:03,010 --> 01:01:07,010 Ehelyett azt akarom, hogy dereference jelenlegi, amely elvezet egy csomópont. 664 01:01:07,010 --> 01:01:10,620 Majd akarok az értéket társított csomópont. 665 01:01:10,620 --> 01:01:17,670 >> [Student] Azt hittem, nyilak lehetővé tette, hogy megkerüljék ezt, és egyenesen az értéket. 666 01:01:17,670 --> 01:01:22,640 [Rob] Ők. Ez, ha van - mondjuk sorban egy példa. 667 01:01:22,640 --> 01:01:28,400 Én szabad csinálni queue nyíl-val egyenlő i, mert sorban egy csomópont *. 668 01:01:28,400 --> 01:01:39,160 Ha volt néhány szép szintaxisa, mint a jelenlegi, már nyíl-val, vagy valami 669 01:01:39,160 --> 01:01:42,540 ami nem 2 dereferences, akkor ez jól működik. 670 01:01:42,540 --> 01:01:44,790 [Student] Tehát a nyíl csak az 1. hivatkozás feloldási. >> [Rob] Igen. 671 01:01:44,790 --> 01:01:53,590 Alternatívaként tudnék írni ezt (** current.val). 672 01:01:53,590 --> 01:02:02,490 Mint ahogy én is írni sorban, mint (* queue). Val. 673 01:02:04,430 --> 01:02:09,250 Úgyhogy be. Nos, ez a sor azt hiszem. 674 01:02:09,250 --> 01:02:12,030 Dequeue lesz lényegesen rövidebb. 675 01:02:12,030 --> 01:02:18,280 Tegyük érvénytelen itt a tisztaság. 676 01:02:18,280 --> 01:02:22,820 Tehát, dequeue. Milyen elem vagyok dequeueing? 677 01:02:22,820 --> 01:02:24,820 [Student] az első? >> [Rob] Igen. 678 01:02:24,820 --> 01:02:32,880 Ha az első egy NULL - vissza - Nem tudom, mit akarunk visszatérni - INT_MAX; 679 01:02:32,880 --> 01:02:37,580 és akkor meg kell tennie egy csekket, hogy ha INT_MAX visszatért. 680 01:02:37,580 --> 01:02:44,090 Ez az a fajta dolog, hogy kap inc még mást is szeretnénk - 681 01:02:44,090 --> 01:02:54,610 akkor már csak vissza queue val? Ez az, amit akarok? 682 01:02:54,610 --> 01:02:58,010 Dequeue hallgatólagosan szintén eltávolítja az elemet a sorból, 683 01:02:58,010 --> 01:03:10,840 úgyhogy először ezt mondjátok - térjünk a tmp, hogy pont az első csomópont a mi sorban. 684 01:03:10,840 --> 01:03:15,510 Most azt szeretnénk, hogy előre a sorban, hogy pont, hogy a következő dolog a sorban. 685 01:03:15,510 --> 01:03:21,450 Most már tmp maradt. Tmp val az a dolog, amit szeretnénk, hogy visszatérjen. 686 01:03:21,450 --> 01:03:24,180 Tehát, val = tmp-> val; 687 01:03:24,180 --> 01:03:31,190 de mielőtt vissza kellene szabad tmp, és visszatér val. 688 01:03:31,190 --> 01:03:36,350 Az, hogy a művelet itt is fontos, hogy meg kell, hogy megragad a tmp 689 01:03:36,350 --> 01:03:40,520 mielőtt haladunk sorban a következő elem. 690 01:03:40,520 --> 01:03:44,860 Meg kell, hogy az értéket, mielőtt szabad tmp, 691 01:03:44,860 --> 01:03:48,710 és akkor vissza a val. 692 01:03:48,710 --> 01:03:50,680 >> [Student] Ha mi meg a sort a sorban a következő? 693 01:03:50,680 --> 01:03:57,800 [Rob] Igen. Ezt megteremtése volt egy rossz loop / ez nem működik szabaddá tétele után egyébként. 694 01:03:57,800 --> 01:03:59,900 Queue = queue-> kov. 695 01:03:59,900 --> 01:04:03,230 Azt akarjuk, hogy előre a sorban a következő elem nem előre, a következő elem 696 01:04:03,230 --> 01:04:08,170 hogy mi az elem jelenleg. 697 01:04:08,170 --> 01:04:17,660 Stacks lenne jelentősen - még könnyebb, mint abban dequeue pontosan ugyanaz 698 01:04:17,660 --> 01:04:20,190 mert mi húzza ki az első a verem. 699 01:04:20,190 --> 01:04:24,030 Vége sor nagyon hasonló, ahol csak akar lefoglalni egy csomópont 700 01:04:24,030 --> 01:04:27,670 és helyezze be az első a stack, így nem is kell, hogy hurkot semmit. 701 01:04:27,670 --> 01:04:31,420 Csak be közvetlenül a fronton. 702 01:04:42,500 --> 01:04:44,640 Mindenki jól áll ez? 703 01:04:44,640 --> 01:04:49,760 >> Oké. Több kérdés? 704 01:04:49,760 --> 01:04:56,570 [Diák] Milyen nagy dolgokat érdemes szem előtt tartani, a legutóbbi előadás? 705 01:04:56,570 --> 01:04:58,730 [Rob] A legutóbbi előadás. 706 01:04:58,730 --> 01:05:01,620 Önnek nem kell tudni minden kódot. 707 01:05:01,620 --> 01:05:07,590 Tudnia kell az átfogó elképzelések. 708 01:05:07,590 --> 01:05:11,650 Nate fele nem volt semmilyen kódot, és így ezek a diák online. 709 01:05:11,650 --> 01:05:15,220 Olyanok, mint nézd meg őket, és nekik van a nagy ötletek. 710 01:05:15,220 --> 01:05:28,630 A fél - ismerve az általános elképzelés első nem bízhat semmit. 711 01:05:28,630 --> 01:05:38,070 Az a tény, hogy mint talán a folyamat a fordító lehet rossz, 712 01:05:38,070 --> 01:05:40,870 de ez nem is számít, hogy a forráskód jól néz ki. 713 01:05:40,870 --> 01:05:46,390 Mivel a fordító lehet kifejezetten módosításával megváltoztatható a forráskód 714 01:05:46,390 --> 01:05:50,860  a összeállításának folyamata. 715 01:05:50,860 --> 01:05:58,140 Ugyanakkor, mint - Azt hiszem, ezek olyanok, mint a nagy ötletek is. 716 01:05:59,560 --> 01:06:09,030 >> [Student] Azt mondod, hogy nem kell tudni semmit kapcsolódó Firesheep - 717 01:06:09,030 --> 01:06:13,110 vagy nem kell tudni, hogy? 718 01:06:13,110 --> 01:06:18,360 [Rob] A Nate félig a dolgok, bármi, ami Nate érintette - 719 01:06:18,360 --> 01:06:22,760 mint FireSheep, Wireshark - Nem is hiszem, ő Firesheep részletesen. 720 01:06:22,760 --> 01:06:28,620 Azt is tett valamit, hogy a - volt Firesheep - a múlt héten? 721 01:06:28,620 --> 01:06:31,110 Te érinteni, hogy? 722 01:06:31,110 --> 01:06:34,060 [Student] Igen, azt hiszem, lehet, hogy - >> [Rob] Igen. 723 01:06:34,060 --> 01:06:40,880 Nem fogunk adni neked Firesheep kimenetet, és azt mondják értelmezik ezt. 724 01:06:40,880 --> 01:06:44,960 Ez csak lesz - ez lenne a kérdés, mint a mi Firesheep? 725 01:06:44,960 --> 01:06:47,290 Milyen betegségek esetén alkalmazható? 726 01:06:47,290 --> 01:06:52,120 [Student] Azt hiszem, ez csak akkor működik, a 4-es verzió a Firefox, vagy valami. 727 01:06:52,120 --> 01:06:55,320 [Rob] Lehet, hogy eltört már. 728 01:07:11,430 --> 01:07:14,070 Fogalmam sincs. 729 01:07:14,070 --> 01:07:18,330 Nem úgy tűnik, hogy le van tiltva kézzel, 730 01:07:18,330 --> 01:07:21,210 de lehet, hogy nem működik a legújabb Firefox. 731 01:07:21,210 --> 01:07:24,790 [Student] Én tényleg megpróbáltam beiktatás, mert azt mondta, hogy összeegyeztethető lenne. 732 01:07:24,790 --> 01:07:28,880 [Rob] Szóval, azt hiszem, hogy nem működik a legújabb Firefox. 733 01:07:28,880 --> 01:07:32,360 De az ötlet még mindig áll, hogy mit kellett volna mutatni. 734 01:07:32,360 --> 01:07:39,430 Ez abszurd, hogy a világ nagy része nem él a HTTPS abban az időben. 735 01:07:39,430 --> 01:07:43,820 Még az elmúlt 2 évben, vagy bármi, ez még mindig - van drámai javulás a 736 01:07:43,820 --> 01:07:47,210 számos honlapok, amelyek használni HTTPS. 737 01:07:49,920 --> 01:07:52,580 >> [Student] Nem kell menni HTTP-n keresztül? 738 01:07:52,580 --> 01:07:58,050 [Rob] jegyzőkönyv is? >> [Student] Néhány dolog, amit tudnia kell. 739 01:07:58,050 --> 01:08:06,220 [Rob] Rendben. Alapvető dolgok minden látható a Hálózat fülre. 740 01:08:06,220 --> 01:08:12,160 Amikor kér egy oldalt - jön vissza a csúcsra a fő dolog. 741 01:08:12,160 --> 01:08:16,090 Itt látható a kérést, amit csinál. 742 01:08:16,090 --> 01:08:19,220 Chrome történik formázni az egészet szépen nekünk 743 01:08:19,220 --> 01:08:21,970 amennyiben a kérés URL volt ez, a kérelmet módszer GET, 744 01:08:21,970 --> 01:08:24,800 és a status code 200 volt rendben. 745 01:08:24,800 --> 01:08:28,279 Ha hit view source, látom, közvetlenebb, hogy - 746 01:08:28,279 --> 01:08:35,680 és ez - tudtuk mutatni, hogy ezekkel, de nem túl nehéz értelmezni közöttük. 747 01:08:35,680 --> 01:08:41,729 Itt a közvetlen kérésére csináltam, így ez azt jelenti, hogy én elmentem 748 01:08:41,729 --> 01:08:48,160 apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1. 749 01:08:48,160 --> 01:08:57,569 És a jegyzőkönyv régen volt HTTP/1.1, amely gyakorlatilag - ez mindig lesz, hogy. 750 01:08:57,569 --> 01:09:01,490 Több mint mi itt is kap, így ez is lehet POST. 751 01:09:01,490 --> 01:09:04,660 És akkor jön le - egészen a válasz fejlécet - ha látjuk, hogy a forrás, 752 01:09:04,660 --> 01:09:07,740 ez az, ahol látjuk a 200 OK. 753 01:09:07,740 --> 01:09:11,069 Ismerje a különböző lehetséges állapot kódokat ezeket. 754 01:09:11,069 --> 01:09:15,520 Azt hiszem, a felülvizsgálat teszünk mondjuk egy pár ilyen, 755 01:09:15,520 --> 01:09:20,640 így 403, 404 - a kedves közös is. 756 01:09:20,640 --> 01:09:26,810 Ez a fő gondolata is. 757 01:09:29,990 --> 01:09:35,120 A különbség csupán az a HTTP és HTTPS ez a titkosítást. 758 01:09:35,120 --> 01:09:42,319 >> [Student] Kész vagy? >> [Rob] Azt hiszem, igen. Hát, igen. 759 01:09:42,319 --> 01:09:46,470 [Student] fogsz beszélni nagy általánosságban arról, hogyan kell a titkosítást? 760 01:09:46,470 --> 01:09:49,920 Mivel beszélgettünk például amikor tömörítő Huffman kép, 761 01:09:49,920 --> 01:09:54,890 tudod, hogyan bontja ki őket, mert ha valóban elküldte a hash tábla a fájl 762 01:09:54,890 --> 01:09:56,950 így hogyan titkosítás működik? 763 01:09:56,950 --> 01:10:00,830 Honnan tudod, hogy hogyan kell titkosítani adatokat, ha nem valóban elküldte az ügyfél 764 01:10:00,830 --> 01:10:05,740 A legfontosabb, hogy a - és akkor valóban megragad, hogy kulcs -? 765 01:10:05,740 --> 01:10:07,740 Hogyan működik az általános folyamat működik? 766 01:10:07,740 --> 01:10:09,870 [Rob] Az általános folyamat a titkosítás - 767 01:10:09,870 --> 01:10:15,590 ez egy hihetetlenül részletes kérdésre fogok válaszolni. 768 01:10:15,590 --> 01:10:21,490 Van egy rövid - nos, Tommy és én rövid. 769 01:10:21,490 --> 01:10:26,060 Sajnos ez olyan, mint 26 perc alatt, így ez nem egy rövid. Ez egy hosszú. 770 01:10:26,060 --> 01:10:31,530 De a rövid volt, RSA, ami csak egy példa ezek közül, 771 01:10:31,530 --> 01:10:40,420 RSA és ez része a teljes HTTPS protokollt. 772 01:10:40,420 --> 01:10:46,060 Az ötlet - RSA egy példa a nyilvános kulcsú kriptográfia, 773 01:10:46,060 --> 01:10:49,690 ami azt jelenti, hogy 2 külön gombokat. 774 01:10:49,690 --> 01:10:51,690 Ön használja 1 gombot, hogy ténylegesen titkosítja a dolgokat, 775 01:10:51,690 --> 01:10:54,410 és használ egy másik kulcs dekódolni a dolgokat. 776 01:10:54,410 --> 01:10:58,360 Ez a kulcs, hogy használja titkosítani a dolgokat az egyik, hogy a nyilvánosság számára. 777 01:10:58,360 --> 01:11:03,500 A weboldal elküldjük Önnek ezt a titkosítási kulcsot. 778 01:11:03,500 --> 01:11:08,280 Ők küld, hogy titkosító kulcsot, és ha azt szeretné küldeni valamit vissza őket 779 01:11:08,280 --> 01:11:13,550 használja, hogy titkosító kulccsal titkosítja az összes adatot, és küldje el nekik. 780 01:11:13,550 --> 01:11:16,110 Tehát, ők az egyetlenek, akik a privát kulcs. 781 01:11:16,110 --> 01:11:22,630 Ha ez a privát kulcs vált ismertté, akkor bárki képes lenne visszafejteni az adatokat. 782 01:11:22,630 --> 01:11:27,980 De, hogy a magán kulcs - ami matematikailag kapcsolódik a nyilvános kulcsot, de nem lehet 783 01:11:27,980 --> 01:11:33,640 kitalálni egyet a másik -, hogy a privát kulcs használható dekódolni az adatokat. 784 01:11:33,640 --> 01:11:36,630 Mivel ők az egyetlenek, akik a privát kulcs, 785 01:11:36,630 --> 01:11:38,920 ők az egyetlenek, akik olvasni az adatokat. 786 01:11:38,920 --> 01:11:44,170 Így annak ellenére, hogy a nyilvános kulcs nyilvános, 787 01:11:44,170 --> 01:11:47,660 Én ugyanazt -, amikor elmegyek Google.com vagy bármi, 788 01:11:47,660 --> 01:11:50,010 lehet, hogy több, nem tudom -, de ha elmegyek a Google.com, 789 01:11:50,010 --> 01:11:54,770 megy a Google.com, ő megy a Google.com-- 790 01:11:54,770 --> 01:11:59,250 mindannyian ugyanazt a nyilvános kulcsa segítségével titkosítja a saját adatok azt szeretnénk, ha. 791 01:11:59,250 --> 01:12:04,010 De egyikünk sem lesz képes kitalálni, hogy - nem lesz képes dekódolni 792 01:12:04,010 --> 01:12:09,940 hogy az információ, mert a nyilvános kulcs nem képes visszafejteni. 793 01:12:09,940 --> 01:12:13,050 Ez csak titkosítani. 794 01:12:13,050 --> 01:12:23,250 És ez jó / részletes matek -, mint egy csomó modul szereplők és exponenciálisok, meg ilyesmi, 795 01:12:23,250 --> 01:12:28,890 hogy csak működik, hogy a titkos kulcsot az egyetlen dolog, ami 796 01:12:28,890 --> 01:12:33,620 visszafejteni a nyilvános kulcsú titkosítási cucc. 797 01:12:33,620 --> 01:12:38,020 Igen. Lásd az RSA rövid részleteket. 798 01:12:38,020 --> 01:12:41,880 [Student] Ez a honlapon? 799 01:12:41,880 --> 01:12:46,210 [Rob] Igen, azt hiszem, ezen a ponton. Vagy legalábbis a YouTube-linket, hogy volt kifüggesztett. 800 01:12:51,330 --> 01:12:57,190 Lássuk csak. Shorts. Azt hiszem, ez lett volna 2. hét kapcsolatos. Igen. RSA. 801 01:12:57,190 --> 01:13:03,780 És ez - Nem megyünk játszani ezt a - 24. percében. 802 01:13:03,780 --> 01:13:05,780 Ez egy hosszú. 803 01:13:07,740 --> 01:13:09,740 >> További kérdések? 804 01:13:09,740 --> 01:13:14,770 [Student] Tudnál beszélni röviden a bitmaszkok? >> [Rob] Persze. 805 01:13:14,770 --> 01:13:23,090 Röviden, az ötlet csak, hogy, mint a - >> [Student] Mi az, Rob? 806 01:13:23,090 --> 01:13:32,760 [Rob] bitmaszkok. Az ötlet - mondjuk, van néhány - we're használ valamilyen egész szám - 807 01:13:32,760 --> 01:13:41,490 int x - így kezdjük le a 0-ra. 808 01:13:41,490 --> 01:13:47,900 Nos, ez a 32 bit egész szám, így egyetlen 1 ilyen bitet lehet használni, hogy képviselje 809 01:13:47,900 --> 01:13:50,600 egy adott FLAC. 810 01:13:50,600 --> 01:13:56,210 Ez az a hely, ahol, ha megnézi az operációs rendszer kódokat, akkor használja ezt az egész hely 811 01:13:56,210 --> 01:14:03,900 ahol lehet, fel tetején valahol ők hash meghatározzák - 812 01:14:03,900 --> 01:14:09,020 Lássuk néhány példát. 813 01:14:09,020 --> 01:14:22,720 Man-2-nyitott - a nyílt rendszer hívás akkor láthatjuk, hogy egyik érv az int zászlók - 814 01:14:22,720 --> 01:14:29,120 mit számít az, hogy az érv néhány ezek a zászlók. 815 01:14:29,120 --> 01:14:33,030 Látjuk O_append, O_ASYNC, O_CLOEXEC, 816 01:14:33,030 --> 01:14:37,130 O_CREAT, és így tovább. 817 01:14:37,130 --> 01:14:45,260 O_DIRECT. Ezek a fajta zászlók hash meghatározott valahol. 818 01:14:45,260 --> 01:14:47,260 És mindegyik pontosan 1 bit. 819 01:14:47,260 --> 01:14:57,600 Tehát, O_CREAT lehet hash-meghatározása 1., bal-shift, 4. cikk (1 << 4). 820 01:14:57,600 --> 01:15:02,280 Ez lesz az - ha használom O_CREAT ez csak lesz - 821 01:15:02,280 --> 01:15:09,350 bináris 1, 0, 0, 0 és 30-szerű nullák előtte. 822 01:15:09,350 --> 01:15:13,930 Ez csak egy kicsit egy sor, és hogy a kis képviseli ezt a zászlót. 823 01:15:13,930 --> 01:15:18,160 És így más zászló lesz balra tolódott 4. 824 01:15:18,160 --> 01:15:30,390 Én képes képviselni akár 32 zászlók egyetlen egész csinál - 825 01:15:30,390 --> 01:15:40,850 x = O_CREAT kicsit bölcs vagy O_DIRECT. 826 01:15:40,850 --> 01:15:43,640 Te csak szedés bármely 2 olyan zászlók. 827 01:15:43,640 --> 01:15:48,600 Most x megy, hogy 2 bit be, amelyek megfelelnek a 2 bit 828 01:15:48,600 --> 01:15:53,490 A O_CREAT és O_DIRECT. 829 01:15:53,490 --> 01:15:58,740 Az út, amely azután -, így aztán át x a szabadba funkció 830 01:15:58,740 --> 01:16:02,950 és nyílt igényeket, hogy mi zászlókat ténylegesen beállítva. 831 01:16:02,950 --> 01:16:06,480 Nos, ez az, ahol ez fog csinálni a dolgokat, mint 832 01:16:06,480 --> 01:16:19,340 if (x & O_CREAT) tenni valamit, 833 01:16:19,340 --> 01:16:27,110 vagy ha (x + O_DIRECT) valami mást, 834 01:16:27,110 --> 01:16:30,300 , és akkor lehet, hogy néhány zászlót, hogy nem állított be - 835 01:16:30,300 --> 01:16:35,730 if (x & O_ - Nem tudom, mi a másik zászlók voltak - 836 01:16:35,730 --> 01:16:42,140 (X és O_RDONLY) -, hogy az adott feltétel nem fog hajtani. 837 01:16:42,140 --> 01:16:44,030 Vagy hogy a blokk kód nem fog végrehajtani, 838 01:16:44,030 --> 01:16:48,030 de ezek a 2., mert azok 2 zászlókat állítottak. 839 01:16:48,030 --> 01:16:57,400 És észre, hogy a C-ben olyan érték, amely nem 0 igaz. 840 01:16:57,400 --> 01:17:05,020 Tehát, (x & O_CREAT) lesz, vagy 0, vagy O_CREAT 841 01:17:05,020 --> 01:17:07,990 mert O_CREAT csak egyetlen bit készlet. 842 01:17:07,990 --> 01:17:12,800 Ha ez a bit be van állítva mellett, akkor ez lesz, hogy visszatérjen O_CREAT - 843 01:17:12,800 --> 01:17:16,640 A bináris ahol csak, hogy kicsit be van állítva. 844 01:17:16,640 --> 01:17:23,400 Ha ez a bit mellett nincs beállítva, akkor fog visszatérni 0, ebben az esetben tudjuk, hogy a zászló nem volt beállítva. 845 01:17:23,400 --> 01:17:25,400 Így használja bitmaszkok. 846 01:17:25,400 --> 01:17:29,050 Azt hiszem, egy korábbi vizsgálat vagy talán az osztályban, vagy valami - 847 01:17:29,050 --> 01:17:35,150 akkor is használhatja bitmaszkok kinyomtatni a bináris változó. 848 01:17:35,150 --> 01:17:46,250 Szóval lehet használni - a ciklusok vége - 1., bal shift, 0 -, majd nyomtatni, ha x és hogy - 849 01:17:46,250 --> 01:17:52,570 ha x és 1, bal shift, 0 - majd nyomtassa 0 vagy 1 lehet. Vagy nyomtasson 1 else print 0. 850 01:17:52,570 --> 01:18:00,620 Aztán menjen át még egyszer -, ha x & 1, a bal-shift, 2 - akkor ez azt jelenti, hogy a második bit 851 01:18:00,620 --> 01:18:04,450 A változó be van állítva, így nyomtasson 1 mást nyomtatni a 0-ra. 852 01:18:04,450 --> 01:18:06,860 És azt hiszem, talán tényleg akarom, hogy fordított sorrendben, mert 853 01:18:06,860 --> 01:18:10,120 általában szeretné, hogy a bal oldalon, hogy a legmagasabb rendű bitek 854 01:18:10,120 --> 01:18:24,510 és a jobb oldalon, hogy a legalacsonyabb értékű bit, így valószínűleg loop 4 int i = 31, míg elütöttem 0, 855 01:18:24,510 --> 01:18:32,320 akkor ne, hogy a pontos állapot - ha x & 1, a bal-shift, i, nyomtassa 1 mást 0-ra. 856 01:18:32,320 --> 01:18:34,320 [Student] Köszönöm. 857 01:18:36,280 --> 01:18:38,550 >> [Rob] Azt hiszem az időből. 858 01:18:38,550 --> 01:18:42,840 Egyéb kérdés az elmúlt néhány out-of-time másodperc alatt? 859 01:18:42,840 --> 01:18:47,710 Rendben van. Sok szerencsét holnapra. 860 01:18:47,710 --> 01:18:54,780 Ez volt az utolsó rész, ahol a jövő heti lesz kötelező. 861 01:18:54,780 --> 01:19:03,770 Adok vissza, vetélkedők, és mehetünk át őket és talán megy át, más dolog, hogy 862 01:19:03,770 --> 01:19:09,230 voltak kíváncsiak, vagy a projekt végső dolgok, vagy a jövőben a CS osztályok dolgokat, vagy - nem tudom. 863 01:19:09,230 --> 01:19:12,070 De ez az utolsó anyag töltött részben. 864 01:19:12,070 --> 01:19:15,070 Bye! 865 01:19:15,070 --> 01:19:20,970 (Taps) 866 01:19:22,250 --> 01:19:24,420 >> [CS50.TV]