[00:00:02] [Възпроизвеждане на музика] Хана: Здравейте, всички. Благодаря ви момчета много за излизане в отвратително времето за тест една преглед на сесията. Както вие знаете, викторина една е тази сряда. Така че ние ще отидем през куп теми. Дейвин: Хей, мога да кажа, нещо много бързо? Хана: Да, Давин ще да кажа нещо много бързо. Дейвин: Съжалявам. Просто много бързо, ако имате въпроси за теста, можете да отидете онлайн. Отиди до 2014 викторина един, за теста. Тя има логистика за къде да отида, когато да отида. Ако едновременно се записва, че сме ще има викторина грим в 5:30. Или ако ми изпрати един въпрос, Имате ли друг въпрос. Но 05:30 е гримът време в сряда. Но, ако имате въпроси, общи въпроси, онлайн има всички логистика. Така че проверете първо там. [00:00:47] Хана: Awesome. Така че тук е голямата списъка от теми че ние ще отидем до днес. Отивам да обхващат всеки един от C неща, които е, че първата колона. Така че на C неща, които ние покрита след викторина нула. Като се започне с свързан списък, който включва указатели. [00:01:05] Добре, така че видяхме това в последната сесия преглед, така че аз ще да мине през това е малко по-бързо. Просто вдигнете ръката си, ако искаш да забавят или справяне с нещо допълнително. Но ние използвате свързани списъци, защото ние започнахме в C с масиви. И масиви са страхотни, но проблем е, че те имат фиксиран размер. Свързани списъци ни позволят да създаваме динамично оразмерена структури от данни. [00:01:28] И ние имаме основните ни дейности, вмъкване, изтриване и търсене. И ние можем да направим посочете в лошия случай константно време ако ние просто го сложи в самото начало. Изтриване и търсене, най-лошия При голяма о п време. Така че отново, само за да флип чрез тези снимки, Знам, видяхме те за последен път, но ние искате да следите на нашата свързан списък Чрез проследяване на ръководител на нашата свързан списък. Защото ние знаем, че всеки един от нашите възли е просто ще точка до най- следващия възел в нашия свързан списък. [00:01:58] Така че това е начина, по който да следите. Въпреки, че това не са непрекъснати парчета от паметта, можем да ги намерите, като просто след различните стрелките. Тук е нашата структура за свързан списък възел. Видяхме това последно време. Ние разполагаме със структура възел. И тя има две свойства. Номер едно, реалната ценност, която искаме да съхранявате. В този случай, това е цяло число. Тя може да бъде низ, той би могъл е знак, каквото си искате. И след това, ние трябва да следим следващия възел в нашия свързан списък. Така че ще е по- указател към следващия възел. Ако бяха просто правиш търсене, както казах и преди, ще трябва да следвате стрелките надолу. Въвежда се, че ще следим от където останалата част от вашия списък е. И вие искате да пренасочите главата да сочи към нашия нов елемент, който В този случай е един, и след това един ще посоча към остатъка на свързан списък. Така че отново, знам, че това е малко по- малко повторение от викторина нула. Така че ние трябва да бъдем много внимателни за реда, по който ние направя тези соченето така че ние не Следете нивото на гърба на списъка. Добре, на всички въпроси, с само поединично свързани списъци? Awesome, OK, хладно. [00:03:06] Така че сега, ние ще тръгнем към нещо само малко по-сложно, двойно свързан списък. Така в допълнение към запазване следите на следващия възел, Ние също искаме да следите на предходния възел. И това ни позволява да, ако сме в някакъв момент в нашата свързан списък, не само отиде напред, но също превъртите назад. Защото както видяхме в с единична свързан списък, ако бяхме в един възел, и изведнъж, ние решихме, Всъщност, искам да отида да правото на възела преди мен, ще трябва да отидете на всички На връщане към главата и обхождане чрез докато не намери възела, което търсите. [00:03:35] Така че това прави нещата малко по-лесно, тъй като ние сме опитвайки се да превъртите чрез нашата свързан списък. Но това изисква от нас, за да следите на една повече показалеца, толкова повече един възел звезда. Добре, така че тук идва забавната част. Отиваме да практикуват изпълнение премахнете за двойно свързани списъци. Така че това е нещо, което е напълно честна игра за теста. Тя се появи на последните тестове. Така със сигурност се получава за кодиране малко в C. Не забравяйте, че с всички тази забавна PHP и JavaScript, ние все още трябва да се помни да направя C. Така че реша на тази ако се чувствате ръждясала. [00:04:12] Добре, нека да видим дали можем да направим това. OK, хладно. Така че ние ще се опитаме да редактирате точно тук, и се надяваме, това върви по план. Добре, има ли някой да ми даде едно предложение за това как трябва да започна? Единственото предположение, че съм решения е, че аз вече имат структура определен, една Показах на последната страница, на последния слайд. И аз съм съхраняване на главата на моя свързана Списък по някакъв показалеца нарича списък. Някой иска да ме започна? [00:04:42] Публика: Можете ли да създадете нов възел да се обадя в списъка? [00:04:45] Хана: Awesome, така ние ще създадем нов възел да пълзи през списъка. Харесва ми, че. Просто ще го наричаме показалка, ако това е ОК. А там, където би трябвало първоначално да започне? [00:04:57] Публика: Вероятно най- начело на списъка. Хана: Beautiful. Искаме да започнем от главата, която Казах ще се съхранява в списъка. Awesome. Дотук добре. И сега, нашата цел е да превъртите през списъка докато намерим възел с стойност н че искате да изтриете. OK? [00:05:13] Така че сега е частта, където ние искаме да превъртите през. Може ли някой да предложи начин, за да превъртате през? [00:05:19] Аудитория: A контур. [00:05:20] Хана: A контур. Аз го обичам. По-конкретно, можем да се опитаме малко контур. OK, и ние знаем, че сме постигнали В края на нашия списък, когато това, което? Публика: Когато стрелката е нищожна. Хана: Когато стрелката е нищожна. Красива, аз го обичам. OK, хладно. Така че съжалявам, ако ми очертаващ презрамки е вид пада от екран. Ние го върна. OK, хладно. Каква е следващата? [00:05:48] Така че ние знаем, че искате да изтриете възловата точка, която има стойност п. Така че нека да се намери случай, ние всъщност намерите нашия възел. Е, как ще мога да проверя това? Просто бих казал, ако показалеца, и след това, ако I искам да отида на стойност от показалеца, Аз просто се стрелка п, п е равно, параметърът които дадохме за тази функция, възел, който ние искаме действително да изтриете. Всички въпроси, докато тук? Добре. ОК, така че сега да се направи бърза снимка на дъската, за да се визуализира това. [00:06:24] Така че нека да кажем, че има нашата прекрасна възел. И тя има стойност, аз просто ще кажа, четири. И той насочва към следващия възел в нашия свързан списък. И няма нищо преди това. Така че ние имаме нашата предишна сочейки към нищо. В този случай, ние подчертаваме назад. OK, просто създаване ми свързан списък тук. И ние имаме списък, който сочи тази структура, за да се започне. Ще се направи още една за От съображения за изчерпателност. OK. Ще посоча това напред. И аз ще посоча, че един гол. Опа, съжалявам. Да, имам това назад. Направи го пак. OK, там отиваме. Добре, имам го. OK, тук е нашата картина. [00:07:21] ОК, така че ние искаме да помисли два случая. Първият случай е, ако на възел искаме да изтриете е в самото начало на нашия списък. И тогава, втория случай, че искаме е да се помисли дали това е някъде другаде. Разбирам, че това е напълно разхвърлян рисуване с цялото си изтриване, но да се надяваме, че ще се опита да изясним това с някакъв код. [00:07:40] ОК, така че нека да покрие случая където открихме нашата възел, и това е в самото започнете от нашия свързан списък. Някой да ми даде предложение тук за това какво Аз трябва да направя, за да всъщност да премахне нашите възел? Това е малко трудно. OK? [00:07:56] Публика: Трябва да се вземат на възлова точка, която ще бъде преди тя и да го насочите към който ще бъде след това, и да вземат възела, който ще бъде след него и да направи го насочите към възела, преди тя. Хана: Точно така. ОК, така че това е така where-- имаме два случая. Имаме случай, когато възел, че ние не търсим е предната част на списъка. OK, а след случая, който ви описано е по друг начин, нали? Това е някъде другаде в списъка. Така че ти каза, че трябва да се Посетете възела предишния, и да направи предишния възел сочи към следващия възел. Така че нека да кажем, че сме опитвайки се да извади пет в моя много разхвърлян рисунка тук. Ние искаме да се уверите, че четири вече сочи шест. Четири в следващите точки на шест. И шестте си предишни точки до четири. Това е нашата цел тук, нали? Това е, което аз си мислите що казах там. [00:08:56] ОК, така че нека се, че първото парче. Нека да направим за да имат Предишната показалеца предишния. Така четири следващия трябва да сочи към какво? Точно така, в този случай, шест. Така че ние трябва да кажем, показалеца, следващата. OK? Добре. Така че нека да се отървете от този грозен снимка и се опитват да се направи малко по-хубав един. Ние разполагаме със списък на главата тук. И който сочи към първия възел в нашата свързан списък, които казахме, е четири. Ето нашия втори възел, пет. И третият ни възел, шест. Просто се опитвам да се направи точно същото картина, само малко по-чисто. ОК, така че четири от следващо Първоначално сочи към пет. Пет на следващите точки на шест. Шест на предишните точки на пет. И петте си предишни точки до четири. Така че много по-хубав! OK, хладно. [00:10:04] Така че сега, това, което направихме точно тук, тази линия на код, който казва показалеца предишния следващата, така че какво означава това? Това означава, че ако ние не търсим най- пет, отидете на предишното възел, и това е следващата трябва сега точка до пет следващата. Така че по същество, какво е това е, че е изтриване тази стрелка и което го пропуснете точно над пет. Ясно ли е? Знам, че може да бъде малко по-оскъдна. Виждам, че някои директори кима. Това е добре. OK, хладно. Сега, това, което е следващата стъпка? [00:10:39] Аз съм нулиране на следващия. Сега, която другата стрелка трябва ли да се промени? Това точно тук. Шест предишния. Ние не искаме шест на предишния да посочат пет повече. Искаме тя да сочи към четири. Дали тази картина да има смисъл? Така че сега ние всъщност може да отнеме пет. Така че нека да се получи, че парче. Какво трябва да направя преди да изчисти шест на предишната до четири? Някакви идеи там? [00:11:14] АУДИТОРИЯ: Безплатен възела между ги чрез създаването го присвоява? Хана: Cool. Определено, нашата крайна цел е ще бъде да се освободи възела. Така че ние можем да направим, че точно тук. Free показалеца. Абсолютно. Но дори и преди това, нека just-- нашата цел полето тук е да зададете на показалеца следващия Предишната равна на показалеца предишния. Знам, че това е все покрито. OK, нека take-- готино. Може ли всеки, вижте тази долната линия? Или това е супер малък? [00:11:50] Така че, преди да се изпълни тази линия тук, искаме за да се уверите, че показалка следващия не е нищожна. Защото ако показалеца следващата е нищожна, каква грешка ще получа, когато се опитам да референтни нулев указател? Публика: Seg вина. Хана: SEG неизправност A, красива. ОК, така че ако това не е нула, тогава можем да възстановите. И ние имаме шест точка отново до четири. Въпроси до този момент? Да? [00:12:17] Публика: В първата си ако изявлението, което направи означава да имат стрелка На следващо място, или [недоловим]? Хана: Имах предвид показалеца стрелка п. Така че основно, това, което аз се опитвам да направя се каже, текущия възел, че аз съм итерации над, текущия възел, че Гледам, аз съм съхраняване на показалеца. И аз искам да знам показалеца стойност, която в този случай е п. И аз искам да видя, е възела, което търся за възела, аз съм за цел да изтриете? Значи затова имаме тук показалеца п. [00:12:47] Публика: Така стрелката ще до п, можете да зададете стойност и да го съхранява в един възел, наречен п? [00:12:55] Хана: Така че това е като да съм преминавайки през тази свързан списък и посочи пет. Ако искате да получите тази стойност, ако Искам да получа този номер, 5, Аз трябва да направя показалеца стрелка п. Cool? Да. [00:13:07] Публика: е п името на променливата? Хана: Да. Така че, ако ние обърнете назад една слайд, п е името от стойността вътрешността на възел в нашия свързан списък. И аз знам, че може да се получи малко малко объркващо, защото ние също Призоваваме нещото че искате да изтриете п. Така че това е, когато това един ред идва. Така ли? [00:13:27] Публика: Какво имаш [Недоловим] как работят? A показалеца [недоловим]? [00:13:35] Хана: Разбира се. Възможно ли е да говорим about-- коя линия? Публика: Последният ред [недоловим]. [00:13:44] Хана: Разбира се, OK. Така че нека да погледнем картината в За да се опитам да обясня това. Съжалявам, за камера, въпросът е можем да обясним на показалеца стрелката показалец предишния. ОК, така че нека да кажем, че сме в пет и нашата цел е да изтриете пет. Така показалеца следващата, която от тях три възли ни дава това? Това ни води до шестия възел, нали? [00:14:10] ОК, така че сега ние искаме За шестте си предишния. OK? И ние сме нулиране това да бъде равен на четири, които се случи да бъде пет на предишния. Знам, че е супер Трудно е да се следи. Аз наистина ви препоръчваме да рисувате картинки ако получите въпрос като този. Да? [00:14:30] Публика: е причината, че ние не разполагаме с [недоловим]? [00:14:37] Хана: Точно така. Така че въпросът е, защо ние не трябва да се провери тук? Защо не трябва да се провери, че показалка предишния не е равно на нула? И това е така, защото ние сме вече отделя случаят, когато показалеца в самото начало. Много добър въпрос. Всичко друго по този въпрос? OK, хладно. Така че нека да го довърша. Почти сме там. [00:14:59] И какво, ако това е в главата? Ами ако вместо Опитвате се да изтриете пет, ние всъщност исках да изтриете четири? Какво ще трябва да направя? Ами, аз искам да изчисти главата ми към какво? Го извика навън? Публика: това след него. Хана: Beautiful. ОК, така че ние искаме списък, който се сочи какъвто и да е нашата показалеца следващия възел е. Good. И само за пълнота на саке, бихме искате да проверите, че толкова дълго, колкото нашия списък не е нищожна, толкова дълго, колкото нашия списък не е празен, след като искаме да зададем Предишната ни равна на нула. Въпрос досега? Една крачка from--? [00:15:53] Публика: Би ли било, ако Списъкът не е равно на нула? [00:15:55] Хана: Да, вие сте напълно прав. Толкова съжалявам. Има списък не е равна на нула. Awesome. Опитвайки се да донесе всичко това на екрана. Това е вид на падане. Съжаляваме, момчета. И накрая, но не на последно място, всички ние трябва да направим, е завръщането. OK. Това беше много натъпкани в наистина бързо. Вземете една секунда, за да гледам това свърши. Кажи ми, ако имате някакви въпроси. Така ли? [00:16:20] Публика: Ако списък е в главата, then-- чакаме, няма значение. [00:16:26] Хана: OK, добра. Така че това е, ако в списъка е начело, ние го махна да каквото и да добавя. Така ли? [00:16:31] Публика: Можете ли да обясните първият, ако изявление отново? Ако показалецът да п е равно на N? Хана: Разбира се. Така че нашата цел на цялата тази функция е за изтриване на възел, който има стойност п. Така че, ако открием, тъй като ние сме итерации чрез нашия списък, възела с стойност н, това е този, който искате да изтриете. Така че всички заличаването се случва вътрешността на тази голяма, ако изявление. Има ли, че има смисъл? Cool. Така ли? [00:16:59] Публика: Може би просто не мога да видя го, но не можете да се наложи ред за преглеждане на списъка? Хана: Awesome. Нека да донесе това до малко, и ние ще се хвърлят, че точно в дъното. Може би на борда щеше да е малко по-добра идея. Е, как ще се преместя показалеца напред? [00:17:17] Публика: Pointer се равнява на показалеца плюс един. [00:17:20] Хана: Beautiful. Така, че ни позволява да продължи през итерации. OK. Публика: Няма ли да има един друг? Хана: Още един път? Публика: Няма ли да има един друг, след като голям стар, ако Декларация [недоловим]? Хана: Коя част? Съжалявам. [00:17:38] Публиката: чието преодоляване, не би следвало да съществува друго? Хана: Абсолютно може да има друго. Защото имам право връщане там, вие не се нуждаете от друго. Но да, добър въпрос. OK, нали? Публика: Можем ли да мислим за показалка че се движи през списъка като приема върху стойността на всеки възел в списъка? Или трябва да мисля за него като сортиране на външното в списъка? [00:18:00] Хана: Всеки един е добре, мисля. Начинът, по който си го представя е Аз казвам, OK, аз съм показалеца. И това ми е. Това е ръката ми. Отивам да сочи към различното неща, които искам да превъртите през. Първо, аз ще посоча към началото на списъка. И това ми казва, че съм Ще посочим четири. И така ме, като е извън списъка, Мога да посоча на всеки един от тези елементи. Така че аз мисля за себе си като показалка. Публика: Така че, когато изтриете един от тези елементи, изтриете себе си, така да се каже. Хана: Точно така. Така че можете да изтриете нещо Ако пък посочи. Така че в примера, че видяхме къде сме Опитвате се да изтриете пет, когато съм сочещи към пет, Искам да изтриете нещо, което аз съм сочейки. Точно така. Да? Публика: Не сме се погрижили за случай, в който п не е в списъка? Хана: Ако N не е в списъка? Всичко, което ще се случи е, че си ще превъртите през и обхождане чрез, и след това, ти започваш да стигнем до показалеца е нищожна, и след това започваш да се направи. [00:18:48] Публика: Значи имаме за да се върнете ли нещо? Хана: Ние може. Начинът, по който, ако е определено това функция, аз само да кажа, че той се връща анулира независимо. Но бихте могли да имат нещо като се върне цяло число, и да го върне отрицателна 1, ако не успее. Нещо такова. Въпроси with-- нали? Публика: [недоловим]? Хана: Съжаляваме? Публика: [недоловим]? Хана: Разбира се. Така че това е actual-- Щом направи цялата тази работа за преместване всички тези стрели, цялата ни Целта е да се отървете от възела че ние не търсим. Така че в този случай, освобождавайки показалка, ако аз съм като посочи пет, това е като да изтриете тази средна възел. Това е безплатно показалеца част. Които имат смисъл? [00:19:29] Публика: Така че, дори помислих Не сте [недоловим]? [00:19:31] Хана: Така че ние приехме в началото имахме списък, който беше already-- те е поставил тази заедно. Така че, за да се изгради тази списък, те сигурно [недоловим]. Cool. Всичко друго с това? Да? [00:19:46] Публика: Какво става, ако в списъка не е равно на нула линия? [Недоловим]? Хана: Точно тук? Публика: Да. Хана: OK, всичко, което правя е аз съм просто като се уверите, че преди да се опитам да изброя и сочен, преди да се опитате да влезете в предишното, Искам да се уверите, че това не е нищожна, така че не се получи повреда на сегмента. Cool. [00:20:08] OK, знам, че това е доста много, за да се измъкне сам. Така че този кадър ще бъде направени достъпни за вас. Така че можете да минете през него по-подробно. Да? [00:20:17] Публика: Защо в списъка [недоловим]? Хана: Разбира се. Така списък наистина сочи към този елемент точно тук, първият елемент в списъка. Така че не може да има по-стар. Да? [00:20:31] Публика: Дали точката на показалеца на същия адрес в паметта? Има ли за едни и същи адрес в паметта като възелът че тя да сочи на? [00:20:40] Хана: Да, той изтъква до този възел в паметта. [00:20:43] Публика: Право, така когато [недоловим]? [00:20:47] Хана: В известен смисъл, да. OK. Добре, нека да преминем заедно с това. И ако имате още въпроси, задържат дълго в края, и ние може да мине през нея отново. OK, хладно. Сега, ние се да продължиш напред хеш таблици, опит и дървета, които имаш супер запознат с в р-зададете пет, правопис. [00:21:04] Така че хеш таблица е само един масив с единично свързани списъци или двойно свързан списък, идващи от него. Така че ние имаме някаква на асоциативен масив. И как ние знаем кои от тях масиви кофи да получите в, ние използваме хеш функция. Така че в този случай, може ли някой Предполагам, че това, което хеш функция ще бъде само на базата на някои на входа и на изхода? [00:21:31] Публика: Писмо брой азбуката. Хана: Точно така. Той просто ги поставя в азбучен ред. Всичко, което започва с А се поставя в първата кофа. Всичко с B се поставя в Вторият кофа, така нататък, и така нататък. Awesome, OK. И хеш функция е всеки функция, която използва с една дума и ще ти кажа какво кофа принадлежи инча Така че, който влизане в нашия масив принадлежи инча [00:21:55] Така че всеки път давам хеш функционира една дума, тя трябва да ми каже същото поставите всеки един момент. Така че, ако ние използваме хеш функция от предишния слайд когато ние сме сортиране от Първата буква от азбуката, всеки път давам хеш функция "ябълка" тя трябва винаги да ми върне 0. Така че, ако имам една ябълка да се сложи в моята хеш таблица, ако дам "ябълка", за да ми хеш функция, тя трябва да се каже, проверете го в кофа 0. Ако аз съм гледам за Apple в моя хеш таблица и аз казвам, при които може ябълка на живо, да се обърнете към хеш функция. И тя казва, отидете в кофа 0. Разбра ли? Въпроси с хеш функции? Awesome. [00:22:34] Тук е малко по- подробно обяснение от това, което може да изглежда хеш функция харесват. Добре. Сега, проблемът с хашиш функции е в един идеален свят, щяхме да имаме само един нещо във всяка кофа. Но в действителност, има не само една дума който започва с А. Там не е само една дума, която започва с Б. Така че В този случай, ако ние изведнъж се "Бери" и ние искаме да го кажем в нашата хеш таблица, и ние виждаме, о, не, банан е вече има, какво ще правим? [00:23:03] Е, ние имаме две възможности. Първият вариант е линеен сондиране, което просто означава да намерим следващата празна кофа. Отиди намерите следващия празен влизането масив. И просто сложи "Бери" там. Така че аз знам, че е трябвало да отида с банани в кофа един. Но просто го сложи в кофа три, защото кофа три е празна. Друг вариант е вероятно това, което изпълнява в р-набор, където можете имаше отделна верижното. Така че всеки един от вашите кофи, всеки един от вашите елементи на масив, не само притежава една думи, но в действителност притежава указател към списък с думи. Така че, ако сте имали банан в хеш таблица и изведнъж искаха да добавите Бери, няма проблем. Просто добавете Бери за да края, или да началото, на вашия свързан списък. OK, страхотно. Въпроси с хашиш маси, преди да продължи? [00:23:58] Добре. Дървета и се опитва. ОК, така че това е още една опция за прилагане на речника. Може да са направили опит. Така че това е специален вид дърво, което държи като маса хеш на много нива. Така ще видите на снимката когато имате масив, който сочи към един куп масиви тази точка да куп масиви тази точка да куп масиви. И ще видим какво точно, че ще изглежда като на бъдеща слайд. И по-общо, дърво е само структурата на данните в който данните са организирана в някаква йерархия. Така че, когато видяхме имаме някакво разбиране на най-високо ниво, а следващото ниво, на следващо ниво, а следващото ниво. Така че това е може би най-ясно с някои специфични примери. Така че тук е нашето дърво. Можете да видите, че тя има конкретни нива че започваме с това корен възел, една. И ние можем да слезем през нашето дърво. [00:24:50] A двоично дърво е определен вид дърво. И само спецификацията за двоично дърво е, че всеки възел има най-много две листа. Така че вие ​​няма да видите всеки на тези възли имат три или четири или някакъв друг брой листа. И след това още по-конкретен е двоично търсене дърво където всеки възел от ляво на възел ще са на стойност по-малка. И всяка стойност на полето ще бъде по-голяма. Така че, ако сте въвели 44 е в нашия корен, наляво, 11, 22, и 33 всички са по-малко от нашия корен. И на правото са всички номера bigger-- 66, 55 и 77. И този имот е вярно на всяко ниво от дървото. [00:25:37] Така че, когато слизат 22, 11, и 33, все още 11 е по-малък от 22 и 33 е по-голям от 22. И това го прави по-лесно да търсите защото, ако ние не търсим редица, ние знаем точно кои клон да следват надолу. Така че това трябва да ви напомня за Малко от двоично търсене. Така ли? [00:25:56] Публика: Така че, когато сте описващ двоичен, Ти каза, че има най-много два листа? Хана: MM-HM. Публика: Възможно ли е да има по-малко? Хана: Да. Така че нека да кажем, например, можете не са имали още няколко неща и не сте могли да запълнят цялата си листа, това е добре, ако някой има една. OK? Awesome. Всякакви други въпроси, свързани с дърветата? OK. [00:26:16] Върнете се в нашите опити, както аз говорех за малко по-рано, как ние имаме тези масиви на няколко нива. Така че в този случай, ние започваме в горната част. И ние можем да следват даден дума надолу. Така че нека да кажем, че искаме да търсят Тюринг. Започваме T, го последва надолу на масив, който съдържа U, и да го следват, докато ние достигне тази малка делта които ни казва, да, ти намери една дума. Clear на опит? Всичко, за да отида там? Да? Публика: Има ли символ на делта трябва да заемат място в опитате? Хана: Да, така че не задължително е необходимо дори да бъде делта. Но ние трябва по някакъв начин да кажете ни computer-- съжалявам, така че ние знаем, че TUR не е дума. Защото нека да кажем, че не е имал тази концепция на Delta, тази концепция поздравления, ти намери една дума, тя ще мине през и обхождане T-U-R, и след това казват, страхотно, аз го намерих! Тя трябва да бъде дума. Но това наистина не е. Искаме цялата Тюринг да бъде дума. Така че ние трябва да имаме нещо в край, който казва, поздравления, намерили законен дума. Публика: Така че, ако сте имали подобни 26 букви в азбуката, би всъщност трябва 27 ключа от вашата опитате? [00:27:24] Хана: Awesome, да. Така че всъщност, мисля, че ще бъде на следващия слайд. Ta-га! Къде, ако имате възел във вашия опит, вие сте ще има 27 деца, а не 26. Всички въпроси с това? Така ли? Публика: Защо се опитва да отнеме до толкова много пространство [недоловим], както и да отидеш? Защо се счита за [недоловим]? Хана: Разбира се. Хайде да се върнем. Въпросът е, защо са си опит, така че много по-голям от нещо като хеш таблица. Така за всяка от тези нива, дори ако те не са изготвени тук, трябва да имаш всичките 26 символи. И причината, че не можете кажа, о, но като за Тюринг, I Не е необходимо да имате някои от тези, същите неща на нивото на U. Е, ако изведнъж искате да добавите нещо, което беше като T-H, вие ще трябва да имат Възможност за добавяне на тази дума. Така че за всяка една буква, започваш да има да има куп масиви, идващи от него. Така че можете да видите как тя ще получа наистина голям, много по-бързо. Всякакви други въпроси? Добре. Така ли? [00:28:29] Публика: Когато са си опит по-бързо от хеш таблици? [00:28:33] Хана: Когато са си опит по-бързо от хеш таблици? Така че, ако имаше наистина лоша хеш функция. Така че нека да кажа, аз бях като, тук е вашият хеш функция. Без значение какъв е дума ли да ми даде, аз съм винаги Ще го поставя в масив влизане 0. И така, ние в крайна сметка само с пускането всичко в една голяма дълга свързан списък. И така, една справка време ще отнеме най-лошия N, ако това е в самия край на нашия списък. С опит, ние просто трябва да превъртите чрез буквите в думата. Така че дори и да добавя един куп повече думи на нашия опит, тя няма да ни отнеме по-дълго да намерите конкретна дума. [00:29:09] Всичко, което трябва да направите, е, за Например, в този случай, нека да кажем, че търсим увеличение, ние просто ще трябва да обхождане Z-О-О-М, четири букви. Така че това е само дължина на думата увеличение. Няма значение колко повече думи, които представяме в този опит. Ние винаги може да го получи в тези четири стъпки. Awesome. Да? [00:29:32] Публика: Така [недоловим] е масив, нали? [00:29:34] Хана: MM-HM. Публика: Ако сте търси [недоловим], ще трябва да мине през Вашата масив да намерите [недоловим]? Хана: Разбира се. Публика: Това не е ли да отнеме повече време? Хана: Ако аз отивам да кажа, че моята масив е винаги ще бъде A, B, C, D, E, F, G, бла бла бла, Така че, ако винаги знам, че е по същия точния ред, ако винаги знам, че е по азбучен ред, Мога само да кажа, O е номер така и така в азбуката. Просто отидете на това място. Защото си спомням, с масиви, можем да имаме достъп всеки елемент на тази масив в постоянна време, ако знаем къде търсите. Така ли? [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, е ще бъде проверката марка, или на делтата. Нещо друго? Awesome. Загубих си пространство. OK, хладно. [00:31:31] Така че ние вече засегна това. Но големият компромис между опита и хеш таблици е, че се опитва да регламентират по- теория, постоянно гледам пъти, но използват цял ​​много памет. Добре, сега имаме леко по-малко сложни структури, и ние ще се прави с C, и ние ще се премести на дясно по. [00:31:49] Така стекове, видяхме това в лекция, където можете има нещо като купчина от тави където последното нещо, което ще ви постави в стека става да бъде първото нещо, което да излети. Така че това е, което наистина определя комин е, че последното нещо, което ще ви постави в ще бъде първият нещо, което можете да излети. И терминологията, която ние използваме ако ще да се сложи нещо, ако ще да добавя нещо към нашия стак, което наричаме това бутане. И ако вземем нещо разстояние, ние го наричаме пръкват. И ако ще да приложат комин, ние Трябва да сте сигурни, за да следите размера и капацитета. Така общият брой на елементи можем задръжте и текущия брой на елементите че ние провеждаме. [00:32:27] И много по същия начин, ние имаме опашки. И единствената разлика е вместо с купчини, казахме последното нещо, което ще се постави върху е първото нещо, което да излети. Така че с опашки, на Първото нещо, което ще се постави в ще бъде на Първото нещо, което извади. Така че това е като, ако сте всъщност се редят на опашка в магазина и сте се помогна, След това първият човек в съответствие трябва да бъде първият човек, който да се помогне. Така че би било опашка. [00:32:52] Така че ние трябва да следим на размер, капацитет, и главата, тъй като ние сме ще вземе всички на разстояние от предната на списъка вместо на гърба. Въпроси за това? Всякакви C въпроси, които ви притесняват? Структури от данни, всяка от които забавни неща? Добре, хладно. Така че аз ще го предаде на Алисън да скочи в някои по-програмиране. [00:33:14] ALISON: О, ще видим. Ще видим колко добре правя тук. OK, аз ще се опитам да летя чрез тези неща, момчета. Хана мина много в дълбочина на всичките си неща. Аз ще се опитам да дам ви бърз преглед взрив така че можем да стигнем до Дейвин с всички забавните JavaScript и сигурност неща че може би всъщност искам да чувам повече за. [00:33:33] OK, като каза Хана, ако имате някакви въпроси, Отивам твърде бързо, моля, да ме уведомите. Аз ще отговоря на въпроса, както е необходимо. Така че, за да започнете, ние ще започнем с може би един от най-първите неща научихте с уеб програмиране, разрешения. Така CHMOD, вие трябва да сте били майстори в това с всички в мрежата програмиране, които сте правил напоследък. Това е основно само една команда като се променят разрешенията или разрешенията за достъп на нашите файловата система предмети. Разбира се, за да всъщност виж това, ако сте като взе никакви проблеми с тях по време на проблемните комплекти, може да сте използвали LS-L, който е дълъг, за да получите вида на изглед, подобен на този, където всъщност виж всички разрешенията за даден файл. [00:34:16] И наистина, просто щяхме да отидем през доста бързо просто доста много какво означава всеки един от тях. Така можехме д точно тук, които Просто означава директория. Очевидно точно тук, ние виждаме rwx, които разпознаваем, записваеми и изпълним. Те могат също така да бъдат представени като бита, които ще влязат в на следващата страница. Така че всяка триада, че видяхме тук, така че е три тройки. Ние rwx, R нищо х и R нищо Х за тази първа файл. Това е тази обща структура. [00:34:49] Така че ние имаме някаква директория. Ние имаме някои потребителски групи с тези разрешения. Някои група, която има тези права, и един свят, който има разрешение за това. Можете да мислите за тях като триада. Можете да мислите за тях като три бита. Така те могат да притежават ценности навсякъде от 0 до до 7, което е и причината понякога ние трябваше да правите коригират 600, вместо да коригират RW каквото. Ще разгледаме един пример там. Но в основата си, можеш да се сетиш от тях, както е било просто rwx, или може да се мисли за тях като за някои номер, на който тази първа тук Представител е на няколко между 0 и 7, този втори Представител е на няколко между 0 и 7, а третият представлява число между 0 и 7, OK? [00:35:38] R е на стойност 4. w има стойност 2, и х има стойност 1, което е защо тази Разрешение тук ще се коригират 700. Тъй като в този случай тук, то ние казва са първия бит там се светна. Така че ние имаме 4 за четене. Вторият бит е светна за W, което е 2, така че сега имаме 6. И третият бит е светна за х, което е 1, така че ние се седем. И разбира се, нашата група и нашия свят са всеки 0. Така че това е и най- еквивалент на CHMOD 700. И аз определено ще се опитам да разбере Свързването между тези. Аз не съм сигурен дали го има излезе на викторина, преди, но би било по- въпрос, който може да попита. [00:36:18] Само малко ще дори по-навътре коригирате тук, тук е много общо структура на коригирате повикване. Така че, разбира се, ние сме CHMOD тук. Позоваването, какво, това се отнася до това, Кои сме ние като тези разрешения за или които вземаме тези разрешения далеч от. Така че ние имаме тук в разрешенията, като ние дадохме ви CHMOD плюс х, както ще видим скоро. а просто означава даде тези специфични разрешения за всеки. Дайте ги на всички. Така че може би ф плюс х или г плюс х или о плюс х или множествена от него. Така че първата част е винаги Ще бъде препратки. Кои сме ние като тези разрешения да, или които са ги отклони от тяхното? [00:37:03] Вторият е оператора. Така че вие ​​сте най-вече разгледани плюс. Това дава разрешения за който сте ги даде, като има предвид, минус, логично, ги премахва. Така че нищо прекалено ужасно там. И тогава един режим в друг това, което говорихме с четене, писане, или изпълнение. Така че един плюс х означава даде изпълним разрешения за всеки. И след това, разбира се, на която определен файл или директория. OK? Всеки добър с коригирате? Не е толкова лошо? [00:37:37] ОК, така че HTML, всеки от вас са достатъчно възрастен to-- MySpace възраст? Изпратих този раздел ми, и буквално половината от хората Погледна ме, че съм луд. И аз бях като, момчета, ние не сме толкова стар. Хайде. Така HyperText Markup Language, това е честно просто начин за вас за да се покаже някои неща в интернет. Така че това е език за маркиране. Това не е скриптов език. Няма никаква логика в това. Това е просто, за да промените се показва начин нещо. ОК, така че това е важна разграничение да се направи. Той се счита за един език за маркиране, Не скриптов език. [00:38:12] Така че тук ние имаме нашите HTML тагове. На този слайд вероятно повечето от такива, че трябва да сте запознати с и да бъде наистина комфортно. Така че очевидно, имаме нашата HTML тагове, които обозначава, че всичко в Между тях ще бъде HTML. В момента има някаква връзка, която очевидно ще ви дам линк към външен уеб страница. Някои заглавия, в рамките на главата ни тук. И ние имаме нашето тяло с h1, който е глава, така че това ще стане хубаво и смели и по-голяма. И след това, ние имаме някои р, който е един параграф. Може би трябва да знаете и да бъде запознат с нещата като как да вмъкнете изображение, са Има ли някакви други класове колекторни? Аз определено ще бъде удобно с Div. Така че те имат по-голяма част от етикети че трябва да сте запознати с. Но, разбира се, както с всичко в CS 50, списъкът не е изчерпателен. Така че не забравяйте да се реша на това. [00:39:08] CSS, така CSS, ако някой от вас да гледате семинарите ми от преди две седмици, в действителност е просто начин да оформите вашата уеб страница? ОК, така че ние имаме някакъв език за маркиране. HTML, която се грижи за точно текста и къде може да е на страницата. Но CSS е наистина това, което го прави доста. Може да имате тези във вашия HTML файлове, но тъй като ние ще говорим по-късно, Почти съм сигурен, че може да бъде следващия слайд, тя е често срещана практика, и в действителност практика, която ние наистина насърчава, за вас, за да бъдат разделени, когато ние говорим за MVC и че цялата парадигма. Това е наистина това, което тази подхранва. [00:39:42] Така че CSS е просто начин да се направи нещата изглеждат доста. Нещата тук, като тяло и #title и .info, те се наричат ​​селектори и какво те се подбират специфични неща в рамките на вашия HTML файл и се прилага независимо от стила, каквото и сортиране на нещата, които искате, към този конкретен елемент от вашия уеб стр. Така че тук, ние имаме цвета на фона и цвета и семейството на шрифта, който се е прилага каквото и да е в тялото. Така че, ако ние отново погледна тук, тя няма да се прилага за титлата. Тя ще се прилага само за това, което е в тези телесни селектори, OK? [00:40:22] Със заглавието тук, това е щеше да бъде едно и също нещо, цвета на текста в синьо само ще да повлияе на това, което е в рамките на селектори титлата. Както и информация тук, Текстът ще бъде розово, каквото е информация, която е точно тук. Така че единственото нещо, което Би било розово на тази страница е дата, понеделник, 17 ноември, 2014. ОК, така че CSS е просто начин да се имат по-голям контрол over-- нали? [00:40:48] Публика: Защо трябва за използване на хеш с титла? [00:40:51] Хана: Следващ слайд, обещавам! Ние ще стигнем до там. Така че това е защо ние трябва да използваме хеш. Така селектори вземат на три основни форми, които ние говорим с Вас момчета наоколо. I fyou искате да научите повече, има много там. Има голяма CSS документация. Има име на етикет, който трябва да направи само с нормалните си маркери в HTML. Така h1, P, Разделение, h2, тези различни неща. И само ние можем да назовем тези, както е. Така че, както виждаме тук с тялото, това е нормална таг. Така че ние можем просто да сложи на тялото, когато ние говорим в нашия CSS файл. [00:41:26] Със заглавието, цялата причина ние получите този хеш е ние имаме това, което е счита за самоличност. Така че за самоличност трябва да бъде винаги уникална в рамките на вашата HTML страница така че, когато сте отнасящи се до него, знам, че сте само позовавайки на един конкретен нещо. Така че в този случай тук, с нас h1 тук, CS 50 преглед на сесията, имаме ID на заглавието. Така че, за да се отнасят само до това парче от нашия HTML, което правим заглавие хашиш. Само по условие, IDs са обозначени с хашиш пред тях. По същия начин, ние виждаме инфо тук е клас. И така клас с CSS е определена като точка клас или точка, за каквото и да е клас. Така че в този случай тук, това е информация. [00:42:10] Така че аз го вземе обратно. И двете от тях ще бъдат розова за нашия CSS тук тъй като и двете имат клас на информация. И в нашия CSS файл, ние определиха че всичко с клас на информация трябва да бъде розово. Това прави ли смисъл? Да? [00:42:27] Публика: Ако ви се налага да се направи всичко в бяло на тялото, и тогава ще се опита да направи нещо вътре в нея синьо, би, че да доведе до проблеми? [00:42:34] Хана: Така че CSS е Cascading Style Sheets. Така че каквото и да е към отдолу ще има предимство. Така че, ако не се направи нещо с тялото, и да направите всичко, бяло, а по-късно да промените заглавието или да промените текста в тялото, ще се записват, че. Така че всичко, към отдолу ще има предимство. Да? [00:42:56] Публика: и документи за самоличност са уникални, но класове може да бъде повече? Хана: Точно така. Така IDs трябва да са уникални, и класове може вижте колкото се може повече неща, колкото искате. Всякакви други въпроси? Да. [00:43:09] Публика: [недоловим]. Аз съм се чудех дали че има значение. Хана: Съжалявам, Какъв беше въпросът? Публика: Има малка "F" и капитала на "Е." Хана: Така че разликата между малките "F" и капитал "F" Не трябва да направи разликата. Така че "F" ще бъде 15 или иначе. Cool, нещо друго? Всеки добър, CSS? Да? [00:43:30] Публика: Съжалявам. Може ли да има класа и ID? [00:43:35] Хана: Да, можете. Нещата могат да имат и клас и документ за самоличност. И аз силно препоръчвам изпитване на тези по своему. CSS ще научите най-добре просто като прави нещо, много проста уеб страница, изготвяне на някои CSS, и просто виждайки как те си взаимодействат. И вие ще получите много добра, интуитивно усещане за това как тя работи. [00:43:56] OK, всеки добър с CSS? Вие всички ще направим красиви уеб сайтове с CSS сега. Добре, най-добри практики, просто неща, които да имате предвид, неща that-- това е защо ние се скачи ви за дизайнер и какво ли още не. Така затвори всичките си HTML тагове. Така че, ако имате отворена тялото, трябва да има своя край тялото. Ако имате отворена точка, трябва да има тясна точка. Проверете, за да видите страницата си валидира. Вие, момчета, трябва да са много добре запознати с тази от р-зададете седем с CS 50 финанси с W3 валидатора. И както казах и преди, един от големите ни парадигми е разделяне на вашия стил с CSS от вашия маркиране, което е HTML. И след това, разбира се, ние имаме този велик XKCD тук. Уау, комично облекчение! [00:44:38] OK, TCP / IP. Между тях и HTTP, основно те са двата протокола. Така че можеш да мислиш от тях като набор от правила които управляват как нещата премести в интернет. Така че управлението на преноса протокол, или на интернет протокол, е просто начин да се уверите, че данните получава къде отива и че ние знаем, ако ние някога липсващи данни. Така че, ако вие смятате, обратно на лекцията Преди няколко седмици с David където имахме четири пликове, те всички преброени като един от четирите, две от четири, три от четири, четири от четири, това е просто набор от правила. Ние казахме, OK, когато сме изпращане на повече от един пакет, ние ще изброи тя с какво число е и колко общо, че потребителят трябва да получи. [00:45:19] И това е само казвам всеки, който получава данни дали те са придобили всичко или ако нещо се изгуби по пътя. И те трябва да поискат той отново. Това в действителност е просто набор от правила. Ето как можете да мислите за него, OK? И също така, в него се посочва пристанище, което вие can-- Знам по време на лекцията, те трябваше цял списък от портове. Но ние не ги има тук в момента. [00:45:41] Така хипертекст трансфер протокол е, отново, това е друг протокол. Така че това е друг набор от правила които ръководят, в този случай, как се прехвърля хипертекст. Така че просто позволява браузъри да се говори за уеб сървъри. И както казахме тук, това е като човешко договаряне. Това е просто начин да се управлява как уеб сървъра е ще си взаимодействат с вашия браузър. И ние имаме само няколко примера. Ние имаме някои искания тук където GET е метода. Имаме HTTP 1.1, която е протокол версия за нас. И тогава, домакин, което е това, ние всъщност опит за достъп. И тогава, както виждате тук, ние получите някои отговор с тази 200 OK като нашия код HTTP отговор. Ние имаме голям списък Отивам да спра за една секунда че вие ​​трябва да се запознаят с. И ние имаме този тип съдържание текст / HTML, които просто казва какъв тип данни сме получили от сървъра, OK? Този хост и този тип съдържание са част от заглавията на HTTP. Можете да имате толкова малко, или по-малко необходимо за контекста на това, имаш работа с. Понякога ще има много информация, идваща от вашия сървър. Може би те иска много на информация от страна на потребителя. Тя варира в зависимост от контекста. Ако се вгледате в CS 50 Проучване, има много повече за това. Но ние имаме много, за да получите чрез, така че аз ще да давай, ако това е ОК с вас, момчета? Cool. Дръж се. Определено имаме, че Целият списък of-- нали! Аз не знам защо това е чак тук. Мислех, че буквално се премества го, докато бях sitting-- [00:47:15] Дейвин: Искате ли да го науча? Или искаш да го научи? [00:47:17] Публика: Мислех, че можехме просто да ги покажа, за да започнете с. Искам да кажа, можете да отидете в ги по-далеч, но аз мислех, че по-логично, тъй като аз Просто говорим за HTTP статуси. Така че тук е целия списък. Предполагам, че това, което ще се случи е Дейвин ще отидат в тях по-късно. Но има цял списък, а Визуализация на вкуса да дойде. OK, ние ще blow-- това ще да бъде PHP интензивен курс, като никой друг. [00:47:41] Така PHP, Hypertext Preprocessor, това е рекурсивно Бекроним, което означава, че е обявен за нещо друго. И тогава те бяха като този не наистина да има смисъл. Така че те просто име it-- и това е акроним, така че те просто го направи PHP Hypertext Preprocessor, които Просто няма смисъл. Fun история. Това е език за програмиране. Така че колкото и да се подчертае, че HTML не е език за програмиране, това е език за маркиране, PHP е език за програмиране. Как ли, че това е защото има логика. Има условностите. Имаме променливи, докато ние има нито едно от тези неща в HTML. [00:48:12] Добре, тогава ние имаме тази малка малко тук, че е като вкус на PHP. Така че основите, имена на променливи започнем с знак за долар. Много хора като него. Напомня ни пари. Всичко това е чудесно. Ние всички искаме PHP. Така че ние не конкретизират Тип на променливата вече. Тя се определя по време на изпълнение. Преводачът ще бъде като, О, ние просто ще продължи до, и в зависимост от контекста, Ще видим какво видове видове тези променливи трябва да сте. Няма по-основна функция. Нещата просто ще работят. Вие, момчета, с вашата внос в Последният р-зададете, ще забележите това. Там не е наистина една основна функция. Вие току-що написах това, което искате да се случи. И тя просто вид случило. Така че това е PHP за вас. [00:48:56] Масивите са много сходни. Все още имаме тази скоба. Ето, ние имаме някои променливи наречено ARR, и това е равно to-- ние имаме нормална скоба нотация. И ние имаме някаква ключова стойност. И голямата разлика между C и PHP масиви е, че ние можем да имаме тази associate-- можем да свържем стойности за ключове. Така че, вместо просто като масив, който се индексира от броя или позицията на този елемент в масива, ние всъщност може да го свърже с ключ. Къде можем да кажем, OK, искам каквото стойност е свързан с плодове. И може би имаме плодове отиде да банан. Така тя ще се върне банан за нас. [00:49:41] Но общо взето, най- мощно нещо за това е, че, ако вие си спомнят демо от лекция, където основно пренаписаха транскрипция на PHP, и го was-- търсенето е било наистина просто искал, съществува този ключ? Това е наистина нещо от силата му. Не е нужно да превъртите чрез вашия масив. Не е нужно да знаете какво пространство е вътре. Тя може да бъде в края или началото. Стига да знаете ключа която е свързана със стойността, PHP може просто да плюе, че стойността връщам при теб, нали? [00:50:09] И след това, ние също така просто Трябва само защото ние може да има двойки ключови стойности не значи, че трябва да се. Можете също така просто да се създаде нормален масив като тук, в долната част, където е само един, два, три, четири. Това са нашите ценности. И всъщност, ключовете са индексите. Така че ключът за един ще бъде нула. Ключът за две ще бъде един. Така нататък, и така нататък, освен ако Вие изрично зададете ключ, бихте могли да приемем, че стойност е просто им индекс. Това прави ли смисъл за всички? Няма въпроси? Awesome. [00:50:38] OK, foreach е начин да се превъртите през вашите редици. Така че ние имаме нещо тук, само общата структура. Така foreach, името на ни съоръжения, като каквото искате да се обадите на всеки елемент в масив, и можем да направим нещо с този елемент или с тази стойност. Така че ние имаме един пример тук. Имаме асоциативен масив с тези две влизания с бар се свързва с Foo и qux се свързва с Баз. Така че ключовете са дрън и Баз. Стойностите са бар и qux. Така foreach, ние имаме нашия масив тук, след като двойката ключова стойност. Това ни позволява да достъп както ключа и стойността. Може би просто искат стойност, в който случай можете просто да направите като ARR като $ стойност, а след това ви са просто достъп до стойността колкото превъртите през. Но може би, за някои причина, която искате ключа, ето защо аз избрах този пример вместо. Така че всъщност можете да манипулирате ключ и стойност в този случай. OK? Въпрос? [00:51:41] Публика: Ако искаш да просто манипулират ключа, би което трябва да направите foreach-- [00:51:45] ALISON: Точно така. Така че, ако искате да манипулира само ключа, може би все още се нуждаят от този синтаксис, защото ако просто Трябва ARR като нещо, като едно нещо, това е Ще приемем, че искате стойността, не ключа. Така че, ако някога просто трябва точно като ARR, както, може би това е като $ елемент, то се случва да се предположи, че питаш само за стойността на всяка точка. Ако искате изрично да направя нещо с ключа, дори и да не започваш да се направи нещо със стойността, имате нужда от тази структура че имаме тук къде изрично питам както за ключа и стойността. Големият въпрос. Нещо друго? Cool. [00:52:27] Добре, PHP и HTML. О, ние сме назад с р-зададете седем отново. Така трябва да изглежда малко по-запознати. Така че това е някакъв прост HTML форма че има някакъв вход име на здравей. И ние виждаме ние имаме свой начин на GET. И ако ние помним от нашето р-комплект, при подаване на този формуляр, тя изпраща масив наречен $ _GET, че има всички тези входове или променливи от формата, която трябва да бъде манипулиран в нашия PHP. Така че в този случай, потребителят ще постави на тяхно име. Те твърдят това. И ние виждаме, че сме се някои масив тук. Ние разполагаме със GET масив. И ние се свързвате името. [00:53:11] Така че, казва, OK, дай ми стойност, която е свързана с името, име е ключът тук. И който съпоставя директно до това, което казахме нашия вход име е. Така че това беше ти дава ключа към това, което ще бъде във вашия набор тук. Това прави ли смисъл за всички? Да? [00:53:32] Публика: Има ли името Получете справка с лилава линия в [недоловим]? [00:53:36] ALISON: Отнася се за това тук. Така че тази област точно тук, тя се отнася до това име тук. Така че това би могло да бъде кръстен като телефонен номер, или нещо такова. Това име всъщност казва, какво се обаждаш тази област? Как смяташ да вижте тази област? И това име е всъщност харесва, ние сме казвайки това поле се нарича име. Ето как ние ще го достигнете. [00:53:59] Публика: Така се харесва, Име на входа равнява Bob, and-- [00:54:02] ALISON: Добре, тогава ти ще получите Bob там долу. Точно така. Всеки готино? Добре, така че се срещу POST, това са двата основни начина, че минаваме данни в заявка за HTTP. Вие, момчета, трябва да са видели и двете от тях се надяваме. Така че с GET, информацията е преминал през URL адреса. Така че, ако някога направя Google търсения, YouTube, ще Вероятно забележите някои въпросителен знак. И тогава, всички думи че просто сложи там. И СЛЕД минава данните в тялото на HTTP съобщение. Така че за разлика от GET, някак си помисли че данните са скрити от потребителя. Но това, което е наистина важно да се разбере е, че това е все още също толкова несигурен като GET. Аналогията Обичам да използвам е, ако имате номера на банковата си сметка и ти го напиша от външната страна плик, това е доста опасно. Ако ви се налага да го напише на лист хартия и го сложи вътре в плика, тя все още е наистина опасно, защото всичко, което трябва да направите, е да отворите, че до и гледам на действителното съдържание на съобщението, за да видите това. Така че това е "скрита", и хора като да Мисля, че е сигурна, но всъщност не е. И аз съм сигурен, Дейвин ще получите в които повече, може би. Но това е важна разграничение да се направи и нещо наистина добро, за да се разбере. [00:55:15] OK, SQL, Structured Query Language. Всички неща, които сме виждали толкова скоро! Така че това е основно само проектирана, Очевидно е, че за управление на данни. Вие, момчета са имали много опит с това във вашите таблици с PHP MyAdmin. И има четири общи запитвания че ние искаме вие ​​да знаете. Така че има актуализация, вложка, изберете и изтриете. Така че се уверете, че знаете тези наистина добре. Ние ще отидем чрез тях много по-бързо. [00:55:40] Така се актуализира, наистина, като това, което може би си мислите, че е така, тя просто актуализира данните в базата данни. Така че ние имаме някакъв пример тук. Това е генералът структура на заявка актуализация. Така че ние се актуализира таблицата че ние не говорим за. И ние искаме да се зададат някои ценности, определени колони равна на специфични стойности. Така че това просто актуализира таблицата, промяна ценности във всички редове в този случай. Така че в този един тук, действително Например, имаме insert-- съжалявам. Това слайд напреднали без мен да го осъзнават. [00:56:17] Така че това обновление трапеза col1 равен да VAL1 когато къщата е равен "Куриер". Това, което човек прави, е тя само се променя, само го актуализира тези ценности в конкретни места. Така че в тази първа, тя променя тях стойности за всичко във вашата маса, OK? Това ще промени това колона за всеки един пост, за всеки един ред. Но това къде, бихте могли мисля за него като квалификант. Така че това е само няма да се промени то при много специфични места. Така че в р-зададете седем, когато може би актуализира сумата на паричните средства че вашето потребителско имаше, най-вероятно са имали някои където ID равнява ID сесия, нали? [00:56:53] Защото не исках да промяна на сумата на паричните средства за всяко лице, което използваше вашия сайт. Ти искаше да го промени за един определено лице, това лице е Който и да го използват по това време. Нали така? OK, за да вмъкнете, посочете определени стойности в таблиците. Това е като, когато сте създаване на нов потребител. Общата структура тук се вмъкнете в тази маса ние не говорим за. Ценности, са стойностите, които ние всъщност искате да вмъкнете. ОК, така, както ние виждаме тук, ние са вмъкнете в таблица. Това е специфични колони с им отговаряха стойности. Така че това казва, посочете нов ред, съдържащ стойности VAL1 и val2 под тези специфични колони. [00:57:33] Така че може би искате само да попълните от половината от нещата в този ред. Това е, което тази част тук ви позволява да правите. Тя ви позволява действително определи коя част. Да? [00:57:44] Група: Може ли само [недоловим] клетки в ред [недоловим]? [00:57:52] ALISON: Ако попълните само в някои части на вашия ред, останалата част от тези клетки са само празна. Стига да им позволи да да е празно, това не е проблем. Ако се опитате да получите достъп до тях, това е ще се върне празно елемент. Но е важно да се знае, че в някои таблици, Те трябва да се оставя да бъде нула. Може да сте тичам в проблем по време на р-сет защото ние не позволи всеки на вашите ценности, е нищожен. Но може да се определи по- по желание стойност в таблицата. [00:58:26] OK, изберете, така че това е просто начин за получаване на конкретни данни от таблица в някои идентификатор, който искате. Така че изберете звезда от таблицата, където цв равнява нещо просто означава, дай ми на всички данни, свързани където тази специфична колона е вярно. Така звездата в този случай ще върнете целия ред на вас, OK? [00:58:49] И тогава, в този случай, изберете звезда от Таблица просто дава цялата таблица. И тогава, изтриване очевидно, че просто изтрива ред от таблицата. Така изтриете от маса, тази маса сме съотнасяне, където някои специфични идентификатор или някакво условие е вярно. Да? [00:59:07] Публика: Въпрос. Защо използването на двойно цитати, и дали направя двойни кавички или единична кавички, има ли разлика? [00:59:13] ALISON: двойни кавички или апострофи не прави разлика в SQL. Мислех, че съм видял друг въпрос. Да? [00:59:20] Публика: Не Има ли значение какво получава избягал от заявката? [00:59:25] ALISON: Роб? [00:59:27] ROB: Какво искаш да кажеш с избягал от заявката? [00:59:31] Публика: Ако някой има една заявка във формата of-- [00:59:36] ROB: Ако някой сложи апостроф в, След толкова дълго, колкото можете да започнете саниране вашия вход, след това няма значение. Но ако сте с помощта на единен оферта и сте неправилно бягство вашите входове, тогава да, те се нуждаят от да се сложи една-единствена оферта, за да се прекъсне Код си. Ако използвате двойни кавички, те трябва да се сложи двойно Цитирам да разбие кода си. Но стига да избягат неща правилно, това няма значение. Той просто ще трябва да се преведе към правилния символ, така или иначе. [00:59:59] Публика: Какво означава бягство означава? ALISON: Ами, като саниране и да избяга. Изпитът, който имаме, великият XKCD комикс, че те спра, когато имате, ОН- ROB: Това е последния слайд. ALISON: Това е последния слайд, наистина? О, Боже мой. Ето така, перфектна. ОК, така че общо взето, можете да инжектирате нещо в този SQL заявка където тя се разпада си код, или като Дейвид показа в клас, ако имаме някаква единична цитат 1 е равно на 1 и ако в нашия код, ние просто директно копиране, че в и ние имаме един завършващ апостроф, това, което се случва, е, че ние се някои израз, оценява да е вярно, че ще нека някой влиза в нашата база данни и да получите информация, че ние не искат да ги набавят. Така саниране на входовете Просто означава, като се уверите, че ние сме бягство тях герои и ги определящата като символи, а не неща че трябва да се разреши да се приемат буквално като нашата SQL изявление. [01:01:04] Така че големият нещо, което сме казали че вие ​​трябва да се използва бяха HTML специални символи, което е нещо, че може да искате да погледнете на. OK, изтриете. Типове данни, всичко това ще бъде на линия. Тъй като имаме 15 минути преди края, аз съм отивал точно през тази. PHP и SQL, основно това е Просто имахме функция заявка, че допринесе за защита срещу тези злонамерени атаки. Така че всеки път, когато използвате заявка, ние бяхме като се уверите, че нещата са санирани и какви ли не още. [01:01:36] MVC е само парадигма дизайн, така модел, изглед, контролер. Това е просто начин да се държат нещата хубаво и разделя по същия начин, че ние сме склонни да фактор от код в функции. Това е само една рамка, уеб дизайн който ви позволява да направите същото. Отивам да пропуснете тази. [01:01:54] Това е нещо, което аз Би било супер удобно с. Това е чудесен масичка там. Тя дава функция Например на модела. Аз съм просто преживява това, защото аз Наистина искам Дейвин, за да може да се говори. Ако имате някакви въпроси, моля не се колебайте. Ще бъда тук след. Просто ела да ми говориш. С това, ние имаме HTTP статуси. И Давин ще взриви чрез това за 15 минути. Това ще бъде страхотно. [01:02:17] Дейвин: OK. Ух, микрофона си? Да. Извинете. ALISON: Way да бъдат подготвени. Дейвин: Не, аз съм готов. Аз съм готов. Нека да направим това. Това е готова. OK. Извинете. I разлят кафе върху себе си. Аз не знам дали съм по- разстроен, че изглеждам глупаво, или, че аз нямам кафе вече. Както и да е, само с едно бързо съобщение за листа вие имате. Така че този лист вие имате не е длъжностното лице, което е на теста. Това е официалната какво има на теста. Също така, на интернет страницата, да кажем вие, 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, OK, страхотно. [01:04:03] Да речем, че го освежи. Е, вътре, че cat.html, имате JPEG. Е, това не е JPEG ще се презареди. Нали няма да публикувате друг GET искане до сървъра, и след това да получите всичко, което се връща информация. Това ще просто be--, че изображението е ще бъдат кеширани на вашата машина. И така, че изображението ще бъде 304. Така че не е бил променен. Ако след това се затвори, ясно бисквитки, а след това се освежат и се опитайте да заредите тази страница отново, ти започваш да се види 200s. Нали няма да се види, че 304. [01:04:28] 400, неправилна заявка, недвижими бързо, като, ако щяха да изпратите JSON обект на сървъра и си JSON обект е неправилно, ще видите нещо подобно. 403, забранено. Кога ще се видим в забранена? Вероятно би? Публика: CHMOD. Дейвин: CHMOD, да. Така че не сте настроили разрешения правилно. 404, не е намерен. Това просто не е там. Така че, ако сте написали в грешна URL адреса на. 500, Вътрешна грешка на сървъра, сървъра най-вероятно не е конфигуриран правилно. Нещо не е на вашия край, но нещо на сървъра страна. И 503? Много хора видяха 503s в последния р-сет. Когато това ще се случи? Чух слухове. [01:05:05] Публика: Когато Google реши, че си робот. Дейвин: Да, когато Google реши вие сте робот, вие получавате 503s. Така че това е един от претоварване. Ако сте поискали от сървъра твърде много, това е обикновено е временно. И повечето от вас го е забелязал. Така че си видял 503. Може да са взели малко почивка, след това на 503s отидоха, и всичко беше наред. [01:05:20] ГАБЕ: Real бързо, когато се вие ​​получавате 500 във вероятно зададете този последен проблем? Да? [01:05:27] Публика: Обикновено, ако сървър има файл скрит или [недоловим] им машина [недоловим]. [01:05:34] ГАБЕ: Така че тя може да е конфигурация въпрос във вашия PHP на вашия сървър. Но това може да бъде само нещо като точка и запетая, че си забравил. Ако пишете PHP, някои неправилно синтаксис може да ви се получи нещо подобно. OK? [01:05:46] Дейвин: Cool. Искаш ли да се направи точно до този AJAX? [01:05:51] ГАБЕ: [недоловим]. Дейвин: OK. Така че това, което е най-DOM? Какво означава DOM престои? [01:05:55] Публика: Документ обектен модел. Дейвин: Nice. И защо ни харесва? Awesome. Нали, така че просто ни позволява да достъп на HTML, достъп до нашата страница много бързо. Защо? Защото ние сме лечение нашата страница, лечение на нашите HTML тагове, лечение на всичко като че ли те са обекти. Ако ние не ги третират като те са предмети, а след това какво можем да направим? Е, можем да наречем функции върху тях. И това е важно, защо? Ами, защото ние ще използваме JavaScript, за да актуализираме нашата HTML, актуализира тези обекти. Така че, ако се отнасяме към тях като обекти, След това можем да наречем функции върху тях. Отивам да навлезете в тази малко повече, когато отида в JavaScript, но всичко, което сте виждали подобно document.getElementById. Така документ е вашето елемент, може да получи елемент от ID, така ти започваш да се погледне за някои ID в HTML маркер. И след това, можете да направите нещо друго за това. Например, като document.body, След това можете да добавите дете. Така че ти започваш да се намери документа. Имате документа. Ти ще намери тялото. Намерил тялото. И тогава, ти започваш да се наричаме някои функция върху него. Така добавяне дете, и ще можете да добавите някои HTML към края в тялото си. Така че основно, ти си просто лекуващия го като един обект. Можете да започнете лечение HTML тагове като обект. И това го прави много лесно и бързо да мине през тях. Но тя също така ви позволява да се обадя функции в тях така че може да се манипулира и промяна на елементите. [01:07:04] ГАБЕ: Като се има предвид това, защо е JavaScript такава хубав език, за да си взаимодействат с HTML? Коефициентите са, когато хората бяха избират езика за браузъра, за страна на клиента, JavaScript е много хубаво, това е наистина добър в боравенето с предмети. И обектите са нещо като обектите, които се появяват в HTML, така че е много лесно за JavaScript да направи този вид работа. Дейвин: Nice. Така че тук е само един пример. Така че аз мисля, че за миналата година викторина, или може би преди две години, ние те помолих да се създаде едно дърво. Така че това е точно това, което трябва да направите. Така че започнете с документ. И тогава в общи линии просто погледнете на таговете. Така че, ако се вгледате, ние започнете с HTML тагове. И след това, можете да получите улики за това как да направите това базира на вдлъбнатината. Така главата вид разклонява. В главата, имаме друг маркер за заглавие. И така, ние имаме заглавие тагове. И вътре, че имаме някои низ. И така, ние представляваме низ в кръг. И всички тагове са в квадрати. [01:07:54] И ако се вгледате, ако ние мисля за това като дърво, и нека да кажем, че HTML е родител, след това главата и тялото ще бъдем братя и сестри. И двамата са щеше да бъде децата на този родител. Така че, тъй като те са двете братя и сестри, те са Ще бъде нещо като в непосредствена близост до помежду си в нашия модел дърво. И тогава, в общи линии направи точно същото нещо. Така че не е трудно, но ние поискахме въпроси като това преди анкетата. ГАБЕ: Дали някой имате въпроси досега? Добре ли е? Дейвин: Cool. JavaScript, OK, добри неща. Така че JavaScript, какво е JavaScript? Е, JavaScript is-- това е сложно, но те са някои от акцентите че трябва да се има предвид. Първо, това е хлабаво написали. Какво означава това? Така PHP was-- да, какво става? [01:08:35] Публика: Вие не трябва да е изрично членка какъв тип променлива е то. Дейвин: Perfect. И така, той каза, че не е нужно да изрично да се посочи вида на променливата. Това е точно така. Така че в C, ако имах INT I достига 50, След това в PHP, това е точно като тази, $ I, се равнява на 50. Тогава в JavaScript, това, което би било обаждането? Var, нали? Тя ще бъде като Var I достига 50. Но не е нужно да бъде като, ОК, това е едно цяло число. OK, това е низ. Няма нужда да го направя. Това е интерпретиран език. И така, какво означава това? [01:09:04] Публика: Не компилиран. [01:09:06] Дейвин: Какво не компилира предвид? Така ли? [01:09:11] Публика: Не е нужно за преструктуриране на кода да я изработя компютъра, за да го стартирате. Това е просто, взето по време на изпълнение и компютъра [недоловим]. Дейвин: Да, така, че ще мине чрез преводач. Но ти си точно както трябва. Така че никога няма да го компилирате, нали? Когато правиш си PHP и JavaScript код, никога не нарича компилиране. Вие никога не нарича нещо като направи или нещо подобно. Това е така, защото това е тълкува. Така че всеки път, когато тя преминава през браузър, тя отива чрез преводач. И това се случва, да го тълкуват Просто в реално време веднага за вас. Така че това, което са някои положителни и отрицателни да има интерпретиран език и като компилиран език? Така compiling-- да, какво става? [01:09:50] Публика: Интерпретирания е по-бавен. Дейвин: В какъв смисъл? [01:09:57] Публика: След като съставят, че не е нужно да направя някакви допълнителни мерки, за да изпълни го, че това [недоловим]. [01:10:04] Дейвин: Право, перфектна. Така че това, което казахте, е основно, че съставянето, когато се съберат, че имате много първоначални разходи, нали? Ти ще го компилирате. Но след като го съставят, на съставител ще го оптимизира. Това ще бъде бързо. Това ще основно да бъде толкова бързо, колкото може да бъде. С тълкуването, че никога имаме, че първоначалните разходи. По-скоро, това ще бъде малко по-бавно всеки път, когато го тълкува. И ти започваш да се наложи да го тълкува всеки един момент. Така че вместо да се налага това един път на разходите, сега ти си Ще трябва да го тълкуваме всеки път, когато страницата прави. [01:10:29] Така че преводачите са добри, защото не е нужно да го компилирате, но те са лоши в която всеки време зареждането на страницата, това е Ще трябва да тълкува това JavaScript. И то се случва да тече малко по-бавен отколкото ако трябваше да го компилирате. Позволява ви да communicate-- О, чакайте. Се използва за манипулиране на съдържание и външен вид. Ние току-що говорихме за това. Той използва DOM. AJAX, ще влязат в AJAX в малко. И след това, че е от страна на клиента. Така че PHP е от страна на сървъра. JavaScript е от страна на клиента. Какви са положителни за това? Това го казва. Това е по-бързо, нали? Защото не е нужно to-- е по-бързо. Не е нужно да общуват с друго приспособление. Ако сте само на вашия клиент, вие никога не сте Ще трябва да отида и виж какво има на сървъра и след това да докладва или нещо подобно. Така страна на клиента тенденция да да бъде малко по-бързо. [01:11:15] ГАБЕ: Да, но това не означава, PHP е по-бързо от JavaScript или нещо от подобни. Те работят вид в същото скорост, защото те са и двете тълкуват езици. Това, което е бавен тук е искане. Така че вие ​​всъщност ще по пътя към Бразилия за да получите някаква информация че живее там. Но PHP и JavaScript, те вид тече в една и съща скорост. Това не е, че едно е по-бързо от друга. Това, също така, подвеждащ въпрос тук. Така че JavaScript никога не става машинен код, вярно или невярно? [01:11:47] Публика: False. ГАБЕ: False. Това трябва да стане машина код, тъй машинен код е единственото нещо, машината разбира. Въпреки, че това не е съставен, тя все още става машинен код защото преводачът е просто програма, която отива ред по ред и превръща тази линия в нещо на компютъра разбира. OK? Cool. [01:12:08] Дейвин: Тук е просто един много основен Здравейте програма световна JavaScript. Така че аз не знам if-- сте виждали това. Но просто трябва HTML тук. И вместо действително пускане на JavaScript в таговете скрипт, така че ще обикновено го сложи в главата. Вие имате скрипт тагове. Можете да го пуснете там. Всичко, което сме направили тук е, че ние сме свързани in-- така че ние сме свързани в досие с JavaScript по този начин. И всичко, което направи това, нали? Така че, когато сте използвали JQuery и underscore.js в последния р-сет, не е нужно тона код в скрипта ви тагове, в главата си. Можете да направите това, но вместо вие просто го свързва инча И вие сте го свързва в така както го правите с CSS. Така че тя просто го прави по-лесно да се чете така Код си не е като дълъг 1000 линии с тона на функции, които не може да бъде използване. [01:12:52] Вместо това, просто го свържете инча Тя го compartmentalizes. Това е като писането някои заглавния файл, и След това число, че заглавния файл в C. Мислете за това точно като тази. Е, какво значи това правя? Е, това ще избяга. Това ще ви сигнализира. Така че ти започваш да се получи малко изскачат нарича Здравей, свят. Бърз въпрос, просто проверка здрав разум, така че можете да видите тук в организма, каже тялото, HTML тук. Какво е на първо място? Искате ли да видя тялото, HTML тук, или да видя сигнала първо? [01:13:19] Публика: Alert. [01:13:20] Дейвин: Точно така. Той казва предупреждение. Защо? [01:13:22] Публика: Понеже си отида от горе до долу. [01:13:24] Дейвин: Да. Perfect. И така, той казва, да отидеш от горе до дъното, което е абсолютно прав. Ти ще отидеш от горе до долу. И в JavaScript, JQuery, че имате функция, която е като при зареждане, или готови, и който казва, OK, изчакайте, докато всичко това HTML е зареден. И след това, обадете се на JavaScript. Тъй като ние нямаме че и тук, Първото нещо, което ще се случи се, че ще отида от горе до долу. Това ще удари, че JS обадя, че ще сигнализира. След това кликнете върху OK, този сигнал отива. След това ще се покаже можете HTML тялото тук. Ница. [01:13:54] ОК, така че просто много бързо, писане в JavaScript е супер бърз. За да се декларират променлива, име на Var. Така че в C, имате INT I, имате да обяви какви тип е тя. PHP, $. JavaScript, Var. Ние говорихме за това. Добре, да вървим. [01:14:11] Loops, едно и също нещо. Същото нещо. Декларации Функция, така точно като теб съм виждал в C. Единственото нещо, различно е така, когато можете да получите на други езици за програмиране, както когато сте приели 51 следващия семестър и правиш с OCaml, можете да се справят с анонимни функции. Така че това е точно това, което имаме тук. Значи вие искате да се въведат сума, някаква стойност сума. Но вие може да го прави само един път. Така че не искам да го наричам функция сума, тя даде функцията декларация. Вместо това, можете просто да го използвате като анонимен функция. И сте видели този много. Ще видите пример за това в няколко слайда. Да, ще видим. ГАБЕ: Добър въпрос. Когато може да искате да използвате анонимна функция тук? По принцип, когато искате нещо, като събитие, за да се случи. Така че, когато мишката е кликнали, например, искате някаква функция, за да се нарече. Така се преминава към събитието манипулатор, се преминава към събитието, вид, функция, която искате да се нарече. И това, което минава е като в края на ден, само указател към тази инструкция, на функцията. Така че това не е като сте минаваща целия код, точно както указател към функция. И тогава, когато някой кликне върху мишката, а след това, че функцията получава нарича. [01:15:17] Дейвин: Масивите, така че има декларация на масив. Тогава, масив да постави нещата вътре. Real бързо, какво ще настоящия разпечатате? Каква ще бъде третият елемент? [01:15:31] Публиката: "JS". [01:15:32] Дейвин: Right, че би било "JS." Чакай, да се върна. Каква е дължината? [01:15:37] Публика: Three. Дейвин: Three, нали? Точно това, което си мислите. OK, сега отидете. Масивите, които можете да добавите неща за тях. Така че можете да надхвърля първоначалните си граници. Само нещо да се има предвид. PHP, JavaScript, те са малко по- малко по-снизходителни по отношение на нещата подобно. Обектите, много приличат structs в C, много като асоциативни масиви в PHP. Вие всички сте имали опит с това. Така JSON, когато сте преминаване JSON напред и назад в р-зададете осем, това е вашият обект. [01:16:03] Така че, да, например, недвижими бърз пример. Ето един обект. Начинът, по който упоменете обект, така че просто много бързо, нека да кажем, че искам да намеря вън, OK, какъв е курса? И така, името на обект тук е CS50. И след това, ако имах асоциативен масив, как да го правя? Аз ще се използва ключ, нали? Така че имам името на масива. Имам скоба, кавички, ключ, крайни кавички, край скоба, и че ще се отнася, че елемент вътре ми асоциативен масив. Как да еталон Разбира се вътре моя обект? Някой знае ли? [01:16:39] Публика: [недоловим]. [01:16:40] Дейвин: Какво става? Публика: CS50.course. Дейвин: Right, да. Така CS50.course. Така че начина, по който справки неща вътре в JSON обект е с една точка. [01:16:48] Публика: Можете да използвате и синтаксис масив. [01:16:53] Дейвин: OK, глоба. [01:16:54] ГАБЕ: Можете да използвате CS50 скоба, низ, като в кавички. Публика: Мисля, че е идентичен с PHP. ГАБЕ: Това е едно и също нещо. Дейвин: Fine! Но вие ще видите това на други места. Да, така продължавай. Това е, което току-що казах. Така че в един пример JavaScript JQuery. Така че това е моят DOM, нали? Real бързо, така че да има главата, здравей свят, тялото. Имам един бутон. Той казва "остави ме," така че аз искам да го бута. И аз искам да направя нещо когато кликване върху него. Право, следващата. [01:17:31] Нали, така че това е моят JavaScript. Така JQuery е просто по-лесно начин на писане на JavaScript. Така че това, и това, което аз ще покажа можете следващата, ще бъде JQuery, са идентични. Така те ще прави същите неща. Просто Jquery тенденция да бъде малко по-лесно. Хората са склонни да се харесва повече. Тя има много функции. Така че хората са склонни да използват JQuery. Вие всички използвани Jquery в последния р-сет. И така, какво ще правим това? Какво ще настоящия JavaScript-- така това е просто JavaScript. Какво ще направите това? Какво ще го правим? [01:18:03] Така че първото, което виждате прозорец при зареждане. Нали така? Така че ние не виждаме, че преди. Така че това ще почака докато целия прозорец натоварвания. Така, че ще изчака до HTML, всички изображения натоварване преди тя да не прави нищо. Така че нека да кажем нашата DOM е зареден. Всичко е там. Тогава какво ще се случи? Така ли? [01:18:19] Публика: появява Button. [01:18:22] Дейвин: Бутонът е вече там. Да, така бутона вече е там. Но това ще кажа, OK, ако щракнете върху бутона, така бутона вече там, като че HTML тагове. Чакай, да се върна бързо. Този таг полето точно тук е ще бъде един бутон вече. Вече има един бутон. Но след това, на JavaScript етикет, точно тук, той казва, OK, аз искам за да получите елемент от ID, така бутона за търсене просто казва, OK, аз искам да очертае тази променлива към този бутон. Така, че променливата е просто по-лесен начин за достъп до този бутон. И аз казвам, OK, ако кликна, че бутон, така че, ако кликнете на този елемент, и този елемент се отнася до бутона, ако щракнете върху него, След това искам да призова функция. Тук е един от тези, анонимен функции за когото говорихме. [01:19:03] Просто се обадете на някои функции. Inside тази функция, основно нещо, което сме виждали много, нащрек. Натискате бутона за търсене. Това ще основно да има бутон. Можете да го кликнете. Можете да получите този сигнал. X навън. Това е всичко. Така ли? [01:19:16] Публика: Значи ако сложиш скрипта [Недоловим], скрипт таг в HTML? [01:19:21] Дейвин: Можете да поставите скрипта маркер направо в главата защото имате тази при зареждане. Това е също така, че трябва да имате едно кликване. Така, че ще изчака до кликнете за нещо. Но при зареждане е само за да бъде безопасна, да направи че всичко товар във вашия HTML предварително. Така ли? Искаш ли да кажеш нещо? [01:19:40] ГАБЕ: [недоловим]. Дейвин: Да. [01:19:42] Публика: Така при зареждане страна избягва определяне на бутона променлива търсене от просто казвам document.getElementById бутон за търсене точка [недоловим]. [01:19:49] Дейвин: Определено, но след това низ също ще стане огромен. Точно така, така че това е само за да направи по-лесно за вас, да. Да? [01:19:56] Публика: Къде сме направили създадете window.onload? Или document.ready? [01:19:58] Дейвин: Да, има. Да, има, аз проверих. [01:20:02] ГАБЕ: Не е за тях да се грижи за. [01:20:03] Дейвин: ОК, така че аз ще съм да ви кажа, така или иначе. Така че основно, просто като цяло, така че window.onload изчаква, докато си DOM, всички Вашата HTML, товари. Той изчаква, докато си изображения натоварване. Той чака, докато всичко товар. document.ready, той просто изчаква, докато си DOM товар. След като HTML е всичко, което съществува, след като Вашата DOM е там, започва да тече. Това е единствената разлика. [01:20:23] ГАБЕ: Quick разсъдъка разгледате тук. Така че това може да се види вид като ред код, нали? Защото е window.onload се равнява на един куп неща. Когато JavaScript прочете това, вярно или невярно, функцията получава екзекутиран. False. OK? Какво се случва тук, ти си просто преминаване тази функция като анонимен функции да window.onload. И тогава, когато се върви да се получи в действителност изпълнява? Когато се зареди прозорец. Това е едно събитие. Така че това е СП т нещо сме Говорим за по-рано, нали? Така че, когато събитието се случва, функцията се случва. Същото е и с OnClick. [01:20:59] Дейвин: ОК, така че са отнели далеч от document.ready. Но това ще бъде точната same-- Публика: Знакът на долара, че е document.ready. Това е пряк път. [01:21:07] Дейвин: О, това е? ОК, така че този път document.ready, бърз достъп. Но това е същото като window.onload с изключение на тази малка разлика Аз ви казах за. И това е JQuery. Така че това е точно същото thing-- това е JavaScript. Това е just-- някои хора мислят за него като по-лек, елегантен версия че има много функционалност че най-вероятно ще бъдат използване. Така че това прави точно същото нещо. [01:21:34] Така че нещата някак да изтъкват. Така в друг пример, ние трябваше document.getElementById, така че ние трябваше толкова дълго низ, който ще получите елемента от каквото ID го има. Това се заменя с настоящата покана точно тук. Така че виждате знака за долар, След това, което виждате цитат, таг. Таг винаги селектор. Той казва, OK, това е свързано с ID. Какво е селектора за клас? [01:21:56] Публика: Dot. [01:21:57] Дейвин: Dot, нали. Ако просто ще Изберете маркер, какво е това? Това е просто маркер, точно. И бихте могли да използвате, че тук, както добре. [01:22:05] ГАБЕ: И по етикет, имаме предвид като Разделение, например, или главата. [01:22:08] Дейвин: или орган или р или нещо подобно, да. Така че тук, OK, вместо да каже document.getElementById, това е само едно и също нещо. Само в Jquery, че е по-кратък. Така че е по-проста. Така че след това, не повече OnClick, трябва само да кликнете. Jquery функция, наричаме тази функция. Alert е точно същото. Така че е малко по- по-малък, или малко по- кратък, малко bit-- хора мислят, това е малко по-лесно да се напише, малко по-лесно да се разбере. Но това е JQuery. Много хора се получи малко малко объркан и притеснен и те си мислят, OK, JQuery е по-различно от JavaScript. Трябва да се помни това две различни неща. Това не е. Искам да кажа, че е различен синтаксис. Но JQuery е JavaScript. Това е само на пръв поглед по-добър вариант, че може да бъде по-лесно да Разбирам, че хората използват. ГАБЕ: Да, да бъде честен, че знака за долар който виждате на JQuery, това е само име на функция, която Jquery определя. То не трябва нищо специално. Дали това е просто името на функция, точно като теб би могъл да определи знака за долар. [01:23:03] Дейвин: Да, така говорихме за това. Някои полезни неща. Гледах назад към старите викторини. През последните няколко викторини, те Трябваше да използвам подобни неща. Така document.ready, така уверете се, че всичко е заредена, преди да започнете да правите неща. Изберете ID, или изберете клас, тя току-що бе да цитирам Дот някои клас, край на цитата. Знаете, така че ако сте изпрати форма и повикване тази функция, след като формата твърди. Цена, така че нека да кажа, че имаше форма представяне, като потребителско име, имейл, каквото. Имах текстово поле. Така че аз съм пишете в това текстово поле. Е, ако искате да получите сумата, от това текстово поле, можете да използвате точка Вал. И след това, тук долу, точка HTML е същото е като документ дот getElementByID точка innerHTML. Така, че ще се върне ти на HTML от които ID. Тук можете просто да използвате някои ID или каквото точка HTML. Това ще получите HTML от този елемент. Ако искате да се промени след това HTML, можете да го давате нещо. Така ще бъдеш като дот HTML, и след това вътре, цитати, нова HTML или нещо такова. [01:24:05] ГАБЕ: ОК, така че AJAX. Аз наистина искам да се разбере AJAX наистина добре. Така те искам момчета до разбере AJAX наистина добре. Защото, ако го направите, вие сте напълно ще да разбере всичко, което има нещо общо с HTTP, PHP, JavaScript защото всичко това се съчетава в AJAX. AJAX не е език. AJAX е техника. И той използва много различни инструменти. AJAX щандове за асинхронен JavaScript XML. Така че методът, на езика, на данните. [01:24:36] Така че основният език, който ние използваме в AJAX да предизвика всичко и да се справят с всичко, по-късно е JavaScript. Ето защо тя се отнася много близо до JavaScript. И тогава асинхронен е защото ние не го правим всички наведнъж, когато сме на зареждане на страницата. Това е нещо, което можем, правят неща вид паралелно. Основната идея AJAX е, че искате го, за да получите специфична информация. Например, когато въвеждате нова потребителското име, когато се регистрирате потребителско име, потребителското си име е abc123. И след това, в края на форма, което трябва да кликнете върху Изпращане. И това трябваше да отида до сървъра, и след това проверете дали в базата данни, abc123 вече е там. И ако тя вече е там, той казва, потребител вече в базата данни име. И те, трябва да попълните на цялата формата отново. И това е много, много лошо. [01:25:23] И тогава хората казват, OK, защо да не можем просто направя една малка молба HTTP просто да проверите да видим дали тази употреба е в базата данни преди потребителят трябва да представил цялата форма? Така например, когато потребителското приключи пишете abc123, нека просто отидете на сървъра малко малко и просто се лъжа или истина от сървъра, за да видите, ако това е валидно потребителско име или не. ОК, така че това е едно от основните използва на AJAX в днешно време все още. [01:25:49] Дейвин: Така много бързо, в на повикване Аякс в Jquery, вие може да означава, че сте искам тя да бъде в синхрон. Вие не трябва да правите това. Но можете да направите това. И ако си направил това, какво ще се случи? Ами, например, когато сте получаване на новини или каквото и да, Вашия браузър е просто ще изчакаме докато цялата тази покана е пълна вместо да позволи да се направи друг неща, веднага след като кликнете върху него. [01:26:14] ГАБЕ: Не минава вече. О, Боже мой. За съжаление! Мда. "В миналото, клиент, необходимо за запитване цялото съдържание на сайта. " Това е, което казах. Това ни позволява да изпратите допълнителна GET или POST искания, без да има да презареди нашия браузър. Така в края на деня, ние сме действително да подадат заявки HTTP тук използвайки JavaScript. Тъй като преди ние използва само JavaScript за промяна на HTML, че вече дойде. И сега, можем да го използваме, за да се намесвам с уеб сървърите, както и. Начинът, по който това се случва е имаме клиента. Дейвин е клиент. И той има всички JavaScript показват, тъй като HTML е тъпо. JavaScript е умен. Така че Дейвин Дейвин има си умен част и тъпо му част. Той ще използва интелигентна си част сега. Той ще използва JavaScript до поискване, например, дали abc123 е в базата данни или не. [01:27:04] Така че Дейвин, моля, просто ми изпратите заявка за HTTP. Благодаря. Така че той просто изпраща заявка за HTTP. Виждате ли, че? И това е само един и същи начин че всяка HTTP заявка е изпратена. Браузърът Google Chrome или нещо, е Ще видите, че на Давин опитвайки се да изпратите заявка за HTTP, ще помогне HM малко. И това се случва да отида по целия път до сървъра. Сега, сървърът ще има PHP тук, или на друг език. Точно както в една нормална заявка HTTP. Това е почти нормална заявка HTTP. [01:27:31] И тогава, на сървъра ще кажа, OK, Дейвин ми иска да провери дали тази abc123 е в базата данни. Говорете с модела. Моделът се казва, че не е. abc123 е добро потребителско име. И тогава, уеб сървър ще използвате PHP да направи някаква форма на файл. Тя може да бъде буквално файл че съдържа "да" в нея, или "не, или нещо подобно. Тя може да бъде всеки файл. [01:27:54] Тя може да бъде като аз отивам да изпрати Дейвин снимка на патица ако това е в базата данни и изпращане на снимка на един хамстер ако това не е в базата данни. Това би било нещо като тъпо, но той ще работи. OK, така и Аз изпращам патица да Дейвин. Дейвин имам една патица. И сега, кой ще да се справят с патица? Смарт част Дейвин отново, така JavaScript, нали? JavaScript е изпратил поискване, и JavaScript ще получи искане и да го тълкува в някаква форма. [01:28:22] И в този смисъл, че ще казват, OK, ако патица тогава аз съм добър. Ако хамстер, тогава аз ще съм да се каже, не, потребителското име вече съществува в базата данни. Но обикновено, не сте Ще изпратя патица. Вие ще изпратите нещо леко по-умни. И това, което ние използваме е XML. И по-скоро, ние използваме JSON. JSON е просто JavaScript Object Notation, които груб вие получавате Цялата JavaScript обект. И да я поставите във файл, просто искал че CS50 обект, който вие виждали. Можете да я тури във файл, и можете да го изпратя на Дейвин. [01:28:53] Така че в този случай, бих направи JavaScript обект на и само да кажа, съществува потребител, да. Или съществува потребител, не. И го изпрати обратно на него. И защо JSON? Тъй като лицето който е получател на това е ще използвате JavaScript да се справят с отговора. И JavaScript работи така добре, защото тя се нарича JavaScript Object Notation. Нали така? И така, той може просто да се обадя функция и да получите тази хубава само от отговора. И след това, той ще знае дали че потребителят е в базата данни или не. [01:29:22] Така че виждате, всичко това идва заедно в уеб сървъра, и след това има една HTTP заявка към и една HTTP отговор и всичко. Така че се уверете, че вие, момчета, разберем това AJAX повикване защото ти помага да разбереш всичко на понятията, за което говорим. [01:29:37] Така че ето един пример на AJAX с JQuery. И тук, ще правим с GET JSON. Така че ние не се опитваме да получите изображение на котка тук, или патица. Опитваме се да се получи файл JSON. И тогава ще чакаме, докато това е направено, дот направено. Това означава, че аз съм в очакване на отговор. Това може да отнеме известно време. След това, което виждате по-малко натоварване. Ако искате да направите това в уебсайта си. Така точково направено, и след това, се случва, когато това е направено? Ще преминем през анонимен функция, точно както видяхме преди. Защото направено е събитие, просто като кликнеш на мишката или каквото и да, за JQuery. Така че можете да премине през тази функция с данни, текст, статус, и jqXHR. И в общи линии, това е само на някои променливи които можете да използвате по-късно, за да има статуса на заявката за HTTP, данните, които тя ще да изпрати обратно към вас. Така ще можете да по-късно го тълкуват и да направи нещо смислено с него. И ако той не успее, когато може да фалира? Е, когато искането за HTTP дава Вие сте 500 или нещо подобно. След това, тя ще ви каже статус, какъв вид повреда, която е била, и най-различни неща. Трябва да се уверите, да се справят двата случая, в противен случай програмата полудява. [01:30:42] Дейвин: Така че, да, точно това е това, което видях на вашето последно р-комплект. Действителната AJAX повикването е в самото JSON. Това е повикването. И тогава, дот направено е като той проверява дали е успешна. При успех, който искате да се направи нещо с данните. Вие се върна от които JSON изисква данни. Това е това, което получавате обратно. Така че, ако си спомняте от вашия р-комплект, много от вас са като скоба данни I или каквото и да, дот линк или заглавие. Каквото и да се върне от които JSON, каквото полетата са в тази JSON обект, това е това, което се връща. Data е това, което се връща. Статус Текст, просто нещо, което ви позволява да знаете какво се е случило. И тогава, на jqXHR, това е само XML HTTP искане на JQuery. Това е точно като един обект. И след това се провали, точно като Гейб каза. ГАБЕ: В нашия малък пример за abc123 само за да се провери дали това е в базата данни или не, данните ще бъдат нещо, което би направил, ако съществува точка данни потребителското име, което е това, което си PHP генерирана за вие, ако съществува точка данни потребителско име, след това Отивам да предупредим, потребителското име вече съществува. Иначе, аз съм просто ще оставите потребителското процедира попълване на формуляра. OK, сигурност, хладно. [01:31:50] Дейвин: ме да искам да? [01:31:52] ГАБЕ: Харесва ми този. Така че нещо, което изглежда познат. Ние сме почти готови. Така че това е само пример момчета видяха в клас. Можете използваха argv1 тук. Това е като аргумент на командния ред. И ние сме ващи копиране, че в буфер с размер 12. Какъв е проблемът тук? Препълване на буфера! Защото ние имаме буфер с размер 12. argv1 може да има размер на два милиарда. Ние не правим всяка гранична проверка. Така че можем да копирате много памет. И ние ще бъдем особено лошо за това. Какво можем да направим, че е много, много да кажа в този случай? Да? Публика: Част от два милиарда неща съдържа изпълним код, който се връща [Недоловим]. ГАБЕ: Точно така. Така че това е вид на нещо, което хората използват да джейлбрейк на iPhone, например. Така, че такива неща. Защото може просто да направи устройството изпълнят всяка код, който ви харесва. Уговорката, така поправката е лесно. Просто проверете за границите. Вие проверявате за нищожна, защото ние винаги проверявайте за нищожна когато си имаме работа с низове. И тогава, да отделите дължина низ преди. И ако низът дължина е валиден низ дължина, която е в рамките на 0 и 12, тогава ние сме добри. [01:33:03] Дейвин: Ако не се проверява за нищожна, много бързо, какво ще се случи? Тя ще SEG вина. Защо ще го SEG вина? Защото се обаждате strlen на нула. ГАБЕ: Да. Вярно или не, като се използва един парола е добра идея. [01:33:19] Публика: False. [01:33:20] ГАБЕ: False. Използвайте много пароли и големи, по-дълги. Катинар икони гарантират сигурността. [01:33:26] Публика: False. [01:33:27] ГАБЕ: False. Това не означава нищо. Това е само една икона. SSL защитава срещу човек по средата атаката. Публика: False. ГАБЕ: False. ОК, така че всички, които са неверни. Ница. [Недоловим] Искате ли да поговорим за това? Сега е твой ред. Дейвин: Видове атаки, мъж в средата. Какво е мъж в средата Атака? Публика: [недоловим]. Дейвин: Ако изпратите HTTP искане, което можеха да направят това, нали? Но ако изпращате HTTPS, те вероятно няма да бъде в състояние да направи това. Има много точки по вашата връзка. Имате рутери. Имате DNS сървъри. Ако някой е в състояние да се физически виж това, което изпращате, така че някой е в състояние да всъщност става между вас, клиента и сървъра, и е можете да видите какво сте изпращане, Това е човек, в средата Атака. Така че, за да видите какво се опитвате да получите от сървъра, или е в състояние да see-- лошо, може да сте в състояние да се види бисквитки или нещо подобно. [01:34:16] Така например, ако не използвате SSL, той може да бъде в състояние да се види Вашите идентификатор на сесията бисквитки. И това се нарича крадене на сесията защото вижда вашата идентификация бисквити, и тогава той е в състояние да отиде в тази уебсайт и да се преструвам, за да ви бъде. Защото също както в PHP, не забравяйте, когато влезете в системата, какво ще правим? Тръгнахме ID сесия равна на ID. Така че ви идентифицира. Ето защо можете да видите вашия портфейл и не всеки друг портфейл. [01:34:38] Е, ако аз съм в състояние да получи това бисквитка, тогава мога да се регистрирате към тази страница. И тогава, мога просто да видите нещата си и започнат да купуват и продават неща. Така че това е крадене на сесията. Но ти не трябва да бъде в състояние to-- така че можете да използвате мъжа в средата Атака дори ако те използват SSL. Но ти не трябва да бъде в състояние да. Ако те се използват SSL, не можеш сесия отвличане. Защо? Защото всичко е криптирана, нали? ако е криптирана, и аз все още съм човек в средна, аз все още се вашите данни. Това е добре. Но тя е криптирана. Така че аз не мога да го използвам. Така че това е две. [01:35:09] Real бързо, искане кръст сайт фалшификация. Това е само, ако има връзка и че връзката прави нещо че не мисля, че трябва да се направи. Така например, ако връзката е ще си купи акции или да продаде акции, и вие не знаете, че. Можете кликне върху линка, изпрати искане, купих или продават нещо, което не исках да направя. Това е, че. [01:35:25] Cross скриптиране, така че тук, което преминава през процедура променлива Q, вместо да минава през някакъв вид на стойност, може би Q е като име. Така че, вместо да минава р равни Дейвин или нещо подобно, ако не използвате HTML специални символи, ако не избягаме от този да се уверите, че е OK, тогава може да мине през вместо, нека да кажем, тук искам да кажа, печат или нещо подобно, След това мога да премине в тук скрипт повикване. [01:35:51] И така, вместо да само за да променлива, Тогава аз ще го изпълни скрипт повикване. Така вътре, че скрипт обадя, какво прави той? Документ местоположение точка, че това ще се промяна на мястото на документа. Така че аз ще се пренасочи някъде другаде. Тя се нарича лош човек в този пример, много добър. Не можех да мисля за думата. И след това, което е още по-лошо е, че аз ще съм до тогава това бисквитка, която е известна променлива имам в този сайт. Отивам да го настроите равен да бисквитката на документ точка. Ето защо, аз ще съм да открадне вашата бисквитка. И аз ще се пренасочи някаква информация към сайт че не трябва да се достъп. И всичко това се случва, защото си не избяга, което сте видели. Така ли? [01:36:29] Публика: Така че просто да направи това ясно, че е vulnerable.com че е уязвима от тази. Така че връзката може да се появи една и съща страница. Някой кликне върху него, отива vulnerable.com. Имате бисквитка да vulnerable.com. Да кажем, че Facebook е уязвими, така facebook.com. Имате си Facebook бисквитка. Това, което се прави, че си Ще facebook.com, това е незабавно пренасочване можете да badguy.com, но включително данните си за бисквитка. Така че това е един бърз пренасочване, но вашият Facebook бисквитка е включена с които пренасочват, и това е начина, по който [недоловим]. ГАБЕ: Да, има някои много средни неща че хората могат да направят, ако има това. Например, ако Facebook позволено всеки да променя потребителското си име, и те не са направили някоя проверки по, така че може да поставите нещо на JavaScript, че променя изображението на хамстер. И това вмъква същото JavaScript в всеки, който гледа на вашия сайт. Така че всеки, който гледа на вашия сайт има едно и също нещо в името на потребителя. И тъй като това е един вирус, той се разпространява експоненциално. Дейвин: Ние ще пропусне последния един, а след това сме готови. Така че това е просто още един пример. Така че това е, че не са бягство им SQL таблица. Така че можете да го пуснете. Така че ако искате да избягате неща. Това беше предходния пример с напречно скриптиране. За съжаление не ни стигна малко по-късно. Утре, съжалявам! Утре имаме работно време. Така че работното време в Cabbot 8:00-11:00. Работното време са стриктно за викторина въпроси.