1 00:00:00,000 --> 00:00:02,750 >> [Artikel 9] [meer gemaklik] 2 00:00:02,750 --> 00:00:04,750 [Rob Bowden] [Harvard Universiteit] 3 00:00:04,750 --> 00:00:06,750 [Hierdie is CS50.] [CS50.TV] 4 00:00:06,750 --> 00:00:12,130 >> Alle regte. Eintlik is dit vandag is al wat aan julle 'n paar vrae te vra. 5 00:00:12,130 --> 00:00:15,070 Ek kan in staat wees om te dwaal met 'n paar onderwerpe 6 00:00:15,070 --> 00:00:17,570 vir 'n bietjie as niemand het enige vrae te vra. 7 00:00:17,570 --> 00:00:20,660 Hopelik sal jy doen. Is daar iemand enige vrae? 8 00:00:20,660 --> 00:00:25,220 Miskien uit die verlede vasvrae, dinge wat jy nie gemaklik met die oomblik. 9 00:00:34,630 --> 00:00:37,850 >> Ja. >> [Studente] Kan jy gaan oor buffer oorloop aanvalle? >> [Rob] Seker nie. 10 00:00:37,850 --> 00:00:45,530 Die belangrikste voorbeeld eintlik kan hier wees nie. 11 00:00:45,530 --> 00:00:48,720 Die hoof hanteer agter buffer oorloop aanvalle 12 00:00:48,720 --> 00:00:51,540 Ons het 'n paar buffer, hier. 13 00:00:51,540 --> 00:00:54,110 Char c - wat net van die grootte 12 - 14 00:00:54,110 --> 00:00:57,580 maar dan is ons die inbring van iets in daardie buffer 15 00:00:57,580 --> 00:01:00,050 maar nie die beheer van presies hoeveel ons inbring. 16 00:01:00,050 --> 00:01:06,740 Hier is ons inbring StrLen (bar) in C, maar wie weet hoe lank bar is. 17 00:01:06,740 --> 00:01:11,970 As dit langer as 12 karakters, dan is dit gaan hierdie buffer oorloop. 18 00:01:11,970 --> 00:01:15,830 Kyk na hierdie foto - 19 00:01:15,830 --> 00:01:20,840 As jy 61 jy sal baie meer vertroud te kry met hierdie soort van uitleg 20 00:01:20,840 --> 00:01:25,760 en die hantering van die wat gered raam wyser en terugkeer adres en ouers se roetine stapel 21 00:01:25,760 --> 00:01:27,760 en al hierdie dinge werklike. 22 00:01:27,760 --> 00:01:31,340 Maar hier het jy net nodig het om te weet dat ons 'n 23 00:01:31,340 --> 00:01:35,990 hierdie klein ruimte vir ons buffer. 24 00:01:35,990 --> 00:01:39,480 Hier het ons c (0) en dan het ons c, 1, 2, 3, 4, 5 en so aan. 25 00:01:39,480 --> 00:01:44,810 Onder normale omstandighede sou ons hierdie buffer vul soos gewoonlik. 26 00:01:44,810 --> 00:01:50,480 As ons plaas 'hallo' ons wil h-e-l-l-o / 0, 27 00:01:50,480 --> 00:01:52,900 en dan net 'n klomp leë ruimte. 28 00:01:52,900 --> 00:01:57,910 Vir 'n hacker - O, ek dink dit is die voorbeeld. 29 00:01:57,910 --> 00:02:02,470 Vir 'n hacker ons iets soos hierdie waar kry 30 00:02:02,470 --> 00:02:04,760 wat hulle spesifiek probeer om te doen, is om 31 00:02:04,760 --> 00:02:07,890 gewoonlik ignoreer die terugkeer adres. 32 00:02:07,890 --> 00:02:12,510 Wanneer jy na 'n funksie en jou stapel raam kry gestoot op die stapel 33 00:02:12,510 --> 00:02:14,690 dat stapel raam nodig om te weet hoe om - 34 00:02:14,690 --> 00:02:21,020 Wel, die funksie wat geroep is nodig om te weet hoe om terug te keer na die funksie wat dit genoem. 35 00:02:21,020 --> 00:02:23,780 Dus, as hoof oproepe cat cat nodig om terug te keer na die hoof, 36 00:02:23,780 --> 00:02:26,300 en dit is wat hierdie terugkeer adres nie. 37 00:02:26,300 --> 00:02:28,800 Maar wat die hacker gaan doen, is om 38 00:02:28,800 --> 00:02:30,820 ignoreer dit met 'n spesiale terugkeer adres 39 00:02:30,820 --> 00:02:40,090 waar weer - Little Indian - dit is nie eenvoudig, maar elke byte is agteruit. 40 00:02:40,090 --> 00:02:47,300 Hierdie terugkeer adres so ver as die rekenaar is bekommerd 41 00:02:47,300 --> 00:02:51,390 terug te keer na hierdie adres is gelykstaande aan die terugkeer na foo of hoof 42 00:02:51,390 --> 00:02:53,850 of wat ook al funksioneer dit genoem. 43 00:02:53,850 --> 00:02:54,800 So dit gaan om terug te keer na hierdie adres 44 00:02:54,800 --> 00:02:58,130 wat net so gebeur hierdie adres te wees 45 00:02:58,130 --> 00:03:04,740 wat óf soms wat hulle hier doen, is gebruik om die terugkeer adres 46 00:03:04,740 --> 00:03:09,150 van 'n spesifieke funksie wat hulle weet is reeds daar. 47 00:03:09,150 --> 00:03:12,630 Ek kan nie onthou wat die funksie genoem. 48 00:03:12,630 --> 00:03:14,630 Ek sal kyk dit later. 49 00:03:14,630 --> 00:03:17,570 >> Hier wat hulle doen, is verby die terugkeer adres 50 00:03:17,570 --> 00:03:26,310 die stapel self, en dit is 'n bietjie vreemd, waar 51 00:03:26,310 --> 00:03:29,530 Daar is voorbeelde van die geheue waar - 52 00:03:29,530 --> 00:03:34,350 geheue kan verdeel word in slegs-lees-, lees-en skryf, en uitvoerbare geheue 53 00:03:34,350 --> 00:03:38,710 waar ons gesien het lees-alleen geheue voor waar die - 54 00:03:38,710 --> 00:03:43,960 As ek sê char * s = Hello Ek kan nie hallo verander. 55 00:03:43,960 --> 00:03:46,200 Dit is slegs-lees geheue. 56 00:03:46,200 --> 00:03:49,570 Daar is ook die idee van uitvoerbare geheue 57 00:03:49,570 --> 00:03:53,870 waar die uitvoerbare geheue sou die teks segment van die kode nie. 58 00:03:53,870 --> 00:03:57,350 Kyk na jou gewone adres ruimte uitleg - 59 00:03:57,350 --> 00:04:03,090 Ek glo dit gaan 'n goeie beeld te wees - 60 00:04:08,200 --> 00:04:12,170 dit werk - waar ons ons stapel hier. Ons het data geheue. 61 00:04:12,170 --> 00:04:16,360 Ignoreer basies. Dit is ons hoop. 62 00:04:16,360 --> 00:04:18,810 En dan het ons hier ons hoof program kode. 63 00:04:18,810 --> 00:04:27,480 Dit is soortgelyk aan die plek waar ons ons snare soos kar * = hallo 64 00:04:27,480 --> 00:04:29,730 en dit is slegs-lees. 65 00:04:29,730 --> 00:04:33,590 Maar jy kan ook merk die belangrikste program-kode as uitvoerbaar nie. 66 00:04:33,590 --> 00:04:37,950 En as jy dit doen of jou operating stelsel doen wat korrek 67 00:04:37,950 --> 00:04:40,910 dan moet dit die enigste plek in die geheue 68 00:04:40,910 --> 00:04:44,830 wat die kode kan eintlik voer 69 00:04:44,830 --> 00:04:48,550 wat beteken dat hierdie soort van buffer oorloop aanval het ons meer hier 70 00:04:48,550 --> 00:04:53,800 ondoeltreffend sou wees, want dit is besig om die geheue te hier in ons stapel te voer. 71 00:04:53,800 --> 00:04:57,230 Let op die foto's is in die eerste. 72 00:04:57,230 --> 00:04:59,270 Ons het ons stapel grootword. 73 00:04:59,270 --> 00:05:01,270 Hier is die stapel groei af. 74 00:05:01,270 --> 00:05:03,270 Vir CS50 doeleindes die stapel grootword. 75 00:05:03,270 --> 00:05:09,520 >> Dit is moontlik hierdie spesifieke tipe buffer oorloop te omseil 76 00:05:09,520 --> 00:05:15,110 deur met hierdie uitvoerbare dele van die geheue in 'n nie-uitvoerbare streke. 77 00:05:15,110 --> 00:05:21,420 Maar dit gebeur net so dat selde is uitvoerbare geheue gemerk as uitvoerbaar nie. 78 00:05:21,420 --> 00:05:26,520 Dit is geneig om net te wees slegs lees-en her-skryf is die enigste dinge wat gebruik word, 79 00:05:26,520 --> 00:05:28,990 so dit is nog steeds baie effektief. 80 00:05:28,990 --> 00:05:31,950 En hier is ons kan sit wat ons wil. 81 00:05:31,950 --> 00:05:35,020 Dit was nie eintlik gedoen as 'n Pset in 61 hierdie jaar, 82 00:05:35,020 --> 00:05:38,400 Maar as jy kyk na verlede jaar se aanbieding van hom of enige vorige jaar 83 00:05:38,400 --> 00:05:44,110 een Pset is jy spesifiek veronderstel om hier invoeg kode wat veronderstel is om te 84 00:05:44,110 --> 00:05:48,960 'n spesifieke waarde te druk of terugkeer 'n waarde wat verskil van 85 00:05:48,960 --> 00:05:51,400 die waarde wat veronderstel is om gedruk te word. 86 00:05:51,400 --> 00:05:57,770 Of selfs meer slim, dit wil hê jy moet bel of skryf - 87 00:05:57,770 --> 00:06:03,320 so dit sal terugkeer tot hier en dan sal jy 'n paar kodering hier voer, 88 00:06:03,320 --> 00:06:09,720 en die slimste van oorloop sal dan terug te keer na wat dit terugkeer adres gebruik te word. 89 00:06:09,720 --> 00:06:11,970 So selfs al het ons nodig om dit te ignoreer 90 00:06:11,970 --> 00:06:16,720 hier te kom, het ons nog onthou dat terugkeer adres iewers 91 00:06:16,720 --> 00:06:18,890 sodat ons kan terugkeer na die hoof of wat ook al, 92 00:06:18,890 --> 00:06:23,800 en dit is soos ons nog nooit gesien dat dinge verkeerd geloop het. 93 00:06:23,800 --> 00:06:30,100 Maar dinge het sodat dit die geval is, waar miskien binnekant van ons hier gelbroke ons iPhone. 94 00:06:30,100 --> 00:06:35,670 Dinge gaan soos normaal - soos ons hardloop 'n program en dinge eindig terugkeer na 95 00:06:35,670 --> 00:06:38,540 wat dit veronderstel is om terug te keer, maar in die tussentyd 96 00:06:38,540 --> 00:06:41,820 jy daarin geslaag om die hele bedryfstelsel te vernietig. 97 00:06:41,820 --> 00:06:50,950 Jy hoef nie oor-kode buffer oorloop of eintlik neem voordeel van dit te leer ken. 98 00:06:50,950 --> 00:06:58,060 Jy hoef die basiese idees van hierdie om te weet is die buffer wat is oorstroom, 99 00:06:58,060 --> 00:07:02,010 en dit is die rede dat dit oorstroom kan word nie, want ons is nie seker te maak of 100 00:07:02,010 --> 00:07:06,110 ons is eintlik binne die grense van dit. 101 00:07:06,110 --> 00:07:09,880 >> [Studente] Die oplossing vir die voorkoming van dit is net die nagaan van die grense? 102 00:07:09,880 --> 00:07:13,600 [Rob] Ja. In hierdie geval is die oplossing sou wees 103 00:07:13,600 --> 00:07:20,850 jy kan òf sê as StrLen van bar is groter as 12-1 - 104 00:07:20,850 --> 00:07:24,970 want jy moet die / 0 aan die einde - 105 00:07:24,970 --> 00:07:34,090 of jy kan 'n hand te doen vir die lus wat net afskrifte van die eerste 11 karakters, 106 00:07:34,090 --> 00:07:39,710 of net iets waar jy eintlik nagaan om seker te maak jy nie oorstroom nie dat buffer maak. 107 00:07:45,580 --> 00:07:49,050 >> Ander vrae? Ja? 108 00:07:49,050 --> 00:07:52,760 [Studente] Kan jy praat oor drieë en miskien iets oor programmering (onhoorbaar). 109 00:07:52,760 --> 00:07:58,720 [Rob] Seker nie. 110 00:07:58,720 --> 00:08:03,500 Die werklike program - 111 00:08:03,500 --> 00:08:08,190 Ons sal nooit maak jy nie 'n implementering van 'n tydstip waarop die eksamen 112 00:08:08,190 --> 00:08:12,840 want dit sou onregverdig wees om diegene wat hash tabelle gedoen het. 113 00:08:12,840 --> 00:08:16,030 En net so sou ons dit nooit maak jy implementeer 'n gemors tabel op die eksamen 114 00:08:16,030 --> 00:08:18,560 want dit sou onregverdig wees om diegene wat probeer het nie. 115 00:08:18,560 --> 00:08:25,220 Jy moet egter weet dat die struct van 'n Trie of die struct van 'n hash tafel of wat ook al. 116 00:08:25,220 --> 00:08:30,230 Dit is eintlik waar van enige soort data struktuur ons gesien het. 117 00:08:30,230 --> 00:08:33,559 Geskakelde lyste, gestapel skews, binêre bome - 118 00:08:33,559 --> 00:08:38,190 jy moet in staat wees om die structs te definieer deur die hart. 119 00:08:38,190 --> 00:08:44,810 'N Trie - wat beteken dat die enigste ding wat jy sal moet doen, is miskien sal ons gee jou 120 00:08:44,810 --> 00:08:50,070 sommige woord of iets en ons sal sê bou die Trie dat - 121 00:08:50,070 --> 00:08:52,870 ons sal gee jou dalk 'n stel van woorde 122 00:08:52,870 --> 00:08:56,280 en ons is soos bou 'n Trie dat hierdie woordeboek verteenwoordig. 123 00:08:56,280 --> 00:09:05,980 >> Kom ons maak ons ​​woordeboek kat en hond. 124 00:09:05,980 --> 00:09:10,790 Die idee van die Trie is ons begin met hierdie verskeidenheid - 125 00:09:10,790 --> 00:09:16,510 26 slots - 126 00:09:16,510 --> 00:09:24,490 en in elke slot die werklike indeks van die slot ooreenstem met die brief wat ons is bekommerd oor. 127 00:09:24,490 --> 00:09:28,560 So hier, as ons probeer om die kat te voeg in ons Trie 128 00:09:28,560 --> 00:09:35,360 Die eerste karakter is 'c' wat gaan wees as daar 'n 0 is dan b is 1, c is 2. " 129 00:09:35,360 --> 00:09:38,090 Ons gaan om te gaan in die tweede indeks, 130 00:09:38,090 --> 00:09:41,100 en ons gaan 'n Trie af van wat te skep. 131 00:09:41,100 --> 00:09:47,080 Ons gaan 26 slots te hê. 132 00:09:47,080 --> 00:09:51,140 En dan gaan ons na die indeks die tweede karakter van die kat. 133 00:09:51,140 --> 00:09:53,340 Dit is 'n "wat gaan die 0 plek te wees. 134 00:09:53,340 --> 00:09:56,960 En wat gaan 26 plekke te hê. 135 00:09:56,960 --> 00:10:05,650 Dan gaan ons na 't "en ons sou ook dat afkom wat is eintlik soort van belangrike 136 00:10:05,650 --> 00:10:13,990 omdat - laat ons dit kom hier. Hier is ons Trie vir 't'. 137 00:10:13,990 --> 00:10:23,370 Kom ons sê dit is die indeks 't' is 19. 138 00:10:23,370 --> 00:10:31,020 Die belangrikste ding om te onthou oor drieë is jy kan nie net die spoor van hierdie wenke hou. 139 00:10:31,020 --> 00:10:35,470 Jy het ook om tred te hou of dit is eintlik die einde van 'n woord. 140 00:10:35,470 --> 00:10:38,570 So, binnekant van hier moet ons 'n soort van vlag wat sê 141 00:10:38,570 --> 00:10:41,520 okay, dit is eintlik die einde van 'n woord. 142 00:10:41,520 --> 00:10:46,830 Die rede hiervoor is as ons later probeer om in te voeg katastrofiese in ons woordeboek 143 00:10:46,830 --> 00:10:49,930 wat dieselfde begin 3 karakters 144 00:10:49,930 --> 00:10:57,250 maar gaan verder moet ons erken dat dit die einde van 'n woord. 145 00:10:57,250 --> 00:11:01,330 Of alternatiewelik as ons probeer om op te kyk "ca", wat dalk nie 'n woord 146 00:11:01,330 --> 00:11:06,100 maar ons kry tot hier het ons - 147 00:11:06,100 --> 00:11:10,270 Of sou dit wees c en dan moet ons kyk na 'n - 148 00:11:10,270 --> 00:11:13,940 ons nodig het om te erken dat selfs al is daar 'n wyser uit hierdie knoop kom 149 00:11:13,940 --> 00:11:15,940 dit nie die einde van die woord te stel. 150 00:11:15,940 --> 00:11:19,430 >> So, wat beteken dit - wat het jy gaan om te sê? 151 00:11:19,430 --> 00:11:22,760 Wat beteken dit ons struct lyk? 152 00:11:22,760 --> 00:11:25,760 [Studente] Dit is 'n verskeidenheid van wenke wat is 26 lank en dan 'n Bool was of nie was. 153 00:11:25,760 --> 00:11:47,430 [Rob] Ja. So, sal ons 'n struct Trie * wenke - hier sal ons sê [26] op 154 00:11:47,430 --> 00:11:49,590 en dan die kommapunt hier. 155 00:11:49,590 --> 00:11:53,210 Maar op die Pset, moet ons ook rekening vir apostrofs, 156 00:11:53,210 --> 00:11:58,170 wat beteken jy nodig het om hard-kode wat toespraak met indeks 27 of iets. 157 00:11:58,170 --> 00:12:00,440 Maar hier het ons net omgee 26. 158 00:12:00,440 --> 00:12:11,830 En dan moet ons miskien 'n kar in of Bool - kom ons noem dit 'n woord. 159 00:12:11,830 --> 00:12:18,120 Dit is 2 van die 3 dinge wat ek dink jy ooit sou nodig het om te weet oor die drieë - 160 00:12:18,120 --> 00:12:24,370 bou hulle, die struct van hulle, en die laaste ding is die aanloop tyd van hulle. 161 00:12:24,370 --> 00:12:28,250 >> Wat is die runtime van 'n Trie - of die lookup in 'n Trie? 162 00:12:28,250 --> 00:12:47,500 Dit is waar ons sê dit is o (k) waar k is die lengte van die woord wat ons toevallig op soek up; 163 00:12:47,500 --> 00:12:53,850 maar op dieselfde tyd wat ons sê - ten minste ter wille van Pset 5 speller se - ons sê 164 00:12:53,850 --> 00:12:59,470 die langste woord in die woordeboek is 45 karakters, so dit is basies 165 00:12:59,470 --> 00:13:04,900 die O van 45 wat konstant tyd. 166 00:13:04,900 --> 00:13:09,660 So, as daar is 'n bogrens op jou langste woord dan - 167 00:13:09,660 --> 00:13:15,130 of selfs soos die Engelse woordeboek - daar is 'n bogrens op jou langste woord. 168 00:13:15,130 --> 00:13:19,970 Of enige woordeboek nie - daar is 'n langste gebind op jou bo-woord. 169 00:13:19,970 --> 00:13:25,480 Maak nie saak wat jy doen, is konstante tyd, 170 00:13:25,480 --> 00:13:33,810 maar O van k is mooi, want daar is eintlik 'n verskil tussen hardloop sê 171 00:13:33,810 --> 00:13:40,120 45-karakter woord teenoor 'n alfabet wat net woorde tot 3 karakters. 172 00:13:40,120 --> 00:13:52,870 Nog 'n ding oor dit is dat die - 173 00:13:52,870 --> 00:13:57,520 O ja, want net sê dat 45 gebeur ons langste woord te wees 174 00:13:57,520 --> 00:14:02,330 is 'n soort van dom, want op dieselfde tyd laat ons sê 'n algoritme is O van N. 175 00:14:02,330 --> 00:14:06,510 Wel okay, want die geheue ondersteun net tot 2 ^ 32 grepe, 176 00:14:06,510 --> 00:14:11,770 dan N is by die meeste 4000000000 en dit is konstante tyd, wat is die rede waarom 'n sekere punt 177 00:14:11,770 --> 00:14:14,870 dit is dom om hierdie soort van ding waar daar is 'n bogrens te sê 178 00:14:14,870 --> 00:14:19,540 dat ons net kan verminder konstante tyd, want alles is konstante 179 00:14:19,540 --> 00:14:22,320 wanneer jy dink dit op hierdie manier. 180 00:14:22,320 --> 00:14:25,470 Maar ons sal waarskynlik aanvaar beide van hierdie. 181 00:14:25,470 --> 00:14:31,780 Verduidelik in elk geval nie dat O (1) beteken dat jy 'n boonste-begrensde lengte van 'n woord; 182 00:14:31,780 --> 00:14:34,070 O (k) beteken dat jou lengte van die woord - 183 00:14:34,070 --> 00:14:40,900 Wel, k beteken lengte van die woord. 184 00:14:44,060 --> 00:14:47,280 >> Ja. >> [Studente] Is die Bool - want as jy jou Trie 185 00:14:47,280 --> 00:14:53,220 dit lyk soos dit was nie - jy sal gaan kat en dan gaan jy na die volgende wyser 186 00:14:53,220 --> 00:14:59,860 en dan moet jy sê as wat gelyk ware - sou jy sit dit waar te hou met die t? 187 00:14:59,860 --> 00:15:06,560 [Rob] Kom ons dink dit is die geval waar 'n baie voorbeelde wat jy kan net probeer en kom met 188 00:15:06,560 --> 00:15:12,310 eenvoudige en / of ekstreme voorbeelde en wat dit behoort te wees, so laat dink aan die woord 'a'. 189 00:15:12,310 --> 00:15:21,320 In ons oorspronklike Trie - 190 00:15:21,320 --> 00:15:35,510 sou ons wil sit 'n 1 hier, of ons wil hê om te sit 'n 1 hier. 191 00:15:35,510 --> 00:15:41,350 Ek sou sê dat in die einde dit waarskynlik óf sou wees / of. 192 00:15:41,350 --> 00:15:46,000 Ek kan nie dink aan 'n rede - of jy regtig wouldn't - 193 00:15:46,000 --> 00:15:51,060 die rede waarom ek sou dit nie neersit nie daar nie omdat jy hoef nie eens te so ver te gaan. 194 00:15:51,060 --> 00:15:55,820 Ons het nog nooit nodig om hierdie Trie toe te ken. 195 00:15:55,820 --> 00:15:57,950 Ons het net sit die 1 tot daar. 196 00:15:57,950 --> 00:16:03,310 Dit is nog steeds wys na null. 197 00:16:03,310 --> 00:16:09,430 As ons gaan net enkele karakters te hê 198 00:16:09,430 --> 00:16:17,220 daar is geen rede om af te brei na 'n ander Trie net dat die brief as gebruik te merk. 199 00:16:17,220 --> 00:16:21,260 Net so, as ons het die 'n 'down is daar 200 00:16:21,260 --> 00:16:27,860 dan noodwendig al hierdie sou net 0 te alle tye. 201 00:16:27,860 --> 00:16:36,060 >> [Studente] Maar het ons nie nodig om 'n begin Trie wat verwys na die 'a'? 202 00:16:36,060 --> 00:16:43,570 [Rob] Ons het 'n globale of iets struct Trie * t 203 00:16:43,570 --> 00:16:47,270 wat dui hier nie, maar dit is net 'n wyser. 204 00:16:47,270 --> 00:16:51,500 Dit is nie 'n volskaalse Trie dit is wys om dit te. 205 00:16:51,500 --> 00:17:02,000 [Studente] Goed. Hoe sal ons ken die letter 'i'- met die woord wat ek? 206 00:17:02,000 --> 00:17:06,380 [Rob] Sy vraag kan word beantwoord nie. Hou op. 207 00:17:06,380 --> 00:17:15,060 Dit is 'n saak waar 'n Trie in en van die self - 208 00:17:15,060 --> 00:17:17,880 Ek weet nie hoe die Pset sou dit geskryf het. 209 00:17:17,880 --> 00:17:19,880 Die vorige struct was sleg. 210 00:17:19,880 --> 00:17:41,690 Maar ons kan dit ook doen struct knoop is 'n Bool - en 'n wyser - 211 00:17:41,690 --> 00:17:46,500 daar is eintlik verskeie maniere waarop jy dit kan skryf. 212 00:17:46,500 --> 00:18:01,800 Alternatiewelik word 'n tydstip waarop hoef nie 'n struct te wees. 213 00:18:01,800 --> 00:18:21,250 Dit kan selfs wees Trie - typedef knoop * - 214 00:18:21,250 --> 00:18:34,760 knoop [26] is 'n Trie, en dit is nie meer struct. 215 00:18:34,760 --> 00:18:44,270 Nou is daar gaan wees - Achievement probeer om te dink aan die manier waarop Pset sou verwag het om jou te. 216 00:18:44,270 --> 00:18:47,650 [Studente] Ek opgetrek wat hersiening sessie en ek dink hulle gaan net - 217 00:18:47,650 --> 00:18:50,670 soos as jy 'n 'n dan gaan jy na die volgende - >> [Rob] Dit is hoe hulle dit doen? 218 00:18:50,670 --> 00:18:53,750 [Studente] En dan as daar is 'n ware daar is dit nie werk nie - 219 00:18:53,750 --> 00:18:58,710 [Rob] Ja. Dit werk nie. Dit verkwis die ruimte van - 220 00:18:58,710 --> 00:19:03,910 jy noodwendig 'n heel ander vlak van Trie dat jy nie in die eerste plek nodig sou wees. 221 00:19:03,910 --> 00:19:08,410 Hier is dit om lelik met mekaar - 222 00:19:08,410 --> 00:19:11,530 basies wat ek probeer om hier te doen, is om mede - 223 00:19:11,530 --> 00:19:15,000 in plaas van 26 verwysings na jou drieë, 224 00:19:15,000 --> 00:19:20,810 dit is 26 Bool wyser, Bool wyser, Bool wyser, en so aan. 225 00:19:28,940 --> 00:19:34,410 >> [Studente] Jy kan dit nie maak dat 2 skikkings? 'N verskeidenheid van bools en 'n verskeidenheid van riglyne? 226 00:19:34,410 --> 00:19:38,060 [Rob] Jy kan maar dan moet jy nodig het om te - 227 00:19:38,060 --> 00:19:41,500 2 skikkings van booleans en wenke. 228 00:19:41,500 --> 00:19:47,340 Jy sal moet dan bou jou boolse skikking - 229 00:19:47,340 --> 00:19:51,240 jou boolse skikking moet wees so groot soos die Trie 230 00:19:51,240 --> 00:19:53,200 want jy kan nie net 26 booleans. 231 00:19:53,200 --> 00:19:57,010 Dit het om te groei saam met elke moontlike - 232 00:19:57,010 --> 00:20:03,240 soos jou Trie het meer as 26 waar of vals moontlik woorde. 233 00:20:03,240 --> 00:20:08,240 Op daardie stadium het hulle kan net so goed wees om 'n enkele struct dat jou Trie groei saam met. 234 00:20:08,240 --> 00:20:15,210 Dit lyk nie reg nie, omdat - wat wil ek hier? 235 00:20:15,210 --> 00:20:23,640 So, Trie * t - 236 00:20:23,640 --> 00:20:30,200 kan jy doen typedef (knoop *) [26] Trie; 237 00:20:30,200 --> 00:20:33,090 wat kan die sintaksis ek soek. 238 00:20:36,740 --> 00:20:41,450 En dit moet net 'n gereelde Trie. 239 00:20:44,900 --> 00:20:47,440 Ek is nie seker nie. 240 00:20:47,440 --> 00:20:54,850 Maar dit is die manier waarop ons dit gedoen het in die hersiening, sodat werk perfek fyn, ook. 241 00:20:54,850 --> 00:20:57,850 In hierdie geval is dit net Bool is woord en dan 'n skikking van 26 242 00:20:57,850 --> 00:21:01,750 dan is jy hoef nie te gaan na die volgende vlak. 243 00:21:01,750 --> 00:21:05,420 Ek sal dink oor die manier wat ek sou doen nie. 244 00:21:07,500 --> 00:21:09,550 >> Ander vrae? 245 00:21:09,550 --> 00:21:12,540 [Studente] Kan ek vrae te vra oor iets anders? >> [Rob] Ja. 246 00:21:12,540 --> 00:21:19,040 [Studente] Kan jy gaan oor wat die verskil is en wanneer jy wil gebruik jQuery versus Ajax? 247 00:21:19,040 --> 00:21:24,550 [Rob] Hulle is in en van die self heeltemal anders. 248 00:21:24,550 --> 00:21:32,720 JQuery nie in staat stel om Ajax. Dit gee ons 'n paar makliker gebruik van Ajax. 249 00:21:32,720 --> 00:21:38,480 Maar Ajax kom verskeep met JavaScript. JavaScript het Ajax vermoëns. 250 00:21:38,480 --> 00:21:47,490 Alle Ajax beteken is vergelyk ek is reeds op 'n bladsy en wanneer ek wil - 251 00:21:47,490 --> 00:21:52,820 wanneer ek op iets wat ek nie nodig het om die bladsy te herlaai dat nuwe inligting af te laai. 252 00:21:52,820 --> 00:21:55,020 Ek vra net dat nuwe inligting. 253 00:21:55,020 --> 00:22:01,220 Jy kan kyk na dit in Facebook of iets. 254 00:22:01,220 --> 00:22:05,580 Inspekteer netwerk. 255 00:22:05,580 --> 00:22:07,460 Krimp dit. 256 00:22:12,070 --> 00:22:14,940 Hier sien ons dat ons om al hierdie versoeke. 257 00:22:14,940 --> 00:22:18,990 Nou wanneer ek op - wel, dit doen Ajax nog voordat ek kliek op enige iets. 258 00:22:18,990 --> 00:22:24,140 Maar as ek op, dan gaan dit 'n klomp van die versoeke om hier te maak 259 00:22:24,140 --> 00:22:33,530 wat net die maak van hierdie versoeke - O, nou is dit hier. 260 00:22:33,530 --> 00:22:36,590 Kom ons verfris. 261 00:22:36,590 --> 00:22:38,580 Doen dit weer. 262 00:22:38,580 --> 00:22:42,090 Ons sien dat ons al hierdie versoeke nie, maar dit kan nog steeds in die proses van die bladsy laai. 263 00:22:42,090 --> 00:22:47,400 Let Facebook is die maak van hierdie konstante versoeke selfs na die bladsy gelaai word. 264 00:22:47,400 --> 00:22:51,470 En as ek op hier, sal dit 'n paar meer versoeke vir 'n paar data maak 265 00:22:51,470 --> 00:22:54,990 Dit is in reaksie op die ding wat ek net gekliek. 266 00:22:54,990 --> 00:23:04,660 Dit is presies wat Ajax is. Dit kan jy trek vir data wat nie afgelaai met die bladsy oorspronklik. 267 00:23:04,660 --> 00:23:12,050 >> JQuery is apart. JQuery is net 'n JavaScript-biblioteek wat maak 'n baie van die dinge makliker te maak. 268 00:23:12,050 --> 00:23:28,660 Met jQuery dit is 'n groot deel van die voordeel is dit net - 269 00:23:28,660 --> 00:23:34,030 dollar-teken - dollar-teken is 'n geldige veranderlike in JavaScript. 270 00:23:34,030 --> 00:23:43,460 So, jQuery - al is dit doen sê soos var $ = 'n hele klomp van die dinge - 271 00:23:43,460 --> 00:23:46,690 soos 'n groot funksie met al hierdie dinge in dit - 272 00:23:46,690 --> 00:23:52,650 en dan gebruik jy dat die dollar teken in maniere soos 273 00:23:52,650 --> 00:24:23,940 $ ("# Footer"). Styl ("text-align", "middel"). 274 00:24:23,940 --> 00:24:32,330 JQuery gee ons hierdie soort van sintaksis, waar 'n groot voordeel - 275 00:24:32,330 --> 00:24:35,650 dit het ander funksies, maar dit wat ons wil hê jy moet fokus op die meeste 276 00:24:35,650 --> 00:24:38,760 is net in staat is om die elemente soos hierdie te kies. 277 00:24:38,760 --> 00:24:42,780 In gereelde, plain-ou JavaScript kan jy doen dinge soos 278 00:24:42,780 --> 00:24:50,490 dokument-dot-kry element deur ID footer-dot - Ek weet nie wat dit is op daardie stadium - 279 00:24:50,490 --> 00:24:52,790 iets oor CSS of styl of iets - 280 00:24:52,790 --> 00:24:58,930 maar dan alternatiewelik, kom ons sê ons wil kies deur die klas. 281 00:24:58,930 --> 00:25:06,330 Nou is ons stilering alles met 'n klas footer met hierdie styl. 282 00:25:06,330 --> 00:25:16,070 Selfs as ons wou geen paragrawe te stileer. 283 00:25:16,070 --> 00:25:22,000 So, hierdie selector - in staat is om dinge in die dom soos hierdie te kies is ongelooflik gerieflik 284 00:25:22,000 --> 00:25:29,420 want in 'n gewone ou JavaScript jy wil hê dokument-dot-kry elemente te doen deur die klas se naam 285 00:25:29,420 --> 00:25:34,260 of wat dit ookal is, of as ek wou 'n merker ek nodig het om te sê kry elemente deur tag naam. 286 00:25:34,260 --> 00:25:37,530 So, ek moet die spesifieke maniere waarop ek toegang tot al hierdie dinge te weet. 287 00:25:37,530 --> 00:25:40,810 Die funksies gaan anders wees, afhangende van of ek die gebruik van 'n klas of 'n ID 288 00:25:40,810 --> 00:25:46,420 of 'n etiket of wat, terwyl jQuery nie net dat vir my. 289 00:25:46,420 --> 00:25:53,120 >> [Studente] Is jQuery gebruik gaan word wanneer jy doen aanvanklike stilering van die bladsy? 290 00:25:53,120 --> 00:25:56,570 Of om die stilering te verander nadat dit reeds - >> [Rob] om dit te verander. 291 00:25:56,570 --> 00:25:58,440 [Studente] Na dit is reeds gelaai. >> [Rob] Ja. 292 00:25:58,440 --> 00:26:07,020 Enige aanvanklike stilering - goed, selfs die - 293 00:26:07,020 --> 00:26:09,970 algemeen sou jy hierdie soort van verandering gebruik. 294 00:26:09,970 --> 00:26:14,330 Jy sal nie verander nie - dit sal perfek werk boete. 295 00:26:14,330 --> 00:26:17,720 Maar gewoonlik sal jy nie die styl verander soos hierdie. 296 00:26:17,720 --> 00:26:20,610 In plaas daarvan, sou jy dit gee 'n nuwe klas of iets 297 00:26:20,610 --> 00:26:24,650 terwyl die CSS reeds vir daardie klas omskryf in 'n sekere manier. 298 00:26:24,650 --> 00:26:28,920 Deur te gee van hierdie items wat ek kies van 'n nuwe klas 299 00:26:28,920 --> 00:26:32,200 Ek is die toepassing van die style wat reeds afgelaai. 300 00:26:32,200 --> 00:26:36,720 [Studente] So jy kies 'n paar van die blok en die dinge wat jy gekies het 301 00:26:36,720 --> 00:26:41,820 verander na 'n nuwe styl en begin soek anders. >> [Rob] Ja. 302 00:26:41,820 --> 00:26:45,490 Die ander dinge om te onthou oor - 303 00:26:45,490 --> 00:26:48,350 Wel, daar is 'n paar funksies wat jy moet onthou oor jQuery. 304 00:26:48,350 --> 00:26:55,570 Kom ons sê dat ons kies om iets met ID P. 305 00:26:55,570 --> 00:27:00,500 >> [Studente] Moet jy altyd die pond te gebruik? 306 00:27:00,500 --> 00:27:09,600 [Rob] Dit beteken ID. Dit is gelykstaande aan CSS, so CSS keurders - dit is geïnspireer deur dit. 307 00:27:09,600 --> 00:27:12,410 Waar in CSS as ek wou 'n footer te Style - 308 00:27:12,410 --> 00:27:16,950 of iets met ID footer - 309 00:27:16,950 --> 00:27:23,490 dit sou wees soos text-align: center; 310 00:27:23,490 --> 00:27:28,820 jy sal nie nodig CSS op die eksamen te skryf nie, maar jy moet die keurders te leer ken. 311 00:27:28,820 --> 00:27:34,280 Jy moet weet wat - wat jy moet weet hoe om dit te lees. 312 00:27:34,280 --> 00:27:36,000 Maar ons sal nooit - 313 00:27:36,000 --> 00:27:42,390 jy hoef nie al die verskillende moontlike stilering dinge om te onthou. Of enige van hulle. 314 00:27:42,390 --> 00:27:50,020 >> JQuery dinge wat jy moet onthou - 315 00:27:50,020 --> 00:27:58,380 jy moet onthou dot-HTML, en 'n algemene patroon in jQuery - laat her-skryf. 316 00:27:58,380 --> 00:28:09,640 'N Algemene patroon is ons $ ("# f"). Html 317 00:28:09,640 --> 00:28:15,650 As ek net plain hakies wat beteken dat jy die HTML; 318 00:28:15,650 --> 00:28:23,870 terwyl as ek sê HTML en sit wat ek wil hier - sommige skakel na iets - 319 00:28:23,870 --> 00:28:30,410 om iets in die hakies sit nou die HTML. 320 00:28:30,410 --> 00:28:33,760 Dit is redelik algemeen onder 'n klomp van die funksies. 321 00:28:33,760 --> 00:28:38,360 Daar is dieselfde deal met teks. 322 00:28:38,360 --> 00:28:41,720 Die verskil tussen HTML en teks is dat die teks gaan om dit te vul 323 00:28:41,720 --> 00:28:46,350 as letterlike minder as 'n groter-as in plaas van as 'n anker tag. 324 00:28:46,350 --> 00:28:53,000 En teks gaan om dieselfde te wees as ek net dit doen. 325 00:28:53,000 --> 00:28:55,760 Dit gaan die teks van die dokument te haal - die HTML van die dokument nie 326 00:28:55,760 --> 00:29:01,810 Maar net die teks in hierdie element. 327 00:29:01,810 --> 00:29:08,430 Nog een is indien 'f' gebeur 'n ID vir 'n bydrae te wees, 328 00:29:08,430 --> 00:29:14,250 dan hash-f-dot-val - as ek wil die insette te stel om iets soos - 329 00:29:14,250 --> 00:29:17,900 Kom ons sê ek 'n boks en ek wil 'n standaard waarde te stel - 330 00:29:17,900 --> 00:29:26,070 dot-val - ek weet nie eens - 3 - sodat outomaties voeg in die teks boks 3, 331 00:29:26,070 --> 00:29:35,980 Maar as ek 3-dot-val, wat sal haal wat ook al is tans in die teks boks vir my. 332 00:29:35,980 --> 00:29:39,690 >> Dit is nuttig vir die vorm validering waar 333 00:29:39,690 --> 00:29:48,030 As ek wil net om seker te maak dat hulle eintlik ingestuur al die dinge maak. 334 00:29:48,030 --> 00:29:54,710 Een manier om dit te doen is as hulle, nadat ek getref dien dit onvermydelik gestuur na 'n paar bladsy op die bediener - 335 00:29:54,710 --> 00:30:00,190 soos dit vir ons PHP sou wees - en dit sou probeer om die data te verwerk en dit sou sê 336 00:30:00,190 --> 00:30:03,030 hulle het nie iets te vul, sodat aansture hulle nou na 'n ander bladsy wat sê 337 00:30:03,030 --> 00:30:05,050 jy het nie alles te vul. 338 00:30:05,050 --> 00:30:11,650 In plaas van om dit te doen, in JavaScript / jQuery jy kan net sien of val is leeg. 339 00:30:11,650 --> 00:30:17,270 Of is val - leë aanhalings. 340 00:30:17,270 --> 00:30:23,120 Dit gaan net - nou kan ons hulle bedag maak dat jy nie op hierdie gebied het vul. 341 00:30:23,120 --> 00:30:26,990 Onvermydelik jy nie nodig het om die PHP bediener-kant nagaan om te doen nie, omdat 342 00:30:26,990 --> 00:30:31,210 jy kan net JavaScript skakel in al die blaaiers. 343 00:30:31,210 --> 00:30:36,180 Maar JavaScript maak dit makliker vir diegene wat dit nie het geaktiveer, 344 00:30:36,180 --> 00:30:42,940 en feitlik nege en negentig-punt-iets persent van blaaiers het dit op deesdae. 345 00:30:42,940 --> 00:30:46,630 Baie min mense draai JavaScript af. 346 00:30:46,630 --> 00:30:52,850 Dit is 'n gebruiker gerief. Jy moet PHP validering te doen. 347 00:30:52,850 --> 00:30:55,990 Jy moet JavaScript validering te doen. 348 00:30:55,990 --> 00:30:57,950 >> [Studente] Wat beteken # f verwys tot hier? 349 00:30:57,950 --> 00:31:00,020 [Rob] Wat beteken # f verwys na? 350 00:31:00,020 --> 00:31:04,350 Daar is 'n element in my dokument met ID 'f'. 351 00:31:04,350 --> 00:31:09,850 Ons sal kyk na - waarskynlik Facebook het baie van die voorbeelde waar as ek na elemente 352 00:31:09,850 --> 00:31:17,820 soek hier onder die elemente kan ek sien hierdie spesifieke div dit is uitgelig hier - 353 00:31:17,820 --> 00:31:22,670 of is dit die hele bladsy - ja, dit is daar. Dit het ID pagelet_bluebar. 354 00:31:22,670 --> 00:31:26,730 In konsole Ek neem aan hulle is met behulp van jQuery. 355 00:31:26,730 --> 00:31:40,030 So, kan ek kies pagelet_bluebar sodat kies, en ek iets verkeerd gedoen het. 356 00:31:46,470 --> 00:31:52,250 Kom ons probeer - of miskien het hulle nie die gebruik van jQuery en dat karakter se gekarteer na iets anders. 357 00:31:52,250 --> 00:32:04,970 'N beter voorbeeld in iets wat ek weet, is die gebruik van jQuery - 358 00:32:04,970 --> 00:32:10,600 nog steeds op soek na ons elemente hier - ons het hier die klas gelyk navbar. 359 00:32:10,600 --> 00:32:12,330 Dit is iets wat met die klas navbar, 360 00:32:12,330 --> 00:32:19,180 so binnekant van ons konsole ons kan kyk om die ding met die klas navbar. 361 00:32:19,180 --> 00:32:21,770 Hier kan ons scroll oor hierdie en sien dit is wat dit is. 362 00:32:21,770 --> 00:32:29,850 As ek wou doen. Teks Dit is die teks van daardie, so ek sien instellings vir die verslag hierbo log uit 363 00:32:29,850 --> 00:32:35,760 wat almal onder hier, maar dit is nog steeds teks binne daardie HTML tag. 364 00:32:35,760 --> 00:32:52,230 Ek kon die HTML ingestel om net 'n paar skakel, 365 00:32:52,230 --> 00:32:56,550 so ek sal ontslae te raak van my bar. Nou dat ontslae geraak het van die kop heeltemal net so dit is gekoppel aan YouTube. 366 00:32:56,550 --> 00:32:59,630 >> En is daar enige vorm voorbeeld? 367 00:32:59,630 --> 00:33:01,940 Hier is 'n vorm. 368 00:33:01,940 --> 00:33:05,830 Ek kan regs-kliek en inspekteer element om dit te kom hier. 369 00:33:05,830 --> 00:33:08,460 Ek sien dat die ID is teks soek, 370 00:33:08,460 --> 00:33:16,910 so hier as ek dit doen ID teks soek. 371 00:33:16,910 --> 00:33:23,190 Ek bring oor dit en ek sien dat die korrekte ding wat ek was op soek na. 372 00:33:23,190 --> 00:33:27,670 As ek wil. Val om dit te doen vir my sou gee wat ek daar was getik. 373 00:33:27,670 --> 00:33:36,010 As ek wou doen hallo dit sal dit verander hier om hallo - jQuery. 374 00:33:36,010 --> 00:33:45,780 Ek kon natuurlik belaglik doen soos document.get element deur ID - teks soek - 375 00:33:45,780 --> 00:33:54,000 Ek weet nie eens wat dit is op hierdie punt - dot waarde nie - nee, ek het vergeet dat die man. 376 00:33:54,000 --> 00:33:59,110 So, dit is hallo. Ek weet nie hoe ek wil stel dit gelyk aan iets. 377 00:33:59,110 --> 00:34:00,930 Ja, so dat dit verander. 378 00:34:00,930 --> 00:34:07,510 Maar jy hoef nie hierdie en baie baie webwerwe te gebruik op hierdie punt gebruik jQuery. 379 00:34:07,510 --> 00:34:13,050 Selfs soos op 'n finale projek - as jy doen 'n web-projek - die eerste ding 380 00:34:13,050 --> 00:34:20,030 Ek beveel is net insluitende jQuery, sodat jy kan die gerief van al hierdie funksies te kry. 381 00:34:22,580 --> 00:34:27,750 >> [Studente] Ek dink ek het 'n ander manier te kry om 'n element gebruik dom. 382 00:34:27,750 --> 00:34:32,520 Het jy dot te gebruik en dan hou om af te gaan? 383 00:34:32,520 --> 00:34:36,630 [Rob] Jy kan dit doen. Ek weet nie of dit sal baie goed werk. 384 00:34:36,630 --> 00:34:38,900 Dit is moeilik om weg te opgevolg. 385 00:34:38,900 --> 00:34:43,179 Een voorbeeld is - ek weet nie eens of ons enige vorm - 386 00:34:43,179 --> 00:34:48,940 maar document.forms gaan die lys van vorms wat op hierdie bladsy om terug te keer, 387 00:34:48,940 --> 00:34:55,070 dan kan ek document.forms doen 0 gaan die eerste vorm te wees. 388 00:34:55,070 --> 00:35:03,070 Dot - Ek weet nie wat ons het genoem dat - so dit het nie eens 'n naam, 389 00:35:03,070 --> 00:35:08,050 so miskien insette sal werk. No 390 00:35:08,050 --> 00:35:11,050 Ek weet nie eens hoe om te doen - kry element-ek-tag naam insette. 391 00:35:11,050 --> 00:35:23,630 Ja, dit het my die insette, en nou wil ek die 0 om insette 392 00:35:23,630 --> 00:35:31,320 en ek wil sy waarde te kies, so dit gaan teks te wees. 393 00:35:31,320 --> 00:35:33,890 Ek het aan die einde doen get elemente deur tag naam in elk geval. 394 00:35:33,890 --> 00:35:36,210 Daar is dalk 'n manier om dit te direk te kies wees 395 00:35:36,210 --> 00:35:43,480 deur vorm 0, maar die lekker ding van dit is nog steeds soos ek op die etikette genoem raak insette het net 396 00:35:43,480 --> 00:35:49,880 wat 'n kind van hierdie vorm, anders as ek net doen wat reguit voor 397 00:35:49,880 --> 00:35:56,680 hierdie al die elemente op die hele bladsy, in die hele dokument sou kies 398 00:35:56,680 --> 00:36:00,580 in plaas van net daardie vorm en dit sal waarskynlik nie eens die een wat ek wil hê. 399 00:36:00,580 --> 00:36:06,180 Ek weet nie eens wat dit is. Ek weet nie. 400 00:36:06,180 --> 00:36:13,450 Ek dink die eerste insette element op ons is hierdie klein boks. 401 00:36:13,450 --> 00:36:20,450 >> [Studente] Dit is mooi onverwante 402 00:36:20,450 --> 00:36:27,420 en moontlik soort van dom nie, maar op die antwoord sleutel dit sê dat PHP - 403 00:36:27,420 --> 00:36:35,660 Ek weet nie of dit is die antwoord sleutel of notas, maar dit sê PHP is bediener-kant 404 00:36:35,660 --> 00:36:39,590 en JavaScript is kliënt-kant. Wat is die verskil tussen die 2? 405 00:36:39,590 --> 00:36:45,550 [Rob] Die verskil tussen JavaScript kliënt-kant en PHP bediener-kant. 406 00:36:45,550 --> 00:36:51,890 As jy gehoor het van streep / gebruik knoop JS voordat jy sou dink dat 407 00:36:51,890 --> 00:36:56,280 JavaScript is nie net kliënt-kant nie, maar vir CS50 doeleindes is dit - 408 00:36:56,280 --> 00:36:59,340 of ten minste vir hierdie quiz se doel dit is. 409 00:36:59,340 --> 00:37:03,800 PHP synde bediener-kant. Geen JavaScript. 410 00:37:03,800 --> 00:37:08,700 Wanneer jy jou webblad skryf jy sal skryf PHP op die bediener. 411 00:37:08,700 --> 00:37:11,670 Jy sal nooit skryf JavaScript op die bediener. 412 00:37:11,670 --> 00:37:17,190 JavaScript eindig om gestuur word aan die leser waar die JavaScript-kode voer. 413 00:37:17,190 --> 00:37:22,250 En die JavaScript-kode moet in die leser om te lewe, want anders wanneer ek wil 414 00:37:22,250 --> 00:37:25,830 net doen enige soort van JavaScript-y ding soos te kliek op dit, 415 00:37:25,830 --> 00:37:31,720 Ek is nie herlaai 'n bladsy. Dit is net JavaScript re-formatering dinge vir my. 416 00:37:31,720 --> 00:37:36,490 As JavaScript gewoon op die bediener, dan sou ek nodig het om te onvermydelik iets vra 417 00:37:36,490 --> 00:37:39,490 van die bediener om te weet wat om te doen. 418 00:37:39,490 --> 00:37:45,380 PHP - daar is nie so iets soos PHP in die leser. 419 00:37:45,380 --> 00:37:52,090 Toe ek 'n bladsy - so kom ons sê hier is ek versoek om hierdie spesifieke bladsy. 420 00:37:52,090 --> 00:37:57,270 Dit beteken dat dit gaan om te vra - 421 00:37:57,270 --> 00:38:04,270 verfris - dit gaan om hierdie bladsy te verfris - 422 00:38:04,270 --> 00:38:07,210 sodat hierdie versoek gaan uit na ons bediener. 423 00:38:07,210 --> 00:38:13,190 Dit sien dat dit nodig om terug te keer hierdie spesifieke draad met hierdie besondere ID, 424 00:38:13,190 --> 00:38:23,740 So nou wat gaan 'n paar PHP dat die PHP tolk gaan dat die bladsy te interpreteer te wees 425 00:38:23,740 --> 00:38:28,680 en omskep dit in net HTML, CSS, miskien JavaScript, wat ook al. 426 00:38:28,680 --> 00:38:36,930 Dit is PHP wat prosesse hierdie versoek en kry al die teks en dinge 427 00:38:36,930 --> 00:38:39,170 dat ek eintlik is op soek na van die databasis. 428 00:38:39,170 --> 00:38:44,750 Maar wat laat die bediener is net HTML / JS / CSS. 429 00:38:44,750 --> 00:38:48,630 Daar is geen PHP wat laat die bediener, want as dit eintlik gedoen 430 00:38:48,630 --> 00:38:53,890 dan is die leser sal het geen idee wat om te doen met dit omdat dit nie weet wat PHP is. 431 00:38:53,890 --> 00:39:00,250 Maar in dieselfde gedagte, want JavaScript is kliënt-kant, 432 00:39:00,250 --> 00:39:02,250 jy kan nooit toegang tot MySQL daaruit. 433 00:39:02,250 --> 00:39:07,430 Omdat PHP is bediener-kant jy nie toegang MySQL daaruit. 434 00:39:07,430 --> 00:39:12,880 >> [Studente] Kan jy gaan oor 'n paar van die veiligheid betref met koekies in HTTP? 435 00:39:12,880 --> 00:39:18,390 [Rob] Dit is nie dinge wat ons gaan nodig om te weet. 436 00:39:18,390 --> 00:39:24,500 Sommige van die veiligheid betref met koekies in HTTP. 437 00:39:24,500 --> 00:39:28,550 Die groot vraag hier is ons sien hier dat my koekie is PHP / ID. 438 00:39:28,550 --> 00:39:33,560 Dit is soos die universele PHP jou sessie. 439 00:39:33,560 --> 00:39:39,550 Jou sessie is iets wat binne-in PHP sal nooit te bekragtig moet word 440 00:39:39,550 --> 00:39:45,690 want dit is die bediener wat het volle beheer oor die sessie. 441 00:39:45,690 --> 00:39:47,690 Jy kan nie raak dit glad nie. 442 00:39:47,690 --> 00:39:53,120 Maar dit is hierdie koekie - hierdie een - 443 00:39:53,120 --> 00:39:57,500 en ek dink jy kan inteken as my nou as jy wou om dit te gebruik - 444 00:39:57,500 --> 00:40:06,610 maar dit is wat koekie dat die - noodwendig wat jy maak 'n enkele versoek aan die bediener. 445 00:40:06,610 --> 00:40:09,890 Die bediener gee die bladsy. Die versoek word gedoen. 446 00:40:09,890 --> 00:40:12,580 Dit het nie meer 'n idee wie jy is. 447 00:40:12,580 --> 00:40:17,230 So, is die volgende versoek wat jy maak gaan dit koekie te sluit, sodat hy weet 448 00:40:17,230 --> 00:40:19,810 dit is die persoon wat die versoek gerig het nie. 449 00:40:19,810 --> 00:40:23,830 Dit is die sessie data wat verband hou met hierdie gebruiker. 450 00:40:23,830 --> 00:40:28,210 Dit is waarom jy hoef nie aan te meld vir elke bladsy wat jy gebruik. 451 00:40:28,210 --> 00:40:33,380 Die sekuriteit probleem hier is dat die koekie gestuur uit oor die web. 452 00:40:33,380 --> 00:40:41,490 Ons gebruik HTTPS hier, so in hierdie geval beteken dit dat ons versleutelen hierdie dinge. 453 00:40:41,490 --> 00:40:49,870 Iemand kan nie in te kom en net my koekie steel en nou die bediener sal dink hulle is my. 454 00:40:49,870 --> 00:40:52,060 Maar met reguit HTTP hulle kan. 455 00:40:52,060 --> 00:40:57,650 Net soos hierdie Wireshark / FireSheep dinge wat jy net kan luister na al die wi-FIS in die lug 456 00:40:57,650 --> 00:41:01,380 en onderskep wat jy wil, so ja. 457 00:41:01,380 --> 00:41:12,430 >> [Studente] 'n soort van 'n soortgelyke sekuriteit risiko stoor gebruiker ID's in post 458 00:41:12,430 --> 00:41:16,860 want dit vrylik kan geredigeer word met behulp van consoles en dinge. 459 00:41:16,860 --> 00:41:23,410 [Rob] Ja. Daar is baie van die kwessies waar soos net iets wat kom van die gebruiker 460 00:41:23,410 --> 00:41:26,940 wat jy nodig het om te bevestig. 461 00:41:26,940 --> 00:41:37,650 Daar is baie van die gevalle waar dit nuttig vir soos ek is oor 'n post te maak sou wees. 462 00:41:37,650 --> 00:41:39,650 Blah, blah, blah, blah, blah. Toe slaan ek antwoord. 463 00:41:39,650 --> 00:41:44,540 Dit sou baie nuttig wees as die pos versoek ingesluit my ID, want 464 00:41:44,540 --> 00:41:48,610  Ek wil hierdie post te assosieer met my. 465 00:41:48,610 --> 00:41:54,820 Maar ek kan dit nie doen nie, want ek is vry om 'n post versoek te maak - net soos met die hand 466 00:41:54,820 --> 00:41:57,820 kom met my eie post versoek - 467 00:41:57,820 --> 00:42:00,960 wat gebruik maak van jou gebruiker-ID en nou sal dit pos as jy. 468 00:42:00,960 --> 00:42:07,440 Dit is waarom die bediener-kant Ek kan nie op die post versoeke wat die korrekte gebruiker ID staatmaak. 469 00:42:07,440 --> 00:42:09,720 Dit is waarom dit het om te behoort in my sessie. 470 00:42:09,720 --> 00:42:15,140 So ek kyk jou gebruiker-ID in my sessie verskeidenheid en ek voeg wat in my databasis 471 00:42:15,140 --> 00:42:17,580 as die gebruiker wat eintlik het hierdie post. 472 00:42:17,580 --> 00:42:19,580 [Studente] En dit is gebaseer op jou koekie? 473 00:42:19,580 --> 00:42:24,690 [Rob] Ja. Dit maak gebruik van die koekie aan te pas wat jy as die gebruiker wat dit versoek. 474 00:42:24,690 --> 00:42:30,570 Dit trek uit die gebruiker ID van daardie sessie en dat dan plaas in die databasis 475 00:42:30,570 --> 00:42:32,960 met behulp van die gebruiker ID. 476 00:42:32,960 --> 00:42:40,330 Dit wil knoppie - wat dit is eintlik doen, is - 477 00:42:40,330 --> 00:42:43,810 Ek is nie van plan om dit hier te vind. Dit gaan 'n Ajax funksie te wees 478 00:42:43,810 --> 00:42:46,780 Wat is Ajax funksie? 479 00:42:46,780 --> 00:42:55,500 Laat my uit te vind wat my JavaScript is. 480 00:42:55,500 --> 00:42:59,710 Dit was 'n CS50 projek om 'n ruk gelede. 481 00:42:59,710 --> 00:43:02,880 Ek kan nie onthou wat dit is. 482 00:43:02,880 --> 00:43:12,530 Ajax funksie - al Ajax funksie doen, is om 'n Ajax versoek om 'n bladsy met die ID - 483 00:43:12,530 --> 00:43:15,810 met die ID 22453. 484 00:43:15,810 --> 00:43:20,180 Dit is nie eens 'n pos versoek. Dit is 'n get versoek wat dit nog makliker maak. 485 00:43:20,180 --> 00:43:27,860 As ek geweet het wat die URL is nie - dit is iets soos soos hierdie / ID = 22453 - 486 00:43:27,860 --> 00:43:33,290 of ID = 22453? - 487 00:43:33,290 --> 00:43:40,290 so besoek hierdie skakel sal dit graag. 488 00:43:40,290 --> 00:43:44,600 Wat sou nie so veel van 'n probleem nie, maar dit is baie maklik om 'n lus om te skryf 489 00:43:44,600 --> 00:43:48,500 wat net gaan hierdie skakel weer oor en oor te besoek, wat is die rede waarom jy sien 490 00:43:48,500 --> 00:43:51,180 Isawyouharvard plaas met duisende van die dinge. 491 00:43:51,180 --> 00:43:56,960 En hulle is geneig CS50-gebaseerde Isawyouharvard poste te wees. 492 00:43:56,960 --> 00:44:01,200 Hoe kry ek die mees gewilde? 493 00:44:01,200 --> 00:44:03,720 Hulle is geneig om redelik vinnig te verwyder kry ook. 494 00:44:03,720 --> 00:44:06,490 Dit is nie die mees populêre. Daar gaan ons. 495 00:44:06,490 --> 00:44:13,400 Cheaters op die mees graag bladsy - dis nogal relevant is vir hierdie oomblik. 496 00:44:13,400 --> 00:44:21,230 Oh wow. Hulle het reeds verwyder enige van die kinders van die jaar wat reeds 497 00:44:21,230 --> 00:44:25,590 verneuk. Diegene het al verwyder. 498 00:44:25,590 --> 00:44:28,680 Daar sal nooit 'n pos wat kry hierdie hoë. 499 00:44:28,680 --> 00:44:32,860 Hierdie een is natuurlik verneuk te kry op die mees graag bladsy. 500 00:44:36,570 --> 00:44:39,310 >> Meer vrae? 501 00:44:39,310 --> 00:44:46,050 [Studente] Wat moet ons weet oor XHTML? 502 00:44:46,050 --> 00:44:49,710 [Rob] Feitlik niks. Presies wat dit is. 503 00:44:49,710 --> 00:44:59,220 Die verskil tussen dit en HTML is dat XML is baie soortgelyk in voorkoms 504 00:44:59,220 --> 00:45:09,080 HTML behalwe in HTML ons moet net 'n vooraf stel van etikette te hê. 505 00:45:09,080 --> 00:45:15,380 Maar met XML - XML ​​is net soos 'n algemene formaat waar jy kan 'n XML-dokument maak 506 00:45:15,380 --> 00:45:17,580 vir watter doeleindes jy wil. 507 00:45:17,580 --> 00:45:25,950 So, byvoorbeeld, as ek wou ek kon 'n XML vir die kursusse bou - 508 00:45:25,950 --> 00:45:28,860 en ek dink eintlik dat CS50 het 'n API vir hierdie. 509 00:45:28,860 --> 00:45:31,590 My XML dokument kan iets lyk - 510 00:45:31,590 --> 00:45:39,330 kursusse en natuurlik het ek moet 'n paar einde kursusse. 511 00:45:39,330 --> 00:45:48,920 Ek kon 'n kursus het en dit kan 'n naam is gelyk aan CS50. 512 00:45:48,920 --> 00:45:58,080 En dan my einde loop en ek kon in plaas van hier studente, 513 00:45:58,080 --> 00:46:07,010 en dan binnekant van studente Ek het 'n lys van 'n student wie se naam is ook al. 514 00:46:07,010 --> 00:46:10,180 Ek eindig dat student en so aan. 515 00:46:10,180 --> 00:46:16,070 Ek het net gebeur het 'n paar arbitrêre XML-dokument gebou, maar dit is geldig XML. 516 00:46:16,070 --> 00:46:23,700 XML - al is dit is hierdie soort van struktuur en die lekker ding - die rede dat ons selfs noem dit XML 517 00:46:23,700 --> 00:46:26,820 is dat hierdie soort van ding is baie maklik om te ontleed nie. 518 00:46:26,820 --> 00:46:32,580 Dit is baie maklik om hierdie dokument te neem en 'n skikking uit dit uit. 519 00:46:32,580 --> 00:46:39,370 En so XHTML is 'n poging om HTML geldige XML te wees. 520 00:46:39,370 --> 00:46:42,580 Reeds dit lyk redelik soortgelyk aan HTML. 521 00:46:42,580 --> 00:46:52,160 Sommige van die verskille is HTML jy in staat is om dinge soos om insette te doen miskien soort gelyk aan die teks 522 00:46:52,160 --> 00:46:55,550 dit is die standaard, so ek het nie nodig om te sê dat. 523 00:46:55,550 --> 00:47:00,010 Afgeskakel. 524 00:47:00,010 --> 00:47:05,160 >> Daar is 2 dinge hier wat hierdie ongeldig XHTML. 525 00:47:05,160 --> 00:47:08,750 Die eerste ding is dat alle XML-tags moet 'n sluitingsdatum tag. 526 00:47:08,750 --> 00:47:13,040 So in die geval van die insette wat ek nodig het om te doen om die - wat rigting van die streep is dit? 527 00:47:13,040 --> 00:47:15,060 Hierdie rigting? Dit lyk verkeerd. 528 00:47:15,060 --> 00:47:19,380 Ander rigting. 529 00:47:19,380 --> 00:47:21,960 Self-sluittag. 530 00:47:21,960 --> 00:47:29,560 Die tweede ding is dat met XML moet jy hierdie soort van soos sleutel waarde pare. 531 00:47:29,560 --> 00:47:32,130 Dit moet 'n waarde wat verband hou met dit. 532 00:47:32,130 --> 00:47:35,050 So, selfs al gestremdes in en van die self spreek wat ek wil - 533 00:47:35,050 --> 00:47:37,110 Hierdie insette moet afgeskakel word - 534 00:47:37,110 --> 00:47:39,110 dit is ongeldig XHTML. 535 00:47:39,110 --> 00:47:47,110 Wat ek eintlik moet skryf is afgeskakel gelyk aan gestremdes. 536 00:47:47,110 --> 00:47:49,620 Nou is dit geldige XHTML. 537 00:47:49,620 --> 00:47:54,850 En dit is net die effense verskille wat HTML transformeer na 'n XML-gebaseerde soort van ding. 538 00:47:54,850 --> 00:48:04,880 >> [Studente] XML is oor soos trek deur jou eie X heeltemal soos hoekom is dit (onhoorbaar) 539 00:48:04,880 --> 00:48:19,450 [Rob] Die ding van soos 'n CSV - 'n CSV jy net waardes geskei deur - 540 00:48:19,450 --> 00:48:23,550 dink net aan 'n sigblad. 'N CSV is basies 'n sigblad. 541 00:48:23,550 --> 00:48:26,720 Jy het miskien kolomme en jy het 'n klomp van die rye wat 542 00:48:26,720 --> 00:48:29,600 mede-data met dié kolomme, maar dit is dit. 543 00:48:29,600 --> 00:48:38,310 XML is baie meer veelsydig in wat jy kan - jy het 'n arbitrêre hiërargie van data. 544 00:48:38,310 --> 00:48:43,200 Ek kon verskeie kursusse wat verskeie studente in dit het 545 00:48:43,200 --> 00:48:45,460 waar dit moeilik sou wees om te dink van 'n spreadsheet dat - 546 00:48:45,460 --> 00:48:51,010 net dat enkele spreadsheet - CSV is veral soos net 'n enkele spreadsheet - 547 00:48:51,010 --> 00:48:58,760 sodat enkele spreadsheet met al CS50, 51 en 61, en binne die al die 548 00:48:58,760 --> 00:49:03,230 studente wat verband hou met die tye, miskien ontmoet tye en al daardie soort van ding. 549 00:49:03,230 --> 00:49:09,140 Die ander ding is dat die etiket name gee 'n mooi naam vir al die elemente 550 00:49:09,140 --> 00:49:13,140 so lees van 'n CSV lêer kan moeilik wees om te probeer en ontleed wat dit is eintlik sien wees. 551 00:49:13,140 --> 00:49:20,130 XML is baie meer mens-leesbare so dit is waarom wil - kom tot 'n persoon wat nie 552 00:49:20,130 --> 00:49:26,380 regtig weet wat 'n CSV of wil nie 'n programmeerder of iets - 553 00:49:26,380 --> 00:49:30,640 jy hulle kan gee soos 'n sjabloon XML lêer en hulle het die lyne kan volg en - 554 00:49:30,640 --> 00:49:33,590 O, ek is veronderstel om my naam te plaas hier. 555 00:49:33,590 --> 00:49:37,440 Dit is 'n baie meer bruikbare formaat. 556 00:49:37,440 --> 00:49:42,440 CSV het baie van die gebruike maar XML het verskillende gebruike. 557 00:49:46,050 --> 00:49:49,680 >> Meer vrae? 558 00:49:49,680 --> 00:49:51,900 Ander vrae? 559 00:49:56,410 --> 00:50:00,520 [Studente] Uit die vorige toets - vertikale skaal teenoor horisontale skaal nie. 560 00:50:00,520 --> 00:50:04,660 [Rob] Jy sal nie nodig om te weet dat. Ek dink nie ons het selfs bespreek dit. 561 00:50:04,660 --> 00:50:07,340 Ek vermoed dit was net 'n een-off kommentaar. 562 00:50:07,340 --> 00:50:12,660 Oh. Horisontale versus vertikale skaal is nie iets wat jy nodig het om te weet. 563 00:50:12,660 --> 00:50:18,570 Ek dink die verskil is net soos - ja, die antwoord sleutel sal die verskil sê. 564 00:50:18,570 --> 00:50:26,030 Vertikale skaal is net soos O, my rekenaar se swak doen. Ek kry 'n beter een. 565 00:50:26,030 --> 00:50:29,150 Terwyl horisontale skaal is O, my rekenaar swak doen - 566 00:50:29,150 --> 00:50:33,360 laat my sommer 20 van hulle te alle werk op die dieselfde taak. 567 00:50:40,300 --> 00:50:45,520 >> [Studente] Kan ons gaan oor die geskakelde lys manier om toue. >> [Rob] Seker nie. 568 00:50:45,520 --> 00:50:50,000 Dit is makliker as die skikking manier. 569 00:50:50,000 --> 00:50:53,140 Die gekoppelde lys manier om toue. 570 00:50:53,140 --> 00:50:58,350 Eerstens, wat beteken ons struct vir 'n geskakelde lys lyk? 571 00:50:58,350 --> 00:51:17,060 [Studente] Is ons doen dit vir - >> [Rob] Kom ons doen die - ja. 572 00:51:17,060 --> 00:51:30,000 Int val, dan struct knoop * langs; 573 00:51:30,000 --> 00:51:34,560 so dit is wat ons vir die voorbeeld sal gebruik hier. 574 00:51:34,560 --> 00:51:37,660 Kom ons eintlik tik hierdie dinge. 575 00:51:40,030 --> 00:51:49,600 Kom ons doen linked_list. 576 00:51:51,750 --> 00:51:53,750 Ons struct - 577 00:52:05,360 --> 00:52:13,060 Goed. Nou kyk na ons ry ons die - 578 00:52:13,060 --> 00:52:16,090 laat ons net 'n globale tou. 579 00:52:16,090 --> 00:52:23,130 Dit sal knoop * tou wees, en ons het 'n dequeue funksie. 580 00:52:23,130 --> 00:52:28,330 Ek dink hierdie dinge kan ook ongedaan waar of vals - laat doen. 581 00:52:28,330 --> 00:52:38,690 Bool dequeue - en ons dequeueing - o. Hmm. 582 00:52:38,690 --> 00:52:45,200 Int dequeue - wat het ons met die voor? 583 00:52:45,200 --> 00:52:54,340 Int dequeue en ons het Bool enqueue en ons moet 'n paar wyse te enqueue waar. 584 00:52:54,340 --> 00:53:01,360 Kom ons doen enqueue eerste. 585 00:53:01,360 --> 00:53:06,520 Ons het ons tou. Ons wil iets te voeg in die tou. 586 00:53:06,520 --> 00:53:12,720 Wat is die beste manier om dit te doen? 587 00:53:12,720 --> 00:53:20,270 Hier ons tou lyk tans soos ons 'n paar globale wyser te begin. 588 00:53:20,270 --> 00:53:24,910 Daar is ons ry. 589 00:53:24,910 --> 00:53:30,350 Die veronderstelling dat ons dequeue deur die neem van die eerste element, 590 00:53:30,350 --> 00:53:36,570 waar gaan ons wil hê dat ons node in te voeg sodat die toue te werk soos hulle moet nie? 591 00:53:36,570 --> 00:53:43,440 [Studente] Aan die einde. >> [Rob] Ja. Toue is veronderstel om eers uit te wees in die eerste plek. 592 00:53:43,440 --> 00:53:48,030 Dit beteken dat die nuwe element moet ingevoeg word hier. Goed. 593 00:53:48,030 --> 00:53:53,220 >> Terug te kom na kode, 594 00:53:53,220 --> 00:53:59,760 dit beteken dat ons sal wil loop oor ons ry. 595 00:53:59,760 --> 00:54:10,210 Kom ons doen knoop * huidige = tou, terwyl die huidige nie gelyk NULL. 596 00:54:10,210 --> 00:54:16,960 Ek sou doen - alles reg, kom ons doen dit apart. 597 00:54:16,960 --> 00:54:20,460 Eerstens, die huidige = tou. 598 00:54:20,460 --> 00:54:24,660 Wat doen ons as die huidige begin as NULL? 599 00:54:24,660 --> 00:54:28,410 Ons sal dit doen op 2 maniere. Eerste op hierdie manier. 600 00:54:28,410 --> 00:54:31,450 Wat doen ons as die huidige is NULL? 601 00:54:31,450 --> 00:54:34,850 Is dit gelyk aan indien tou is NULL? 602 00:54:38,550 --> 00:54:43,960 [Studente] Dit gaan valse om terug te keer. >> [Rob] Moet ons valse terugkeer? 603 00:54:43,960 --> 00:54:47,120 Wat is verkeerd met die inbring van iets in 'n leë lys? 604 00:54:47,120 --> 00:54:49,080 [Studente] Niks is verkeerd met dat. Jammer. 605 00:54:49,080 --> 00:54:55,980 [Rob] Ja. So hier is die enigste verskil is my globale tou is wat gestuur word na my nuwe knoop. 606 00:54:57,840 --> 00:55:02,880 En dan moet ek my tjeks van As tou is NULL te doen. 607 00:55:02,880 --> 00:55:05,960 Terug onwaar. 608 00:55:05,960 --> 00:55:20,910 En dan die tou val is gelyk aan i; tou langs gelyk NULL, terug waar. 609 00:55:20,910 --> 00:55:25,890 Goed. Ek gaan die geweer te spring hier. 610 00:55:25,890 --> 00:55:29,570 Onthou wat ons gedoen het dat dit die laaste tyd 611 00:55:29,570 --> 00:55:35,660 waar ons het gesê dit is baie makliker om te werk met knoop ** met hierdie soort van ding. 612 00:55:35,660 --> 00:55:43,880 So nou die huidige gaan wees en tou, en kom tot hier - 613 00:55:43,880 --> 00:55:53,010 terwyl die huidige - terwyl * huidige nie gelyk NULL - 614 00:55:53,010 --> 00:55:58,230 so laat my net nie die huidige - we'll praat oor dit in 'n tweede. 615 00:55:58,230 --> 00:56:00,860 Huidige volgende. Goed. 616 00:56:00,860 --> 00:56:12,910 Kyk na dit op hierdie manier, is hierdie iterating oor al my verwysings totdat ek bereik 'n nul wyser. 617 00:56:12,910 --> 00:56:17,710 Die nul wyser gaan die wyser Ek wil vervang met my nuwe node te wees. 618 00:56:17,710 --> 00:56:21,910 Kyk na iPad weergawe - 619 00:56:21,910 --> 00:56:27,800 As my oorspronklike wyser en die geskakelde lys is leeg het die huidige gaan hier wys. 620 00:56:27,800 --> 00:56:29,630 Dit gaan om te wys op nul is, 621 00:56:29,630 --> 00:56:34,440 so dit is die wyser ek uiteindelik beweeg om te wys op 'n paar ander nuwe knoop. 622 00:56:34,440 --> 00:56:38,150 Terwyl as die voorbeeld is die geval hier 623 00:56:38,150 --> 00:56:42,720 dan is die huidige gaan deurkruis van hier - ek deurmekaar effens. 624 00:56:42,720 --> 00:56:50,700 Waar huidige is veronderstel om die adres van die huidige volgende te wees. 625 00:56:50,700 --> 00:57:00,200 Is dit wat ek wil hê? Huidige so * huidige gee my 'n knoop. 626 00:57:00,200 --> 00:57:04,440 Volgende deurkruis na die volgende een. 627 00:57:04,440 --> 00:57:10,700 Ek is tans hier wys. 628 00:57:10,700 --> 00:57:13,720 Kom ons doen rooi - so ek tans hier wys. 629 00:57:13,720 --> 00:57:19,710 Toe * huidige gaan hierdie knoop te verwys. 630 00:57:19,710 --> 00:57:25,080 En * huidige volgende verwysings hierdie knoop, maar dit is nie wat ek wil hê. 631 00:57:25,080 --> 00:57:27,700 Ek wil dit wyser na daardie knoop. 632 00:57:27,700 --> 00:57:40,530 So, wat wyser na hierdie knoop is ampersand (* huidige) langs. 633 00:57:47,660 --> 00:57:54,360 >> Op hierdie punt in tyd Ek het amptelik by die knoop wat ek wil vervang. 634 00:57:54,360 --> 00:58:13,770 Kom ons vervang al hierdie toue huidige - en nou is ons klaar is. 635 00:58:13,770 --> 00:58:21,760 Daar mag typos, maar die idee is dat met insetsel in hierdie soort van manier 636 00:58:21,760 --> 00:58:28,130 is dit makliker om te werk met die wenke wat ons wil verander 637 00:58:28,130 --> 00:58:32,780 in plaas van die behoefte om tred te hou - okay, is my begin NULL? 638 00:58:32,780 --> 00:58:36,430 O dit is? Dan moet ek die begin knoop te skep iets spesifiek te wees 639 00:58:36,430 --> 00:58:40,310 anders sal ek wil Itereer tot die volgende ding wat ek verwys na NULL 640 00:58:40,310 --> 00:58:46,740 en dan sal ek te vervang wat - wat die volgende ding is - na my malloc knoop. 641 00:58:46,740 --> 00:58:50,740 In plaas van dat die gevalle van mekaar te skei, hier het ek net met die geval van 642 00:58:50,740 --> 00:58:54,990 Wat is die wyser wat NULL wat ek wil nie meer te nul, 643 00:58:54,990 --> 00:59:01,820 en dit maak die lewe makliker buiten hierdie moet almal * huidige nou, want - 644 00:59:01,820 --> 00:59:05,460 [Studente] Is hulle nog die grootte van 'n knoop? 645 00:59:05,460 --> 00:59:10,480 [Rob] Ja. Ek is nog steeds mallocing 'n knoop. 646 00:59:10,480 --> 00:59:12,980 [Studente] Is dit gaan om die grootte van 'n knoop * te wees? 647 00:59:12,980 --> 00:59:20,990 [Rob] terug te kom na hier, dink aan die geval as dit is ons verbind lys. 648 00:59:28,330 --> 00:59:33,190 Hierdie man wys af te null. 649 00:59:33,190 --> 00:59:36,950 Na dat die rede waarom lus, huidige punte hier 650 00:59:36,950 --> 00:59:41,510 want dit is die wyser wat NULL. 651 00:59:41,510 --> 00:59:50,380 Nou wil ek dit wyser om te verander om te wys op 'n nuwe knoop. 652 00:59:50,380 --> 00:59:58,390 Ek het eers malloc dat die nuwe knoop - so malloc grootte van node. 653 00:59:58,390 --> 01:00:11,070 En dit gee 'n knoop * en nou die verandering van hierdie wyser is besig om na * huidige gelykes 654 01:00:11,070 --> 01:00:15,780 hierdie nuwe knoop wat ek toegeken. 655 01:00:15,780 --> 01:00:26,490 So, as die huidige is 'n knoop **, dan * huidige gaan 'n knoop te wees *, 656 01:00:26,490 --> 01:00:32,540 en as ek iets mallocing die grootte van knoop dan is dit terug 'n verwysing na 'n knoop 657 01:00:32,540 --> 01:00:39,630 so dit is 'n knoop * - so albei kante korrek dieselfde tipe. 658 01:00:39,630 --> 01:00:46,610 En so, as wat ek nou net toegeken NULL was, terugkeer, vals is; 659 01:00:46,610 --> 01:00:54,750 anders klaar die opstel van hulle wat ek wil hê hulle moet wees nie - behalwe dit moet hakies 660 01:00:54,750 --> 01:00:57,730 want dit is nie hoe die orde van die dinge werk. 661 01:00:57,730 --> 01:00:59,690 Sonder die hakies wat dit vertaal is as 662 01:00:59,690 --> 01:01:03,010 huidige-pyl-Val dereference dat. 663 01:01:03,010 --> 01:01:07,010 In plaas daarvan wil ek dereference huidige Dit bring my by 'n knoop. 664 01:01:07,010 --> 01:01:10,620 Dan wil ek die waarde wat verband hou met die knoop te kry. 665 01:01:10,620 --> 01:01:17,670 >> [Studente] Ek het gedink pyle toegelaat dat te omseil en gaan reguit na die waarde. 666 01:01:17,670 --> 01:01:22,640 [Rob] Hulle doen. Dit is as ek - laat ons sê tou is 'n voorbeeld. 667 01:01:22,640 --> 01:01:28,400 Ek is toegelaat om te doen tou-pyl-Val gelyk i want tou is 'n knoop *. 668 01:01:28,400 --> 01:01:39,160 As daar 'n paar mooi sintaksis van soos die huidige-langer pyl-val of iets 669 01:01:39,160 --> 01:01:42,540 wat het 2 dereferences, dan is dit goed sal werk. 670 01:01:42,540 --> 01:01:44,790 [Studente] So het die pyl is slegs vir 1 dereference. >> [Rob] Ja. 671 01:01:44,790 --> 01:01:53,590 Alternatiewelik kan ek hierdie skryf as (** current.val). 672 01:01:53,590 --> 01:02:02,490 Net soos ek ook tou kon skryf as (* tou). Val. 673 01:02:04,430 --> 01:02:09,250 So laat se plaas. Wel, dit is in die tou wat ek dink. 674 01:02:09,250 --> 01:02:12,030 Dequeue gaan aansienlik korter. 675 01:02:12,030 --> 01:02:18,280 Kom ons sit leemte in hier vir netheid. 676 01:02:18,280 --> 01:02:22,820 So, dequeue. Wat element ek dequeueing? 677 01:02:22,820 --> 01:02:24,820 [Studente] Die eerste een? >> [Rob] Ja. 678 01:02:24,820 --> 01:02:32,880 As my eerste een is NULL - terugkeer - Ek weet nie wat ons wil hê om terug te keer - INT_MAX; 679 01:02:32,880 --> 01:02:37,580 en dan moet jy 'n tjek te doen om te sien of INT_MAX terugbesorg. 680 01:02:37,580 --> 01:02:44,090 Dit is die soort van ding wat raak inc nie anders wat ons wil - 681 01:02:44,090 --> 01:02:54,610 kan ons net terug ry val? Is dit wat ons wil doen? 682 01:02:54,610 --> 01:02:58,010 Dequeue ook implisiet verwyder die item uit die tou, 683 01:02:58,010 --> 01:03:10,840 so laat ons sê eers - laat ons 'n tmp om te wys op die eerste knoop van ons ry. 684 01:03:10,840 --> 01:03:15,510 Nou wil ons ons tou te bevorder na punt na die volgende ding in die tou. 685 01:03:15,510 --> 01:03:21,450 Nou het ons 'tmp linkerkant. TMP val is die ding wat ons wil hê om terug te keer. 686 01:03:21,450 --> 01:03:24,180 So, Val = tmp-> val; 687 01:03:24,180 --> 01:03:31,190 Maar voordat ons dit terug moet ons bevry tmp en terug val. 688 01:03:31,190 --> 01:03:36,350 Die volgorde van bedrywighede hier is belangrik in die sin dat ons 'n tmp te gryp 689 01:03:36,350 --> 01:03:40,520 voordat ons ry na die volgende element. 690 01:03:40,520 --> 01:03:44,860 Ons moet die waarde te kry voordat ons tmp, 691 01:03:44,860 --> 01:03:48,710 en dan kan ons die Val terug. 692 01:03:48,710 --> 01:03:50,680 >> [Studente] Indien ons die tou langs die tou? 693 01:03:50,680 --> 01:03:57,800 [Rob] Ja. Dit is die skep van 'n slegte lus / dit sal nie werk ná die vrylating dit in elk geval. 694 01:03:57,800 --> 01:03:59,900 Tou = tou-> volgende. 695 01:03:59,900 --> 01:04:03,230 Ons wil die tou te bevorder na die volgende element nie die volgende element bevorder 696 01:04:03,230 --> 01:04:08,170 wat die element is tans. 697 01:04:08,170 --> 01:04:17,660 Stapels sal aansienlik wees - soos nog makliker in daardie dequeue is presies dieselfde 698 01:04:17,660 --> 01:04:20,190 omdat ons trek uit die voorkant van die stapel. 699 01:04:20,190 --> 01:04:24,030 Einde tou sou baie soortgelyke waar ons wil net 'n knoop te ken 700 01:04:24,030 --> 01:04:27,670 en voeg in die voorkant van die stapel, so ons hoef nie eens te loop oor enigiets. 701 01:04:27,670 --> 01:04:31,420 Ons het net direk voeg aan die voorkant. 702 01:04:42,500 --> 01:04:44,640 Is almal goed op wat? 703 01:04:44,640 --> 01:04:49,760 >> Goed. Meer vrae? 704 01:04:49,760 --> 01:04:56,570 [Studente] Wat groot dinge moet ek in gedagte hou van die mees onlangse lesing? 705 01:04:56,570 --> 01:04:58,730 [Rob] Die mees onlangse lesing. 706 01:04:58,730 --> 01:05:01,620 Jy hoef nie 'n kode te leer ken. 707 01:05:01,620 --> 01:05:07,590 Jy moet weet wat die oorkoepelende idees. 708 01:05:07,590 --> 01:05:11,650 Nate se helfte het nie 'n kode het en so die skyfies aanlyn. 709 01:05:11,650 --> 01:05:15,220 Hulle is net soos n blik op hulle, en hulle het die groot idees. 710 01:05:15,220 --> 01:05:28,630 My helfte - wetende dat die oorhoofse idee van die eerste kan jy nie vertrou nie. 711 01:05:28,630 --> 01:05:38,070 Die feit dat net soos miskien die proses van die samesteller kan sleg wees, 712 01:05:38,070 --> 01:05:40,870 maar dit nie eens saak dat die bron-kode lyk goed. 713 01:05:40,870 --> 01:05:46,390 Omdat die samesteller kan spesifiek aangepas word om die bronkode te verander 714 01:05:46,390 --> 01:05:50,860  in die proses van die opstel van. 715 01:05:50,860 --> 01:05:58,140 Op dieselfde tyd, net soos - ek dink dit is soos die groot idees van dit. 716 01:05:59,560 --> 01:06:09,030 >> [Studente] Het jy noem dat ons hoef nie enigiets wat verband hou Firesheep om te weet - 717 01:06:09,030 --> 01:06:13,110 of moet ons dit ken? 718 01:06:13,110 --> 01:06:18,360 [Rob] Met Nate se helfte van die dinge, enigiets wat Nate aangeraak - 719 01:06:18,360 --> 01:06:22,760 soos FireSheep, Wireshark - ek het nie eens dink wat hy gedoen het Firesheep in detail. 720 01:06:22,760 --> 01:06:28,620 Jy het ook iets met daardie - dit was Firesheep - laaste week? 721 01:06:28,620 --> 01:06:31,110 Het jy raak op daardie? 722 01:06:31,110 --> 01:06:34,060 [Studente] Ja, ek dink ons ​​kan hê - >> [Rob] Ja. 723 01:06:34,060 --> 01:06:40,880 Ons is nie van plan om jou te gee Firesheep uitset en sê dit interpreteer. 724 01:06:40,880 --> 01:06:44,960 Dit is net gaan om te wees nie - dit sal 'n vraag soos wat Firesheep wees? 725 01:06:44,960 --> 01:06:47,290 Wat is dit gebruik? 726 01:06:47,290 --> 01:06:52,120 [Studente] Ek dink dit werk net op weergawe 4 van Firefox of iets. 727 01:06:52,120 --> 01:06:55,320 [Rob] Dit kan gebreek word deur die nou. 728 01:07:11,430 --> 01:07:14,070 Ek het geen idee nie. 729 01:07:14,070 --> 01:07:18,330 Hulle lyk nie om dit met die hand afgeskakel, 730 01:07:18,330 --> 01:07:21,210 maar miskien is dit nie werk met die mees onlangse Firefox. 731 01:07:21,210 --> 01:07:24,790 [Studente] Ek het eintlik probeer om die installering van dit, want dit het gesê dit versoenbaar sou wees. 732 01:07:24,790 --> 01:07:28,880 [Rob] So, ek dink dit werk nie met die mees onlangse Firefox. 733 01:07:28,880 --> 01:07:32,360 Maar die idee nog staan ​​van wat dit veronderstel was om te wys. 734 01:07:32,360 --> 01:07:39,430 Dit was absurd hoeveel van die wêreld is nie die lewe in HTTPS in die tyd. 735 01:07:39,430 --> 01:07:43,820 Selfs in die laaste 2 jaar of wat ook al, dit is nog steeds - daar is dramatiese verbetering in die 736 01:07:43,820 --> 01:07:47,210 aantal webtuistes wat gebruik HTTPS. 737 01:07:49,920 --> 01:07:52,580 >> [Studente] Moet ons oor te gaan HTTP? 738 01:07:52,580 --> 01:07:58,050 [Rob] Die protokol van dit? >> [Studente] Sommige van die dinge wat ons moet weet. 739 01:07:58,050 --> 01:08:06,220 [Rob] Alle regte. Basiese dinge is alles wat jy kan sien in jou blad netwerk. 740 01:08:06,220 --> 01:08:12,160 Toe ek 'n bladsy - terug te kom na die top van die belangrikste dinge. 741 01:08:12,160 --> 01:08:16,090 Jy kan sien hier die versoek wat ek maak. 742 01:08:16,090 --> 01:08:19,220 Chrome gebeur dit alles om die formaat van mooi vir ons 743 01:08:19,220 --> 01:08:21,970 waar die versoek URL was dit, die versoek metode was AOO, 744 01:08:21,970 --> 01:08:24,800 en die status kode was 200 OK. 745 01:08:24,800 --> 01:08:28,279 As ek getref view source, ek sien meer direk dat - 746 01:08:28,279 --> 01:08:35,680 en dit is - ons kon jou wys een van hierdie nie, maar dit is nie te moeilik om te interpreteer tussen hulle. 747 01:08:35,680 --> 01:08:41,729 Hier is die regstreekse versoek wat ek gemaak het, so dit beteken dat ek na 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 En die protokol dit gebruik was HTTP/1.1 wat is feitlik nie - dit is altyd gaan om dit te wees. 750 01:08:57,569 --> 01:09:01,490 Hier het ons gewoond te raak, so dit is dalk ook POS. 751 01:09:01,490 --> 01:09:04,660 En dan kom neer - al die pad af te reaksie kop - as ons sien dat die bron, 752 01:09:04,660 --> 01:09:07,740 dit is waar ons die 200 OK. 753 01:09:07,740 --> 01:09:11,069 Ken die moontlike verskillende status kode van hierdie. 754 01:09:11,069 --> 01:09:15,520 Ek dink in die hersiening ons nie sê 'n paar van hierdie, 755 01:09:15,520 --> 01:09:20,640 so 403, 404 - dié soort van algemene hiervan. 756 01:09:20,640 --> 01:09:26,810 Dit is die groot idee van dit. 757 01:09:29,990 --> 01:09:35,120 Die verskil tussen net HTTP en HTTPS is dit encryption. 758 01:09:35,120 --> 01:09:42,319 >> [Studente] Is jy gedoen? >> [Rob] Ek dink nie so nie. Wel, yep. 759 01:09:42,319 --> 01:09:46,470 [Studente] Sal jy praat baie oor die algemeen oor hoe enkripsie werke? 760 01:09:46,470 --> 01:09:49,920 Omdat ons gepraat byvoorbeeld wanneer die comprimeren Huffman lêers, 761 01:09:49,920 --> 01:09:54,890 jy weet hoe om hulle te decomprimeren omdat jy eintlik die hashtable gestuur in die lêer 762 01:09:54,890 --> 01:09:56,950 So hoe werk versleuteling? 763 01:09:56,950 --> 01:10:00,830 Hoe kan jy weet hoe om inligting te enkripteer as jy nie eintlik gestuur om die kliënt 764 01:10:00,830 --> 01:10:05,740 die sleutel tot die - en jy kan eintlik gryp die sleutel van -? 765 01:10:05,740 --> 01:10:07,740 Hoe die algemene proses werk? 766 01:10:07,740 --> 01:10:09,870 [Rob] Die algemene proses van kodering - 767 01:10:09,870 --> 01:10:15,590 Dit is 'n ongelooflike gedetailleerde vraag wat ek sal beantwoord. 768 01:10:15,590 --> 01:10:21,490 Daar is 'n kort - Wel, ek en Tommy het die kort. 769 01:10:21,490 --> 01:10:26,060 Ongelukkig is dit soos 26 minute, so dit is nie 'n kort. Dit is 'n lang. 770 01:10:26,060 --> 01:10:31,530 Maar ons kort op RSA wat is net een voorbeeld van hierdie, 771 01:10:31,530 --> 01:10:40,420 en dit RSA is deel van die algehele HTTPS-protokol. 772 01:10:40,420 --> 01:10:46,060 Die idee - RSA is 'n voorbeeld van die publieke sleutel kriptografie, 773 01:10:46,060 --> 01:10:49,690 wat beteken dat jy 2 aparte sleutels. 774 01:10:49,690 --> 01:10:51,690 Jy gebruik 1 sleutel om werklik dinge enkripteer, 775 01:10:51,690 --> 01:10:54,410 en julle 'n ander sleutel gebruik om dinge te ontsyfer. 776 01:10:54,410 --> 01:10:58,360 Hierdie sleutel wat jy gebruik om dinge te enkripteer is die een wat die publiek. 777 01:10:58,360 --> 01:11:03,500 Die webwerf kan jy dit stuur enkripsie sleutel. 778 01:11:03,500 --> 01:11:08,280 Hulle doen jou stuur nie dat kodering sleutel, en wanneer jy wil om iets terug te stuur na hulle 779 01:11:08,280 --> 01:11:13,550 jy gebruik wat enkripsiesleutel al jou data te enkripteer en stuur dit aan hulle. 780 01:11:13,550 --> 01:11:16,110 So, hulle is die enigste wat met die private sleutel. 781 01:11:16,110 --> 01:11:22,630 As dit private sleutel bekend geword toe iemand in staat sal wees om jou data te ontsyfer. 782 01:11:22,630 --> 01:11:27,980 Maar dat private sleutel - wat is wiskundig verwant aan die publieke sleutel, maar jy kan nie 783 01:11:27,980 --> 01:11:33,640 vind een uit die ander - sodat private sleutel kan gebruik word om die data te ontsyfer. 784 01:11:33,640 --> 01:11:36,630 Want hulle is die enigste wat met die private sleutel 785 01:11:36,630 --> 01:11:38,920 hulle is die enigstes wat die data kan lees. 786 01:11:38,920 --> 01:11:44,170 So selfs al is die publieke sleutel is publiek, 787 01:11:44,170 --> 01:11:47,660 Ek gebruik dieselfde - as ek gaan na Google.com of wat ook al, 788 01:11:47,660 --> 01:11:50,010 hulle mag hê veelvuldige, ek weet nie - maar as ek gaan na Google.com, 789 01:11:50,010 --> 01:11:54,770 hy gaan na Google.com, sy gaan na Google.com-- 790 01:11:54,770 --> 01:11:59,250 ons almal kan dieselfde publieke sleutel gebruik om ons eie inligting te maar ons wil enkripteer. 791 01:11:59,250 --> 01:12:04,010 Maar nie een van ons gaan in staat wees om uit te vind - gaan in staat wees om te decrypt 792 01:12:04,010 --> 01:12:09,940 om hul inligting, want die publieke sleutel nie in staat is om te decrypt. 793 01:12:09,940 --> 01:12:13,050 Dit kan net enkripteer. 794 01:12:13,050 --> 01:12:23,250 En dit is pret / gedetailleerde wiskunde van - soos 'n klomp van die module operateurs en Exponentiële en dinge, 795 01:12:23,250 --> 01:12:28,890 dat dit net werk uit dat die private sleutel is die enigste ding wat kan 796 01:12:28,890 --> 01:12:33,620 decrypt die publieke sleutel enkripsie se dinge. 797 01:12:33,620 --> 01:12:38,020 Ja. Sien die RSA kort vir meer besonderhede. 798 01:12:38,020 --> 01:12:41,880 [Studente] Is dit op die webwerf? 799 01:12:41,880 --> 01:12:46,210 [Rob] Ja, ek dink dit is op hierdie punt. Of ten minste 'n YouTube skakel na dit gepos is. 800 01:12:51,330 --> 01:12:57,190 Kom ons kyk. Kortbroek. Ek dink dit sou week 2-verwante gewees het. Ja. RSA. 801 01:12:57,190 --> 01:13:03,780 En dit is - we're nie van plan om dit te speel - 24 minute. 802 01:13:03,780 --> 01:13:05,780 Dit is 'n lang een. 803 01:13:07,740 --> 01:13:09,740 >> Meer vrae? 804 01:13:09,740 --> 01:13:14,770 [Studente] Kan jy kortliks praat oor die bitmasks? >> [Rob] Seker nie. 805 01:13:14,770 --> 01:13:23,090 Kortliks, die idee is net dat soos - >> [Studente] Wat is dit, Rob? 806 01:13:23,090 --> 01:13:32,760 [Rob] Bitmasks. Die idee is - laat ons net sê ons het 'n paar - we're die gebruik van sommige integer - 807 01:13:32,760 --> 01:13:41,490 int x - so, begin ons om dit af by 0. 808 01:13:41,490 --> 01:13:47,900 Nou, hierdie heelgetal is 32 stukkies, sodat 'n enkele 1 van daardie stukkies kan gebruik word om voor te stel 809 01:13:47,900 --> 01:13:50,600 'n spesifieke FLAC. 810 01:13:50,600 --> 01:13:56,210 Dit is waar as jy kyk na die bedryfstelsel kodes gebruik hulle hierdie al oor die plek 811 01:13:56,210 --> 01:14:03,900 waar miskien tot bo iewers hulle hash-definieer - 812 01:14:03,900 --> 01:14:09,020 Kom ons kyk 'n paar voorbeelde. 813 01:14:09,020 --> 01:14:22,720 Man-2-oop - die open-stelsel oproep kan ons sien hier dat een van sy argumente is int vlae - 814 01:14:22,720 --> 01:14:29,120 wat dit verwag as daardie argument is 'n paar van hierdie vlae. 815 01:14:29,120 --> 01:14:33,030 Ons sien O_append, O_ASYNC, O_CLOEXEC, 816 01:14:33,030 --> 01:14:37,130 O_CREAT, en so aan. 817 01:14:37,130 --> 01:14:45,260 O_DIRECT. Hierdie vorme van vlae hash-gedefinieerde iewers. 818 01:14:45,260 --> 01:14:47,260 En almal van hulle is presies 1 bietjie. 819 01:14:47,260 --> 01:14:57,600 So, dalk O_CREAT hash-gedefinieer as 1, links-shift, 4 (1 << 4). 820 01:14:57,600 --> 01:15:02,280 Dit gaan wees om die - wanneer ek gebruik O_CREAT wat net gaan wees - 821 01:15:02,280 --> 01:15:09,350 in binêr 1, 0, 0, 0, en 30-ish nulle voor dit. 822 01:15:09,350 --> 01:15:13,930 Dit is slegs 'n enkele bietjie van 'n stel, en dat die bietjie verteenwoordig hierdie vlag. 823 01:15:13,930 --> 01:15:18,160 En dus is daar geen ander vlag gaan word links geskuif 4. 824 01:15:18,160 --> 01:15:30,390 Ek is in staat te stel tot 32 vlae in 'n enkele heelgetal deur dit te doen - 825 01:15:30,390 --> 01:15:40,850 x = O_CREAT bietjie wys of O_DIRECT. 826 01:15:40,850 --> 01:15:43,640 Jy is net pluk enige 2 van die vlae. 827 01:15:43,640 --> 01:15:48,600 Nou x gaan 2 stukkies stel wat ooreenstem met die 2 stukkies te hê 828 01:15:48,600 --> 01:15:53,490 van O_CREAT en O_DIRECT. 829 01:15:53,490 --> 01:15:58,740 Die manier waarop dan - so dan is ons verby x in die oop funksie, 830 01:15:58,740 --> 01:16:02,950 en oop behoeftes om te sien wat vlae is eintlik stel. 831 01:16:02,950 --> 01:16:06,480 So, dit is waar dit gaan dinge soos om te doen 832 01:16:06,480 --> 01:16:19,340 if (x & O_CREAT) iets doen, 833 01:16:19,340 --> 01:16:27,110 of as (x & O_DIRECT) doen iets anders, 834 01:16:27,110 --> 01:16:30,300 en dan is daar dalk 'n paar vlag wat ons nie gestel het nie - 835 01:16:30,300 --> 01:16:35,730 if (x & O_ - Ek weet nie wat die ander vlae was - 836 01:16:35,730 --> 01:16:42,140 (X & O_RDONLY) - daardie spesifieke toestand is nie van plan om tereggestel te word. 837 01:16:42,140 --> 01:16:44,030 Of dat blok van die kode is nie van plan om uitgevoer word, 838 01:16:44,030 --> 01:16:48,030 maar hierdie 2 is omdat die 2 vlae is ingestel. 839 01:16:48,030 --> 01:16:57,400 En sien dat in C, enige waarde wat nie 0 is waar. 840 01:16:57,400 --> 01:17:05,020 So, (x & O_CREAT) sal wees 0 of O_CREAT 841 01:17:05,020 --> 01:17:07,990 omdat O_CREAT het slegs 'n enkele bietjie stel. 842 01:17:07,990 --> 01:17:12,800 As dit bietjie langs stel, dan is dit gaan O_CREAT om terug te keer - 843 01:17:12,800 --> 01:17:16,640 die binêre waar net dat bietjie is ingestel. 844 01:17:16,640 --> 01:17:23,400 As dit bietjie volgende is nie gestel nie, dan is dit gaan om terug te keer 0, in welke geval ons weet die vlag is ingestel. 845 01:17:23,400 --> 01:17:25,400 Dit is hoe jy bitmasks gebruik. 846 01:17:25,400 --> 01:17:29,050 Ek dink op 'n vorige eksamen of dalk in die klas of iets - 847 01:17:29,050 --> 01:17:35,150 jy kan ook gebruik bitmasks uit te druk die binêre van 'n veranderlike. 848 01:17:35,150 --> 01:17:46,250 So ek kan gebruik - herhaling oor - 1, links-skuif, 0 - en dan druk as x en dat - 849 01:17:46,250 --> 01:17:52,570 As x en 1, links verskuiwing, 0 - druk dan 'n 0 of 1. Of druk 'n 1 anders druk van 'n 0. 850 01:17:52,570 --> 01:18:00,620 En dan het ek gaan oor weer - as x en 1, links-shift, 2 - dan beteken dit dat die tweede bietjie 851 01:18:00,620 --> 01:18:04,450 van die veranderlike is ingestel, so ek druk 'n 1 anders wat ek druk 'n 0. 852 01:18:04,450 --> 01:18:06,860 En ek dink ons ​​kan eintlik wil doen in die omgekeerde volgorde omdat 853 01:18:06,860 --> 01:18:10,120 gewoonlik wat jy wil die linkerkant om die hoogste orde stukkies 854 01:18:10,120 --> 01:18:24,510 en die regterkant te wees om die laagste orde stukkies, so dit sal waarskynlik lus 4 int i = 31 totdat ek getref 0, 855 01:18:24,510 --> 01:18:32,320 dan nie die presiese toestand - as x en 1, links-shift, ek, druk 1 anders 0. 856 01:18:32,320 --> 01:18:34,320 [Studente] Dankie. 857 01:18:36,280 --> 01:18:38,550 >> [Rob] Ek dink ons ​​is uit van die tyd. 858 01:18:38,550 --> 01:18:42,840 Enige verdere vrae het in die laaste paar out-of-time sekondes? 859 01:18:42,840 --> 01:18:47,710 Alle regte. Sterkte môre. 860 01:18:47,710 --> 01:18:54,780 Dit was die laaste gedeelte waar volgende week se gaan opsioneel wees. 861 01:18:54,780 --> 01:19:03,770 Ek sal terug gee vasvrae en ons kan gaan oor hulle en miskien gaan oor ander dinge wat 862 01:19:03,770 --> 01:19:09,230 jy belangstel in, of finale projek dinge, of toekomstige dinge of CS klasse - Ek weet nie. 863 01:19:09,230 --> 01:19:12,070 Maar dit is die laaste materiaal gevul afdeling. 864 01:19:12,070 --> 01:19:15,070 Bye! 865 01:19:15,070 --> 01:19:20,970 (Applous) 866 01:19:22,250 --> 01:19:24,420 >> [CS50.TV]