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 >> Да. >> [Студэнт] Ці можаце вы перайсці нападаў перапаўнення буфера? >> [Роб] Вядома. 10 00:00:37,850 --> 00:00:45,530 Асноўным прыкладам фактычна можа быць прама тут. 11 00:00:45,530 --> 00:00:48,720 Асноўная здзелка за нападамі перапаўнення буфера 12 00:00:48,720 --> 00:00:51,540 у нас ёсць некаторыя буфер, тут. 13 00:00:51,540 --> 00:00:54,110 Чар с - што толькі ад памеру 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 (бар) у С, але хто ведае, як доўга бар. 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 Тут мы маем C (0), а затым мы маем З, 1, 2, 3, 4, 5 і гэтак далей. 25 00:01:39,480 --> 00:01:44,810 Пры нармальных абставінах мы б запоўніць гэты буфер як звычайна. 26 00:01:44,810 --> 00:01:50,480 Калі мы ўставілі "прывітанне", што ў нас ч-е-л-л-о / 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 дзе зноў - Little Indian - гэта не проста, але кожны байт мае зваротную. 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 калі я скажу, тэкставыя * 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 Гэта падобна на тое месца, дзе мы ставім нашы радкі, як сімвал * = прывітанне 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 Гэта азначае, што такога роду буфернай атакі перапаўнення ў нас ёсць тут 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 >> Можна абыйсці гэта пэўны тып перапаўнення буфера 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 мы б ніколі не прымушаць вас рабіць рэалізацыю выглядзе дрэва на экзамене 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 Тым не менш, Вы павінны ведаць структуру з выглядзе дрэва ці структуры з хэш-табліцы або любы іншы. 116 00:08:25,220 --> 00:08:30,230 Гэта на самай справе дакладна для любога роду структуры дадзеных мы бачылі. 117 00:08:30,230 --> 00:08:33,559 Звязаныя спісы, шмат'ярусныя з перакосамі бінарныя дрэвы - 118 00:08:33,559 --> 00:08:38,190 Вы павінны быць у стане вызначыць тыя Структуры на памяць. 119 00:08:38,190 --> 00:08:44,810 Сінтаксічнага дрэва - гэта азначае, што адзінае, што вам трэба будзе зрабіць, гэта, можа быць, мы дамо вам 120 00:08:44,810 --> 00:08:50,070 некаторы слова або нешта, і мы будзем казаць пабудаваць сінтаксічнага дрэва, што - 121 00:08:50,070 --> 00:08:52,870 мы дамо вам, можа быць, набор слоў 122 00:08:52,870 --> 00:08:56,280 і мы як пабудаваць сінтаксічнага дрэва, які прадстаўляе гэты слоўнік. 123 00:08:56,280 --> 00:09:05,980 >> Давайце зробім наш слоўнік котку і сабаку. 124 00:09:05,980 --> 00:09:10,790 Ідэя сінтаксічнага дрэва, мы пачнем з гэтага масіва - 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 Дык вось, калі мы спрабуем ўставіць котку ў нашай сінтаксічнага дрэва 128 00:09:28,560 --> 00:09:35,360 першы знак 'з', які будзе ", калі роўны 0, то Ь 1, з-2». 129 00:09:35,360 --> 00:09:38,090 Мы збіраемся пайсці ў другой індэкс, 130 00:09:38,090 --> 00:09:41,100 і мы збіраемся стварыць сінтаксічнага дрэва ад гэтага. 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 Тады мы ідзем да «т», і мы таксама павінны, што спускаецца якая на самой справе свайго роду важным 136 00:10:05,650 --> 00:10:13,990 таму - давайце гэта прыйсці сюды. Вось наш сінтаксічнага дрэва для «т». 137 00:10:13,990 --> 00:10:23,370 Скажам гэта індэкс 'т' будзе 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 Што гэта значыць наша структура выглядае? 152 00:11:22,760 --> 00:11:25,760 [Студэнт] Гэта масіў паказальнікаў, што складае 26 у даўжыню і затым BOOL былі ці не былі. 153 00:11:25,760 --> 00:11:47,430 [Роб] Так. Такім чынам, мы будзем мець структуры 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 А потым мы павінны можа быць, сімвал або лагічнае значэнне - назавем гэтае слова. 159 00:12:11,830 --> 00:12:18,120 Вось 2 з 3 рэчаў, я думаю, вы калі-небудзь спатрэбіцца ведаць пра спробы - 160 00:12:18,120 --> 00:12:24,370 будаваць іх, структура з іх, і апошняе, што з'яўляецца час выканання з іх. 161 00:12:24,370 --> 00:12:28,250 >> Што такое час працы выглядзе дрэва - або пошук у выглядзе дрэва? 162 00:12:28,250 --> 00:12:47,500 Гэта дзе мы кажам, што гэта а (к), дзе да-даўжыня слова ў нас, здараецца, гледзячы; 163 00:12:47,500 --> 00:12:53,850 але ў той жа час мы гаворым, - прынамсі, дзеля PSet 5 SPELLER - Гаворым 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 гэта свайго роду глупства, таму што ў той жа час, скажам, алгарытм вываду N. 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 У любым выпадку растлумачыць, што альбо O (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 >> Да. >> [Студэнт] Ці мае лагічнае значэнне - таму што, калі вы зрабілі свой сінтаксічнага дрэва 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 У нашай першапачатковай сінтаксічнага дрэва - 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 Мы ніколі не павінны вылучыць гэты сінтаксічнага дрэва. 195 00:15:55,820 --> 00:15:57,950 Мы проста пакласці 1 там. 196 00:15:57,950 --> 00:16:03,310 Гэта ўсё яшчэ паказвае на NULL. 197 00:16:03,310 --> 00:16:09,430 Калі мы толькі будзем мець асобныя знакі 198 00:16:09,430 --> 00:16:17,220 няма ніякіх прычын, каб даходзіць да іншай сінтаксічнага дрэва проста, каб адзначыць гэты ліст як выкарыстоўваецца. 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 >> [Студэнт] Але не нам патрэбен стартавы сінтаксічнага дрэва, якое будзе паказваць на гэтую "а"? 202 00:16:36,060 --> 00:16:43,570 [Роб] У нас ёсць глабальны ці нешта структура сінтаксічнага дрэва * т 203 00:16:43,570 --> 00:16:47,270 што паказвае тут, але гэта проста паказальнік. 204 00:16:47,270 --> 00:16:51,500 Гэта не поўнамаштабная сінтаксічнага дрэва, які, якія паказваюць на яго. 205 00:16:51,500 --> 00:17:02,000 [Студэнт] Добра. Як бы мы прысвойваем літару «I'-са словам I? 206 00:17:02,000 --> 00:17:06,380 [Роб] Яго пытанне можа быць адказваючы, што. Трымайся. 207 00:17:06,380 --> 00:17:15,060 Гэта значыць праблема, калі сінтаксічнага дрэва само па сабе - 208 00:17:15,060 --> 00:17:17,880 Я не ведаю, то, як Pset напісаў бы яе. 209 00:17:17,880 --> 00:17:19,880 Папярэдняя структура была дрэннай. 210 00:17:19,880 --> 00:17:41,690 Але мы маглі б зрабіць структура вузел з'яўляецца BOOL - і паказальнік - 211 00:17:41,690 --> 00:17:46,500 там на самай справе некалькі спосабаў вы маглі напісаць яго. 212 00:17:46,500 --> 00:18:01,800 Альтэрнатыўна Trie не павінны быць структурай. 213 00:18:01,800 --> 00:18:21,250 Гэта можа быць нават сінтаксічнага дрэва - ЬурейеЕ вузел * - 214 00:18:21,250 --> 00:18:34,760 вузел [26] не з'яўляецца сінтаксічнага дрэва, і гэта ўжо не структуры. 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 Вы абавязкова павінны цэлы іншы ўзровень сінтаксічнага дрэва, што вы не павінны былі б у першую чаргу. 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 паказальнік, паказальнік лагічны, паказальнік лагічны, і гэтак далей. 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 масівы лагічных значэнняў і паказальнікаў. 228 00:19:41,500 --> 00:19:47,340 Вы павінны былі б затым пабудаваць масіў лагічных значэнняў - 229 00:19:47,340 --> 00:19:51,240 ваш масіў лагічных значэнняў павінна быць такі ж вялікі, як сінтаксічнага дрэва 230 00:19:51,240 --> 00:19:53,200 таму што вы не можаце проста ёсць 26 лагічныя. 231 00:19:53,200 --> 00:19:57,010 Ён павінен расці з кожным магчымым - 232 00:19:57,010 --> 00:20:03,240 як ваш сінтаксічнага дрэва мае больш чым 26 ісціна або хлусня магчымыя словы. 233 00:20:03,240 --> 00:20:08,240 У гэты момант яны могуць таксама быць проста адной структуры, што ваш сінтаксічнага дрэва расце ўніз з. 234 00:20:08,240 --> 00:20:15,210 Гэта не здаецца правільным, таму што - што я хачу тут? 235 00:20:15,210 --> 00:20:23,640 Так, сінтаксічнага дрэва * т - 236 00:20:23,640 --> 00:20:30,200 вы можаце зрабіць вызначэнне тыпу (вузел *) [26] сінтаксічнага дрэва; 237 00:20:30,200 --> 00:20:33,090 , Якія могуць быць сінтаксіс Я шукаю. 238 00:20:36,740 --> 00:20:41,450 І гэта павінна быць проста звычайная сінтаксічнага дрэва. 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 супраць Ajax? 247 00:21:19,040 --> 00:21:24,550 [Роб] Яны і самі па сабе зусім розныя. 248 00:21:24,550 --> 00:21:32,720 JQuery робіць ўключыць Ajax. Гэта дае нам некаторы спрошчанае выкарыстанне Ajax. 249 00:21:32,720 --> 00:21:38,480 Але Аякс укамплектаваны JavaScript. JavaScript мае магчымасці Ajax. 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 Вы можаце паглядзець на яго ў Facebook ці нешта. 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 Цяпер, калі я націскаю на - ну, гэта робіць Ajax перш чым я нават націснуць на што-небудзь. 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 Звярніце ўвагу, Facebook робіць гэтыя пастаянныя запыты нават пасля загрузкі старонкі. 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 - усё гэта робіць кажа, як вар $ = цэлая куча рэчаў - 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 $ ("# Склеп"). Стыль ("выраўноўвання тэксту", "цэнтр"). 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 У чарговы, якія набілі аскому JavaScript вы можаце рабіць рэчы, як 278 00:24:42,780 --> 00:24:50,490 дакумент-кропка-атрымаць элемент па ID калантытула-кропка - Я не ведаю, што гэта такое на той момант - 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 Так, гэты селектар - у стане выбраць рэчы ў DOM, як гэта неверагодна зручна 284 00:25:22,000 --> 00:25:29,420 так як у старой добрай JavaScript вы павінны былі б зрабіць дакумент-кропка-атрымаць элементы па імя класа 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 Функцыі будуць адрознівацца ў залежнасці ад я выкарыстаць клас або ID 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 Давайце выкажам здагадку, што мы выбіраем нешта з ID P. 305 00:26:55,570 --> 00:27:00,500 >> [Студэнт] Вы заўсёды павінны выкарыстоўваць фунт? 306 00:27:00,500 --> 00:27:09,600 [Роб] Гэта азначае, ID. Гэта эквівалентна CSS, таму CSS селектары - гэта натхнёны, што. 307 00:27:09,600 --> 00:27:12,410 Дзе ў CSS, калі я хацеў, каб стыль ніжняга калантытула - 308 00:27:12,410 --> 00:27:16,950 ці нешта з ID зносцы - 309 00:27:16,950 --> 00:27:23,490 было б, выраўноўвання тэксту: цэнтр; 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 Агульная карціна мы $ ("# F"). 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 Яшчэ адзін, калі 'е', здараецца, ID для ўваходу, 328 00:29:08,430 --> 00:29:14,250 затым хэш-F-кропка-Val - калі я хачу, каб усталяваць ўваход на нешта накшталт - 329 00:29:14,250 --> 00:29:17,900 дапусцім, я ўдарыў сцяжок, і я хачу, каб усталяваць значэнне па змаўчанні - 330 00:29:17,900 --> 00:29:26,070 дот-вал - Я нават не ведаю, - 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 Або вал - пустыя двукоссі. 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 вы можаце проста адключыць наяўнасць ва ўсіх браўзэрах. 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 Вельмі нешматлікія людзі звяртаюцца наяўнасць прэч. 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 Мы разгледзім - верагодна, Facebook мае шмат прыкладаў, калі, калі я прыйду да элементаў 352 00:31:09,850 --> 00:31:17,820 шукаю тут пад тэгам элементаў я бачу менавіта гэтую DIV, які будучы выдзеленай тут - 353 00:31:17,820 --> 00:31:22,670 ці гэта цэлая старонка - так, гэта там. Гэта мае ID pagelet_bluebar. 354 00:31:22,670 --> 00:31:26,730 У кансолі я мяркую, што яны выкарыстоўваюць JQuery. 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 усё яшчэ гледзячы на ​​нашых элементаў тут - у нас тут клас складае Navbar. 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 так тут, калі я зраблю ID тэкставага пошуку. 371 00:33:16,910 --> 00:33:23,190 Я прынясу над ім, і я бачу, што гэта правільна, што шукаў. 372 00:33:23,190 --> 00:33:27,670 Калі я хачу зрабіць. Вал гэта дасць мне тое, што я набраў там. 373 00:33:27,670 --> 00:33:36,010 Калі б я хацеў зрабіць прывітанне гэта зменіць яго тут, каб прывітанне - JQuery. 374 00:33:36,010 --> 00:33:45,780 Вядома, я мог бы зрабіць смешна, як document.get элемента па ID - тэкставы пошук - 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 >> [Студэнт] Я думаю, што я бачыў па-іншаму, каб дабрацца да элемента з дапамогай DOM. 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 Dot - Я не ведаю, што мы назвалі, што - дык гэта нават не мае назвы, 389 00:35:03,070 --> 00:35:08,050 так што, магчыма ўваходы будуць працаваць. Няма. 390 00:35:08,050 --> 00:35:11,050 Я нават не ведаю, як атрымаць на гэта - атрымаць элемент-я-тэгаў ўводу назвы. 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 Вы ніколі не будзеце пісаць наяўнасць на серверы. 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-у рэчы, як націснуўшы на гэта, 415 00:37:25,830 --> 00:37:31,720 Я не перазагрузкі старонкі. Гэта ўсяго JavaScript перафарматаванне рэчы для мяне. 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 Яна бачыць, што ён павінен вярнуцца менавіта гэтую нітку з гэтай канкрэтнай ID, 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 / JS / 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 / ID. 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-мкс ў паветры 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 , Якая выкарыстоўвае свой ідэнтыфікатар карыстальніка і цяпер ён будзе размяшчаць як вы. 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 Так я гляджу свой ідэнтыфікатар карыстальніка ў маёй масіва сесіі і я ўставіць, што ў маёй базе дадзеных 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 Функцыя Аякс - усе функцыі Аякс робіць гэта зрабіўшы запыт Ajax на старонку з гэтым ID - 483 00:43:12,530 --> 00:43:15,810 з ID 22453. 484 00:43:15,810 --> 00:43:20,180 Гэта нават не просьба паведамленне. Гэта запыт Get што робіць яго яшчэ прасцей. 485 00:43:20,180 --> 00:43:27,860 Калі б я ведаў, што URL з'яўляецца - гэта нешта накшталт як гэта / ID = 22453 - 486 00:43:27,860 --> 00:43:33,290 або ID = 22453? - 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 які толькі збіраецца наведаць гэты URL зноў і зноў, і менавіта таму вы бачыце 490 00:43:48,500 --> 00:43:51,180 Isawyouharvard паведамленне з тысячамі рэчаў. 491 00:43:51,180 --> 00:43:56,960 І яны, як правіла, паведамленняў Isawyouharvard CS50 аснове. 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 Ух ты. Яны ўжо выдалены любы з іх з гэтага года, якія былі 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 Self-зачыняе тэг. 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 аб як цягнуць праз свой страх і X наогул як, чаму гэта (неразборліва) 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 Па-першае, што ж наша структура для звязанага спісу выглядае? 571 00:50:58,350 --> 00:51:17,060 [Студэнт] Ці павінны мы рабіць гэта на працягу - >> [Роб] Давайце і эквіваленты - так. 572 00:51:17,060 --> 00:51:30,000 Int вал, затым структура вузла * наступны; 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 Наша структура - 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 з чаргі - і мы вызваленні пакета з чаргі - кс. Хм. 582 00:52:38,690 --> 00:52:45,200 Int з чаргі - што ж нам рабіць з гэтым раней? 583 00:52:45,200 --> 00:52:54,340 Int з чаргі і ў нас ёсць Ьоо Enqueue і мы павінны паставіць у чаргу некаторыя сродкі праўда. 584 00:52:54,340 --> 00:53:01,360 Давайце зробім Enqueue ў першую чаргу. 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 Калі выказаць здагадку, што мы з чаргі, узяўшы першы элемент, 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 Што нам рабіць, калі ток NULL? 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 Вярнуцца ілжывым. 608 00:55:05,960 --> 00:55:20,910 А потым у чарзе вал роўная 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 у той час як ток - у той час як * ток не роўны NULL - 614 00:55:53,010 --> 00:55:58,230 так што дазвольце мне проста рабіць ток - Мы вырабім пагаварыць пра гэта ў секунду. 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 яшчэ я хачу ітэрацыі, пакуль наступнае, што я паказваць на ня 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 Гэты хлопец паказвае прэч да NULL. 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 Спачатку я Malloc што новы вузел - так Таноса памер вузла. 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, вяртанне ілжывым; 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 ток-стрэлка-вал разыменовать што. 663 01:01:03,010 --> 01:01:07,010 Замест гэтага я хачу разыменовать ток, які прыносіць мне да вузла. 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 Мне дазволена рабіць чарзе стрэлка-вал роўна я з-за чаргі вузел *. 668 01:01:28,400 --> 01:01:39,160 Калі былі некаторыя добрыя сінтаксіс, як ток-больш за стрэлкай-Val ці нешта 669 01:01:39,160 --> 01:01:42,540 якія зрабілі 2 разыменовывает, то гэта будзе добра працаваць. 670 01:01:42,540 --> 01:01:44,790 [Студэнт] Так стрэлка толькі для 1 разнаймення. >> [Роб] Так. 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 Так, з чаргі. Што элемент я вызваленні пакета з чаргі? 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 можа мы проста вяртаем чарзе вал? Гэта тое, што мы хочам зрабіць? 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 налева. Tmp вал з'яўляецца, што мы хочам вярнуцца. 686 01:03:21,450 --> 01:03:24,180 Так, вал = TMP-> вал; 687 01:03:24,180 --> 01:03:31,190 але перш, чым мы вярнуць яго, мы павінны вызваліць TMP і вярнуцца вал. 688 01:03:31,190 --> 01:03:36,350 Парадак аперацый тут гуляе важную ролю ў тым, што мы павінны захапіць TMP 689 01:03:36,350 --> 01:03:40,520 перш чым мы пяройдзем чаргу да наступнага элементу. 690 01:03:40,520 --> 01:03:44,860 Нам трэба, каб атрымаць значэнне, перш чым мы бясплатна TMP, 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 Чарга = чарзе> наступная. 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 Палова Нейт не было ніякага кода і так гэтыя слайды ў рэжыме онлайн. 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 Chrome адбываецца адфарматаваць ўсё гэта добра для нас 743 01:08:19,220 --> 01:08:21,970 дзе URL запыт быў гэты, метад запыту быў GET, 744 01:08:21,970 --> 01:08:24,800 і код стану было 200 ОК. 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 Сюды мы выкарыстоўвалі GET, так што гэта таксама можа быць POST. 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 Вы ведаеце, як распакаваць іх, таму што вы на самай справе паслаў хэш-табліцу ў файле 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 І гэта весела / падрабязная матэматыка - як кучка аператараў модуляў і экспанент і іншае, 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 І гэта - we're не збіраюся гуляць у гэтую - 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 [Студэнт] Не маглі б вы сцісла распавесці аб бітавых масак? >> [Роб] Вядома. 805 01:13:14,770 --> 01:13:23,090 Сцісла, ідэя складаецца ў тым толькі, што, як - >> [Студэнт] Што гэта, Роб? 806 01:13:23,090 --> 01:13:32,760 [Роб] Бітаў маскі. Ідэя складаецца ў тым - давайце проста скажам, у нас ёсць некаторыя - we're выкарыстоўваючы некаторыя цэлы лік - 807 01:13:32,760 --> 01:13:41,490 унутр х - так, мы пачынаем гэта прэч ў 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 х = O_CREAT трохі мудрым або O_DIRECT. 826 01:15:40,850 --> 01:15:43,640 Ты проста выбіраючы любыя 2 з гэтых сцягоў. 827 01:15:43,640 --> 01:15:48,600 Цяпер х будзе мець 2 біта, устаноўленыя якія адпавядаюць 2 біта 828 01:15:48,600 --> 01:15:53,490 з O_CREAT і O_DIRECT. 829 01:15:53,490 --> 01:15:58,740 Такім чынам, што потым - так, то мы прайшлі х у адкрытым функцыі, 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 калі (х & O_CREAT) зрабіць нешта, 833 01:16:19,340 --> 01:16:27,110 або калі (х & O_DIRECT) зрабіць нешта яшчэ, 834 01:16:27,110 --> 01:16:30,300 а затым могуць быць некаторыя сцяг, што мы не ўсталявалі - 835 01:16:30,300 --> 01:16:35,730 калі (х & O_ - Я не ведаю, што былі іншыя сцягі - 836 01:16:35,730 --> 01:16:42,140 (Х & 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 Так, (х & 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 Вось як вы выкарыстоўваеце битмаски. 846 01:17:25,400 --> 01:17:29,050 Я думаю, што на папярэднім экзамене або, можа быць, у класе або што-то - 847 01:17:29,050 --> 01:17:35,150 Вы можаце таксама выкарыстоўваць битмаски раздрукаваць двайковы зменнай. 848 01:17:35,150 --> 01:17:46,250 Таму я магу выкарыстоўваць - цыкл па - 1, зруху налева, 0 -, а затым раздрукаваць, калі х &, што - 849 01:17:46,250 --> 01:17:52,570 калі х & 1, зрух налева, 0 - затым раздрукаваць 0 або 1. Ці надрукаваць 1 яшчэ надрукаваць 0. 850 01:17:52,570 --> 01:18:00,620 І тады я перайсці яшчэ раз - калі х & 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 унутр я = 31, пакуль я не ўдарыў 0, 855 01:18:24,510 --> 01:18:32,320 тады, што дакладнае стан - калі х & 1, зруху налева, я; надрукаваць 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]