1 00:00:00,000 --> 00:00:02,270 >> [Агляд: Віктарына 1] 2 00:00:02,270 --> 00:00:04,620 [Алі Нама, Oreoluwa Barbarinsa, Лукас Фрейтас, Роб Боуден] [Гарвардскі універсітэт] 3 00:00:04,620 --> 00:00:07,660 [Гэта CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Лукас Фрейтас] Вітаю ўсіх. Гэта водгук для віктарыны 1. 5 00:00:11,610 --> 00:00:15,040 Гэтак жа, як за дакладнасць інфармацыі, гэта - я маю на ўвазе, што мы збіраемся, каб паспрабаваць пакрыць 6 00:00:15,040 --> 00:00:17,770 як шмат матэрыялу, як гэта магчыма, але гэта не азначае, што 7 00:00:17,770 --> 00:00:20,780 мы збіраемся ахапіць усе рэчы, якія могуць быць у віктарыне 1. 8 00:00:20,780 --> 00:00:25,270 Так што будзьце ўпэўненыя, вы таксама зірнуць на лекцыі, часткамі, усё, што можна. 9 00:00:25,270 --> 00:00:28,240 Віктарына 1 будзе ў сераду, у наступную сераду. 10 00:00:28,240 --> 00:00:33,800 Так што не забудзьцеся вывучыць. Гэта будзе, у значнай ступені, як і першы віктарыны 11 00:00:33,800 --> 00:00:36,390 адносна яго фармат, але гэта, верагодна, будзе значна складаней. 12 00:00:36,390 --> 00:00:39,600 Па крайняй меры, у мінулым годзе, калі я ўзяў 50, я думаў, што гэта было значна складаней. 13 00:00:39,600 --> 00:00:42,410 Так шмат вучыцца. 14 00:00:42,410 --> 00:00:45,190 >> Я збіраюся пакрыць структуры дадзеных і кадаваньне Хафман. 15 00:00:45,190 --> 00:00:47,910 Гэта тое, што многія людзі думаюць, з'яўляецца складанай, 16 00:00:47,910 --> 00:00:51,930 але я збіраюся паспрабаваць зрабіць гэта як мага прасцей. 17 00:00:51,930 --> 00:00:56,330 Перш за ўсё, тое, што мы хочам, вы, хлопцы, каб ведаць віктарыны 1 з'яўляецца 18 00:00:56,330 --> 00:01:00,970 зразумець канцэптуальныя апісання кожнай з структур дадзеных, якія я збіраюся ўявіць. 19 00:01:00,970 --> 00:01:03,960 Гэта азначае, што ў вас няма на самай справе 20 00:01:03,960 --> 00:01:07,020 рэалізацыі хэш-табліцу ў вашай віктарыны 1. 21 00:01:07,020 --> 00:01:10,250 Мы не хочам вам рэалізаваць цэлы хэш-табліцу, можа быць, мы пастараемся 22 00:01:10,250 --> 00:01:13,090 каб вы рэалізаваць некаторыя функцыі, 23 00:01:13,090 --> 00:01:16,940 найбольш распаўсюджаныя аперацыі, але мы не збіраемся, каб вы рэалізаваць усе. 24 00:01:16,940 --> 00:01:21,010 Таму важна, што вы разумееце паняцце ззаду кожнай структуры дадзеных 25 00:01:21,010 --> 00:01:23,510 а таксама, што вы можаце кадзіраваць ў C, 26 00:01:23,510 --> 00:01:27,880 толькі самыя распаўсюджаныя аперацыі, якія яны маюць для кожнай структуры дадзеных. 27 00:01:27,880 --> 00:01:30,090 А таксама зможаце праглядзець паказальнікі і структуры, 28 00:01:30,090 --> 00:01:33,470 таму што яны з'яўляюцца шмат у гэтых структур дадзеных. 29 00:01:33,470 --> 00:01:37,380 >> Па-першае, звязаныя спісы. Звязаныя спісы на самай справе вельмі падобны на масівах, 30 00:01:37,380 --> 00:01:39,930 але розніца паміж звязаны спіс і масіў, 31 00:01:39,930 --> 00:01:45,160 перш за ўсё, у тым, што звязаны спіс мае вельмі гнуткі памер, 32 00:01:45,160 --> 00:01:50,060 у той час як у масівах вы павінны альбо абраць вельмі вялікі памер для масіва, 33 00:01:50,060 --> 00:01:53,710 так што вы ведаеце, што вы збіраецеся быць у стане захоўваць усе вашыя дадзеныя ў гэтым масіве, 34 00:01:53,710 --> 00:01:59,370 ці вы павінны выкарыстоўваць Таноса мець гнуткую даўжыню масіва. 35 00:01:59,370 --> 00:02:03,680 У звязаных спісаў, што гэта вельмі лёгка, каб проста атрымаць больш элементаў, 36 00:02:03,680 --> 00:02:07,210 пакласці больш элементаў у звязаным спісе ці выдаляць элементы. 37 00:02:07,210 --> 00:02:09,370 А на самай справе, калі вы не хочаце звязаны спіс павінен быць адсартаваны, 38 00:02:09,370 --> 00:02:13,950 Вы можаце шукаць і выдаляць элементы ў пастаянны час, 39 00:02:13,950 --> 00:02:16,800 так O (1) часу, так што гэта вельмі зручна. 40 00:02:16,800 --> 00:02:20,660 Вы проста павінны быць асцярожныя, каб заўсёды памятаць, каб Malloc і бясплатна вузлы, 41 00:02:20,660 --> 00:02:25,510 толькі таму, што калі вы гэтага не зробіце, вы будзеце мець уцечак памяці. 42 00:02:25,510 --> 00:02:31,480 Так звязаныя спісы - вызначэнне вузла сапраўды гэтак жа як тое, што мы маем права там. 43 00:02:31,480 --> 00:02:35,110 Я паклаў Int N, але вы можаце захоўваць любыя дадзеныя, якія вы хочаце. 44 00:02:35,110 --> 00:02:37,280 Так што калі вы хочаце захаваць радок, гэта выдатна. 45 00:02:37,280 --> 00:02:41,690 Калі вы хочаце захаваць структуру, гэта выдатна, двайны, што вы хочаце. 46 00:02:41,690 --> 00:02:44,630 Я проста пакласці Int N для прыкладаў тут. 47 00:02:44,630 --> 00:02:46,800 І ў вас ёсць паказальнік на наступны вузел. 48 00:02:46,800 --> 00:02:51,940 Так, у асноўным, звязаны спіс мае некаторыя дадзеныя, а затым ён паказвае на наступны вузел. 49 00:02:51,940 --> 00:02:56,710 Калі гэта апошні элемент у звязаным спісе, гэта будзе паказваць на NULL. 50 00:02:56,710 --> 00:02:59,060 Такім чынам, гэта з'яўляецца прыкладам звязанага спісу. 51 00:02:59,250 --> 00:03:05,960 >> Добра, зараз давайце паглядзім, што мы павінны рабіць, калі я хачу, каб ўставіць элемент у звязаным спісе. 52 00:03:05,960 --> 00:03:08,810 Па-першае, функцыя ўстаўкі будзе тыпу пустэчу 53 00:03:08,810 --> 00:03:11,350 таму што я не хачу нічога вяртаць. 54 00:03:11,350 --> 00:03:14,200 І я збіраюся прыняць Int ў якасці аргументу, 55 00:03:14,200 --> 00:03:17,090 таму што я хачу ведаць, што я хачу, каб ўставіць. 56 00:03:17,090 --> 00:03:21,840 Так што першае, што я павінен рабіць? Ну, я павінен Malloc на newnode, 57 00:03:21,840 --> 00:03:24,240 так што гэта першая лінія. 58 00:03:24,240 --> 00:03:27,580 Я проста стварэнне новага вузла паставіць у звязаным спісе. 59 00:03:27,580 --> 00:03:32,360 Так што я магу зрабіць? Ну, мы ведаем, што ў нашых рэалізацый звязаных спісаў 60 00:03:32,360 --> 00:03:38,180 у класе, мы заўсёды ставім галоўку як глабальная пераменная. 61 00:03:38,180 --> 00:03:41,800 Такім чынам, што мы можам зрабіць, гэта змяніць галавой. 62 00:03:41,800 --> 00:03:44,300 Я магу зрабіць гэта новы вузел будзе новы кіраўнік, 63 00:03:44,300 --> 00:03:46,670 і гэта будзе паказваць на папярэдняй кіраўніка. 64 00:03:46,670 --> 00:03:50,390 Як мы можам гэта зрабіць? Першае, што я павінен зрабіць, 65 00:03:50,390 --> 00:03:54,770 гэта змяніць 'N' у новым вузле ў кошту, 66 00:03:54,770 --> 00:03:57,530 які быў прыняты ў функцыю. 67 00:03:57,530 --> 00:04:01,050 Тады newnode далей будзе кіраўнік. 68 00:04:01,050 --> 00:04:05,800 Галава будзе newnode. Так што гэта даволі проста. 69 00:04:05,800 --> 00:04:10,090 Для выдалення вузла, мы можам зрабіць гэта як - 70 00:04:10,090 --> 00:04:14,790 Адзін са спосабаў мы маглі зрабіць гэта, каб сказаць, 71 00:04:14,790 --> 00:04:18,160 добра, калі б я хацеў, каб выдаліць, напрыклад, 3, 72 00:04:18,160 --> 00:04:24,850 што я мог зрабіць, гэта проста паказаць папярэдні вузел 73 00:04:24,850 --> 00:04:27,580 да наступнага вузла 3. 74 00:04:27,580 --> 00:04:29,400 Так што я б проста зрабіць нешта накшталт гэтага. 75 00:04:29,400 --> 00:04:33,400 Але ў чым праблема з, што рабіць? 76 00:04:33,400 --> 00:04:37,400 У мяне ёсць ўцечка памяці, так што ў мяне няма доступу да ліку 3 больш. 77 00:04:37,400 --> 00:04:42,480 Праблема ў тым, што я не збіраюся быць у стане вызваліць гэты вузел. 78 00:04:42,480 --> 00:04:45,360 Я збіраюся мець ўцечка памяці і (неразборліва) збіраецца мяне ненавідзіш. 79 00:04:45,360 --> 00:04:49,370 Такім чынам, замест таго, каб рабіць гэта, я, верагодна, варта мець часовы паказальнік. 80 00:04:49,370 --> 00:04:53,210 Так што я паклаў тэмп. Яна збіраецца паказваць на вузле, што я хачу, каб выдаліць. 81 00:04:53,210 --> 00:04:58,170 А потым я магу рухацца папярэднія вузлы пункту да наступнага вузла 82 00:04:58,170 --> 00:05:00,390 вузла, што я хачу, каб выдаліць. 83 00:05:00,390 --> 00:05:02,730 І, нарэшце, я магу вызваліць паказальнік. 84 00:05:02,730 --> 00:05:07,480 Ці ёсць у мяне, каб вызваліць паказальнік, які я стварыў тут? 85 00:05:07,480 --> 00:05:09,560 Я не павінен, толькі таму, што - 86 00:05:09,560 --> 00:05:13,430 розніца ў тым, што гэты вузел быў створаны з дапамогай Таноса, 87 00:05:13,430 --> 00:05:17,280 так што гэта ў кучы, а гэты быў проста абвешчаны ў якасці перамыкача NULL ў стэку. 88 00:05:17,280 --> 00:05:20,000 Так у мяне няма, каб вызваліць яе. 89 00:05:20,000 --> 00:05:22,030 >> Добра. Так што цяпер давайце пагаворым аб стэкаў. 90 00:05:22,030 --> 00:05:24,680 Штабелі даволі простыя. 91 00:05:24,680 --> 00:05:29,540 Мы зрабілі стэкі і чэргі ў класе толькі з дапамогай масіваў, 92 00:05:29,540 --> 00:05:32,820 але вы павінны быць знаёмыя - проста трэба ведаць 93 00:05:32,820 --> 00:05:40,740 што вы таксама можаце зрабіць стэкі ў чэргах з дапамогай звязаных спісаў, а таксама. 94 00:05:40,740 --> 00:05:44,460 Так што калі ў вас ёсць масіў, што было б стэк? 95 00:05:44,460 --> 00:05:46,810 Стэк, па-першае, павінны мець памер. 96 00:05:46,810 --> 00:05:49,950 Вы павінны захаваць тое, што гэта памер стэка, што ў вас ёсць цяпер. 97 00:05:49,950 --> 00:05:52,980 А таксама вы б масіў, у дадзеным выпадку лікаў, 98 00:05:52,980 --> 00:05:55,120 але калі вы хочаце, гэта можа быць масівам 99 00:05:55,120 --> 00:06:00,380 радкоў, масіў структуры, усё, што вы хочаце захаваць. 100 00:06:00,380 --> 00:06:03,240 Аб стэка: Розніца паміж стэкам і звязанага спісу 101 00:06:03,240 --> 00:06:08,590 з'яўляецца тое, што ў стэку ў вас ёсць толькі доступ да апошніх элементам, здадзенай у стэку. 102 00:06:08,590 --> 00:06:11,770 Яна называецца апошні ўвайшоў, першы выйшаў. 103 00:06:11,770 --> 00:06:15,090 Гэтак жа, як у вас ёсць чарка падносаў, 104 00:06:15,090 --> 00:06:17,670 калі вы паклалі паднос на вяршыні стэка, 105 00:06:17,670 --> 00:06:22,670 Вы павінны выдаліць гэты латок першым, каб мець доступ да іншых латкоў. 106 00:06:22,670 --> 00:06:26,310 Гэта тое ж самае са стэкамі. 107 00:06:26,310 --> 00:06:31,220 Так што, калі я хачу, каб, напрыклад, дадаць элемент у стэку, што я павінен рабіць? 108 00:06:31,220 --> 00:06:34,070 Яна называецца штуршок, і гэта даволі проста. 109 00:06:34,070 --> 00:06:37,130 Першае, што вы павінны зрабіць, гэта праверыць, калі памер стэка 110 00:06:37,130 --> 00:06:40,150 не больш або роўная ёмістасці стэка. 111 00:06:40,150 --> 00:06:45,810 Таму што, калі ў вас ужо ёсць на поўную магутнасць, вы не можаце што-небудзь яшчэ дадаць. 112 00:06:45,810 --> 00:06:51,140 І потым, калі не, то вы проста павінны дадаць элемент у стэк. 113 00:06:51,140 --> 00:06:54,530 І, нарэшце, павялічваюць памер. Так што гэта даволі проста. 114 00:06:54,530 --> 00:06:57,140 Так што я проста дадаць нумар 2. 115 00:06:57,140 --> 00:07:00,350 І калі я хачу, каб соваць, а гэта значыць, што я хачу, каб выдаліць 116 00:07:00,350 --> 00:07:03,870 апошні элемент, які дадаюць і вяртае значэнне элемента, 117 00:07:03,870 --> 00:07:09,180 Першае, што я павінен праверыць, што стэк не пусты. 118 00:07:09,180 --> 00:07:11,510 Таму што, калі ён пусты, я нічога не магу вярнуцца. 119 00:07:11,510 --> 00:07:14,820 У гэтым выпадку, я вяртаюся -1. 120 00:07:14,820 --> 00:07:18,960 У адваротным выпадку, я збіраюся паменшыць памер спецыфікацыі, 121 00:07:18,960 --> 00:07:22,510 і вярнуцца лічбы (s.size). 122 00:07:22,510 --> 00:07:27,230 Чаму я паменшыць памер, а затым вярнуцца s.size? 123 00:07:27,230 --> 00:07:30,930 Гэта таму, што, у дадзеным выпадку, спецыфікацыя мае памер 4, 124 00:07:30,930 --> 00:07:33,810 і я хачу вярнуцца чацвёрты элемент, ці не так? 125 00:07:33,810 --> 00:07:36,030 Але тое, што індэкс чацвёртага элемента? Тры. 126 00:07:36,030 --> 00:07:44,510 Так як я памер - будзе 3, я магу проста вярнуцца s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 таму што гэта 3. Так што гэта проста індэкс. 128 00:07:48,410 --> 00:07:50,380 >> Зараз чэргі. Чэргі ў значнай ступені тое ж самае. 129 00:07:50,380 --> 00:07:54,950 Розніца толькі ў тым, што замест таго, апошні ўвайшоў, першы выйшаў, 130 00:07:54,950 --> 00:07:57,480 ў вас ёсць першы ўвайшоў, першы выйшаў. 131 00:07:57,480 --> 00:07:59,460 Верагодна, калі вы чакаеце, каб пайсці на канцэрт, 132 00:07:59,460 --> 00:08:04,260 Вы не былі б шчаслівыя, калі б у вас быў стэк замест чарзе. 133 00:08:04,260 --> 00:08:07,730 Будучы апошнім чалавекам, які прыйшоў бы першым чалавекам, каб увайсці ў канцэрт. 134 00:08:07,730 --> 00:08:09,760 Вы, напэўна, не быў бы шчаслівы. 135 00:08:09,760 --> 00:08:15,020 У чарзе, першым чалавекам, каб атрымаць у таксама першым чалавекам, каб выйсці. 136 00:08:15,020 --> 00:08:18,720 Такім чынам, у вызначэнні чарзе, акрамя таго, што памер масіва, 137 00:08:18,720 --> 00:08:23,360 Вы таксама павінны мець галаву, якая індэкс да галавы стэка. 138 00:08:23,360 --> 00:08:29,000 Такім чынам, першы элемент прама цяпер. 139 00:08:29,000 --> 00:08:32,710 Ставіць гэта тое ж самае, як штуршок для стэкаў. 140 00:08:32,710 --> 00:08:34,980 Калі вы былі вельмі наіўныя, вы б проста сказаць, 141 00:08:34,980 --> 00:08:39,289 ну, я магу проста зрабіць тое ж самае, што і я зрабіў для штуршка. 142 00:08:39,289 --> 00:08:44,030 Я магу проста праверыць, калі гэта не выходзіць за межы магчымасцяў. 143 00:08:44,030 --> 00:08:48,760 Калі гэта так, я вярнуцца ілжывым, інакш я магу проста экспартаваць новае значэнне 144 00:08:48,760 --> 00:08:50,630 і затым павялічыць памер. 145 00:08:50,630 --> 00:08:52,750 Але чаму гэта так? 146 00:08:52,750 --> 00:08:55,010 Давайце паглядзім гэты прыклад. 147 00:08:55,010 --> 00:08:57,020 Я спрабую паставіць у чаргу кучу рэчаў, 148 00:08:57,020 --> 00:08:58,390 а затым я збіраюся з чаргі і пастаноўкі ў чаргу. 149 00:08:58,390 --> 00:09:00,550 Там вельмі шмат каманд, але гэта вельмі проста. 150 00:09:00,550 --> 00:09:04,790 Я збіраюся паставіць у чаргу 5, так што дадайце 5, а затым 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, а затым я хачу з чаргі нешта, 152 00:09:09,310 --> 00:09:12,000 Гэта азначае, што я збіраюся выдаліць першы элемент. 153 00:09:12,000 --> 00:09:14,640 Так што я збіраюся зняць нумар 3, ці не так? 154 00:09:14,640 --> 00:09:17,320 Першы элемент. Добра. 155 00:09:17,320 --> 00:09:21,450 Цяпер, калі я спрабую паставіць у чаргу нешта яшчэ, што адбудзецца? 156 00:09:21,450 --> 00:09:24,290 Па маёй рэалізацыі, 157 00:09:24,290 --> 00:09:31,040 Я збіраўся паставіць наступны нумар у індэксе q.size. 158 00:09:31,040 --> 00:09:35,140 У гэтым выпадку, памер 8, 159 00:09:35,140 --> 00:09:38,640 таму індэкс 8 будзе прама тут, у апошняй пазіцыі. 160 00:09:38,640 --> 00:09:43,900 Калі я спрабую паставіць у чаргу 1 прама тут, я быў бы перазапісу апошнюю пазіцыю 161 00:09:43,900 --> 00:09:45,870 да № 1, якое з'яўляецца цалкам няправільным. 162 00:09:45,870 --> 00:09:49,870 Тое, што я хачу зрабіць, гэта абгарнуць вакол і перайсці да першай пазіцыі. 163 00:09:49,870 --> 00:09:52,870 Можа быць, вы б проста сказаць, ну, я проста павінны праверыць 164 00:09:52,870 --> 00:09:55,600 калі я магу на самой справе пакласці што-то там. 165 00:09:55,600 --> 00:09:58,560 Калі няма, я проста кажу, о, новы поўную магутнасць 166 00:09:58,560 --> 00:10:02,010 на самай справе магутнасць - 1, і вы не можаце змясціць элемент ёсць. 167 00:10:02,010 --> 00:10:06,150 Але ў чым жа праблема? Праблема ў тым, што, калі я проста з чаргі ўсё прама тут 168 00:10:06,150 --> 00:10:08,240 а затым я спрабую дадаць нешта яшчэ, было б проста сказаць, 169 00:10:08,240 --> 00:10:11,210 ну, вы былі на поўную магутнасць, што з'яўляецца 0. 170 00:10:11,210 --> 00:10:13,620 Так што ваша чаргу сышла. 171 00:10:13,620 --> 00:10:16,990 Вы павінны абгарнуць вакол, і спосаб обцяканьне 172 00:10:16,990 --> 00:10:22,040 што вы, хлопцы даведаліся ў дальнабачныя і іншых psets выкарыстаў мод. 173 00:10:22,040 --> 00:10:29,090 Вы можаце паспрабаваць яго дома, каб зразумець, чаму вы маглі б зрабіць q.size + q.head 174 00:10:29,090 --> 00:10:31,080 мод ёмістасць, але калі вы паглядзіце прама тут, 175 00:10:31,080 --> 00:10:34,760 мы бачым, што яна працуе. 176 00:10:34,760 --> 00:10:37,760 Такім чынам, у апошнім прыкладзе, q.size было 8 177 00:10:37,760 --> 00:10:47,590 і галава была 1, таму што гэта было гэта становішча тут масіва. 178 00:10:47,590 --> 00:10:51,970 Так будзе 8 + 1, 9. Мод ёмістасць 9 будзе 0. 179 00:10:51,970 --> 00:10:56,640 Было б пайсці ў індэксе 0. Мы будзем у правільным становішчы. 180 00:10:56,640 --> 00:10:59,750 А потым паспрабуйце чаргу дома. 181 00:10:59,750 --> 00:11:04,950 Некаторыя важныя рэчы: паспрабаваць зразумець розніцу паміж стэкам і чэргі. 182 00:11:04,950 --> 00:11:11,620 Дома, паспрабаваць атрымаць вельмі добра знаёмыя з рэалізацыі ў чаргу, Dequeue, штуршок і поп-музыкі. 183 00:11:11,620 --> 00:11:16,560 А таксама зразумець, калі вы будзеце выкарыстоўваць кожны з іх. 184 00:11:16,560 --> 00:11:22,830 >> Так што давайце адпачыць на працягу 10 секунд з кучай покемонов. 185 00:11:22,830 --> 00:11:26,080 А цяпер давайце вернемся да структур дадзеных. 186 00:11:26,080 --> 00:11:29,770 Хэш-табліцы. Шмат людзей былі напалоханыя хэш-табліцы. 187 00:11:29,770 --> 00:11:33,650 ў праблему набор 6, Spell Checker. 188 00:11:33,650 --> 00:11:35,980 Хэш-табліцы і спрабуе, шмат людзей палохаюцца з іх. 189 00:11:35,980 --> 00:11:38,540 Яны думаюць, што яны так цяжка зразумець. Да? 190 00:11:38,540 --> 00:11:41,490 [Роб Боуден] Архіў задач 5. >> Архіў задач 5, так. Дзякуючы Роб. 191 00:11:41,490 --> 00:11:43,370 Так. Шэсць быў Хафф-н-Puff, так. 192 00:11:43,370 --> 00:11:49,340 Архіў задач 5 быў Spell Checker, і вы павінны былі выкарыстоўваць або хэш-табліцу або спробу. 193 00:11:49,340 --> 00:11:55,360 Многія людзі думаюць, што яны былі супер цяжка зразумець, але яны на самай справе даволі проста. 194 00:11:55,360 --> 00:12:01,290 Што такое хэш-табліцу, у прынцыпе? Хэш-табліца ўяўляе сабой масіў звязаных спісаў. 195 00:12:01,290 --> 00:12:06,730 Адзіная розніца паміж масівам і хэш-табліцы 196 00:12:06,730 --> 00:12:09,730 з'яўляецца тое, што ў хэш-табліцы ў вас ёсць тое, што называецца хэш-функцыя. 197 00:12:09,730 --> 00:12:12,080 Што такое хэш-функцыя? 198 00:12:12,080 --> 00:12:13,970 Я не ведаю, калі вы, хлопцы можаце прачытаць тут. 199 00:12:13,970 --> 00:12:16,090 Гэта з'яўляецца прыкладам хэш-табліцы. 200 00:12:16,090 --> 00:12:19,220 Такім чынам, вы можаце бачыць, што ў вас ёсць масіў з 31 элементамі. 201 00:12:19,220 --> 00:12:22,440 І тое, што мы робім у хэш-табліцы з'яўляецца мець хэш-функцыю 202 00:12:22,440 --> 00:12:26,660 што збіраецца перавесці ключ, кожны дзесятковага індэксе. 203 00:12:26,660 --> 00:12:31,740 Калі, напрыклад, калі я хачу, каб выбраць для Б. Харысан, 204 00:12:31,740 --> 00:12:34,190 Я б паставіў Б. Харысан ў маіх хэш-функцый, 205 00:12:34,190 --> 00:12:36,960 і хэш-функцыя вернецца 24. 206 00:12:36,960 --> 00:12:40,930 Так што я ведаю, што я хачу захаваць Б. Харысан ў 24. 207 00:12:40,930 --> 00:12:46,580 Дык вось розніца паміж проста маючы масіў і з хэш-табліцу. 208 00:12:46,580 --> 00:12:48,740 У хэш-табліцы вы будзеце мець функцыю, якая збіраецца, каб сказаць вам 209 00:12:48,740 --> 00:12:54,740 дзе захоўваць дадзеныя, якія вы хочаце захаваць. 210 00:12:54,740 --> 00:12:57,040 Для хэш-функцыі, вы хочаце паглядзець на хэш-функцыі 211 00:12:57,040 --> 00:13:00,600 што з'яўляецца дэтэрмінаваных і добра размеркаваны. 212 00:13:00,600 --> 00:13:07,810 Як вы можаце бачыць тут, вы бачыце, што шмат дадзеных, якія я хацеў краме было на самай справе 19 213 00:13:07,810 --> 00:13:12,470 замест выкарыстання 31 і 30 і 29, якія былі ўсе бясплатна. 214 00:13:12,470 --> 00:13:16,920 Такім чынам, хэш-функцыя, што я выкарыстаў не вельмі добра размеркаваны. 215 00:13:16,920 --> 00:13:20,710 Калі мы кажам, добра размеркаваны, гэта азначае, што мы хочам мець, 216 00:13:20,710 --> 00:13:26,520 прыкладна, па меншай меры, 1 або 2 для кожнага з - 217 00:13:26,520 --> 00:13:32,190 як, розніца ў 1 або 2 для кожнага з індэксаў у масівах. 218 00:13:32,190 --> 00:13:43,950 Вы хочаце, каб, груба кажучы, тое ж колькасць элементаў у кожным звязаным спісе ў масіве. 219 00:13:43,950 --> 00:13:48,600 І гэта лёгка праверыць, калі яна дзейнічае ў хэш-табліцы, паглядзець як хэш-табліцы. 220 00:13:48,600 --> 00:13:51,770 >> Тады дрэвы. Гэта дрэва. 221 00:13:51,770 --> 00:13:56,400 Дрэвы ў інфарматыцы з ног на галаву чамусьці. 222 00:13:56,400 --> 00:14:00,150 Так прама тут у вас ёсць корань дрэва, а затым лісце. 223 00:14:00,150 --> 00:14:05,630 Вы павінны проста ведаць наменклатуру для бацькоў і дзіцяці. 224 00:14:05,630 --> 00:14:12,880 Кожны вузел мае сваіх дзяцей, якія з'яўляюцца вузлы, якія знаходзяцца ніжэй з бацькоў. 225 00:14:12,880 --> 00:14:19,660 Так, напрыклад, 2 збіраецца быць бацькам для 3 і для іншага дзіцяці тут жа, 226 00:14:19,660 --> 00:14:25,290 у той час як 3 будзе бацькоўскім для 1 і іншыя дзеці, якія там. 227 00:14:25,290 --> 00:14:29,990 І 1 будзе 3 дзіця, і гэтак далей. 228 00:14:29,990 --> 00:14:34,610 У нас ёсць нешта значна больш цікавае, званы бінарнае дрэва, 229 00:14:34,610 --> 00:14:39,040 , У якім усе значэння ў правай частцы вузла 230 00:14:39,040 --> 00:14:41,660 будуць справа, прама тут - на правым, 231 00:14:41,660 --> 00:14:46,780 будуць больш, чым элемент у корані. 232 00:14:46,780 --> 00:14:49,780 Таму калі я нумар 5 прама тут, усе элементы на правы 233 00:14:49,780 --> 00:14:51,940 будуць больш за 5, і злева 234 00:14:51,940 --> 00:14:56,770 ўсе элементы будуць менш 5. 235 00:14:56,770 --> 00:14:58,780 Чаму гэта карысна? 236 00:14:58,780 --> 00:15:01,660 Ну, калі я хачу, каб праверыць, калі лік 7 тут, напрыклад, 237 00:15:01,660 --> 00:15:05,960 Я проста перайдзіце да 5 першым, і я збіраюся бачыць, з'яўляецца 7 больш або менш 5? 238 00:15:05,960 --> 00:15:09,540 Гэта больш, так што я ведаю, што гэта будзе мець, каб быць на справа ад дрэва. 239 00:15:09,540 --> 00:15:13,980 Так што ў мяне значна менш рэчаў, каб глядзець на. 240 00:15:13,980 --> 00:15:19,520 У рэалізацыі бінарнага дрэва пошуку, вузла, я проста хачу, каб мець дадзеныя, 241 00:15:19,520 --> 00:15:21,750 так Int N, вы маглі б таксама ёсць радок 242 00:15:21,750 --> 00:15:23,630 ці ўсё, што вы хацелі. 243 00:15:23,630 --> 00:15:28,100 Вы проста павінны быць асцярожнымі на вызначэнні таго, што больш, чым менш. 244 00:15:28,100 --> 00:15:30,390 Так што калі вы былі радкі, напрыклад, можна вызначыць 245 00:15:30,390 --> 00:15:34,690 што ўсе тыя рэчы, якія тычацца правы будуць мець вялікую даўжыню, 246 00:15:34,690 --> 00:15:40,940 левая будзеце мець больш нізкія даўжыні, так што гэта сапраўды залежыць ад вас. 247 00:15:40,940 --> 00:15:44,930 >> Як я магу рэалізаваць знайсці для BST? 248 00:15:44,930 --> 00:15:47,840 Першае, што мы павінны зрабіць, гэта праверыць, калі корань NULL. 249 00:15:47,840 --> 00:15:50,920 Калі гэта NULL, гэта азначае, што рэч не існуе 250 00:15:50,920 --> 00:15:53,330 таму што вы нават не дрэва, дакладна? 251 00:15:53,330 --> 00:15:55,790 Так што я вярнуцца ілжывым. 252 00:15:55,790 --> 00:15:58,740 У адваротным выпадку, я збіраюся праверыць, калі лік больш 253 00:15:58,740 --> 00:16:01,720 чым значэнне ў корані. 254 00:16:01,720 --> 00:16:04,250 Я збіраюся паспрабаваць знайсці элемент справа 255 00:16:04,250 --> 00:16:08,590 з дрэва. 256 00:16:08,590 --> 00:16:11,310 Вы бачыце, што я выкарыстоўваю рэкурсіі тут. 257 00:16:11,310 --> 00:16:14,150 І потым, калі гэта менш, я збіраюся паглядзець на злева. 258 00:16:14,150 --> 00:16:18,330 І, нарэшце, у адваротным выпадку, калі гэта не менш або не больш, 259 00:16:18,330 --> 00:16:20,660 гэта азначае, што гэта само значэнне. 260 00:16:20,660 --> 00:16:23,010 Так што я проста вярнуцца дакладна. 261 00:16:23,010 --> 00:16:26,360 Тут можна ўбачыць, што я выкарыстаў, калі, калі, калі. 262 00:16:26,360 --> 00:16:30,820 І памятайце, у віктарыне 0, у нас была праблема, што, калі б, калі, калі, 263 00:16:30,820 --> 00:16:32,780 і вы павінны былі знайсці неэфектыўнасць, 264 00:16:32,780 --> 00:16:35,180 і неэфектыўнасць у тым, што вы выкарыстоўвалі, калі. 265 00:16:35,180 --> 00:16:39,060 Вы павінны былі выкарыстаць, калі, яшчэ, калі, яшчэ, калі, і яшчэ. 266 00:16:39,060 --> 00:16:44,240 Так, я павінен выкарыстоўваць яшчэ, калі і яшчэ, калі і яшчэ тут? 267 00:16:44,240 --> 00:16:46,200 Хто-небудзь - да? 268 00:16:46,200 --> 00:16:51,140 [Студэнт кажучы, неразборліва] 269 00:16:51,140 --> 00:16:53,480 Выдатна. Так яна кажа, што гэта не мае значэння, 270 00:16:53,480 --> 00:16:55,930 толькі таму, што неэфектыўнасць, што ў нас было раней 271 00:16:55,930 --> 00:16:59,550 было тое, што, таму што, можа быць, калі некаторы ўмова было выканана, 272 00:16:59,550 --> 00:17:03,570 так што вы выканалі дзеянні, але тады вы збіраліся праверыць ўсе іншыя ўмовы. 273 00:17:03,570 --> 00:17:06,319 Але ў гэтым выпадку, ён вярнуўся адразу ж, так што гэта не мае значэння. 274 00:17:06,319 --> 00:17:09,220 Так што вам не давядзецца выкарыстоўваць яшчэ, калі. 275 00:17:09,220 --> 00:17:11,740 >> І, нарэшце, давайце пагаворым аб спробаў, 276 00:17:11,740 --> 00:17:13,800 які з'яўляецца улюбёнцам. 277 00:17:13,800 --> 00:17:15,980 Спроба гэта дрэва масіваў. 278 00:17:15,980 --> 00:17:20,369 Гэта вельмі хутка для пошуку значэння, але ён выкарыстоўвае шмат памяці. 279 00:17:20,369 --> 00:17:22,530 І гэта, як правіла, для фільтрацыі словы, таму, калі вы 280 00:17:22,530 --> 00:17:27,920 хочаце рэалізаваць, напрыклад, я не ведаю,, як тэлефонная кніга ў тэлефоне 281 00:17:27,920 --> 00:17:30,440 і вы хочаце, каб мець магчымасць тыпу У 282 00:17:30,440 --> 00:17:32,510 і проста імёны людзей, якія маюць B. 283 00:17:32,510 --> 00:17:37,960 Гэта вельмі лёгка ажыццявіць, што выкарыстанне паспрабаваць, напрыклад. 284 00:17:37,960 --> 00:17:39,820 Як вы вызначаеце вузел у спробе? 285 00:17:39,820 --> 00:17:43,910 Вы проста павінны мець лагічнае значэнне, якое збіраецца быць is_word. 286 00:17:43,910 --> 00:17:48,660 Гэта ўяўляе, што выкарыстанне ўсіх сімвалаў да гэтага вузла, 287 00:17:48,660 --> 00:17:51,920 Вы былі ў стане сфармаваць слова, 288 00:17:51,920 --> 00:17:57,230 і тады вы будзеце мець масіў паказальнікаў на вузлы. 289 00:17:57,230 --> 00:18:03,120 Ці бачыце вы, што ў нас ёсць масіў бацькоўскіх вузлоў, так што вузел * масіў? Да? 290 00:18:03,120 --> 00:18:06,050 Такім чынам, давайце паглядзім, як гэта будзе працаваць. Для праверкі правапісу, 291 00:18:06,050 --> 00:18:08,230 у нас ёсць масіў з 27 элементаў, 292 00:18:08,230 --> 00:18:12,150 таму што ў нас усё лісты і прэміі апостраф. 293 00:18:12,150 --> 00:18:17,800 Перад тут я проста буду выкарыстоўваць 2 таму што я хачу, каб мець магчымасць пісаць на дошцы. 294 00:18:17,800 --> 00:18:20,230 Добра. Так што гэта прыклад спробы. 295 00:18:20,230 --> 00:18:25,600 Калі б я проста вызначыць першы вузел, я буду ёсць масіў 2-х элементаў 296 00:18:25,600 --> 00:18:29,290 што 2 паказальнікі на NULL, так што я проста пакласці 'A' і 'B'. 297 00:18:29,290 --> 00:18:32,430 І я буду мець лагічнае значэнне, якое кажа is_word. 298 00:18:32,430 --> 00:18:34,420 Гэта збіраецца быць ілжывым для першага, 299 00:18:34,420 --> 00:18:37,370 толькі таму, што, перш чым, што ў вас няма ніякіх знакаў. 300 00:18:37,370 --> 00:18:40,900 Так пустое слова не з'яўляецца словам. Так што гэта хлусня. 301 00:18:40,900 --> 00:18:46,320 Калі я хачу дадаць 'А' да гэтага слоўніка, што б я павінен зрабіць? 302 00:18:46,320 --> 00:18:49,760 Я б проста павінны Malloc новы вузел для "а", 303 00:18:49,760 --> 00:18:54,630 , А затым дадаць сваё слова да ісціны. 304 00:18:54,630 --> 00:19:00,180 Так што проста ўяўляе, што, 'а' збіраецца, каб быць праўдай. Сэнс? 305 00:19:00,180 --> 00:19:04,120 Тады, калі я хачу дадаць 'ба', я павінен буду Таноса 1 для 'B', 306 00:19:04,120 --> 00:19:07,550 а затым я збіраюся наладзіць лагічнае хлусня, 307 00:19:07,550 --> 00:19:10,160 таму «б» само па сабе не з'яўляецца словам. 308 00:19:10,160 --> 00:19:13,010 Тады я збіраюся Malloc яшчэ адзін для "а", так што "ба", 309 00:19:13,010 --> 00:19:16,290 а затым я збіраюся стварыць гэтае слова да ісціны. 310 00:19:16,290 --> 00:19:18,950 Таму што «ба» гэтае слова. 311 00:19:18,950 --> 00:19:21,910 І потым, калі я хачу, каб убачыць, калі «б» ў гэтым слоўніку, 312 00:19:21,910 --> 00:19:26,730 Я магу проста пайсці ў першы, 'B'. Я спускаюся, і я гляджу на гэтае слова, і ён кажа, з'яўляецца ілжывым. 313 00:19:26,730 --> 00:19:30,110 Так што гэта не словы. Калі я хачу, каб праверыць "ба", 314 00:19:30,110 --> 00:19:38,010 Я іду ў першы, 'B', а затым перайсці да "а", і я бачу, праўда, так гэтае слова. Сэнс? 315 00:19:38,010 --> 00:19:41,950 Шмат людзей заблытацца спробаў. Няма? 316 00:19:41,950 --> 00:19:44,740 >> Нарэшце, кадавання Хафман. Кадаваньне Хафман вельмі карысна 317 00:19:44,740 --> 00:19:47,550 для эканоміі памяці і сціскаць тэкставыя файлы, 318 00:19:47,550 --> 00:19:52,270 толькі таму, што шмат раз вы выкарыстоўваеце 'A' і 'е', напрыклад, 319 00:19:52,270 --> 00:19:57,710 ў вашых дакументах, але я не ведаю, калі вы, хлопцы, выкарыстоўваць 'Q' ці 'Z', як шмат. 320 00:19:57,710 --> 00:20:02,040 Маючы ўсяго ў 1 байт для кожнага персанажа, 321 00:20:02,040 --> 00:20:08,520 кожны - у 256 знакаў, якія мы маем у табліцы ASCII не вельмі аптымальным, 322 00:20:08,520 --> 00:20:11,410 толькі таму, што ёсць некаторыя сімвалы, якія вы выкарыстоўваеце многае іншае, 323 00:20:11,410 --> 00:20:15,180 так што вы, верагодна, варта выкарыстаць менш памяці для тых. 324 00:20:15,180 --> 00:20:17,560 Як я магу выкарыстоўваць кадаваньне Хафман? 325 00:20:17,560 --> 00:20:20,010 Мы павінны зрабіць дрэва Хафман. 326 00:20:20,010 --> 00:20:23,370  Дрэва Хафман мае вузлы 327 00:20:23,370 --> 00:20:27,760 што ёсць сімвал, які збіраецца быць падобным, 'а', 'б', 'C', лісты, 328 00:20:27,760 --> 00:20:32,990 што ліст у вас ёсць, частата, частата, якая з'яўляецца слова ў тэксце, 329 00:20:32,990 --> 00:20:36,280 што вы стваралі дрэва Хафман для, 330 00:20:36,280 --> 00:20:41,800 а затым вузел, які будзе паказваць на злева ад дрэва Хафман 331 00:20:41,800 --> 00:20:47,210 і іншай вузел, які будзе паказваць на справа. Гэтак жа, як дрэва. 332 00:20:47,210 --> 00:20:49,440 Як вы будуеце дрэва Хафман? 333 00:20:49,440 --> 00:20:54,020 Вы збіраецеся выбраць 2 вузла, якія маюць самыя нізкія частоты. 334 00:20:54,020 --> 00:20:56,490 Калі ў вас ёсць гальштук вы збіраецеся выбраць 2 вузла 335 00:20:56,490 --> 00:20:59,870 якія маюць самыя нізкія значэнні ASCII, а таксама. 336 00:20:59,870 --> 00:21:02,420 Тады вы збіраецеся стварыць новае дрэва з тых 2 вузлоў 337 00:21:02,420 --> 00:21:08,030 што будзе мець камбінаваны частату ў бацькоўскай вузле. 338 00:21:08,030 --> 00:21:13,240 А потым вы хочаце сцерці 2 дзяцей з лесу 339 00:21:13,240 --> 00:21:15,570 і замяніць іх бацькоў. 340 00:21:15,570 --> 00:21:18,930 І вы збіраецеся паўтарыць, што, пакуль вы толькі не маюць 1 дрэва ў лесе. 341 00:21:18,930 --> 00:21:23,840 Такім чынам, давайце паглядзім, як вы маглі б зрабіць дрэва Хафман для ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Тут можна ўбачыць, што ўсе літары маюць частату 1 для 'A', акрамя; што мае частату 2. 343 00:21:29,220 --> 00:21:34,090 Так што я стварыў вузлы для ўсіх лістоў, якія я прыводзяць у парадак кошту і частаце ASCII. 344 00:21:34,090 --> 00:21:40,090 Так што, калі я хачу стварыць першае дрэва, ён будзе з 'L' і 'M'. 345 00:21:40,090 --> 00:21:43,100 Так што гэта тут. Частата пары будзе два 346 00:21:43,100 --> 00:21:49,470 таму што гэта 1 + 1, то наступны 2 з самымі нізкімі частотамі з'яўляюцца 'Y' і 'Z'. 347 00:21:49,470 --> 00:21:53,180 А то ў мяне ўсё з іх - маюць частату 2. 348 00:21:53,180 --> 00:22:00,470 Дык якія з іх з'яўляюцца тыя, якія маюць найменшае значэнне ASCII для наступнага? 349 00:22:00,470 --> 00:22:04,830 «А» і «L». Так што я стварыць новы вузел, 350 00:22:04,830 --> 00:22:09,930 І, нарэшце, гэта 4 і 2, таму 2 будзе злева. 351 00:22:09,930 --> 00:22:12,430 І гэта дрэва Хафман. 352 00:22:12,430 --> 00:22:16,060 Тады, калі я хачу напісаць тэкст, 353 00:22:16,060 --> 00:22:24,440 як у двайковым, каб пераўтварыць у тэкст, выкарыстоўваючы дрэва Хафман вельмі лёгка. 354 00:22:24,440 --> 00:22:30,220 Напрыклад, калі я кажу, што рухаючыся налева з'яўляецца 0 і рухаецца направа з'яўляецца 1, 355 00:22:30,220 --> 00:22:32,410 Што гэта будзе ўяўляць? 356 00:22:32,410 --> 00:22:35,530 Бо 1, 1, так правільна, правільна, 357 00:22:35,530 --> 00:22:40,370 і затым 0, так што засталося б L, а затым 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Так 1, 0, так што проста 1, 0, 'А'. 359 00:22:43,950 --> 00:22:47,540 І тады 0, 1, так 'Z'. 360 00:22:47,540 --> 00:22:52,170 А потым 1, 0, 0 - не. 361 00:22:52,170 --> 00:22:56,780 0, 0, 'Y', так Гультай. 362 00:22:56,780 --> 00:23:06,060 Так што ўсё для мяне, Роб збіраецца ўзяць на сябе. 363 00:23:06,060 --> 00:23:08,400 >> [Роб Боуден] Такім чынам, тыдзень 7 матэрыял. 364 00:23:08,400 --> 00:23:11,390 У нас ёсць шмат, каб перайсці вельмі хутка. 365 00:23:11,390 --> 00:23:13,430 Бітаў аперацыі, перапаўненне буфера, 366 00:23:13,430 --> 00:23:16,760 Бібліятэка CS50, то HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 У як ад 15 да 20 хвілін. 368 00:23:20,990 --> 00:23:24,330 Бітаў аперацыі. Ёсць 6 з іх, што вам трэба ведаць. 369 00:23:24,330 --> 00:23:31,200 Бітаў і, пабітавае АБО, якое выключае АБО, зрух налева, зрух направа, а не. 370 00:23:31,200 --> 00:23:35,420 Зрух направа, а не вы толькі бачылі ў лекцыі наогул. 371 00:23:35,420 --> 00:23:40,480 Мы пойдзем па ім хутка тут, але гэта добра, каб ведаць, што гэта 6, што існуе. 372 00:23:40,480 --> 00:23:45,070 Памятаеце, што бітаў аперацыі, як, калі вы робіце 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Вы не маеце справу з бінарнымі 3 і 4. 374 00:23:49,420 --> 00:23:56,550 З пабітава аператараў вы на самой справе маем справу з асобнымі бітамі лікаў 3 і 4. 375 00:23:56,550 --> 00:23:59,120 >> Так першае, што мы будзем казаць пабітава няма, 376 00:23:59,120 --> 00:24:02,340 і ўсё гэта робіць фліп ўсе біты. 377 00:24:02,340 --> 00:24:05,500 Дык вось, калі вы пішаце гэта ў C, вы б не напісаць яго 378 00:24:05,500 --> 00:24:09,380 як ~ 11011 або любы іншы, можна было б напісаць гэта падабаецца ~ 4, 379 00:24:09,380 --> 00:24:12,970 і то было б перавярнуць бінарнае ўяўленне 4. 380 00:24:12,970 --> 00:24:24,800 Дык вось, ~ некаторага двайковага ліку 1101101 збіраецца дакладна перавярнуць усё 1 да 0 і ўсё 0 да 1 ст. 381 00:24:24,800 --> 00:24:27,600 Як я кажу, што, частае выкарыстанне гэтага 382 00:24:27,600 --> 00:24:30,830 і мы ўбачым яго ў трохі, гэта, як мы хочам, каб прыдумаць нейкі колькасці 383 00:24:30,830 --> 00:24:35,460 дзе ўсе біты роўныя 1, для аднаго з іх, за выключэннем. 384 00:24:35,460 --> 00:24:38,560 Так што гэта, як правіла, лягчэй выказаць колькасць 385 00:24:38,560 --> 00:24:40,630 дзе толькі што адзін біт усталяваны, 386 00:24:40,630 --> 00:24:44,650 а затым ўзяць ~ яго, такім чынам, кожны сябра усталяваны біт для гэтай выключэннем аднаго. 387 00:24:44,650 --> 00:24:50,300 Дык вось тое, што мы збіраемся выкарыстаць больш у няшмат. 388 00:24:50,300 --> 00:24:58,220 >> Пабітава або. Вось 2 двайковыя лікі, і гэтыя 2 лічбы 389 00:24:58,220 --> 00:25:00,780 даволі прадстаўнічым, так як яны прадстаўляюць усе магчымыя 390 00:25:00,780 --> 00:25:07,290 Спалучэнне біт вам можа спатрэбіцца для працы на. 391 00:25:07,290 --> 00:25:13,540 Пры гэтым, калі я or'd кожны біт, мы толькі збіраемся параўноўваць прама ўніз. 392 00:25:13,540 --> 00:25:15,410 Такім чынам, на левай баку мы маем адзін і 1. 393 00:25:15,410 --> 00:25:20,510 Калі я пабітавае | тых, што я збіраюся атрымаць? Адзін. 394 00:25:20,510 --> 00:25:25,320 Тады пабітавае | 0 і 1 збіраецца даць мне? Адзін. 395 00:25:25,320 --> 00:25:27,840 Бітаў 1 і 0 будзе тое ж самае, адзін. 396 00:25:27,840 --> 00:25:31,880 Бітаў 0 | 0 збіраецца даць мне 0. 397 00:25:31,880 --> 00:25:37,300 Такім чынам, адзіны выпадак, калі я атрымліваю 0 знаходзіцца ў 0 | 0 так. 398 00:25:37,300 --> 00:25:40,020 І вы можаце думаць аб тым, што так жа, як вашыя лагічныя ПРС. 399 00:25:40,020 --> 00:25:44,830 Так што калі вы думаеце, што з 1 як праўдзівы і 0 як ілжывы, тое ж самае дастасавальна і тут. 400 00:25:44,830 --> 00:25:50,040 Так праўда ці праўда, то праўда, праўду або ілжыва гэта праўда. 401 00:25:50,040 --> 00:25:57,150 Хлусня ці праўда, то праўда; хлусня ці хлусня гэта адзінае, што на самой справе ілжывае. 402 00:25:57,150 --> 00:26:00,100 Вось прыклад, які вы павінны ведаць, 403 00:26:00,100 --> 00:26:05,160 як даволі добры прыклад, калі бітаў аператары выкарыстоўваюцца. 404 00:26:05,160 --> 00:26:08,660 Вось калі б мы ці капіталу "А" з OX20, 405 00:26:08,660 --> 00:26:11,830 і мы будзем глядзець на іх праз секунду, мы атрымліваем нешта. 406 00:26:11,830 --> 00:26:16,020 І калі мы ці маленькая'' з OX20, мы атрымліваем нешта. 407 00:26:16,020 --> 00:26:26,750 Так што давайце падцягнуць табліцу ASCII. 408 00:26:26,750 --> 00:26:34,000 Добра. Тут мы бачым, што «А» з'яўляецца - 409 00:26:34,000 --> 00:26:36,920 тут мы маем «А» з'яўляецца дзесятковай 65. 410 00:26:36,920 --> 00:26:45,120 Але я пайду з шаснаццатковым, які Ox41. 411 00:26:45,120 --> 00:26:48,280 Упэўнены, што мы бачылі яго ў класе. Я думаю, што мы бачылі яго ў класе 412 00:26:48,280 --> 00:26:52,730 што гэта даволі лёгка канвертаваць з шаснаццатковай ў двойкавую. 413 00:26:52,730 --> 00:26:55,280 Дык вось, калі я хачу паставіць 4 у двайковы, 414 00:26:55,280 --> 00:26:59,550 вось толькі будзе 0100. 415 00:26:59,550 --> 00:27:03,620 Гэта 1 у названае месца, 2 у названае месца, 4 у названае месца, так што гэта 4. 416 00:27:03,620 --> 00:27:08,550 Тады я магу падзяліць 1 у двайковы, які збіраецца быць 0001. 417 00:27:08,550 --> 00:27:14,280 І такім чынам, гэта будзе прадстаўленне «А» ў двайковым выглядзе. 418 00:27:14,280 --> 00:27:22,720 Прымаючы ніжні рэгістр 'а', то цяпер збіраецца быць Ox61, 419 00:27:22,720 --> 00:27:27,050 дзе, падзяліўшы гэтыя ўверх у яго двайковы, таму 6 - 420 00:27:27,050 --> 00:27:37,830 Давайце на самай справе гэта зрабіць - ці няма гумка? Гумка. 421 00:27:37,830 --> 00:27:48,220 Ox61. Так падзяліўшы 6 у двайковы будзе 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 І расшчапленне 1 будзе 0001. 423 00:27:54,610 --> 00:27:56,520 Гледзячы на ​​розніцу паміж гэтымі 2, 424 00:27:56,520 --> 00:28:04,250 мы бачым, што адзіная розніца паміж маленькай і вялікай 'А' гэта адзін біт. 425 00:28:04,250 --> 00:28:11,810 Так вяртаючыся да тут - усё ў парадку. 426 00:28:11,810 --> 00:28:15,920 Вяртаючыся да тут, калі мы паглядзім на тое, што крыху OX20 з'яўляецца, 427 00:28:15,920 --> 00:28:22,210 так расшчапленне OX20 ў яго двайковы, 428 00:28:22,210 --> 00:28:27,310 з'яўляецца 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, адзіны біт, які усталёўваецца гэта крыху, што мы маем справу з, 430 00:28:33,470 --> 00:28:38,210 з пераключэннем паміж капіталам і ніжні рэгістр 'A'. 431 00:28:38,210 --> 00:28:47,610 Калі я або «А», які з'яўляецца гэты, «А», 432 00:28:47,610 --> 00:28:50,580 калі я ці "А" з OX20, 433 00:28:50,580 --> 00:28:53,490 што я збіраюся атрымаць? 434 00:28:53,490 --> 00:28:58,960 [Студэнт, неразборліва] >> маленькая 'а', таму што ён збіраецца перавярнуць гэты біт ў 1. 435 00:28:58,960 --> 00:29:04,170 І калі я ці "а" з OX20, што я збіраюся атрымаць? 436 00:29:04,170 --> 00:29:08,780 Ніжнім рэгістра, таму што як раз Öring «а» з OX20, 437 00:29:08,780 --> 00:29:14,580 Я проста хачу, каб быць Öring гэты адзін біт на 1, гэта ўжо 1, так што гэта не мае значэння. 438 00:29:14,580 --> 00:29:17,960 Такім чынам, мы атрымліваем 'A' і 'A'. 439 00:29:17,960 --> 00:29:24,820 >> Пабітава і. Зноў жа, мы можам лічыць, што гэта наш лагічнага і калегам. 440 00:29:24,820 --> 00:29:28,180 З левага боку ў нас ёсць праўда і праўда. 441 00:29:28,180 --> 00:29:31,160 Гэта збіраецца быць праўдай, і для ўсіх выпадкаў, 442 00:29:31,160 --> 00:29:36,270 хлусня і праўда ці праўда і хлусня, ці хлусня і хлусня, 443 00:29:36,270 --> 00:29:38,550 ні адна з гэтых рэчаў не дакладныя. 444 00:29:38,550 --> 00:29:44,170 Такім чынам, што мы ў канчатковым выніку атрымаць 1000. 445 00:29:44,170 --> 00:29:48,830 Так што цяпер, вось, вось дзе я выкарыстаў верны пабітавае няма, 446 00:29:48,830 --> 00:29:52,230 дзе ў нас былі OX20. 447 00:29:52,230 --> 00:29:54,350 Так што гэта OX20. 448 00:29:54,350 --> 00:29:59,570 Цяпер тое, што я хачу зрабіць, пабітавае ~ з OX20. 449 00:29:59,570 --> 00:30:03,600 Гэта збіраецца перавярнуць усё біты. 450 00:30:03,600 --> 00:30:09,330 Так што ў мяне 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 І так «А» аперацыя AND з ~ OX20 збіраецца даць мне тое, што? 452 00:30:18,940 --> 00:30:22,430 Адзіная частка мы сапраўды павінны думаць пра тое, на гэты раз, 453 00:30:22,430 --> 00:30:26,020 так, калі ўсе гэтыя біты ўсталёўваюцца ў 1, 454 00:30:26,020 --> 00:30:29,000 затым мы збіраемся, каб атрымаць менавіта тое, што «А» быў, 455 00:30:29,000 --> 00:30:31,260 за выключэннем, можа быць, тое, што гэты біт. 456 00:30:31,260 --> 00:30:34,460 Таму што, калі гэта быў 1, зараз ён збіраецца быць усталяваны на 0, 457 00:30:34,460 --> 00:30:39,810 таму што гэта, аперацыя AND з гэтым будзе 0. 458 00:30:39,810 --> 00:30:43,280 Так што ж такое "А" і ~ OX20 збіраюся даць мне? 459 00:30:43,280 --> 00:30:48,200 [Студэнты адказаць, неразборліва] >> А што такое "а" і - гэта "А". 460 00:30:48,200 --> 00:30:52,170 А што такое "а" і ~ OX20 збіраюся даць мне? 461 00:30:52,170 --> 00:30:56,720 'А.' Паколькі гэта ў цяперашні час 1. 462 00:30:56,720 --> 00:30:59,570 Андинг з гэтым +0 збіраецца зрабіць гэта 0, 463 00:30:59,570 --> 00:31:02,530 і зараз мы збіраемся, каб атрымаць 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Абодва ',' і не ў апошнюю чаргу гэтага тыпу, 465 00:31:06,600 --> 00:31:10,830 у нас ёсць XOR. Гэта вельмі падобна або, 466 00:31:10,830 --> 00:31:14,400 акрамя гэта азначае выключна або. 467 00:31:14,400 --> 00:31:18,420 Гэта як тое, што вы звычайна думаеце, як і ў рэальным свеце. 468 00:31:18,420 --> 00:31:23,190 Такім чынам, вы выканаеце адно 'х' ці 'у', але не абодва. 469 00:31:23,190 --> 00:31:28,700 Тут 1 ^ 1 будзе 0. 470 00:31:28,700 --> 00:31:33,650 Таму што праўда, гэта - ён не працуе, а з лагічным сапраўдным і ілжывым 471 00:31:33,650 --> 00:31:37,150 як пабітавае & і ці зрабіць, 472 00:31:37,150 --> 00:31:40,100 але факт ^ дакладна няправільна. 473 00:31:40,100 --> 00:31:44,810 Таму што мы толькі хочам, каб вярнуцца дакладна, калі толькі адзін з іх дакладна. 474 00:31:44,810 --> 00:31:50,950 Так 1 ^ 1 0. А як наконт 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Роўна 1. 1 ^ 0 роўна 1, 0 ^ 0: 0. 476 00:31:56,010 --> 00:32:03,890 Так пры любых абставінах, 0 пабітавае нешта 0 будзе 0. 477 00:32:03,890 --> 00:32:10,270 1 пабітавае нешта 0 або 0 пабітавае 1, 478 00:32:10,270 --> 00:32:14,660 калі гэта | або ^, гэта будзе 1, а калі і гэта будзе 0. 479 00:32:14,660 --> 00:32:20,850 І адзіны выпадак, калі 1 пабітавае 1 ня 1 з эксклюзіўным або. 480 00:32:20,850 --> 00:32:24,580 Гэта 0110. 481 00:32:24,580 --> 00:32:36,520 Дык вось цяпер, выкарыстоўваючы XOR - так мы вярнуліся ў 20. 482 00:32:36,520 --> 00:32:43,480 "А" ^ OX20 гэтыя 2 біта мы параўноўваем. 483 00:32:43,480 --> 00:32:50,020 Так 1 ^ 0 збіраецца даць мне што? Адзін. 484 00:32:50,020 --> 00:32:58,430 "А" ^ OX20 збіраецца даць мне? Ніжнім рэгістра. 485 00:32:58,430 --> 00:33:04,010 'А' ^ OX20 збіраецца даць мне? Капітал А. 486 00:33:04,010 --> 00:33:09,310 Таму што ўсе, што гэта робіць, гэта аперацыі XOR з OX20 487 00:33:09,310 --> 00:33:15,380 эфектыўна гартаць усе гэты біт. 488 00:33:15,380 --> 00:33:21,240 Калі гэта 0, то цяпер збіраецца стаць 1. 489 00:33:21,240 --> 00:33:26,160 Так як гэта 1, 1 ^ 1 роўны 0. 490 00:33:26,160 --> 00:33:33,280 Такім чынам, наш «а» стала «А», і наш «А» стаў «а». 491 00:33:33,280 --> 00:33:36,910 Так XOR з'яўляецца сапраўды зручным спосабам проста гартаць справа. 492 00:33:36,910 --> 00:33:39,960 Вы проста хочаце перабраць радок літар 493 00:33:39,960 --> 00:33:44,330 і чаргаваць справа кожнага асобнага персанажа, 494 00:33:44,330 --> 00:33:50,680 вы проста XOR ўсё з OX20. 495 00:33:50,680 --> 00:33:55,220 >> Цяпер мы пакінулі зрух. Зрух налева проста будзе, у асноўным, 496 00:33:55,220 --> 00:34:01,250 націснуць ўсе нумары ў, або налева, а затым устаўце 0 за імі. 497 00:34:01,250 --> 00:34:05,550 Так вось у нас 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Мы збіраемся, каб падштурхнуць 3 0 у праход па правай, 499 00:34:08,560 --> 00:34:13,580 і мы атрымліваем 01.101.000. 500 00:34:13,580 --> 00:34:16,380 У небинарных кропкі, 501 00:34:16,380 --> 00:34:24,699 мы бачым, што, што на самой справе справу 13 левай Зрушэнне 3, што дае нам 104. 502 00:34:24,699 --> 00:34:32,530 Так левы зрух, мы бачым тут, х << у ў асноўным х * 2 ^ у. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 8, так што 13 * 104 8. 504 00:34:40,139 --> 00:34:45,679 Калі вы проста думаеце пра двайковым наогул, як кожнай лічбы, 505 00:34:45,679 --> 00:34:49,530 калі зыходзіць з правы, гэта ў 1 у названае месца, то ў 2 названае месца, то ў 4 у названае месца. 506 00:34:49,530 --> 00:34:51,330 Так, націснуўшы на 0-х гадоў па правым флангу, 507 00:34:51,330 --> 00:34:55,080 мы проста штурхае рэчы, якія былі ў 4 у месцы з 8 па месцы, 508 00:34:55,080 --> 00:34:57,920 і рэчы, якія былі ў 8 у месцы, каб у 16 ​​свайго месца. 509 00:34:57,920 --> 00:35:01,280 Кожная змена проста памнажае на 2. Да? 510 00:35:01,280 --> 00:35:05,210 [Студэнт] Што адбудзецца, калі вы перайшлі на 5? 511 00:35:05,210 --> 00:35:10,790 [Боуден] Калі вы зрушваецца на 5, вы проста страціце лічбы. 512 00:35:10,790 --> 00:35:15,410 Безумоўна, гэта адно і тое ж. Маўляў, цэлыя лікі толькі 32 біт, 513 00:35:15,410 --> 00:35:20,750 так што калі вы дадаць 2 сапраўды вялікія цэлыя лікі, ён проста не ўпісваецца ў цэлы лік. 514 00:35:20,750 --> 00:35:23,660 Так што гэта тое ж самае тут. Калі вы перайшлі па 5, 515 00:35:23,660 --> 00:35:25,650 мы б проста страціць, што адзін. 516 00:35:25,650 --> 00:35:28,820 І гэта накшталт таго, што я маю на ўвазе "прыкладна" 517 00:35:28,820 --> 00:35:37,470 , Дзе, калі вы пераносіце занадта далёка, вы губляеце біты. 518 00:35:37,470 --> 00:35:39,830 >> Зрух направа будзе наадварот, 519 00:35:39,830 --> 00:35:43,090 куды мы ідзем засунуць 0-х ад канца, 520 00:35:43,090 --> 00:35:48,400 і для нашых мэтаў, запоўніце 0 з левага. 521 00:35:48,400 --> 00:35:52,910 Так рабіць гэта, мы ў асноўным назад тое, што мы ўжо зрабілі. 522 00:35:52,910 --> 00:35:57,780 І мы бачым, што тры 0 аб праве толькі адвалілася, 523 00:35:57,780 --> 00:36:02,020 і мы падштурхнулі 1101 усё да ўпора направа. 524 00:36:02,020 --> 00:36:08,380 Гэта робіць 104 >> 3, які з'яўляецца, па сутнасці, х / 2 ^ у. 525 00:36:08,380 --> 00:36:11,200 Так што цяпер, тут, гэта падобная ідэя. 526 00:36:11,200 --> 00:36:18,720 Чаму гэта толькі прыкладна х / 2 ^ у, а не на самай справе х / 2 ^ у? 527 00:36:18,720 --> 00:36:22,240 Таму што, калі я зрушыўся на 4, я б страціў 1. 528 00:36:22,240 --> 00:36:25,950 У прынцыпе, што вы думаеце пра, проста думаю, цэлалікавага дзялення ў цэлым. 529 00:36:25,950 --> 00:36:31,070 Так што, як 5/2 складае 2. Гэта не 2.5. 530 00:36:31,070 --> 00:36:35,000 Гэта тая ж ідэя тут. Калі мы дзелім на 2, 531 00:36:35,000 --> 00:36:39,910 мы можам страціць няцотныя біты на гэтым шляху. 532 00:36:39,910 --> 00:36:43,870 Так што цяпер - вось гэта для пабітава. Вось і ўсё, што вам трэба ведаць. 533 00:36:43,870 --> 00:36:46,340 Запомніць прэцэдэнты, якія мы бачылі ў класе, 534 00:36:46,340 --> 00:36:49,340 як бітаў маска карысная для аператараў пабітава 535 00:36:49,340 --> 00:36:53,220 ці вы выкарыстоўваеце іх для бітавых масак. 536 00:36:53,220 --> 00:36:58,620 Загалоўныя літары і малыя літары, пераўтварэння з'яўляецца даволі Найпросты прыклад. 537 00:36:58,620 --> 00:37:01,640 >> Добра, так нападаў на перапаўненне буфера. 538 00:37:01,640 --> 00:37:05,110 Хто-небудзь памятае, што здарылася з гэтай функцыяй? 539 00:37:05,110 --> 00:37:10,140 Звярніце ўвагу, мы абвясцілі масіў 12 байт, 12 знакаў, 540 00:37:10,140 --> 00:37:18,510 а затым мы капіяваны ў нашу буфера 12 сімвалаў ўся штрых радок. 541 00:37:18,510 --> 00:37:25,080 Так у чым жа праблема? 542 00:37:25,080 --> 00:37:32,270 Магічнае лік 12 павінна ў значнай ступені неадкладна выскачыць як - чаму 12? 543 00:37:32,270 --> 00:37:35,050 Што рабіць, калі бар, здараецца больш за 12 сімвалаў? 544 00:37:35,050 --> 00:37:41,200 Што рабіць, калі бар мільёны герояў? 545 00:37:41,200 --> 00:37:46,010 Тут гаворка ідзе тетсру. Калі бар дастаткова доўга, 546 00:37:46,010 --> 00:37:50,330 гэта будзе проста цалкам - 'C', 'C' не хвалюе, што гэта было толькі 12 знакаў; 547 00:37:50,330 --> 00:37:53,280 'З' не клапоціцца, што яна не можа змясціцца, што колькасць байтаў. 548 00:37:53,280 --> 00:37:58,250 Гэта будзе проста цалкам перапісаць Чары, 12 байт мы выдзеленыя для яго, 549 00:37:58,250 --> 00:38:01,830 і ўсё міма яго ў памяці, што на самой справе не належаць гэтаму буфера 550 00:38:01,830 --> 00:38:06,520 з тым, што радок бар. 551 00:38:06,520 --> 00:38:09,780 Так што гэта была карціна мы бачылі ў класе 552 00:38:09,780 --> 00:38:12,220 дзе ў нас ёсць наш стэк рос. 553 00:38:12,220 --> 00:38:16,040 Вы павінны быць выкарыстаны для гэтых карцін або азнаёміцца ​​з імі зноў. 554 00:38:16,040 --> 00:38:21,260 Мы наш стэк рос, адрасы памяці пачынаюцца з 0 на вяршыні 555 00:38:21,260 --> 00:38:26,270 і расці да падабаецца 4000000000 на дне. 556 00:38:26,270 --> 00:38:28,820 У нас ёсць масіў 'з' дзесьці ў памяці, 557 00:38:28,820 --> 00:38:32,260 то ў нас ёсць паказальнік на бар прама пад ім, 558 00:38:32,260 --> 00:38:38,720 а то ў нас гэты захаваны паказальнік кадра ў нашым зваротнага адрасу і стэк нашай мацярынскай руціны ст. 559 00:38:38,720 --> 00:38:40,800 Памятаеце, што ваш зваротны адрас? 560 00:38:40,800 --> 00:38:45,360 Гэта калі асноўны выклікае функцыянальны Фу, выклікае функцыянальны бар, 561 00:38:45,360 --> 00:38:48,100 непазбежна, бар аддачу. 562 00:38:48,100 --> 00:38:52,610 Таму, калі бар вяртаецца, яны павінны ведаць, што ён збіраецца вярнуцца да Foo, які выклікаў яе. 563 00:38:52,610 --> 00:39:01,360 Такім чынам, зваротны адрас з'яўляецца адрасам функцыі, што ён павінен вярнуцца ў калі функцыя вяртае. 564 00:39:01,360 --> 00:39:05,830 Прычына, па якой важна для нападаў перапаўнення буфера адбываецца таму, што, зручна, 565 00:39:05,830 --> 00:39:09,580 хакеры хацеў змяніць гэтую зваротны адрас. 566 00:39:09,580 --> 00:39:14,950 Замест таго, каб вяртацца да Foo, я збіраюся вярнуцца туды, дзе хакер хоча, каб я вярнуцца. 567 00:39:14,950 --> 00:39:17,760 І, зручна, дзе хакер часта хоча вярнуцца да 568 00:39:17,760 --> 00:39:22,400 з'яўляецца пачаткам буфера, які мы першапачаткова мелі. 569 00:39:22,400 --> 00:39:26,170 Так заўважыць, зноў жа, Little Indian. 570 00:39:26,170 --> 00:39:28,490 Прыбор з'яўляецца прыкладам Маленькая індыйскай сістэме, 571 00:39:28,490 --> 00:39:34,140 так цэлае або паказальнік захоўваецца з байтах ў зваротным парадку. 572 00:39:34,140 --> 00:39:38,980 Дык вось, мы бачым - гэта? Так. 573 00:39:38,980 --> 00:39:45,660 Мы бачым Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Памятаеце шаснаццаткавыя лічбы? 575 00:39:48,250 --> 00:39:50,640 Мы не звярнуць назад шаснаццаткавыя лічбы ў Little Indian, 576 00:39:50,640 --> 00:39:56,110 таму што 2 шаснаццаткавыя лічбы складаюць адзін байт, і мы памяняем байт. 577 00:39:56,110 --> 00:40:00,300 Вось чаму мы не захоўваем, як, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Мы захоўваем, замест гэтага, кожную пару 2 лічбы, пачынаючы справа. 579 00:40:07,520 --> 00:40:10,880 Гэты адрас паказвае на адрас пачатку 580 00:40:10,880 --> 00:40:15,190 нашага буфера, што мы на самай справе хацелі скапіяваць у у першую чаргу. 581 00:40:15,190 --> 00:40:19,230 Прычына, па якой карысна таму, што, што, калі зламыснік 582 00:40:19,230 --> 00:40:24,100 здарылася з, замест таго, радок, якая была проста 583 00:40:24,100 --> 00:40:27,060 Бяскрыўдны радок, як іх імя або нешта, 584 00:40:27,060 --> 00:40:33,900 што, калі замест, што радок былі толькі некаторыя адвольнага кода 585 00:40:33,900 --> 00:40:38,610 што зрабіў усё, што яны хацелі, каб гэта зрабіць? 586 00:40:38,610 --> 00:40:45,630 Такім чынам, яны маглі - я не магу думаць ні аб якім прахалодным кода. 587 00:40:45,630 --> 00:40:47,780 Гэта можа быць што заўгодна, усё ж. Любы катастрафічнымі код. 588 00:40:47,780 --> 00:40:51,440 Калі б яны хацелі, яны маглі б проста зрабіць нешта на сегментах няспраўнасцяў, але гэта было б недарэчы. 589 00:40:51,440 --> 00:40:54,950 Як правіла, яны робяць гэта, каб зламаць вашу сістэму. 590 00:40:54,950 --> 00:40:59,930 >> Добра. CS50 бібліятэка. 591 00:40:59,930 --> 00:41:04,800 Гэта, у асноўным, GetInt, GetString, усе гэтыя функцыі мы падалі для вас. 592 00:41:04,800 --> 00:41:10,630 Таму ў нас ёсць сімвал * радок, і гэта абстракцыя, што мы садзьмуў 593 00:41:10,630 --> 00:41:12,450 ў нейкі момант падчас семестра. 594 00:41:12,450 --> 00:41:18,220 Памятаеце, што радок проста масіў знакаў. 595 00:41:18,220 --> 00:41:23,240 Дык вось мы бачым скарочаны версію GetString. 596 00:41:23,240 --> 00:41:25,920 Вы павінны азірнуцца на яго, каб успомніць, як гэта на самай справе рэалізуецца. 597 00:41:25,920 --> 00:41:30,950 Асноўныя дэталі, звярніце ўвагу мы атрымліваем у адзін знак за адзін раз 598 00:41:30,950 --> 00:41:34,570 ад стандартных ў, якая як бы нам набраўшы іх з клавіятуры. 599 00:41:34,570 --> 00:41:37,890 Так адзін сімвал за адзін раз, і калі мы атрымаем занадта шмат сімвалаў, 600 00:41:37,890 --> 00:41:40,580 таму, калі п + 1 больш магутнасці, 601 00:41:40,580 --> 00:41:44,140 то мы павінны павялічыць прапускную здольнасць нашага буфера. 602 00:41:44,140 --> 00:41:47,780 Дык вось мы падвойвае памер нашага буфера. 603 00:41:47,780 --> 00:41:51,840 І гэта працягвае ісці, мы ўставіць знак у нашу буфера 604 00:41:51,840 --> 00:41:56,220 пакуль мы не атрымаем новую лінію або канец файла або любы іншы, 605 00:41:56,220 --> 00:41:59,380 у гэтым выпадку, мы скончылі з радка, а затым рэальнай GetString 606 00:41:59,380 --> 00:42:05,120 сціскаецца памяць, як калі б мы выдзелена занадта шмат памяці ён будзе вярнуцца і садзяцца няшмат. 607 00:42:05,120 --> 00:42:08,830 Такім чынам, мы не паказваюць, што, але асноўная ідэя заключаецца 608 00:42:08,830 --> 00:42:11,960 ён павінен чытаць у адзін знак за адзін раз. 609 00:42:11,960 --> 00:42:17,140 Яна не можа проста прачытаць у цэлым рэч адразу, 610 00:42:17,140 --> 00:42:19,550 таму што іх буфер толькі пэўнага памеру. 611 00:42:19,550 --> 00:42:26,590 Такім чынам, калі радок, яна паспрабуе ўставіць у буфер занадта вялікі, то гэта было б перапоўніць. 612 00:42:26,590 --> 00:42:28,940 І вось мы прадухіліць гэта толькі чытанне ў адзін знак 613 00:42:28,940 --> 00:42:33,750 у той час, і расце, калі нам трэба. 614 00:42:33,750 --> 00:42:40,270 Так GetInt і іншыя бібліятэчныя функцыі CS50 як правіла, выкарыстоўваюць GetString 615 00:42:40,270 --> 00:42:42,310 у іх рэалізацыі. 616 00:42:42,310 --> 00:42:45,370 Так што я звярнуў увагу на важныя рэчы. 617 00:42:45,370 --> 00:42:49,460 Ён заклікае GetString, каб атрымаць радок. 618 00:42:49,460 --> 00:42:51,710 Калі GetString не вярнуўся памяць, 619 00:42:51,710 --> 00:42:54,270 памятаеце, што GetString mallocs нешта, таму, калі вы тэлефануеце GetString 620 00:42:54,270 --> 00:42:57,820 вы не павінны (неразборліва) бясплатна гэты радок, які вы атрымалі. 621 00:42:57,820 --> 00:43:02,870 Дык вось, калі яго не ўдалося Malloc нешта, мы вяртаемся INT_MAX проста як сцяг, які, 622 00:43:02,870 --> 00:43:05,650 эй, мы не былі на самай справе ў стане атрымаць цэлае. 623 00:43:05,650 --> 00:43:10,830 Вы павінны ігнараваць усё, што я вярнуся да вас, ці 624 00:43:10,830 --> 00:43:15,540 вы не павінны разглядаць гэта як правільны ўвод. 625 00:43:15,540 --> 00:43:21,360 Нарэшце, мяркуючы, што так атрымаецца, мы выкарыстоўваем Sscanf з тым адмысловым сцягам, 626 00:43:21,360 --> 00:43:23,820 што азначае, у першую адпавядаць цэлае, 627 00:43:23,820 --> 00:43:26,770 Затым адпавядаць любым сімвалаў пасля гэтага цэлага. 628 00:43:26,770 --> 00:43:29,070 Так заўважыце, што мы хочам, каб ён роўны 1. 629 00:43:29,070 --> 00:43:32,940 Так Sscanf вяртаецца колькі матчаў, калі паспяхова зрабіў? 630 00:43:32,940 --> 00:43:37,010 Гэта верне 1, калі яна паспяхова падабраныя цэлае, 631 00:43:37,010 --> 00:43:40,890 гэта верне 0, калі яна не адпавядае цэлае, і ён вернецца 2 632 00:43:40,890 --> 00:43:45,920 калі яно адпавядае цэламу ліку ідуць некаторым характарам. 633 00:43:45,920 --> 00:43:49,780 Так заўважыце, што мы паўтарыць, наколькі мы падыходзім нічога, акрамя 1. 634 00:43:49,780 --> 00:43:55,230 Такім чынам, калі мы ўвайшлі 1, 2, 3, C, або 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 затым 1, 2, 3 будзе атрымліваць захоўваецца ў цэлае, 636 00:43:57,400 --> 00:43:59,620 X будзе атрымаць захоўваюцца на характар, 637 00:43:59,620 --> 00:44:06,410 Sscanf вернецца 2, і мы хацелі б паўтарыць, таму што мы толькі хочам цэлае. 638 00:44:06,410 --> 00:44:09,810 >> Хутка прадзьмуху HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 Мова разметкі гіпертэксту з'яўляецца структура і семантыка ў Інтэрнэце. 640 00:44:15,340 --> 00:44:19,960 Вось прыклад з лекцыі, дзе ў нас ёсць HTML-тэгі. 641 00:44:19,960 --> 00:44:22,110 У нас ёсць галавы тэгі, тэгі цела, 642 00:44:22,110 --> 00:44:27,770 у нас ёсць прыклады пустых тэгаў, дзе мы на самай справе не маюць пачатку і зачыняе тэг, 643 00:44:27,770 --> 00:44:30,820 мы проста павінны спасылку і малюнак. 644 00:44:30,820 --> 00:44:38,480 Там няма закрыцця тэг карцінкі; ёсць толькі адзін тэг, які выконвае ўсе тэг павінен рабіць. 645 00:44:38,480 --> 00:44:41,950 Сувязь з'яўляецца прыкладам; мы ўбачым, як Вы даяце спасылку на CSS, 646 00:44:41,950 --> 00:44:45,910 сцэнар з'яўляецца прыкладам таго, як Вы даяце спасылку на знешні JavaScript. 647 00:44:45,910 --> 00:44:53,100 Гэта даволі проста, і памятайце, HTML не з'яўляецца мовай праграмавання. 648 00:44:53,100 --> 00:44:58,250 Вось, памятаеце, як бы вы вызначыць форму або па крайняй меры тое, што гэта будзе рабіць? 649 00:44:58,250 --> 00:45:01,740 Такая форма мае дзеянне, і спосаб. 650 00:45:01,740 --> 00:45:06,210 Метады, якія вы толькі калі-небудзь бачыце, GET і POST. 651 00:45:06,210 --> 00:45:09,040 Так GET з'яўляецца версія, дзе рэч атрымлівае пакласці ў URL. 652 00:45:09,040 --> 00:45:11,680 POST, дзе не ставіцца ў URL. 653 00:45:11,680 --> 00:45:18,520 Замест гэтага любыя дадзеныя з формы ўстаўляецца больш схаваныя ў запыце HTTP. 654 00:45:18,520 --> 00:45:22,390 Дык вось, дзеянне вызначае, калі запыт HTTP ідзе. 655 00:45:22,390 --> 00:45:27,490 Дзе ён збіраецца гэта google.com / Пошук. 656 00:45:27,490 --> 00:45:32,890 Метад. Запомніць адрозненні паміж GET і POST, 657 00:45:32,890 --> 00:45:37,200 і, проста сказаць у якасці прыкладу, калі вы хочаце закладкі нечым. 658 00:45:37,200 --> 00:45:40,660 Вы ніколі не будзеце мець магчымасць усталяваць закладку на POST URL 659 00:45:40,660 --> 00:45:44,970 паколькі дадзеныя не ўключаны ў URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, зараз, з'яўляецца пратакол перадачы гіпертэксту. 661 00:45:49,790 --> 00:45:54,080 Пратакол перадачы гіпертэксту, можна было б чакаць, што для перадачы 662 00:45:54,080 --> 00:45:57,710 Мова разметкі гіпертэксту, і гэта робіць. 663 00:45:57,710 --> 00:46:00,170 Але гэта таксама перадае любыя выявы, якія вы знойдзеце ў Інтэрнэце, 664 00:46:00,170 --> 00:46:05,400 любыя загрузкі вы робіце пачаць як запыце HTTP. 665 00:46:05,400 --> 00:46:10,350 Так HTTP проста мова World Wide Web. 666 00:46:10,350 --> 00:46:15,610 І тут трэба прызнаць гэты від запыту HTTP. 667 00:46:15,610 --> 00:46:19,300 Тут HTTP/1.1 на баку проста кажа, што гэта версія 668 00:46:19,300 --> 00:46:21,570 пратаколу я выкарыстоўваю. 669 00:46:21,570 --> 00:46:25,770 Гэта ў значнай ступені заўсёды будзе HTTP/1.1, як вы ўбачыце яго. 670 00:46:25,770 --> 00:46:30,110 Тады мы бачым, што гэта было GET, альтэрнатыва быць POST, што вы можаце ўбачыць. 671 00:46:30,110 --> 00:46:40,790 І URL, што я спрабаваў наведаць быў www.google.com/search?q = бла, бла, бла. 672 00:46:40,790 --> 00:46:44,240 Так што памятаеце, што гэта, знак пытання д = бла бла бла, 673 00:46:44,240 --> 00:46:49,040 з'яўляецца свайго роду матэрыял, які прадстаўляецца ў форме. 674 00:46:49,040 --> 00:46:51,830 Адказ можа вярнуцца да мяне б выглядаць прыкладна так. 675 00:46:51,830 --> 00:46:54,050 Зноў жа, пачынаючы з пратаколу, які збіраецца быць, што, 676 00:46:54,050 --> 00:46:59,190 затым код стану. Вось гэта 200 ОК. 677 00:46:59,190 --> 00:47:05,060 І, нарэшце, вэб-старонкі, што я на самой справе папрасіў рушыць услед. 678 00:47:05,060 --> 00:47:08,210 Магчымы код стану вы можаце ўбачыць, і вы павінны ведаць некаторыя з іх. 679 00:47:08,210 --> 00:47:12,770 200 ОК вы, напэўна, бачылі раней. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, Error 500 Internal Server 681 00:47:17,830 --> 00:47:22,140 , Як правіла, калі вы ідзяце на сайт і нешта не працуе або іх аварый PHP код, 682 00:47:22,140 --> 00:47:24,930 у той час як ў прыборы маем вялікі аранжавы прастакутнік 683 00:47:24,930 --> 00:47:27,830 што прыходзіць і кажа, быццам бы, нешта не так, гэты код не працуе 684 00:47:27,830 --> 00:47:30,380 або гэтая функцыя дрэнна. 685 00:47:30,380 --> 00:47:33,230 Звычайна вэб-сайты не хачу, каб вы, ведаючы, якія функцыі на самай справе дрэнна, 686 00:47:33,230 --> 00:47:37,880 так замест гэтага яны проста дам вам 500 Унутраныя памылкі сервера. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP з'яўляецца 1 пласт пад HTTP. 688 00:47:43,050 --> 00:47:47,550 Памятаеце, што існуе Інтэрнэт за межамі Сусветнай павуціны. 689 00:47:47,550 --> 00:47:52,270 Падобна гэтаму, калі вы гуляеце ў онлайн гульні, якая не праходзіць праз HTTP, 690 00:47:52,270 --> 00:47:55,740 гэта будзе праз іншага - яна па-ранейшаму з выкарыстаннем Інтэрнэту, 691 00:47:55,740 --> 00:47:58,900 але ён не выкарыстоўвае HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP з'яўляецца толькі адным з прыкладаў пратаколу пабудаваны на TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP літаральна азначае Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Кожны кампутар мае IP-адрас, яны гэтыя 4-значныя рэчы 695 00:48:11,500 --> 00:48:16,510 як 192.168.2.1, або што, то, як правіла, лакальны характар. 696 00:48:16,510 --> 00:48:23,390 Але гэта карціна з IP-адрасы. 697 00:48:23,390 --> 00:48:29,060 Такім чынам, DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 гэта тое, што перакладае такія рэчы, як google.com да фактычнага IP адрасе. 699 00:48:33,410 --> 00:48:37,700 Так што калі вы ўведзяце, што IP-адрас у URL, 700 00:48:37,700 --> 00:48:40,850 што б прывесці вас да Google, але вы, як правіла не ўспамінаць гэтыя рэчы. 701 00:48:40,850 --> 00:48:45,470 Вы, як правіла, замест памятаць google.com. 702 00:48:45,470 --> 00:48:51,560 Апошняе, што мы маем, парты, дзе гэта TCP часткай IP. 703 00:48:51,560 --> 00:48:54,880 TCP робіць больш. Падумайце аб тым,, як, вы запусцілі вэб-браўзэра. 704 00:48:54,880 --> 00:48:58,670 Можа быць, у вас ёсць некаторыя якія працуюць прыкладання электроннай пошты, 705 00:48:58,670 --> 00:49:02,150 можа быць, у вас ёсць іншыя праграмы, якая выкарыстоўвае Інтэрнэт працуе. 706 00:49:02,150 --> 00:49:05,090 Усе яны маюць патрэбу ў доступе да сеткі Інтэрнэт, 707 00:49:05,090 --> 00:49:08,100 але ваш кампутар мае толькі 1 WiFi карты або любы іншы. 708 00:49:08,100 --> 00:49:10,780 Так парты так, што мы ў стане падзяліць 709 00:49:10,780 --> 00:49:13,550 як гэтыя праграмы могуць выкарыстоўваць Інтэрнэт. 710 00:49:13,550 --> 00:49:17,230 Кожны дадатак атрымлівае 1 пэўны порт, што ён можа слухаць на, 711 00:49:17,230 --> 00:49:19,670 і па змаўчанні, HTTP выкарыстоўвае порт 80. 712 00:49:19,670 --> 00:49:22,410 Некаторыя паштовыя службы выкарыстоўваюць 25. 713 00:49:22,410 --> 00:49:24,490 Тыя, нізкім нумарам, як правіла, абаронены. 714 00:49:24,490 --> 00:49:29,270 Вы, як правіла, у стане атрымаць больш высокім нумарам тыя для сябе. 715 00:49:29,270 --> 00:49:32,010 >> CSS, каскадныя табліцы стыляў. 716 00:49:32,010 --> 00:49:36,030 Мы стылі вэб-старонак з дапамогай CSS, а не з HTML. 717 00:49:36,030 --> 00:49:38,440 Ёсць 3 месцы, якія вы можаце змясціць свой CSS. 718 00:49:38,440 --> 00:49:46,300 Гэта можа быць убудаваным, паміж тэгамі стылі, або ў зусім асобным файле і затым звязаныя цалі 719 00:49:46,300 --> 00:49:48,470 А вось як раз прыклад CSS. 720 00:49:48,470 --> 00:49:50,450 Вы павінны прызнаць гэтую мадэль, 721 00:49:50,450 --> 00:49:54,310 дзе першы прыклад мы адпаведныя тэгі цела, 722 00:49:54,310 --> 00:49:56,680 і тут мы цэнтравання тэг цела. 723 00:49:56,680 --> 00:50:00,420 Другі прыклад, мы не саступаюць рэч 724 00:50:00,420 --> 00:50:04,740 з ID зносцы, і мы ўжываем некаторыя стылі да гэтага. 725 00:50:04,740 --> 00:50:07,310 Звярніце ўвагу, што ID Зноска выраўноўвае налева, 726 00:50:07,310 --> 00:50:09,840 у той час як цела тэкставыя выраўноўвае цэнтр. 727 00:50:09,840 --> 00:50:13,180 Footer знаходзіцца ўсярэдзіне цела. 728 00:50:13,180 --> 00:50:16,470 Гэта будзе, замест гэтага, выраўноўвання тэксту засталося, хоць цела кажа выраўноўвання тэксту цэнтр. 729 00:50:16,470 --> 00:50:18,880 У гэтым уся каскадных часткай. 730 00:50:18,880 --> 00:50:22,110 Вы можаце мець - можна паказаць стылі для цела, 731 00:50:22,110 --> 00:50:25,320 і тады ўсё ў арганізме можна паказаць больш канкрэтныя стылі, 732 00:50:25,320 --> 00:50:28,160 і ўсё гэта працуе, як вы чакаеце. 733 00:50:28,160 --> 00:50:34,420 Больш за канкрэтныя CSS спецификаторы маюць прыярытэт. 734 00:50:34,420 --> 00:50:46,140 Я думаю, што гэта ён. 735 00:50:46,140 --> 00:50:49,260 >> [Алі Нама] Прывітанне ўсім. Калі б я мог прыцягнуць вашу ўвагу. 736 00:50:49,260 --> 00:50:53,990 Я Алі, і я збіраюся прайсці праз PHP і SQL вельмі хутка. 737 00:50:53,990 --> 00:51:00,310 Такім чынам, мы можам пачаць. PHP з'яўляецца скарачэннем PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 І, як вы ўсе павінны ведаць, што гэта на боку сервера скрыптовы мова, 739 00:51:03,730 --> 00:51:06,800 і мы выкарыстоўваем яго для задняй частцы вэб-сайтаў, 740 00:51:06,800 --> 00:51:12,540 і як яна робіць шмат вылічэнняў, з боку за кадрам. 741 00:51:12,540 --> 00:51:17,510 Сінтаксіс. Гэта не падобна на C, здзіўленне, здзіўленне. 742 00:51:17,510 --> 00:51:22,060 Гэта заўсёды павінна пачынацца з, калі вы бачыце, - я не магу рухацца наперад. 743 00:51:22,060 --> 00:51:31,340 Вы можаце бачыць, вам патрэбныя новыя віды брекетов, а затым вы таксама маюць патрэбу ў PHP?. 744 00:51:31,340 --> 00:51:35,780 Гэта заўсёды, як вы павінны сфармуляваць свой PHP тэкст, ваш код PHP. 745 00:51:35,780 --> 00:51:39,180 Таму ён не можа быць проста, як З, дзе вы, здаецца, пакласці яго ў першую чаргу. 746 00:51:39,180 --> 00:51:42,290 Вы павінны заўсёды атачаюць яго. 747 00:51:42,290 --> 00:51:47,610 А цяпер, маёр сінтаксіс, што ўсе зменныя павінны пачаць з знака $. 748 00:51:47,610 --> 00:51:49,490 Вы павінны зрабіць гэта, калі вы вызначаеце іх, вы павінны зрабіць гэта 749 00:51:49,490 --> 00:51:51,860 калі вы маеце на ўвазе да іх пазней. 750 00:51:51,860 --> 00:51:56,510 Вы заўсёды павінны, што $. Гэта ваш новы лепшы сябар, даволі шмат. 751 00:51:56,510 --> 00:52:01,690 Вы не - у адрозненне ад C, вам не трэба ставіць якую тыпу зменнай гэта. 752 00:52:01,690 --> 00:52:04,940 Такім чынам, хоць вы сапраўды маеце патрэбу ў $, вам не трэба ставіць, як, 753 00:52:04,940 --> 00:52:09,470 унутр х ці радок у, і гэтак далей, і гэтак далей. 754 00:52:09,470 --> 00:52:11,490 Так невялікая розніца. 755 00:52:11,490 --> 00:52:15,590 У выніку гэтага, гэта азначае, што РНР з'яўляецца слаба тыпу. 756 00:52:15,590 --> 00:52:19,310 PHP з'яўляецца слаба мова Тып, і ён слаба тыпізаваных зменныя. 757 00:52:19,310 --> 00:52:24,020 Іншымі словамі, гэта азначае, што вы можаце перамыкацца паміж рознымі відамі тыпаў зменных. 758 00:52:24,020 --> 00:52:27,230 Вы можаце захаваць свой нумар 1 у выглядзе цэлага ліку, 759 00:52:27,230 --> 00:52:29,650 Вы можаце захаваць яго ў выглядзе радка, і вы можаце захаваць яго як паплавок, 760 00:52:29,650 --> 00:52:33,550 і гэта ўсё будзе, што лік 1. 761 00:52:33,550 --> 00:52:36,080 Нават калі вы захоўваць яго ў розных формах, 762 00:52:36,080 --> 00:52:39,120 яна па-ранейшаму - тыпы зменных ўсё яшчэ трымаюць у рэшце рэшт. 763 00:52:39,120 --> 00:52:41,540 Так што, калі вы паглядзіце сюды, калі вы памятаеце з PSet 7, 764 00:52:41,540 --> 00:52:43,500 многія з вас, верагодна, былі праблемы з гэтым. 765 00:52:43,500 --> 00:52:47,280 Два знака роўнасці, 3 знака роўнасці, 4 знака роўнасці. 766 00:52:47,280 --> 00:52:49,990 Добра, няма 4 знака роўнасці, але ёсць 2 і 3. 767 00:52:49,990 --> 00:52:53,320 Вы можаце выкарыстоўваць два знака роўнасці для праверкі значэнняў. 768 00:52:53,320 --> 00:52:55,830 Ён можа праверыць па тыпах. 769 00:52:55,830 --> 00:52:58,770 Так што калі вы можаце бачыць на першым прыкладзе, 770 00:52:58,770 --> 00:53:02,210 У мяне ёсць num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Так што ваш унутр і ваша радок абодва, тэхнічна, 1, 772 00:53:06,710 --> 00:53:10,790 але яны розныя тыпы. Але для падвойных роўных, гэта будзе яшчэ прайсці. 773 00:53:10,790 --> 00:53:15,510 Тым не менш, для патройных роўных, ён правярае значэнне, а таксама розныя тыпы. 774 00:53:15,510 --> 00:53:18,760 Гэта азначае, што ён не збіраецца ў той другім выпадку тут, 775 00:53:18,760 --> 00:53:22,350 дзе вы выкарыстоўваеце 3 знак роўнасці, а не. 776 00:53:22,350 --> 00:53:26,590 Дык вось галоўнае адрозненне, што вы павінны ўсё паказалі цяпер. 777 00:53:26,590 --> 00:53:31,570 >> Аб'яднанне радкоў з'яўляецца яшчэ адным магутным, што вы можаце выкарыстоўваць у PHP. 778 00:53:31,570 --> 00:53:34,080 Гэта ў асноўным толькі гэты зручны кропкавай натацыі, 779 00:53:34,080 --> 00:53:36,230 і вось як можна прывязаць радкоў разам. 780 00:53:36,230 --> 00:53:40,800 Так што калі ў вас ёсць котка і ў вас ёсць сабака, і вы хочаце, каб пакласці 2 радкі разам, 781 00:53:40,800 --> 00:53:44,080 Вы можаце выкарыстоўваць перыяд, і гэта збольшага, як гэта працуе. 782 00:53:44,080 --> 00:53:46,660 Вы таксама можаце проста размясціць іх побач адзін з адным, 783 00:53:46,660 --> 00:53:49,030 як вы можаце бачыць тут, у ніжняй Напрыклад, 784 00:53:49,030 --> 00:53:51,610 дзе я рэха радок 1, прастору радок 2. 785 00:53:51,610 --> 00:53:56,930 PHP будзе ведаць, каб замяніць іх у якасці такіх. 786 00:53:56,930 --> 00:53:59,780 Масівы. Зараз, у PHP, ёсць 2 розныя віды масіваў. 787 00:53:59,780 --> 00:54:03,180 Вы можаце мець рэгулярныя масівы, і вы таксама можаце мець асацыятыўныя масівы, 788 00:54:03,180 --> 00:54:06,040 і мы збіраемся прайсці праз іх прама цяпер. 789 00:54:06,040 --> 00:54:08,280 Рэгулярныя масівы проста гэта ў C, 790 00:54:08,280 --> 00:54:11,240 і таму вы павінны індэксаў, якія пранумараваны. 791 00:54:11,240 --> 00:54:13,160 Зараз мы толькі збіраемся, каб стварыць адну і пакласці - 792 00:54:13,160 --> 00:54:15,500 так што гэта, як мы ствараем пусты масіў, то мы збіраемся 793 00:54:15,500 --> 00:54:17,310 пакласці ў індэкс колькасці 0. 794 00:54:17,310 --> 00:54:19,200 Мы збіраемся паставіць нумар 6, значэнне 6. 795 00:54:19,200 --> 00:54:21,500 Вы можаце бачыць гэта на дне тут. 796 00:54:21,500 --> 00:54:24,240 Where's - у з парадкавым нумарам 1, мы збіраемся паставіць значэнне нумар 4, 797 00:54:24,240 --> 00:54:26,720 і таму вы можаце ўбачыць, што ёсць 6, ёсць 4, 798 00:54:26,720 --> 00:54:29,160 а затым, як мы друку рэчы, 799 00:54:29,160 --> 00:54:33,550 калі мы спрабуем і раздрукаваць значэння з індэксам колькасці 0, 800 00:54:33,550 --> 00:54:36,900 тады мы ўбачым значэнне 6 яго раздрукоўкі. Крута? 801 00:54:36,900 --> 00:54:40,160 Дык вось рэгулярныя масівы для вас. 802 00:54:40,160 --> 00:54:42,750 Іншым спосабам вы можаце дадаць рэчы звычайных масіваў зараз 803 00:54:42,750 --> 00:54:44,780 што вы можаце проста дадаць іх у канцы. 804 00:54:44,780 --> 00:54:47,240 Гэта азначае, што вам не прыйдзецца паказваць канкрэтны індэкс. 805 00:54:47,240 --> 00:54:51,000 Вы можаце ўбачыць нумар, а затым у квадратных дужках няма паказаны індэкс. 806 00:54:51,000 --> 00:54:56,270 І ён будзе ведаць, - PHP будзе ведаць, каб проста дадаць яго ў канец спісу, наступнага вольнае месца. 807 00:54:56,270 --> 00:54:59,190 Такім чынам, вы можаце ўбачыць 1 тут жа у той 0 месцы, 808 00:54:59,190 --> 00:55:02,690 2 пайшоў тут жа ў першым месцы. 809 00:55:02,690 --> 00:55:04,690 3 ідзе - дадаецца там жа. 810 00:55:04,690 --> 00:55:06,720 Так што выгляд мае сэнс. Ты проста пастаянна дадаваць яго, 811 00:55:06,720 --> 00:55:09,360 а потым, калі мы паўтараючы індэкс колькасці 1, 812 00:55:09,360 --> 00:55:13,080 ён выдасць значэнне 2. 813 00:55:13,080 --> 00:55:16,800 >> Тады ў нас ёсць масівы, якія з'яўляюцца асацыятыўныя масівы. 814 00:55:16,800 --> 00:55:19,370 Асацыятыўныя масівы, замест таго, лікавыя індэксы, 815 00:55:19,370 --> 00:55:23,630 што яны робяць, яны маюць індэксы, якія па радку. 816 00:55:23,630 --> 00:55:25,670 Вы можаце бачыць, замест таго, каб - я пазбавіўся ад усіх гэтых лікавых індэксаў, 817 00:55:25,670 --> 00:55:32,140 і зараз гэта ключ1, ключ2, ключ3, і яны ў падвойныя двукоссі, каб паказаць, што яны ўсе радкі. 818 00:55:32,140 --> 00:55:34,470 Так мы можам мець прыклад гэтага. 819 00:55:34,470 --> 00:55:38,790 Прыкладам гэтага з'яўляецца тое, што ў нас ёсць TF, і гэта імя азначніка. 820 00:55:38,790 --> 00:55:42,030 Мы збіраемся паставіць "Алі" у якасці імя, на індэкс, калорыі з'едзены, 821 00:55:42,030 --> 00:55:47,640 мы можам пакласці цэлалікавых гэты раз замест радка, 822 00:55:47,640 --> 00:55:52,240 , А затым у індэксных любіць, мы можам пакласці ўвесь масіў ўнутры яго. 823 00:55:52,240 --> 00:55:55,490 Так што гэта свайго роду - гэта аналагічная канцэпцыя таго, як мы павінны былі 824 00:55:55,490 --> 00:55:58,930 індэксы з нумарамі, але зараз мы можам змяніць індэксы вакол 825 00:55:58,930 --> 00:56:03,890 мець іх як радкі, а не. 826 00:56:03,890 --> 00:56:06,070 Вы таксама можаце зрабіць гэта, акрамя ўсяго рабіць гэта індывідуальна, 827 00:56:06,070 --> 00:56:09,400 Вы можаце зрабіць усё гэта ў адным кавалку. Такім чынам, вы можаце бачыць, што TF гэтага масіва, 828 00:56:09,400 --> 00:56:13,350 і тое пакладзем іх у адну гіганцкую квадратнага набор кранштэйнаў. 829 00:56:13,350 --> 00:56:15,220 Так што можа паскорыць працэс. 830 00:56:15,220 --> 00:56:19,730 Гэта хутчэй стылістычны выбар, чым няма. 831 00:56:19,730 --> 00:56:21,550 У нас таксама ёсць завесы. 832 00:56:21,550 --> 00:56:26,020 У C мы маем завесы, якія працуюць, як гэта. 833 00:56:26,020 --> 00:56:29,690 У нас быў наш масіў, і мы пайшлі з індэксам 0 ў канцы спісу, 834 00:56:29,690 --> 00:56:31,740 і мы друкуем усё гэта, ці не так? 835 00:56:31,740 --> 00:56:33,880 Акрамя праблема, для асацыятыўных масіваў, 836 00:56:33,880 --> 00:56:36,610 мы не абавязкова ведаць гэтыя лікавыя індэксы 837 00:56:36,610 --> 00:56:39,610 таму што цяпер у нас ёсць малыя індэксы. 838 00:56:39,610 --> 00:56:44,800 Цяпер мы выкарыстоўваем FOREACH завесы, якія, зноў жа, вы, спадзяемся, што выкарыстоўваюцца ў PSet 7. 839 00:56:44,800 --> 00:56:48,930 Foreach завесы будзе проста ведаю, кожны частка спісу. 840 00:56:48,930 --> 00:56:52,450 І гэта не абавязкова павінен дакладна ведаць лікавы індэкс, што ў вас ёсць. 841 00:56:52,450 --> 00:56:56,490 Так у вас ёсць сінтаксіс Еогеасп, так што гэта Еогеасп, вы паклалі масіў. 842 00:56:56,490 --> 00:57:00,430 Так што мой масіў называецца PSET, а затым, слова як, 843 00:57:00,430 --> 00:57:04,530 а затым вы пакладзеце гэты лакальны часовую зменную, што вы збіраецеся выкарыстоўваць 844 00:57:04,530 --> 00:57:10,690 толькі для канкрэтнай рэчы, што адбываецца правесці канкрэтны - 845 00:57:10,690 --> 00:57:14,770 адзін асобнік або адна частка масіва. 846 00:57:14,770 --> 00:57:18,350 Pset піт правядзе 1, а затым, можа быць, будзе ўтрымліваць нумар 6, 847 00:57:18,350 --> 00:57:20,410 , А затым ён будзе ўтрымліваць нумар 2. 848 00:57:20,410 --> 00:57:26,630 Але гэта гарантавана прайсці кожны адно значэнне, гэта ў масіве. 849 00:57:26,630 --> 00:57:30,530 Карысныя функцыі, якія вы павінны ведаць у PHP з'яўляюцца патрабуюць, 850 00:57:30,530 --> 00:57:35,880 так што робіць ўпэўненыя, што вы ў тым ліку пэўныя файлы, рэха, выхад, пусты. 851 00:57:35,880 --> 00:57:40,490 Я настойліва рэкамендую вам паглядзець на PSet 7 і паглядзець на гэтых функцый. 852 00:57:40,490 --> 00:57:42,810 Магчыма, вам прыйдзецца ведаць тых, 853 00:57:42,810 --> 00:57:47,060 так што я дакладна ведаю, будзе тое, што, уласна, тыя, усё робяць. 854 00:57:47,060 --> 00:57:50,080 >> А зараз мы збіраемся прайсці праз рамкі вельмі хутка. 855 00:57:50,080 --> 00:57:53,490 У рамках, PHP з'яўляецца свайго роду фанкі рэчы, у адрозненне ад C, 856 00:57:53,490 --> 00:57:56,170 і так мы толькі збіраемся прайсці праз гэта хутка. 857 00:57:56,170 --> 00:57:58,930 Так скажам, мы пачынаем у гэтым стрэлкі, што ў нас ёсць. 858 00:57:58,930 --> 00:58:02,900 І мы збіраемся пачаць з $ я. Такім чынам, пераменная 'я' будзе 0, 859 00:58:02,900 --> 00:58:06,730 і мы толькі збіраемся працягваць друкаваць яго ў гэтай вялікай белай скрынцы там. 860 00:58:06,730 --> 00:58:09,220 Мы збіраемся пачаць з i0, а затым мы збіраемся паўтарыць яго. 861 00:58:09,220 --> 00:58:12,670 Такім чынам, ёсць 0. 862 00:58:12,670 --> 00:58:15,210 А потым мы збіраемся павялічваць яго на цыкл, 863 00:58:15,210 --> 00:58:17,810 , А затым ён будзе значэнне 1. 864 00:58:17,810 --> 00:58:20,070 Адзін менш 3, таму ён збіраецца прайсці праз гэта цыкл, 865 00:58:20,070 --> 00:58:23,230 і тады мы ўбачым яго зноў надрукаваныя. 866 00:58:23,230 --> 00:58:25,520 Мы збіраемся павялічыць яго зноў да 2, 867 00:58:25,520 --> 00:58:29,860 і 2 менш 3, таму ён пройдзе цыкл, і ён будзе друкаваць 2. 868 00:58:29,860 --> 00:58:35,100 Тады вы заўважыце, што 3 не менш як 3, таму мы вырвацца з цыклу. 869 00:58:35,100 --> 00:58:40,050 Так што цяпер мы выйшлі, а затым мы збіраемся ісці ў спыненне функцыі. 870 00:58:40,050 --> 00:58:45,010 Добра. Такім чынам, вы павінны адзначыць, што гэта зменная, якую мы стварылі, 871 00:58:45,010 --> 00:58:48,270 "Я" зменнай, ня лакальнай вобласцю бачнасці. 872 00:58:48,270 --> 00:58:50,280 Гэта азначае, што яно не з'яўляецца лакальным ў пятлю, 873 00:58:50,280 --> 00:58:58,060 і што пераменная, якую мы да гэтага часу могуць атрымаць доступ і змяніць пасля, і яна па-ранейшаму будзе эфектыўным. 874 00:58:58,060 --> 00:59:02,160 Так што, калі вы ідзяце ў функцыю зараз, вы ўбачыце, што мы таксама выкарыстоўваем "Я" зменную, 875 00:59:02,160 --> 00:59:05,320 і мы збіраемся, каб павялічыць 'я' + +. 876 00:59:05,320 --> 00:59:09,410 Можна было б падумаць, па-першае, на аснове C, што гэта копія «Я» зменнай. 877 00:59:09,410 --> 00:59:12,830 Гэта зусім розныя рэчы, што з'яўляецца правільным. 878 00:59:12,830 --> 00:59:16,560 Таму, калі мы друкуем яго, мы збіраемся надрукаваць 'я' + +, які будзе друкаваць, што 4, 879 00:59:16,560 --> 00:59:19,640 а затым мы збіраемся - прабачце. 880 00:59:19,640 --> 00:59:22,030 Тады мы збіраемся ў канчатковым з гэтай функцыі, 881 00:59:22,030 --> 00:59:24,820 і мы збіраемся быць там, дзе, што стрэлка знаходзіцца цяпер. 882 00:59:24,820 --> 00:59:29,190 Гэта азначае, што тое, тым не менш, нават калі функцыя змянілі значэнне "Я", 883 00:59:29,190 --> 00:59:32,620 гэта не змяніла за межамі функцыі, 884 00:59:32,620 --> 00:59:35,060 таму што функцыя мае асобны аб'ём. 885 00:59:35,060 --> 00:59:38,960 Гэта азначае, што, калі мы рэха 'я', яна не змянілася ў вобласці дзеяння функцыі, 886 00:59:38,960 --> 00:59:43,660 і так, то мы збіраемся надрукаваць 3 раз. 887 00:59:43,660 --> 00:59:47,520 Розныя рэчы пра рамкі ў PHP, чым у С. 888 00:59:47,520 --> 00:59:51,130 >> Зараз у PHP і HTML. 889 00:59:51,130 --> 00:59:53,510 PHP выкарыстоўваецца, каб зрабіць вэб-старонкі дынамічнымі. 890 00:59:53,510 --> 00:59:58,660 Гэта збольшага робіць рэчы розныя. 891 00:59:58,660 --> 01:00:02,090 У нас ёсць яго адрозненне ад HTML. 892 01:00:02,090 --> 01:00:05,230 З HTML, мы заўсёды толькі маюць той жа статычны рэч, як тое, як Роб паказаў, 893 01:00:05,230 --> 01:00:09,370 у той час як PHP, вы можаце змяніць рэчы на ​​аснове, кім з'яўляецца карыстальнік. 894 01:00:09,370 --> 01:00:11,830 Так што, калі ў мяне ёсць гэта, я, "Вы ўвайшлі як -" а затым імя, 895 01:00:11,830 --> 01:00:14,420 і я магу змяніць імя. Так што цяпер клічуць Іосіф, 896 01:00:14,420 --> 01:00:18,880 і ў яго ёсць "пра мяне", але тады я магу таксама змяніць імя, каб мець Томі. 897 01:00:18,880 --> 01:00:21,700 І гэта была б іншая справа. 898 01:00:21,700 --> 01:00:23,840 Так тады мы можам таксама змяняць розныя рэчы пра яго, 899 01:00:23,840 --> 01:00:27,070 і ён пакажа рознае ўтрыманне на аснове імя. 900 01:00:27,070 --> 01:00:31,430 Такім чынам, PHP можа збольшага змяніць тое, што адбываецца ў вашым сайце. 901 01:00:31,430 --> 01:00:33,540 Тое ж самае тут. Тым не менш, звярніце ўвагу, што ў іх ёсць розны кантэнт, 902 01:00:33,540 --> 01:00:38,870 нават калі вы тэхнічна ўсё яшчэ доступ да гэтай жа вэб-старонку на паверхні. 903 01:00:38,870 --> 01:00:43,450 Стварэнне HTML. Ёсць 2 розных спосабаў, якімі вы можаце зрабіць гэта. 904 01:00:43,450 --> 01:00:48,980 Такім чынам, мы пройдзем гэта прама цяпер. Першы спосаб, у вас ёсць - так, шкада. 905 01:00:48,980 --> 01:00:51,150 Такім чынам, вы проста павінны вашай звычайнай для завесы ў PHP, 906 01:00:51,150 --> 01:00:56,270 і тады вы рэхам у PHP, і вы рэха з HTML. 907 01:00:56,270 --> 01:00:58,720 Выкарыстоўваючы тое, што Роб паказаў вам з HTML сцэнара 908 01:00:58,720 --> 01:01:04,030 а затым з дапамогай PHP друк, каб проста раздрукаваць яго на вэб-старонку. 909 01:01:04,030 --> 01:01:09,520 Альтэрнатыўны спосаб, каб рабіць гэта як калі б вы вылучыць на PHP і HTML. 910 01:01:09,520 --> 01:01:11,940 Такім чынам, вы можаце мець лінію PHP, які пачынаецца цыкл, 911 01:01:11,940 --> 01:01:16,020 то вы можаце мець лінію HTML ў асобным рэчы, 912 01:01:16,020 --> 01:01:19,700 а затым вы ў канчатковым пятлю, зноў жа, з PHP. 913 01:01:19,700 --> 01:01:21,800 Так што гэта свайго роду падзелу яго. 914 01:01:21,800 --> 01:01:24,020 З левага боку, вы можаце, што ў вас ёсць усё - 915 01:01:24,020 --> 01:01:26,360 гэта проста 1 кавалак PHP. 916 01:01:26,360 --> 01:01:28,510 Справа вы можаце бачыць, што ў вас ёсць лінію PHP, 917 01:01:28,510 --> 01:01:32,540 ў вас ёсць лінію HTML, і ў вас ёсць лінію PHP зноў. 918 01:01:32,540 --> 01:01:36,870 Так падзелу яго ў тое, што яны робяць. 919 01:01:36,870 --> 01:01:39,330 І вы заўважыце, што ў любым выпадку, для любога з іх, 920 01:01:39,330 --> 01:01:41,980 яны па-ранейшаму раздрукаваць малюнак, вобраз, выява, 921 01:01:41,980 --> 01:01:44,540 так што HTML-ранейшаму друкуецца такім жа чынам. 922 01:01:44,540 --> 01:01:49,870 А потым вы ўсё роўна ўбачыце 3 малюнка з'яўляюцца на вашым сайце. 923 01:01:49,870 --> 01:01:52,820 Так што гэта 2 розныя спосабы рабіць тое ж самае. 924 01:01:52,820 --> 01:01:55,060 >> Цяпер у нас ёсць формы і запыты. Як Роб паказаў вам, 925 01:01:55,060 --> 01:01:59,400 Ёсць формы HTML, і мы як раз вецер праз гэта. 926 01:01:59,400 --> 01:02:02,040 У вас ёсць дзеянне і ў вас ёсць метад, і вашы дзеянні 927 01:02:02,040 --> 01:02:04,350 выгляд паказвае вам, дзе вы збіраецеся адправіць яго, а метад, ці з'яўляецца 928 01:02:04,350 --> 01:02:06,960 ён збіраецца быць GET або POST. 929 01:02:06,960 --> 01:02:11,220 І запыт GET, як сказаў Роб, азначае, што вы збіраецеся пакласці яго ў выглядзе 930 01:02:11,220 --> 01:02:15,760 і вы ўбачыце яго як URL, у той час як запыт POST, вы не ўбачыце ў URL. 931 01:02:15,760 --> 01:02:17,840 Так невялікая розніца. 932 01:02:17,840 --> 01:02:19,950 Тым не менш, адна рэч, якая нешта падобнае 933 01:02:19,950 --> 01:02:22,560 з'яўляецца тое, што POST і GET ў роўнай ступені небяспечна. 934 01:02:22,560 --> 01:02:26,430 Такім чынам, вы можаце думаць, што толькі таму, што вы не бачыце яго ў URL, 935 01:02:26,430 --> 01:02:28,790 гэта азначае, што POST з'яўляецца больш бяспечным, 936 01:02:28,790 --> 01:02:34,420 але вы ўсё яшчэ можаце ўбачыць гэта ў тваіх печыва ў інфармацыі, вы пасылаеце. 937 01:02:34,420 --> 01:02:38,260 Так што не думаю, што аб адным або сябрам. 938 01:02:38,260 --> 01:02:42,160 Іншая справа, варта адзначыць, што ў вас таксама ёсць раздзел зменных. 939 01:02:42,160 --> 01:02:45,850 Вы, хлопцы выкарыстоўвалі гэта ў PSet 7, каб атрымаць ідэнтыфікатар карыстальніка інфармацыю. 940 01:02:45,850 --> 01:02:48,550 Здарылася так, што вы можаце выкарыстоўваць гэты асацыятыўны масіў, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, А затым вы зможаце атрымаць доступ да розных рэчы 942 01:02:53,310 --> 01:02:57,720 і захоўваць розныя рэчы па старонках. 943 01:02:57,720 --> 01:03:00,750 >> Апошняя справа, што ў нас ёсць SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 і гэта мова праграмавання для кіравання базамі дадзеных. 945 01:03:04,360 --> 01:03:08,220 Што, уласна, ўяўляюць сабой базы дадзеных? Яны калекцыі табліц, 946 01:03:08,220 --> 01:03:10,630 і кожная табліца можа мець падобныя віды аб'ектаў. 947 01:03:10,630 --> 01:03:14,990 Так у нас быў стол карыстальнікаў у вашай фінансавай PSet. 948 01:03:14,990 --> 01:03:20,610 І чаму яны карысныя? Таму што гэта спосаб пастаяннага захоўвання інфармацыі. 949 01:03:20,610 --> 01:03:22,840 Гэта спосаб адсочвання рэчы і кіраванне рэчы 950 01:03:22,840 --> 01:03:25,890 і на самай справе бачым яго на розных старонках і адсочванне. 951 01:03:25,890 --> 01:03:29,930 У той час як, калі вы проста захоўваць яго ў то аднаго непасрэднай момант 952 01:03:29,930 --> 01:03:33,720 а затым выкарыстоўваць яго пазней, вы не зможаце атрымаць доступ да ўсё, што вы захавалі. 953 01:03:33,720 --> 01:03:37,660 У нас ёсць 4 асноўныя рэчы, якія мы выкарыстоўваем для каманд SQL. 954 01:03:37,660 --> 01:03:40,190 У нас ёсць выбіраць, ўстаўляць, выдаляць і абнаўлення. 955 01:03:40,190 --> 01:03:42,880 Тыя, якія сапраўды важныя для вас, хлопцы ведаюць, для вашага віктарыны. 956 01:03:42,880 --> 01:03:45,990 >> Мы хутка перайсці абярыце прама цяпер. 957 01:03:45,990 --> 01:03:48,540 У прынцыпе, вы выбару радкоў з базы дадзеных. 958 01:03:48,540 --> 01:03:52,400 Так што калі ў вас ёсць, прама тут - 959 01:03:52,400 --> 01:03:56,740 у нас ёсць гэтыя 2 розныя рэчы, і мы хочам, каб выбраць з табліцы класаў 960 01:03:56,740 --> 01:04:01,480 дзе дзіўным - дзе ў дзіўным калонцы значэнне роўна 1. 961 01:04:01,480 --> 01:04:04,460 Такім чынам, вы можаце бачыць тут, у нас ёсць гэтыя 2 рэчы імя класа, 962 01:04:04,460 --> 01:04:08,490 CS50 і Stat110, і ў нас ёсць коды класаў і лозунг. 963 01:04:08,490 --> 01:04:13,150 Таму мы хочам, каб выбраць усе, што інфармацыя. 964 01:04:13,150 --> 01:04:17,480 Тады вы можаце ўбачыць прама тут, што гэта збольшага выбіраючы з гэтай дзіўнай калонцы, 965 01:04:17,480 --> 01:04:25,170 дзе ўсе рэчы 1, а затым яна мае ідэнтыфікатар класа, імя класа і лозунг, што ён можа выбраць з. 966 01:04:25,170 --> 01:04:28,100 Як менавіта вы будзеце рабіць гэта ў кодзе? Вы павінны выкарыстоўваць PHP. 967 01:04:28,100 --> 01:04:33,830 Так што накшталт як PHP і SQL звязаны адзін з адным. 968 01:04:33,830 --> 01:04:38,130 Цяпер у нас ёсць наш код, і мы збіраемся выкарыстоўваць нашу функцыю запыту 969 01:04:38,130 --> 01:04:41,370 як мы рабілі ў PSet 7, і мы збіраемся запусціць SQL запыт. 970 01:04:41,370 --> 01:04:43,870 Тады мы будзем мець - 971 01:04:43,870 --> 01:04:46,280 мы заўсёды павінны праверыць, калі тройка роўная Роу калі фальшыва. 972 01:04:46,280 --> 01:04:49,010 Такім чынам, яшчэ раз, вы хочаце праверыць тып і значэнне, 973 01:04:49,010 --> 01:04:53,880 а затым, калі ён не працуе, то вы хочаце, каб папрасіць прабачэння, як звычайна, як мы рабілі ў PSet 7. 974 01:04:53,880 --> 01:04:55,870 У адваротным выпадку, вы хочаце перабраць усе з тымі зручна 975 01:04:55,870 --> 01:04:59,410 Еогеасп завесы, што мы проста перайшлі. 976 01:04:59,410 --> 01:05:01,280 Цяпер, калі мы прабягаем па і мы зрабілі гэта ў мінулым, 977 01:05:01,280 --> 01:05:05,080 давайце выкажам здагадку, што наш запыт прайшоў, зараз у нас ёсць цыкл па кожнаму элементу. 978 01:05:05,080 --> 01:05:11,050 І першая радок мае, так што вось радок, прама тут, гэта ў скрынку. 979 01:05:11,050 --> 01:05:14,010 Гэта збіраецца раздрукаваць ўсю інфармацыю, якую ён атрымаў. 980 01:05:14,010 --> 01:05:18,070 Дык гэта будзе раздрукаваць на дне "Хочаш даведацца HTML?" 981 01:05:18,070 --> 01:05:23,370 Тады гэта будзе перайсці да наступнага шэрагу, таму што яна завершана першая цыкл, 982 01:05:23,370 --> 01:05:26,510 і так, то гэта будзе раздрукаваць другі радок ёй, 983 01:05:26,510 --> 01:05:32,120 які будзе STAT110, Знайсці ўсе моманты. 984 01:05:32,120 --> 01:05:34,290 >> І яшчэ адно знаходзіцца на SQL уразлівасцяў. 985 01:05:34,290 --> 01:05:37,300 Я ведаю, Дэвід закрануў гэтага трохі ў лекцыі. 986 01:05:37,300 --> 01:05:40,730 Вы можаце прачытаць гэта пазней. Гэта сапраўды пацешна. 987 01:05:40,730 --> 01:05:45,320 SQL-ін'екцыя з'яўляецца свайго роду складаная рэч. 988 01:05:45,320 --> 01:05:49,890 Давайце выкажам здагадку, што вы проста прытрымлівацца гэтых зменных прама ў вашым запыце, 989 01:05:49,890 --> 01:05:52,290 як вы можаце бачыць у гэтым першай лініі. 990 01:05:52,290 --> 01:05:54,520 Так што, падобна выдатна, ці не так? Вы проста пакласці ў імя карыстальніка 991 01:05:54,520 --> 01:05:58,820 і пароль у ваш запыт, і вы хочаце грузіць яго і атрымаць тое, што знаходзіцца ў табліцы дадзеных. 992 01:05:58,820 --> 01:06:01,450 Гэта здаецца даволі простым. Так што давайце казаць хтосьці кладзе ў, 993 01:06:01,450 --> 01:06:04,910 для пароля, гэта ці тэкст прама тут - 994 01:06:04,910 --> 01:06:06,780 павінны на самай справе быць у чырвонай скрынцы. 995 01:06:06,780 --> 01:06:11,920 Так скажам, што яны ўкладаюць у гэты пароль - гэта тое, што яны ўваходзяць. 996 01:06:11,920 --> 01:06:16,520 Так яны змяшчаюць або "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Выгляд дурной пароль, каб мець. 998 01:06:20,880 --> 01:06:25,070 Зараз давайце проста замяніць яго, і вы заўважыце, што ў гэтым SQL-запыт, цяпер, 999 01:06:25,070 --> 01:06:29,090 ён ацэньвае заўсёды дакладна, таму што вы заўважыце, што 1000 01:06:29,090 --> 01:06:32,240 Вы можаце SQL запытаў выберыце ўсю гэтую інфармацыю 1001 01:06:32,240 --> 01:06:35,420 ці вы можаце проста ёсць 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Так што заўсёды будзе ацаніць да ісціны. 1003 01:06:41,030 --> 01:06:46,610 Гэта не будзе па-сапраўднаму працаваць, таму што гэта азначае, што хакер можа ўзламаць вашу сістэму. 1004 01:06:46,610 --> 01:06:49,300 Рашэнне гэтай праблемы з'яўляецца тое, што вы павінны выкарыстоўваць сістэму PDO, 1005 01:06:49,300 --> 01:06:51,360 Гэта азначае, што вы павінны выкарыстоўваць пытальныя знакі, 1006 01:06:51,360 --> 01:06:53,350 што і вы, хлопцы, якія выкарыстоўваюцца ў PSet 7, 1007 01:06:53,350 --> 01:06:57,620 дзе вы збіраецеся выкарыстоўваць пытальнік на месцы, дзе вы хочаце, каб пакласці што-то, 1008 01:06:57,620 --> 01:07:01,430 і тады вы будзеце мець коску, а затым вы будзеце мець пасля гэтага, 1009 01:07:01,430 --> 01:07:07,610 пасля радка, розныя зменныя, якія вы хочаце замяніць у ваш знак пытання. 1010 01:07:07,610 --> 01:07:10,330 Такім чынам, вы будзеце адзначыць, што зараз у мяне ёсць гэтыя чырвоныя пытальныя знакі. 1011 01:07:10,330 --> 01:07:15,420 Тады я паклаў зменныя пасля маіх радкоў так што я ведаю, каб замяніць іх у такім парадку пасля гэтага. 1012 01:07:15,420 --> 01:07:18,470 Гэта дазволіць пераканацца, што калі хто-то робіць гэта, як гэта, 1013 01:07:18,470 --> 01:07:24,050 і ў іх ёсць ці 1 = 1 сітуацыю, што будзе пераканацца, 1014 01:07:24,050 --> 01:07:30,490 ў задняй часткі, пераканайцеся, што ён не будзе на самой справе зламаць SQL запыт. 1015 01:07:30,490 --> 01:07:33,660 Добра, такім чынам, што ў значнай ступені ён, віхор PHP і SQL. 1016 01:07:33,660 --> 01:07:41,520 Поспехі ўсім вам, і цяпер, каб штат Арэгон 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Добра ўсё. Час перайсці некаторы наяўнасць 1018 01:07:44,270 --> 01:07:48,840 і некаторыя іншыя рэчы вельмі хутка, таму мы не трымаць вас сёння ўвечары. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Так. JavaScript з'яўляецца своеасаблівай прахалодным рэчы, нібыта. 1020 01:07:56,930 --> 01:07:59,090 Тое, што вы сапраўды павінны ведаць аб JavaScript, гэта накшталт як 1021 01:07:59,090 --> 01:08:03,810 на баку кліента канец таго, што ваш вэб-дадатак будзе рабіць. 1022 01:08:03,810 --> 01:08:08,280 Там-то рэчы, якія вы проста не хочаце, каб клапаціцца аб ўвесь час на боку сервера. 1023 01:08:08,280 --> 01:08:12,880 Усе маленькія ўзаемадзеяння, падкрэсліўшы адно, што робіць нешта знікае. 1024 01:08:12,880 --> 01:08:15,340 Вы сапраўды не хочаце, каб пагаварыць з вашым серверам ўвесь час для гэтага. 1025 01:08:15,340 --> 01:08:18,069 І некаторыя, што нават не ўяўляецца магчымым зрабіць на боку сервера. 1026 01:08:18,069 --> 01:08:21,899 Вось чаму мы павінны нешта накшталт JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Прахладны рэчы пра JavaScript: Ён дынамічна тыпізаваных. 1028 01:08:24,359 --> 01:08:27,149 Што гэта азначае, што ваша праграма не трэба ведаць 1029 01:08:27,149 --> 01:08:30,970 што менавіта зменныя, калі вы пішаце яго. 1030 01:08:30,970 --> 01:08:34,510 Гэта будзе проста свайго роду зразумець гэта, як гэта працуе. 1031 01:08:34,510 --> 01:08:37,520 Іншыя рэчы, якія выдатна аб гэтым: Гэта кучаравыя мова дужкі, 1032 01:08:37,520 --> 01:08:41,359 гэта азначае, што сінтаксіс падобны на З і РНР. 1033 01:08:41,359 --> 01:08:47,050 Вы не павінны рабіць шмат пераробак, калі вы вучыцеся JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Тут у нас ёсць трохі JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Цікавая рэч прама тут у тым, што, калі вы паглядзіце на яе, 1036 01:08:52,560 --> 01:08:56,330 у нас ёсць трохі JavaScript тут жа ў галаве тэгі. 1037 01:08:56,330 --> 01:08:59,479 Што такое робіць, у асноўным проста ўключыць файл JavaScript. 1038 01:08:59,479 --> 01:09:02,260 Гэта адзін са спосабаў вы можаце ўключыць JavaScript ў вашу праграму. 1039 01:09:02,260 --> 01:09:06,910 Тады другі крыху на самай справе некаторыя убудаваныя JavaScript, 1040 01:09:06,910 --> 01:09:10,790 вельмі падобна на убудаванага стылю з CSS, 1041 01:09:10,790 --> 01:09:16,180 і вы проста пісаць код вельмі хутка там. 1042 01:09:16,180 --> 01:09:18,120 JavaScript мае масівы. 1043 01:09:18,120 --> 01:09:20,850 Проста яшчэ адзін спосаб захаваць дадзеныя вакол, вельмі карысна. 1044 01:09:20,850 --> 01:09:25,180 Вельмі прыемна і лёгка сінтаксіс. 1045 01:09:25,180 --> 01:09:29,870 Вы можаце выкарыстоўваць квадратныя дужкі для доступу усё і трымаць усё разам. 1046 01:09:29,870 --> 01:09:35,020 Нішто не занадта складаным. 1047 01:09:35,020 --> 01:09:38,630 Самае выдатнае JavaScript і скрыптовых моў у цэлым 1048 01:09:38,630 --> 01:09:40,920 з'яўляецца тое, што вам не прыйдзецца турбавацца аб памерах масіва. 1049 01:09:40,920 --> 01:09:43,880 Вы можаце проста выкарыстоўваць array.length і адсочваць яго, 1050 01:09:43,880 --> 01:09:46,960 а таксама масіў можа расці або памяншацца, як вам гэта трэба. 1051 01:09:46,960 --> 01:09:49,279 Такім чынам, вы нават не трэба турбавацца аб якіх-небудзь, 1052 01:09:49,279 --> 01:09:57,050 о не, мне трэба вылучыць больш рэчаў, або што-небудзь у гэтым родзе. 1053 01:09:57,050 --> 01:10:00,090 >> Выдатная рэч у тым, што JavaScript мае тое, што называецца аб'екты. 1054 01:10:00,090 --> 01:10:04,800 Гэта аб'ектна-арыентаваная мова, так што ён, па сутнасці, 1055 01:10:04,800 --> 01:10:10,100 спосаб для вас для групоўкі дадзеных разам, чымсьці нагадвае на структуру, 1056 01:10:10,100 --> 01:10:17,280 але вы можаце атрымаць доступ да яго, як структуры або ў сінтаксісе асацыятыўнага масіва. 1057 01:10:17,280 --> 01:10:22,520 Гэта даволі проста, а што вы можаце зрабіць з гэтым група дадзеных разам 1058 01:10:22,520 --> 01:10:24,810 калі ў вас ёсць куча дадзеных, што звязана. 1059 01:10:24,810 --> 01:10:26,850 Таму што гэта ўсё рэчы, якія трэба апісаць аўтамабіль, 1060 01:10:26,850 --> 01:10:29,050 Вам не трэба мець яго ў кучу розных месцах. 1061 01:10:29,050 --> 01:10:35,300 Вы можаце проста прытрымлівацца яго ў 1 аб'екта ў JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Як вы, напэўна, ведаеце, ітэрацыі з'яўляецца адным з тых працаёмкіх задач. 1063 01:10:39,090 --> 01:10:43,810 Вы проста зрабіць гэта на працягу зноў. Вам трэба пагаварыць з кожнага аб'екта ў аўтамабілі, 1064 01:10:43,810 --> 01:10:47,340 ці вам трэба прайсці праз кожны элемент у спісе ці нешта накшталт гэтага. 1065 01:10:47,340 --> 01:10:51,770 Так JavaScript мае, падобна PHP, сінтаксіс Еогеасп. 1066 01:10:51,770 --> 01:10:54,590 У гэтым выпадку, гэта для у цыкле. 1067 01:10:54,590 --> 01:10:57,300 Вы жадаеце выкарыстоўваць гэты толькі на аб'ектах. 1068 01:10:57,300 --> 01:11:01,030 Ёсць некаторыя праблемы, якія ўзнікаюць, калі вы выкарыстоўваеце гэта на масівах. 1069 01:11:01,030 --> 01:11:03,750 Гэта наогул адна з тых рэчаў, аднак, што вельмі карысна, 1070 01:11:03,750 --> 01:11:06,590 таму што вы ліквідаваць шмат накладных выдаткаў 1071 01:11:06,590 --> 01:11:10,270 таму што вы не павінны падцягнуць усё ў вашай аб'екта самастойна. 1072 01:11:10,270 --> 01:11:12,300 Вы не павінны памятаць ўсе ключавыя імёны. 1073 01:11:12,300 --> 01:11:18,270 Вы толькі выгляд атрымаць іх назад у гэтым сінтаксісе. 1074 01:11:18,270 --> 01:11:21,500 У гэтым, з на працягу, вы проста хочаце, каб памятаць 1075 01:11:21,500 --> 01:11:27,180 што вы атрымліваеце зваротна ўсе ключы, у вельмі падобным чынам, каб хэш-табліцы. 1076 01:11:27,180 --> 01:11:30,880 Калі вы памятаеце гэтага, калі вы паклалі б у радку вы маглі б атрымаць нешта з 1077 01:11:30,880 --> 01:11:33,840 што будзе мець значэнне, звязанае з ім. 1078 01:11:33,840 --> 01:11:36,360 Што вы можаце зрабіць з гэтым вы можаце сказаць, усё ў парадку, 1079 01:11:36,360 --> 01:11:42,120 Я пасадзілі ў машыну, і я назваў яго Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Такім чынам, вы можаце змясціць у радку Ferrari пазней, і вы можаце атрымаць гэта. 1081 01:11:45,290 --> 01:11:50,000 І вы можаце зрабіць гэта ў цыкле, з Бо ў пятлі. 1082 01:11:50,000 --> 01:11:53,320 Так што проста больш аб аб'ектах. Галоўнае з гэтага вы павінны памятаць, 1083 01:11:53,320 --> 01:12:00,340 з'яўляецца тое, што вы можаце выкарыстоўваць аб'ектную структуру падобны сінтаксіс, калі вы хочаце з гэтым, 1084 01:12:00,340 --> 01:12:04,590 акрамя таго, калі тое, што ты збіраешся выкарыстоўваць у выглядзе радка не з'яўляецца дапушчальным імем зменнай. 1085 01:12:04,590 --> 01:12:07,650 Так што, калі вы паглядзіце на што, у нас ёсць ключ з прабеламі. 1086 01:12:07,650 --> 01:12:12,500 Ну, калі б вы былі паставіць object.key, прастору, з, прастору, прасторы, 1087 01:12:12,500 --> 01:12:15,320 што проста не мела б сэнсу сінтаксічна. 1088 01:12:15,320 --> 01:12:22,730 Такім чынам, вы толькі можаце зрабіць гэта з такога роду сінтаксісу кранштэйна. 1089 01:12:22,730 --> 01:12:26,520 >> Акрамя таго, JavaScript вельмі Сфера-мудра PHP. 1090 01:12:26,520 --> 01:12:29,050 У вас ёсць 2 шляхі вырашэння сферу. 1091 01:12:29,050 --> 01:12:31,960 Вы не можаце мець вар перад зменнай, 1092 01:12:31,960 --> 01:12:34,060 і гэта проста азначае, што гэта глабальная. 1093 01:12:34,060 --> 01:12:37,050 Вы можаце бачыць гэта з любой кропкі свету. Нават калі вы былі паставіць пра гэта ў калі заява, 1094 01:12:37,050 --> 01:12:42,430 нідзе ў кодзе пасля гэтага пункту, вы маглі бачыць гэтую зменную. 1095 01:12:42,430 --> 01:12:46,730 Іншая справа, тым не менш, з Вар, яна абмежаваная любой функцыі вы цалі 1096 01:12:46,730 --> 01:12:48,870 Калі вы не ў функцыі, ну, гэта глабальная. 1097 01:12:48,870 --> 01:12:53,900 Але калі вы знаходзіцеся ў функцыі гэта відаць толькі ў гэтай функцыі. 1098 01:12:53,900 --> 01:12:56,420 Я не ёсць прыклад, але, так. Гэта адна з тых рэчаў, дзе 1099 01:12:56,420 --> 01:12:59,900 Вы можаце кіраваць тым, што зменныя, якія вы хочаце быць глабальным, 1100 01:12:59,900 --> 01:13:03,810 якія зменныя вы хочаце быць лакальным, але вы павінны быць асцярожныя, пра гэта, 1101 01:13:03,810 --> 01:13:06,890 таму што вы не маеце тып тонкага кантролю збожжа, што вы робіце ў C, 1102 01:13:06,890 --> 01:13:15,820 дзе калі нешта аб'яўляецца ў цыкле, гэта збіраецца застацца ў тым, што цыкл. 1103 01:13:15,820 --> 01:13:18,790 Тое, што мы на самай справе хвалюе, выкарыстоўваючы наяўнасць для маніпулюе вэб-старонак, ці не так? 1104 01:13:18,790 --> 01:13:21,800 Я маю на ўвазе, вось чаму мы робім гэта. 1105 01:13:21,800 --> 01:13:23,840 >> Каб зрабіць гэта, мы выкарыстоўваем тое, што называецца DOM. 1106 01:13:23,840 --> 01:13:25,850 Аб'ектнай мадэлі дакумента. 1107 01:13:25,850 --> 01:13:29,430 Увогуле, што яна робіць гэта займае ўвесь ваш HTML 1108 01:13:29,430 --> 01:13:34,110 і мадэлі яго ў кучу аб'ектаў, якія ўкладзеныя сябар у сябра. 1109 01:13:34,110 --> 01:13:37,080 Вы пачынаеце з чымсьці накшталт гэтага. 1110 01:13:37,080 --> 01:13:44,770 У вас ёсць, справа для мяне, куча кода, што там накшталт - 1111 01:13:44,770 --> 01:13:46,640 Можна падумаць, што было б вельмі цяжка маніпуляваць, 1112 01:13:46,640 --> 01:13:48,700 таму што вы б разбору праз кучу тэксту 1113 01:13:48,700 --> 01:13:52,080 і таго, каб сабраць акрамя рэчы. А што, калі ён не быў правільна адфарматаваны? 1114 01:13:52,080 --> 01:13:54,880 Дрэнныя рэчы здарыцца. 1115 01:13:54,880 --> 01:13:58,140 Так JavaScript клапоціцца аб гэтым для вас, і вы атрымаеце добры структуру дадзеных, 1116 01:13:58,140 --> 01:14:01,390 так, як на мой левы, дзе вы проста мець дакумент, 1117 01:14:01,390 --> 01:14:03,530 і ўнутры, што ў вас ёсць тое, што называецца HTML, 1118 01:14:03,530 --> 01:14:05,600 і ўнутры, што ў вас ёсць галава і цела, 1119 01:14:05,600 --> 01:14:08,420 і ўнутры гэтай галавы ў вас ёсць назва, і гэтак далей, і гэтак далей, і гэтак далей. 1120 01:14:08,420 --> 01:14:11,810 Гэта спрашчае маніпуляцыі вэб-старонкі, так што гэта проста, 1121 01:14:11,810 --> 01:14:14,190 о, я проста хачу пагаварыць з гэтым аб'ектам. 1122 01:14:14,190 --> 01:14:21,340 Накшталт вельмі падобна вы гаварыць з іншым аб'ектам вы зрабілі самі. 1123 01:14:21,340 --> 01:14:25,980 Як я ўжо сказаў, усё DOM у аб'екце дакумента. 1124 01:14:25,980 --> 01:14:29,290 Альбо гэта проста адно месца, а затым вы можаце пайсці ў ім, каб знайсці рэчы, 1125 01:14:29,290 --> 01:14:33,880 і вы можаце зрабіць гэта - гэта стары стыль робяць гэта, там, 1126 01:14:33,880 --> 01:14:38,130 дзе вы робіце document.getElementById, а затым імя, 1127 01:14:38,130 --> 01:14:42,420 і, як вы, верагодна, можа сказаць, гэта становіцца вельмі грувасткім праз некаторы час. 1128 01:14:42,420 --> 01:14:44,480 Такім чынам, вы, верагодна, не хочуць гэтага рабіць. Вось чаму ў нас ёсць 1129 01:14:44,480 --> 01:14:48,760 Наступнае, што мы збіраемся казаць аб пасля гэтага. 1130 01:14:48,760 --> 01:14:52,510 Галоўнае тут тое, што, усё ў парадку, у вас ёсць усе гэтыя элементы, ці не так? 1131 01:14:52,510 --> 01:14:56,400 Таму, магчыма, я магу змяніць колер нешта пры загрузцы старонкі. 1132 01:14:56,400 --> 01:14:58,380 Ну і што? Што рабіць, калі карыстальнік націскае нешта? 1133 01:14:58,380 --> 01:15:00,540 Я хачу, каб зрабіць нешта цікавае, калі ён націскае нешта. 1134 01:15:00,540 --> 01:15:02,600 Вось чаму ў нас ёсць падзеі. 1135 01:15:02,600 --> 01:15:05,330 Вы можаце, у прынцыпе, знайсці любы элемент у вашым DOM, 1136 01:15:05,330 --> 01:15:08,560 а потым кажуць, эй. Калі гэта загружае або хтосьці націскае на яе, 1137 01:15:08,560 --> 01:15:11,410 ці калі яны мышы над ім, нешта зрабіць з ім. 1138 01:15:11,410 --> 01:15:15,330 І што ў вас ёсць, у вас ёсць функцыі, якія апрацоўваюць гэта для вас. 1139 01:15:15,330 --> 01:15:17,980 Гэтыя функцыі апрацоўшчыкі падзей. 1140 01:15:17,980 --> 01:15:20,440 Што they're - гэта ўсяго толькі мудрагелісты спосаб сказаць, 1141 01:15:20,440 --> 01:15:23,500 гэтая функцыя выконваецца толькі пры ўзнікненні гэтай падзеі. 1142 01:15:23,500 --> 01:15:28,070 Так ён апрацоўвае падзея, якое ўзнікае. 1143 01:15:28,070 --> 01:15:30,810 Гэта, як вы б выкласці апрацоўшчык падзей. 1144 01:15:30,810 --> 01:15:34,750 У мяне ёсць кнопкі, а пры націску яе, яна выбухае. 1145 01:15:34,750 --> 01:15:40,560 Так што не націснуць кнопку. 1146 01:15:40,560 --> 01:15:42,910 Гэта адзін са спосабаў набліжэння да яго, ці не так? 1147 01:15:42,910 --> 01:15:46,430 У вас ёсць кнопка тэг, і па пстрычцы ў вас ёсць радок, якая кажа, 1148 01:15:46,430 --> 01:15:50,460 о, дарэчы, я раблю гэта які выбухае рэч для мяне. 1149 01:15:50,460 --> 01:15:53,990 У адваротным выпадку, гэта проста, як звычайны кнопку вы толькі што зрабілі. 1150 01:15:53,990 --> 01:15:56,550 Вы таксама можаце зрабіць гэта па-іншаму, 1151 01:15:56,550 --> 01:16:02,770 , Захопліваючы элемент DOM, але мы пакінем, што пасля таго як мы кажам пра JQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Гэта бібліятэка, якая з'яўляецца крос-браузерный. 1153 01:16:07,580 --> 01:16:09,580 Вы можаце выкарыстоўваць яго ў значнай ступені чаго-небудзь. 1154 01:16:09,580 --> 01:16:12,090 І гэта як раз дае шмат інструментаў для працы з. 1155 01:16:12,090 --> 01:16:15,850 Паколькі JavaScript, у той час як магутны, не ўсе інструменты, неабходныя 1156 01:16:15,850 --> 01:16:20,550 са скрынкі, каб сапраўды вырашаць вэб-дадатак, вы можаце зрабіць. 1157 01:16:20,550 --> 01:16:24,650 Так што спрашчае шмат рэчаў, дае вам шмат функцый 1158 01:16:24,650 --> 01:16:28,760 з скрынкі, якія вы звычайна прыходзіцца пісаць самастойна, зноў і зноў і зноў. 1159 01:16:28,760 --> 01:16:31,600 І гэтак жа, робіць рэчы вельмі проста. 1160 01:16:31,600 --> 01:16:35,780 У вас таксама ёсць селектары, якія дазваляюць вывезці ўсё тыя элементы, 1161 01:16:35,780 --> 01:16:42,800 ад вашага DOM значна больш проста, замест таго, каб выкарыстоўваць гэтыя вельмі доўгія выклікі функцый. 1162 01:16:42,800 --> 01:16:46,630 Яшчэ на гэтых селектараў. У вас ёсць, там вы, скажам, 1163 01:16:46,630 --> 01:16:49,800 Я хачу атрымаць элемент з ID "рок". 1164 01:16:49,800 --> 01:16:56,450 Ну, у JQuery, гэта проста $, а затым радок, якая мае фунт, а затым "рок". 1165 01:16:56,450 --> 01:17:01,960 Гэта вельмі проста і нашмат хутчэй, чым традыцыйным JavaScript шляхі вырашэння гэтай праблемы. 1166 01:17:01,960 --> 01:17:06,120 А ў вас ёсць падобныя рэчы для класаў і тыпаў элементаў. 1167 01:17:06,120 --> 01:17:08,140 JQuery - адзін з цікавых функцый, што вы можаце роду сціскаць 1168 01:17:08,140 --> 01:17:14,350 ўніз запыты, што Вы на вашым DOM вельмі, вельмі хутка. 1169 01:17:14,350 --> 01:17:18,980 Цяпер мы вярнуліся да апрацоўкі падзей, і гэта, як вы б справіцца адна падзея ў JQuery. 1170 01:17:18,980 --> 01:17:23,090 Так што мы збіраемся тут мы кажам, усё ў парадку. У мяне ёсць тэг сцэнара, ці не так? 1171 01:17:23,090 --> 01:17:25,400 Таму ў мяне ёсць гэты инлайн JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Тое, што мы збіраемся зрабіць, гэта мы збіраемся сказаць, усё ў парадку. 1173 01:17:27,750 --> 01:17:30,860 Калі дакумент будзе гатовы, а гэта значыць, гэта быў загружаны дакумент, 1174 01:17:30,860 --> 01:17:34,660 мы збіраемся ісці да гэтай функцыі, і мы збіраемся сказаць, усё ў парадку, 1175 01:17:34,660 --> 01:17:37,060 гэтая функцыя на самай справе рабіць нешта яшчэ. 1176 01:17:37,060 --> 01:17:42,320 Гэта ў асноўным кажуць, усё ў парадку, дай мне элемент з ID "MyID." 1177 01:17:42,320 --> 01:17:47,960 А потым даць гэта апрацоўшчык функцыі, якая выконвае, калі вы пстрыкніце па ім. 1178 01:17:47,960 --> 01:17:49,820 У асноўным тое, што гэта робіць, ён кажа, усё ў парадку. 1179 01:17:49,820 --> 01:17:52,630 Старонка загружаецца, таму я збіраюся ў, знайсці гэты элемент, 1180 01:17:52,630 --> 01:17:56,420 даць яму гэты апрацоўшчык падзей, і гэта ў асноўным настройвае старонкі для вас. 1181 01:17:56,420 --> 01:18:00,520 І гэта, як вы хочаце думаць аб апрацоўцы падзей. 1182 01:18:00,520 --> 01:18:06,310 Вы проста хочаце, каб думаць, усё ў парадку, калі нешта адбываецца, тое, што я хачу каб гэта адбылося? 1183 01:18:06,310 --> 01:18:10,520 Вы ж не хочаце, каб думаць пра, добра, мне трэба, каб пераканацца, гэтая рэч перамовы на гэтую рэч, 1184 01:18:10,520 --> 01:18:14,660 гэтая рэч бла-бла-бла, таму што вы проста хочаце пагаварыць рэч з пункту гледжання падзей. 1185 01:18:14,660 --> 01:18:17,650 Калі гэта адбываецца, гэта адбываецца. Калі гэта адбываецца, што адбываецца. 1186 01:18:17,650 --> 01:18:20,240 І калі падзеі выклікаюць іншыя рэчы, гэта выдатна. 1187 01:18:20,240 --> 01:18:22,150 Але вы не хочаце, каб паспрабаваць зрабіць складаны код 1188 01:18:22,150 --> 01:18:24,130 дзе вы выклікаўшы некалькі рэчаў адначасова, 1189 01:18:24,130 --> 01:18:28,860 таму што вы толькі збіраецеся даць сабе галаўны боль. 1190 01:18:28,860 --> 01:18:32,340 >> Добра. Цяпер мы можам атрымаць нашу старонку для апрацоўкі падзей, 1191 01:18:32,340 --> 01:18:35,640 але, скажам, мой карыстальнік націскае кнопку. 1192 01:18:35,640 --> 01:18:38,040 Што рабіць, калі я хачу адправіць гэтую просьбу назад на сервер, 1193 01:18:38,040 --> 01:18:41,100 але я не хачу, каб перазагрузіць старонку, таму што неабходнасці перазагрузкі новую старонку 1194 01:18:41,100 --> 01:18:44,390 кожны раз, калі становіцца збольшага стомна, і навошта ён мне патрэбен 1195 01:18:44,390 --> 01:18:47,430 знесці загаловак зноў, а ў ніжнім зноў, 1196 01:18:47,430 --> 01:18:49,670 і ўсе элементы старонкі зноў 1197 01:18:49,670 --> 01:18:53,180 проста каб абнавіць прывітанне або час? 1198 01:18:53,180 --> 01:18:55,290 Дык вось чаму ў нас ёсць нешта накшталт Ajax. 1199 01:18:55,290 --> 01:18:59,150 Што мы можам зрабіць тут з Ajax з'яўляецца, можна сказаць, усё ў парадку, 1200 01:18:59,150 --> 01:19:01,290 Я хачу адправіць некаторыя дадзеныя на сервер, 1201 01:19:01,290 --> 01:19:04,010 і я хачу, каб атрымаць адказ назад, каб я мог абнаўляць сваю старонку, 1202 01:19:04,010 --> 01:19:12,120 ці можа быць проста рабіць некаторыя алгарытмічныя вылічэнні, што не абавязкова паказваць усё, каб карыстальніку. 1203 01:19:12,120 --> 01:19:15,500 Што трэба для гэтага? Ну, вам патрэбен URL вам трэба пагаварыць. 1204 01:19:15,500 --> 01:19:18,650 Ваш сервер не можа проста чароўна слухаць з ніадкуль. 1205 01:19:18,650 --> 01:19:21,960 Вы павінны мець пэўнае месца вы пасылаеце гэтыя дадзеныя. 1206 01:19:21,960 --> 01:19:26,240 І вы таксама павінны некаторыя дадзеныя для адпраўкі, або, можа быць, гэта без дадзеных запытаў. 1207 01:19:26,240 --> 01:19:31,380 Вы проста хочаце, каб праверыць сувязь назад на сервер і сказаць, эй, я жывы, ці нешта накшталт гэтага. 1208 01:19:31,380 --> 01:19:35,150 А потым вы хочаце функцыю, якая ў асноўным апрацоўвае поспехам. 1209 01:19:35,150 --> 01:19:38,250 Дапусцім, вы вярнуцца некаторую інфармацыю з вашага сервера, 1210 01:19:38,250 --> 01:19:42,960 і вы хочаце змяніць пасаду карыстальніка на сваёй старонцы. 1211 01:19:42,960 --> 01:19:44,930 Так вы атрымаеце інфармацыю назад, 1212 01:19:44,930 --> 01:19:48,860 і будзе вы націскаеце, што на экране. 1213 01:19:48,860 --> 01:19:51,170 Што адбываецца, з'яўляецца, калі старонка гатовая, 1214 01:19:51,170 --> 01:19:56,500 Вы ствараеце на функцыі клік для гэтай кнопкі пад назвай зазывала. 1215 01:19:56,500 --> 01:19:58,810 Што гэта, то робіць гэта, калі, што кнопка націснутая, 1216 01:19:58,810 --> 01:20:03,700 Вы кажаце з greetings.php, вы робіце запыт POST, 1217 01:20:03,700 --> 01:20:07,290 а вы кажаце, эй, дай мне што-небудзь з вашай старонцы. 1218 01:20:07,290 --> 01:20:09,890 Мы сапраўды не трэба, каб апісаць гэта, але greetings.php, 1219 01:20:09,890 --> 01:20:12,480 давайце проста скажам,, аддае "Hello World". 1220 01:20:12,480 --> 01:20:15,650 Такім чынам, мы атрымліваем назад гэты "прывітанне свет", і ў выпадку паспяховага завяршэння гэтага 1221 01:20:15,650 --> 01:20:20,730 мяркуючы ўсё ідзе не так, то мы проста пайсці ў гэты мэтавай месцы 1222 01:20:20,730 --> 01:20:25,720 што мы вызначылі, і мы проста прытрымлівацца адказ там. 1223 01:20:25,720 --> 01:20:31,560 І гэта вельмі просты спосаб стварэння запыту Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Вельмі хутка, Роб роду згадаў пра гэта ўжо, 1225 01:20:34,340 --> 01:20:37,170 усё можа пайсці не так, дрэнныя рэчы могуць здарыцца, 1226 01:20:37,170 --> 01:20:42,660 так што вы хочаце, каб азнаёміцца ​​з гэтымі кодамі HTTP рэагавання. 1227 01:20:42,660 --> 01:20:46,030 Што гэта проста, як, 200, усё прайшло добра. 1228 01:20:46,030 --> 01:20:48,670 Нешта яшчэ, дрэнныя рэчы адбылося. 1229 01:20:48,670 --> 01:20:50,790 Гэта ўвогуле, што вы хочаце запомніць. 1230 01:20:50,790 --> 01:20:53,440 Але прыемна ведаць, усё гэта. 1231 01:20:53,440 --> 01:20:55,970 І, нарэшце, як толькі мы прайшлі праз усё гэта, 1232 01:20:55,970 --> 01:20:58,680 мы павінны казаць вельмі хутка аб дызайне, 1233 01:20:58,680 --> 01:21:00,620 і тады мы зможам дазволіць вам усім сысьці. 1234 01:21:00,620 --> 01:21:03,410 Дызайн. Тое, што вы хочаце запомніць. 1235 01:21:03,410 --> 01:21:06,950 Задайце сабе гэтыя пытанні: Хто будзе выкарыстоўваць гэта? 1236 01:21:06,950 --> 01:21:09,580 Што яны будуць выкарыстоўваць яго для? Што мае карыстальнікі клапоцяцца аб? 1237 01:21:09,580 --> 01:21:11,750 Што яны не клапоцяцца аб? 1238 01:21:11,750 --> 01:21:14,500 Вы проста не хочаце зрабіць дадатак, і хай ён проста расці 1239 01:21:14,500 --> 01:21:18,270 і стаць гэты гігант, усёпаглынальнай, што вы не можаце нават скончыць. 1240 01:21:18,270 --> 01:21:23,900 Вы хочаце мець дыскрэтныя мэты і планы і рэчы, якія вы хочаце звярнуцца. 1241 01:21:23,900 --> 01:21:29,000 Зрабіць гэта лёгка. Усё гэта кажа, у асноўным, 1242 01:21:29,000 --> 01:21:34,950 зрабіць яго лёгкім для карыстальніка, каб выкарыстоўваць яго, не зрабіць яго гіганцкі згустак тэксту як гэты слайд, уласна. 1243 01:21:34,950 --> 01:21:38,020 Вы проста хочаце, каб ён нешта дзе гэта вельмі лёгка для кагосьці ісці ў 1244 01:21:38,020 --> 01:21:40,800 і рабіць тое, што яны хочуць зрабіць. 1245 01:21:40,800 --> 01:21:42,920 Вы ж не хочаце, каб яны мелі арыентавацца 5 старонак 1246 01:21:42,920 --> 01:21:45,460 каб дабрацца да вашага прэм'ер-функцыі вашага сайта. 1247 01:21:45,460 --> 01:21:49,290 Калі Google было 5 старонак, перш чым вы маглі нават шукаць нешта, 1248 01:21:49,290 --> 01:21:53,080 ніхто не будзе выкарыстоўваць яго. 1249 01:21:53,080 --> 01:21:55,890 І, нарэшце, папера прататып, фокус-група. 1250 01:21:55,890 --> 01:21:59,220 Ёсць добры дызайн і практыкі тэставання. 1251 01:21:59,220 --> 01:22:00,730 Проста таму, што вы думаеце, ён працуе для вас, 1252 01:22:00,730 --> 01:22:04,860 не азначае, хто-то яшчэ думае, што гэта працуе. 1253 01:22:04,860 --> 01:22:14,490 Але так, вось яно што. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]