Хана Блумберг: Здравейте всички. Отиваме, за да започнете само няколко минути по-рано тъй като ние имаме един куп от материал, за да се измъкне сам. Аз съм Хана. Аз съм TF. Мария ще се присъедини нас само за няколко минути. Тя учи точка точно преди. Аз преподавам раздел полето след това, така че отиваме да я държи до час и половина. Така че, както ще видите тук, ние имаме доста няколко теми, които трябва да се измъкне сам, така че ние ще се случва малко бързо. Но ако във всяка точка ние казваме нещо прекалено бързо или не разбирате, Чувствайте се свободни да се прекъсва с въпроси. Ние искаме да бъдем в състояние да направи това преглед на сесията като полезна за всички вас колкото е възможно. Awesome. Така че нека да скочи право с някои теми, които ние всъщност много, много кратко обхванати за викторина 0 в прегледа сесия на викторина 0. Така че като се започне с свързани списъци. Така че просто се уверете, че имате някаква основни познания за свързани списъци и са удобни правиш някои от основните операции. Така че просто да се преразгледа, свързана списъци са по-добри от масиви защото те могат да растат динамично. Така че ние имаме, че огромно предимство. Виждали сме ги използвали в хеш таблици, когато ние не знам точно колко неща, ние ще искаме да вмъкнете в нашата структура на данните. За съжаление, ние имаме парчета свързания списъка цял памет, така че не е задължително да в състояние да направи постоянен достъп на времето до всеки елемент в свързан списък. С цел да се намери специално елемент, ние Трябва да превъртите всички начин от самото начало. Така че имайте предвид, че повечето от основни операции са омега на 1. Така вложка е просто ще отнеме 1. Изтрий ще отнеме н тъй като ние трябва да отида да го намеря от списъка. И за търсене могат да вземат, в най-лошия, п. Не можем да направим нещо подобно двоично търсене на свързан списък тъй като ние не можем просто произволно скочи до центъра. Готино. Awesome. Малко от стакове. Това, отново, се изкачи на викторина 0, така че трябва да е супер удобно с него. Но за купчини, Ви молим да си спомня една купчина от тави. И това ще бъде на първо място в, изкара. Така че ние стека нещата в стека, а след това ако ние се опитваме да вземе нещо off-- които ние наричаме пръкват разстояние на stack-- идваме на разстояние от върха. И ако искаме да се сложи нещо в топчето, което наричаме го натиснете. Така че тя винаги ще бъде расте от дъното като купчина тави. Awesome. Ние сме изпълнени видян стакове с двете свързани списъци и масиви. Ако сте изпълнение с масиви, което искате за да се уверите, за да следите както и размера на капацитета. Така размер ще бъде на ток няколко неща във вашия стак, като има предвид капацитета е общият брой неща, които можете да съхранявате на вашия стак. Готино. Много по подобен начин, ние имаме опашки. В този случай, вместо да мисли за купчина тави, мисля, че на една линия. Това ще бъде първата, първа изходяща. Така че, ако се редят на опашка за нещо в магазина, ние се надяваме, че лицето, на първо място в Онлайн ще се помогна на първо място. Вместо да кажем тласък и поп, както правим ние за комин, ние просто се каже Enqueue и dequeue. И отново, ако сте прилагане на тази с масив, ние трябва да следим не само размера и капацитет, но и главата, които ще е отпред на нашата опашка. Готино. Всякакви въпроси относно някой от това? Awesome. Преместване надясно по. OK, хеш таблици. Тук е мястото, където тя започва да получите наистина интересно. Така че хеш таблица е една реализация на асоциативен масив. Така че основно какво се е случило е ние имаме всичко това въвеждане, и ние го дам на хеш функция, която казва, Добре, това е мястото, където в хеш таблица принадлежи. Така че най-простият хеш функция които сме виждали е просто казвам, OK, предполагам, ние искаме да се сложи струни в нашата хеш-таблица. И наистина проста идея може да се каже, OK, нека просто сортирате от първата буква на думата. Така че можете да видите тук, ние приемаме банан, ние се прекарва през един хеш функция, и то се казва, хей, че трябва да отиде при индекс 1. Така че ние по същество да се сетя за хеш таблица като куп различни кофи. И всеки от тези кофи се случва да държи главата на свързан списък. И в този свързан списък е мястото, където можем действително пуснати различни парчета от данни. Така гмуркане малко повече в хеш функция, ето примерът Просто описано, където можем просто да кажем, OK, да вземе първата буква на думата и ние сме ще го оправи в кофите. Така че вероятно, че ще има 26 кофи, по един за всяка буква от азбуката. Защо да не е тази голяма хеш функция? Това, което прави този не-идеален? Да. АУДИТОРИЯ: Ти ще да има сблъсъци. Хана Блумберг: Да, точно така. Ще има сблъсъци. Така че това е едно нещо. И ние ще говорим за това как можем да фиксира сблъсъци само за секунда. Друг проблем с това специално хеш функция е, че нашата различно кофи ще бъдат от доста драстично различни размери. Ние знаем, че има един куп повече думи, които започват с A от X, така че ние ще имаме много небалансирани кофи в нашата хеш-таблица. Готино. Така че да, нека да се върнем към точката на сблъсъци. Какво да правим, ако има сблъсък? Ние имаме няколко различни опции. Така един, така че предполагам, че ние се опитваме да се сложи Бери в нашата хеш-таблица. И ние виждаме, о, ние искаме да го сложи в индекс 1, но банан вече живее там. Какво ще правим? Имаме два основни варианта. Номер едно е можем да кажем, OK, има в индекса на 1 няма място, но нека просто продължавайте да търсите чрез докато ние можем да намерим друго отворено място. Така че ние ще кажем, OK, нека си го сложи в точка 3. Това е една от възможностите. Това се нарича линейна сондиране. И втори вариант се казва, OK, добре, нека просто да направи всеки един от тези кофи бъде ръководители на свързани списъци. И това е ОК, ако има по- от едно нещо в кофа. Ние просто ще го прикрепите към предната част. Така че тук можете да видите, OK, когато ние добавя Бери, ние просто взех банан, вид го бутнах малко и хвърли едно зрънце в там. И това е също напълно глоба. Това се нарича отделна верижното. Можете да мислите за това като един вид като масив от главите на свързани списъци. Всякакви въпроси относно хеш маси, хеш функции? Awesome. Дървета и опит. Така че едно дърво е някакъв вид на структурата на данните в които има някаква на йерархия или някакъв вид за класиране на вашите различни обекти. И това ще стане супер ясно, когато видим един пример. И видяхме опит заедно с хеш таблици, в pset5-- което, отново, напълно честна игра за тази quiz-- като друга информация структури, които можем съхранявате различни неща. В случай на речника, ние се съхранява един куп думи. Така че нека да разгледаме някои дървета. Така че това е пример за едно дърво. Той има вид структура, че йерархична структура, където можете да видите, че този възел 1 в горната има някакъв ранг над 2 и 3, които са над 4, 5 и 6 и 7, които са над 8 и 9. Така че това е всичко, което разбираме под един дърво, така че може просто вид на представите това в главата си. Сега, ние имаме няколко по-специализирани дървета. Така един пример е двоично дърво. И двоично дърво е, отново, просто щеше да бъде структура на данни с някакъв вид йерархия, но всеки от възли може да има най-много две деца. Това е, когато думата идва от двоичен. Така че това е пример за двоично дърво. Така че това е по-малка категория дървета. Сега нека да стигнем още по-конкретен и говорим за двоичен trees-- двоично търсене дървета, а. Така че тук идеята е не само прави всеки възел са най-много две деца, но всички деца до лявото ще бъде по-малък и всички деца на полето ще бъде по-голям. Така че забележите само ни двоично дърво, има няма връзка между цифрите. Но в нашия двоично търсене дърво, което виждаме, OK, тук е 44. И всеки номер от ляво на 44 е малък и всичко надясно е по-голяма. И който държи на всяка ниво на дървото. Така тук, това е по-малък от 22 и това е по-голям от 22. И това е двоичен търсене дърво. Защо смятаме, че тя се нарича двоично дърво за търсене? Какво алгоритъм пък ви напомня? АУДИТОРИЯ: Binary търсене. Хана Блумберг: Binary търсене. Защото, ако търсите за специално номер в това дърво, във всяка точка, може просто да прати половината от дървото, което е страхотно. И така, това ще ни даде нещо че много прилича на двоично търсене. Някакви въпроси? Добре, хладно. Добре, се опитва. Любимата на всички. Така че това е пример, че сме виждали един куп в клас. И отново, това е просто още един така че ние може да съхранява данни. В случай на речника, отново, това е просто ще бъде струни. Така че нека да видим какво това всъщност прилича на малко по-ниско ниво. Така че нека да погледнем в един възел в Trie. И ние виждаме, OK, там става да булева и възел, указател към възела. И ние виждаме, че Булева се нарича is_word. Така че по същество, това е ще съответства да тези малки триъгълници, които казва, ако съм намерила тук, намерили цяла дума. Ние знаем, че "Тюринг" над тук е пълно дума, като има предвид, просто T-U-R не е дума защото ние не виждаме, че малко по-делта. И това малко делта, отново, съответства на тази is_word, това Булева is_word. И тогава имаме масив от деца. Така на всяко ниво, вие имат особен възел, и този възел точки към един спектър на цялата азбука. Така че можете да видите, отново, в този picture-- съм ще продължим да скача назад и forth--, че в горната масив има куп различни възли, идващи от него. Той има 26 или 27, ако искате да се включат допълнително характер. И това ни дава по- начин да съхранявате данните ни по начин, който може да се изгледа че можете да погледнете нагоре супер бързо. Какво е времето за справка за синтактично дърво? АУДИТОРИЯ: [недоловим]. Хана Блумберг: Да. На теория, това е константно време. Това само ще бъде размерът на думата, която искате да погледнете нагоре. Дори ако прибавим безброй повече думи към нашия синтактично дърво, това няма да ни отведе по-дълго, за да се определи ако дадена дума е в Trie. Така че това е наистина хубаво. АУДИТОРИЯ: Знаете ли, просто инициализира, че масив? Пропуснахте точка или две. Може ли да говорим само за че за секунда? Хана Блумберг: Разбира се, абсолютно. Добър въпрос. Въпросът е, ние имаме масив, който е Ще трябва възел звезда като за разлика от просто възел, нали? Готино. Така че тук това, което казвате, е нашата гама е само Ще бъде указатели към други масиви. Така че това е тя essentially-- вид чувства като свързан списък по този начин където всеки от тези деца просто точка към следващия възел. И начина, по който всъщност се определи, хей, OK, ние сме повтори през целия дума, е тази дума в речника, ние просто провери тази is_word. Great въпрос. Да. АУДИТОРИЯ: OK. Така че това, което беше по време на работа за TRIE? Хана Блумберг: Разбира се. Така време на работа за синтактично дърво за за справка ще бъде постоянна време. Така че това е просто ще бъде брой на буквите в думата. Това не е зависим от Размер на речника или размера на структурата на данните. Така че тук е малко по-прост пример. В този случай, можете да видите, че думата прилепът е в речника и имате увеличение, но вие не е нужно нещо като зоологическа градина. Как ще правим зоологическата градина? Как можем да добавим към нашия зоопарк речника, за да ни синтактично дърво? Да. АУДИТОРИЯ: Направи is_word вярно за [недоловим]. Хана Блумберг: Добро. Така че ние ще каже Z-О-О, и тогава ние ще Искам да отписвате тази кутия, както добре. Страхотен. Да сравним съвсем накратко опитва срещу хеш таблици. Опитва са наистина страхотни защото, както казахме, те осигуряват постоянна време за справка. Но огромният недостатък е те са огромни. Можете да получите чувството, дори и като погледнете в него, че това ще отнеме огромно количество памет. Така че те ще бъдат много по- по-голям от хеш таблици, но те ще дадат ни много по-бързо време за търсене. Така че това е вид на вашия компромис, това, което ви интересува, независимо дали това е скоростта или памет. Всякакви въпроси за всеки от които, Всички структури С данни. Красив. ДОБРЕ. Отиваме да се премине към по-малко малко на уеб разработки с Мария. MARIA Златкова: Lovely. ДОБРЕ. Хана Блумберг: Можете да използвате лаптопа си. MARIA Златкова: Nice. ОК готино. Както се движим сега, за да уеб развитие, ние говорихме малко за смяна на разрешения на файлове и директории така че те могат да бъдат достъпни на други потребители, към света, и за да можем да видим как основно можем да ги предадат когато ние разработваме неща, като уеб сайтове че ние сме най-вече били прави. Така видяхме командата коригират, който е в режим на климата, в общи линии. Това е команда Linux и той се променя разрешения за достъп на файловата система обекти. И на файловата система е обект на само една директория, файл, всичко, което можете, промените разрешенията на. Така че, за да видите файла за достъп, ние напишете командата ли, списъка, -l. И когато ние написали, че ние Обикновено видите някои разрешения че да изглежда нещо като това в предната част на име на директория. Така че г отнася до директория. И тогава ние имаме три триади, че в общи линии позова на разрешенията на двете потребител, група, или по света. Видовете разрешения, които можем имат за тези три групи от хора, са или R за четене, w за пише и за х изпълни. И ние можем да имаме тези за групата и света, както добре. Важното нещо е, че понякога когато напишете командата коригират, бихме написали някакъв номер че се състои от три бита. Така че можем да направим като 777 и основно посочена добавената стойност на всеки от тези триади защото г ще се отнася до 4, w ще се отнася до 2, и X ще се отнасят до 1, така че, когато се добавя, като всеки от номерата ще слезе до общ брой за кумулативен стойност между 0 и 7. Така че ние също може да има 0 за не разрешения на всички. И това основно ще ни даде разрешенията за или ползвателя, група, или света. Всякакви въпроси за тази досега? АУДИТОРИЯ: Казахте прочетете беше 4? MARIA Златкова: Да. АУДИТОРИЯ: [недоловим]. Хана Блумберг: Мда. АУДИТОРИЯ: И след това, чрез добавяне на всички, другите ще показват номера ви. MARIA Златкова: Да. Да. Това са големи въпроси. Lovely. След това, ние скочи в HTML и малко повече за уеб програмиране. Така HTML просто означава, HyperText Markup Language. И това е най-маркиране език, който е стандартен че той се използва за създаване на уеб страници. Тя се нарича език за маркиране защото не е действително компилира. Той не казва как някакъв код трябва да бъде изпълнена или нещо подобно. Тя просто се очертава и описва как уеб страница трябва да се създаде с всяка от нейните елементи и как те трябва да изглежда на потребителя. Някои от HTML таговете, че ние приближи са следните. Всички наши HTML документи Започнахме с DOCTYPE HTML. След това ние винаги имаме HTML тагове. Имаме главата и тялото. И това е важно, че има HTML този вид на вложените структура защото това е много ясно. И тогава става много ясно, когато ние трябва да отворите и действително близки тагове. И ние винаги се нуждаем, за да затворите тагове, които сме отворили. И тук имаме някои от видовете на нещата напред, които искаме да имаме. Така че ние имаме, например, Заглавието на CS50. И тогава ние всъщност можете да свържете стилов лист който определя как ще оформите нашия уебсайт. Това е CSS. Отиваме да го прегледаме в Следващата няколко слайда, както добре. В рамките на тялото, ние се създаде някои класове и IDs. И като напомняне, отново, IDs са уникални и хорариум може да бъде назначен на няколко елемента. И това просто означава, че можем да използваме класове и IDs в рамките на друга structures-- така, за Например, в рамките на CSS файлове или стил sheets-- да се позове на специфични елементи и в общи линии се каже, че ние искаме да оформите или проектирате някакъв елемент по някакъв определен начин. И ние се отнасяме към тях с техните имена и класове. И ние също може да се отнасят до различни неща от тагове, както и, но IDs и класове просто ни даде някои универсалност и какво конкретно ние Искам да се позова. Така че само един пример. Ние можем, отново, в рамките на файл CSS къде сме Искам да се определят някои style-- толкова цветове, шрифтове, и неща като that-- можем определя стила за тялото. Така, че ще я определят за цялото тяло маркер. Но тогава ние също може да се определи стил за #title. И отново, таг се отнася до нашата ID и точката се отнася до нашия клас. И тогава за .info, ние може също така да се определят някои атрибути. И отново, когато се върнем, имахме клас, наречен информация и нашия ID заглавието. И ние можем да видим, че ние се отнасяме им от #title и .info. АУДИТОРИЯ: Бихте ли казали таг [? приеме мен? ?] MARIA Златкова: Съжаляваме? АУДИТОРИЯ: Бихте ли казали таг [? приеме мен? ?] MARIA Златкова: таг означава ID, така #title се отнася до каквито и да било елементи получите този ID нарича заглавие. И тогава точката се отнася към класа. Така .info отнася до този елемент защото има инфо клас. Да. АУДИТОРИЯ: Защо правиш разграничаването им в HTML? Защо казвате, някои неща са Идентификатори и някои неща са клас? MARIA Златкова: Това е само до you-- Хана Блумберг: Повторете въпроса. MARIA Златкова: О, съжалявам. Защо ние се разграничат някои елементи като идентификатори и други елементи, като класове? Това е просто, защото това е Наистина често избор на дизайн. Тя ви дава много гъвкавост в това да може да се каже, аз искам този конкретен елемент за да получите този ID, защото те искат да направи много неща с него, а аз само искате да определите стила, определен стил или цвят, независимо за тази позиция. И начина да направите това е просто го дава ID. И тогава, ако аз искам да имам Няколко различни елементи като че вместо ще и създаване their-- вместо да го прави от маркер, защото етикетът да задаване на клетката за целия таг за всеки път, когато се използва този етикет, можете да зададете един клас до множество предмети. И след това просто достъп до този клас и да кажа Искам да оформите този клас по този начин. И отново, класът може да има множество различни предмети и ID трябва да е уникален. Големите въпроси. Всякакви други въпроси? OK, страхотно. Отново, това е как тези селектори са посочени в CSS, с таг, с дот, или без нищо за възлагане на стила на някои тагове, като тялото. И тук имаме генералът синтаксис на как се прави това. За да повторите някои най-добре практики за HTML и CSS, ние трябва да, отново, затворете всички на HTML тагове, които се отварят. И това, което ви е препоръчал направя за вашите окончателните проекти, както и за CS50 финансите, е да се направи сигурни, че всички си HTML валидира. И това е направено с W3 валидатора. И след това, което ние направих и това, което ние препоръчваме правиш е отделяне стил, така че CSS от HTML маркиране. Така че всичко, което се отнася до това как Вашата страница ще изглежда визуално и как то се случва да бъде модифициран трябва да отидат в един документ, CSS. И тогава си маркиране казва колко неща са във връзка един с друг е HTML, и че трябва да влезем вътре от вашите HTML документи. Някакви въпроси? MHM. АУДИТОРИЯ: Какво точно се случва на с валидирането на страница когато сме за утвърждаване на HTML, че [недоловим] е създал? MARIA Златкова: Така what-- си мислите. И така, какво точно се случва на с валидиране на страница и защо е необходимо да се направи това? По принцип, ние трябва да направим, че защото много пъти, за сваляне, ако не се затвори таг Или нещо такова, Вашия браузър все още продължава да направи една страница и все още може да работи, но това е най-добрата практика, за да се уверите, че сте, отново, затвори всичките си тагове, че всичките ви елементи са начинът, по който те трябва да бъдат, и в общи линии, че това е от конвенции, които са зададени. Това е, отново, просто нещо, което трябва да се научим да се прави, за разлика като sloppier код и подобни неща. Да. О, съжалявам. Мислех, че вдигане на ръка. АУДИТОРИЯ: Не, аз бях просто [недоловим]. MARIA Златкова: OK. АУДИТОРИЯ: Благодаря. MARIA Златкова: Разбира се, благодаря ви. Така че отново, става това, как информация се пренася и комуникационни модели за прехвърляне на информация. TCP / IP. TCP просто означава Предаване Протокол за контрол и IP се отнася за Internet Protocol. И това просто се отнася до начина, по който данните се доставя. Ако имаме някакви данни, че трябва да доставя така you-- можете да направите заявка за определен сървър. Например, когато пробвате достъп до cs50.net, ние да отправи молба към на CS50 сървъра и ние се види, че ние искаме да стигнем този вид информация. И след това се основава на този протокол за това как се доставя тази информация, сървърът дава информация обратно към нас, клиентът. И тогава ние сме в състояние да видите информацията за страницата и след това да го използвате. Така че след това Hypertext Transfer Protocol е само един протокол или да зададете конвенции, който определя как уеб браузър и уеб сървър трябва да общуват. И всичко това извеждайки заедно, HTTP отново само определя как е определено това хипертекст от HTML, че ние сме били, че работи, как трябва да бъде доставена до вас и как, че данните, които ви се предоставя получава за вас. И ето защо, ако вие си спомнят от един клас, имахме много заявки и ние имахме много синтаксис за тези искания, които ние сме Ще отидем в момента. Така че отново, когато изпращате искане до сървъра, ние трябва да се определят няколко неща. Така че ние трябва да намерим типа на искането, че ние сме за създаване. И пак, ние имаме, например, GET е един вид метод които имаме в нашата молба. И тогава HTTP / 1.1 е само протокол, който използваме в момента. Повечето от времето, което се случва с протокола, който използваме. Така че, ако имате въпрос подобно на вашия тест. Това е конвенциите че имаме досега. Обратно наклонена черта се отнася до това, което подреди на нещата ние сме с искане. След това, домакинът е, например, в този случай, ние се опитваме да отидете на google.com. Така че това е стойността на гостоприемник. Това е един вид искане които могат да бъдат изпратени. И тогава един вид отговор, който би могъл се изпраща, отново въз основа на този протокол, отново, HTTP / 1.1. Така че това е HTTP версията отново. 200 OK е само кода на състоянието. И това OK е просто фраза въз основа на този код статус. И тогава на Content-Type се отнася до типа че се връща към вас, че е за тази уеб страница, която получавате и че за сваляне може да направи след това. И това е текст / HTML. АУДИТОРИЯ: Какво означава 1.1 означава? MARIA Златкова: Това е просто версия of-- ох, какво прави 1.1 означава? Това е само версията, на HTTP версия на протокол, който използваме. Great въпрос. Други въпроси? АУДИТОРИЯ: Може ли да обобщим Content-Type много бързо? MARIA Златкова: Така че е това, което сървъра. вида на information-- което е тип съдържание е на въпросите. Така че това е вида на информация, която можете да получите обратно от сървъра, вида на данни, че браузърът може след това оказва се, че използвате. АУДИТОРИЯ: За това ли протокол ви казва да направите? MARIA Златкова: Съжаляваме? АУДИТОРИЯ: Е, че това, което казват протокола? MARIA Златкова: The protocol-- АУДИТОРИЯ: --what на Content-Type е или what-- MARIA Златкова: Протоколът се основава on-- какъв е протоколът ти казвам? Това е просто начина, по който че тази информация беше представено за вас въз основа по какъв протокол се получи тази информация доставени обратно към вас. Това прави ли смисъл нещо? Хана Блумберг: Вие може да се мисли за протокол като A-- Мисля, професор Malan го описа в клас, както е нещо като A-- това е като еквивалент на човешкото договаряне. Кажете, като, хей, аз съм молба и аз знаят как да се справят с HTTP на версия 1.1. И тогава сървърът казва, о, OK, I-- и двете съществуват. Аз също знам, как да се справят с HTTP / 1.1. И аз отивам да дам да архивирате част от съдържанието. В този случай, то се случва че е от типа на текст / HTML. Така че това е вид просто начин от тях за communicating-- MARIA Златкова: Това е просто потвърждавайки, че сте както следва същата протокол и че и двете клиента и така server-- Вашия браузър и server-- нещо като знам какво сте говорим за и имат конвенцията за преминаване в данните. АУДИТОРИЯ: Така Content-Type part-- на Текстът на Content-Type / html-- това е отделна част от едно и също послание? Или е част от да речем, 200? Дали 200 им кажа, че или is-- MARIA Златкова: 200 казва, че всичко е минало ОК. И тогава тип съдържание е нещо като обособена част от едно и също послание, и да казва това, което съм Върнати има този вид на текст / HTML. Това е просто дава повече информация. Имат ли нещо да добавите? ДОБРЕ. Всякакви други въпроси за тази? Awesome. Така някои други HTTP състоянията, които бихме могли да получите в допълнение към 200 OK, такива, които сме виждали, може би вероятно много са 403 и 404. Така 404, ако сте се опитвали да достъп нещо, което не съществува. Така например, във вашето CS50 Финанси psets, ако сте били прави quote.html и не сте имали този файл, но вместо това сте имали quote.php, че ще доведе до 404 не е намерена защото файлът не може да съществува. За 403 забранено, че се отнася до разрешенията. Така че, ако някой файл не се чете от свят, може да получиш 403 върнати. Някои други, които може да get-- 301, преместена за постоянно; 302, намерено; 304, Променено; 400, Bad Request; и след вътрешна грешка в сървър за 500 и 503, Service Unavailable. Да. АУДИТОРИЯ: Ще имаме очаква да запомня всички тези състояния? MARIA Златкова: Аз ще трябва ги на вашия мамят лист. [Смях] АУДИТОРИЯ: Дали сме се очаква да знам какво предизвиква всеки един? MARIA Златкова: те? Хана Блумберг: За тези, които сме тичам into-- така че въпросът was-- MARIA Златкова: Прави ли те очаква да знам какво всеки един от тях статут кодове може да се задейства от? Така че за тези, които сме ползвали и се блъсна в, бих казал, да. Така че ние сме категорично виждал 200 OK и да го изнесе в psets. Виждали сме 403, 404. За други такива? Хана Блумберг: Бих казват 500 изглежда честна игра. MARIA Златкова: 500, да. Хана Блумберг: Да. Просто имат общ смисъл от това, което ги причинява. А също и само от тях имена, можете да вид като се направи обосновано предположение, както е да, какво всъщност ги е причинило. Така например, се премести за постоянно, вероятно файлът е преместен за постоянно. АУДИТОРИЯ: Но при предишен изпит, имаше толкова как да очакват от нас да се отговори на този? Хана Блумберг: Това е на стойност нула точки. Въпросът за 418 на чайника е технически статут HTTP, но тя е на стойност нула точки. Очевидно е, че не сте Очаква се да ги знаят. АУДИТОРИЯ: Дали това е реална? Хана Блумберг: Това е реална един, но това не означава нищо. Това е просто една шега. Интернет души са смешни. MARIA Златкова: Големите въпроси, момчета. Всякакви други въпроси? АУДИТОРИЯ: Какво е вътрешна грешка в сървъра? MARIA Златкова: вътрешен грешка в сървъра просто означава, че сте били не може да комуникира със сървъра по някаква причина. Така че това не е задължително нещо, което трябва да направите, с клиента или нещо подобно. Аз не знам на всеки конкретен пример че сме отишли ​​над да обясни, но да. Хана Блумберг: Разбира се. Така например, като нека казват, че са работили за колаж и сървъра Google падна за някои причина, прекъсване на захранването, да речем. Това би било вътрешен сървър грешка или някакъв вид of-- ви харесва няма да получите отговор обратно. MARIA Златкова: Да. Това е просто, когато сте не може да комуникира със сървъра по някаква причина, защото на него ще надолу, или поради някаква друга причина. Така че да скочи в PHP. PHP, за разлика от HTML, е език за програмиране. И ние започнахме да го използвате, защото това е много полезно за уеб програмиране. Ние за първи път го използва в CS50 Finance. И то основно ни помага да донесе заедно тази маркиране, проектиране, и как ние всъщност използват информация за да се покаже неща в уеб страница. Така PHP самата означава PHP Hypertext Preprocessor, така че това е рекурсивно backnorym от само себе си. И отваряне тагове за PHP ние отляво и дясната стрелка, с въпросителни знаци и PHP. Така че ние вече сме виждали един куп него. Сега, ние просто ще отидем някои от основните неща за него. Така с PHP, променливата имена започват с знака за долар. Ние не посочите, отново, променлива написали вече. Точно както направихме с C, ние не трябва да го направя. Ние можем да направим един куп различни неща с променливи. Можем да ги съберете заедно от тях слепване с точкова нотация, която ние не може да се направи в C отново. Отново имаме малко повече гъвкавост с PHP по отношение на променливи. Отново, ние не разполагат с основната функция. И PHP се интерпретира за разлика от компилиран, Така че просто това как ние го направи за C файлове, ние не трябва да направя това за PHP. Но по-скоро, начинът, по който езикът се управлява от себе си, тя се интерпретира. И тогава хлабаво напечатани Просто означава, че ние не е нужно да посочите променлива тип и типовете на променливите се разбират по време на изпълнение. АУДИТОРИЯ: Но това, което направи кажеш с дот конкатенация? MARIA Златкова: Разбира се. Когато искаме да постави нещата together-- така че ако имахме някаква променлива, която имаше стойността на 3 и имахме друг променлива, която имаше стойността на низ, бихме могли да поставите променливите заедно с удар от точката между тях и ги слепване. Или можем да се създаде променлива, наречена на името и го сложете заедно с конкатенация на две струни. Така че, ако ние трябваше низ в двойна цитати и ще се постави една точка след него, и след това имахме още един низ, че ще създаде низ напълно. АУДИТОРИЯ: OK. MARIA ЛАТВИЯ: Е, че изчистите? АУДИТОРИЯ: Да. MARIA Златкова: OK. Да. АУДИТОРИЯ: Когато казвате тълкува, а не компилира, говориш не го направите трябва да бъде както е специфична, когато става въпрос за PHP спрямо C? MARIA Златкова: Когато казваме тълкува, за разлика от компилиран, какво ще кажеш? Така че това означава, че ние не се нуждаем изпълними файлове да тече PHP. Това означава, че той работи като тя отива. Това прави ли смисъл? Малко повече. Хана Блумберг: Значи ти да се сетиш на преводач като друга програма, която е отговорна за посещаване ред по ред чрез PHP и всъщност това изпълняващата, за разлика до всичко съставянето до двоичен. Той всъщност не означава нищо за това как специфично, което трябва да бъде. Ние все още трябва да бъдат точни и да не правим забравите запетая, и се уверете, като сте си знака за долар, и такива неща. Добър въпрос. MARIA Златкова: Да. Така ред по ред, като за разлика от C с файлове, ние трябва да се направи целия финал преди да може действително да го стартирате. Това е основната разлика. Но пак, ние не можем наистина да бъде по-конкретен. Така масиви в PHP представляват всъщност е наредил на картата. Така масиви асоциирани стойности на ключовете. Двата начина да декларират масив, основаващи се на този синтаксис, можем да бъдем по-ясно като казва, имаме масив и ние имаме това key1 който съпоставя да тази стойност 1, key2 който съпоставя стойност 2. Или просто можем да се създаде масив който съдържа самите стойности и след това клавишите са разбира по начин. Всякакви въпроси за това? Публика: Какво би ключовете бъде във втория пример? 0, 1, 2, 3? MARIA Златкова: Например, това е просто ключове в тази не непременно направи разлика. Те просто се определи как можете да използва стойностите вътре в него. Така че, ако имахме foreach цикъл в PHP, които биха ни позволи да мине през всички стойности, ние може да мине през всички стойности, дори ако имахме или не е дефинирано на специален код в сайта си Предишната синтаксис. Така че дори и с този вид от масив, ние все още може да имат foreach цикъл който преминава през всяка от стойностите в алгоритъма в масива. Така че синтаксиса на foreach линия, ние започваме с масив. Тази променлива $ ARR е реалното ни масив че определени в предишния слайд като стойност, която буквално отива през всяка от стойностите, независимо дали имахме ключ или не. И тогава можем да направим нещо с стойността вътре в контура foreach. Така че отново, ако имахме масив като този тук created-- Така че ние имаме ключа на дрън и стойност бар, ключът на Баз и стойност на qux-- ние можем да имаме foreach цикъл който преминава през масива като ключова ценност и след това да се направи нещо с ключа и / или стойност. Но ние не задължително винаги правим трябва да имаш foreach шлейфове, че преминава през множество, като ключ карта за стойност. Ние можем да проверете foreach цикъл масив като стойност. Хана Блумберг: И аз мисля, to-- е вашият въпрос, какво е косвената индекса? АУДИТОРИЯ: Kinda. MARIA Златкова: Oh. Хана Блумберг: Да, да. Така че основно, ако не укажете ключ, това ще бъде 01. MARIA Златкова: Да. Точно както с C, това е нула индексират, ако не посочите ключова. АУДИТОРИЯ: Съжалявам. Може ли да се опита да говори малко по-силен? Аз съм като малко проблеми като изслуша всичко. MARIA Златкова: Толкова съжалявам. Да, разбира се. Така че искаш да ме да разясни това отново? Или е this-- АУДИТОРИЯ: Така че на предишния slide-- ако можете просто да се върна за една секунда. MARIA Златкова: Разбира се, съжалявам. АУДИТОРИЯ: Така Второто масив тук не е така изглежда да имат стойност, до ключ, нещо като [? причинно-следствената връзка. ?] MARIA Златкова: Добре, добре. АУДИТОРИЯ: Е, как става това когато ти казват, че всичко или нищо. За мен, това изглежда като a [? Foo?] вече. MARIA Златкова: Да, да. Така че отново, това е поръча карта в този смисъл че там се разбира, например, индексите тук може да се разбира като 0, 1, 2, 3. Отново, това е като тези, индекси е нашият еквивалент да има ключове асоциират с ценности. Така че, ако ни беше ключов 0-- съжалявам. Хана Блумберг: Не, Има креда тук. Това всъщност е много хубаво. MARIA Златкова: Това е страхотно. ДОБРЕ. Така че отново, $ ARR 0 ще бъде ключът за стойността 1. 0 ще бъде ключът за стойността 1. АУДИТОРИЯ: Съжалявам. Това е невидим. Хана Блумберг: Добре, няма значение. Chalk е лоша идея. Аз го вземе обратно. Можете да мислите за ключовете като 0 карти на стойност 1. MARIA Златкова: Да. Така че това е 0, това е 1, 2, 3. Това могат да бъдат Вашите ключове. Можете да мислите за тях as-- да. Така че вместо да се налага изрични ключове, те са нещо като разбира като индексите, като се започва при 0. The тебешира не помогна. Да. АУДИТОРИЯ: За цикъла foreach, ако искаме да разглеждаш като стойност, тя би просто автоматично индекс на 0? MARIA Златкова: Да. Той ще премине през всяка от стойностите. АУДИТОРИЯ: [недоловим] като 0 или би, че просто правя 0? MARIA Златкова: Може би трябва да се каже, като знак за долар, а след това някои име на променлива, стойност. АУДИТОРИЯ: [недоловим]. MARIA Златкова: Съжаляваме? АУДИТОРИЯ: За съжаление, аз съм Просто се опитвам да си спомня. Как бихте се, че ако можете да го направите автоматично индексиране е само 0 на? MARIA Златкова: Е, как бихте направили, че ако не е имал конкретни ключови имена? АУДИТОРИЯ: Да. MARIA Златкова: Може би просто define-- само да кажа, себе си като някакво име. Така че във вашите psets, момчета мощ не забравяйте, foreach $ ред, колкото $ редове, ние бъдем себе си създал този ред $ казвайки ние искаме да мине през ред, колкото $ редове. Въпреки, че не сме имали това изрично $ реда, определени, бихме могли просто да отида и Казвам това, може да бъде нашият ключ, и просто да мине през всяка от стойностите. АУДИТОРИЯ: Така е стойност нова променлива ние създаваме за съхранение [недоловим]? MARIA Златкова: Така че това не е присъщо нова променлива. Това е променлива, която се отнася до вътрешността на масива на всеки от тях. Хана Блумберг: Това е ново име на променлива. MARIA Златкова: Да, това е ново име на променлива, но това не е inherently-- да. Това е просто една нова променлива че можете да направите това. Така че просто как сме направили $ ред, в $ редове, редове е нова променлива име, което ние може да създаде в нашата foreach цикъл. То не трябва да предхожда преди това. АУДИТОРИЯ: Бихте ли проверете логика за всяка, с помощта на пример има? MARIA Златкова: MHM. О, съжалявам. Ето примера. Сигурен. Така че за всеки array-- така това означава, отидете на този масив като ключов value--, че ще ходи да мине през този масив и първо да отида и да получите Foo г. ключова дрън и бара на стойност. И тогава на втория итерация на цикъл за, то се случва да мине през и да вземат ключовата Баз и qux на стойност. И тогава можете да направите нещо с някоя от тях или и двете от тях. АУДИТОРИЯ: Така че идеята зад като ключов момент за стойността, Какво искаш да свършиш достъп? MARIA Златкова: Каква е идеята да имат ключова посочващо да ценят? Това е просто друга конвенция, друг начин за преминаване през масива и е в състояние за достъп или на ключ или стойността, или и двете и да ги използват. АУДИТОРИЯ: Каква е ролята на поръчате че foreach работи в? Така че, ако бяхме да добавите елементи в масива късно ще бъдат тези на първите наречена в foreach масив, или ще бъде тя по-късно? MARIA Златкова: И така, какво е реда, че foreach линия преминава през масив в? Той преминава през първата елемент на последния елемент, до последната добавя елемент. Ако добавите елементи по-късно, те биха се accessed-- първите елементи ще достъпен като първата елементи на масива, и тогава ще мине през всеки от елементите като нещо като ordered-- Не подредена, но начинът, по който те са били пуснати в масива. АУДИТОРИЯ: Така че нови елементи се добавя по-късно? Така че те са added-- те ще бъдат на последните такива в [? итерация. ?] MARIA Златкова: Нови елементи can-- общо взето, когато се добавят нови елементи, те се добавят към края на масива? АУДИТОРИЯ: Да. MARIA Златкова: Мисля, че да. Да. И след това с вашия foreach цикъл, След като сте добавили нови елементи и ти мине през тях, новите елементи би accessed-- бъде новият елемент, ако това е прибавя последен, че ще бъде достъпен миналата. АУДИТОРИЯ: Можете ли да дадете пример на нещо, което би [недоловим] с нещо със стойност като [недоловим] или стойност, Харесва ми как бихте форматирате това? MARIA Златкова: Разбира се. Мога ли да дам един пример за това, което ние ще направим със стойността? Така че това, което вие може да са запознати с е, че сме преминали през масив и в общи линии на хартиен всеки от елементите, например, като част от нареден списък или нещо, което. Това прави ли смисъл, или искаме to-- АУДИТОРИЯ: Можем ли да отпечатате тези стойности навън? MARIA Златкова: Да, ние можем да отпечатате и след това основно $ стойност, тъй като най- тази конкретна стойност, ние ще бъдем отпечатване на стойността вътре в него. Така че, ако бяхме в първата ни итерация от него и ние отпечатан $ стойност, щяхме да печатате бар. АУДИТОРИЯ: Прави ли има и за линии в PHP или просто foreach вериги? MARIA Златкова: Няма също така и за линии в PHP. И тяхната логика е най-вече на същото като това, което сте свикнали. АУДИТОРИЯ: Така стойността му е нищожна. MARIA Златкова: То е като един и същ. Да. АУДИТОРИЯ: Аз съм просто ще попитам. Така че, когато обявят масив, не е нужно да каже какъв размер, че ще да, което означава, че можете просто добавете и ще отнемат елементи [недоловим]. MARIA Златкова: Мда. Да. Точно. Когато декларираме масив, ние не е нужно да се каже какъв размер е то, така че можем да просто добавете елементи върху нея по-късно, както добре. Още въпроси? Така привеждане PHP и HTML заедно, това, което сме seen-- добре, Например, в този пример, ние имаме една HTML форма, която има поле за въвеждане. И полето за въвеждане е само име и след това го има бутон Изпрати. И когато натиснете Submit бутон, в нашата hello.php файл, тъй като методът за формата е получите, ние можем да получите достъп до всичко, което е по име от настоящата получите глобална променлива, че is-- синтаксиса за него е $ _GET. И тогава можем да имаме достъп, независимо от въвеждане на потребителя в рамките на тази форма за името като се посочва името на тази област. Всякакви други въпроси или който и да е въпроси за тази конкретен пример? АУДИТОРИЯ: Къде е PHP? MARIA Златкова: Тук. Така че това е нашата отваряне маркер за PHP. АУДИТОРИЯ: О, да. MARIA Златкова: Да. Хана Блумберг: The = е стенограмите за това е, PHP и просто ехо. АУДИТОРИЯ: Oh. MARIA Златкова: Да, съжалявам. Трябваше да се направи, че ясно. Хана Блумберг: Print. MARIA Златкова: Това е просто функция която ни позволява да отпечатате нещо. Great въпрос. Така going-- да. АУДИТОРИЯ: Има ли щеше да бъде доста малко на ръка кодиране на PHP и HTML на викторина 1? MARIA Златкова: Не може да има справедлива стойност на тълкуване на PHP и HTML, не е задължително като огромно количество кодиране, въпреки че може да се наложи да напише foreach цикъл, все пак, а за цикъл. Всеки от контурите, че покриване тук е честна игра. И това е най-вече тя. Хана Блумберг: Бих се получава. По същия начин, по който те помолих да напиши куп C функции в викторина 0, Бих бил готов да направи за същата в PHP и JavaScript. MARIA Златкова: Да. Хана Блумберг: Бих казал, а little-- като ние не сме ще ви накара да напиша огромна HTML страница, просто защото това е малко по- досаден, но може да се наложи части. Това е напълно честна игра. Като малък HTML страница, напълно справедливо. АУДИТОРИЯ: OK. Какво ще кажете за в JavaScript, както и? Хана Блумберг: Да. Честна игра JavaScript е. MARIA Златкова: Да. Това е напълно честна игра. Хана Блумберг: Ще стигнем По подобен на този на 10 минути. MARIA Златкова: SQL, отново, Език за структурирани заявки. По същество това ни позволява да управлявате данни в релационна база данни за управление на система. Това просто означава, основно че имаме някъде за съхраняване на някои данни, че ние може да искате да използвате в сайт или под някаква друга форма. И тогава имаме заявки, за да получите информация от нашата база данни, или да поставите информация в тях. Много от общата ones-- UPDATE, INSERT, SELECT и DELETE. Така че за UPDATE, това е синтаксиса за актуализиране на данните в база данни. Актуализиране на тази таблица, наречена таблица с думите, SET, можем да зададем някои стойности във всички редове на равно нещо друго. Така че ние можем също да посочите някои специфични записи, които искаме да се промени и че може да бъде с помощта КЪДЕ. И ние можем да се уточни, че ние искаме да само модифицирате някои редове, където къщата за, ако имахме една маса на студентите и всички студенти имали къща, така че ние ще се промени само някои стойности когато една къща се равнява на куриер, например. За INSERT, можем да вмъкнете определени стойности в таблица. Така INSERT INTO маса, и след това стойностите, и след това в скоби, ние зададени по който се оценява искате да вмъкнете. Така INSERT INTO маса, col1 и col2, стойността е VAL1 и VAL2. Така че това вмъква в основата на нов ред в таблица, съдържаща стойностите 1 и 2 В колоните 1 и 2. И тогава ние ще отидем един бърз пример как това изглежда като в нашата база данни малко. Но този последен въпрос, че аз мисля, че започваш да се разясни, SELECT, той просто ни позволява за да изберете данни от таблица по възможност да го използвате по-късно. И начина, по който да направите това е, че ние просто да го съхранявате в някои променлива. И тогава ние евентуално да го използвате отново. Така SELECT звезда означава изберете всички. Това е просто стенограмите за избиране на всички. ОТ КЪДЕ маса, ще се търсят за някои специфични условия, така, когато колоната се равнява нещо, например. Ако ние просто исках да избери всички от трапезата, това просто избира всички колони и всички редове от таблица. И след това изтриете от таблица КЪДЕ цв равнява нещо, това просто изтрива някои ред от нашата маса където ние имаме някои специфични условия. В този случай, условията са колона се равнява на нещо. Така че само един бърз пример за това. Ако имаме тази таблица точно тук и ние поставете го в една маса, тези стойности, че ще се въведе нов ред. И ако имахме автоматично увеличение, това би Просто увеличение нашия ID 0-1, за да 2. Ако избран от всички ученици, то просто връща всички области и всички редове. Когато година е по-голяма малка или равна на 2016 г., че просто ще се върне Хана и себе си. И след това, ако ние просто избрано година номер и година от учениците когато къщата е Cabot House, че би, отново, върнете Хана и себе си. След това, ако ние изтрит от учениците където име е равна на Роб, че ще изтрие целият ред. И след това, ако ние си поставихме за име, студенти UPDATE SET име се равнява на Daven КЪДЕ къща е равна Cabot House, че ще ходи да отидете тези редове и след това да актуализират името. И тогава няколко типа SQL данни са CHAR, VARCHAR, INT, и оборотни средства. Това са честна игра. Аз ще отида отново и се уверете, че знаете и да ги има на вашия мамят лист, това, което всеки от тези знаци са били използвани за какво можете да ги използват на вашите psets, и се уверете, че сте запознати и удобно с налага да избирате от различни типове данни в твоята pset. Да. АУДИТОРИЯ: Какво се съхранява тази таблица? Да, в което се съхранява тази таблица? MARIA Златкова: Е, точно сега, това не е съхранена. Както и да е, където се съхранява тази таблица? Но това може да се съхранява в база данни SQL. АУДИТОРИЯ: А къде е SQL база данни? В компютъра, онлайн някъде, сървърът? MARIA Златкова: Тя може да бъде брой различни неща. Хана Блумберг: Ние сме свързан с SQL таблици предимно с PhpMyAdmin. Така че ние може да зададете на сървъра да ги съхранява за нас. Бихме могли да ги съхранявате на нашия собствен компютър. MARIA Златкова: Просто зависи от как искате да го направим за себе си. Но ние сме били съхраняване тях, като Hannah споменато, на PhpMyAdmin, който е онлайн. И след това начина, по който използвате PHP и SQL, ние го съхранявате в някаква променлива това, което сме попита за. Така че, ако ние Избор на всички от историята където user_id равнява на идентификатор на сесията, че да изберете всички редове за конкретния човек, който е влязъл в историята от маса и ги подреди в реда. A готино нещо да знаете е, тази функция заявка CS50 е предпазва от SQL инжектиране тагове. Това просто означава, че тя се грижи на входа, който е влязъл е вярна и че лицето, което навлиза на входа не се опитва да въведе някакъв злонамерен код или да пуснете нашите маси или изтриете всичко вътре в нашата база данни. Един бърз преглед на Model View Controller модел това е просто един начин за организиране на и мисля за код. Това е отново, парадигма дизайн. Това означава, че ние can-- и това е добра практика да се разделят на различни части на нашия код и това, което те контролира в тези три парадигми. Така че нашето мнение е най-често ни шаблони, нашата оформление, начинът, че ние зададете как нашият код изглежда. Това е най-вече нашите CSS файлове и начина, по който че определени дизайна на нашия код, основно. Нашата контролер е най-вече това, което ние сме били прави с PHP файлове. Така че отново, работещи с информация, която имаме и за определяне на начина, че информация се използва, и след това преминаване тази информация или върху мнението, или модела. И модела, начинът, по който ние сме Използвам т.е. е била нашата база данни, така, когато информацията ни е съхранява така че има някъде да живеем, и имащи някоя от код, който се отнася до начина, че сме се, че информацията, или така, че ние да актуализира тази информация. Така че в този модел MVC, HTTP искания се изпращат на уеб сървър. След това, интерпретира контролер По искане от страна на потребителя и след това се проверява на входа за употреба. Това е опция, която имаме контролерът комуникира с модел, така че нещо като нашата база данни или някои други функции предаваща информация. И накрая, на контролера преминава информация върху изгледа така че тя може да бъде постановено и че тя може да стават видими за всяко лице, достъп до уеб страницата. Някакви въпроси? Awesome. Така че отново, моделът, неговата функция, отново, е устойчиво съхранение на информация, управление и организиране на данни. И това, което сме виждали толкова доколкото е базата данни MySQL и всякакви файлове с данни, които могат да използват. Виж, представяне на информация на потребителя, ПС, или потребителски интерфейс. И пример за това е HTML. И тогава можем да имаме минимално PHP. Така че за цикъл който итерации в сравнение с данните, които са отпечатани и е част от гледката, като за разлика от администратора. И тогава много от нашите PHP файлове попадат в категорията на контролера. Тя просто се обработва заявките на потребителите и получава информация от модела. Скачането в документ Object Model, това просто се отнася до начина, по който HTML документи са организирани. И те са организирани в дърво структура, която има йерархия. Така че, ако ние имаме достъп до [недоловим] представяне на документа, можем да работим с документа, като манипулираме обекти основно. И за да има малко по-ясно, когато ние имаме много на нашата различни тагове реагират към различни маршрути в нашето дърво. И тогава за този пример, ние има изходен документ възел. Ние имаме, а след това, нашата HTML възел че се разделя на главата и тялото. Head има заглавие и след това заглавие съдържа здравей, свят. И нашето тяло просто съдържа здравей, свят, както добре. Така че на всички въпроси на всяко от неща, които са обхванати досега? И ако не, ще Hannah поеме с JavaScript. Awesome. Хана Блумберг: OK, хладно. Ако нещо идва с PHP или HTML, или който и да е от нещата, Maria покрити, ние винаги може да направите пауза. Ние правим по-добре на отново, толкова страхотно. И само за да се върнете много бързо с това, ако погледнете всеки изминалата година изпита, това идва either-- тук е някои HTML, направи тази схема. Или ето тази схема, да направи някои HTML, така че със сигурност, че практикуват. И тогава това е една гарантирана въпрос, който можете да получите право. Готино. Така че нека да говорим за JavaScript и как тя е малко по- различно от езици като PHP и C, двата езика, които видяхме по-рано. Така че номер едно, това е хлабаво написали. Това е като PHP, но за разлика от C. Това е интерпретиран език. Отново, това е все едно PHP, за разлика от C. И това ще ни позволи да го use-- работи много добре с уеб страници. Това ще ни позволи да се манипулират съдържанието и как изглежда и какво прави. Отиваме да видим малко на Аякс. Тя ни позволява да общуват асинхронно с различни сървъри и да получите информация. И това е нещо, което наистина разделя JavaScript от PHP и C е, че тя е от страна на клиента. И двете PHP и C са обикновено от страна на сървъра. За по-голямата част и почти изцяло това, което сме виждали, поне в този клас, JavaScript действа от страна на клиента, което означава, че браузърът е всъщност отговаря за стопанисването. А това означава, че ние не правим Трябва да взаимодействат със сървъра. Така че това означава, че той може да бъде много по-бързо защото това е всъщност само това е Chrome, това е Safari, това е Firefox, каквото и да използвате всъщност използвате вашия JavaScript. АУДИТОРИЯ: Какво означава асинхронен означава? Хана Блумберг: Ах, какво се асинхронно означава? Great въпрос. Асинхронно means-- и, в която съдържанието ние използваме това е, ОК, ние създавате уеб страница и ние трябва да получите някаква информация. Така че с примера на колаж, някаква информация, че ние може да искате е заглавия на статии. Сега, ние could-- една опция е да го направя синхронно а това означава, нека да спрете, иди се статията, получите статия гърба, а след това правят, но това ще бъде много бавно. Това би било лошо потребителски опит защото просто ще се седи там в очакване на нещо, за да се отговори. Асинхронно ние ще означава, продължи да ходи за нашия бизнес, оказване на страницата, и ние ще изпрати искане това е вид ще да се случи във фонов режим. Мисля, че ние използваме примера в лекция на обадите Rob и каза: хей, може да погледнете този нагоре за мен и се върна при мен, за разлика от просто ме чака на телефона. Така асинхронно означава това се случва във фонов режим, далеч от нас паралелно. Great въпрос. Нещо друго? Страхотен. Ние ще скочи много повече в асинхронни заявки с Аякс. АУДИТОРИЯ: Има ли JavaScript-- къде е тя падне с Model-View-Controller? Хана Блумберг: Great въпрос. Къде JavaScript есен с Model-View-Controller? Hm. Предполагам, че това може да fall-- така че ние обикновено не искали да го мачкам, че в парадигма, но предполагам, бих казал, ОК, така че JavaScript всъщност ще позволи нас, за да се съберат данни, тълкуване на данни, всъщност правят смислени неща с данни. По този начин, това е много подобен на контрол. Но тя също ще ни даде възможност да показване на нещата и печат неща. По този начин, това е много подобен на оглед. Да. Така че това е нещо като PHP в където може да бъде едновременно вид. Добър въпрос. Нещо друго? Добре, страхотно. Преместване надясно по. Така че нека да видим един пример за това как можем да използваме JavaScript в един от нашите уеб програми. Така че аз ще разгледа този index.html с куп HTML. И нещо, което искате съсредоточи върху този скрипт е маркер. И това казва, OK, Искам да изпълня някои JavaScript и тук е мястото, където то живее. Тя живее в hello.js. И много като CSS, можехме сложи JavaScript в HTML. Защо може да искаме да я отдели? Да. АУДИТОРИЯ: По-лесно да се пренапише? Хана Блумберг: Да. По-лесно е да се използва в целия различни уеб страници. Тя поддържа нещата чисти. Това е просто добра практика. Awesome. Добър отговор. Е добре, така че това се случва да бъде наш index.html. И тогава тук е нашата мъничък файл JavaScript. И всичко това се казва, е предупреждение Здравей, свят. Така че това, което се случва, е, когато тази страница renders-- така че ако отидете на каквото сайт това is-- всичко, което ще се случи е, че ще ходи да се каже, OK, аз съм ще изпълня този код JavaScript. И този код JavaScript просто казва сигнал Здравей, свят. Така че аз отивам да се получи това дружелюбен малък изскачащ. Готино? Това е нещо като нашия първи JavaScript програма, нашата Здравей, свят. Нека да погледнем малко повече за това, което синтаксиса на JavaScript изглежда. И по-специално, нека да го сравни с C и PHP, което сме виждали преди. В JavaScript, ние ще имаме Var, името на променливата, а след това действителната му стойност. И ние не посочите тип, просто като в PHP, но много разлика в C. Така например, ако искаме за съхраняване на стойността 50, в C, ние ще трябва да се каже, хей, C, искам цяло число, Отивам да го наречем I, и неговата стойност е 50. В PHP, това е малко по-лесно. Ние казваме, хей, аз искам променлива наречено аз и неговата стойност е 50. Много подобен начин, в JavaScript, ние казват хей, аз искам променлива наречена аз, неговата стойност е 50. Всеки последващ момент, който да използвам Аз, аз не трябва да напишете Var. Това е просто, аз от този момент нататък. По същия начин, в С, където веднъж казваме инт аз, ние просто използвайте аз. Готино? Всичко е наред. Преминавайки към вериги, За щастие, те почти Посетете exactly-- Мисля, че са точно същото като това, примки ще изглежда като на нещо като C, където си за контур ще има три parts-- инициализация, състояние, както и актуализация. А докато линия, тя изглежда точно същото. Ние просто го даде състояние. И да не се прави линия, докато, отново, точно същото. Ние го условие даде. Да кажем, че аз исках да превъртите over-- Исках да направя нещо пет пъти. В C, и да запишем за първоначален аз равна на 0. I е по-малко от 5, и ++. Единствената разлика, в JavaScript, вместо да каже инт аз равна на 0, ние казваме Var аз равна на 0. Красив. Това е единствената разлика. Всякакви въпроси относно някой от това? Да. АУДИТОРИЯ: Така че в PHP, това е същото нещо, с изключение, но като променлива? Или е, че например Var? Хана Блумберг: Да. Така че в PHP, че ще ходи да бъде знак за долар. Така че това ще $ I равни 0, $ I е по-малко от 5, $ аз ++. Great въпрос. Сега нека да поговорим за декларации функция. В C, когато ние обявен за функция, ние го даде име и ние го даде някои параметри. И в началото, ние написахме вида. В JavaScript, всички ние трябва да направите е напиши функцията на ключова дума, която казва, хей, JavaScript, Аз съм за да се определи функция. В този случай, той има име сума. И това отнема два аргумента, х и у. Забележете, че не ни пука за вида на х и у. И точно като C, имаме тази ключова дума за връщане, така че можем да направим нещо като завръщане х и у. И сега, след като сме написали тази първа функция, можем да използваме сума навсякъде. И това е напълно наред. Един наистина готино нещо за JavaScript, че е много за разлика от C е, че функции може да се третира като ценности. Така че можем да направим нещо подобно тук където аз предполагам, че това обхваща up-- I покриваше Var сумата part-- и ние току-що каза функция XY равнява връщане х плюс ш. Това е, което ще се нарича анонимна функция. Това е функция, без име. Отчитайки, че това казва функция сума, дрън, дрън, дрън, това само ще кажа функция. Но сега, въпреки че имам тази анонимна функция, тази функция е наистина само една стойност. Ние можем да се отнасяме към него като стойност. Така че можем да го запишете в променлива еднакви начин ние може да съхранява 50 в променлива. Така че можем да кажем, OK, искам променлива, тя се нарича сума, и тя е тази функция. Така че тези две неща са всъщност смяташ да правиш едно и също нещо, но синтаксисът е малко различен и вид забавление за сведение. Да. АУДИТОРИЯ: Така бихте могли да наречем функция, която е анонимна, като казва, скоби сума 2, 5? Хана Блумберг: Да. Можете да се обадите на тази анонимна функция по същия начин. Можете да направите сбор (2, 5) ;. Това би било напълно глоба. Ако не съм направил Var сума се равнява функция, ако просто заличава this-- Знам, че е на ръката ми, но се преструвам, че заличава this-- тогава тази функция е вид просто изчезна. Вие никога не може да го използвате отново, защото не е нужно име за него. Трудно е да се обърнете към нещо вие не знаете какво да се обадя. Добър въпрос. Да. АУДИТОРИЯ: Можете ли референтни сума в други места с стойността на х плюс у? Хана Блумберг: Можете ли да референтната сума на други места със стойност х плюс ш на? Не съм съвсем сигурен какво искаш да кажеш. АУДИТОРИЯ: Значи вашето минало полу-анонимен функция е сума е равна на тази анонимна функция, така че сумата е сега е променлива, която can-- Хана Блумберг: Точно така. Така сума е променлива, но това е actually-- така сума е променлива, чиято стойност е функцията. Така че това е функция, която е вид странно нещо да приключи главата си около тъй като ние сме били играе с C и не можете да направите това в C. Но сега можем да наречем сборът на същия начин бихме могли да наречем сума тук. АУДИТОРИЯ: OK. Хана Блумберг: Да. Добър въпрос. Да. АУДИТОРИЯ: Така че ние не използваме прототипи в PHP или JavaScript? Хана Блумберг: Не, ние не е нужно да използвате прототипи, особено в JavaScript. Така че една практика нещо лошо, че аз съм щях да кажа, че не трябва да правите е, че не трябва да пиша аз Var = 50. Можете просто да започнете да правите аз = 50. И просто ще направи и глобална променлива. Това е много лоша практика да никога не казват изрично в Var аз, но това е нещо, което можеш да направиш. Преводачът не е Ще ти крещя. JavaScript е доста подобно, можете да направите това, което искате. О, съжалявам. Има две. В оранжеви панталони. Продължавай. АУДИТОРИЯ: Не, ти си първа. АУДИТОРИЯ: Не, аз просто казвам Не съм имал ми ръка. ДОБРЕ. Така че, ако ви се налага да се обадя първия път, сега обобщим, ние го наричаме по същия начин, X, у, като всеки път? Хана Блумберг: Да. Така че тези две по същество направи същото нещо. АУДИТОРИЯ: И какво е предимството използване на един или друг? Хана Блумберг: No предимство използване на една или друга. Аз просто исках да ви покажа две различни парчета от синтаксиса. Много пъти, когато анонимен функции имат една цел е, ако аргументът на друг функция трябва да бъде функция. И ние ще видим, че в само за секунда с Аякс. Така че ако това не се прави никакъв смисъл, да го съхранява в задната част на главата си. Това е, когато анонимен функция може да бъде полезна защото това не е наистина си струва като му даде име, тъй като ние сме просто ще ги използва само веднъж. Да. АУДИТОРИЯ: Ако х и у промяна късно нататък, ще обобщим промените, както и? Хана Блумберг: Ако х и у климата по-късно, ще обобщим промените, както и? Така че това е всъщност I мисля, че нещо, което е, отново, то просто се чувства много по-различна от С. Това не е стойност. Това не е 5. Това е просто самата функция. Така че веднага след като сте я дам параметри, тогава вие всъщност ще се изчисли стойност. MARIA Златкова: И след това можете да се обадите на функцията и да го използвате, за да получите някаква стойност. Хана Блумберг: Точно така. Точно. Да. АУДИТОРИЯ: Така че, ако просто да го съхранява в променливата, като Var х е равно на сумата от два values-- Хана Блумберг: Да. Така бихте могли просто правя Var сума се равнява на сума от две стойности. Да. Всякакви други въпроси? Да. АУДИТОРИЯ: Но би, че обърка сума и сума? Например, ако се обадите на вашия променлива сума, ще ти се обадя на функцията сума? Хана Блумберг: Мм. Мм. Ако си направил нещо като, сума се равнява на сума 2, 5? АУДИТОРИЯ: Да. Хана Блумберг: Вярвам, че ще презапише стойността на сумата. Така че още един интересен нещо за JavaScript е, че една променлива може да отнеме на куп различни видове. Bad практика. Не трябва да се направи нещо като това, което току-що каза. Но в C, ако аз се помещава равна на цяло число, ние знаем, че никога не е ще се превърне в низ. Това не е случаят в JavaScript. Да, добър въпрос. Нещо друго? Всичко е наред. Правейки всичко точно на време. Поддържане става. Всичко е наред. Ако се вгледаме в масив в JavaScript, ето един бърз пример за масив от низове. И масиви могат да растат динамично. Те не разполагат с фиксиран размер по същия начин, че те правят в C. Ние можем да получите достъп до елементи с само квадратните скоби. Това много прилича на PHP и много като C, където можем да кажем, в този случай, ако исках думата JavaScript, бих се ARR квадратни скоби с 0, 1, 2. И тогава, ако си спомняте в C, когато ние исках да се получи дължината на масив, това е много досадно. Но в JavaScript, супер лесно. Всичко, което правим, .length. Тя дава на дължини. Това е. АУДИТОРИЯ: Това е просто. Хана Блумберг: Да, прави живота си много по-лесно. OK, не object-- там. Обекти в JavaScript усещане много прилича structs в C и асоциативни масиви в PHP. Така че това, което сме виждали много е JSON, които щандове за JavaScript Object Notation. И това е в основата на пътя структуриране на нашите данни. Така че нека да видим един пример, може би най-лесният. Така че тук е един пример за един обект която съхранява класа, CS50. И когато казвам клас, искам да кажа, разбира се, Не like-- да, хода, CS50. И вие ще видите, че всичко в обекта ще трябва да се съдържа в фигурни скоби. И ние започваме да се сдружават имена на полета или клавиши с различните стойности. Така че можете да започнете да виждате как този вид чувства като асоциативен масив в PHP. Така че ние ще се свържем полето или ключовото име, хода, с низ, CS50. Отиваме да има инструктор. Отиваме да имат TFS. Отиваме да имат брой psets и ние ще се записва. И едно готино нещо е да се отбележи всички тези неща имат различни видове, и това е напълно наред. Това е добре за един обект, в действителност, Това е може би очаква за един обект да има комбинация от струни и номера и Булев тип и масиви и каквото друго може да се искате да имате във вашия обект. И имайте предвид, че те ще бъдат имената или ключовете, и тогава ние просто го настроите равно с малко на дебелото черво. АУДИТОРИЯ: Какво точно има JSON означава? Хана Блумберг: Какви точно прави JSON означава? JSON просто означава JavaScript Object Notation. Това е просто начин за форматиране. Да. Това е начин на форматиране на нашите данни. В C, това е structs. В PHP, това е асоциативни масиви. В JavaScript, имаме обекти. АУДИТОРИЯ: Така CS50 е обект? Хана Блумберг: CS50 е предмета в този случай. Сега, как правим всъщност достъп тези области или променят тези области. Да предположим например, ние решихме, че искахте една по-малко pset този семестър. Вместо девет, ние сме просто ще трябва осем. Как бихме се промени това? О, грешен начин. Има два начина, които можем да направим това. Номер едно е с точка нотация и номер две е с квадратна скоба нотация. Така, например, ако аз искаха да променят или достъп полето за psets в нашата CS50 обект, какво бих направил е CS50.psets, така че името на обекта точка Името на областта или клавиша. Много по подобен начин, това е точно еквивалентно да направя CS50, и след това в квадратни скоби, psets. Готино? Да. АУДИТОРИЯ: Така е JSON технически JavaScript все още, въпреки че в psets ние тя отдели [недоловим]? Хана Блумберг: Разбира се. Така че въпросът е, са JavaScript и JSON еквивалент? Така JSON е бройна система, основно начинът, по който ние напишете на обект от JavaScript. Така че те не са абсолютно еднакви. Бих казал, JavaScript, има са обекти в JavaScript. JSON отнема тези обекти и ги разпечатва и ги показва или да ги съхранява в хубав начин. Така JSON не е програмиране език начинът, по който JavaScript е. Това е просто нотацията за нашите обекти в JavaScript. Да. АУДИТОРИЯ: така, какво точно [Недоловим] завършат? Хана Блумберг: Разбира се. Така че това всъщност не прави нищо. Това е просто начин за достъп. Така че нека да кажем, ние искахме да се промени броят на проблемните комплекти 9-8. Това, което правим, е да направим нещо като CS50.psets = 8 ;. Да, голям въпрос. Това е само за да ви покажа синтаксис. Всъщност не прави нищо полезно. Някакви въпроси? Преместване надясно по. Така че нека да разгледаме един бърз пример за това как JavaScript работи, защото Казах ти, че прави всички тези неща и готини ни позволява да модифицирате уеб страници. Нека всъщност го видим в действие. Така че да, например, този HTML файл. И нещо, което искам да се съсредоточи върху е този маркер, който е бутон, с идентификатор search_button. Това е просто на страницата. Така че сега нека да видим какво всъщност можем да направим. Е, предполагам, когато кликнете този бутон, ние искаме да направим един alert-- вие сте кликнали върху бутона. Нека да видим как можем да направим това. Така window.onload-- това не е нещо които сте виждали в клас, следователно Не е нужно да го знаеш за теста. Но това основно се казва, OK, повикване тази функция, когато товарите прозорец. Така че това е просто вид настройка код. Не се притеснявайте толкова много за това. Това, което искам да се съсредоточи върху е тук. Ние казваме Var searchButton равнява document.getElementById search_button. Така, както можете да се досетите, какво прави това е той казва, OK, отидете намерите елемент с ID search_button. И сега ние имаме, че действителната елемент и аз съм отивам да го съхранявате на променлива searchButton. И сега ние всъщност може да използвате този елемент и да я промените, или достъп до своите ценности, такива неща. Ние всъщност може да започне да се ангажират с уеб страницата. Така че тук аз казвам, OK, сега, че имам този бутон, когато тя се натисне, наричаме тази анонимна функция. Така че това е мястото, където анонимен функции ще бъдат полезни. И какво прави функцията направя? Е, това просто нарича това Предупредителен функция и тя казва, вие сте кликнали върху бутона за търсене. И така, какво ще се случи, ако отида там, където този HTML живее и аз щракнете върху бутона, Ще получите фантазия малко нащрек който казва, вие сте кликнали върху бутона. Така че нещата да се фокусират върху here-- document.getElementById получава специално HTML елемент с даден ID. И сега ние да зададете това, което трябва да се случи, когато този конкретен елемент е щракване. АУДИТОРИЯ: Трябва да се сложи всичко това в? Хана Блумберг: Съжаляваме? АУДИТОРИЯ: Трябва ли да физически кодира всичко това? Хана Блумберг: Трябва ли да физически кодира всичко това? Да. Не е ли това вид досадно? Това е много код. АУДИТОРИЯ: Може да внасяме нещо. Хана Блумберг: Точно така. Можем да използваме нещо. И в particular-- о, това е ми казваше, че трябва да научи раздел. По-специално, нека използвате библиотеката JQuery, защото това беше наистина дълъг и много досадно и аз искам да бъда в състояние да го опрости и да я направи по-кратък и по-лесно да се напише. Така JQuery е библиотека на JavaScript. Така че JavaScript е програмен език; JQuery е библиотека. И го прави един куп неща, по-лесно. Това прави променя и става цяла на HTML документ много по-лесно. Това прави по-лесно боравене събития. Това прави по-лесно анимация и го прави по-лесно Аякс. Така че нека да скочи в две от тези неща точно сега. Извинете ме. Преди да се направи, някои основни синтаксис. Това е, което най-призовава да библиотеката JQuery изглежда така. Ние използваме тази долар sign-- няма връзка знак на PHP, Просто inconvenient-- името на селектор, точка, а след това действие. Така че нека да видим някои конкретни примери за това, че. Така че това всъщност е един и същ Код от слайда на събитието. Така че този дълъг, грозно нещо става това много по-хубав, по-малък нещо. Така че нека да се опитаме да се разбие. Това се казва, OK, jQuery-- този долар sign-- JQuery, ме намери на прозореца. Така че това е избор. Когато тя зарежда, обадете се на тази функция. Така че това е всичко вътре. ДОБРЕ. Дотук добре? Всичко е наред. Сега, JQuery, намери ми нещо с ID search_button. И за какво се натисне, наричаме тази функция. И тогава тази функция е точно същото. Просто направи малко за известяване, вие сте кликнали върху бутона за търсене. Така че това е наистина хубаво. Това наистина се кондензира и опростява нашия код. Откъде знам, че това е ID search_button а не като клас search_button? АУДИТОРИЯ: таг? Хана Блумберг: Да. Този символ хашиш, това е точно като CSS. Така че не забравяйте, с CSS, когато ние Исках да изберете нещо от ID, ние използвахме знака паунд. И когато ние искахме да изберете нещо от класа, ние използваме точката. Страхотен. Има смисъл? Така JQuery е трябвало да просто правят живота ни по-лесен. Да. АУДИТОРИЯ: Така че аз съм малко объркан да как работи анонимен функция. Смятате ли да назовете това anonymouse функция, функционира? Как се нарича? Хана Блумберг: Разбира се. Така че функцията е просто дума, че казва, аз съм за да се определи функция. АУДИТОРИЯ: О, OK. Хана Блумберг: OK? И тогава ние го давате като аргумент to-- нека да тази вътрешна one-- към функцията кликване. Така че да, така че функцията, тази анонимна функция, стане действителен аргумент. Така че не забравяйте, в JavaScript, ние може да лекува функции като стойности. АУДИТОРИЯ: О, OK. Хана Блумберг: Да. Харесва ми, че "О". Ница. Други въпроси? Time? MARIA Златкова: Добро. Good. Хана Блумберг: Awesome. Бързо полезна JQuery. Аз няма да отида чрез всички от тях. Тези слайдове ще до онлайн малко по-късно, така че можете да проверите тя се малко по-късно. Но в основата си, генералът модел притежава когато казваме, OK, хей, JQuery, тук е моят селектор и след това тук е дадено действие. И вие можете да правите неща като достъп стойност на формуляр, достъп до някои HTML, контрол, което се случва, когато потребителят поддържа форма, такива неща. Да. АУДИТОРИЯ: Така че в изпита, ние ще се наложи да знам доста от документацията JQuery. Така че предвид факта, че ние Copy / Paste на JQuery документация, за да ни мамят лист, където е изготвен на линията? Подобно колко ни е нужно да знаем? Хана Блумберг: Great въпрос. Въпросът е същество има предвид, че можете Не можете да получите достъп до документацията JQuery по време на изпитването, Колко трябва да зная? Ние не би очаквал да дойдеш с някои случайни функция че ние ще очаквате да Google. Нещата, които са честна игра са Бих казват просто вид на общия синтаксис, е в състояние да изберете от ID и от class-- така точно като CSS. И след това на действителните функции themself, ние най-вероятно ще ви кажа. Да. АУДИТОРИЯ: Така че, когато изберете от клас би означавало точка. Хана Блумберг: Да, точно така. Good. Когато изберете от клас, то се случва да бъде точка, вместо знака паунд. Да. АУДИТОРИЯ: Бихте ли разясни разликата между избора чрез ID и от класа? Хана Блумберг: Разбира се. Разликата между избираща ID и селектиране от клас. Така че, както каза Мария а Малко по-рано, има може да бъде само един HTML елемент с даден ID, като клас, тя ни позволява да група куп на различни елементи заедно, така че нещата, които са свързани, но не точно същото. Това отговаря ли на въпроса? Awesome. Да. АУДИТОРИЯ: Какво става, ако имате няколко неща, които са от същия клас? Хана Блумберг: Какво се случва ако имате няколко неща, които са от същия клас? Така, например, ако сме Просто се използва чист JavaScript, ние ще направим нещо подобно document.getElementsByClass. И тогава какво всъщност прави е връща масив от елементи. И ти трябва или обхождане или ги намери един, който искате. Това няма да се получи сте един елемент. Това ще ви даде множество елементи. Great въпрос. Нещо друго? Awesome. Така че аз мисля, ако сте запознати с всяко JQuery сте видели в pset, трябва да сте добре да тръгвам. Въпрос? О, не. Аз наистина трябва да се научи. Отпуснете се. Тя ще се оправи. Аз ще отида там. Нека поговорим за Аякс. Така Аякс ще бъде A-- добре, нека започнем с това, което е съкращение от. Това е акроним. Той е за Asynchronous JavaScript и XML. И XML е основно ще бъде [Недоловим] с вид на нашите данни. Но ние не сме в действителност се използва XML. Вместо това, ние просто използвайте JSON. Така че основно, това е някои data-- асинхронен, JavaScript, и данните, в този случай, JSON. И нашата цел, както споменахме малко по-рано, е да бъде в състояние да направи искане, са, че искането се направи си нещо в фон, но продължи направим каквото можем, възнамеряват да правят. И тогава, когато тази информация е готови, след това ще го приеме. Така че нека да видим какво е това всъщност прилича. И това, вие трябва да бъдете малко запознати от pset8, тази, която току-що беше вътре. Така че тук е валиден JQuery функция, която бихме могли Искам да знам about-- този знак за долар. Така се казва JQuery функция, .getJson. И това, което прави тази функция е отнема URL а някои parameters-- така че мисля в случая на pset8, това е като, адреса е articles.php и параметри беше отидете = някои пощенски код. И той казва, OK, да отправи молба към този URL с дадените параметри. И това просто се случва. Когато тя приключи, това е било ще завършат успешно или тя ще се провали. Така че това е еквивалентът на повикване Rob и да го помоли да направя нещо. И тогава, когато той нарича обратно, той е или Ще кажа, че съм направил или не успях. Така че в случая, когато сте направено, вие казвате, OK, аз съм свършен. И тогава ти се обадя тази функция. В този случай, тя ще бъде по- функция, която използва някаква информация. Онзи, ние обикновено се интересуват само от данните, данните, които действително сме били върнати като резултат от наричайки .getJSON. И вие може да се направи нещо с него. Така че, в случай на pset8, ние го показва като списък. Fail ще бъде функция който се нарича ако искането не успее по някаква причина. И в случай на pset8, ние просто го console.log. Всякакви въпроси за това? Да. АУДИТОРИЯ: може ли просто да използвате функцията тета вместо функция, textStatus, jqHXR. Хана Блумберг: Разбира се. Така че, да, мисля, че в pset, ние просто видях функция данни. Така че това е просто the-- да, OK. Това е, което видяхме в pset. Това е напълно наред. Това са само ако искаш да извадя повече информация, това са нещата, които бихте могли да получите от .getJSON. Добър въпрос. Нещо друго? Да. АУДИТОРИЯ: Така .getJSON е Аякс? Хана Блумберг: OK. Така че това е вид на труден част. Това е функция, която позволява на JQuery можете да направите асинхронни разговори. И тези асинхронни разговори, това е това, което ние сме били като се позовава на Аякс. Да. Това ми отне доста време да разкъсвам на парчета, когато бях студент. АУДИТОРИЯ: Може ли да се каже, че отново? Хана Блумберг: Да. Мога ли да се каже, че отново? Тази функция .getJSON, тя е функция JQuery. И това ще ви накара асинхронен повикване. И тези асинхронни разговори, ние сме са тези, които се отнасят до като Ajax. Всякакви други въпроси? Ние имаме само оставили няколко минути. И Мария ще приключи с охрана и след това отиваме да бъде само за направено. MARIA Златкова: Awesome, OK. Така че това is-- просто да отнеме няколко секунди, за да погледне през този. И това не е нещо наистина страхотно. И може ли някой да ми каже защо? Какво се случва в дрън и май може да потенциално да доведе до нещо лошо, и какво се нарича? Да. АУДИТОРИЯ: Ако аргумента, че е преминал през повече от 12 знака, тя може да прелее. MARIA Златкова: Точно така. Perfect. Как се нарича? Можете просто да го спомена. АУДИТОРИЯ: препълване на буфера. MARIA Златкова: Мда, препълване на буфера. Така че това е нещо, което ние наричаме препълване на буфера. И ние виждаме, че във вътрешността на Foo, ние определено нашия буфер, с, с площ от 12. Въпреки това, в главната, не го правим провери по някакъв начин на всички дали argv1-- така че беше на втория аргумент. Ние не се провери дали размер на това е целесъобразно. Така че, ако имахме особено злонамерен потребител които слагат по някакъв аргумент, че е повече от 12, и след това потенциално отвъд пределите на които аргумент, имаше някои изпълним код че той се опитва да направи нещо лошо с него; След това, какво ще се случи, ще отменят връщането адрес на функцията Foo, причиняване на функцията, когато връщане да се изпълни този код. И след това лоши неща могат да се случат. Означава ли това да има смисъл за всеки? И как можем да защитим срещу това? Някакви предложения? По принцип, в рамките на потенциално Foo, как можем да се уверете, че това не може да се случи? АУДИТОРИЯ: Ако размерът 12 е надвишен, бихте отпусне допълнителна памет? MARIA Златкова: предложение е, да разпредели допълнителна памет на размера превишен. Всъщност, можем да направим нещо по- Много по-просто от това, както добре. Ние можем само да получите дължината на низ на аргумента, че е вписано, проверите дали това е по-малко малка или равна на 12-- което е това, което ние го искаме да бъде, защото ние не искаме тя да надхвърли границите на нашата буфер. И тогава, ако това не стане, ние може да работи с аргумента. И тогава, ако това се случи, ние всъщност искаме да Yello потенциално изложени на потребителя. Но това е начина, по който би направил това. Да. АУДИТОРИЯ: Бихте ли обясни memcpy много бързо? MARIA Златкова: О, съжалявам. Да. Memcpy поема каквато is-- Съжалявам, OK. Memcpy поема каквато е в бар, каквато е преминал върху Foo като аргумент на командния ред. Така че това ще отнеме argv1. Argv1 се нарича бар тук. Така че това ще отнеме бар и то се случва да го копирате в гр. АУДИТОРИЯ: OK. MARIA Златкова: И това ще copy-- трети аргумент просто се отнася до колко то се случва да копирате в гр. АУДИТОРИЯ: Ah. Така че това е една копиране всички от него след това. MARIA Златкова: Да, това е копирането на всички от него. Да. Първо, ние сме сигурни, лентата не е равно на нула, защото това е една показалка. Тогава получаваме дължината низ от бара. Ние се уверете, че това е по-малко от или равно на 12. И след това, защото ние сме се е убедил, можем действително memcpy и бъдете сигурни, че това е ОК. Някакви въпроси? Страхотен. Имам два въпроса вярно или невярно. Може ли някой да ми каже веднага ако те са истина или лъжа? Да, това е вярно. Точно. Двете от тях са фалшиви. Така че с помощта на една парола никога не е наистина добра идея защото, ако някой знае паролата си, те могат просто достъп до всичките си други сметки. И тогава икони не правят нищо за да се гарантира сигурността. Ние обикновено трябва да се търсят HTTPS вместо HTTP и URL. И някои други видове атаки, които сме споменати, че Давид е споменато в лекция, SQL инжекция атаки. Вече видяхме, че ако ние don't-- на Функция заявка CS50 гарантира, че SQL инжекция атаки не могат да се появят. Но ако ние не използваха CS50, цитирам, край на цитата "в заявката," ние ще трябва да се уверите, че приноса на потребителите всъщност не е някаква SQL заявка, че ще предизвика всички нашите маси да бъдат снети или нещо лошо, за да се случи с нашата база данни. Отвличане сесия е друг вид атака , което се случва, когато някои лоши човек използва сесия някои жертвата ID, за да видите информацията за вход. Така че много тривиален пример за това е като ако имаме обществен компютър, тогава лошо лицето се регистрира и след това те имат бисквитки, които се запаметяват. И бисквитки не се променят за сесия. Тогава ние сме жертва отидете в и след това да влезете в сайта. Бисквитите не се променят за определен сесия. И тогава жертвата логва в на интернет страницата и след това си тръгва. И тогава човекът, който датира След това все още може да използва своето заседание ID за достъп до тяхната информация. Така че това е един от примерите за как това може да се случи. И тогава аз няма да се тревожи твърде много за специфичен код или нещо така че може да доведе до това, но с някаква идея какво променливите са включени в настоящото. И тогава манипулиране с глава данни е друг вид атака че има Давид говори за. И то просто се отнася до това, което може да се случи, когато отговорът, на HTTP отговор в рамките на нашата глава Не е санирани правилно. И всеки от fields-- например, ако някой презаписва един от хедъра стойности да съдържат нищо повече от това, което те трябва да contain-- и действително съдържа, например, а 200 OK статус код, а след това те потенциално биха могли да направим злонамерен неща, когато те не трябваше да. Но аз няма да се тревожи твърде много за специален код че това може да доведе, просто някак разбиране високо равнище, такива неща. Мисля, че това е всичко, че ние трябва да се покрие. Невероятно. Всеки, който има някакви въпроси относно някоя от нещата, които сме обхванати? Да. АУДИТОРИЯ: Значи един вид повече логистична въпрос. Е главно фокусирани съдържанието върху нещата след викторина 1? MARIA Златкова: Значи въпрос е, е съдържанието Основната дейност на нещата след викторина 1? Така че фокусът е върху след викторина 1, с изключение че ние трябва да се съсредоточи върху нещата в pset5 и много структурите от данни че ние обхванати. И ние не можем да кажем, че сме може да игнорира всичко, преди да че тъй като тя се основава на това, както добре. Така се съсредоточи върху този, плюс pset5 материал като включително свързани списъци, стекове, опашки, както и всичко, че Хана премина. Хана Блумберг: Точно така. Да, ние отидохме над всички неща на C В самото начало много бързо. Но се уверете, че да се преразгледа. Върнете се назад и гледам викторина 0 преглед. Няколко по-логистични бележки, Просто, докато ние имаме вашето внимание. Ние ще имаме работно време както в понеделник и вторник вечер. Те ще бъдат в MD 119. Това е всичко, на интернет страницата, така че ако не го, не се безпокойте чуе. MARIA Златкова: 8:30-11:00. Хана Блумберг: Да, 8:30-11:00. Ние ще бъдем там. Ще бъдем там, за да отговаря на въпроси. Това е доста хлад и забавно. Вие, момчета, могат да задават всякакви въпроси че имате по викторина 1. И викторина 1 е на Сряда, толкова добър късмет. Ако имате някакви въпроси, може би дойде да говориш с нас тук един-на-един. Готино. Благодаря много. MARIA Златкова: Благодаря много, момчета. АУДИТОРИЯ: Yay. [Аплодисменти]