1 00:00:00,000 --> 00:00:02,750 >> [Дел 9] [поудобно] 2 00:00:02,750 --> 00:00:04,750 [Роб Бауден] [Универзитетот Харвард] 3 00:00:04,750 --> 00:00:06,750 [Ова е CS50.] [CS50.TV] 4 00:00:06,750 --> 00:00:12,130 >> Ред. Во суштина денес сето тоа е до вас момци да поставам неколку прашања. 5 00:00:12,130 --> 00:00:15,070 Јас би можеле да бидат во можност да талкаат со некои теми 6 00:00:15,070 --> 00:00:17,570 за малку ако никој не има било какви прашања да прашам. 7 00:00:17,570 --> 00:00:20,660 Се надеваме дека ќе го направите. Дали некој има било какви прашања? 8 00:00:20,660 --> 00:00:25,220 Можеби од минатото квизови, работи што не сте удобно со моментно. 9 00:00:34,630 --> 00:00:37,850 >> Да. >> [Студентите] Може да одите во текот buffer overflow напади? >> [Роб] Секако. 10 00:00:37,850 --> 00:00:45,530 Главната пример всушност би можеле да бидат во право тука. 11 00:00:45,530 --> 00:00:48,720 Главната договор зад buffer overflow напади се 12 00:00:48,720 --> 00:00:51,540 имаме некои тампон, тука. 13 00:00:51,540 --> 00:00:54,110 Char в - која е само на големината 12 - 14 00:00:54,110 --> 00:00:57,580 но тогаш ние сме вметнување нешто во таа тампон 15 00:00:57,580 --> 00:01:00,050 но не проверува колку точно ние сме вметнување. 16 00:01:00,050 --> 00:01:06,740 Тука сме вметнување strlen (bar) во C, но кој знае колку долго бар е. 17 00:01:06,740 --> 00:01:11,970 Ако тоа е подолг од 12 карактери, тогаш ова ќе претекување оваа тампон. 18 00:01:11,970 --> 00:01:15,830 Гледајќи во оваа слика - 19 00:01:15,830 --> 00:01:20,840 ако имате 61 ќе добиете многу повеќе запознаени со овој вид на распоред 20 00:01:20,840 --> 00:01:25,760 и справување со снимени рамка покажувач и враќање адреса и рутинска магацинот родителите 21 00:01:25,760 --> 00:01:27,760 и сите на овие вистински нешта. 22 00:01:27,760 --> 00:01:31,340 Но тука сте само треба да се знае дека имаме 23 00:01:31,340 --> 00:01:35,990 ова малку простор за нашите тампон. 24 00:01:35,990 --> 00:01:39,480 Тука имаме (0) в а потоа имаме в, 1, 2, 3, 4, 5 и така натаму. 25 00:01:39,480 --> 00:01:44,810 Под нормални околности би се пополни оваа тампон, како на обично. 26 00:01:44,810 --> 00:01:50,480 Ако ние вметнува "hello" би имале ж-е-л-л-о / 0, 27 00:01:50,480 --> 00:01:52,900 а потоа само еден куп на празен простор. 28 00:01:52,900 --> 00:01:57,910 За хакер - ох, претпоставувам дека ова е пример. 29 00:01:57,910 --> 00:02:02,470 За хакер да добиеме нешто како ова, каде што 30 00:02:02,470 --> 00:02:04,760 она што го конкретно се обидува да направите е да 31 00:02:04,760 --> 00:02:07,890 обично ги избегне враќање адреса. 32 00:02:07,890 --> 00:02:12,510 Секогаш кога ќе се јавите на функција и вашиот магацинот рамка добива турна врз оџакот 33 00:02:12,510 --> 00:02:14,690 дека магацинот рамка треба да знае како - 34 00:02:14,690 --> 00:02:21,020 добро, функција која е наречена треба да знае како да се врати на функцијата што ја нарече. 35 00:02:21,020 --> 00:02:23,780 Значи, ако главната повици Foo, foo треба да се врати во главната, 36 00:02:23,780 --> 00:02:26,300 и така тоа е она што ова враќање адреса прави. 37 00:02:26,300 --> 00:02:28,800 Но, она што на хакерите се случува да направите е да 38 00:02:28,800 --> 00:02:30,820 избегне тоа, со посебен враќање адреса 39 00:02:30,820 --> 00:02:40,090 каде повторно - Малку Индискиот - тоа не е јасна, но секој бајт е наназад. 40 00:02:40,090 --> 00:02:47,300 Ова враќање адреса колку што компјутерот е загрижен 41 00:02:47,300 --> 00:02:51,390 Се враќате на овој адресата е еквивалентно на враќање да Foo или главни 42 00:02:51,390 --> 00:02:53,850 или што и функција тоа се нарекува. 43 00:02:53,850 --> 00:02:54,800 Па затоа се случува да се врати на оваа адреса 44 00:02:54,800 --> 00:02:58,130 кои само така се случува да биде оваа адреса 45 00:02:58,130 --> 00:03:04,740 кои или понекогаш она што го прават тука е да се користи за враќање адреса 46 00:03:04,740 --> 00:03:09,150 на специфична функција дека тие знаат што е веќе таму. 47 00:03:09,150 --> 00:03:12,630 Не можам да се сетам што функција се нарекува. 48 00:03:12,630 --> 00:03:14,630 Јас ќе го гледам нагоре подоцна. 49 00:03:14,630 --> 00:03:17,570 >> Еве она што го правиш е полагање на повратната адреса 50 00:03:17,570 --> 00:03:26,310 до магацинот себе, и ова е нешто чудно, каде што 51 00:03:26,310 --> 00:03:29,530 постојат примери на меморија, каде што - 52 00:03:29,530 --> 00:03:34,350 меморија може да се подели на само за читање, читање пишуваат, и извршна меморија 53 00:03:34,350 --> 00:03:38,710 каде што видовме само за читање меморија пред каде што - 54 00:03:38,710 --> 00:03:43,960 ако кажам char * S = здраво Не можам да менувате здраво. 55 00:03:43,960 --> 00:03:46,200 Тоа е само за читање меморија. 56 00:03:46,200 --> 00:03:49,570 Постои, исто така оваа идеја на извршна меморија 57 00:03:49,570 --> 00:03:53,870 каде извршна меморија ќе биде текстот сегмент на вашиот код. 58 00:03:53,870 --> 00:03:57,350 Гледање на вашиот вообичаена адреса простор распоред - 59 00:03:57,350 --> 00:04:03,090 Верувам дека ќе биде добра слика - 60 00:04:08,200 --> 00:04:12,170 тоа функционира - каде што имаме магацинот до тука. Имаме меморија на податоци. 61 00:04:12,170 --> 00:04:16,360 Игнорираат ова во основа. Ова е нашиот грамада. 62 00:04:16,360 --> 00:04:18,810 И тогаш имаме овде нашата главна програма код. 63 00:04:18,810 --> 00:04:27,480 Ова е слично на местото каде што ќе стави нашите низи како char * = здраво 64 00:04:27,480 --> 00:04:29,730 и тоа е само за читање. 65 00:04:29,730 --> 00:04:33,590 Но вие исто така може да го означи овој главната програма кодот како извршна. 66 00:04:33,590 --> 00:04:37,950 И ако тоа го прават или вашиот оперативен систем прави тоа правилно 67 00:04:37,950 --> 00:04:40,910 тогаш тоа треба да биде единственото место во меморијата 68 00:04:40,910 --> 00:04:44,830 дека кодот всушност може да се изврши 69 00:04:44,830 --> 00:04:48,550 што значи дека овој вид на buffer overflow напад имаме над тука 70 00:04:48,550 --> 00:04:53,800 ќе биде неефикасен, бидејќи ова е се обидувам да се изврши меморија до овде, во нашата оџак. 71 00:04:53,800 --> 00:04:57,230 Огласот за доделување на сликите се во прв план. 72 00:04:57,230 --> 00:04:59,270 Ние имаме магацинот растат. 73 00:04:59,270 --> 00:05:01,270 Тука магацинот расте надолу. 74 00:05:01,270 --> 00:05:03,270 За CS50 цели магацинот порасне. 75 00:05:03,270 --> 00:05:09,520 >> Можно е да се заобиколат овој тип на buffer overflow 76 00:05:09,520 --> 00:05:15,110 со тоа што овие извршна региони на меморија во не-извршна региони. 77 00:05:15,110 --> 00:05:21,420 Но, тоа само така се случува, дека ретко е извршна меморија означени како извршна. 78 00:05:21,420 --> 00:05:26,520 Тоа само има тенденција да биде само за читање и пре-пишуваат се единствените нешта кои се користат, 79 00:05:26,520 --> 00:05:28,990 па ова е уште многу ефикасни. 80 00:05:28,990 --> 00:05:31,950 И тука би можеле да се стави она што го сакаме. 81 00:05:31,950 --> 00:05:35,020 Тоа не е всушност направено како Pset во 61 оваа година, 82 00:05:35,020 --> 00:05:38,400 но ако се погледне на минатата година понуда на неа, или било која претходна година 83 00:05:38,400 --> 00:05:44,110 еден Pset е сте специјално треба да го вметнете во тука код кој би требало да се 84 00:05:44,110 --> 00:05:48,960 печати некои специфични вредност или се врати на вредност кој е различен од 85 00:05:48,960 --> 00:05:51,400 вредноста која би требало да бидат испечатени. 86 00:05:51,400 --> 00:05:57,770 Или дури и повеќе умно, таа сака да јавете се или пишете - 87 00:05:57,770 --> 00:06:03,320 па ова ќе се вратат до тука, а потоа ќе се изврши некои кодирање тука, 88 00:06:03,320 --> 00:06:09,720 и најпаметните на поплавите потоа ќе се врати на она што ова враќање адреса се користи да биде. 89 00:06:09,720 --> 00:06:11,970 Па дури иако ни е потребно да ја замени оваа 90 00:06:11,970 --> 00:06:16,720 да се дојде до тука, ние уште се сеќавам дека враќањето адреса некаде 91 00:06:16,720 --> 00:06:18,890 така што можеме да се вратат до главна или што, 92 00:06:18,890 --> 00:06:23,800 и тоа е како ние никогаш не дури и забележав дека работите не беше во ред. 93 00:06:23,800 --> 00:06:30,100 Но, работите не е така тоа е случај каде што можеби внатрешноста на тука сме gelbroke нашите iPhone-от. 94 00:06:30,100 --> 00:06:35,670 Работите одат како што е нормално - како што се кандидира на некои програми и работите да завршат враќањето во 95 00:06:35,670 --> 00:06:38,540 она што би требало да се врати, но во меѓувреме 96 00:06:38,540 --> 00:06:41,820 успеа да го уништи целиот оперативен систем. 97 00:06:41,820 --> 00:06:50,950 Вие не треба да знаете кодот во врска со тампон поплавите или, всушност, искористувајќи од неа. 98 00:06:50,950 --> 00:06:58,060 Вие не треба да се знаат основните идеи на ова е тампон и тоа е се излеа, 99 00:06:58,060 --> 00:07:02,010 и ова е причината што може да се преплави бидејќи ние не сме проверка дали 100 00:07:02,010 --> 00:07:06,110 ние сме всушност во рамките на границите на тоа. 101 00:07:06,110 --> 00:07:09,880 >> [Студентите] Решението за спречување на тоа е само проверка на границите? 102 00:07:09,880 --> 00:07:13,600 [Роб] Да. Во овој случај решението би било 103 00:07:13,600 --> 00:07:20,850 можете или може да се каже ако strlen на бар е поголем од 12-1 - 104 00:07:20,850 --> 00:07:24,970 бидејќи ви е потребна / 0 на крајот - 105 00:07:24,970 --> 00:07:34,090 или можете рачно може да се направи за телефонска линија дека само копии првите 11 карактери, 106 00:07:34,090 --> 00:07:39,710 или само нешто каде што сте, всушност, проверка за да бидете сигурни дека ќе не претекување дека тампон. 107 00:07:45,580 --> 00:07:49,050 >> Други прашања? Да? 108 00:07:49,050 --> 00:07:52,760 [Студентите] можеш да зборуваш за се обидува и можеби нешто за програмирање (нечујни). 109 00:07:52,760 --> 00:07:58,720 [Роб] Секако. 110 00:07:58,720 --> 00:08:03,500 Вистинските програма - 111 00:08:03,500 --> 00:08:08,190 ние никогаш нема да направи да се направи една имплементација на TRIE на испит 112 00:08:08,190 --> 00:08:12,840 затоа што тоа би било нефер да оние кои не хеш табели. 113 00:08:12,840 --> 00:08:16,030 И слично, ние никогаш нема да ве натера да се спроведе хеш табелата на испит 114 00:08:16,030 --> 00:08:18,560 затоа што тоа би било нефер да оние кои не се обидува. 115 00:08:18,560 --> 00:08:25,220 Ќе треба сепак да знаат на struct на TRIE или на struct на хеш табелата или whatever. 116 00:08:25,220 --> 00:08:30,230 Тоа е всушност важи и за било кој вид на податоци структура сме виделе. 117 00:08:30,230 --> 00:08:33,559 Поврзани листи, рангирани skews, бинарни дрва - 118 00:08:33,559 --> 00:08:38,190 треба да бидат способни да се дефинираат оние structs од срце. 119 00:08:38,190 --> 00:08:44,810 А TRIE - тоа значи дека единственото нешто што ќе треба да направите е можеби и ќе ви даде 120 00:08:44,810 --> 00:08:50,070 некој збор или нешто и ние ќе каже изградба на TRIE тоа - 121 00:08:50,070 --> 00:08:52,870 ние ќе ви даде можеби збир на зборови 122 00:08:52,870 --> 00:08:56,280 и ние сме како изградба на TRIE кој претставува овој речник. 123 00:08:56,280 --> 00:09:05,980 >> Да направиме нашата речник мачка и куче. 124 00:09:05,980 --> 00:09:10,790 Идејата на TRIE е ние почнете да излегува со оваа низа - 125 00:09:10,790 --> 00:09:16,510 26 слотови - 126 00:09:16,510 --> 00:09:24,490 и во секој слот вистинските индексот на слот одговара на писмото сме загрижени со. 127 00:09:24,490 --> 00:09:28,560 Па еве, ако ние се обидуваме да го вметнете мачка во нашите TRIE 128 00:09:28,560 --> 00:09:35,360 првиот карактер е "c", кој ќе биде "доколку е 0, тогаш b е 1, c е 2. ' 129 00:09:35,360 --> 00:09:38,090 Ние ќе одиме во вториот индекс, 130 00:09:38,090 --> 00:09:41,100 и ние ќе се создаде TRIE на тој начин. 131 00:09:41,100 --> 00:09:47,080 Ние ќе мора 26 слотови. 132 00:09:47,080 --> 00:09:51,140 А потоа ние ќе се обидеме да индексира вториот карактер на мачка. 133 00:09:51,140 --> 00:09:53,340 Тоа е "една", кој се случува да биде 0 самото место. 134 00:09:53,340 --> 00:09:56,960 И дека се случува да имаат 26 места. 135 00:09:56,960 --> 00:10:05,650 Потоа одиме на "t" и ние, исто така, ќе го имаат тоа слегува кој е всушност вид на важни 136 00:10:05,650 --> 00:10:13,990 затоа што - ајде да дојде до тука. Тука е нашата TRIE за "t". 137 00:10:13,990 --> 00:10:23,370 Да речеме ова е индекс "t" е 19. 138 00:10:23,370 --> 00:10:31,020 Важно е да се запамети околу се обидува е не само да ги пратите на овие совети. 139 00:10:31,020 --> 00:10:35,470 Исто така мора да ги пратите на тоа дали ова е всушност на крајот на зборот. 140 00:10:35,470 --> 00:10:38,570 Значи, во внатрешноста на тука ние треба некој вид на знамето што вели 141 00:10:38,570 --> 00:10:41,520 Океј, ова е всушност на крајот на зборот. 142 00:10:41,520 --> 00:10:46,830 Причината е во тоа ако ние подоцна се обиде да го вметнете катастрофални во нашиот речник 143 00:10:46,830 --> 00:10:49,930 која го има истиот почнувајќи 3 карактери 144 00:10:49,930 --> 00:10:57,250 но продолжува понатаму ние треба да се признае дека ова е крајот на зборот. 145 00:10:57,250 --> 00:11:01,330 Или алтернативно, ако ние се обидуваме да се погледне до "Ca 'што можеби не е збор 146 00:11:01,330 --> 00:11:06,100 но ние се фаќате за тука тогаш ние - 147 00:11:06,100 --> 00:11:10,270 или тоа ќе биде в а потоа ќе погледнеме во - 148 00:11:10,270 --> 00:11:13,940 ние треба да се признае дека иако има покажувач излегувањето на овој јазол 149 00:11:13,940 --> 00:11:15,940 не претставува на крајот на збор. 150 00:11:15,940 --> 00:11:19,430 >> Значи, она што значи тоа - она ​​што се сакаше да кажеш? 151 00:11:19,430 --> 00:11:22,760 Што значи тоа нашите struct личи? 152 00:11:22,760 --> 00:11:25,760 [Студентите] Тоа е низа на совети кои е 26 долги и тогаш bool беа или не беа. 153 00:11:25,760 --> 00:11:47,430 [Роб] Да. Значи, ќе имаме struct TRIE * совети - тука ние ќе каже [26] на 154 00:11:47,430 --> 00:11:49,590 а потоа запирка овде. 155 00:11:49,590 --> 00:11:53,210 Но на Pset, ние исто така треба да сметка за апострофи, 156 00:11:53,210 --> 00:11:58,170 што значи што ви е потребно на хард-код кој апостроф со индекс 27 или така нешто. 157 00:11:58,170 --> 00:12:00,440 Но тука ние само се грижат за 26. 158 00:12:00,440 --> 00:12:11,830 И тогаш ние треба можеби знак или bool - да ја наречеме тоа е зборот. 159 00:12:11,830 --> 00:12:18,120 Тоа е 2 на 3 работи мислам дека некогаш ќе треба да знаете за обиди - 160 00:12:18,120 --> 00:12:24,370 градење на нив, на struct од нив, и последното нешто е во бегство време на нив. 161 00:12:24,370 --> 00:12:28,250 >> Што е траење на TRIE - или пребарување во TRIE? 162 00:12:28,250 --> 00:12:47,500 Ова е местото каде што велат дека тоа е О (к) каде k е должината на зборот се случи да се гледа нагоре; 163 00:12:47,500 --> 00:12:53,850 но во исто време ние велиме - барем за доброто Pset 5 правопис е - ние велиме 164 00:12:53,850 --> 00:12:59,470 најдолгиот збор во речникот е 45 карактери, па ова е во основа 165 00:12:59,470 --> 00:13:04,900 О 45 кое е постојана време. 166 00:13:04,900 --> 00:13:09,660 Значи, ако постои горна граница на вашиот најдолгиот збор, тогаш - 167 00:13:09,660 --> 00:13:15,130 или дури и како англиски речник - постои горна граница на вашиот најдолгиот збор. 168 00:13:15,130 --> 00:13:19,970 Или било кој речник - постои најдолго обврзани на горниот дел од зборот. 169 00:13:19,970 --> 00:13:25,480 Без разлика што правиш е постојана време, 170 00:13:25,480 --> 00:13:33,810 но о к е убаво, бидејќи таму всушност е разликата помеѓу водење велат 171 00:13:33,810 --> 00:13:40,120 45-карактер збор наспроти азбука која има само зборови до 3 карактери. 172 00:13:40,120 --> 00:13:52,870 Друга работа во врска со тоа е дека - 173 00:13:52,870 --> 00:13:57,520 ох, бидејќи само велејќи дека 45 случува да биде нашата најдолгиот збор 174 00:13:57,520 --> 00:14:02,330 е вид на глупо бидејќи во исто време да речеме алгоритам е О на Н 175 00:14:02,330 --> 00:14:06,510 Па во ред, бидејќи меморија поддржува само до 2 ^ 32 бајти, 176 00:14:06,510 --> 00:14:11,770 тогаш N е најмногу 4 милијарди и тоа е постојана време, кој е зошто во одреден момент 177 00:14:11,770 --> 00:14:14,870 тоа е глупо да се каже овој вид на работа каде што има горна граница 178 00:14:14,870 --> 00:14:19,540 дека ние само може да се намали на постојана време, бидејќи сè е постојана време 179 00:14:19,540 --> 00:14:22,320 кога ќе помислите на тоа на тој начин. 180 00:14:22,320 --> 00:14:25,470 Но, ние најверојатно ќе ги прифати и двете од овие. 181 00:14:25,470 --> 00:14:31,780 Во секој случај се објасни или дека О (1) значи имате горниот граничи должина на зборот; 182 00:14:31,780 --> 00:14:34,070 О (к) значи дека вашиот должина на зборот - 183 00:14:34,070 --> 00:14:40,900 добро, к значи должина на зборот. 184 00:14:44,060 --> 00:14:47,280 >> Да. >> [Студентите] Дали bool - затоа што кога ќе направи вашиот TRIE 185 00:14:47,280 --> 00:14:53,220 се чинеше како да е - ќе одат мачка и потоа да одите на следното покажувачот 186 00:14:53,220 --> 00:14:59,860 а потоа ти кажам, ако тоа е еднакво точно - ќе ви го стави тоа точно на како со Т? 187 00:14:59,860 --> 00:15:06,560 [Роб] Ајде да мислам дека ова е случај каде што многу примери вие само може да се обиде и да излезе со 188 00:15:06,560 --> 00:15:12,310 едноставен и / или екстремни примери и она што треба да биде, па ајде да мислам на зборот "една". 189 00:15:12,310 --> 00:15:21,320 Во нашата изворна TRIE - 190 00:15:21,320 --> 00:15:35,510 ние би сакале да се стави 1 тука, или ние би сакале да се стави 1 овде долу. 191 00:15:35,510 --> 00:15:41,350 Јас би рекол дека на крајот тоа најверојатно ќе биде или / или. 192 00:15:41,350 --> 00:15:46,000 Не можам да се сетам на причина - или навистина wouldn't - 193 00:15:46,000 --> 00:15:51,060 причина јас не би го стави таму долу е затоа што дури и не треба да се оди толку далеку. 194 00:15:51,060 --> 00:15:55,820 Ние никогаш не треба да одвои оваа TRIE. 195 00:15:55,820 --> 00:15:57,950 Ние само стави 1 до таму. 196 00:15:57,950 --> 00:16:03,310 Ова е уште покажува кон нула. 197 00:16:03,310 --> 00:16:09,430 Ако ние сме само ќе имаат единствено карактери 198 00:16:09,430 --> 00:16:17,220 нема причина да се прошири надолу до друга TRIE само да се одбележи дека писмото како што се користи. 199 00:16:17,220 --> 00:16:21,260 Слично на тоа, ако ние го стави на "а" таму долу 200 00:16:21,260 --> 00:16:27,860 тогаш мора сите овие само ќе биде 0 на сите времиња. 201 00:16:27,860 --> 00:16:36,060 >> [Студентите] Но, не ни треба, почнувајќи TRIE кои ќе укажуваат на тоа "а"? 202 00:16:36,060 --> 00:16:43,570 [Роб] Имаме некои глобални или нешто struct TRIE * T 203 00:16:43,570 --> 00:16:47,270 што укажува тука, но тоа е само покажувач. 204 00:16:47,270 --> 00:16:51,500 Тоа не е целосно разнесени TRIE тоа е укажува на тоа. 205 00:16:51,500 --> 00:17:02,000 [Студентите] Во ред. Како би ја додели буквата "I'- со зборот јас? 206 00:17:02,000 --> 00:17:06,380 [Роб] Неговото прашање може да се одговори на тоа. Држи се. 207 00:17:06,380 --> 00:17:15,060 Тоа е прашање каде TRIE во себе и за себе - 208 00:17:15,060 --> 00:17:17,880 Не знам начинот на Pset би го напишале. 209 00:17:17,880 --> 00:17:19,880 Претходната struct беше лошо. 210 00:17:19,880 --> 00:17:41,690 Но, ние исто така може да го направи struct јазол е bool - и покажувач - 211 00:17:41,690 --> 00:17:46,500 има всушност повеќе начини можете да го напише. 212 00:17:46,500 --> 00:18:01,800 Алтернативно TRIE не треба да биде struct. 213 00:18:01,800 --> 00:18:21,250 Тоа дури може да биде TRIE - typedef јазол * - 214 00:18:21,250 --> 00:18:34,760 јазол [26] е TRIE и тоа веќе не е struct. 215 00:18:34,760 --> 00:18:44,270 Сега има се случува да биде - Јас сум се обидува да се размислува за начинот на кој Pset би се очекува од вас. 216 00:18:44,270 --> 00:18:47,650 [Студентите] јас го зафрла тој преглед седница и мислам дека тие само одат - 217 00:18:47,650 --> 00:18:50,670 како ако имате голем потоа да одите на следното - >> [Роб] Тоа е како тие го прават тоа? 218 00:18:50,670 --> 00:18:53,750 [Студентите], а потоа ако има вистински постои тоа не функционира - 219 00:18:53,750 --> 00:18:58,710 [Роб] Да. Дека не функционира. Тоа отпад простор на - 220 00:18:58,710 --> 00:19:03,910 ќе мора да имаат цела друго ниво на TRIE дека не ќе треба на прво место. 221 00:19:03,910 --> 00:19:08,410 Тука станува грд едни со - 222 00:19:08,410 --> 00:19:11,530 во основа она што јас се обидувам да го направите тука е соработник - 223 00:19:11,530 --> 00:19:15,000 наместо да биде 26 совети за вашиот неуспешни обиди, 224 00:19:15,000 --> 00:19:20,810 тоа е 26 bool покажувач, bool покажувач, bool покажувач, и така натаму. 225 00:19:28,940 --> 00:19:34,410 >> [Студентите] Вие не може да го направи тој 2 низи? Низа на bools и низа на совети? 226 00:19:34,410 --> 00:19:38,060 [Роб] Вие би можеле, но тогаш ќе треба да се - 227 00:19:38,060 --> 00:19:41,500 2 низи на booleans и совети. 228 00:19:41,500 --> 00:19:47,340 Вие ќе треба да потоа да се изгради вашиот спектар на booleans - 229 00:19:47,340 --> 00:19:51,240 Вашиот спектар на booleans треба да бидат толку големи како TRIE 230 00:19:51,240 --> 00:19:53,200 затоа што не може само да имаат 26 booleans. 231 00:19:53,200 --> 00:19:57,010 Тоа мора да расте со секој што е можно - 232 00:19:57,010 --> 00:20:03,240 како вашиот TRIE има повеќе од 26 точно или неточно можни зборови. 233 00:20:03,240 --> 00:20:08,240 Во тој момент тие можат, како и само да биде една struct дека вашиот TRIE расте надолу со. 234 00:20:08,240 --> 00:20:15,210 Ова не чини право, бидејќи - она ​​што сакам тука? 235 00:20:15,210 --> 00:20:23,640 Значи, TRIE * T - 236 00:20:23,640 --> 00:20:30,200 можете да направите typedef (јазол *) [26] TRIE; 237 00:20:30,200 --> 00:20:33,090 тоа може да биде синтакса Јас сум во потрага за. 238 00:20:36,740 --> 00:20:41,450 И тоа само треба да биде редовна TRIE. 239 00:20:44,900 --> 00:20:47,440 Не сум сигурен. 240 00:20:47,440 --> 00:20:54,850 Но, тоа е начинот на кој ние го сторивме тоа во прегледот, така што работи совршено добро, исто така. 241 00:20:54,850 --> 00:20:57,850 Во кој случај ако тоа е само bool е збор, а потоа низа од 26 242 00:20:57,850 --> 00:21:01,750 тогаш ќе мора да одат на следното ниво. 243 00:21:01,750 --> 00:21:05,420 Ќе се размислува за начинот на кој јас би го направил тоа. 244 00:21:07,500 --> 00:21:09,550 >> Други прашања? 245 00:21:09,550 --> 00:21:12,540 [Студентите] Може ли да поставуваат прашања за нешто друго? >> [Роб] Да. 246 00:21:12,540 --> 00:21:19,040 [Студентите] Може да ви одат над она што разликата е и кога ќе го користите jQuery наспроти Ајакс? 247 00:21:19,040 --> 00:21:24,550 [Роб] Тие се во себе и за себе сосема поинаква. 248 00:21:24,550 --> 00:21:32,720 JQuery им овозможи Ајакс. Тоа го прави ни даде некои полесно користење на Ајакс. 249 00:21:32,720 --> 00:21:38,480 Но Ајакс доаѓа испорачуван со вклучите Javascript-. Го вклучите Javascript-има Ајакс способности. 250 00:21:38,480 --> 00:21:47,490 Сите Ајакс значи оприличавам јас сум веќе на една страница и кога сакам да - 251 00:21:47,490 --> 00:21:52,820 кога ќе кликнете на нешто што не треба да ја страната да ја преземете дека новите информации. 252 00:21:52,820 --> 00:21:55,020 Јас само да побара нови информации. 253 00:21:55,020 --> 00:22:01,220 Можете да се погледне во него во Фејсбук или нешто слично. 254 00:22:01,220 --> 00:22:05,580 Увид мрежа. 255 00:22:05,580 --> 00:22:07,460 Намалувачки ова. 256 00:22:12,070 --> 00:22:14,940 Овде можеме да видиме дека ние сме добивање на сите овие барања. 257 00:22:14,940 --> 00:22:18,990 Сега кога ќе кликнете на - добро, тоа го прави Ајакс пред јас дури и кликнете на ништо. 258 00:22:18,990 --> 00:22:24,140 Но, ако јас кликнете на ова, тогаш тоа се случува да направи еден куп на барањата овде 259 00:22:24,140 --> 00:22:33,530 кои само што овие барања - ох, сега е овде. 260 00:22:33,530 --> 00:22:36,590 Ајде да се одмориме. 261 00:22:36,590 --> 00:22:38,580 Направите ова повторно. 262 00:22:38,580 --> 00:22:42,090 Можеме да видиме дека ние ги добиете сите овие барања, но ова сè уште може да биде во процес на вчитување на страницата. 263 00:22:42,090 --> 00:22:47,400 Забележите Фејсбук прави овие постојани барања дури и по страница е вчитан. 264 00:22:47,400 --> 00:22:51,470 И ако јас кликнете на тука, тоа ќе направи некои повеќе барања за некои податоци 265 00:22:51,470 --> 00:22:54,990 што е во одговор на нешто што само кликна. 266 00:22:54,990 --> 00:23:04,660 Тоа е токму она Ајакс е. Тоа ви овозможува да се повлече за податоци што не бил симнат со страница оригинално. 267 00:23:04,660 --> 00:23:12,050 >> JQuery е посебен. JQuery е само JavaScript библиотека која го прави многу работи полесно. 268 00:23:12,050 --> 00:23:28,660 Со jQuery е многу предност е тоа само - 269 00:23:28,660 --> 00:23:34,030 знакот за долар - знакот за долар е валидна променлива во вклучите Javascript-. 270 00:23:34,030 --> 00:23:43,460 Значи, jQuery - сето тоа го прави е велејќи дека како var $ = целиот куп на работи - 271 00:23:43,460 --> 00:23:46,690 како некои големи функција со сите овие работи во него - 272 00:23:46,690 --> 00:23:52,650 а потоа ќе ја користат таа знакот за долар во начини како 273 00:23:52,650 --> 00:24:23,940 $ ("# Подножјето"). Стил ("text-align", "центар"). 274 00:24:23,940 --> 00:24:32,330 JQuery ни дава овој вид на синтакса каде голема предност - 275 00:24:32,330 --> 00:24:35,650 има и други можности, но она што сакаме да се фокусираат на повеќето 276 00:24:35,650 --> 00:24:38,760 е само да се биде во можност да изберете елементи како оваа. 277 00:24:38,760 --> 00:24:42,780 Во редовните, обичен стар вклучите можете да ги правите нештата како 278 00:24:42,780 --> 00:24:50,490 документ-точка-get елемент од проект подножјето-точка - Не знам што е тоа во тој момент - 279 00:24:50,490 --> 00:24:52,790 нешто во врска со CSS или стил или нешто - 280 00:24:52,790 --> 00:24:58,930 но потоа пак, да речеме сакавме да изберете од класа. 281 00:24:58,930 --> 00:25:06,330 Сега сме стајлинг сè со класа подножјето со овој стил. 282 00:25:06,330 --> 00:25:16,070 Дури и ако сакаме да стил било ставови. 283 00:25:16,070 --> 00:25:22,000 Значи, ова селектор - да биде во можност да изберете нешта во ДОМ, како ова е неверојатно удобен 284 00:25:22,000 --> 00:25:29,420 бидејќи во обичен стар вклучите вие ​​ќе треба да се направи документ-точка-get елементи од класа име 285 00:25:29,420 --> 00:25:34,260 или што и да е, или ако сакав таг би треба да се каже добие елементи по име на етикета. 286 00:25:34,260 --> 00:25:37,530 Значи, ми треба да се знае конкретната начини на кои јас пристап до сите од овие работи. 287 00:25:37,530 --> 00:25:40,810 Функциите се случува да бидат различни во зависност од тоа дали јас сум со користење на класа или проект 288 00:25:40,810 --> 00:25:46,420 или ознака или што, додека jQuery само дали тоа за мене. 289 00:25:46,420 --> 00:25:53,120 >> [Студентите] е jQuery ќе се користи кога правиш почетна стил на страница? 290 00:25:53,120 --> 00:25:56,570 Или со цел за промена на стил по тоа е веќе - >> [Роб] За да го промените. 291 00:25:56,570 --> 00:25:58,440 [Студентите] По тоа е веќе вчитан. >> [Роб] Да. 292 00:25:58,440 --> 00:26:07,020 Било почетна стил - добро, па дури и на - 293 00:26:07,020 --> 00:26:09,970 генерално ќе се користи овој вид на промени. 294 00:26:09,970 --> 00:26:14,330 Вие не би се промени - тоа ќе работи совршено добро. 295 00:26:14,330 --> 00:26:17,720 Но обично не би го промените стилот вака. 296 00:26:17,720 --> 00:26:20,610 Наместо тоа, би го даде нова класа или нешто 297 00:26:20,610 --> 00:26:24,650 со оглед на тоа CSS веќе беше дефинирана за таа класа на одреден начин. 298 00:26:24,650 --> 00:26:28,920 Со давање на овие предмети Јас сум изборот на нова класа 299 00:26:28,920 --> 00:26:32,200 Јас сум примена на стилови кои се веќе преземени. 300 00:26:32,200 --> 00:26:36,720 [Студентите] Така да изберете неколку изберете и работите што сте го избрале 301 00:26:36,720 --> 00:26:41,820 се менува во нов стил и почнете да барате различни. >> [Роб] Да. 302 00:26:41,820 --> 00:26:45,490 Други работи да се запамети околу - 303 00:26:45,490 --> 00:26:48,350 добро, постојат неколку функции треба да се запамети околу jQuery. 304 00:26:48,350 --> 00:26:55,570 Да речеме дека ние сме изборот нешто со проект П 305 00:26:55,570 --> 00:27:00,500 >> [Студентите] Дали секогаш треба да се користи на фунтата? 306 00:27:00,500 --> 00:27:09,600 [Роб] Ова значи проект. Тоа е еквивалентно на CSS, па CSS селектори - тоа е инспирирана од тоа. 307 00:27:09,600 --> 00:27:12,410 Каде во CSS ако сакав да стил на подножјето - 308 00:27:12,410 --> 00:27:16,950 или нешто со проект подножјето - 309 00:27:16,950 --> 00:27:23,490 тоа ќе биде како text-align: центар; 310 00:27:23,490 --> 00:27:28,820 вие не ќе треба да пишува CSS скрипти на испит, но треба да се знае селектори. 311 00:27:28,820 --> 00:27:34,280 Што треба да се знае што - што треба да знаете како да го прочита. 312 00:27:34,280 --> 00:27:36,000 Но, ние никогаш не би - 313 00:27:36,000 --> 00:27:42,390 не треба да се запаметат сите на различни можни стил нешта. Или било која од нив. 314 00:27:42,390 --> 00:27:50,020 >> JQuery работи што треба да се сеќавам - 315 00:27:50,020 --> 00:27:58,380 треба да се запамети точка-HTML и заедничка шема, во jQuery - да пре-пишуваат ова. 316 00:27:58,380 --> 00:28:09,640 А заеднички модел е имаме $ ("# ѓ"). Html 317 00:28:09,640 --> 00:28:15,650 Ако јас ставам само обичен заграда тоа значи дека го добиете HTML; 318 00:28:15,650 --> 00:28:23,870 а ако кажам HTML и стави што сакам тука - некои линк до нешто - 319 00:28:23,870 --> 00:28:30,410 ставање нешто внатрешноста на загради сега се поставува на HTML. 320 00:28:30,410 --> 00:28:33,760 Тоа е доста заеднички меѓу еден куп на функции. 321 00:28:33,760 --> 00:28:38,360 Има истиот договор со текст. 322 00:28:38,360 --> 00:28:41,720 Разликата помеѓу HTML и текст е дека текстот ќе го вметнете овој 323 00:28:41,720 --> 00:28:46,350 буквално помалку од една, поголема-од, наместо како сидро таг. 324 00:28:46,350 --> 00:28:53,000 И текст ќе бидат исти, ако јас само го направите тоа. 325 00:28:53,000 --> 00:28:55,760 Тоа се случува да се добие текстот на документот - не го HTML на документот 326 00:28:55,760 --> 00:29:01,810 но само на текст во рамките на овој елемент. 327 00:29:01,810 --> 00:29:08,430 Уште еден е ако 'F' се случува да биде проект за влез, 328 00:29:08,430 --> 00:29:14,250 потоа хаш-ѓ-точка-val - ако сакам да го поставите на влез на нешто како - 329 00:29:14,250 --> 00:29:17,900 Да речеме јас хит на полето и сакам да се постави стандардна вредност - 330 00:29:17,900 --> 00:29:26,070 дот-val - Јас дури и не знаат - 3 - така што автоматски ќе внесете во полето за текст 3, 331 00:29:26,070 --> 00:29:35,980 но ако кажам 3-точка-Вал, која ќе се добие она што во моментов е во полето за текст за мене. 332 00:29:35,980 --> 00:29:39,690 >> Ова е корисно за форма валидација каде 333 00:29:39,690 --> 00:29:48,030 ако јас само сакате да бидете сигурни дека тие всушност пополнети сите од работите. 334 00:29:48,030 --> 00:29:54,710 Еден начин да се направи тоа е ако откако хит поднесе тоа е неизбежно испратени до некои страница на серверот - 335 00:29:54,710 --> 00:30:00,190 како за нас тоа ќе биде PHP - и дека ќе се обиде да ги обработува податоците и би рекол 336 00:30:00,190 --> 00:30:03,030 тие не се пополни нешто, така што сега ги пренасочува кон друга страница, која вели 337 00:30:03,030 --> 00:30:05,050 не сте се пополни се надвор. 338 00:30:05,050 --> 00:30:11,650 Наместо да го направат тоа, во JavaScript / jQuery можете само да се види дали Вал е празна. 339 00:30:11,650 --> 00:30:17,270 Или е val - празни цитати. 340 00:30:17,270 --> 00:30:23,120 Што се случува на само - сега можеме да ги извести дека не сте ги пополните ова поле. 341 00:30:23,120 --> 00:30:26,990 Неизбежно ќе треба да се направи за PHP на серверот проверка бидејќи 342 00:30:26,990 --> 00:30:31,210 можете само да се оневозможи JavaScript во сите прелистувачи. 343 00:30:31,210 --> 00:30:36,180 Но го вклучите Javascript-го прави погоден за оние кои не го имаат активирано, 344 00:30:36,180 --> 00:30:42,940 и речиси деведесет и девет-точка-нешто проценти од прелистувачи го имаат на денешно време. 345 00:30:42,940 --> 00:30:46,630 Многу малку луѓе се свртат го вклучите Javascript-оф. 346 00:30:46,630 --> 00:30:52,850 Таа е корисник погодност. Што треба да направите PHP валидација. 347 00:30:52,850 --> 00:30:55,990 Што треба да направите го вклучите Javascript-валидација. 348 00:30:55,990 --> 00:30:57,950 >> [Студентите] Што значи # ѓ однесуваат тука? 349 00:30:57,950 --> 00:31:00,020 [Роб] Што значи # ѓ однесуваат на? 350 00:31:00,020 --> 00:31:04,350 Има некои елементи во мојот документ со проект "F". 351 00:31:04,350 --> 00:31:09,850 Ќе гледам - ​​веројатно Фејсбук има многу примери каде што ако дојдам со елементи 352 00:31:09,850 --> 00:31:17,820 Барате тука по елементите таг гледам ова особено div тоа е се нагласи тука - 353 00:31:17,820 --> 00:31:22,670 или тоа е целата страница - Да, тоа е таму горе. Ова има проект pagelet_bluebar. 354 00:31:22,670 --> 00:31:26,730 Во конзола Претпоставувам тие се со користење на веб. 355 00:31:26,730 --> 00:31:40,030 Значи, јас би можеле да одберете pagelet_bluebar така што избира тоа, и јас направив нешто погрешно. 356 00:31:46,470 --> 00:31:52,250 Ајде да се обидеме - или можеби тие не се користат jQuery и дека ликот одбележан на нешто друго. 357 00:31:52,250 --> 00:32:04,970 А подобро пример во нешто за кое знам е користење jQuery - 358 00:32:04,970 --> 00:32:10,600 уште гледа во нашите елементи тука - ние сме тука класа еднаква на статистика лента. 359 00:32:10,600 --> 00:32:12,330 Ова е нешто со класа статистика лента, 360 00:32:12,330 --> 00:32:19,180 па во внатрешноста на нашите конзола може да се погледне до работа со класа статистика лента. 361 00:32:19,180 --> 00:32:21,770 Тука можеме да дојдете во текот на овој и да види дека е она што е оваа. 362 00:32:21,770 --> 00:32:29,850 Ако сакав да го направам. Текст Ова е текстот од тоа, па гледам поставувања за извештај погоре за одјавување 363 00:32:29,850 --> 00:32:35,760 кои се сите под тука, но тоа е уште текстот во рамките на таа HTML таг. 364 00:32:35,760 --> 00:32:52,230 Јас би можеле да се постави на HTML само некои врската, 365 00:32:52,230 --> 00:32:56,550 па јас ќе се ослободи од мојот бар. Сега дека се ослободи од насловот целосно само така тоа е поврзано со YouTube. 366 00:32:56,550 --> 00:32:59,630 >> А, постои ли било каква форма пример? 367 00:32:59,630 --> 00:33:01,940 Тука е форма. 368 00:33:01,940 --> 00:33:05,830 Можам да кликнете со десното копче и проверете елемент да се дојде до тоа право овде. 369 00:33:05,830 --> 00:33:08,460 Гледам дека неговиот проект е пребарување на текст, 370 00:33:08,460 --> 00:33:16,910 па овде, ако го направам проект пребарување на текст. 371 00:33:16,910 --> 00:33:23,190 Јас ќе донесе над него и гледам дека е точниот нешто што беше барате. 372 00:33:23,190 --> 00:33:27,670 Ако сакам да го направам. Val ќе ми даде она што го внесе таму. 373 00:33:27,670 --> 00:33:36,010 Ако сакав да направам здраво тоа ќе го промени тука за да здраво - jQuery. 374 00:33:36,010 --> 00:33:45,780 Се разбира, јас не можеше да стори смешно како document.get елемент од проект - пребарување на текст - 375 00:33:45,780 --> 00:33:54,000 Јас дури и не знаат што е тоа во овој момент - точка вредност - не, јас заборавив дека дечко. 376 00:33:54,000 --> 00:33:59,110 Значи, тоа е здраво. Јас не знам како би го поставите изнесува нешто. 377 00:33:59,110 --> 00:34:00,930 Да, па тоа се промени тоа. 378 00:34:00,930 --> 00:34:07,510 Но, вие не треба да користите овие и многу многу веб-сајтови во овој момент употреба jQuery. 379 00:34:07,510 --> 00:34:13,050 Дури и како на финалниот проект - ако правиш веб-проект - првата работа 380 00:34:13,050 --> 00:34:20,030 Јас препорачувам е само вклучувајќи jQuery така можете да добиете погодности на сите овие функции. 381 00:34:22,580 --> 00:34:27,750 >> [Студентите] Мислам дека го видов на поинаков начин да се дојде до елемент користење дом. 382 00:34:27,750 --> 00:34:32,520 Дали имате да се користи точка, а потоа продолжувам да одам долу? 383 00:34:32,520 --> 00:34:36,630 [Роб] Можете да го направите тоа. Јас не знам дали тоа ќе функционира многу добро. 384 00:34:36,630 --> 00:34:38,900 Тоа е тешко да се движите на тој начин. 385 00:34:38,900 --> 00:34:43,179 Еден пример е - јас дури и не знам дали имаме било форми - 386 00:34:43,179 --> 00:34:48,940 но document.forms се случува да се врати на листата на форми тоа е на оваа страница, 387 00:34:48,940 --> 00:34:55,070 тогаш можам да направам document.forms 0 ќе биде првата форма. 388 00:34:55,070 --> 00:35:03,070 Точка - Не знам она што го нарекува тоа - па тоа дури и не мора име, 389 00:35:03,070 --> 00:35:08,050 па можеби влезови ќе работат. Бр. 390 00:35:08,050 --> 00:35:11,050 Јас дури и не знаат како да се добие на ова - се елемент-I-името на тагот влез. 391 00:35:11,050 --> 00:35:23,630 Да, тоа ми даде влез, и сега сакам да го внесете 0 392 00:35:23,630 --> 00:35:31,320 и јас сакам да го изберете нејзината вредност, така што нема да биде текстот. 393 00:35:31,320 --> 00:35:33,890 Морав да заврши прави добие елементи по име на етикета секој случај. 394 00:35:33,890 --> 00:35:36,210 Може да има некој начин да го изберете директно 395 00:35:36,210 --> 00:35:43,480 преку форма 0, но убаво нешто за ова е уште како што имав само да одам на тагови наречен влез 396 00:35:43,480 --> 00:35:49,880 дека биле дете на оваа форма, инаку ако јас само го направи тоа право до пред 397 00:35:49,880 --> 00:35:56,680 ова ќе изберете сите елементи на целата страница, во целиот документ 398 00:35:56,680 --> 00:36:00,580 наместо само таа форма и тоа најверојатно нема ни да биде оној што го сакате. 399 00:36:00,580 --> 00:36:06,180 Јас дури и не знам кој е тоа. Не знам. 400 00:36:06,180 --> 00:36:13,450 Претпоставувам дека првиот влез елемент на нашата страница е оваа мала Обележувач. 401 00:36:13,450 --> 00:36:20,450 >> [Студентите] Ова е прилично неповрзани 402 00:36:20,450 --> 00:36:27,420 а можеби и вид на глупо, но за клучните одговор се вели дека PHP - 403 00:36:27,420 --> 00:36:35,660 Не знам дали тоа е одговор клуч или белешки, но таа вели PHP е од страна на серверот 404 00:36:35,660 --> 00:36:39,590 и го вклучите Javascript-е клиент-страна. Која е разликата помеѓу 2? 405 00:36:39,590 --> 00:36:45,550 [Роб] Разликата помеѓу вклучите Javascript клиент-страна и PHP на серверот. 406 00:36:45,550 --> 00:36:51,890 Ако сте слушнале за коса црта / се користи јазол js, пред да би помислил дека 407 00:36:51,890 --> 00:36:56,280 Го вклучите Javascript-не е само клиент-страна, но за CS50 цели што е - 408 00:36:56,280 --> 00:36:59,340 или барем за целите на овој квиз е тоа. 409 00:36:59,340 --> 00:37:03,800 PHP е од страна на серверот. Без JavaScript. 410 00:37:03,800 --> 00:37:08,700 Кога пишувате вашата интернет страница ќе бидат писмено PHP на серверот. 411 00:37:08,700 --> 00:37:11,670 Вие никогаш не ќе бидат писмено да го вклучите Javascript на серверот. 412 00:37:11,670 --> 00:37:17,190 Го вклучите Javascript-завршува добивање испраќаат до прелистувачот, каде што го вклучите Javascript-кодот се извршува. 413 00:37:17,190 --> 00:37:22,250 И JavaScript код треба да живеат во прелистувачот затоа што во спротивно кога сакам да 414 00:37:22,250 --> 00:37:25,830 само се направи било кој вид на JavaScript-Y нешто како кликнување на ова, 415 00:37:25,830 --> 00:37:31,720 Јас не сум претовар страница. Ова е само да вклучите повторно форматирање работи за мене. 416 00:37:31,720 --> 00:37:36,490 Ако го вклучите Javascript живееле на серверот, а потоа јас ќе треба да се неизбежно бара нешто 417 00:37:36,490 --> 00:37:39,490 на серверот за да знаат што да прават. 418 00:37:39,490 --> 00:37:45,380 PHP - не постои такво нешто како PHP во прелистувачот. 419 00:37:45,380 --> 00:37:52,090 Кога ќе побара некоја страница - Па да речеме еве јас побара ова особено страница. 420 00:37:52,090 --> 00:37:57,270 Тоа значи дека ова ќе побара - 421 00:37:57,270 --> 00:38:04,270 освежување - тоа се случува да се освежи оваа страница - 422 00:38:04,270 --> 00:38:07,210 па ова барање излегува на нашиот сервер. 423 00:38:07,210 --> 00:38:13,190 Гледа дека тоа треба да се вратат овој особено тема со овој конкретен проект, 424 00:38:13,190 --> 00:38:23,740 Па сега дека ќе биде некои PHP дека преведувач PHP се случува да го протолкува оваа страница 425 00:38:23,740 --> 00:38:28,680 и тоа се трансформира во само HTML, CSS, можеби го вклучите Javascript-, сеедно. 426 00:38:28,680 --> 00:38:36,930 Тоа е PHP дека процесите ова барање и вади сите на текстот и работи 427 00:38:36,930 --> 00:38:39,170 дека јас сум всушност барате од базата на податоци. 428 00:38:39,170 --> 00:38:44,750 Но, она што остава на серверот е само HTML / ЈС / CSS. 429 00:38:44,750 --> 00:38:48,630 Нема PHP која остава на серверот, бидејќи ако тоа всушност не 430 00:38:48,630 --> 00:38:53,890 тогаш прелистувачот ќе немаат идеја што да прават со него, бидејќи тоа не знае што PHP е. 431 00:38:53,890 --> 00:39:00,250 Но, во истата мисла, бидејќи го вклучите Javascript-е клиент-страна, 432 00:39:00,250 --> 00:39:02,250 никогаш не можете да пристапите MySQL, од неа. 433 00:39:02,250 --> 00:39:07,430 Затоа што PHP е од страна на серверот и да правите пристап на MySQL од него. 434 00:39:07,430 --> 00:39:12,880 >> [Студентите] Може да ви одат над некои од загриженоста за безбедноста со колачиња во HTTP? 435 00:39:12,880 --> 00:39:18,390 [Роб] Оние кои не се работи ние ќе треба да знаеш. 436 00:39:18,390 --> 00:39:24,500 Некои од загриженоста за безбедноста со колачиња во HTTP. 437 00:39:24,500 --> 00:39:28,550 Големото прашање овде е што гледаме дека овде ми колаче е PHP / проект. 438 00:39:28,550 --> 00:39:33,560 Тоа е како универзална PHP сесијата. 439 00:39:33,560 --> 00:39:39,550 Вашата сесија е нешто што во внатрешноста на PHP никогаш не ќе треба да биде потврдена 440 00:39:39,550 --> 00:39:45,690 затоа што тоа е сервер кој има целосна контрола врз сесија. 441 00:39:45,690 --> 00:39:47,690 Вие не може да го допрат воопшто. 442 00:39:47,690 --> 00:39:53,120 Но, тоа е ова колаче - тоа едно - 443 00:39:53,120 --> 00:39:57,500 и претпоставувам дека би можеле да се најавите како мене, веднаш, ако си сакал да го користите тоа - 444 00:39:57,500 --> 00:40:06,610 но тоа е дека колачето дека - неизбежно ќе се направи ниту едно барање до серверот. 445 00:40:06,610 --> 00:40:09,890 Серверот се враќа на страницата. Барањето е направено. 446 00:40:09,890 --> 00:40:12,580 Тоа веќе нема никаков поим кој си ти. 447 00:40:12,580 --> 00:40:17,230 Значи, следниот барање ќе се направи се случува да го вклучите дека куки, така што тоа го знае 448 00:40:17,230 --> 00:40:19,810 ова е лицето кое го направило ова барање пред тоа. 449 00:40:19,810 --> 00:40:23,830 Ова е сесија податоци кои се поврзани со овој корисник. 450 00:40:23,830 --> 00:40:28,210 Тоа е зошто вие не треба да се логирате во за секој и секоја страница што ја користите. 451 00:40:28,210 --> 00:40:33,380 Прашањето на безбедноста тука е дека колачето е испратена во текот на веб. 452 00:40:33,380 --> 00:40:41,490 Ние сме користење на HTTPS тука, па во овој случај тоа значи дека ние сме енкрипција овој материјал. 453 00:40:41,490 --> 00:40:49,870 Некој не може да дојде и само крадат моите куки и сега серверот ќе мислат дека ме си. 454 00:40:49,870 --> 00:40:52,060 Но, со право на HTTP можат. 455 00:40:52,060 --> 00:40:57,650 Исто како и оваа Wireshark / FireSheep нешта кои можете само да слушате на сите на Wi-fi уредите во воздухот 456 00:40:57,650 --> 00:41:01,380 и интервенира она што го сакате, па је. 457 00:41:01,380 --> 00:41:12,430 >> [Студентите] Еден вид на слични безбедносен ризик е зачувување на корисник проект во пост 458 00:41:12,430 --> 00:41:16,860 бидејќи тоа може слободно да се уредува користење на конзоли и работи. 459 00:41:16,860 --> 00:41:23,410 [Роб] Да. Има многу прашања, каде што како само нешто што доаѓа од корисникот 460 00:41:23,410 --> 00:41:26,940 што треба да се провери. 461 00:41:26,940 --> 00:41:37,650 Постојат голем број на случаи каде што тоа ќе биде корисно за како што јас сум за да се направи еден пост. 462 00:41:37,650 --> 00:41:39,650 Бла, бла, бла, бла, бла. Тогаш јас хит одговор. 463 00:41:39,650 --> 00:41:44,540 Тоа ќе биде многу корисно ако пост барање вклучени мојот проект, бидејќи 464 00:41:44,540 --> 00:41:48,610  Сакам да се дружат овој пост со мене. 465 00:41:48,610 --> 00:41:54,820 Но не можам да го направите тоа, бидејќи јас сум слободен да се направи еден пост барање - исто како рачен 466 00:41:54,820 --> 00:41:57,820 излезе со моето мислење барање - 467 00:41:57,820 --> 00:42:00,960 кој користи вашиот кориснички ID и сега тоа ќе ја објавите како вас. 468 00:42:00,960 --> 00:42:07,440 Тоа е причината зошто на серверот не може да се потпре на пост барања кои содржат точната корисничко име. 469 00:42:07,440 --> 00:42:09,720 Тоа е зошто тоа мора да припаѓаат во мојата сесија. 470 00:42:09,720 --> 00:42:15,140 Па јас се погледне до вашиот кориснички ID во мојот сесија низа и јас вметнете дека во мојата база на податоци 471 00:42:15,140 --> 00:42:17,580 како корисник кој всушност го направи овој пост. 472 00:42:17,580 --> 00:42:19,580 [Студентите] И тоа е врз основа на вашите куки? 473 00:42:19,580 --> 00:42:24,690 [Роб] Да. Таа користи колачиња за да одговара до вас како корисник кој тоа барање. 474 00:42:24,690 --> 00:42:30,570 Тоа вади корисничко име од таа седница и дека потоа внесува во базата на податоци 475 00:42:30,570 --> 00:42:32,960 користење на тој корисник проект. 476 00:42:32,960 --> 00:42:40,330 Ова како копче - она ​​што е, всушност, прави е - 477 00:42:40,330 --> 00:42:43,810 Јас не одам за да го најдете тука. Тоа се случува да биде функција Ајакс 478 00:42:43,810 --> 00:42:46,780 Што е Ајакс функција? 479 00:42:46,780 --> 00:42:55,500 Дозволете ми да дознаете она што ми го вклучите Javascript-е. 480 00:42:55,500 --> 00:42:59,710 Тоа беше CS50 проект пред некое време. 481 00:42:59,710 --> 00:43:02,880 Не можам да се сетам на тоа што е. 482 00:43:02,880 --> 00:43:12,530 Ајакс функција - сите Ајакс функција прави е правејќи барање Ајакс за да страница со овој проект - 483 00:43:12,530 --> 00:43:15,810 со ID 22.453. 484 00:43:15,810 --> 00:43:20,180 Тоа не е дури и пост барање. Тоа е GET барањето што го прави уште полесно. 485 00:43:20,180 --> 00:43:27,860 Ако знаев што ја URL адресата е - тоа е нешто како вака / ID = 22.453 - 486 00:43:27,860 --> 00:43:33,290 или ID = 22.453 - 487 00:43:33,290 --> 00:43:40,290 па посета на овој URL ќе се допаѓа тоа. 488 00:43:40,290 --> 00:43:44,600 Што не би било како голем дел од проблемот, но тоа е неверојатно лесно да се напише јамка 489 00:43:44,600 --> 00:43:48,500 кој е само ќе ја посетите оваа рачно одново и одново, која е причината зошто гледате 490 00:43:48,500 --> 00:43:51,180 Isawyouharvard пост со илјадници нешта. 491 00:43:51,180 --> 00:43:56,960 И тие имаат тенденција да бидат CS50-базирани Isawyouharvard мислења. 492 00:43:56,960 --> 00:44:01,200 Како можам да се најде на повеќето се допадна? 493 00:44:01,200 --> 00:44:03,720 Тие имаат тенденција да се брише прилично брзо, исто така. 494 00:44:03,720 --> 00:44:06,490 Ова не е најстариот допадна. Таму ќе одиме. 495 00:44:06,490 --> 00:44:13,400 Измамници на повеќето се допадна страница - тоа е прилично релевантни за ова право сега. 496 00:44:13,400 --> 00:44:21,230 Ох Wow. Тие веќе избришани било кој од оние од оваа година, кои биле 497 00:44:21,230 --> 00:44:25,590 изневерил. Оние имаат сите се избришани. 498 00:44:25,590 --> 00:44:28,680 Никогаш нема да биде пост, кој добива ова високо. 499 00:44:28,680 --> 00:44:32,860 Оваа беше очигледно измамени за да се добие за да се повеќето се допадна страница. 500 00:44:36,570 --> 00:44:39,310 >> Повеќе прашања? 501 00:44:39,310 --> 00:44:46,050 [Студентите] Што треба да знаеме за XHTML? 502 00:44:46,050 --> 00:44:49,710 [Роб] речиси ништо. Само што е тоа. 503 00:44:49,710 --> 00:44:59,220 Разликата помеѓу него и HTML е во тоа што XML е многу слична по изглед 504 00:44:59,220 --> 00:45:09,080 со HTML, освен во HTML ние само треба да имаат предефинирани ознаки. 505 00:45:09,080 --> 00:45:15,380 Но со XML - XML ​​е само како општа формат, каде можете да направите XML документ 506 00:45:15,380 --> 00:45:17,580 поради кои било причини сакате. 507 00:45:17,580 --> 00:45:25,950 Така, на пример, ако сакав можев да се изгради на XML за курсеви - 508 00:45:25,950 --> 00:45:28,860 и јас всушност мислам дека CS50 има API за ова. 509 00:45:28,860 --> 00:45:31,590 Мојата XML документ би можел да изгледа нешто како - 510 00:45:31,590 --> 00:45:39,330 курсеви и се разбира ќе ми треба малку крајот курсеви. 511 00:45:39,330 --> 00:45:48,920 Јас би можеле да имаат се разбира и тоа би можело да има име е еднаква на CS50. 512 00:45:48,920 --> 00:45:58,080 А потоа мојот крај се разбира и јас би можеле да се стави во внатрешноста на тука на студентите, 513 00:45:58,080 --> 00:46:07,010 а потоа внатрешноста на студентите имам листа на еден студент чие име е сеедно. 514 00:46:07,010 --> 00:46:10,180 Јас заврши што студентот и така натаму. 515 00:46:10,180 --> 00:46:16,070 Јас едноставно се случи да се изградат некои произволни XML документ, но тоа е валидна XML. 516 00:46:16,070 --> 00:46:23,700 XML - сето тоа е е овој вид на структура и убаво нешто - причина што ние дури и го нарекуваат XML 517 00:46:23,700 --> 00:46:26,820 е дека овој вид на работа е многу лесно да го анализирам. 518 00:46:26,820 --> 00:46:32,580 Тоа е многу лесно да се преземе овој документ и да направи низа од неа. 519 00:46:32,580 --> 00:46:39,370 И така XHTML е обид да се добие HTML да биде валидна XML. 520 00:46:39,370 --> 00:46:42,580 Веќе ова изгледа прилично сличен со HTML. 521 00:46:42,580 --> 00:46:52,160 Некои од разликите се HTML сте во можност да ги правите нештата како влез можеби тип еднаква на текст 522 00:46:52,160 --> 00:46:55,550 што е стандардно па јас не треба да се каже тоа. 523 00:46:55,550 --> 00:47:00,010 Најава. 524 00:47:00,010 --> 00:47:05,160 >> Постојат 2 работи тука кои го прават овој валиден XHTML. 525 00:47:05,160 --> 00:47:08,750 Првата работа е дека сите XML тагови треба затворање на тагот. 526 00:47:08,750 --> 00:47:13,040 Така што во случај на влез треба да се направи на - која насока на коса црта е тоа? 527 00:47:13,040 --> 00:47:15,060 Оваа насока? Што изгледа погрешно. 528 00:47:15,060 --> 00:47:19,380 Друга насока. 529 00:47:19,380 --> 00:47:21,960 Авто-затворање на тагот. 530 00:47:21,960 --> 00:47:29,560 Втората работа е дека со XML ви треба на овие видови на како клучните вредност парови. 531 00:47:29,560 --> 00:47:32,130 Тоа треба вредност поврзани со неа. 532 00:47:32,130 --> 00:47:35,050 Значи, иако хендикепирани во себе и за себе изразува она што сакам - 533 00:47:35,050 --> 00:47:37,110 овој влез треба да се оневозможи - 534 00:47:37,110 --> 00:47:39,110 тоа е валиден XHTML. 535 00:47:39,110 --> 00:47:47,110 Она што јас всушност треба да се напише е оневозможено еднаква на лицата со хендикеп. 536 00:47:47,110 --> 00:47:49,620 Сега е валиден XHTML. 537 00:47:49,620 --> 00:47:54,850 И овие се само овие мали разлики кои ги трансформираат HTML да XML-базиран вид на работа. 538 00:47:54,850 --> 00:48:04,880 >> [Студентите] XML е за како повлечат преку свој Х целосно од типот на зошто е тоа (нечујни) 539 00:48:04,880 --> 00:48:19,450 [Роб] На нешто од како CSV - на CSV имате само вредности одделени со - 540 00:48:19,450 --> 00:48:23,550 само мислам на табела. А CSV во основа е табела. 541 00:48:23,550 --> 00:48:26,720 Имате можеби колони и имаш еден куп на редови 542 00:48:26,720 --> 00:48:29,600 соработник на податоци со овие колумни, но тоа е тоа. 543 00:48:29,600 --> 00:48:38,310 XML е многу повеќе разноврсна во кои можете да - ќе имаат произволен хиерархија на податоци. 544 00:48:38,310 --> 00:48:43,200 Јас би можеле да имаат повеќе курсеви, кои имаат повеќе студенти во рамките на тоа 545 00:48:43,200 --> 00:48:45,460 каде што ќе биде тешко да се сетам на табела дека - 546 00:48:45,460 --> 00:48:51,010 само дека една табела - CSV особено е како само една табела - 547 00:48:51,010 --> 00:48:58,760 така што една табела има сите CS50, 51, и 61 и во рамките на тие сите 548 00:48:58,760 --> 00:49:03,230 студентите во врска со тие времиња, можеби средба времиња и сите тој вид на работа. 549 00:49:03,230 --> 00:49:09,140 Од друга работа е дека таг имиња даде убав име на сите елементи 550 00:49:09,140 --> 00:49:13,140 па читање CSV датотека може да биде тешко да се обиде и анализирам она што е, всушност, гледате. 551 00:49:13,140 --> 00:49:20,130 XML е многу повеќе читливо, па затоа како - да дојде до некоја личност кој не 552 00:49:20,130 --> 00:49:26,380 навистина знаете што CSV датотека е или како да не е програмер или нешто - 553 00:49:26,380 --> 00:49:30,640 може да им даде како дефиниција XML датотека и тие може да се следат линиите и - 554 00:49:30,640 --> 00:49:33,590 О, јас сум требало да се вметне моето име тука. 555 00:49:33,590 --> 00:49:37,440 Тоа е многу повеќе употребливи формат. 556 00:49:37,440 --> 00:49:42,440 CSV има многу користи, но XML има различни намени. 557 00:49:46,050 --> 00:49:49,680 >> Повеќе прашања? 558 00:49:49,680 --> 00:49:51,900 Други прашања? 559 00:49:56,410 --> 00:50:00,520 [Студентите] Од претходниот квиз - вертикална прошири наспроти хоризонтална скалирање. 560 00:50:00,520 --> 00:50:04,660 [Роб] Вие не би требало да знаеш дека. Јас не мислам дека ние дури и разговаравме за тоа дека. 561 00:50:04,660 --> 00:50:07,340 Јас сум Сомневајќи се дека тоа е само еднократна коментар. 562 00:50:07,340 --> 00:50:12,660 Ох. Хоризонтална наспроти вертикална прошири не е нешто што ќе треба да знаеш. 563 00:50:12,660 --> 00:50:18,570 Мислам дека разликата е само како - О, добро, клучот одговорот ќе каже разликата. 564 00:50:18,570 --> 00:50:26,030 Вертикална прошири е исто како ох, мојот компјутер прави лошо. Јас ќе добиете подобра. 565 00:50:26,030 --> 00:50:29,150 Додека хоризонталната скалирање е ох, мојот компјутер прави лошо - 566 00:50:29,150 --> 00:50:33,360 дозволете ми да добиете 20 од нив на сите работа на истата задача. 567 00:50:40,300 --> 00:50:45,520 >> [Студентите] Може ли да одиме во текот на поврзаните листа начин за правење редици. >> [Роб] Секако. 568 00:50:45,520 --> 00:50:50,000 Тоа е полесно отколку низата начин. 569 00:50:50,000 --> 00:50:53,140 Поврзаните листа начин за правење редици. 570 00:50:53,140 --> 00:50:58,350 Прво, она што не ни struct за поврзана листа изгледа? 571 00:50:58,350 --> 00:51:17,060 [Студентите] Дали сме го прави тоа за - >> [Роб] Ајде да си ја работи својата - Да. 572 00:51:17,060 --> 00:51:30,000 Int вредност, а потоа struct јазол * следниот; 573 00:51:30,000 --> 00:51:34,560 па тоа е она што ние ќе го користите за пример тука. 574 00:51:34,560 --> 00:51:37,660 Ајде да всушност тип на овој материјал. 575 00:51:40,030 --> 00:51:49,600 Ајде да направиме linked_list. 576 00:51:51,750 --> 00:51:53,750 Нашите struct - 577 00:52:05,360 --> 00:52:13,060 Во ред. Сега се гледа во нашата листа на чекање имаме - 578 00:52:13,060 --> 00:52:16,090 ајде да се направи глобална задача. 579 00:52:16,090 --> 00:52:23,130 Тоа ќе биде јазол * дното, и ние имаме dequeue функција. 580 00:52:23,130 --> 00:52:28,330 Претпоставувам овие работи, исто така, може да го скрши точно или неточно - ајде да го направите тоа. 581 00:52:28,330 --> 00:52:38,690 Bool dequeue - и ние сме dequeueing - ох. Hmm. 582 00:52:38,690 --> 00:52:45,200 Int dequeue - она ​​што не го правиме со ова и пред тоа? 583 00:52:45,200 --> 00:52:54,340 Int dequeue и имаме bool Стави во ред и ние треба да Стави во ред некои средства вистина. 584 00:52:54,340 --> 00:53:01,360 Ајде да направиме Стави во ред во прв план. 585 00:53:01,360 --> 00:53:06,520 Ние имаме задача. Ние сакаме да го внесете нешто во редот. 586 00:53:06,520 --> 00:53:12,720 Што е најдобар начин да го направите тоа? 587 00:53:12,720 --> 00:53:20,270 Овде нашата задача во моментов изгледа како имаме некои глобални покажувачот да се започне. 588 00:53:20,270 --> 00:53:24,910 Таму е нашата задача. 589 00:53:24,910 --> 00:53:30,350 Претпоставувајќи дека ние dequeue со преземање на првиот елемент, 590 00:53:30,350 --> 00:53:36,570 Каде сме ние нема да сакате да го вметнете нашите јазол, така што редици работат како што треба? 591 00:53:36,570 --> 00:53:43,440 [Студентите] На самиот крај. >> [Роб] Да. Редици се би требало да биде прв во, прв надвор. 592 00:53:43,440 --> 00:53:48,030 Што значи дека новиот елемент треба да се вметнат овде. Во ред. 593 00:53:48,030 --> 00:53:53,220 >> Враќање код, 594 00:53:53,220 --> 00:53:59,760 тоа значи дека ние ќе сакаат да прават јамки низ нашата задача. 595 00:53:59,760 --> 00:54:10,210 Ајде да направиме јазол * тековната = редот, додека тековната не е еднакво NULL. 596 00:54:10,210 --> 00:54:16,960 Јас би го направил - сите во право, нека го направи тоа одделно. 597 00:54:16,960 --> 00:54:20,460 Прво, сегашниот = редот. 598 00:54:20,460 --> 00:54:24,660 Што ќе правиме ако тековната започнува како NULL? 599 00:54:24,660 --> 00:54:28,410 Ние ќе го правиме ова 2 начини. Прво на овој начин. 600 00:54:28,410 --> 00:54:31,450 Што ќе правиме ако струјата е Нулев? 601 00:54:31,450 --> 00:54:34,850 Дали е ова еквивалентно на, ако задачата е NULL? 602 00:54:38,550 --> 00:54:43,960 [Студентите] Тоа се случува да се врати лажни. >> [Роб] Треба ли да се врати лажни? 603 00:54:43,960 --> 00:54:47,120 Што е во ред со вметнување нешто во празен листа? 604 00:54:47,120 --> 00:54:49,080 [Студентите] Ништо не е во ред со тоа. Жал. 605 00:54:49,080 --> 00:54:55,980 [Роб] Да. Па тука само разликата е мојот глобалната листа на чекање се испратени до мојот нов јазол. 606 00:54:57,840 --> 00:55:02,880 И тогаш морам да сторам проверки на, ако задачата е NULL. 607 00:55:02,880 --> 00:55:05,960 Враќање false. 608 00:55:05,960 --> 00:55:20,910 А потоа чекаат на val i изнесува; редот следната еднаква NULL; врати вистина. 609 00:55:20,910 --> 00:55:25,890 Во ред. Одам да скокаат пиштолот во право тука. 610 00:55:25,890 --> 00:55:29,570 Се сеќавам она што го правевме дека последен пат 611 00:55:29,570 --> 00:55:35,660 каде што рече дека тоа е многу полесно да се работи со јазол ** со овој вид на работа. 612 00:55:35,660 --> 00:55:43,880 Па сега тековната ќе биде и на дното, и доаѓа до тука - 613 00:55:43,880 --> 00:55:53,010 додека моменталниот - додека * тековната не е еднакво на нула - 614 00:55:53,010 --> 00:55:58,230 па дозволете ми да го направите струја - we'll се зборува за ова во една секунда. 615 00:55:58,230 --> 00:56:00,860 Тековната следната. Во ред. 616 00:56:00,860 --> 00:56:12,910 Гледајќи уште во неа на овој начин, ова е процесирањето над сите од моите совети се додека не го достигне нула покажувачот. 617 00:56:12,910 --> 00:56:17,710 Нула покажувачот ќе биде покажувачот Сакам да го замени со мојот нов јазол. 618 00:56:17,710 --> 00:56:21,910 Во потрага на iPad верзија - 619 00:56:21,910 --> 00:56:27,800 ако мојата оригинална покажувач и поврзаните листа е празна тогашниот ќе укаже тука. 620 00:56:27,800 --> 00:56:29,630 Ова се случува да се укаже на нула, 621 00:56:29,630 --> 00:56:34,440 па ова е покажувачот јас се заокружи движат да се укаже на некои други нови јазол. 622 00:56:34,440 --> 00:56:38,150 А ако примерот е овој случај тука 623 00:56:38,150 --> 00:56:42,720 тогашниот ќе напречни од тука - јас збркана малку. 624 00:56:42,720 --> 00:56:50,700 Каде тековната би требало да биде на адресата на тековната следната. 625 00:56:50,700 --> 00:57:00,200 Е она што го сакам? Тековната така * тековната ми дава јазол. 626 00:57:00,200 --> 00:57:04,440 Следна преминува кон следниот. 627 00:57:04,440 --> 00:57:10,700 Јас сум во моментов покажува тука. 628 00:57:10,700 --> 00:57:13,720 Ајде да направиме црвено - па јас сум во моментов покажува тука. 629 00:57:13,720 --> 00:57:19,710 Потоа * тековната ќе референтни овој јазол. 630 00:57:19,710 --> 00:57:25,080 И * тековната следната референци овој јазол, но тоа не е она што сакам. 631 00:57:25,080 --> 00:57:27,700 Сакам овој покажувачот во тој јазол. 632 00:57:27,700 --> 00:57:40,530 Значи, тоа покажувач на овој јазол е симболот (* струја) следната. 633 00:57:47,660 --> 00:57:54,360 >> Во овој момент во времето што сум официјално достигна јазол дека сакам да се замени. 634 00:57:54,360 --> 00:58:13,770 Ајде да ги замени сите од овие редици тековната - и сега сме готови. 635 00:58:13,770 --> 00:58:21,760 Може да има грешки, но идејата е дека со внесување на овој вид на начин 636 00:58:21,760 --> 00:58:28,130 тоа е полесно да се работи со совети кои ние сакаме да се промени 637 00:58:28,130 --> 00:58:32,780 наместо да има потреба да ги пратите на - Добро, е мојот почеток NULL? 638 00:58:32,780 --> 00:58:36,430 О, тоа е? Тогаш јас треба да се создаде на почетокот јазол да биде нешто посебно 639 00:58:36,430 --> 00:58:40,310 на друго место јас ќе сакате да iterate до следното нешто што укажуваат на е NULL, 640 00:58:40,310 --> 00:58:46,740 а потоа јас ќе го замени тоа - она ​​што следната работа е - да ми Примерок јазол. 641 00:58:46,740 --> 00:58:50,740 Наместо да има потреба да се одвојат овие случаи, еве јас само се справи со случајот на 642 00:58:50,740 --> 00:58:54,990 она што е покажувач, кој е NULL дека јас повеќе не сакаат да бидат NULL, 643 00:58:54,990 --> 00:59:01,820 и дека го прави животот полесен освен, тие би требало да биде * тековната сега, бидејќи - 644 00:59:01,820 --> 00:59:05,460 [Студентите] Дали тие се уште големината на еден јазол? 645 00:59:05,460 --> 00:59:10,480 [Роб] Да. Јас сум уште mallocing еден јазол. 646 00:59:10,480 --> 00:59:12,980 [Студентите] Е тоа ќе биде со големина на еден јазол *? 647 00:59:12,980 --> 00:59:20,990 [Роб] Враќање тука, мислам на случај, ако ова е нашата поврзана листа. 648 00:59:28,330 --> 00:59:33,190 Овој човек укажува исклучување на нула. 649 00:59:33,190 --> 00:59:36,950 После тоа зошто јамка, тековни поени до тука 650 00:59:36,950 --> 00:59:41,510 бидејќи ова е покажувач, кој е NULL. 651 00:59:41,510 --> 00:59:50,380 Сега сакам да го промените ова покажувачот да се укаже на нов јазол. 652 00:59:50,380 --> 00:59:58,390 Прво јас Примерок дека новиот јазол - така Примерок големината на јазол. 653 00:59:58,390 --> 01:00:11,070 И дека се враќа јазол * и сега се менува овој покажувач гради на * тековната еднаквите 654 01:00:11,070 --> 01:00:15,780 овој нов јазол дека јас распределени. 655 01:00:15,780 --> 01:00:26,490 Значи, ако струјата е еден јазол **, потоа * тековната ќе биде еден јазол *, 656 01:00:26,490 --> 01:00:32,540 и ако сум mallocing нешто големината на јазол, тогаш ова се враќа покажувач кон јазол 657 01:00:32,540 --> 01:00:39,630 па ова е еден јазол * - па и двете страни коректно имаат ист тип. 658 01:00:39,630 --> 01:00:46,610 И така, ако она што јас само распределени беше NULL, враќање false; 659 01:00:46,610 --> 01:00:54,750 друг заврши поставување на нив со она што сакаме од нив да биде - освен овие треба загради 660 01:00:54,750 --> 01:00:57,730 бидејќи тоа не е како цел на работите работа. 661 01:00:57,730 --> 01:00:59,690 Без загради што го толкува како 662 01:00:59,690 --> 01:01:03,010 тековната стрелка-val dereference тоа. 663 01:01:03,010 --> 01:01:07,010 Наместо Сакам да dereference струја која ме доведува до еден јазол. 664 01:01:07,010 --> 01:01:10,620 Тогаш сакам да се добие вредност поврзани со тој јазол. 665 01:01:10,620 --> 01:01:17,670 >> [Студентите] Мислев стрели дозволено да се заобиколат дека и одат директно на вредноста. 666 01:01:17,670 --> 01:01:22,640 [Роб] Тие го прават. Тоа е ако имам - да речеме задача е еден пример. 667 01:01:22,640 --> 01:01:28,400 Јас сум дозволено да се направи на дното стрелка-val i изнесува бидејќи задача е еден јазол *. 668 01:01:28,400 --> 01:01:39,160 Дали имало некои убави синтаксата на како тековната повеќе стрелка-val или нешто 669 01:01:39,160 --> 01:01:42,540 кои не 2 dereferences, тогаш ова ќе работат добро. 670 01:01:42,540 --> 01:01:44,790 [Студентите] Значи стрелката е само за 1 dereference. >> [Роб] Да. 671 01:01:44,790 --> 01:01:53,590 Алтернативно Можев да напишам ова како (** current.val). 672 01:01:53,590 --> 01:02:02,490 Исто како и јас, исто така, би можела да напише ред како (* дното). Вал. 673 01:02:04,430 --> 01:02:09,250 Па ајде го внесете. Па, тоа е во ред претпоставувам. 674 01:02:09,250 --> 01:02:12,030 Dequeue ќе биде значително покус. 675 01:02:12,030 --> 01:02:18,280 Ајде да се стави празнина тука за чистота. 676 01:02:18,280 --> 01:02:22,820 Значи, dequeue. Што елемент сум јас dequeueing? 677 01:02:22,820 --> 01:02:24,820 [Студентите] Првиот? >> [Роб] Да. 678 01:02:24,820 --> 01:02:32,880 Ако мојот прв еден е NULL - враќање - не знам она што сакаме да се врати - INT_MAX; 679 01:02:32,880 --> 01:02:37,580 и тогаш треба да се направи проверка за да види дали INT_MAX беше вратен. 680 01:02:37,580 --> 01:02:44,090 Тоа е вид на нешто што се вклучени не друго сакаме да - 681 01:02:44,090 --> 01:02:54,610 можеме само да се врати редот на val? Е дека она што сакате да го направите? 682 01:02:54,610 --> 01:02:58,010 Dequeue, исто така, имплицитно ги отстранува објект од дното, 683 01:02:58,010 --> 01:03:10,840 па ајде прво се каже - да добие tmp да се укаже на првиот јазол на нашата листа на чекање. 684 01:03:10,840 --> 01:03:15,510 Сега сакаме да ја подигнеме нашата задача да се укаже на следното нешто во редот. 685 01:03:15,510 --> 01:03:21,450 Сега имаме мали лево. Tmp вредност е нешто што сакаме да се врати. 686 01:03:21,450 --> 01:03:24,180 Значи, вредност = tmp-> Val; 687 01:03:24,180 --> 01:03:31,190 но пред да го врати треба да се ослободи мали и да се врати вредност. 688 01:03:31,190 --> 01:03:36,350 Редоследот на операциите тука е важно во која ние треба да го зграби мали 689 01:03:36,350 --> 01:03:40,520 пред да преминеме на дното на следниот елемент. 690 01:03:40,520 --> 01:03:44,860 Ние треба да добие на вредност, пред да ја ослободи мали, 691 01:03:44,860 --> 01:03:48,710 а потоа можеме да го врати вредност. 692 01:03:48,710 --> 01:03:50,680 >> [Студентите] Треба ли да се постави на дното до дното? 693 01:03:50,680 --> 01:03:57,800 [Роб] Да. Што беше создавање на лоши јамка / не би сакал да работиш по ослободувањето тоа во секој случај. 694 01:03:57,800 --> 01:03:59,900 Редот = дното-> Next. 695 01:03:59,900 --> 01:04:03,230 Ние сакаме да ги унапредат редот во следната елемент не напредуваат на следниот елемент 696 01:04:03,230 --> 01:04:08,170 на она што елементот во моментов е. 697 01:04:08,170 --> 01:04:17,660 Купишта ќе биде значително - како дури и полесно во тоа dequeue е иста 698 01:04:17,660 --> 01:04:20,190 бидејќи ние сме одлепувате на предниот дел на магацинот. 699 01:04:20,190 --> 01:04:24,030 Крајот задача ќе биде многу сличен, каде што само сакате да ги распредели еден јазол 700 01:04:24,030 --> 01:04:27,670 и вметнете во предниот дел на оџакот, па ние дури и не треба да се прават јамки низ ништо. 701 01:04:27,670 --> 01:04:31,420 Ние само внесете директно на фронт. 702 01:04:42,500 --> 01:04:44,640 Е секој добар за тоа? 703 01:04:44,640 --> 01:04:49,760 >> Океј. Повеќе прашања? 704 01:04:49,760 --> 01:04:56,570 [Студентите] Што големи нешта што треба да ги држи во умот од најновите лекција? 705 01:04:56,570 --> 01:04:58,730 [Роб] Најновите предавање. 706 01:04:58,730 --> 01:05:01,620 Вие не треба да знаат било код. 707 01:05:01,620 --> 01:05:07,590 Што треба да знаете Општата идеи. 708 01:05:07,590 --> 01:05:11,650 Половина на Nate не се имате било какви код и така тие слајдови онлајн. 709 01:05:11,650 --> 01:05:15,220 Тие се само како погледнам во нив и тие имаат големи идеи. 710 01:05:15,220 --> 01:05:28,630 Моето полу - знаејќи целокупната идеја на прв не можете да им верувате ништо. 711 01:05:28,630 --> 01:05:38,070 Фактот дека како можеби процесот на компајлерот може да биде лошо, 712 01:05:38,070 --> 01:05:40,870 но тоа дури и не е важно дека изворниот код изгледа добро. 713 01:05:40,870 --> 01:05:46,390 Бидејќи на компајлерот може да се специјално променет да се промени изворниот код 714 01:05:46,390 --> 01:05:50,860  во процесот на составувањето. 715 01:05:50,860 --> 01:05:58,140 Во исто време исто како и - Мислам дека тие се како големи идеи за тоа. 716 01:05:59,560 --> 01:06:09,030 >> [Студентите] Дали ќе се спомене дека ние не треба да се знае нешто во врска со Firesheep - 717 01:06:09,030 --> 01:06:13,110 или ние треба да знаете дека? 718 01:06:13,110 --> 01:06:18,360 [Роб] Со Нејт е половина од работите, нешто што Нејт се осврна и на - 719 01:06:18,360 --> 01:06:22,760 како FireSheep, Wireshark - Јас дури и не мислам дека тој не Firesheep во детали. 720 01:06:22,760 --> 01:06:28,620 Можете исто така, направи нешто со тоа - тоа беше Firesheep - минатата недела? 721 01:06:28,620 --> 01:06:31,110 Дали ќе се смести на тоа? 722 01:06:31,110 --> 01:06:34,060 [Студентите] Да, мислам дека ние би можеле да имаат - >> [Роб] Да. 723 01:06:34,060 --> 01:06:40,880 Ние нема да ви даде Firesheep излез и да каже се протолкува ова. 724 01:06:40,880 --> 01:06:44,960 Тоа е само ќе да биде - тоа ќе биде прашање како што е Firesheep? 725 01:06:44,960 --> 01:06:47,290 Што е тоа користи за? 726 01:06:47,290 --> 01:06:52,120 [Студентите] Мислам дека тоа работи само на верзија 4 на Firefox или нешто слично. 727 01:06:52,120 --> 01:06:55,320 [Роб] Тоа би можело да биде скршена од сега. 728 01:07:11,430 --> 01:07:14,070 Јас немам идеја. 729 01:07:14,070 --> 01:07:18,330 Тие не чини да го оневозможи рачно, 730 01:07:18,330 --> 01:07:21,210 но можеби тоа не функционира со најновите Firefox. 731 01:07:21,210 --> 01:07:24,790 [Студентите] Јас всушност се обидел да го инсталирате бидејќи рече дека тоа ќе биде компатибилен. 732 01:07:24,790 --> 01:07:28,880 [Роб] Значи, претпоставувам дека тоа не функционира со најновите Firefox. 733 01:07:28,880 --> 01:07:32,360 Но, идејата се уште стои на она што требаше да се покаже. 734 01:07:32,360 --> 01:07:39,430 Тоа беше апсурдно колку на светот не живеел во HTTPS во тоа време. 735 01:07:39,430 --> 01:07:43,820 Дури и во последните 2 години, или што и да, тоа е уште - има драматично подобрување во 736 01:07:43,820 --> 01:07:47,210 бројот на веб-сајтови кои го користите HTTPS. 737 01:07:49,920 --> 01:07:52,580 >> [Студентите] Дали ние треба да одиме преку HTTP? 738 01:07:52,580 --> 01:07:58,050 [Роб] Протоколот од него? >> [Студентите] Некои од работите што треба да знаеме. 739 01:07:58,050 --> 01:08:06,220 [Роб] Во ред. Основни работи се сè може да се види во вашата мрежа табот. 740 01:08:06,220 --> 01:08:12,160 Кога ќе побара некоја страница - се враќаат до врвот за главните работи. 741 01:08:12,160 --> 01:08:16,090 Можете да видите тука барањето што можам да направам. 742 01:08:16,090 --> 01:08:19,220 Хром се случува на сите ја форматирате убаво за нас 743 01:08:19,220 --> 01:08:21,970 каде што URL на барањето беше ова, метода на барање беше ГЕТ, 744 01:08:21,970 --> 01:08:24,800 и кодот статус беше 200 OK. 745 01:08:24,800 --> 01:08:28,279 Ако го погоди видите извор, гледам подиректно тоа - 746 01:08:28,279 --> 01:08:35,680 и ова е - ние може да ви покаже било кој од овие, но тоа не е премногу тешко да се протолкува меѓу нив. 747 01:08:35,680 --> 01:08:41,729 Тука е директно барање не сум направил, па тоа значи дека отидов да 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 И протоколот што се користи е HTTP/1.1 кој е буквално - тоа е секогаш ќе биде тоа. 750 01:08:57,569 --> 01:09:01,490 Овде се користи ГЕТ, така што ова, исто така, може да биде пост. 751 01:09:01,490 --> 01:09:04,660 А потоа доаѓаат надолу - сите патот надолу за да се заглавија одговор - ако ние ја видите дека извор, 752 01:09:04,660 --> 01:09:07,740 тоа е местото каде што можеме да видиме на 200 OK. 753 01:09:07,740 --> 01:09:11,069 Знаат можните различен статус кодекси на овие. 754 01:09:11,069 --> 01:09:15,520 Мислам дека во прегледот ние не кажам неколку од овие, 755 01:09:15,520 --> 01:09:20,640 па 403, 404 - оние вид на заеднички претпријатија. 756 01:09:20,640 --> 01:09:26,810 Тоа е голема идеја за неа. 757 01:09:29,990 --> 01:09:35,120 Разликата само помеѓу HTTP и HTTPS е оваа енкрипција. 758 01:09:35,120 --> 01:09:42,319 >> [Студентите] Дали си направил? >> [Роб] Јас мислам така. Па, Да. 759 01:09:42,319 --> 01:09:46,470 [Студентите] Ќе се зборува многу, генерално, за тоа како енкрипција дела? 760 01:09:46,470 --> 01:09:49,920 Бидејќи ние разговаравме за пример кога компресирање Хафман датотеки, 761 01:09:49,920 --> 01:09:54,890 знаете како да ги намалување притисок затоа што всушност испратени на hashtable во рамките на датотеката 762 01:09:54,890 --> 01:09:56,950 Па како не енкрипција работа? 763 01:09:56,950 --> 01:10:00,830 Како да знаете како да го криптирате информации ако не сте всушност пратени на клиентот 764 01:10:00,830 --> 01:10:05,740 клучот за - и ти всушност може да го дофати дека клучот од -? 765 01:10:05,740 --> 01:10:07,740 Како се општиот процес работи? 766 01:10:07,740 --> 01:10:09,870 [Роб] Општите процесот на енкрипција - 767 01:10:09,870 --> 01:10:15,590 тоа е неверојатно детални прашање јас ќе ти одговорам. 768 01:10:15,590 --> 01:10:21,490 Таму е краток - добро, Томи и јас го кратко. 769 01:10:21,490 --> 01:10:26,060 За жал, тоа е како 26 минути, па тоа не е краток. Тоа е долг. 770 01:10:26,060 --> 01:10:31,530 Но нашиот краток беше на RSA, која е само еден пример од овие, 771 01:10:31,530 --> 01:10:40,420 и ова RSA е дел од целокупната HTTPS протокол. 772 01:10:40,420 --> 01:10:46,060 Идејата - RSA е пример за јавен клуч криптографија, 773 01:10:46,060 --> 01:10:49,690 што значи дека имате 2 посебни копчиња. 774 01:10:49,690 --> 01:10:51,690 Го користите копчето 1 за да всушност енкриптираат нешта, 775 01:10:51,690 --> 01:10:54,410 и можете да користите друг клуч за декриптирање работи. 776 01:10:54,410 --> 01:10:58,360 Овој клуч кој го користите за да го криптирате работи е оној кој е јавна. 777 01:10:58,360 --> 01:11:03,500 На веб-сајтот може да ви го испратам овој клуч за енкрипција. 778 01:11:03,500 --> 01:11:08,280 Тие не ви испрати дека клуч за енкрипција, и кога сакате да испратите нешто назад кон нив 779 01:11:08,280 --> 01:11:13,550 го користите дека клуч за енкрипција за да го криптирате сите ваши податоци и испратете ја на нив. 780 01:11:13,550 --> 01:11:16,110 Значи, тие се единствените со приватниот клуч. 781 01:11:16,110 --> 01:11:22,630 Ако тоа приватен клуч стана познат тогаш секој ќе биде во можност да ја декриптираат вашите податоци. 782 01:11:22,630 --> 01:11:27,980 Но, тоа приватен клуч - која е математички поврзани со јавниот клуч, но не можете да 783 01:11:27,980 --> 01:11:33,640 бројка издвојува од другите - така што приватниот клуч може да се користи за декриптирање на податоците. 784 01:11:33,640 --> 01:11:36,630 Бидејќи тие се единствените со приватниот клуч, 785 01:11:36,630 --> 01:11:38,920 тие се единствените кои можат да ги чита податоците. 786 01:11:38,920 --> 01:11:44,170 Па дури иако на јавниот клуч е јавна, 787 01:11:44,170 --> 01:11:47,660 Ја користам истата - кога ќе одам во Google.com или што и да, 788 01:11:47,660 --> 01:11:50,010 тие би можеле да имаат повеќе, не знам - но ако одат на Google.com, 789 01:11:50,010 --> 01:11:54,770 тој оди на Google.com, таа оди на Google.com-- 790 01:11:54,770 --> 01:11:59,250 сите ние да го користите истиот јавен клуч за криптирање нашите сопствени информации сепак сакаме. 791 01:11:59,250 --> 01:12:04,010 Но никој од нас не се случува да бидат во можност да дознаам - се случува да бидат во можност да ја декриптираат 792 01:12:04,010 --> 01:12:09,940 на нивните информации, бидејќи јавниот клуч не е во состојба да се дешифрирате. 793 01:12:09,940 --> 01:12:13,050 Тоа само може да криптирате. 794 01:12:13,050 --> 01:12:23,250 И тоа е забавно / детални математика на - како еден куп на модулот оператори и exponentials и работи, 795 01:12:23,250 --> 01:12:28,890 дека тоа едноставно работи дека приватниот клуч е единственото нешто што може да 796 01:12:28,890 --> 01:12:33,620 декриптирање на јавниот клуч на енкрипција нешта. 797 01:12:33,620 --> 01:12:38,020 Да. Види на RSA краток за повеќе детали. 798 01:12:38,020 --> 01:12:41,880 [Студентите] е дека на веб-страница? 799 01:12:41,880 --> 01:12:46,210 [Роб] Да, мислам дека тоа е во овој момент. Или барем на YouTube линк до него беше објавен. 800 01:12:51,330 --> 01:12:57,190 Ајде да видиме. Шорцеви. Мислам дека тоа би биле недела 2-поврзани. Да. RSA. 801 01:12:57,190 --> 01:13:03,780 А тоа е - Не сме случува да се игра оваа - 24 минути. 802 01:13:03,780 --> 01:13:05,780 Тоа е долга еден. 803 01:13:07,740 --> 01:13:09,740 >> Повеќе прашања? 804 01:13:09,740 --> 01:13:14,770 [Студентите] може да се зборува кратко за bitmasks? >> [Роб] Секако. 805 01:13:14,770 --> 01:13:23,090 Накратко кажано, идејата е само тоа како - >> [Студентите] Што е тоа, Роб? 806 01:13:23,090 --> 01:13:32,760 [Роб] Bitmasks. Идејата е - да речеме имаме некои - we're користење на некои цел број - 807 01:13:32,760 --> 01:13:41,490 int x - така, ние го започнете во 0. 808 01:13:41,490 --> 01:13:47,900 Сега, ова е цел број 32 бита, па секој поединечен 1 на оние битови може да се користат за да претставуваат 809 01:13:47,900 --> 01:13:50,600 одредена FLAC. 810 01:13:50,600 --> 01:13:56,210 Ова е местото каде ако се погледне на оперативниот систем кодови, тие ги користат оваа насекаде 811 01:13:56,210 --> 01:14:03,900 каде можеби до врвот некаде тие хаш-дефинирање - 812 01:14:03,900 --> 01:14:09,020 Да видиме некои примери. 813 01:14:09,020 --> 01:14:22,720 Човекот-2-отворен - отворен систем повик може да се види тука дека еден од нејзините аргументи е int знамиња - 814 01:14:22,720 --> 01:14:29,120 она што го очекува како тој аргумент се некои од овие знамиња. 815 01:14:29,120 --> 01:14:33,030 Гледаме O_append, O_ASYNC, O_CLOEXEC, 816 01:14:33,030 --> 01:14:37,130 O_CREAT, и така натаму. 817 01:14:37,130 --> 01:14:45,260 O_DIRECT. Овие видови на знамиња се хаш-се дефинира некаде. 818 01:14:45,260 --> 01:14:47,260 И сите од нив се токму 1 малку. 819 01:14:47,260 --> 01:14:57,600 Значи, O_CREAT може да биде хаш-дефинира како 1, лево смена, 4 (1 << 4). 820 01:14:57,600 --> 01:15:02,280 Тоа ќе биде - кога јас го користам O_CREAT дека е само случува да биде - 821 01:15:02,280 --> 01:15:09,350 во бинарен 1, 0, 0, 0, и 30-носталгичната нули пред тоа. 822 01:15:09,350 --> 01:15:13,930 Тоа е само еден малку сет, а тоа малку претставува ова знаме. 823 01:15:13,930 --> 01:15:18,160 И така нема други знаме ќе треба да се остави се менувале од 4. 824 01:15:18,160 --> 01:15:30,390 Јас сум во можност да ги претставуваат до 32 знамиња во еден цел број од тоа - 825 01:15:30,390 --> 01:15:40,850 x = O_CREAT малку мудар или O_DIRECT. 826 01:15:40,850 --> 01:15:43,640 Сте само подигање било 2 од оние знамиња. 827 01:15:43,640 --> 01:15:48,600 Сега x се случува да имаат 2 битови во собата кои одговараат на 2 парчиња 828 01:15:48,600 --> 01:15:53,490 на O_CREAT и O_DIRECT. 829 01:15:53,490 --> 01:15:58,740 Начинот на кој потоа - па потоа го поминавме x во отворен функција, 830 01:15:58,740 --> 01:16:02,950 и отворен треба да се види она што знамиња беа всушност во собата. 831 01:16:02,950 --> 01:16:06,480 Значи, тоа е каде што тоа се случува да ги правите нештата како 832 01:16:06,480 --> 01:16:19,340 ако (x & O_CREAT) се направи нешто, 833 01:16:19,340 --> 01:16:27,110 или ако (x & O_DIRECT) направи нешто друго, 834 01:16:27,110 --> 01:16:30,300 а потоа може да има некои знаме дека ние не имаат поставено - 835 01:16:30,300 --> 01:16:35,730 ако (x & O_ - Јас не знам што другите знамиња се - 836 01:16:35,730 --> 01:16:42,140 (X & O_RDONLY) - тоа особено состојба не се случува да биде погубен. 837 01:16:42,140 --> 01:16:44,030 Или дека блок од код нема да биде погубен, 838 01:16:44,030 --> 01:16:48,030 но овие 2 се затоа што тие 2 знамиња беа поставени. 839 01:16:48,030 --> 01:16:57,400 И ќе забележите дека во C, секоја вредност не е 0 е точно. 840 01:16:57,400 --> 01:17:05,020 Значи, (X & O_CREAT) ќе биде 0 или O_CREAT 841 01:17:05,020 --> 01:17:07,990 бидејќи O_CREAT има само еден малку во собата. 842 01:17:07,990 --> 01:17:12,800 Ако тоа малку е поставена следно, тогаш ова ќе се вратат O_CREAT - 843 01:17:12,800 --> 01:17:16,640 бинарни каде што само тоа малку е поставена. 844 01:17:16,640 --> 01:17:23,400 Ако тоа малку следната не е наместена, а потоа тоа се случува да се врати 0, во кој случај знаеме знаме не беше во собата. 845 01:17:23,400 --> 01:17:25,400 Тоа е како да се користи bitmasks. 846 01:17:25,400 --> 01:17:29,050 Мислам дека на претходната испит или можеби во класа или нешто - 847 01:17:29,050 --> 01:17:35,150 исто така можете да го користите bitmasks за печатење на бинарни на променливата. 848 01:17:35,150 --> 01:17:46,250 Па јас да го користите - looping преку - 1, лево смена, 0 - а потоа печати ако x и тоа - 849 01:17:46,250 --> 01:17:52,570 ако x & 1, лево смена, 0 - потоа отпечатите 0 или 1. Или да ги печатите од 1 друго испечатите 0. 850 01:17:52,570 --> 01:18:00,620 А потоа одам во текот уште еднаш - ако x & 1, лево смена, 2 - тогаш тоа значи дека вториот малку 851 01:18:00,620 --> 01:18:04,450 на променлива е поставено, па јас се печати 1 на друго место јас печати 0. 852 01:18:04,450 --> 01:18:06,860 И мислам дека ние, всушност, можеби ќе сакате да го стори тоа во обратен редослед, бидејќи 853 01:18:06,860 --> 01:18:10,120 обично дека сакате левата страна да биде од највисок ред битови 854 01:18:10,120 --> 01:18:24,510 и на десната страна да биде најниската битови, па тоа ќе веројатно јамка 4 int i = 31 до јас хит 0, 855 01:18:24,510 --> 01:18:32,320 тогаш се точно услов - ако x & 1, лево-Shift, I; печати 1 друго 0. 856 01:18:32,320 --> 01:18:34,320 [Студентите] Ви благодарам. 857 01:18:36,280 --> 01:18:38,550 >> [Роб] Мислам дека ние сме надвор од времето. 858 01:18:38,550 --> 01:18:42,840 Повеќе прашања во последните неколку надвор од работно време секунди? 859 01:18:42,840 --> 01:18:47,710 Во ред е. Со среќа утре. 860 01:18:47,710 --> 01:18:54,780 Ова беше последниот дел каде што следната недела ќе биде задолжително. 861 01:18:54,780 --> 01:19:03,770 Јас ќе му ја врати квизови и можеме да одиме над нив, а можеби и одат над други работи кои 862 01:19:03,770 --> 01:19:09,230 сте биле заинтересирани, или финалниот проект нешта, или идните CS класи работи или - не знам. 863 01:19:09,230 --> 01:19:12,070 Но ова е последен материјал исполнето секција. 864 01:19:12,070 --> 01:19:15,070 Чао! 865 01:19:15,070 --> 01:19:20,970 (Аплауз) 866 01:19:22,250 --> 01:19:24,420 >> [CS50.TV]