[00:00:02] [Гуляе музыка] Ханна: Прывітанне, усім. Дзякуй вам, хлопцы, што прыйшлі з у агіднай надвор'і для віктарыны аднаго агляд сесіі. Як вы, хлопцы, ведаеце, віктарыны адзін гэта асяроддзе. Так што мы збіраемся ісці праз кучу пытанняў. DAVIN: Гэй, я магу сказаць, нешта рэальнае хутка? Ханна: Так, Дэвин збіраецца сказаць нешта рэальнае хуткі. DAVIN: Выбачайце. Толькі рэальныя хутка, калі ў вас ёсць пытанні аб віктарыне, вы можаце выходзіць у інтэрнэт. Перайсці да 2014 віктарыны адзін, пра віктарыне. Ён атрымаў Лагістыка Аб куды ісці, калі ісці. Калі вы адначасова паступіў, мы будзе мець віктарыну макіяж ў 5:30. Ці, калі вы даслаў мне пытанне, ў вас ёсць іншае пытанне. Але 05:30 з'яўляецца макіяж Час на сераду. Але калі ў вас ёсць пытанні, агульныя пытанні, онлайн мае ўсю лагістыку. Таму праверыць там першым. [00:00:47] Ханна: Awesome. Дык вось вялікі спіс тым што мы будзем ісці да сённяшняга дня. Я збіраюся, каб ахапіць усе З матэрыял, які з'яўляецца, што першы слупок. Так C матэрыял, які мы пакрытыя пасля віктарыны нулявы. Пачынаючы са звязаным спісам, якая ўключае ў сябе паказальнікі. [00:01:05] Добра, так што мы ўбачылі ў гэтым у апошнім аглядзе сесіі так што я збіраюся прайсці праз гэта крыху хутчэй. Проста падніміце руку, калі вы хочаце, каб я запаволіць або рашэння што-то далей. Але мы выкарыстоўваем звязаныя спісы, таму што мы пачалі ў C з масівамі. І масівы з'яўляюцца вялікімі, але Праблема ў тым, што яны маюць фіксаваны памер. Звязаныя спісы дазваляюць ствараць дынамічна памеру структуры дадзеных. [00:01:28] І мы маем нашы асноўныя аперацыі, ўстаўляць, выдаляць і шукаць. І мы можам зрабіць ўстаўку ў у горшым выпадку пастаянная часу калі мы проста пакласці яго ў самым пачатку. Выдаленне і шукаць, горшае Справа вялікі ой часу н. Такім чынам, яшчэ раз, проста каб перавярнуць з дапамогай гэтых фатаграфій, Я ведаю, што мы бачылі гэтыя ў мінулы раз, але мы хочаце, каб адсочваць нашага звязанага спісу Адсочваючы Кіраўнік нашай звязанага спісу. Таму што мы ведаем, што Кожны з нашых вузлоў проста будзе паказваць на наступны вузел у нашым звязанага спісу. [00:01:58] Дык вось, як мы адсочваем. Нават калі гэта не бесперапынныя кавалкі памяці, мы можам знайсці іх, проста пасля розных стрэл. Вось наша структура для звязанага спісу вузлоў. Мы бачылі ў апошні раз. У нас ёсць структура вузла. І ён мае два ўласцівасці. Па-першае, фактычная Значэнне, якое мы хочам захаваць. У гэтым выпадку, гэта цэлы лік. Гэта можа быць радок, гэта можа быць знак, што вы хочаце. І потым, мы павінны адсочваць наступны вузел у нашым звязанага спісу. Так што будзе паказальнік на наступны вузел. Калі вы проста робіце пошук, як я ўжо казаў, Вы павінны былі б прытрымлівацца вашыя стрэлы ўніз. Устаўка, вы б адсочваць дзе астатняя частка вашага спісу. І вы хочаце, каб перанакіраваць галаву каб паказаць на нашу новага элемента, які у гэтым выпадку адзін, а затым адзін пакажа у астатняй частцы звязанага спісу. Такім чынам, яшчэ раз, я ведаю, што гэта крыху Трохі паўтарэння ад віктарыне нулявы. Такім чынам, мы павінны быць вельмі асцярожныя, аб парадку, у якім мы зрабіць гэтыя pointings таму мы не губляць задняй частцы спісу. OK, любыя пытанні з толькі аднаразова звязаныя спісы? Высокі, добра, халаднавата. [00:03:06] Так што цяпер, мы збіраемся пайсці на што-то ледзь-ледзь больш складаным, ўдвая звязаныя спісы. Такім чынам, у дадатак да падтрымання дарожка наступнага вузла, мы таксама хочам, каб адсочваць папярэдняга вузла. І гэта дазваляе нам, калі мы у нейкі момант у нашай звязанага спісу, не толькі ісці наперад, але Таксама ітэрацыі ў зваротным кірунку. Таму што, як мы бачылі ў односвязанны спіс, калі б мы былі ў нейкай вузел, і усе раптам, мы вырашылі, на самай справе, я хачу, каб перайсці да Права вузел перада мной, Вы павінны былі б ісці ўсё шлях назад да галавы і перабраць, пакуль вы не знойдзена вузел вы шукалі. [00:03:35] Так што гэта робіць рэчы трохі прасцей, так як мы спрабуюць перабраць праз наш звязанага спісу. Але гэта патрабуе ад нас, каб сачыць за адным больш паказальнік, так як яшчэ адзін вузел зорка. Добра, так вось пачынаецца самае цікавае. Мы збіраемся займацца рэалізацыі выдаліць для двойчы звязаных спісаў. Так што гэта тое, што гэта цалкам справядлівая гульня для віктарыны. Ён паказаў на апошніх віктарыны. Так, безумоўна, будзе падрыхтаваны кадзіраваць трохі ў З Не забывайце, што пры ўсіх гэта весела PHP і JavaScript, мы па-ранейшаму павінны памятаць, зрабіць C. Так асвяжыць, што калі вы адчуваеце сябе іржавы. [00:04:12] Добра, давайце паглядзім, калі мы можам гэта зрабіць. Добра, халаднавата. Такім чынам, мы збіраемся, каб паспрабаваць рэдагаваць права тут, і, спадзяюся, гэта пойдзе, як запланавана. Добра, хто-небудзь хоча даць мне Прапанову аб тым, як я павінен пачаць? Адзінае, што я, рашэнняў з'яўляецца тое, што я ўжо былі вызначаны структура, адзін я паказаў на апошняй старонцы, на апошнім слайдзе. І я захоўваю галоўку майго звязаны Спіс у нейкі паказальнік называецца спіс. Хто-небудзь хоча Ці, каб мяне пачалі? [00:04:42] АЎДЫТОРЫЯ: Ці можаце вы стварыць новы вузел патэлефанаваць па спісе? [00:04:45] Ханна: Awesome, так мы збіраемся стварыць Новы вузел поўзаць па спісе. Мне гэта падабаецца. Я проста назваць яго паказальнік, калі гэта нармальна. І дзе яна павінна першапачаткова пачаць? [00:04:57] АЎДЫТОРЫЯ: Верагодна, на галава спісу. Ханна: прыгожы. Мы хочам пачаць з галавы, якая Я сказаў будзе захоўвацца ў спісе. Высокі. Усё ідзе нармальна. І цяпер, наша мэта заключаецца ў ітэрацыі па спісе пакуль мы не знойдзем вузел з Значэнне N, што мы хочам выдаліць. ОК? [00:05:13] Так што цяпер гэта частка, дзе мы хочам перабраць. Можа хто-небудзь прапанаваць спосаб перабору? [00:05:19] АЎДЫТОРЫЯ: пятля. [00:05:20] Ханна: пятля. Я люблю гэта. У прыватнасці, мы можам паспрабаваць час цыклу. Добра, і мы ведаем, што мы дасягнулі канец нашага спісу, калі і што? АЎДЫТОРЫЯ: Калі паказальнік NULL. Ханна: Калі паказальнік NULL. Прыгожая, я люблю яго. Добра, халаднавата. Так прабачце, калі мой абмяжоўвае дужка выгляд падзення з экрана. Мы прывезлі яго назад. Добра, халаднавата. Што далей? [00:05:48] Такім чынам, мы ведаем, што мы хочам, каб выдаліць вузел, які мае значэнне N. Так давайце знойдзем выпадку, калі мы на самай справе знайсці наш вузел. Так як жа я магу праверыць гэта? Я проста кажу, калі паказальнік, а затым, калі я хачу, каб атрымаць значэнне з паказальніка, Я проста стрэлка N, роўная п, параметр што мы далі гэтай функцыі, вузел, які мы хочам на самой справе выдаліць. Ёсць пытанні Аж да тут? Добра. ОК, так што зараз давайце намалюем хуткую карціну на борце для таго, каб візуалізаваць гэта. [00:06:24] Такім чынам, давайце казаць ёсць наша любімая вузел. І гэта мае значэнне, я проста скажу, чатыры. І гэта паказвае на наступны вузел у нашым звязанага спісу. І няма нічога перад ім. Такім чынам, мы маем наш папярэдні паказваючы на ​​няма. У гэтым выпадку, мы паказваем таму. ОК, проста стварэння маёй Звязаны спіс тут. І ў нас ёсць спіс, які паказвае да гэтай структуры з самага пачатку. Я намалюю яшчэ адзін для Дзеля паўнаты. ОК. Я пакажу яго наперад. І я буду казаць, што адзін назад. Ой, прабачце. Так, атрымаў гэта таму. Зрабіце гэта зноў. Добра, што мы ідзем. Добра, атрымаў яго. Добра, вось наша карціна. [00:07:21] Такім чынам, мы хочам разгледзець два выпадкі. Першы выпадак, калі вузел, мы хочам, каб выдаліць знаходзіцца ў самым пачатку нашага спісу. І потым, другі выпадак, што мы хочам каб разгледзець, калі гэта дзе-небудзь яшчэ. Я разумею, што гэта цалкам брудны малюнак з усім маім пры спробе ачысціць, але, спадзяюся, мы паспрабуем, каб зрабіць гэта ясна з нейкай код. [00:07:40] Такім чынам, давайце разгледзім выпадак, дзе мы знайшлі наш вузел, і гэта на вельмі пачатак нашага звязанага спісу. Хто-небудзь даць мне Прапанова тут адносна таго, што Я павінен зрабіць, каб на самой справе выдаліць наш вузел? Гэта крыху больш складана. ОК? [00:07:56] АЎДЫТОРЫЯ: Вы павінны прыняць Вузел, які будзе прадстаўлены і каб яна паказвала на той, які будзе пасьля яго, і прыняць вузел, будзе пасля яго і зрабіць гэта паказвае на вузел перад ёй. Ханна: Цалкам дакладна. ОК, так што гэта справа where-- мы маем два выпадкі. Мы маем выпадак, калі ў вузел, які мы шукаем з'яўляецца пярэдняя частка спісу. ОК, а затым выпадку, калі вы Апісаная у адваротным выпадку, ці не так? Гэта дзе-то ў спісе. Так вы сказалі, мы павінны шукаць у вузле папярэдняй, і зрабіць папярэдні вузел паказваюць на наступны вузел. Такім чынам, давайце казаць, што мы спрабуе ўзяць з пяці На маю вельмі брудны малюнак тут. Мы хочам, каб пераканацца, што чатыры цяпер паказвае на шэсць. Чацвёркі суседнімі кропкамі да шасці. І шэсць у папярэдніх пунктах да чатырох. Гэта наша мэта тут, ці не так? Гэта тое, што я думаю, што вы проста сказаў там. [00:08:56] Такім чынам, давайце, што першы кавалак. Давайце зробім маюць папярэдняя паказальнік папярэдняга. Так чацвёркі наступны павінен паказваць на што? Менавіта, у гэтым выпадку, шэсць. Такім чынам, мы павінны сказаць, паказальнік, побач. ОК? Добра. Такім чынам, давайце пазбавіцца ад гэтага выродлівага малюнка і паспрабуйце намаляваць некалькі прыемней адзін. У нас ёсць спіс галавы тут. І гэта паказвае на першы вузел у наш звязаны спіс, які мы сказалі чатыры. Вось наш другі вузел, пяць. І наш трэці вузел, шэсць. Проста спрабую зрабіць сапраўды такі жа карціна, толькі крыху больш чыста. Такім чынам, чатыры ДАЛЬШЕ Першапачаткова паказвае на пяць. Five далей кропкі да шасці. Шостага папярэдніх пунктах да пяці. І пяць у папярэдніх пунктах да чатырох. Так нашмат прыемней! Добра, халаднавата. [00:10:04] Так што цяпер, што мы зрабілі толькі тут, гэты радок кода, у якім гаворыцца, паказальнік папярэдняя Далей, так што гэта значыць? Гэта азначае, што калі мы глядзім на пяць, перайсці да папярэдняга вузлу, і гэта побач павінны зараз Справа ў пяць будзе далей. Так па сутнасці, тое, што гэта робіць з'яўляецца тое, што гэта сціранне гэтую стрэлку і робіць яго адразу перайсці на працягу пяці. Гэта зразумела? Я ведаю, што можа быць трохі, такая. Я бачу некаторыя галовы ківае. Гэта добра. Добра, халаднавата. Цяпер, што наступны крок? [00:10:39] Я скід далей. Цяпер, пасля чаго іншыя стрэлкі мне трэба змяніць? Гэта прама тут. Шэсць папярэдняе. Мы не хочам шэсць папярэдняе каб паказаць на пяць больш. Мы хочам, каб яна паказвала на чатыры. Ці мае гэтая карціна мае сэнс? Так што цяпер мы можам на самай справе ўзяць пяць ад'ездзе. Так што давайце гэтую частку. Тое, што я павінен зрабіць перад скінуць шэсць папярэдняе чатырох? Любыя ідэі там? [00:11:14] АЎДЫТОРЫЯ: Free вузел паміж іх, паклаўшы яе на нуль? Ханна: Круто. Вызначана, наша канчатковая мэта будзе вызваліць вузел. Такім чынам, мы можам зрабіць гэта прама тут. Бясплатны паказальнікам. Цалкам дакладна. Але яшчэ да гэтага, давайце просто-- Наша мэта права тут, каб усталяваць паказальнік на наступны папярэдняя роўная паказальнік папярэдняга. Я ведаю, што гэта становіцца зачыненыя. Добра, давайце take-- халаднавата. Можа ўсё бачаць гэтую ніжнюю лінію? Ці гэта супер малюсенькая? [00:11:50] Таму, перш чым выканаць гэтая лінія тут, мы хочам каб пераканацца, што паказальнік на наступны не з'яўляецца нулявым. Таму што, калі паказальнік далей, NULL, якія памылкі я атрымаю, калі я спрабую спасылкі на нулявы паказальнік? АЎДЫТОРЫЯ: віна Seg. Ханна: віна SEG, прыгожы. Такім чынам, калі гэта не NULL, то мы можам скінуць. І ў нас ёсць шэсць цэлых зноў да чатырох. Пытанні аж да гэтага моманту? Так? [00:12:17] АЎДЫТОРЫЯ: У ваш першы калі заява, ці не так значыць мець стрэлку Далей, або [неразборліва]? Ханна: Я меў на ўвазе паказальнік са стрэлкай п. Так у асноўным, тое, што я спрабую зрабіць гэта сказаць, бягучы вузел, што я перабору, бягучы вузел, што Я гляджу на, я захоўваю ў паказальнік. І я хачу ведаць, паказальніка Значэнне, якое ў дадзеным выпадку з'яўляецца п. І я хачу, каб убачыць, з'яўляецца вузел Я шукаю для вузла я імкнуся, каб выдаліць? Дык вось чаму мы тут маем паказальнік п. [00:12:47] АЎДЫТОРЫЯ: Так стрэлка ідзе п, усталяваць значэнне і захаваць яго ў вузел, званы п? [00:12:55] Ханна: Так што гэта, як калі б я якія праходзяць праз гэтую звязанага спісу і, паказваючы на ​​пяць. Калі я хачу, каб атрымаць гэта значэнне, калі Я хачу, каб гэты лік, 5, Я павінен зрабіць паказальнік са стрэлкай п. Прахладны? Так. [00:13:07] АЎДЫТОРЫЯ: п назву зменнай? Ханна: Так. Так што, калі мы фліп назад адзін слайд, п назву ад кошту ўнутры вузел у нашым звязанага спісу. І я ведаю, што ён можа атрымаць крыху крыху заблытаным, таму што мы таксама заклікаюць рэч што мы хочам, каб выдаліць N. Дык вось дзе, што адна лінія ідзе ад. Так? [00:13:27] Зала: А ў вас ёсць [Неразборліва], як яны працуюць? Паказальнік [неразборліва]? [00:13:35] Ханна: Вядома. Вы кажаце about--, якая лінія? АЎДЫТОРЫЯ: апошняя радок [неразборліва]. [00:13:44] Ханна: Вядома, добра. Такім чынам, давайце паглядзім на карціну ў для таго, каб паспрабаваць растлумачыць гэта. Мне вельмі шкада, для камера, пытанне было мы можам растлумачыць паказальнік стрэлку побач паказальнік папярэдняга. Такім чынам, давайце казаць, што мы знаходзімся ў пяці і наша мэта складаецца ў тым, каб выдаліць пяць. Так-паказальнік, які з іх тры вузла, ці дае гэта нам? Гэта падводзіць нас да шостага вузла, ці не так? [00:14:10] ОК, так што зараз мы просім для шасці папярэдняе. ОК? І мы скіду гэта роўным чатыром, якое адбылося ў пяць папярэдняе. Я ведаю, гэта супер цяжка адсочваць. Я вельмі рэкамендую вам маляваць калі вы атрымліваеце такое пытанне. Так? [00:14:30] Залы: прычына таго, што мы не маем [неразборліва]? [00:14:37] Ханна: Цалкам дакладна. Так пытанне было, чаму мы не павінны правяраць тут? Чаму б нам не трэба, каб праверыць, што паказальнік папярэдняя ня роўная нулю? І гэта таму, што мы ўжо выдзелілі выпадку, калі паказальніка у самым пачатку. Вельмі добрае пытанне. Што-небудзь яшчэ пра гэта? Добра, халаднавата. Так давайце скончым яго. Мы ўжо амаль там. [00:14:59] Так што, калі ён знаходзіцца на галаве? Што рабіць, калі замест спрабуеце выдаліць пяць, мы на самай справе хацелі, каб выдаліць чатыры? Што б я павінен рабіць? Ну, я хачу, каб скінуць маю галаву да чаго? Крычы? АЎДЫТОРЫЯ: адзін пасля яго. Ханна: прыгожы. Такім чынам, мы хочам пералічыць, паказваюць да таго, што наша паказальнік на наступны вузел. Добра. І толькі для паўнаты гадоў дзеля, мы б хочаце праверыць, што да таго часу, як наш спіс не з'яўляецца нулявым, так доўга, як наш спіс не з'яўляецца пуста, то мы хочам, каб усталяваць наш папярэдні роўная нуля. Пытанне да гэтага часу? Адзін крок ад из--? [00:15:53] АЎДЫТОРЫЯ: было б, калі Спіс не роўная нулю? [00:15:55] Ханна: Так, вы маеце рацыю. Мне вельмі шкада. Гэта спіс не роўная нулю. Высокі. Спрабуючы прывесці гэта ўсё на экране. Гэта свайго роду падзення. Прабачце, хлопцы. І апошняе, але не менш важнае, усё мы павінны зрабіць, гэта вяртанне. ОК. Гэта было шмат забітыя на самай справе хутка. Вазьміце секунду, каб паглядзець гэта зноў. Скажыце мне, калі ў вас ёсць якія-небудзь пытанні. Так? [00:16:20] АЎДЫТОРЫЯ: Калі спіс на галава, then-- чакаць, дулю. [00:16:26] Ханна: Добра, добра. Так што гэта, калі спіс знаходзіцца ў галаве, мы выдаляем яго на тое, мы ўставілі. Так? [00:16:31] АЎДЫТОРЫЯ: Ці можаце вы растлумачыць, першае, калі заяву зноў? Калі паказальнік на п роўная п? Ханна: Вядома. Такім чынам, наша мэта ўсёй гэтай функцыі каб выдаліць вузел, які мае значэнне N. Так што, калі мы знаходзім, як мы пераборы нашым спісе, вузел са значэннем п, што гэта які мы хочам выдаліць. Такім чынам, усе працэдуры выдалення адбываецца ўнутры гэтага вялікага, калі заяву. Ці значыць гэта, мае сэнс? Крута. Так? [00:16:59] АЎДЫТОРЫЯ: Можа быць, вы проста не можаце бачыць гэта, але не неабходна таксама лінію для пракруткі спісу? Ханна: Awesome. Давайце пра гэта не крыху, і мы кінем гэта права ў ніжняй часткі. Можа быць, дошка б ужо быў трохі лепш ідэя. Так як жа я навядзенні паказальніка наперад? [00:17:17] АЎДЫТОРЫЯ: Паказальнік роўная паказальнік плюс адзін. [00:17:20] Ханна: прыгожы. Так што дазваляе нам працягваць перабору. ОК. АЎДЫТОРЫЯ: Ці не было яшчэ? Ханна: Яшчэ раз? АЎДЫТОРЫЯ: Ці не было яшчэ пасля вялікі стары, калі Заяву [неразборліва]? Ханна: Якая частка? Мне шкада. [00:17:38] АЎДЫТОРЫЯ: абыход, ці не павінны быць яшчэ? Ханна: Вы абсалютна можа мець яшчэ. Таму што ў мяне зваротны права там, вы не маеце патрэбу ў іншым месцы. Але так, добры пытанне. Добра, так? АЎДЫТОРЫЯ: Ці можам мы думаць паказальніка што перасоўванне па спісе як якое прымае значэнне кожнага вузла ў спісе? Ці мы павінны думаць пра яго, як Сартаваць па знешніх па адносінах да спісе? [00:18:00] Ханна: Альбо адзін добра, я думаю. Як я сабе гэта Я кажу, добра, я паказальнікам. А гэта я. Гэта мая рука. Я збіраюся паказаць на розныя рэчы, якія я хачу для перабору. Па-першае, я збіраюся адзначыць у главе спісу. І гэта кажа мне, што я збіраецца паказваюць на чатыры. І так я, будучы вонкавым ў адносінах да спісу, Я можа паказваць на кожны з гэтых элементаў. Так што я думаю пра сябе як паказальнік. АЎДЫТОРЫЯ: Такім чынам, калі вы выдаляеце адзін з тых элементаў, Вы выдаляеце сябе, так бы мовіць. Ханна: Цалкам дакладна. Такім чынам, вы выдаліце ​​рэч Вы паказваеце на. Такім чынам, у дадзеным прыкладзе, што мы ўбачылі, дзе мы спрабуеце выдаліць пяць, калі я, паказваючы на ​​пяць, Я хачу выдаліць што я, паказваючы на. Цалкам дакладна. Так? АЎДЫТОРЫЯ: Хіба мы паклапаціліся выпадак, калі п не ў спісе? Ханна: Калі п не ў спісе? Усё, што адбываецца, дык гэта ты будзе перабіраць і перабіраць да канца, і потым, вы ідзяце каб дабрацца да паказальніка якія не маюць юрыдычнай, і тады вы будзеце рабіць. [00:18:48] АЎДЫТОРЫЯ: Так у нас ёсць нічога вяртаць? Ханна: Мы можам. Так, што калі ён вызначаны ў гэтым Функцыя, я проста кажу, што яна вяртае анулявання незалежна. Але вы маглі б нешта як вяртанне цэлы лік, і гэта вярнуцца адмоўны 1, калі ён выходзіць з ладу. Што-нешта накшталт гэтага. Пытанні with-- так? АЎДЫТОРЫЯ: [неразборліва]? Ханна: Выбачайце? АЎДЫТОРЫЯ: [неразборліва]? Ханна: Вядома. Дык вось actual-- як толькі мы зрабіць усю гэтую працу рухаюцца усе гэтыя стрэлкі вакол, уся наша Мэта ў тым, каб пазбавіцца ад вузла што мы шукаем. Такім чынам, у гэтым выпадку, вызваляючы паказальнік, калі я паказваю да пяці, гэта як сціранне гэтай сярэдняй вузла. Гэта свабодная частка паказальніка. Гэта мае сэнс? [00:19:29] АЎДЫТОРЫЯ: Так што нават думаў, Вы зрабілі не [неразборліва]? [00:19:31] Ханна: Так мы меркавалі, у пачатку мы мелі некаторы спіс, які быў already-- яны паклалі гэта разам. Таму для таго, каб пабудаваць гэта Спіс, яны Павінна быць [неразборліва]. Крута. Што-небудзь яшчэ з гэтым? Так? [00:19:46] АЎДЫТОРЫЯ: Што рабіць, калі спіс ня роўная нулявую лінію? [Неразборліва]? Ханна: Прама тут? АЎДЫТОРЫЯ: Так. Ханна: Добра, усё, што я раблю тым, што я толькі пераканаўшыся, што перш, чым я паспрабую пералічыць разыменовывания, перш чым я спрабую атрымаць доступ да папярэдніх, Я хачу, каб пераканацца, што гэта не NULL, таму я не атрымліваю памылку SEG. Крута. [00:20:08] Добра, я ведаю, што гэта было даволі шмат, каб прайсці. Так што гэта слайд будзе даступныя для вас. Такім чынам, вы можаце прайсці праз гэта больш падрабязна. Так? [00:20:17] АЎДЫТОРЫЯ: Чаму спіс [неразборліва]? Ханна: Вядома. Так спіс сапраўды паказвае на гэты элемент прама тут, Першы элемент у спісе. Таму ён не можа мець папярэдні. Так? [00:20:31] АЎДЫТОРЫЯ: сама кропка паказальнік па тым жа адрасе ў памяці? Ці значыць гэта паказваць на тое ж самае адрас у памяці, што і вузел што гэта, паказваючы на? [00:20:40] Ханна: Так, гэта паказвае да гэтага вузла ў памяці. [00:20:43] АЎДЫТОРЫЯ: справа, так калі вы [неразборліва]? [00:20:47] Ханна: У нейкім сэнсе, так. ОК. Добра, давайце рухацца разам з гэтым. І калі ў вас ёсць пытанні, застацца ў рэшце рэшт, і мы можам прайсці праз гэта зноў. Добра, халаднавата. Зараз, мы атрымліваем рухацца далей для хэш-табліцы, спрабуе, і дрэвы, якія вы атрымалі супер знаёмыя з у р-мноства пяць, правапісу. [00:21:04] Так хэш-табліцы проста Масіў з аднаразова звязаных спісаў або двойчы звязаны спіс сыходзіць ад яго. Такім чынам, мы маем свайго роду асацыятыўнага масіва. І як мы ведаем, якія з іх масівы вядра трапіць, мы выкарыстоўваем хэш-функцыі. Такім чынам, у гэтым выпадку, можа хто- думаю, што такое хэш-функцыі будзе толькі на аснове некаторых на ўваходзе і выхадзе? [00:21:31] АЎДЫТОРЫЯ: Ліст лік алфавіту. Ханна: Цалкам дакладна. Гэта проста ставіць іх у алфавітным парадку. Усё, што пачынаецца з Змяшчаецца ў першым вядры. Усе з B змяшчаецца ў другі коўш, гэтак далей, і таму падобнае. Высокі, добра. І хэш-функцыя любога функцыя, якая прымае ў слове і скажу вам, што вядро гэта яна належыць. Такім чынам, якія запісы ў нашай масіў, то ён належыць. [00:21:55] Так што кожны раз даю Функцыя хэшавання слова, Ён павінен сказаць мне тое ж самае размясціць кожны раз. Так што, калі мы выкарыстоўваем хэш-функцыі ад папярэдняга слайда дзе мы сартаванне па Першая літара алфавіту, кожны раз, калі я даю маё Хэш-функцыя "яблык", ён заўсёды павінен вярнуць мне 0. Так што, калі ў мяне ёсць яблык пакласці ў маёй хэш-табліцы, калі я дам "яблык" на мой хэш-функцыі, ён павінен сказаць, ісці пакласці яго ў вядро 0. Калі я шукаю яблык у маёй хэш-табліцы і я кажу, дзе можа яблык у прамым эфіры, вы спытаеце ў хэш-функцыі. І гэта кажа, перайдзіце да вядро 0. Добра? Пытанні з хэш-функцый? Высокі. [00:22:34] Вось некалькі больш падрабязнае тлумачэнне што хэш-функцыя можа выглядаць. Добра. Цяпер, праблема з хэш функцыі знаходзіцца ў ідэальным свеце, мы б толькі адзін што ў кожным вядры. Але на самой справе, ёсць не толькі адно слова які пачынаецца з А. Там не толькі адно слова, якое пачынаецца з B. Такім чынам, У гэтым выпадку, калі раптам атрымаецца "ягада", і мы хочам, каб пакласці яго у нашым хэш-табліцы, і мы бачым, ах, няма, банан ўжо ёсць, тое, што мы будзем рабіць? [00:23:03] Ну, у нас ёсць два варыянты. Першы варыянт лінейнага набліжэння, якія проста азначае, пайсці і знайсці Наступны пустое вядро. Ідзіце і знайдзіце наступную пустую запіс масіва. І проста паставіць "ягада" там. Так што я ведаю, што гэта, як мяркуецца, перайсці з бананам у вядро аднаго. Але проста пакласці яго ў вядро тры, таму што вядро тры пусты. Іншым варыянтам з'яўляецца, верагодна, што вы рэалізуеце у р-набор, дзе вы былі асобныя ланцужкі. Такім чынам, кожны з вашых вядра, кожнага з вашых элементаў масіва, не толькі ўтрымлівае адзін словы, але на самой справе ўтрымлівае паказальнік на спіс слоў. Так што калі ў вас банан ў хэш-табліцы і вы раптам захацелася дадаць ягаду, не праблема. Проста дадайце ягады да канца, ці пачатак, вашага звязанага спісу. Добра, выдатна. Пытанні з хэш сталы, перш чым ісці далей? [00:23:58] Добра. Дрэвы і спробаў. Такім чынам, гэта быў яшчэ адзін варыянт для рэалізацыі слоўнік. Вы маглі б зрабіць спробу. Так што гэта асаблівы від дрэва, паводзіць сябе як хэш-табліцы ў шматузроўневай. Такім чынам, вы будзеце бачыць карцінку дзе ў вас ёсць масіў, які паказвае на кучу масіваў якія паказваюць на кучу масіваў якія паказваюць на кучу масіваў. І мы ўбачым, што менавіта маецца будзе выглядаць у будучыні слайда. І яшчэ, як правіла, дрэва гэта проста нейкая структура дадзеных у якім дадзеныя арганізаваны ў нейкай іерархіі. Дык дзе мы бачылі ў нас ёсць нейкая разумення з верхняга ўзроўню, наступны ўзровень, Наступны ўзровень, і наступны ўзровень. Так што гэта, верагодна, найбольш выразна з некаторымі канкрэтнымі прыкладамі. Дык вось наша дрэва. Вы можаце бачыць, што гэта мае асаблівыя ўзроўні што мы пачынаем з гэтай каранёвага вузла, адзін. І мы можам спусціцца праз нашу дрэва. [00:24:50] Бінарнае дрэва Канкрэтны тып дрэва. І толькі спецыфікацыя для бінарных дрэў з'яўляецца тое, што кожны вузел мае не больш за два лісця. Такім чынам, вы не ўбачыце любы з гэтых вузлоў ёсць тры або чатыры або некаторы іншае лік лісця. А потым яшчэ больш канкрэтна гэта бінарнае дрэва пошуку дзе кожны вузел у левай частцы вузел будзе мець значэнне менш. І кожны значэнне права будзе больш. Так што, калі вы бачыце 44 знаходзіцца ў нашым корані, злева, 11, 22, і 33 ўсё менш нашага кораня. І па праву ўсё Нумары bigger-- 66, 55, і 77. І гэта ўласцівасць справядліва на кожным узроўні дрэва. [00:25:37] Таму, калі мы ідзем ўніз, каб 22, 11 і 33, па-ранейшаму 11 менш, чым 22, і 33 больш, чым 22. І гэта робіць яго лягчэй шукаць таму што, калі мы шукаем колькасці, мы ведаем, якія менавіта філіял прытрымлівацца ўніз. Так што гэта павінна нагадаць вам трохі бінарнага пошуку. Так? [00:25:56] АЎДЫТОРЫЯ: Такім чынам, калі вы знаходзіцеся апісання двайковы, вы сказалі, што не больш за два лісця? Ханна: Мм-хм. АЎДЫТОРЫЯ: Можа ёсць менш? Ханна: Так. Такім чынам, давайце казаць, напрыклад, вы не маюць цотная колькасць рэчаў і вы не маглі запоўніць усе свае лісце, гэта нармальна, калі ў цябе ёсць. ОК? Высокі. Любыя іншыя пытанні на дрэвах? ОК. [00:26:16] Вернемся да нашых спробаў, як я казаў аб трохі раней, як у нас ёсць гэтыя масівы шматузроўневыя. Такім чынам, у гэтым выпадку, мы пачынаем у верхняй частцы. І мы можам прытрымлівацца якой-небудзь дадзенае слова ўніз. Так што давайце казаць, што мы хацелі шукаць Цьюрынга. Мы пачынаем у Т, прытрымлівайцеся за ім ўніз на масіў, які змяшчае U, і прытрымлівацца па ім ўніз, пакуль мы дасягнуць гэтую маленькую дэльту, якая кажа нам, так, вы знайшлі слова. Ясна ў спробах? Нічога ісці туды? Так? АЎДЫТОРЫЯ: Ці ёсць сімвал дэльты павінны займаць прастору ў паспрабаваць? Ханна: Так, так што гэта не абавязкова трэба нават быць дэльта. Але мы павінны нейкім чынам распавесці нашым computer-- прабачце, так што мы ведаем, што TUR не слова. Таму што, скажам, у нас не было Гэтая канцэпцыя дэльта, гэтая канцэпцыя віншаванні, вы знайшлі слова, яна будзе ісці да канца і перабраць T-U-R, а потым сказаць, дзіўны, я знайшоў яго! Гэта павінна быць слова. Але гэта не рэальна. Мы хочам, каб уся Цьюрынга быць слова. Такім чынам, мы павінны нешта ў канец, які кажа, віншую, Вы знайшлі законны слова. АЎДЫТОРЫЯ: Такім чынам, калі ў вас было як 26 літар у алфавіце, вы на самой справе ёсць 27 ключы ў паспрабаваць? [00:27:24] Ханна: Awesome, так. Таму на самай справе, я думаю, што будзе на наступным слайдзе. Та-так! Дзе, калі ў вас ёсць вузел у спробе, вы будзе мець 27 дзяцей замест 26. Ёсць пытанні з гэтым? Так? АЎДЫТОРЫЯ: Чаму спрабуе ўзяць так шмат месца [неразборліва], як вы ідзяце? Чаму гэта лічыцца [неразборліва]? Ханна: Вядома. Давайце вернемся. Пытанне ў тым, чаму з'яўляюцца спробы нашмат больш чымсьці накшталт хэш-табліцу. Такім чынам, для кожнага з гэтых узроўняў, нават калі яны не малюецца тут, Вы павінны мець усе 26 знакаў. І прычына таго, што вы не можаце кажуць, ой, але, як і для Цьюрынга, я не трэба мець якой-небудзь з тых, адно і тое ж на ўзроўні U. Ну, калі раптам вы хочаце дадаць тое, што было, як T-H, Вы павінны былі б мець Магчымасць дадання гэтага слова. Такім чынам, для кожнай літары, Вы будзеце мець мець кучу масівы сыходзіць ад яго. Такім чынам, вы можаце ўбачыць, як гэта было б атрымаць вельмі вялікі, вельмі хутка. Любыя іншыя пытанні? Добра. Так? [00:28:29] АЎДЫТОРЫЯ: Калі спрабуе хутчэй, чым хэш-табліцы? [00:28:33] Ханна: Калі спрабуе хутчэй, чым хэш-табліцы? Так што, калі б у вас была сапраўды дрэнна хэш функцыя. Так што давайце казаць, што я быў бы, вось ваш хэш-функцыя. Незалежна ад таго, якое слова вы дасце мне, я заўсёды збіраецца паставіць яго ў элемент масіва 0. І таму мы ў канчатковым выніку з проста пакласці усё ў адным вялікім доўга звязанага спісу. І так пошук пара б узяць у горшым N Калі гэта ў самым канцы нашага спісу. З спробы, мы проста павінны паўтараць праз літар у слове. Такім чынам, нават калі мы дадалі кучу Чым больш слоў у нашай спробы, яна не будзе прымаць нас больш каб знайсці канкрэтнае слова. [00:29:09] Усё, што мы павінны зрабіць, гэта, па Напрыклад, у гэтым выпадку, Дапусцім, мы шукаем зум, мы б проста перабраць Z-О-О-М, чатыры літары. Так што гэта проста Даўжыня слова маштабавання. Гэта не мае значэння, колькі Чым больш слоў мы ставім у гэтай спробе. Мы заўсёды можам атрымаць яго ў гэтых чатырох крокаў. Высокі. Так? [00:29:32] АЎДЫТОРЫЯ: Так [неразборліва] з'яўляецца масіў, ці не так? [00:29:34] Ханна: Мм-хм. АЎДЫТОРЫЯ: Калі вы Шукаю [неразборліва], Вы павінны былі б прайсці ваш масіў, каб знайсці [неразборліва]? Ханна: Вядома. АЎДЫТОРЫЯ: Хіба гэта не зойме больш часу? Ханна: Калі я іду сказаць, што мая масіва заўсёды будзе, B, C, D, E, F, G, бла-бла-бла, так што калі я заўсёды ведаю, што гэта у сапраўды такі ж парадак, калі я заўсёды ведаю, што гэта ў алфавітным парадку, Я магу толькі сказаць, вываду нумар так і так у алфавіце. Проста скакаць на гэтым месцы. Таму што памятаю, з масівы, мы можам атрымаць доступ любы элемент гэтага масіва ў пастаянным час, калі мы ведаем, дзе мы шукаем. Так? [00:30:09] АЎДЫТОРЫЯ: На папярэдняя слізгаць [неразборліва] 27, але 26 для першай. [00:30:14] Ханна: Выбачайце? [00:30:15] АЎДЫТОРЫЯ: Хіба гэта не першы адзін 0, так што не было б 26? [00:30:18] Ханна: Вядома, таму, калі мы гаворым, 27, гэта збіраюся даць амерыканскія індэксы ад 0 да 26. Але калі вы на самой справе разлічваць тыя з, гэта будзе 27. Добры пытанне. Што-небудзь яшчэ? Так? [00:30:31] АЎДЫТОРЫЯ: Так спрабуе павольней, чым хэш-табліцы? [00:30:34] Ханна: Спрабуе збіраецеся быць у тэорыя, хутчэй, чым хэш-табліцы але займаюць больш памяці. Так? АЎДЫТОРЫЯ: [неразборліва]? [00:30:45] Ханна: Я прашу прабачэння, я не чую цябе. АЎДЫТОРЫЯ: [неразборліва]. Ад 0 да 25 дае вам 26. [00:30:54] Ханна: ад 0 да 25 будзе даць вам 26, ці не так. [00:30:56] АЎДЫТОРЫЯ: І затым [неразборліва]. Ханна Дакладна. Такім чынам, лік мы паказаўшы гэта Колькасць рэчаў у нашай масіва. Так што, калі ў нас ёсць 27, гэта збіраецца даць нам 0 праз 26, што дасць нам месцы для, у дадзеным выпадку, Я не уключаючы апостраф. Так мы атрымліваем ад 0 да 25 з'яўляюцца першыя 26 літар алфавіту, ці ўсе 26 літары алфавіту. А потым, што ў мінулым рэч, на ўваходзе 26, з'яўляецца будзе праверка знак або дэльта. Што-небудзь яшчэ? Высокі. Забыліся маё месца. Добра, халаднавата. [00:31:31] Такім чынам, мы ўжо закранулі гэтага. Але большая кампраміс паміж спробамі і хэш-табліцы з'яўляецца тое, што спрабуе прадставіць у Тэорыя, пастаяннае шукаць раз, але выкарыстаць кучу памяці. Добра, зараз у нас ёсць трохі менш складаныя структуры, і мы будзем рабіць з C, і мы будзем рухацца прама наперад. [00:31:49] Так стэкі, мы бачылі гэта у лекцыі, дзе вы нешта накшталт стэк латкоў дзе Апошняе, што вы паклалі ў стэку будзе каб быць першае, што вы здымаеце. Дык вось тое, што сапраўды вызначае стэк з'яўляецца тое, што апошняе, што вы паклалі на будзе першым што вы здымаеце. І тэрміналогія, якую мы выкарыстоўваем калі мы збіраемся пакласці што-то, калі мы збіраемся нешта дадаць наш стэк, мы называем гэта штурхае. І калі мы нешта ўзяць выключаны, мы называем гэта поппинг. І калі мы збіраемся рэалізаваць стэк, мы павінны быць упэўненыя, каб сачыць за як памер і ёмістасць. Такім чынам, агульная колькасць элементаў мы можам ўтрымліваць і бягучае колькасць элементаў што мы праводзім. [00:32:27] І вельмі падобна, у нас ёсць чэргі. І толькі розніцай, гэта замест таго, каб з стэкаў, мы сказалі апошняе, што мы ставім на гэта першае, што мы здымаем. Так што з чэргамі, Першае, што мы ўкладваем у будзе Першае, што мы вывезці. Так што гэта, як калі б вы на самай справе выстройваюцца ў краме і вас хто-то дапамог, то першы чалавек у лініі павінна быць першым чалавекам, дапамагаў. Так што было б чэргі. [00:32:52] Так што мы павінны адсочваць памер, магутнасць, і кіраўнік, так як мы збіраецца ўзяць ўсіх з пярэдняй з спісу, а не спіну. Пытанні па гэтай нагоды? Любыя C пытанні, якія турбуюць вас? Структуры дадзеных, нічога з гэтага цікавы матэрыял? Добра, крута. Так што я буду перадаць яе Элісан ў перайсці ў больш складанага праграмавання. [00:33:14] Элісан: О, мы ўбачым. Мы ўбачым, наколькі добра я раблю тут. Добра, я збіраюся паспрабаваць і лётаць праз гэты матэрыял, хлопцы. Ханна прайшла вельмі ў Глыбіня на ўсіх яе рэчаў. Я збіраюся паспрабаваць даць Вы Кароткі агляд выбух так што мы можам дабрацца да Дэвин з усімі пацешныя JavaScript і бяспекі рэчы што, магчыма, вы на самой справе хачу даведацца больш. [00:33:33] ОК, як сказала Ханна, калі ў вас ёсць якія-небудзь пытанні, Я занадта хутка, калі ласка, дайце мне ведаць. Я адкажу на пытанні па меры неабходнасці. Такім чынам, каб пачаць, мы збіраемся пачаць з верагодна, адзін з самых першых рэчаў, вы даведаліся з вэб- праграмаванне, дазволу. Так CHMOD, вы, хлопцы, павінен быў быць майстры ў гэтым са ўсёй сеткі праграмавання, які вы маеце рабіў у апошні час. Гэта ў асноўным толькі каманда што змены дазволу або права доступу нашых аб'ектаў файлавай сістэмы. Вядома, на самай справе см іх, калі вы маючы ніякіх праблем з гэтым падчас вашых праблемных набораў, Вы, магчыма, выкарыстоўвалі Ls -l, якая мае даўжыню, каб атрымаць від накшталт як гэта, дзе вы на самой справе убачыць усе дазволу для файла. [00:34:16] І на самай справе, мы проста будзем ісці праз даволі хутка проста вельмі шмат, што кожны з іх азначае. Такім чынам, мы d прама тут, што проста каштуе для каталога. Відавочна, тут мы бачым, RWX, што чытаецца, для запісу і выкананым. Яны таксама могуць быць прадстаўлены ў выглядзе бітаў, якія мы атрымаем у на наступнай старонцы. Такім чынам, кожны трыяда, якую мы бачылі тут, так што гэта тры трыяды. Мы RWX, г нічога не х і г нічога не х для гэтага першага файла. Менавіта гэта агульная структура. [00:34:49] Такім чынам, мы маем дырэкторыю. У нас ёсць група карыстальнікаў з гэтых дазволаў. Некаторыя групы, якая мае такія дазволу, і свет, які мае дазвол. Вы можаце думаць пра іх як пра трыядзе. Вы можаце думаць пра іх як аб трох бітаў. Такім чынам яны могуць утрымліваць значэння дзе-то ад 0 да 7, які з'яўляецца, чаму часам мы павінны былі вы CHMOD 600 замест CHMOD RW заўгодна. Мы ўвойдзем у якасці прыкладу там. Але ў прынцыпе, вы можаце думаць, з іх у якасці альбо проста RWX, ці вы можаце думаць пра іх, як некаторыя нумар, па якім гэта першая тут ўяўляе сабой лік ад 0 і 7, гэтая другая ўяўляе сабой лік ад 0 і 7, а трэці ўяўляе сабой лік ад 0 да 7, ОК? [00:35:38] г мае значэнне 4. мас мае значэнне 2 і Х мае значэнне 1, таму ў гэтым Дазвол тут будзе CHMOD 700. Таму што ў гэтым выпадку тут, гэта кажа, што мы што першы біт ёсць пераварочваць на. Такім чынам, мы маем 4 для чытання. Другі біт пераварочваць на працягу Вт, што 2, так што цяпер у нас ёсць 6. І трэці біт пераварочваць на для х, што 1, так што мы атрымліваем сем. І, вядома, наша група і наш свет, кожны 0. Так што гэта таксама эквівалент CHMOD 700. І я б, безумоўна, паспрабаваць разумець адпаведнасць паміж тым. Я не ўпэўнены, калі гэта мае выйсці на пытанні віктарыны і раней, але было б Пытанне, які я мог бы спытаць. [00:36:18] Проста трохі ісці, нават далей у CHMOD тут, тут гэта вельмі агульнае Структура выкліку CHMOD. Таму, вядома, мы CHMOD тут. Спасылкі, што гэта ставіцца да гэта якія мы даем гэтыя дазволы або якія мы, прымаючы гэтыя Дазволу далей. Такім чынам, мы маем тут у дазволах, як мы далі вам CHMOD плюс х, як мы ўбачым у бліжэйшы час. проста азначае, даць гэтыя канкрэтныя Дазволу для ўсіх. Дайце ім усім. Такім чынам, можна вельмі добра мець U Plus X або G Plus X або O Plus X або некалькі іх. Так што першая частка заўсёды будзе спасылкі. Хто мы даем гэтыя дазволы, або якія мы прымаць іх далей? [00:37:03] Другі аператар. Так што вы, хлопцы, у асноўным звязана з плюсам. Гэта дае дазволу на хто вы даеце ім, у той час як мінус, па логіцы, выдаляе іх. Так што нічога занадта страшнага няма. А потым Рэжымы тое, што мы гаварылі пра з чытаннем, лістом, або выкананне. Так Plus X азначае даць выкананы файл Дазволу для ўсіх. І тады, вядома, на якой пэўнага файла ці каталога. ОК? Усё добра з CHMOD? Не так ужо дрэнна? [00:37:37] Такім чынам, HTML, любы з вас дастаткова стары to-- MySpace ўзрост? Я паслаў гэта маёй секцыі, і літаральна палова людзей паглядзеў на мяне як на вар'ята. І я быў бы, хлопцы, мы не той стары. Давай. Так мова разметкі гіпертэксту, гэта сумленна проста спосаб для вас дэманстраваць пэўныя рэчы ў Інтэрнэце. Так што гэта мова разметкі. Гэта не скрыптовы мову. Там няма ніякай логікі ў ім. Гэта проста змяніць адлюстроўваецца шлях нешта. ОК, так што гэта важна адрозненне, каб зрабіць. Гэта лічыцца мова разметкі, ня скрыптовы мову. [00:38:12] Так вось у нас ёсць HTML-тэгі. На гэтым слайдзе, верагодна, большасць з тыя, што вы павінны быць знаёмыя з і сапраўды зручна. Так, відавочна, мы маем наш HTML тэгаў, якія пазначае, што ўсё ў паміж гэтымі двума будзе HTML. У нас ёсць сувязь, якая Відавочна, дасць вам спасылка на знешні вэб-старонкі. Некаторыя назвы, у нашай галаве тут. І ў нас ёсць наш арганізм H1, які з'яўляецца загалоўкам, так што будзем рабіць гэта добра і смелыя і больш. І потым, у нас ёсць некаторыя р, які з'яўляецца пунктам. Вы, верагодна, варта ведаць, і быць знаёмым з рэчамі як, як вы ўставіць малюнак, з'яўляюцца Ці ёсць іншыя класы загалоўку? Я б, безумоўна, будзе камфортна спраў. Так у іх ёсць большасць тэгаў што вы павінны быць знаёмыя. Але, вядома, як і ўсё ў CS 50, спіс не з'яўляецца вычарпальным. Таму пераканайцеся, што вы чысціце зубы на гэтым. [00:39:08] CSS, так што CSS, калі любы з вас глядзець мой семінар з два тыдні таму, на самай справе проста спосаб укладваць вэб-старонку? Такім чынам, у нас ёсць некаторы мова разметкі. HTML, які клапоціцца толькі з тэксту і дзе гэта можа быць на старонцы. Але CSS сапраўды тое, што робіць яго даволі. Вы маглі б іх у свой HTML файлы, але, як мы пагаворым пазней, Я ўпэўнены, што гэта магло б быць наступны слайд, то з'яўляецца звычайнай практыкай, і на самай справе практыка, што мы сапраўды заахвочваць, для Вас, каб трымаць іх разышліся, калі мы казаць пра MVC і ўвесь парадыгмы. Гэта сапраўды тое, што гэта каналы ст. [00:39:42] Так CSS гэта проста спосаб каб усё выглядала прыгожа. Тое, што тут, як цела і #title і .info, яны называюцца селектары і што што яны робяць, яны выбіраюць канкрэтныя рэчы ў вашым HTML файле і прымяняюцца незалежна стыль, якой бы там ні рэчаў, якія вы хочаце, для гэтага канкрэтнага элемента вашага вэб- старонка. Дык вось, у нас ёсць Колер фону і колер і сямейства шрыфтоў, які з'яўляецца ўжываецца да таго, што ў арганізме. Так што, калі мы глядзелі сюды, гэта не будзе прымяняцца да назвы. Гэта будзе прымяняцца толькі да таго, што у гэтых селектараў цела, добра? [00:40:22] З назвай тут, гэта будзе тое ж самае, колер тэксту быўшы сіні толькі збіраецца ўплываць на тое, што ўнутры тытульныя селектараў. Гэтак жа як і інфармацыя тут, тэкст будзе ружовы, усе Інфармацыя, якая знаходзіцца прама тут. Так што адзінае, што будзе ружовы на гэтай старонцы з'яўляецца дата, панядзелак 17. Лістапад, 2014. Такім чынам, CSS гэта проста спосаб мець больш кантролю over-- так? [00:40:48] Зала: А чаму ў вас ёсць выкарыстоўваць хэш з назвай? [00:40:51] Ханна: Наступны слайд, абяцаю! Мы туды патрапіць. Вось чаму мы павінны выкарыстоўваць хэш. Так селектары прыняць на трох асноўных формы, якія мы кажам вам, хлопцы, а. Я fyou хочаце даведацца больш, ёсць шмат там. Там выдатна дакументацыя CSS. Там гэтае імя тэга, які павінен зрабіць толькі з вашых нармальных тэгаў у HTML. Так h1, P, DIV, H2, гэтыя віды рэчаў. І мы можам толькі назваць тых, як ёсць. Такім чынам, як мы бачым тут з цела, гэта звычайны шаблон. Такім чынам, мы можам проста пакласці цела, калі мы кажам у нашай CSS файл. [00:41:26] З назвай, увесь прычыне мы ёсць гэта хэш мы маем тое, што гэта лічыцца ID. Так ID павінен быць заўсёды унікальным у межах вашай старонцы HTML так што, калі вы спасылаючыся на яго, вы ведаю, што вы толькі са спасылкай да адной канкрэтнай рэчы. Так што ў гэтым выпадку тут, з нашым h1 тут, CS 50 водгук сесія, у нас ёсць ідэнтыфікатар назвы. Таму для таго, каб проста спаслацца на тым, што частка нашага HTML, мы робім назву хэш. Проста канвенцыі, ідэнтыфікатары абазначаюцца з хэш перад імі. Такім жа чынам, мы бачым, Інфармацыя тут клас. І так-клас з CSS з'яўляецца пазначаецца як кропка класа або кропка ўсе, што клас. Так што ў гэтым выпадку тут, гэта інфармацыя. [00:42:10] Такім чынам, я бяру яго назад. Абодва яны былі б ружовы для нашай CSS тут таму што яны абодва маюць клас інфармацыі. А ў нашым CSS файле, мы абазначылі што-небудзь з класам інфармацыі павінен быць ружовым. Ці мае гэта сэнс? Так? [00:42:27] АЎДЫТОРЫЯ: Калі вы павінны былі зрабіць усе ў белым корпусе, а затым вы паспрабуеце зрабіць што-то ўнутры яго сіні, б, што прычынай праблемы? [00:42:34] Ханна: Так CSS з'яўляецца каскадныя табліцы стыляў. Таму, што б гэта да дно будзе мець прыярытэт. Так што, калі вы робіце нешта з целам, і зрабі ўсё белае, а потым на вас змяніць назву ці вы змяніць тэкст ўнутры цела, ён перапісвае гэта. Так што нічога да дно будзе мець прыярытэт. Так? [00:42:56] Аўдыторыя: і ідэнтыфікатараў з'яўляюцца унікальнымі, але класы могуць быць больш? Ханна Дакладна. Так ідэнтыфікатары павінны быць унікальнымі, і класы могуць см столькі рэчаў, як вы хочаце. Любыя іншыя пытанні? Так. [00:43:09] АЎДЫТОРЫЯ: [неразборліва]. Я задаюся пытаннем, ці з'яўляецца што робіць розніцу. Ханна: Я прашу прабачэння, якой было пытанне? АЎДЫТОРЫЯ: Там маленькі "F" і капітал "Ф." Ханна: Так розніца паміж малымі "е" і капіталу "F" Не варта рабіць адрозненне. Такім чынам, "F" будзе 15 так ці інакш. Крута, што-небудзь яшчэ? Усё добра, CSS? Так? [00:43:30] АЎДЫТОРЫЯ: Выбачайце. Можа ў вас ёсць клас і ідэнтыфікатар? [00:43:35] Ханна: Так, можна. Рэчы могуць мець як клас і ідэнтыфікатар. І я настойліва рэкамендую тэставання іх на свой уласны. CSS вы даведаецеся лепш проста шляхам то, вельмі просты вэб-старонкі, складанне некаторыя CSS, і толькі бачачы, як яны ўзаемадзейнічаюць. І вы атрымаеце вельмі добры, інтуітыўнае пачуццё для таго, як гэта працуе. [00:43:56] ОК, усё добра з дапамогай CSS? Вы ўсё збіраецеся зрабіць прыгожыя сайты з дапамогай CSS цяпер. OK, лепшыя практыкі, толькі рэчы, каб мець на ўвазе, рэчы that-- менавіта таму мы док Вы праекціроўшчыка і яшчэ шмат чаго. Так зачыніце ўсе HTML-тэгі. Так што, калі ў вас ёсць адкрыты кузаў, павінна быць блізка цела. Калі ў вас ёсць адкрытыя пункт, павінна быць блізка пункце. Праверце вашу старонку пацвярджае. Вы, хлопцы, павінны быць добра знаёмыя з гэтым з Р-мноства сем з CS 50 фінансаў з W3 валідатары. І, як я ўжо казаў, адзін з нашых вялікіх парадыгмаў аддзяляе свой стыль з дапамогай CSS ад вашай разметкі, якая HTML. І тады, вядома, у нас ёсць гэты вялікі XKCD тут. Ура, камічны! [00:44:38] ОК, TCP / IP. Паміж імі і HTTP, у асноўным яны абодва пратаколу. Такім чынам, вы маглі б проста думаю, з іх у выглядзе набору правілаў якія рэгулююць, як усе рухацца праз Інтэрнэт. Так кіравання каробкай перадач Пратакол, або інтэрнэт-пратаколу, гэта проста спосаб, каб пераканацца, што дадзеныя атрымлівае, дзе яна збіраецца і што мы ведаем, калі мы калі-небудзь адсутных дадзеных. Так што, калі вы, хлопцы, ўспомніце лекцыі пару тыдняў таму з Дэвідам дзе ў нас было чатыры канверты, яны усе былі пранумараваны, як адзін з чатырох, два з чатырох чалавек, трое з чатырох, чатыры чатыры, гэта проста набор правілаў. Мы сказалі, добра, калі мы пасылаючы больш, чым адзін пакет, мы збіраемся нумар гэта з тым, што колькасць гэта і колькі ўсяго, што карыстальнік павінен атрымаць. [00:45:19] І гэта проста кажа той, хто прымае дадзеныя Ці яны атрымалі ўсе або, калі то згубіўся па шляху. І яны павінны прасіць пра гэта зноў. Гэта на самай справе проста набор правілаў. Вось як вы можаце думаць пра гэта, добра? А таксама, гэта паказвае на порт, які вы, хлопцы, can-- я ведаю, падчас лекцыі, яны мелі цэлы спіс портаў. Але мы не павінны іх тут і цяпер. [00:45:41] Так Пратакол перадачы гіпертэксту ёсць, зноў жа, гэта іншае пратакол. Так што гэта яшчэ адзін набор правілаў якія рэгулююць, у гэтым выпадку, як гіпертэксту перададзеныя. Так ён проста дазваляе браўзэры каб пагаварыць з вэб-сервераў. І як мы ўжо казалі тут, гэта як чалавека поціску рукі. Гэта проста спосаб кіраваць як вэб-сервер будзе ўзаемадзейнічаць з вашым браўзэрам. І ў нас ёсць толькі некалькі прыкладаў. У нас ёсць некалькі запытаў тут дзе атрымліваеце метад. У нас ёсць пратакол HTTP 1.1, які з'яўляецца версія пратаколу для нас. І потым, гаспадар, што і мы на самай справе спрабуе атрымаць доступ. І тое, як вы бачыце тут, мы атрымаць адказ з гэтай 200 ОК, як наш код HTTP адказу. У нас ёсць вялікі спіс, я іду каб падцягнуць за адну секунду што вы, хлопцы, павінны быць знаёмыя з. І ў нас ёсць гэты тэкст тыпу кантэнту / HTML, які толькі кажа, які тып дадзеных мы атрымання з сервера, добра? Гэты вузел, і гэты тып кантэнту з'яўляюцца часткай загалоўкаў HTTP. Вы можаце мець мала ці як мала, як неабходна для кантэксце таго, што вы маеце справу з. Часам вы будзеце мець шмат Інфармацыя, якая паступае з вашага сервера. Можа быць, яны з просьбай шмат інфармацыі ад карыстальніка. Гэта залежыць ад кантэксту. Калі вы паглядзіце на КС 50-й даследчай, ёсць нашмат больш на гэта. Але ў нас ёсць шмат, каб атрымаць праз, так што я збіраюся ісці прама наперад, калі гэта нармальна з вамі, хлопцы? Крута. Ўтрымліваць. Я вызначана ёсць, што Увесь спіс of-- так! Я не ведаю, чаму гэта ўсе шляхі сюды. Я думаў, што я літаральна пераехаў гэта, калі я быў sitting-- [00:47:15] DAVIN: Вы хочаце, каб навучыць яго? Ці вы хочаце, каб я вучыў яго? [00:47:17] Аўдыторыя: Я думаў, што мы маглі б Проста паказаць ім пачаць. Я маю на ўвазе, вы можаце пайсці ў іх далей, але я думаў, што гэта было больш сэнсу, так як я толькі што казаў пра HTTP статусаў. Дык вось ўвесь пералік. Я думаю, што гэта адбудзецца ў Дэвин будзе ісці ў іх пазней. Але ёсць цэлы спіс, Папярэдні прагляд густ, каб прыбыць. Добра, што мы збіраемся blow-- гэта адбываецца быць PHP паскораны курс, як ніхто іншы. [00:47:41] Такім чынам, PHP, гіпертэксту препроцессор, гэта рэкурсіўная бэкроним, што азначае, што быў названы нешта іншае. І тады яны былі, як гэта на самай справе не мае сэнсу. Такім чынам, яны толькі што назвалі it-- і гэта было акронім, так што яны проста зрабілі гэта PHP гіпертэксту препроцессор, які проста не мае ніякага сэнсу. Пацешная гісторыя. Гэта мова праграмавання. Так столькі, колькі я падкрэсліваю, што HTML не з'яўляецца мовай праграмавання, гэта мова разметкі, PHP гэта мова праграмавання. Як вы ведаеце, гэта таму што ёсць логіка. Ёсць ўмоўныя. У нас ёсць зменныя, у той час як мы няма ні адной з тых рэчаў, у HTML. [00:48:12] Добра, тады ў нас ёсць гэтая маленькая трохі тут, што гэта, як смак PHP. Так асновы, імёны зменных пачынаюцца са знака даляра. Шмат людзей, як ён. Нагадвае нам грошы. Гэта ўсё выдатна. Мы ўсе хочам PHP. Такім чынам, мы не паказалі Тып зменнай больш. Гэта вызначаецца падчас выканання. Перакладчык будзе такое, ой, мы проста прабегчы, і ў залежнасці ад кантэксту, мы ўбачым, якія тыпы відаў Гэтыя зменныя павінны мець. Там няма асноўнай функцыяй. Усё будзе проста запусціць. Вы, хлопцы, з вашым імпарт у вашай у мінулым Р-мноства, вы заўважыце, гэта. Там на самай справе не галоўная функцыя. Вы проста напісаў тое, што Вы хацелі каб гэта адбылося. І гэта толькі часткова адбылося. Дык вось PHP для вас. [00:48:56] Масівы вельмі падобныя. У нас яшчэ ёсць гэты кранштэйн. Тут, у нас ёсць пераменная называецца обр, і ён роўны to-- ў нас ёсць нармальная кранштэйны абазначэння. І ў нас ёсць некаторыя ключавыя значэння. І вялікая розніца паміж З і PHP масівы з'яўляецца тое, што мы можам мець гэтую associate-- мы можам звязаць значэння ключоў. Такім чынам, замест таго, каб проста маючы Масіў, індэксавацца па колькасці або становішча гэтага элемента ў масіве, мы можам на самай справе звязаць яго з ключом. Дзе мы можам казаць, добра, я хачу што б Значэнне звязаны з садавінай. А можа быць, у нас ёсць садавіна пайшлі банан. Так што вярнуцца б банан да нас. [00:49:41] Але ў прынцыпе, найбольш магутная рэч аб гэтым з'яўляецца тое, што, калі вы, хлопцы, памятайце, дэма з лекцыі, дзе мы ў асноўным перапісаў правапісу ў PHP, і was-- пошук быў проста падабаецца, гэта ключ існуе? Гэта сапраўды збольшага сілай ёй. Вам не трэба для перабору праз масіў. Вам не трэба ведаць, што месца, якое ён знаходзіцца. Гэта можа быць у канцы ці ў пачатку. Да таго часу, як вы ведаеце ключ што асацыюецца са значэннем, PHP можа проста плюнуць, што значэнне правы назад на вас, добра? [00:50:09] І потым, мы таксама проста ёсць толькі таму, што мы можа мець пары ключ-значэнне не азначае, што вы павінны. Вы таксама можаце проста стварыць звычайны масіў, як тут, У ніжняй частцы, дзе гэта толькі адзін, два, тры, чатыры. Гэта нашы каштоўнасці. І на самай справе, іх ключы індэксы. Такім чынам, ключавым для аднаго будзе роўная нулю. Ключ для дваіх стане адным. Гэтак далей, і гэтак далей, калі Вы відавочна прызначыць клавішу, Вы маглі б выказаць здагадку, што значэнне толькі іх індэкс. Ці мае гэта сэнс для ўсіх? Ніякіх пытанняў? Высокі. [00:50:38] Добра, Еогеасп з'яўляецца спосаб перабору масівамі. Такім чынам, мы маем што-то тут, толькі агульная структура. Так Еогеасп, назву наш масіў, як усе Вы хочаце, каб называць адзін элемент у масіве, і мы можам зрабіць што-небудзь з гэты элемент або з гэтым значэннем. Такім чынам, мы маем прыклад тут. У нас ёсць асацыятыўныя масіў з гэтых двух пазіцый з барам, звязаныя з Foo і QUX асацыюецца з Baz. Так ключы Foo і БАЗ. Значэння бар і QUX. Так Еогеасп, у нас ёсць масіў Тут, як і пары значэнняў ключоў. Гэта дазваляе нам атрымаць доступ да як ключ і значэнне. Можа быць, вы проста хочаце Значэнне, і ў гэтым выпадку вы маглі б проста зрабіць, як обр як $ значэнне, а затым вы толькі доступу да значэння як вы перабору. Але, магчыма, для некаторых Прычына, вы хочаце ключ, які з'яўляецца, чаму я выбраў Гэты прыклад замест гэтага. Такім чынам, вы можаце фактычна маніпуляваць ключ і значэнне ў гэтым выпадку. ОК? Пытанне? [00:51:41] АЎДЫТОРЫЯ: Калі вы хочаце, каб проста маніпуляваць ключ, будзе Вы павінны зрабіць foreach-- [00:51:45] Элісан Дакладна. Так што, калі вы хочаце, каб кіраваць толькі ключ, Вы ўсё яшчэ павінны гэта Сінтаксіс, таму што, калі вы проста ёсць обр як нешта, як адна рэч, гэта мяркую, што вы хочаце значэнне, а не ключ. Так што, калі вы калі-небудзь проста так жа, як обр а, можа быць, гэта як $ элемента, гэта буду лічыць, што вы пытаецеся для ўсяго значэння ў кожнай кропцы. Калі вы відавочна хочаце зрабіць што-то з ключом, нават калі вы не збіраецеся нічога зрабіць з гэтым значэннем, Вы павінны гэтую структуру што мы маем тут дзе вы відавочна задаваць і для ключа і значэння. Вялікае пытанне. Што-небудзь яшчэ? Крута. [00:52:27] Добра, PHP і HTML. О, мы вярнуліся да Р-мноства сем разоў. Так гэта павінна выглядаць крыху знаёмыя. Так што гэта нейкі просты HTML формы што мае некаторы ўваходных імя прывітанне. І мы бачым, у нас ёсць метад GET. І калі мы памятаем з нашага р-набор, калі гэтая форма была адпраўлена, ён пасылае масіў з імем $ _GET, што мае ўсе з гэтых уваходаў або зменных з Форма, што павінна быць маніпуляваць ў нашым PHP. Такім чынам, у гэтым выпадку, карыстальнік паставіў бы на іх імя. Яны ўяўляюць яго. І мы бачым, што мы атрымліваем некаторы масіў тут. У нас ёсць GET масіў. І мы доступ да імя. [00:53:11] Так што, кажа, добра, дай мне Значэнне, якое звязана з імем, імем якога тут ключавы. І, што адлюстроўвае непасрэдна тое, што мы сказалі наша імя ўваход. Так што гэта быў даць вам ключ да таго, што будзе ў вашым масіве тут. Ці мае гэта сэнс для ўсіх? Так? [00:53:32] АЎДЫТОРЫЯ: імя ў GET см Ці ў фіялетавай лініі ў [неразборліва]? [00:53:36] Элісан: Гэта ставіцца да гэтага тут. Так гэта поле прама тут, гэта ставіцца да такой назвай тут. Так што гэта можа быць названы як нумар тэлефона, або любы іншы. Гэтае імя на самай справе кажа, што Вы тэлефануеце ў гэтым полі? Як вы збіраецеся адносяць да гэтай сферы? І гэта назва на самай справе падабаецца, мы Сказаўшы гэта поле называецца імя. Вось як мы збіраемся атрымаць да яго доступ. [00:53:59] АЎДЫТОРЫЯ: Дык гэта падабаецца, Калі ласка, увядзіце імя роўная Боб, и-- [00:54:02] Элісан: справа, то вы хацеў бы атрымаць Боба там. Менавіта так. Усё крута? Добра, так што атрымаць супраць POST, гэтыя два асноўных спосабу што мы перадаем дадзеныя ў запыце HTTP. Вы, хлопцы, павінны былі бачыць Абодва з іх з надзеяй. Так з GET, інфармацыя, перадаецца праз URL. Так што калі вы калі-небудзь зрабіць Google пошук, YouTube, вы будзеце верагодна, заўважыце некаторыя пытальнік. І потым, усе словы што вы проста пакласці ў там. І POST перадае дадзеныя у целе HTTP-паведамленне. Так у адрозненне ад GET, вы, здаецца, разгледзець што дадзеныя схаваныя ад карыстальніка. Але тое, што сапраўды Важна разумець, з'яўляецца тое, што гэта па-ранейшаму гэтак жа, як небяспечным, так як GET. Аналогія, якую я хацеў бы выкарыстаць, калі ў вас ёсць нумар вашага банкаўскага рахунку і вы запісаць яго на вонкавым боку канверт, гэта даволі небяспечна. Калі б вы былі, каб напісаць яго на лістку папера і паклаў яго ў канверт, гэта ўсё яшчэ вельмі небяспечна, таму што Усё, што вам трэба зрабіць, гэта адкрыць, што да і глядзець на фактычнае ўтрыманне паведамленні, каб убачыць гэта. Так што гэта "схаваны", і людзі любяць думаю, што гэта бяспечна, але гэта не рэальна. І я ўпэўнены, што Дэвин будзе патрапіць у тым, што больш, можа быць. Але гэта важна адрозненне, каб зрабіць і нешта сапраўды добрае, каб зразумець. [00:55:15] ОК, SQL, Structured Query Language. Усе рэчы, якія мы бачылі зусім нядаўна! Так што гэта ў асноўным як раз і прызначаны, Відавочна, што для кіравання дадзенымі. Вы, хлопцы, было шмат вопыту з гэта ў вашых табліцах са PHP MyAdmin. І ёсць чатыры агульных запытаў што мы хочам, каб вы, хлопцы, ведаю. Так што абнаўленне, устаўка, выбраць і выдаліць. Таму пераканайцеся, што вы ведаеце, хто рэальна добра. Мы збіраемся пайсці праз іх вельмі хутка. [00:55:40] Так абнавіць, сапраўды, як тое, што Вы можаце падумаць, што робіць, ён проста абнаўляе дадзеныя ў базе дадзеных. Такім чынам, мы маем некалькі прыкладаў тут. Гэта наогул Структура запыту на абнаўленне. Так мы абнаўляем табліцу што мы гаворым пра. І мы хочам, каб усталяваць пэўны каштоўнасці, якія вызначаны слупкі роўна канкрэтных значэнняў. Так што гэта проста абнаўляе табліцу, змена значэння ва ўсіх радках ў гэтым выпадку. Такім чынам, у гэты сюды, фактычная Напрыклад, мы insert-- прабачце. Пашыраны Гэта слайд- без мяне ўсведамляючы гэтага. [00:56:17] Так што гэта абнаўленне сталовы набор col1 роўна у знач1, дзе знаходзіўся дом роўны "Курьер". Што гэта робіць гэта а толькі змяняе, гэта толькі карэктуе гэтыя значэнні ў пэўных месцах. Так што ў гэтым-першае, гэта змяняе іх значэння для ўсяго ў вашым стале, ОК? Гэта збіраецца змяніць гэта калонка для кожнага ўваходу, для кожнага радка. Але гэта, дзе вы маглі б думаю пра яго, як спецификатора. Так што гэта толькі збіраецца змяніць гэта ў вельмі спецыфічных месцах. Такім чынам, у р-мноства сем, калі вам Можа быць, абнавіў суму грашовых сродкаў што ваш карыстальнік павінен быў, вы, верагодна, некаторыя, дзе ID роўна ідэнтыфікатар сеансу, ці не так? [00:56:53] Таму што вы не хочаце, каб змяніць колькасць наяўных грошай для кожнага чалавека, які выкарыстаў свой вэб-сайт. Вы хацелі змяніць яго для аднаго канкрэтны чалавек, што асоба, якая з'яўляецца хто выкарыстаў яго ў той час. Дакладна? Такім чынам, ўставіць, ўставіць пэўныя значэння ў табліцах. Гэта як калі ты стварэнне брэнда новага карыстальніка. Агульная структура тут гэта ўставіць у любы табліцы мы гаворым пра. Каштоўнасці, будучы значэння, мы сапраўды хочам ўставіць. Такім чынам, як мы бачым тут, мы ўжо ўставіць ў табліцу. Гэта канкрэтныя слупкі з іх патрэбныя значэння. Так што гэта кажа, устаўка новая радок, якая змяшчае Значэння val1 і val2 ў адпаведнасці з Гэтыя канкрэтныя слупкі. [00:57:33] Так, можа быць, вы хочаце толькі запоўніць з палавіны рэчаў у гэтым шэрагу. Вось што гэтая частка тут дазваляе рабіць. Гэта дазваляе вам на самай справе вызначыць, якая частка. Так? [00:57:44] АЎДЫТОРЫЯ: вы можаце толькі [неразборліва] клеткі ў шэрагу [неразборліва]? [00:57:52] Элісан: Калі вы толькі запоўніць некаторыя часткі вашага запар, астатнія з гэтых клетак з'яўляюцца проста пусты. Да таго часу, пакуль вы дазваляеце ім быць пустым, гэта не праблема. Калі вы паспрабуеце атрымаць да іх доступ, гэта збіраецца вярнуцца трохі пусты элемент. Але важна ведаць, што ў некаторых табліцах, Яны павінны мець магчымасць быць пустым. Вы, магчыма, сутыкнецеся з праблема падчас вашай р-набору таму што мы не дапускайце пападання з вашых значэння нулявы. Але вы можаце паказаць Дадатковае значэнне ў табліцы. [00:58:26] ОК, выбраць, дык гэта тое, проста спосаб атрымання канкрэтныя дадзеныя з табліцы ў некаторыя ідэнтыфікатар, які вы хочаце. Так абярыце зорка з табліцы, дзе кол роўна што-то проста азначае, што дайце мне ўсе дадзеныя, звязаныя дзе гэта пэўны слупок гэта праўда. Так зорка ў гэтым выпадку будзе вярнуць ўсю радок з вамі, добра? [00:58:49] І потым, у гэтым выпадку, абярыце зорку з Табліца проста дае вам усю табліцу. А потым, сцерці відавочна, гэта проста выдаляе радок з табліцы. Так выдаліць з табліцы, усе табліцы мы спасылкі, дзе некаторыя канкрэтныя ідэнтыфікатар або некаторы ўмова праўдзіва. Так? [00:59:07] АЎДЫТОРЫЯ: Вопрос. Чаму вы карыстаецеся двайны каціроўкі, і можаце вы зрабіць падвойныя або аднаго каціроўкі, гэта да лепшага? [00:59:13] Элісан: Падвойныя двукоссі або адзінкавыя двукоссі ня робіць розніцу ў SQL. Я думаў, што я ўбачыў яшчэ адно пытанне. Так? [00:59:20] АЎДЫТОРЫЯ: Хіба гэта не ўплывае на тое, што атрымлівае збег з запыту? [00:59:25] Элісан: Роб? [00:59:27] ROB: Што вы разумееце пад бег з запыту? [00:59:31] АЎДЫТОРЫЯ: Калі хтосьці мае адзін запыт у выглядзе of-- [00:59:36] Роб: Калі хто-то пакласці адну цытату, то да тых часоў, як вы дэзінфекцыі Ваш ўклад, то гэта не мае значэння. Але калі вы выкарыстоўваеце аднаго Цытата, і вы няправільна пазбегнуць вашы матэрыялы, то так, яны павінны пакласці адну цытату для таго, каб зламаць код. калі вы карыстаецеся падвойныя двукоссі, яны павінны паставіць двайны цытаваць зламаць ваш код. Але да тых часоў, як вы бегчы рэчы правільна, гэта не мае значэння. Гэта проста будуць пераведзеныя для правільнага знака ў любым выпадку. [00:59:59] АЎДЫТОРЫЯ: Што гэта значыць бегчы? Элісан: Ну, як Санітарная апрацоўка і выратавання. Экзамен, які мы маем, вялікі XKCD смешна, што яны цягнуць туды, дзе ў вас ёсць, oh-- Роб: Гэта апошні слайд. Элісан: Гэта апошні слайд, на самай справе? Божа мой. Там мы ідзем, дасканалым. Такім чынам, у прынцыпе, вы можаце надаць то ў гэтым SQL запыту дзе ён парушае вашыя код, або, як Давід праявіў у класе, калі ў нас ёсць нейкае адзінае Цытата 1 роўны 1, і калі ў нашым кодзе, мы проста наўпрост капіяваць, што ў Расеі і у нас ёсць канчатковы адзінарныя двукоссі, што адбываецца, мы атрымаем некаторы выраз, што ацэньваецца як ісціна, што будзе няхай хто-то ўвайшоў у нашай базе дадзеных і атрымаць дадзеныя, якія мы не хачу ім атрымаць. Так дэзінфекцыі уваходаў проста азначае, пераканаўшыся, што мы пазбегнуць іх сімвалы і абазначэння іх як сімвалаў і не такія рэчы, , Якія павінны быць дазволены варта разумець літаральна як наш SQL заяву. [01:01:04] Так вялікая рэч, што мы сказалі, што вы, хлопцы павінны выкарыстоўваць былі HTML спецыяльныя сімвалы, якая з'яўляецца тое, што вы, магчыма, захочаце зірнуць на. Добра, выдаліць. Тыпы дадзеных, усё гэта будзе ў Інтэрнэце. Так як мы 15 хвілін да канца, я проста хачу, каб ісці прама праз гэта. PHP і SQL, у асноўным гэта проста ў нас была функцыя запыту, дапамаглі абараніць супраць Гэтыя шкоднасныя атакі. Таму, калі вы карыстаецеся запыт, мы рабілі, што што рэчы былі прадэзінфікаваць і яшчэ шмат чаго. [01:01:36] MVC гэта проста дызайн парадыгма, так мадэль, выгляд, кантролер. Гэта проста спосаб, каб трымаць рэчы прыгожа і падзяліць такім жа чынам, што мы схільныя ўлічваць з кода ў функцыі. Гэта проста фреймворк для вэб-дызайну што дазваляе зрабіць тое ж самае. Я збіраюся прапусціць гэты крок. [01:01:54] Гэта тое, што я было б супер зручныя с. Гэта выдатна століку. Гэта дае вам функцыю Прыклад мадэлі. Я проста збіраюся праз гэта таму, што я сапраўды хочаце Дэвин, каб быць у стане гаварыць. Калі ў вас ёсць якія-небудзь пытанні, калі ласка, не саромейцеся. Я буду тут пасля. Проста прыходзьце пагаварыць са мной. Пры тым, што ў нас ёсць HTTP статусы. І Дэвин збіраецца падарваць праз гэта ў 15 хвілін. Гэта будзе выдатна. [01:02:17] DAVIN: OK. Ну, ваш мікрафон? Так. Выбачайце. Элісан: Шлях павінен быць падрыхтаваны. DAVIN: Не, я гатовы. Я гатовы. Давайце зробім гэта. Ён гатовы. ОК. Выбачайце. Я праліў каву на сябе. Я не ведаю, калі я больш засмучаны, што я выглядаю па-дурному, або што я не выпіць кавы больш. У любым выпадку, проста хутка аб'яву аб аркушы вы, хлопцы, ёсць. Так гэты ліст вы, хлопцы, значыць не Афіцыйны што на віктарыне. Гэта афіцыйны, што на віктарыне. Акрамя таго, на сайце мы раскажам Вы, OK, гэта будзе на віктарыне. Такім чынам, у маленькай шпаргалцы ў вас ёсць, а не чыноўнік. І ёсць памылкі на ім. Так лепш не проста слепа выкарыстоўваць яго. Так што так, гэта ўсё. Такім чынам, давайце ў гэтым сапраўды хутка. [01:03:05] Так HTTP статусы. Так што ж адбываецца, калі сайт, усё ў парадку. Усё ў парадку. Усё вяртаецца да Вы, як вы хочаце, каб ён. Вы атрымліваеце 200 OK. 301, дзе мы бачылі, што 301 раней? Пачакайце, што адбываецца? Выбачайце. Мы бачылі, я волава лекцыю падчас бяспекі. Так падчас бяспекі, так што калі Дэвід набраў у HTTP, а затым паспрабавалі прайсці да cs50.net, Вы будзеце бачыць 301 перамяшчаецца. Чаму? Таму што гэта будзе перанакіраваць Вы аўтаматычна нашым HTTPS. [01:03:35] Так 301 рухаўся, толькі гэта у асноўным перанакіраванне. І вы можаце думаць аб ім, як гэта. Любое з станаў, якія пачынаюцца з 2-х, тыя, як, у парадку, усё ў парадку. Любое з станаў, якія пачынаюцца з 3, тыя перанакіраванне. Статусы, якія пачынаюцца з 4, гэта азначае, ёсць нейкая памылка кліента. Статусы, якія пачынаюцца з 5, што гэта нейкая памылка сервера. Так вы, здаецца, разбіць статусы, як, што. Так 304 ня не змяняецца, так што на твой server.c р-наборы, так скажам вам загружаны cat.html. Усё вяртаецца, Вы атрымліваеце 200s, ОК, выдатна. [01:04:03] Дапусцім, вы перазапусціце яго. Ну, унутры, што cat.html, у вас ёсць JPEG. Ну, што JPEG ня збіраецца атрымаць перазагрузцы. Вы ж не збіраецеся ствараць іншы GET запыт да сервера, а затым атрымаць усю гэтую інфармацыю назад. Гэта будзе проста be--, што выява будзе кэшавацца на вашым кампутары. І так, што малюнак будзе 304. Так што гэта не быў зменены. Калі вы затым зачыніць, ясна, печыва, а затым абнавіць і паспрабуйце загрузіць гэтую старонку зноў, вы будзеце бачыць 200s. Вы не ўбачыце, што 304. [01:04:28] 400, Bad Request, рэальны хутка, як калі б вы збіраліся адправіць Аб'ект JSON на сервер і ваш аб'ект JSON быў няправільным, Вы ўбачыце нешта накшталт гэтага. 403, забаронена. Калі вы бачыце забаронена? Напэўна, напэўна? АЎДЫТОРЫЯ: Chmod. DAVIN: Chmod, так. Такім чынам, вы не ўсталявалі Дазволу правільна. 404, не знойдзены. Гэта проста не існуе. Так што, калі вы ўведзяце ў няправільным URL. 500, унутраная памылка сервера, сервера верагодна, не быў правільна настроены. Што-то не на вашым баку, але што-то на боку сервера. І 503? Шмат людзей бачылі 503s ў мінулым Р-мноства. Калі гэта адбылося? Я чуў, шэпт. [01:05:05] АЎДЫТОРЫЯ: Калі Google вырашыць, што вы будзеце робат. DAVIN: Так, калі Google вырашае Вы робат, вы атрымліваеце 503s. Дык вось перагрузкі. Калі вы запыталі з сервера занадта шмат, гэта, як правіла, часовы характар. І большасць з вас гэта заўважылі. Такім чынам, вы бачылі 503. Вы, магчыма, мелі трохі перапынак, то 503s сышоў, і ўсё было ў парадку. [01:05:20] GABE: Рэальны хуткі, калі вы, хлопцы, атрымаеце 500 у, верагодна, гэта апошняя праблема ўсталяваць? Так? [01:05:27] АЎДЫТОРЫЯ: Звычайна, калі сэрвэры ёсць файл недарэчныя або [неразборліва] іх машына [неразборліва]. [01:05:34] GABE: Дык гэта можа быць канфігурацыя Пытанне ў PHP на вашым серверы. Але гэта можа быць толькі тое, як кропка з коскі, што ваш забыліся. Калі вы друкуеце PHP, некаторыя няправільны сінтаксіс маглі б атрымаць нешта падобнае. ОК? [01:05:46] DAVIN: Круто. Вы хочаце, каб я не рабіць толькі да таго часу, AJAX ці што? [01:05:51] GABE: [неразборліва]. DAVIN: OK. Так што DOM? Што DOM азначае? [01:05:55] АЎДЫТОРЫЯ: аб'ектная мадэль дакумента. DAVIN: Ніца. І чаму мы гэта падабаецца? Высокі. Так, так яно проста дазваляе нам атрымаць доступ да HTML, доступ да нашага старонку вельмі хутка. Чаму? Таму што мы ставіцца да нашых старонка, разглядаючы нашы HTML-тэгі, лячэння ўсё як быццам яны аб'екты. Калі мы ставіцца да іх як яны аб'ектаў, тое, што мы можам зрабіць? Ну, мы можам выклікаць функцыі на іх. І гэта важна, чаму? Ну, таму што мы збіраемся выкарыстаць JavaScript, каб абнавіць наш HTML, абнавіць гэтыя аб'екты. Так што, калі мы ставімся да іх як аб'екты, мы можам выклікаць функцыі на іх. Я збіраюся трапіць у гэта мала больш, калі я іду ў JavaScript, але вы ўсё бачылі, як document.getElementById. Так дакумент з'яўляецца ваш элемент, атрымаць элемент па ідэнтыфікатару, так што вы збіраецеся глядзець на працягу некаторага ID ў HTML тэга. І потым, вы можаце зрабіць яшчэ што-то, што. Напрыклад, як document.body, то вы можаце дадаць дзіцяці. Такім чынам, вы збіраецеся знайсці гэты дакумент. У вас ёсць дакумент. Вы збіраецеся знайсці цела. Вы знайшлі цела. І потым, вы збіраецеся выклікаць некаторыя функцыі на ім. Так дадаць дзіцяці, і вы можаце дадаць некаторыя HTML на канец ўнутры вашага цела. Так у асноўным, вы проста разглядаючы яго як аб'ект. Вы лячэння HTML тэгі, як аб'ект. І гэта робіць яго вельмі лёгка і хутка прайсці праз іх. Але гэта таксама дазваляе для выкліку функцый на іх так што вы можаце маніпуляваць і змяніць элементы. [01:07:04] GABE: Улічваючы гэта, чаму JavaScript такія добры мова для ўзаемадзеяння з HTML? Хутчэй за ўсё, калі людзі выбіралі мова для браўзэра, для боку кліента, JavaScript вельмі прыемна, гэта сапраўды добра спраўляецца аб'ектаў. І аб'екты накшталт як аб'екты, якія з'яўляюцца ў HTML, так што гэта вельмі лёгка JavaScript каб зрабіць такую ​​апрацоўку. DAVIN: Ніца. Так вось проста прыклад. Так што я думаю, што на віктарыне у мінулым годзе, ці, можа быць, два гады таму, мы прасіў вас, каб стварыць дрэва. Так што гэта менавіта тое, што вам трэба зрабіць. Такім чынам, вы пачынаеце з дакументам. І тады вы ў асноўным проста паглядзіце на тэгі. Так што, калі вы паглядзіце, мы пачаць з HTML тэга. І потым, вы атрымаеце падказкі аб тым, як рабіць гэта на аснове водступу. Так кіраўнік роду адгаліноўваецца. Ўнутры галавы, у нас ёсць іншы тэг для назвы. Такім чынам, у нас ёсць тэг загалоўка. А ўнутры, што мы маем некаторую радок. І так мы ўяўляем Радок у кола. І ўсё пазнакі на плошчах. [01:07:54] І калі вы паглядзіце, калі мы думаю, гэта як дрэва, і давайце скажам, што HTML з'яўляецца бацька, то галава і цела збіраюцца быць браты і сёстры. Абодва яны зьбіраюцца быць дзеці гэтага з бацькоў. Так, таму што яны як браты і сёстры, яны будзе свайго роду побач з адзін з адным у нашай мадэлі дрэва. І потым, вы ў асноўным зрабіць тое ж самае. Так што не цяжка, але мы папрасілі такія пытанні, як гэта раней на віктарыне. GABE: Хто-небудзь ёсць пытанні да гэтага часу? Гэта добра? DAVIN: Круто. JavaScript, OK, добры матэрыял. Так JavaScript, што JavaScript? Ну, JavaScript is-- гэта складанай, але гэтыя некаторыя з асноўных момантаў што вы павінны трымаць у розуме. Па-першае, гэта слаба тыпізаванай. Што гэта значыць? Такім чынам, PHP was-- так, у чым справа? [01:08:35] АЎДЫТОРЫЯ: Вы не павінны відавочна Дзяржава, што тып зменнай яна ёсць. DAVIN: Ідэальны. Такім чынам, ён сказаў, што вы не павінны відавочна пазначыць тып зменнай. Вось менавіта. Такім чынам, у C, калі б мне давялося INT я складае 50, то ў PHP, гэта проста, як гэта, $ я, роўная 50. Затым у JavaScript, што б выклік будзе? Var, ці не так? Гэта было б, як вар я роўны 50. Але вы не павінны быць як, добра, гэта Int. ОК, гэта радок. Няма неабходнасці рабіць гэта. Гэта інтэрпрэтаваная мова. Такім чынам, што ж гэта значыць? [01:09:04] АЎДЫТОРЫЯ: Ці не кампілюецца. [01:09:06] DAVIN: Что не складзены на ўвазе? Так? [01:09:11] АЎДЫТОРЫЯ: Вы не павінны рэструктураваць код каб атрымаць яго гатовым для кампутар, каб запусціць яго. Гэта проста прынята падчас выкананне і кампутар [неразборліва]. DAVIN: Так, так што гэта будзе прайсці праз перакладчыка. Але вы цалкам маеце рацыю. Такім чынам, вы ніколі не збіраецеся скампіляваць яго, ці не так? Калі вы робіце ваш PHP і код JavaScript, Вы ніколі не называў кампіляцыі. Вы ніколі не называў нешта накшталт зрабіць або што-небудзь падобнае. Гэта таму, што інтэрпрэтуецца. Так што кожны раз ён ідзе праз браўзэр, ён ідзе праз перакладчыка. І што адбываецца, каб інтэрпрэтаваць яго толькі ў рэжыме рэальнага часу прама ад гатэля для вас. Так што некаторыя плюсы і мінусы да таго інтэрпрэтаваная мова і якія маюць скампіляваны мову? Так compiling-- так, у чым справа? [01:09:50] АЎДЫТОРЫЯ: Сінхронны пераклад павольней. DAVIN: У якім сэнсе? [01:09:57] АЎДЫТОРЫЯ: Пасля вас збіраць, вам не прыйдзецца рабіць нейкія дадатковыя крокі, каб выканаць гэта, то ў гэтым [неразборліва]. [01:10:04] DAVIN: справа, дасканалым. Так што вы сказалі, у асноўным, што складанне, пры кампіляцыі, вы павінны шмат папярэдніх выдаткаў, ці не так? Вы збіраецеся скампіляваць яго. Але пасля таго, як скампіляваць яго, кампілятар збіраецца аптымізаваць яго. Гэта будзе хутка. Гэта будзе ў асноўным так хутка, як гэта можа быць. З не пераклад, вы ніколі не ёсць, што першапачатковыя выдаткі. Хутчэй за ўсё, гэта будзе трохі павольней, кожны раз, калі вы яго інтэрпрэтаваць. І вы будзеце мець, каб інтэрпрэтаваць яго кожны раз. Такім чынам, замест таго, гэта адзін кошт часу, цяпер вы прыйдзецца інтэрпрэтаваць яго кожны раз, калі старонка адлюстроўваецца. [01:10:29] Так перакладчыкі добра, таму што Вы не павінны кампіляваць яго, але яны дрэнна ў тым, што кожны часу загрузкі старонак, гэта прыйдзецца інтэрпрэтаваць гэтую тэхналогію Java. І гэта будзе працаваць трохі павольней, чым калі б вы былі, каб скампіляваць яго. Дазваляе communicate-- ой, пачакайце. Выкарыстоўваецца для кіравання змест і знешні выгляд. Мы толькі што казалі пра гэта. Ён выкарыстоўвае DOM. AJAX, мы атрымаем у AJAX ў трохі. І потым, гэта на баку кліента. Такім чынам, PHP з'яўляецца сервернай часткі. JavaScript ажыццяўляецца на баку кліента. Што станоўча на гэта? Гэта кажа. Гэта хутчэй, ці не так? Таму што вы не павінны to-- гэта хутчэй. Вы не павінны мець зносіны з некаторым іншым прыладай. Калі вы проста на вашым кліент, вы ніколі не прыйдзецца ісці і ўбачыць, што на серверы а затым далажыць ці нешта падобнае. Так на баку кліента, як правіла, быць трохі хутчэй. [01:11:15] GABE: Так, але гэта не азначае, PHP з'яўляецца хутчэй, чым JavaScript або што-небудзь падобнае. Яны бягуць накшталт ў той жа самы Хуткасць, таму што яны абодва інтэрпрэтаваных моў. Рэч, якая павольна тут запыт. Такім чынам, вы на самой справе адбываецца ўсё шляху ў Бразілію атрымаць некаторую інфармацыю што там жыве. Але PHP і JavaScript, яны выгляд запусціць з той жа хуткасцю. Гэта не тое, што адзін хутчэй, чым іншыя. Гэта, таксама, пытанне з падвохам тут. Так JavaScript ніколі не стане машынны код, праўда ці хлусня? [01:11:47] АЎДЫТОРЫЯ: False. GABE: False. Яна павінна стаць машына Код, таму што машынны код Адзінае, што машына разумее. Нават калі гэта не складаюцца, ён па-ранейшаму становіцца машынны код таму што перакладчык проста праграма, якая ідзе парадкова і пераўтворыць гэты радок у то кампутар разумее. ОК? Крута. [01:12:08] DAVIN: Вось толькі вельмі просты прывітанне свет праграма на JavaScript. Так што я не ведаю, if-- вы бачылі гэта. Але вы проста павінны HTML тут. І замест таго, рэальна пакласці JavaScript у тэгах сцэнара, так вы звычайна пакласці яго ў галаву. Вы павінны тэгі сцэнара. Вы адпусціце яго там. Усё, што мы зрабілі тут мы звязаны in-- так што мы звязаны ў файле JavaScript так. І вы ўсё гэта зрабілі, ці не так? Таму, калі вы карыстаецеся JQuery і underscore.js ў апошнім р-набор, Вы не маеце тоны кода доступу ва Вашы тэгі сцэнара, у вашай галаве. Вы можаце зрабіць гэта, але замест гэтага вы проста звязваючы яго ў. І вы звязваючы яго ў проста, як вы робіце з CSS. Так што проста робіць яго больш зручным для чытання, так ваш код не люблю доўгія 1000 лініі з тоны функцый, Вы не маглі б выкарыстоўваць. [01:12:52] Замест гэтага, вы проста звязаць яе ў. Гэта compartmentalizes яго. Гэта падобна на напісанне якой-небудзь файл загалоўка, і Затым у тым ліку файл загалоўка ў З Думайце пра гэта так жа, як гэта. Дык што ж гэта зрабіць? Ну, гэта будзе працаваць. Гэта будзе папярэджваць. Такім чынам, вы збіраецеся атрымаць крыху ўсплывальнае пад назвай прывітанне свет. Хуткі пытанне, проста праверыць стан сьвядомасьці, Такім чынам, вы бачыце тут, у целе, сказаць цела, HTML тут. Тое, што прыходзіць у першую чаргу? Ці павінен я ўбачыць цела, HTML тут, ці я бачу папярэджанне ў першую чаргу? [01:13:19] АЎДЫТОРЫЯ: Папярэджаньне. [01:13:20] DAVIN: Дакладна. Ён кажа, што папярэджанне. Чаму? [01:13:22] АЎДЫТОРЫЯ: Таму што вы ісці зверху ўніз. [01:13:24] DAVIN: Так. Ідэальна падыходзіць. Такім чынам, ён кажа, вы ідзяце зверху знізу, што абсалютна правільна. Вы збіраецеся ісці зверху ўніз. І ў JavaScript, JQuery, у вас ёсць функцыя, якая паходзіць на OnLoad або гатовы, і гэта кажа, добра, пачакайце, пакуль усё гэта HTML загружаны. А потым, патэлефануйце ў JavaScript. Таму што мы не маем, што тут, Самае першае, што адбудзецца гэта збіраецца ісці зверху ўніз. Гэта будзе ўдар JS выклік, ён збіраецца папярэдзіць. Пасля гэтага націснуць кнопку ОК, што папярэджанне знікне. Тады ён збіраецца паказаць Вы цела HTML тут. Nice. [01:13:54] ОК, так што проста сапраўды хутка, лісты У JavaScript супер хутка. Для таго, каб абвясціць Пераменная, вар імя. Такім чынам, у C, вы павінны INT I, у вас ёсць абвясціць які тып яно і ёсць. PHP $. JavaScript, вар. Мы гаварылі пра гэта. Добра, пойдзем. [01:14:11] Завесы, тое ж самае. Тое ж самае. Аб'явы функцый, так гэтак жа, як вы бачылі ў С. Адзінае, што адрозніваецца таму, калі Вы атрымліваеце на іншыя мовы праграмавання, напрыклад, калі вы бераце 51 у наступным семестры і вы робіце з OCaml, Вы можаце мець справу з ананімнымі функцыямі. Дык вось менавіта тое, што вас тут. Такім чынам, вы хочаце, каб пакласці ў суме, нейкую каштоўнасць сум. Але вы маглі б рабіць гэта толькі адзін раз. Такім чынам, вы не хочаце назваць гэта функцыя сума, даць яму функцыю дэкларацыю. Замест гэтага, вы проста выкарыстоўваць яго як ананімную функцыю. І вы бачылі гэта шмат. Вы ўбачыце прыклад Гэта, у пару слайдаў. Так, мы паглядзім. GABE: Добры пытанне. Калі вы маглі б хацець выкарыстоўваць ананімная функцыя тут? У прынцыпе, калі вы жадаеце што-то, як падзеі, каб гэта адбылося. Таму, калі мыш націснуў, напрыклад, Вы хочаце, каб некаторыя функцыі называецца. Такім чынам, вы прайсці на мерапрыемства апрацоўшчык, вы перадаеце выпадку, выгляд, функцыя, якая Вы хочаце, каб назваць. І што вы перадаеце як, у канцы у дзень, проста паказальнік на што інструкцыя, функцыі. Так што гэта не так, як вы праходжання увесь код, гэтак жа, як паказальнік на функцыю. А потым, калі хтосьці націскае мыш, то гэтая функцыя выклікаецца. [01:15:17] Дэвин: масіваў, што ёсць заяву масіва. Затым, масіў навесці. Рэальны хуткі, што гэта будзе раздрукаваць? Што будзе трэці элемент быць? [01:15:31] АЎДЫТОРЫЯ: "JS". [01:15:32] DAVIN: Права, гэта было б "JS". Пачакайце, вярнуцца назад. Што такое адлегласць? [01:15:37] АЎДЫТОРЫЯ: Тры. DAVIN: Тры, ці не так? Менавіта тое, што вы думаеце. Добра, зараз ісці. Масівы, вы можаце дадаць рэчы да іх. Такім чынам, вы можаце выйсці за межы іх пачатковыя мяжы. Проста што-то трымаць у розуме. PHP, JavaScript, яны мала трохі больш паблажлівымі з пункту гледжання рэчаў вось так. Аб'екты, вельмі падобна Структуры ў С, вельмі як асацыятыўных масіваў у PHP. Вы ўсё мелі досвед з гэтым. Так JSON, калі вы перадаеце JSON туды і назад у р-ўсталяваць восем, гэта ваш аб'ект. [01:16:03] Так што так, напрыклад, рэальны хуткі прыклад. Вось аб'ект. Як вы спасылацца на гэты аб'ект, так што проста сапраўды хутка, давайце казаць, што я хацеў знайсці з, добра, што курс? І так імя аб'екта тут CS50. І потым, калі я павінен быў асацыятыўную масіў, як бы я гэта зрабіць? Я буду выкарыстоўваць ключ, ці не так? Так што ў мяне імя масіва. У мяне ёсць кранштэйны, цытаты, ключ, канчатковыя каціроўкі, канцавога кранштэйна, і што будзе спасылацца, што элемент у маёй асацыятыўнага масіва. Як я спасылкі Вядома ў маёй аб'екта? Хто-небудзь ведае? [01:16:39] АЎДЫТОРЫЯ: [неразборліва]. [01:16:40] DAVIN: Што здарылася? АЎДЫТОРЫЯ: CS50.course. DAVIN: справа, так. Так CS50.course. Так як вы спасылацца рэчы ўнутры аб'екта JSON з'яўляецца з пункту. [01:16:48] АЎДЫТОРЫЯ: Вы можаце таксама выкарыстоўваць сінтаксіс масіва. [01:16:53] DAVIN: Добра, добра. [01:16:54] GABE: Вы таксама можаце выкарыстоўваць CS50 кранштэйн, радок, як двукоссі. Аўдыторыя: Я думаю, што гэта супадае з PHP. GABE: Гэта адно і тое ж. DAVIN: Выдатна! Але вы ўбачыце гэта ў іншых месцах. Так, так трымаць. Гэта тое, што я толькі што сказаў. Так у прыкладзе JavaScript JQuery. Так што гэта мой DOM, праўда? Рэальны хуткі, так што я павінен галава, прывітанне свет, цела. У мяне ёсць кнопка. Ён кажа: "душы на мяне", таму я хачу, каб падштурхнуць яе. І я хачу, каб нешта зрабіць калі ён націснуў. Справа, побач. [01:17:31] Права, так што гэта мая JavaScript. Так JQuery гэта проста лягчэй спосаб напісаць JavaScript. Так што гэта, і тое, што я збіраюся паказаць Вы ў наступны раз, будзе JQuery, ідэнтычныя. Такім чынам, яны будуць рабіць тое ж самае. Проста JQuery, як правіла, крыху лягчэй. Людзі, як правіла, падабаецца больш. Ён мае шмат функцыянальных магчымасцяў. Такім чынам, людзі, як правіла, выкарыстоўваць JQuery. Вы ўсе прывыклі JQuery ў мінулым Р-мноства. Дык што ж гэта будзе рабіць? Што гэта будзе JavaScript-- так гэта проста JavaScript. Што гэта будзе рабіць? Што ён будзе рабіць? [01:18:03] Такім чынам, спачатку вы бачыце акно OnLoad. Дакладна? Такім чынам, мы не бачым, што і раней. Дык гэта будзе чакаць да цэлых нагрузак акно. Дык гэта будзе чакаць да таго часу, нагрузка HTML, ўсе выявы перш чым ён робіць што-небудзь. Такім чынам, давайце казаць наш DOM загружаны. Усё ёсць. Тады што адбудзецца? Так? [01:18:19] З'яўляецца кнопка: аўдыторыі. [01:18:22] DAVIN: кнопка ўжо ёсць. Так, так кнопка ўжо ёсць. Але гэта будзе казаць, Добра, калі я націсну кнопку, так кнопка ўжо там, як гэты HTML-тэга. Пачакайце, вярніцеся сапраўды хутка. Гэты тэг права права тут будзе кнопка ўжо. Там ужо Кнопка. Але тады, JavaScript тэг, прама тут, ён кажа, добра, я хачу каб атрымаць элемент па ідэнтыфікатару, так кнопка пошуку проста кажа, добра, я хачу адлюстраваць гэтую зменную з гэтай кнопкай. Так што пераменная проста просты спосаб атрымаць доступ да гэтай кнопцы. І я кажу, добра, калі я націсну, што Кнопка, так што калі я націскаю гэты элемент, і гэты элемент ставіцца да Кнопка, калі я націсну яе, то я хачу, каб выклікаць функцыю. Вось адзін з тых, хто ананімна функцыі якіх мы гаварылі. [01:19:03] Проста патэлефануеце некаторую функцыю. Унутры гэтай функцыі, у асноўным тое, што мы бачылі шмат, папярэджанне. Вы націскаеце на кнопку пошуку. Гэта будзе ў асноўным маюць кнопку. Вы пстрыкніце па ім. Вы атрымліваеце тое папярэджанне. X па-за. Гэта так. Так? [01:19:16] АЎДЫТОРЫЯ: Так што, калі вы паклалі сцэнар [Неразборліва], тэг скрыпт у HTML? [01:19:21] DAVIN: Вы можаце паставіць скрыпт Тэг прама ў галаву таму што ў вас ёсць гэтая OnLoad. Гэта таксама, што ў вас ёсць пстрычка. Дык гэта будзе чакаць да таго часу, Вы націскаеце на нешта. Але OnLoad проста каб быць у бяспецы, каб зрабіць што ўсе грузы ў ваш HTML загадзя. Так? Вы хочаце, каб нешта сказаць? [01:19:40] GABE: [неразборліва]. DAVIN: Так. [01:19:42] АЎДЫТОРЫЯ: Так OnLoad пазбягае вызначэнне кнопку пошуку з зменнай , Проста кажучы document.getElementById Кнопка пошуку кропак [неразборліва]. [01:19:49] DAVIN: Вызначана, але потым ваша радок проста атрымлівае велізарную. Дакладна, так што гэта проста зрабіць яго прасцей для вас, так. Так? [01:19:56] АЎДЫТОРЫЯ: Адкуль мы стварыць window.onload? Або document.ready? [01:19:58] DAVIN: Так, ёсць. Так, ёсць, я праверыў. [01:20:02] GABE: не для іх, каб клапаціцца аб. [01:20:03] DAVIN: Добра, так што я збіраюся каб сказаць вам, у любым выпадку. Таму ў асноўным, толькі ў цэлым, так window.onload не чакае, пакуль ваш DOM, усё Ваш HTML, грузы. Гэта не чакае, пакуль вашыя выявы нагрузкай. Гэта не чакае, пакуль усе нагрузкі. document.ready, ён проста чакае, пакуль вашыя DOM нагрузак. Пасля таго, як HTML усё ёсць, адзін раз Ваш DOM ёсць, пачынае працаваць. Вось і ўся розніца. [01:20:23] GABE: Хуткі стан сьвядомасьці праверыць тут. Так што гэта можна ўбачыць выгляд як радкі кода, ці не так? Таму што гэта window.onload роўна кучу рэчаў. Калі JavaScript, пра гэта гаворыцца праўда ці ілжыва, функцыя запускаецца на выкананне. False. ОК? Што тут адбываецца, вы проста праездам Гэтая функцыя, як ананімныя функцыі у window.onload. А потым, калі ён збіраецца на самой справе атрымаць выкананы? Калі акно грузы. Гэта падзея. Дык вось закон т, у чым мы казаў раней, ці не так? Таму, калі адбываецца падзея, Функцыя здараецца. Тое ж самае і з OnClick. [01:20:59] DAVIN: Такім чынам, хто-то ўзяў ад document.ready. Але гэта будзе дакладная same-- АЎДЫТОРЫЯ: знак даляра, што document.ready. Гэта ярлык. [01:21:07] DAVIN: О, што гэта? OK, гэта азначае, document.ready, ярлык. Але гэта тое ж самае, window.onload што мала розніцы, акрамя Я сказаў табе. І гэта JQuery. Так што гэта сапраўды такі ж thing-- гэта JavaScript. Гэта просто-- некаторыя людзі думаюць пра гэта як больш лёгкі вага, стыльны версія што ёсць шмат функцыянальнасці што вы, верагодна, выкарыстоўваць. Так што гэта робіць тую ж самую рэч. [01:21:34] Так рэчы накшталт пазначыць. Такім чынам, у іншым прыкладзе мы было document.getElementById, так што нам прыйшлося так доўга Радок, збіраецца атрымаць элемент любымі ID мае. Вось замененыя гэтым Тэлефануйце прама тут. Такім чынам, вы бачыце знак даляра, тады вы ўбачыце цытата, хэштэгу. Хэштэгу заўсёды селектара. Гэта кажа, добра, гэта павінна зрабіць з ID. Што селектара для класа? [01:21:56] АЎДЫТОРЫЯ: Dot. [01:21:57] DAVIN: Dot, права. Калі вы толькі збіраецеся выбраць тэг, што гэта? Гэта проста тэг, дакладна. А вы маглі б выкарыстоўваць, што тут, як добра. [01:22:05] GABE: І па тэгу, мы маем на ўвазе як DIV, напрыклад, або галаву. [01:22:08] DAVIN: або цела, або р або што-небудзь падобнае, так. Дык вось, добра, замест таго каб сказаць document.getElementById, гэта проста дакладна такая ж рэч. Проста ў JQuery, гэта карацей. Так што гэта прасцей. Такім чынам, не больш за OnClick, проста націсніце кнопку. Функцыя JQuery, выклікаць гэтую функцыю. Папярэджанне з'яўляецца сапраўды такі ж. Так што гэта крыху менш, або ледзь-ледзь карацей, трохі bit-- людзі думаюць, гэта крыху лягчэй выпісаць, крыху лягчэй для разумення. Але гэта JQuery. Шмат людзей атрымліваюць мала крыху заблытаўся і непакояцца і яны думаюць, добра, JQuery адрозніваецца ад JavaScript. Я павінен памятаць, гэта гэта дзве розныя рэчы. Гэта не. Я маю на ўвазе, гэта іншае сінтаксіс. Але JQuery з'яўляецца JavaScript. Гэта проста, здавалася б, лепшы варыянт, што можа быць прасцей зразумець, што людзі выкарыстоўваюць. GABE: Так, быць Шчыра кажучы, гэта знак даляра што вы бачыце ў JQuery, гэта проста Імя функцыі, што JQuery вызначае. Гэта не мае нічога асаблівага. Ці сапраўды гэта проста імя функцыі, гэтак жа, як вы маглі б вызначыць знак даляра. [01:23:03] DAVIN: Так, так казалі пра гэта. Некаторыя карысныя рэчы. Я, азіраючыся на старых віктарынах. У апошнія пару віктарыны, яны давялося выкарыстоўваць рэчы, як гэта. Так document.ready, так пераканайцеся, што ўсё ў загружаны, перш чым пачаць рабіць рэчы. Выберыце ID, або абярыце клас, гэта было б проста быць цытата кропка некаторы клас, канец цытаты. Адправіць, так што калі вы адпраўцы формы і выклік Гэтая функцыя пасля форме ўяўляе. Значэнне, так што давайце казаць, што я меў форму ўяўленне, як імя карыстальніка, адрас электроннай пошты, усё роўна. У мяне было тэкставае поле. Так што я друкую ў гэтым тэкставым акне. Ну, калі вы хочаце, каб атрымаць значэнне з гэтага тэкставага поля, можна выкарыстоўваць кропкавую Вал. І потым, тут, Кропка HTML тое ж самае гэта як дакумента кропкай getElementByID кропка innerHTML. Так што збіраецца вярнуцца Вы HTML з гэтага ID. Тут, вы проста выкарыстоўваць некаторыя ID ці нешта кропка HTML. Гэта будзе атрымаць HTML ад гэтага элемента. Калі вы хочаце, каб затым змяніць што HTML, вы можаце перадаць яму сёе-тое. Такім чынам, вы б як кропка HTML, а затым ўнутры, цытаты, новы HTML або што-то. [01:24:05] GABE: Такім чынам, AJAX. Мне вельмі падабаецца, каб зразумець AJAX сапраўды добра. Таму я хачу вас, хлопцы, зразумець AJAX сапраўды добра. Таму што, калі вы гэта зробіце, Вы ў значнай ступені адбываецца каб зразумець усё, што мае справу з HTTP, PHP, JavaScript, таму што ўсе прыходзіць разам у AJAX. AJAX не мова. AJAX з'яўляецца метад. І ён выкарыстоўвае мноства розных інструментаў. AJAX расшыфроўваецца асінхронны JavaScript XML. Так метад, мова, дадзеныя. [01:24:36] Так асноўнага мовы, які мы выкарыстоўваем у AJAX, каб выклікаць усё і апрацоўваць ўсе пазней гэта JavaScript. Вось чаму ён ставіцца вельмі блізка да JavaScript. А потым асінхронны з'яўляецца таму што мы не зрабіць гэта ўсё адразу, калі мы загружаем старонку. Гэта рэч, якую мы можам рабіць тое, накшталт у паралель. Асноўная ідэя AJAX з'яўляецца тое, што вы хочаце яго, каб атрымаць пэўную інфармацыю. Напрыклад, калі вы ўводзіце новы Імя карыстальніка пры рэгістрацыі імя карыстальніка, Маё імя карыстальніка abc123. А потым, у канцы форма, вы павінны націснуць кнопку Адправіць. І гэта было зайсці на сервер, а затым праверыць, калі ў базе дадзеных, абв123 ўжо ёсць. І калі гэта ўжо ёсць, ён кажа, імя карыстальніка ўжо ў базе дадзеных. А яны, вы павінны запоўніць з усёй форме зноў. І гэта было вельмі, вельмі дрэнна. [01:25:23] А потым людзі кажуць, Добра, чаму мы не можам проста зрабіць невялікі запыт HTTP, каб проста праверыць каб убачыць, калі гэты карыстальнік знаходзіцца ў базе дадзеных перш чым карыстальнік павінен прадставіць усю форму? Так, напрыклад, калі карыстальнік заканчвае ўводзіць abc123, давайце проста зайсці на сервер мала трохі і проста атрымаць сапраўднае або ілжывае з сервера, каб убачыць, калі гэта сапраўднае імя карыстальніка ці не. ОК, так што гэта адна з галоўных выкарыстоўвае Аякса ў цяперашні час па-ранейшаму. [01:25:49] DAVIN: Так рэальны хуткі, у выклік Ajax ў JQuery, Вы можа азначаць, што вы хачу, каб быць сінхроннымі. Вы не павінны рабіць гэтага. Але вы можаце зрабіць гэта. І калі вы зрабілі гэта, што б адбылося? Ну, напрыклад, калі вы атрымліваць навіны ці нешта, Ваш браўзэр проста будзе чакаць пакуль што ўся выклік не будзе завершаны замест таго, каб рабіць іншыя рэчы адразу ж пасля націску яго. [01:26:14] GABE: Гэта не праходзячы больш. Божа мой. Выбачайце! Ага. "У мінулым, кліент трэба запыце Усе ўтрыманне вэб-сайта ". Вось што я сказаў. Гэта дазваляе нам адправіць Дадатковая GET або POST запыты, не маючы перазагрузіць наш браўзэр. Так, у рэшце рэшт, мы на самай справе робіць HTTP запыты тут з дапамогай JavaScript. Таму што раней, мы выкарыстоўвалі толькі наяўнасць змяніць HTML, якія ўжо прыйшлі. І цяпер, мы можам выкарыстоўваць яго для ўзаемадзеяння з вэб-сервераў, а таксама. Усё гэта адбываецца гэта ў нас ёсць кліент. Дэвин з'яўляецца кліент. І ў яго ёсць усе наяўнасць працуе, таму што HTML з'яўляецца нямым. JavaScript разумны. Так Дэвин Дэвин мае яго разумным частку і яго нямы частку. Ён збіраецца выкарыстоўваць яго смарт ўдзел цяпер. Ён збіраецца выкарыстоўваць наяўнасць на запыт, напрыклад, Ці абв123 ў База дадзеных або няма. [01:27:04] Так Дэвин, калі ласка, ты проста дашліце мне запыт HTTP. Дзякуй. Таму ён проста паслаў запыт HTTP. Вы бачыце, што? І гэта толькі так жа, як што любы запыт HTTP пасылаецца. Браўзэр, Google Chrome або што-то, гэта ўбачым, што Дэвин-х спрабуе адправіць запыт HTTP, дапаможа HM няшмат. І, што збіраецца пайсці ўсе шляхі да сервера. Цяпер, сервер будзе мець РНР тут, або любы іншы мову. Гэтак жа, як у звычайным запыце HTTP. Гэта ў значнай ступені нармальны запыт HTTP. [01:27:31] І потым, сервер збіраецца сказаць, добра, Дэвин хоча мяне праверыць, ці з'яўляецца гэта абв123 ў базе дадзеных. Ідзіце да мадэлі. Мадэль кажа, што гэта не так. абв123 з'яўляецца добрым імя карыстальніка. І потым, вэб-сервер будзе выкарыстоўваць PHP, каб зрабіць некаторую форму файла. Гэта можа быць літаральна файл які змяшчае "так" у ім, ці "няма, ці нешта падобнае. Гэта можа быць любы файл. [01:27:54] Гэта можа быць, як я іду адправіць Дэвин карціну качка калі ён знаходзіцца ў базе дадзеных і адправіць здымак хамяка калі гэта не ў базе дадзеных. Гэта было б роду нямы, але ён будзе працаваць. ОК, так і Я пасылаю качку Дэвин. Дэвин атрымаў качку. А цяпер, хто збіраецца для апрацоўкі качку? Разумны частка Дэвин зноў, так JavaScript, праўда? JavaScript адпраўлена Запыт і JavaScript будзе атрымліваць запыт і інтэрпрэтаваць яго ў якой-небудзь форме. [01:28:22] І ў гэтым сэнсе, гэта будзе кажуць, добра, калі качка, то я добра. Калі хамяк, то я іду сказаць, няма, імя карыстальніка ўжо існуе ў базе дадзеных. Але, як правіла, вы не збіраецца адправіць качку. Вы збіраецеся адправіць што-то трохі разумнейшыя. І тое, што мы выкарыстоўваем XML. А зусім нядаўна, мы выкарыстоўваем JSON. JSON з'яўляецца проста JavaScript Object Notation, што у асноўным вы атрымліваеце ўвесь аб'ект JavaScript. І вы пакладзеце яго ў файл, гэтак жа, як што аб'ект CS50, што вы, хлопцы, не бачыў. Вы ставіце яго ў файл, і Вы адпраўляеце яго на Дэвин. [01:28:53] Такім чынам, у гэтым выпадку, я б стварыць аб'ект JavaScript і проста сказаць, існуе карыстальнік, так. Або карыстальнік існуе, няма. І адправіць яго назад да іх. І чаму JSON? Таму што чалавек, хто атрымлівае гэта збіраецеся выкарыстоўваць наяўнасць апрацоўваць запыт. І JavaScript працуе так добра, таму што гэта называецца JavaScript Object Notation. Дакладна? Такім чынам, ён можа проста выклікаць функцыю і атрымаць гэта прыемна аб'ект з адказу. І потым, ён будзе ведаць, ці з'яўляецца што карыстальнік знаходзіцца ў базе дадзеных або няма. [01:29:22] Такім чынам, вы бачыце, усё гэта прыходзіць разам у вэб-сервер, і тады адзін HTTP запыце і адзін адказ HTTP, і ўсё. Таму пераканайцеся, што вы, хлопцы, зразумець гэты заклік AJAX таму што гэта дапаможа вам зразумець усе паняццяў мы гаворым пра. [01:29:37] Дык вось прыклад Аякса з JQuery. І вось, мы робім з GET JSON. Такім чынам, мы не спрабуем атрымаць выява ката тут, ці качка. Мы спрабуем, каб атрымаць файл у фармаце JSON. І тады мы будзем чакаць да гэта зроблена, кропка зроблена. Гэта азначае, што я чакаю адказу. Гэта можа заняць некаторы час. Затым, вы ўбачыце маленькую нагрузку. Калі вы хочаце зрабіць, што ў вашым вэб-сайце. Так кропка зроблена, і што потым адбываецца, калі гэта робіцца? Вы праходзьце ў ананімны Функцыя, як мы бачылі раней. Таму што робіцца гэта падзея, проста як пстрычка мышы або любы іншы, для Jquery. Так вы перадаеце гэтай функцыі з дадзеныя, тэкст, статус і jqXHR. І ў асноўным, гэта толькі некаторыя зменныя што вы можаце выкарыстоўваць у далейшым мець статус запыту HTTP, дадзеныя, якія ён збіраецца адправіць назад да вас. Тады вы зможаце пасля інтэрпрэтаваць яго і рабіць нешта значнае з ёй. І калі гэта не атрымоўваецца, калі можа яна не справіцца? Ну, калі запыт HTTP дае Вы 500 ці нешта падобнае. Затым ён раскажа вам статус, які з ладу, што было, і ўсялякія рэчы. Вы павінны пераканацца, для апрацоўкі абодвух выпадках у адваротным выпадку праграма сыходзіць з розуму. [01:30:42] DAVIN: Дык што, так, гэта менавіта тое, тое, што вы бачылі на апошняй р-набору. Фактычны выклік AJAX знаходзіцца ў GET JSON. Гэта выклік. А потым, кропка зроблена, як ён правярае, калі ён паспяховы. Калі ён апынецца паспяховым, вы хочаце зрабіць што-то з дадзенымі. Вы атрымліваеце назад ад Дадзеныя запыту JSON. Гэта тое, што ты вернешся. Так што калі вы памятаеце з Р-мноства, Многія з вас былі як кранштэйн дадзеных я або што-то, кропка спасылкі або назва. Незалежна вяртаецца з гэтага JSON, незалежна ад поля ў гэтым аб'екце JSON, гэта тое, што вы атрымліваеце назад. Дадзеныя, што вы атрымліваеце назад. Тэкст стану, толькі тое, што дазваляе даведацца, што здарылася. І потым, jqXHR, вось толькі XML HTTP запыт JQuery. Вось толькі як аб'ект. А потым правал, гэтак жа, як Гейб сказаў. GABE: У нашай маленькай прыкладзе abc123 проста праверыць, што ў базе дадзеных ці не, дадзеныя будуць тое, што вы будзе рабіць, калі кропка дадзеных імя карыстальніка існуе, што і ваш PHP Генерацыя Вы, калі імя кропка дадзеных карыстальніка існуе, то Я збіраюся папярэдзіць, карыстальнік імем ўжо існуе. У адваротным выпадку, я проста хачу, каб Карыстальнік працягнуць запоўніўшы форму. ОК, бяспека, крута. [01:31:50] DAVIN: Хочаш, каб я? [01:31:52] GABE: Мне падабаецца гэта. Так што-то, што выглядае знаёмым. Мы амаль скончылі. Так што гэта проста прыклад вы, хлопцы, бачылі ў класе. Вы выкарыстоўвалі argv1 тут. Вось як аргумент каманднага радка. І мы MEM капіраванне, што у буфер памерам 12. Што тут праблема? Перапаўненне буфера! Таму што ў нас буфер памерам 12. argv1 можа мець памер у два мільярды. Мы не робім якіх-небудзь памежны праверку. Такім чынам, мы, магчыма, скапіяваць шмат памяці. І мы будзем асабліва дрэнна пра гэта. Што мы можам зрабіць, гэта вельмі, вельмі на ўвазе ў дадзеным выпадку? Так? АЎДЫТОРЫЯ: Частка двух мільярдаў рэчаў ўтрымлівае выкананы код, які вяртае [Неразборліва]. GABE: Цалкам дакладна. Дык вось выгляд рэч, што людзі выкарыстоўваюць для джейлбрейка iPhone, напрыклад. Так што такія рэчы. Таму што вы можаце проста зрабіць прыладу выканаць любы код, які вам падабаецца. Выправіць, так выпраўленне лёгка. Проста праверыць межы. Вы праверце нуль, таму што мы заўсёды правяраем для NULL калі мы маем справу з радкамі. І потым, вы бераце Даўжыня радка раней. І калі радок даўжыня дапушчальная радок даўжыня, якая знаходзіцца ў межах 0 і 12, то мы добрыя. [01:33:03] DAVIN: Калі вы не правяраюць NULL, рэальны хуткі, што адбудзецца? Гэта будзе SEG няспраўнасць. Чаму гэта SEG віна? Таму што вы тэлефануеце STRLEN на нуль. GABE: Так. Праўда ці хлусня, з дапамогай аднаго пароль добрай ідэяй. [01:33:19] АЎДЫТОРЫЯ: False. [01:33:20] GABE: False. Выкарыстоўвайце мноства пароляў, і вялікія, доўгія. Навясныя абразкі забеспячэння бяспекі. [01:33:26] АЎДЫТОРЫЯ: False. [01:33:27] GABE: False. Гэта нічога не значыць. Гэта проста значок. SSL абараняе ад Чалавек у сярэднім нападзе. АЎДЫТОРЫЯ: False. GABE: False. Такім чынам, усе тыя, з'яўляюцца рабіць. Nice. [Неразборліва] Хочаце пагаварыць пра гэта? Ваша чаргу. Дэвин: Тыпы нападаў, чалавек у сярэдзіне. Што чалавек у цэнтры нападу? АЎДЫТОРЫЯ: [неразборліва]. DAVIN: Калі вы пасылаеце HTTP Запыт, што яны маглі зрабіць гэта, ці не так? Але калі вы адпраўляеце HTTPS, яны верагодна, не будзе ў стане зрабіць гэта. Там шмат кропак ўздоўж вашага злучэння. Вы павінны маршрутызатараў. Вы павінны DNS-сервераў. Калі хто-то ў стане фізічна см, што вы адпраўляеце, дык хто-то зможа на самой справе атрымаць ад вас, кліент і сервер, і Каб даведацца, што вы адпраўляеце, гэта чалавек у цэнтры нападу. Такім чынам, каб бачыць тое, што вы спрабуеце атрымаць ад сервер, ці можа see-- горш, Вы маглі б быць у стане бачыць печыва ці нешта падобнае. [01:34:16] Так, напрыклад, калі Вы не карыстаецеся SSL, ён маглі б убачыць Ваш сеанс ID печыва. І гэта называецца зводу сесіі таму што ён бачыць свой ідэнтыфікатар печыва, і тады ён зможа перайсці да таго, што вэб-сайт і прыкідвацца табе. Таму што так жа, як у PHP, памятаеце, калі мы ўвайшлі ў сістэму, што мы робім? Мы ўсталёўваем ідэнтыфікатар сеансу, роўны ID. Так што ідэнтыфікуе вас. Вось чаму вы бачыце свой партфель а не чый-небудзь партфель. [01:34:38] Ну, калі я магу атрымаць тое печыва, то я магу ўвайсці на гэтай старонцы. І потым, я так і бачу вашы рэчы і пачаць купляць і прадаваць рэчы. Дык вось зводу сесіі. Але вы не павінны быць у стане to-- так што вы можа выкарыстоўваць чалавека ў сярэднім нападзе нават калі яны выкарыстоўваюць SSL. Але вы не павінны быць у стане. Калі яны выкарыстоўваюць SSL, Вы не можаце перахоп сеансу. Чаму? Таму што ўсё гэта ў зашыфраваным выглядзе, ці не так? калі ён зашыфраваны, і я ўсё яшчэ чалавек у сярэдні, я да гэтага часу атрымаць вашыя дадзеныя. Добра. Але ён зашыфраваны. Так што я не магу яго выкарыстоўваць. Так што гэта два. [01:35:09] Рэальны хуткі, Cross Site падробка запыту. Вось толькі, калі ёсць спасылка і што спасылка робіць што-то што вы не думаю, што гэта трэба рабіць. Так, напрыклад, калі спасылка было збіраецца купіць акцыі або прадаць акцыі, і вы не ведаеце, што. Вы націснулі на спасылку, накіраваў запыт, купіў або прададзеныя тое, што Вы не хацелі рабіць. Вось што. [01:35:25] Межсайтовый скріптінга, так вось, вы перадаеце ў праз пераменную Q, замест перадачы ў якой-то кошту, можа быць, Q, як імя. Такім чынам, замест праходжання Q роўных Дэвин ці нешта падобнае, Калі вы не выкарыстоўваеце HTML Спецыяльныя сімвалы, калі вы не пазбегнуць гэтага, каб пераканацца, што гэта Добра, тады я мог бы перайсці ў замест гэтага, скажам тут, што я кажу друку або што-то падобнае, то я мог бы прайсці тут выклік скрыпту. [01:35:51] Такім чынам, замест таго, каб проста атрымаць зменную, Я б тады выканаць гэты сцэнар выклік. Так ўнутры гэтага сцэнара тэлефануйце, што ён робіць? Дакумент кропка размяшчэнне, што збіраецца змяніць размяшчэнне дакумента. Так што я збіраюся перанакіраваць дзе-то ў іншым месцы. Гэта называецца дрэнны хлопец у Гэты прыклад, вельмі добра. Не мог думаць аб слове. І потым, што яшчэ горш тое, што я збіраюся каб затым ўсталяваць печыва, што некаторыя Пераменная мяне ёсць на гэтым сайце. Я збіраюся ўсталяваць яго роўным ў дакуменце кропка печыва. Таму, я збіраюся каб скрасці вашы печыва. І я збіраюся перанакіраваць некаторая інфармацыя на вэб-сайт што вы не павінны атрымліваць доступ да. І ўсё гэта адбываецца таму, што вы не пазбегнуць, што вы бачылі. Так? [01:36:29] АЎДЫТОРЫЯ: Так проста зрабіць гэта ясна, што гэта vulnerable.com, што ўразлівая да гэтага. Так што спасылка можа апынуцца на любой старонцы. Хто-то націскае на яе, ідзе на vulnerable.com. У вас ёсць печыва vulnerable.com. Скажам Facebook з'яўляецца ўразлівыя, таму facebook.com. У вас ёсць Facebook печыва. Што гэта робіць, вы будзе facebook.com, гэта адразу перасылак Вам badguy.com, але ў тым ліку інфармацыю печыва. Так што гэта хутка рэдырэкт, але ваш Facebook печыва ўваходзіць у якія перанакіроўваюць, і вось як яны [неразборліва]. GABE: Так, ёсць некаторыя вельмі сярэднія рэчы што людзі могуць зрабіць, калі ёсць такая. Напрыклад, калі Facebook дазваляецца каб усе змяніць імя карыстальніка, і яны не рабіць нічога санітарныя праверкі, так што вы можа ўставіць рэч JavaScript, што мяняе ваш вобраз на хамяка. І гэта ўстаўляе ж наяўнасць у кожнага, хто праглядае вашу старонку. Такім чынам, усе, хто праглядае старонку мае адно і тое ж імя карыстальніка. І таму, што гэта вірус, ён распаўсюджваецца ў геаметрычнай прагрэсіі. DAVIN: Мы будзем прапусціць апошні Адзін з іх, а затым мы зрабілі. Так што гэта проста яшчэ адзін прыклад. Так што гэта, што яны не пазбегнуць іх SQL табліцу. Такім чынам, вы можаце пакінуць яго. Такім чынам, вы хочаце, каб пазбегнуць рэчы. Гэта было ў папярэднім прыкладзе з межсайтовый скріптінга. На жаль, мы пабеглі трохі позна. Заўтра, прабачце! Заўтра мы павінны мець прыёмныя гадзіны. Так прыёмныя гадзіны ў Cabbot 8:00 да 11:00. У працоўны час строга для віктарыны пытанні.