Ханна Блумберг: Привет всем. Мы собираемся начать всего пару минут раньше поскольку у нас есть целый много материала, чтобы пройти. Я Ханна. Я TF. Мария собирается присоединиться нам всего пару минут. Раздел Она преподает прямо перед. Я учу раздел право после, так что мы собираемся держать его в полтора часа. Итак, как вы увидите здесь, у нас есть достаточно несколько тем, мы должны пройти, таким образом, мы будем идти немного быстрее. Но если в какой-то момент мы что-то сказать слишком быстро или вы не понимаете, не стесняйтесь, чтобы прервать с вопросами. Мы хотим, чтобы иметь возможность сделать это обзор сессии в качестве полезной для всех вас насколько это возможно. Потрясающие. Итак, давайте прыгать прямо в с некоторые темы, которые мы на самом деле очень, очень кратко рассмотрены для Тест 0 в обзорной сессии викторины 0. Так, начиная со связанными списками. Так что убедитесь, что у вас есть некоторые базовые знания о связанных списков и удобно делать некоторые из основных операций. Так что просто рассмотреть, связаны Списки лучше, чем массивы потому что они могут расти динамически. Итак, мы имеем огромное преимущество, что. Мы видели их использовать в хэш-таблиц, когда мы не знаю точно, сколько вещи, которые мы собираемся хотите вставить в нашей структуре данных. К сожалению, у нас есть куски связанный список всего памяти, таким образом, мы не обязательно будет в состоянии сделать постоянный доступ времени к любому элементу в связанном списке. Для того, чтобы найти конкретный элемент, мы есть для перебора всех способ с самого начала. Так что имейте в виду, что большинство из Основные операции Омега 1. Так вставка только собирается взять 1. Удалить собирается взять п, так как мы должны пойти и найти его в списке. И поиск может занять, в худшем случае, п. Мы не можем сделать что-то вроде бинарный поиск на связанный список Поскольку мы не можем просто случайно перейти к середине. Круто. Потрясающие. Немного стеков. Это, опять же, пришли на викторине 0, так что вы должны быть супер комфортно с ним. Но для стеков, мы просим вас запомнить стек тарелок. И это будет первый в, последний из. Таким образом, мы стек вещи в стеке, а затем если мы пытаемся взять что-то off-- которые мы называем появляются от stack-- мы оторваться от вершины. И если мы хотим, чтобы положить что-то в стеке, мы называем это толкает. Таким образом, это всегда будет растут снизу, как стек лотков. Потрясающие. Мы видели стеки реализованы с обеих связанные списки и массивы. Если вы реализуете с массивами, вы хотите чтобы убедиться, что следить за И размер, и пропускная способность. Так размер будет ток Количество вещей в вашем стеке, в то время как мощность составляет общее количество вещей, которые вы можете хранить в стеке. Круто. Очень точно так же, у нас есть очереди. В этом случае, вместо того, чтобы думать о стек тарелок, думаю линии. Это будет первый в первый вышел. Так что, если вы выстраиваются в очередь за то в магазине, мы надеемся, что человек впервые в Линия будет помочь в первую очередь. Вместо того чтобы сказать толчок и поп, как мы делаем для стека, мы просто говорим в очередь и вывода из. И опять же, если вы реализации этого с массивом, мы должны следить за не только размер и мощность, но также руководитель, который будет передняя нашей очереди. Круто. Любые вопросы по любой из, что? Потрясающие. Движемся дальше. ОК, хэш-таблицы. Вот где он начинает получить действительно интересно. Таким образом, хэш-таблица одна реализация ассоциативного массива. Поэтому в основном то, что произошло является у нас есть все это вход, и мы даем его в хэш функция, которая говорит, ОК, это где в хеш-таблица принадлежит. Так простейшем хэш-функции что мы видели только говорят, ОК, предположим, мы хотим, чтобы положить строки в нашей таблице. хэш- И действительно простая идея может быть, чтобы сказать, хорошо, давайте просто Сортировать по Первая буква этого слова. Таким образом, вы можете видеть здесь, мы берем банан, положить его через хэш-функции, и он говорит, эй, что должны пойти на индекс 1. Таким образом, мы может существенно думать о хэш Таблица в кучу разных ведра. И каждый из этих ковшей происходит чтобы держать голову связанного списка. И в этом связанный список, где мы можем фактически положил различные части данных. Так дайвинг немного больше в хэш-функции, вот пример я просто описано, где мы просто говорим, ОК, взять первую букву слова, и мы собирается разбираться в ведрах. Так, предположительно, там будет 26 ведра, по одному для каждой буквы алфавита. Почему это не большая хэш-функция? Что делает этот не-идеал? Да. АУДИТОРИЯ: Вы собираетесь иметь столкновений. Ханна Блумберг: Да, именно так. Вы будете иметь столкновений. Так вот одна вещь. И мы будем говорить о том, как мы можем исправить столкновений всего секунду. Еще одна проблема с этим частности хэш-функция является то, что наша отличается Ковши будет довольно резко различных размеров. Мы знаем, что есть много больше слов, которые начинаются с А, чем X, таким образом, мы будем иметь очень несбалансированные ведра в нашей таблице. хэш- Круто. Так что, да, давайте вернемся к точка столкновения. Что нам делать, если есть столкновение? У нас есть несколько различных вариантов. Таким образом, одна, поэтому предположим, что мы пытаемся положить ягоду в нашу хэш-таблицы. И мы видим, о, мы хотим чтобы положить его в индекс 1, но банан уже живет там. Что мы будем делать? У нас есть два основных варианта. Номер один, мы можем говорить, ОК, нет никакой комнаты в индексе 1, но давайте просто держать глядя через пока мы не можем найти другой открытое место. Так мы будем говорить, хорошо, давайте положить его в месте 3. Это один вариант. Это называется линейное зондирование. И второй вариант говорит, хорошо, хорошо, давайте просто сделать каждый из этих ведер быть руководители связанных списков. И это нормально, если есть больше чем одной вещи в ведро. Мы просто собираемся добавьте его на фронт. Поэтому здесь можно увидеть, хорошо, когда мы вставили ягоду, мы просто взял банан, вид толкнул его на немного и бросил ягоду там. И это тоже совершенно нормально. Это называется отдельный цепочки. Вы можете думать об этом как-то вроде массив из руководителей в связанных списках. Любые вопросы по хэш столы, хэш-функции? Потрясающие. Деревья и пытается. Таким образом, дерево какой-либо структуры данных в котором есть своего рода иерархии или какой-то ранжирования ваших различных объектов. И это станет супер ясно, когда мы видим пример. И мы увидели попыток, а с хэш-таблиц, в pset5-- которые, опять же, совершенно справедливая игра для этого quiz-- как другой данных структуры, которые мы можем хранить разные вещи. В случае словаря, мы сохранили кучу слов. Итак, давайте взглянем на некоторые деревья. Таким образом, это является примером дерева. Он имеет такую ​​структуру, иерархической структуры, которая, где вы можете увидеть, что это 1 узел в верхней есть какая-то ранга выше 2 и 3, которые превышают 4, 5, и 6 и 7, которые выше 8 и 9. Так что все, что мы подразумеваем под дерево, так что вы можете просто вид изображения в вашей голове. Теперь у нас есть несколько более специализированные деревья. Так одним из примеров является бинарное дерево. И бинарное дерево, опять же, будет структура данных с какой-то Иерархия, но каждый из узлов может иметь не более двух детей. Вот где слово происходит от двоичного. Таким образом, это пример двоичного дерева. Так что это меньше, категория деревьев. Теперь давайте еще более конкретно и говорить о бинарной trees-- бинарного поиска деревья, а. Так вот идея не только делает каждый узел имеет не более двух детей, но все дети в левый будут меньше и все дети в Справа будет больше. Так заметить в только наш бинарное дерево, есть Нет связи между числами. Но в нашем бинарного поиска дерево, мы видим, ОК, вот 44. И каждый номер слева 44 является меньше, и все вправо больше. И, что держит на каждом уровень дерева. Таким образом, здесь, это меньше, чем 22, и это больше, чем 22. И это бинарное дерево поиска. Почему мы думаем, что называется бинарного дерева поиска? Какой алгоритм это вам напоминает? АУДИТОРИЯ: Двоичный поиск. Ханна Блумберг: Двоичный поиск. Потому что, если вы ищете Номер, в этом дереве, в каждой точке, вы можете просто постучать от половины дерева, который является большим. И так, что происходит, чтобы дать нам что-то что выглядит как бинарный поиск. Любые вопросы? Ладно, круто. Ладно, пытается. Любимец. Так что это пример того, что мы видели кучу в классе. И опять же, это просто еще один так, что мы можем хранить данные. В случае словаре, опять же, это просто будет струны. Итак, давайте посмотрим, что это на самом деле Похоже, на несколько более низком уровне. Итак, давайте взглянем в одном узле в синтаксического дерева. И мы видим, ладно, там собирается быть логическое и узел, указатель на узел. И мы видим, что Логическое называется is_word. Так по существу, это собирается соответствовать в этих маленьких треугольников, которые говорит, если вы получили здесь, Вы нашли полное слово. Мы знаем, что "Туринг" над вот полный слово, в то время как только Т-У-Р не слово потому что мы не видим, что мало дельту. И, что мало дельта, опять же, соответствует этому is_word, этот логический is_word. И тогда у нас есть массив детей. Таким образом, на каждом уровне, вы есть конкретный узел, и что узел указывает на Массив весь алфавит. Таким образом, вы можете видеть, опять же, в этом picture-- Я будет держать прыжки назад и forth--, что этот массив в верхней имеет кучу разных узлы, поступающие от него. Он имеет 26 или 27, если вы хотите включить дополнительный символ. И это дает нам способ хранения наших данных таким образом, что можно посмотреть на что вы можете посмотреть супер быстро. Что такое время поиска для синтаксического дерева? АУДИТОРИЯ: [неразборчиво]. Ханна Блумберг: Да. В теории, это постоянная времени. Это только собирается быть размер Слово, которое вы хотите посмотреть. Даже если мы добавим Zillion больше слов в нашем синтаксического дерева, он не собирается, чтобы взять нас больше, чтобы определить, если данное слово в синтаксического дерева. Так что это действительно приятно. АУДИТОРИЯ: только ли вам инициализировать этот массив? Вы пропустили точку или два. Вы можете просто поговорить о что на секунду? Ханна Блумберг: Конечно, абсолютно. Хороший вопрос. Вопрос был, мы есть массив, что это будет иметь узел звезды, как в отличие от просто узла, верно? Круто. Так вот то, что мы говорим, это наш массив это просто будет указателями на другие массивы. Так что это essentially-- его вид чувствует, как связанный список таким образом где каждый из этих детей просто указывают на следующий узел. И то, как мы на самом деле определить, эй, хорошо, мы повторный через весь Слово, это слово в словаре, мы просто проверить эту is_word. Большой вопрос. Да. АУДИТОРИЯ: ОК. Так что же среда для синтаксического дерева? Ханна Блумберг: Конечно. Так во время выполнения для синтаксического дерева для поиск будет постоянная времени. Так что это просто собирается быть количество букв в слове. Это не зависит от Размер словаря или размер структуры данных. Так вот немного более простой пример. В этом случае, вы можете видеть, что слово летучая мышь в словаре и у вас есть зум, но вы не есть что-то вроде зоопарка. Как бы мы сделать зоопарк? Как добавить зоопарк к нашему словарь, на наш синтаксического дерева? Да. АУДИТОРИЯ: Сделайте is_word верно для [неразборчиво]. Ханна Блумберг: Хорошо. Таким образом, мы бы сказать, Z-O-O, а затем мы бы хотите проверить эту коробку от а. Отлично. Давайте сравним очень кратко пытается против хэш-таблицы. Пытается действительно здорово потому что, как мы уже говорили, они обеспечивают постоянной времени поиска. Но огромный минус это они огромен. Вы можете получить чувство, даже глядя на него, что собирается взять огромное количество памяти. Так они собираются быть намного больше, чем хэш-таблицы, но они собираются, чтобы дать нам намного быстрее раз подстановки. Так что вроде вашей компромисс, то, что вы заботитесь о, будь то скорость или память. Любые вопросы по любой из, что, все структуры данных C. Красивый. ОК. Мы собираемся, чтобы перейти на немного немного веб-разработки с Марией. МАРИЯ ZLATKOVA: Прекрасный. ОК. Ханна Блумберг: Вы можете использовать свой ноутбук. МАРИЯ ZLATKOVA: Ницца. Ладно, круто. Как мы движемся в настоящее время на веб развития, мы немного поговорили об изменении прав доступа файлов и каталогов так что они могут быть доступны другим пользователям, к миру, и так, что мы можем увидеть, как в основном мы можем передать их когда мы разрабатываем такие вещи, как веб-сайты что мы в основном делали. Таким образом, мы увидели команду CHMOD, что смена режима, в основном. Это команда Linux и он изменяет права доступа объектов файловой системы. И объект файловой системы просто каталог, файл, все, что вы можете изменить разрешения. Таким образом, чтобы увидеть права доступа к файлам, мы набираем команду Ls, список -l. И когда мы вводим, что мы обычно видите некоторые права которые выглядят вроде как это перед именем каталога. Так г относится к каталогу. И тогда у нас есть три триады, что в основном см разрешений либо пользователь, группа, или мир. Типы разрешений, что мы можем есть для этих трех групп людей либо R для чтения, W для писать и выполнять на х. И мы можем иметь те, для группа и мир, а также. Сложная вещь, что иногда когда мы введите команду CHMOD, мы должны ввести некоторое количество которая состояла из трех битов. Таким образом, мы могли бы сделать, как 777 и что в принципе сослался на добавленную стоимость каждого из этих триад потому что г будет относиться к 4, ж бы см 2, а х будет относиться к 1, поэтому, когда суммируются, каждое из чисел сойдет с общим числом кумулятивного значения между 0 и 7. Таким образом, мы также могли бы 0 для каких-либо разрешений на все. И, что бы дать нам в основном разрешений для каждой пользователя, группа, или мир. Любые вопросы по этому так далеко? АУДИТОРИЯ: Вы сказали, читал, было 4? МАРИЯ ZLATKOVA: Да. АУДИТОРИЯ: [неразборчиво]. Ханна Блумберг: Да. АУДИТОРИЯ: А потом, добавив все те другие будут указывать номер. МАРИЯ ZLATKOVA: Да. Да. Эти большие вопросы. Прекрасный. Далее, мы прыгнули в HTML и а немного больше о веб-разработке. Так просто означает, HTML Язык гипертекстовой разметки. И это разметка язык, который является стандартным что он используется для создания веб-страниц. Это называется язык разметки потому что это на самом деле не составлен. Это не говорит, как какой-то код должен быть выполнены или что-нибудь подобное. Это просто очерчивает и описывает, как веб- страница должна быть создана с каждым из ее элементов и как они должны выглядеть для пользователя. Некоторые из HTML-теги, что мы подошел являются следующие. Все наши HTML документов начал с DOCTYPE HTML. Тогда у нас всегда есть HTML тег. У нас есть голова и тело. И важно, что HTML-есть это своего рода вложенной структуры потому что это очень ясно. И тогда становится ясно, когда мы нужно открыть и на самом деле близкие меток. И мы всегда должны закрыть метки, которые мы открыли. И здесь у нас есть некоторые виды вещей вперед, которые мы хотим иметь. Итак, мы имеем, например, название CS50. И тогда мы на самом деле можно связать таблицы стилей который определяет, как мы стиль наш сайт. Это CSS. Мы собираемся идти по нему в Следующая пара слайдов, а также. В теле, мы ставим некоторые классы и идентификаторы. И как напоминание, опять же, Идентификаторы уникальны и классы могут быть отнесены к нескольким пунктам. И, что просто означает, что мы можем использовать классы и идентификаторы в другой structures-- Так, Например, в CSS файлов или стиля sheets-- обратиться к конкретным элементам и в основном говорят, что мы хотим, чтобы стиль или создать некоторый элемент в какой-то особым образом. И мы говорим им их идентификаторы и классы. И мы можем также обратиться к разные вещи по тегам, а также, но идентификаторы и классы просто дать нам некоторые Универсальность и что конкретно мы хочу обратиться к. Так что пример. Мы можем, опять же, в пределах файл CSS, где мы хочу, чтобы определить некоторые style-- так цвета, шрифты, и тому подобное that-- мы можем определить стиль для тела. Так что бы определить его на весь тега тела. Но тогда мы можем также определить стиль для #title. И снова, хэштегом относится к нашему ID и точка относится к нашему классу. И тогда для .info, мы можно также установить некоторые атрибуты. И снова, когда мы вернемся, у нас были Класс называется информация и наше удостоверение название. И мы видим, что мы называем им #title и .info. АУДИТОРИЯ: Вы хотите сказать, хэштег [? Прими меня? ?] МАРИЯ ZLATKOVA: Извините? АУДИТОРИЯ: Вы хотите сказать, хэштег [? Прими меня? ?] МАРИЯ ZLATKOVA: хэштегом означает идентификатор, так #title относится к тому, что элементы есть этот идентификатор, называемый титул. И тогда точка относится к классу. Так .info относится к этому элементу поскольку он имеет информации о классе. Ага. АУДИТОРИЯ: Почему вас выделить их в HTML? Почему вы говорите, определенные вещи Идентификаторы и некоторые вещи класс? МАРИЯ ZLATKOVA: Это просто до you-- Ханна Блумберг: Повторите вопрос. МАРИЯ ZLATKOVA: О, извините. Почему мы выделяем определенные элементы как идентификаторы и другие элементы как классы? Это только потому, что действительно часто выбор дизайна. Это дает вам много Универсальность в том состоянии сказать, что я хочу это определенный элемент чтобы этот идентификатор, потому что они хотят чтобы сделать много вещей, с ним, и я только хочу, чтобы определить стиль, определенный стиль или цвет все для этого элемента. И то, как сделать, что просто давая ему ID. И потом, если я хочу, чтобы иметь пара различных предметов имея того, что вместо происходит и установка their-- а не делать это с помощью тег, потому что тег будет установить ячейку для всей тега каждый раз используется этот тег, Вы можете установить класс нескольких элементов. А потом просто открыть этот класс и сказать, Я хочу, чтобы разработать Такой класс путь. И снова, класс может быть несколько различных предметов и идентификатор должен быть уникальным. Великие вопросы. Другие вопросы? ОК, удивительный. Опять же, это, как эти селекторы которые ссылаются на CSS, с хэштегом, с точки, или без ничего для присвоения стиль какой-то тег, как тело. И здесь у нас есть общее Синтаксис, как это делается. Чтобы повторить некоторые лучше практики для HTML и CSS, мы должны, опять же, закрыть все HTML-теги, которые мы открываем. И то, что мы рекомендовали вам сделать для ваших конечных проектов, а также для CS50 финансов, чтобы сделать Убедитесь, что все ваши HTML проверяет. И это будет сделано с W3 валидатора. И тогда то, что мы сделали, и то, что мы рекомендуем это делать отделяет стиль, так CSS от разметки HTML. Поэтому все, что относится к тому, как Ваша страница будет выглядеть визуально и как он собирается быть изменены должен идти в CSS документа. И тогда ваша разметка говоря, как все в отношении друг друга, HTML и и что должно пройти внутрь Ваши HTML документы. Любые вопросы? Ммм. АУДИТОРИЯ: Что именно происходит на с проверки страницы когда мы подтверждения HTML-что [неразборчиво] создал? МАРИЯ ZLATKOVA: Так что-- думаю, что вы. Так что же происходит на странице с проверкой и почему мы должны это делать? В принципе, мы должны сделать что потому что много раз, ваш браузер, если вы не успели закрыть тег или что-то типа того, Ваш браузер по-прежнему будет отобразить страницу и, возможно, все еще работают, но лучше практика, чтобы убедиться, что Вы, опять же, закрыты все теги, что все ваши элементы так, что они должны быть, и в основном, что это самая конвенций, которые сохранены в памяти. Это, опять же, только что вы должны учиться, чтобы делать, в отличие от того sloppier код и тому подобное. Да. Ой, извини. Я думал, вы были поднимая руку. АУДИТОРИЯ: Нет, я был просто [неразборчиво]. МАРИЯ ZLATKOVA: ОК. АУДИТОРИЯ: Спасибо. МАРИЯ ZLATKOVA: Конечно, спасибо. Итак, еще раз, отправляясь на том, как информация передается и модели коммуникации для передачи информации. TCP / IP. TCP просто означает передач Протокол управления и ИС относится к интернет-протокола. И только относится к способ данные передаются. Если у нас есть некоторые данные, которые нужно доставлен you-- так Вы делаете запрос на определенный сервер. Например, когда мы пытаются получить доступ к cs50.net, мы делаем запрос к CS50-сервер и мы видеть, что мы хотим получить это своего рода информации. И затем на основе этого протокола о том, как доставляется эта информация, сервер дает информацию назад к нам, клиент. И тогда мы можем смотреть информация для этой страницы а затем использовать его. Итак передачи гипертекста это просто еще один протокол или набор конвенций, определяет, как веб-браузер и веб-сервер должны общаться. И все это положить вместе, HTTP, опять же, просто определяет, как определил это гипертекстовая в HTML, что мы работали его, как это должно быть доставлены к вам и как это данные, которые доставлены к вам становится для вас. И вот почему, если вы, ребята, помните, из класса, у нас было много запросов и у нас было много синтаксиса для этих запросов, что мы собираюсь перейти на прямо сейчас. Итак, еще раз, когда мы отправляем запрос к серверу, мы должны определить пару вещей. Таким образом, мы должны найти тип запроса, что мы устанавливаем. И снова, у нас есть, например, GET является одним из видов метода что мы имеем в нашей просьбе. И тогда HTTP / 1.1 только протокол, который мы используем в настоящее время. Большую часть времени, что происходит протоколу, который мы используем. Так что, если у вас есть вопрос так на викторине. Вот конвенции что у нас так далеко. Обратная косая черта относится к какой-то из вещей, которые мы просьбой. Затем хозяин представляет собой, например, в этом так, что мы пытаемся идти в google.com. Так что это значение для хозяина. Это тип запроса которые могут быть отправлены. И тогда тип ответа, который мог направляется снова, основываясь на этом протоколе, снова, HTTP / 1.1. Так что это HTTP-версия снова. 200 ОК это только код состояния. И, что ОК это просто фраза на основе этого кода состояния. И тогда Content-Type относится к типу что возвращается к вам, что это для этой веб-странице, что вы получаете и что в вашем браузере может оказать впоследствии. И это текст / HTML. АУДИТОРИЯ: Что означает 1,1? МАРИЯ ZLATKOVA: Это просто Версия of-- ой, что же 1.1 виду? Это просто версии, HTTP версия протокола, который мы используем. Большой вопрос. Другие вопросы? АУДИТОРИЯ: Не могли бы вы подвести итоги Content-Type очень быстро? МАРИЯ ZLATKOVA: Так что это то, что сервер. тип information--, что тип содержимого были вопросы. Так что был тип Информация, которую Вы получите обратно с сервера, типа данные, которые браузер может затем оказать, что вы используете. АУДИТОРИЯ: Это то, что это Протокол говорю вам делать? МАРИЯ ZLATKOVA: Извините? АУДИТОРИЯ: Это то, что говорят, что протокол? МАРИЯ ZLATKOVA: The protocol-- АУДИТОРИЯ: --what Content-Type является или что-- МАРИЯ ZLATKOVA: Протокол основан on-- что протокол говорю вам? Вот только путь что этой информации был доставлен к вам на основе от того, какая из протокола Была ли эта информация получила поставляется к вам. Имеет ли это смысл то? Ханна Блумберг: Вы может думать о протоколе а a-- Я думаю, профессор Малан описал его в классе, вроде как a-- это как эквивалент человеческого квитирования. Скажите, как, эй, я запрос, и я знает, как обращаться HTTP версии 1.1. И тогда сервер говорит, О, хорошо, я-- и оба существуют. Я также знаю, как иметь дело с HTTP / 1.1. И я собираюсь дать Вы поддерживаете некоторый контент. В этом случае, это будет к типу текста / HTML. Так что это своего рода просто способ из них для communicating-- МАРИЯ ZLATKOVA: Это просто подтверждающие, что вы и следуя той же Протокол и что оба клиент и так server-- Ваш браузер и server-- вроде знаю, что ты о чем говорит и есть Конвенция для прохождения в данных. АУДИТОРИЯ: Так Content-Type прошёл пробы Тип содержания текста / html-- это отдельная часть того же сообщения? Или это часть скажем, 200? Говорит ли им, что 200 или is-- МАРИЯ ZLATKOVA: 200 говорит, что все это прошло нормально. И тогда тип содержимого рода Отдельная часть того же сообщения, и заявив, что вещь, которую я Возвращается имеет этот тип текста / HTML. Это просто давать больше информации. Есть что добавить? ОК. Любые другие вопросы по этому поводу? Потрясающие. Таким образом, некоторые другие HTTP статусы, которые мы могли бы получить в дополнение к 200 OK, те, что мы видели, может быть, когда- возможно, много 403 и 404. Так 404, если вы пытаетесь Доступ то, что не существует. Так, например, в вашем CS50 Финансы psets, если вы были рендеринга quote.html и вы не должны файл, но вместо этого вы были quote.php, что приведет к 404 Not Found потому что файл не может существовать. Для 403 запрещено, что относится к полномочиям. Так что, если какой-либо файл не доступен для чтения Мир, вы можете получить 403 вернулся. Некоторые другие, которые вы можете get-- 301, переехал на постоянное жительство; 302, Найдено; 304, модифицированный; ошибка 400, неверный запрос; а затем Внутренняя ошибка сервера для 500 и 503, Служба недоступна. Да. АУДИТОРИЯ: будем ли мы ожидать запоминать все эти статусы? МАРИЯ ZLATKOVA: Я бы им на шпаргалку. [СМЕХ] АУДИТОРИЯ: Мы, как ожидается, знаю, что вызывает каждый? МАРИЯ ZLATKOVA: Являются ли они? Ханна Блумберг: Для тех, которые мы запустить into-- поэтому вопрос was-- МАРИЯ ZLATKOVA: Являются ли они, как ожидается, знаю, что каждый из них статуса Коды могут быть вызваны? Таким образом, для тех, которые мы использовали и побежал в, я бы сказал, да. Таким образом, мы определенно видели 200 ОК и лекции его в psets. Мы видели 403, 404. Для остальных? Ханна Блумберг: Я бы говорят 500 кажется честной игры. МАРИЯ ZLATKOVA: 500, да. Ханна Блумберг: Да. Просто общий смысл что вызывает их. А также просто это Имена, вы можете вид как сделать обоснованное предположение как к чему на самом деле вызвало их. Например, движение постоянно, вероятно, файл был перемещен навсегда. АУДИТОРИЯ: Но на предыдущий экзамен, было так как вы ожидаете, чтобы мы ответить? Ханна Блумберг: Это стоит ноль очков. Вопрос о 418 на чайнике технически статус HTTP, но это стоило ноль очков. Очевидно, что вы не Ожидается, знаю их. АУДИТОРИЯ: Это настоящий? Ханна Блумберг: Это настоящий Один из них, но это ничего не значит. Это просто шутка. Интернет люди веселые. МАРИЯ ZLATKOVA: Великие вопросы, ребята. Другие вопросы? АУДИТОРИЯ: Что внутренняя ошибка сервера? МАРИЯ ZLATKOVA: Внутренняя Ошибка сервера только означает, что вы были не в состоянии общаться с сервером по некоторым причинам. Так что это не обязательно то, что имеет отношение к с клиентом или что-то подобное. Я не знаю ни одного конкретного примера что мы перешли, чтобы объяснить, но да. Ханна Блумберг: Конечно. Так, например, как давайте что вы работали на коллажей и сервер Google пошел на некоторые Причина, отключение электричества, скажем так. Это было бы внутренний сервер ошибка или какой-то of-- нравится вам не хотел бы получить ответ обратно. МАРИЯ ZLATKOVA: Да. Это просто, когда вы не в состоянии общаться с сервером для какой-то причине, потому что из него идет вниз или какой-либо другой причине. Так прыгать в PHP. PHP, в отличие от HTML, является язык программирования. И мы начали использовать его, потому что это очень полезно для веб-разработки. Мы впервые использовал его в CS50 финансов. И это в основном помогает нам принести вместе это разметки, дизайн, и как мы на самом деле использовать информацию для отображения вещи на веб-странице. Так PHP само по себе означает PHP Препроцессор гипертекста, так что это рекурсивная backnorym сам по себе. И открытие теги для PHP мы левая и правая стрелки с вопросительными знаками и PHP. Таким образом, мы уже видели кучу него. Теперь, мы только собираемся переходить некоторые из основных вещей, о нем. Так с PHP, переменной имена которых начинаются с знака доллара. Мы не указать, опять же, переменная типа больше. Так же, как мы сделали с C, мы не должны этого делать. Мы можем сделать кучу разных материал с переменными. Мы можем поставить их вместе путем объединения их с точечной нотации, которая мы не могли бы сделать в C снова. Опять же, у нас есть немного больше гибкости с PHP в условиях переменных. Опять же, мы не имеем основную функцию. И PHP интерпретируется в отличие от компиляции Итак, как же сделать, мы для файлов C., мы не должны делать, что для PHP. Но, скорее, так, что язык выполняется сама по себе, она интерпретируется. А потом слабо типизированным просто означает, что мы не нужно указывать переменную тип и типы переменных понимаются во время выполнения. АУДИТОРИЯ: Но то, что сделал тебе имею в виду точка объединения? МАРИЯ ZLATKOVA: Конечно. Когда мы хотим навести together-- так что если у нас были некоторые переменную, имел значение 3 и у нас был другой переменная, имел значение строки, мы могли бы переменные вместе поставив точку между ними и объединения их. Или мы могли бы создать Переменная называется имя и положил его вместе объединение двух строк. Так что, если у нас был двойной строку в котировки и ставим точку после него, и тогда мы имели другую строку, что будет создать строку в целом. АУДИТОРИЯ: ОК. МАРИЯ ЛАТВИЯ: Был, что ясно? АУДИТОРИЯ: Да. МАРИЯ ZLATKOVA: ОК. Да. АУДИТОРИЯ: Когда вы говорите, интерпретировать, чем составлен, Вы говорите о вас не должны быть также конкретные, когда Что касается PHP в сравнении с C? МАРИЯ ZLATKOVA: Когда мы говорим, интерпретируется как противоположность составлен, что мы имеем в виду? Так это значит, что мы не должны исполняемые файлы для запуска PHP. Это означает, что он работает, как она идет. Имеет ли это смысл? Еще немного. Ханна Блумберг: Таким образом, вы может думать переводчика а другой программой, которая отвечает для перехода по строкам через PHP а на самом деле его выполнения, в отличие к составлению все это вниз в двоичный. Это на самом деле не означает ничего о том, как конкретные, мы должны быть. Мы по-прежнему должны быть точными, и не забыли запятой, и убедитесь, что у вас есть знак доллара, и тому подобные вещи. Хороший вопрос. МАРИЯ ZLATKOVA: Да. Так построчно, а в отличие от C с файлами, мы должны сделать все финал прежде, чем мы на самом деле можем запустить его. Это главное отличие. Но, опять же, мы не можем действительно менее специфичны. Так массивы в PHP представляют на самом деле приказал карту. Так массивы ассоциированных значений клавишам. Два способа объявить Массив, на основе этого синтаксиса, мы можем быть более явным говоря у нас есть массив и у нас есть этот key1, который отображается это значение1, ключ2, который отображает значение2. Или мы можем просто создать массив который содержит сам значения и затем клавиши понимать в пути. Любые вопросы по этому поводу? Аудитория: что бы ключи быть во втором примере? 0, 1, 2, 3? МАРИЯ ZLATKOVA: Например, это просто ключи в это не обязательно Сделать разницу. Они просто определить, как вы можете использовать значения внутри него. Так что, если у нас был Еогеасп петля в PHP, что бы позволяют нам пройти через все значения, мы можем пройти через все значения, даже если бы мы имели или не определили определенный ключ в сайта предыдущая синтаксис. Таким образом, даже с такого рода массива, мы могли бы еще есть цикл по каждому элементу который проходит через каждый значений в ключе массива. Так синтаксисе Еогеасп цикл, мы начинаем с массивом. Эта переменная $ обр наша текущая массив что мы определили в предыдущем слайде в качестве значения, которые буквально идет через каждое из значений, несмотря на погоду у нас был ключ или нет. И тогда мы можем сделать что-то с значение внутри цикл по каждому элементу. Итак, еще раз, если бы мы имели массив вот так вот created-- поэтому у нас есть ключ Foo и стоимости бар, ключ Baz и стоимость qux-- мы можем иметь цикл по каждому элементу, что проходит через массив как значение ключа а затем сделать что-то с ключом, и / или значение. Но мы не всегда обязательно должны иметь Еогеасп петли, что проходит через массив как ключевой карте до стоимости. Мы можем пойти через Массив цикл по каждому элементу в качестве значения. Ханна Блумберг: И я думаю, , целью которых было на ваш вопрос, то, что неявная индекс? АУДИТОРИЯ: Своего рода. МАРИЯ ZLATKOVA: Ой. Ханна Блумберг: Да, да. Так в основном, если вы не укажете ключ, он будет 01. МАРИЯ ZLATKOVA: Да. Так же, как с C, это ноль индексируется, если вы не укажете ключ. АУДИТОРИЯ: Извините. Не могли бы вы попробуйте говорить немного громче? У меня немного Беда слуха все. МАРИЯ ZLATKOVA: Мне так жаль. Да, конечно. Так что вы хотите мне перейти на этот раз? Или this-- АУДИТОРИЯ: Так на предыдущей slide-- если вы могли бы просто вернуться в течение одной секунды. МАРИЯ ZLATKOVA: Конечно, жаль. АУДИТОРИЯ: Таким образом, второй Массив здесь не кажется, имеют значение для ключа, вроде [? причинно-следственная связь. ?] МАРИЯ ZLATKOVA: Верно, верно. АУДИТОРИЯ: Так как это работает когда вы говорите, что это все или ничего. Для меня, который выглядит как а [? Foo?] уже. МАРИЯ ZLATKOVA: Да, да. Итак, еще раз, это заказать карту в этом смысле что следует понимать, Например, указатели Здесь можно понимать как 0, 1, 2, 3. Опять же, это те, имеющих Индексы наш эквивалент иметь ключи, отображенные на ценностей. Так что, если наш ключ был 0-- извините. Ханна Блумберг: Нет, там мел здесь. Это на самом деле очень приятно. МАРИЯ ZLATKOVA: Это здорово. ОК. Итак, еще раз, $ обр 0 будет ключ к значению 1. 0 будет ключом к значению 1. АУДИТОРИЯ: Я извиняюсь. Это невидимая. Ханна Блумберг: Ладно, по фигу. Мел была плохая идея. Беру свои слова обратно. Вы можете думать о ключах а 0 отображается в значение 1. МАРИЯ ZLATKOVA: Да. Таким образом, это 0, это 1, 2, 3. Они могут быть ваши ключи. Вы можете думать о них as-- да. Таким образом, вместо того, ключах, они вроде как понял, индексы, начиная с 0. Мел не поможет. Да. АУДИТОРИЯ: Для цикл по каждому элементу, если бы мы хотели, чтобы просмотреть, как ценность, это было бы просто автоматически индекс 0? МАРИЯ ZLATKOVA: Да. Было бы пройти каждое из значений. АУДИТОРИЯ: [неразборчиво], как 0 или, что бы просто сделать 0? МАРИЯ ZLATKOVA: Вы бы сказать, как знак доллара, а затем некоторые имя переменной, значение. АУДИТОРИЯ: [неразборчиво]. МАРИЯ ZLATKOVA: Извините? АУДИТОРИЯ: К сожалению, я просто пытаюсь вспомнить. Как бы вы, что если вы можете сделать это автоматически индексации просто 0 из? МАРИЯ ZLATKOVA: Так как бы вы сделать это если у вас не было конкретных имен ключей? АУДИТОРИЯ: Да. МАРИЯ ZLATKOVA: Вы бы просто define-- просто сказать себе, как какой-то имя. Так что в вашем psets, вы, ребята, могли бы помните Еогеасп $ ряд как $ строк, мы создали этот OURSELF $ ряд говоря мы хотим, чтобы пройти через ряд, как $ рядов. Даже если у нас не было это явно $ ряды определены, мы могли бы просто пойти и говорят, что это может быть наш ключ, и просто пройти через каждое из значений. АУДИТОРИЯ: Так значение новой переменной мы создаем для хранения [неразборчиво]? МАРИЯ ZLATKOVA: Так что это не по сути это новая переменная. Это переменная, которая относится к внутри массива к каждому из них. Ханна Блумберг: Это новая переменная имя. МАРИЯ ZLATKOVA: Да, это новая переменная имя, но это не inherently-- да. Это просто новая переменная что вы можете сделать это. Итак, как мы сделали $ грести, как $ строк, строк был новую переменную имя, что мы может создать в нашей цикл по каждому элементу. Это не должен существовать до до этого. АУДИТОРИЯ: Не могли бы вы пройти через Логика для каждого, используя пример есть? МАРИЯ ZLATKOVA: Ммм. Ой, извини. Вот пример. Конечно. Таким образом, для каждого array-- так это означает, что пойти на этот массив как ключ value--, что происходит пройти через этот массив и сначала пойти и получить Foo, то Ключ Foo и бар значение. И тогда на втором итерация цикл, он собирается пройти и принять ключ Баз и значение QUX. И тогда вы можете сделать что-то с любой из них или оба из них. АУДИТОРИЯ: Так идея имеющие ключевые точки к значению, что вы в конечном итоге доступа? МАРИЯ ZLATKOVA: Какова идея иметь ключ, указывающий на цените? Это просто еще один конвенция, другой способ идти по массиву и быть в состоянии получить доступ к либо ключ или значение или оба, и использовать их. АУДИТОРИЯ: Какова роль для заказать что Еогеасп работает в? Так что, если мы должны были добавить элементы в массив позже, будет тех, быть первыми называется в массиве Еогеасп, или это будет позже? МАРИЯ ZLATKOVA: Так что порядок, что Еогеасп цикл проходит через массив в? Он проходит через первый элемент последнего элемента, до последнего добавленного элемента. Если вы добавляете элементы в дальнейшем, они будут быть accessed-- первые элементы будут Доступ в качестве первого Элементы массива, и тогда вы бы пройти через каждый из элементы как-то в ordered-- не приказал, но так, что они были введены в массиве. АУДИТОРИЯ: Так новые элементы добавлены позже? Так они added-- они буду последние, в [? итерации. ?] МАРИЯ ZLATKOVA: Новые элементы can-- в основном, когда новые элементы добавляются, они добавляются в конец массива? АУДИТОРИЯ: Да. МАРИЯ ZLATKOVA: Я верю в это. Да. А потом с цикл по каждому элементу, после того как вы добавили новые элементы и вы идете через них, новые элементы будут быть accessed-- нового элемента, если это добавлен последним, он будет доступен в прошлом. АУДИТОРИЯ: Можете ли вы просто дать пример о чем-то, что бы [неразборчиво] с чем-то со значением как [неразборчиво] или стоимости, нравится, как вы отформатировать это? МАРИЯ ZLATKOVA: Конечно. Могу ли я дать пример того, что мы хотели бы сделать с ценность? Так что вы, ребята, можете быть знакомы с является то, что мы пошли через массив и в основном печатаются каждый из элементов, например, как часть упорядоченный список или что-то, что. Имеет ли это смысл или мы хотим, целью которых АУДИТОРИЯ: Можем ли мы распечатать эти значения вне дома? МАРИЯ ZLATKOVA: Да, мы могли бы печатать и то в основном потому, что значение $ в что конкретное значение, мы бы печать значение внутри него. Так что, если мы были в нашей первой итерации из него, и мы напечатаны $ значение, мы бы печатать бар. АУДИТОРИЯ: Есть также для петли в PHP или просто Foreach петли? МАРИЯ ZLATKOVA: Там это Также для петель в PHP. И их логика в основном так же, как то, что вы были раньше. АУДИТОРИЯ: Таким образом, ее значение равно нулю. МАРИЯ ZLATKOVA: Это как то же самое. Да. АУДИТОРИЯ: Я просто хочу, чтобы спросить. Поэтому, когда вы объявляете Массив, вам не нужно сказать, что размер он собирается быть, что означает, что вы можете просто добавить и забрать элементы [неразборчиво]. МАРИЯ ZLATKOVA: Да. Ага. В точку. Когда мы объявляем массив, мы не нужно говорить, что размер это, таким образом, мы можем просто добавить элементы на это позже. Больше вопросов? Так чего PHP и HTML вместе, то, что мы seen-- хорошо, Например, в этом примере, мы имеем HTML-форма, которая имеет поле ввода. И поле ввода просто название и то он имеет кнопку Отправить. И при нажатии Отправить Кнопка, на наш hello.php файла, поскольку метод для формы получить, мы можем получить доступ все, что находится на имя этим получить глобальную переменную, которая is-- синтаксис это $ _GET. И тогда мы можем получить доступ независимо от пользовательский ввод в этой форме для имени указав имя этого поля. Любые другие вопросы или любой вопросы по этому конкретном примере? АУДИТОРИЯ: Где PHP? МАРИЯ ZLATKOVA: Здесь. Так что это наш открывающего тега для PHP. АУДИТОРИЯ: Да, правильно. МАРИЯ ZLATKOVA: Да. Ханна Блумберг? О: = это сокращение для этого является PHP и просто эхо. АУДИТОРИЯ: Ой. МАРИЯ ZLATKOVA: Да, извините. Я должен был сделать, что ясно. Ханна Блумберг: Печать. МАРИЯ ZLATKOVA: Это просто функция что позволяет напечатать что-нибудь. Большой вопрос. Так going-- да. АУДИТОРИЯ: Есть ли будет достаточно немного ручного кодирования РНР и HTML на викторине 1? МАРИЯ ZLATKOVA: Там может быть изрядное количество интерпретации РНР и HTML, не обязательно как огромное количество кодирования, если вы, возможно, придется написать цикл по каждому элементу, хотя, для петли. Любой из петель, которые мы покров здесь честная игра. И это в основном это. Ханна Блумберг: Я был бы готов. Таким же образом, что мы просили вас написать кучу функций C на викторине 0, Я бы готов сделать то же самое в PHP и JavaScript. МАРИЯ ZLATKOVA: Да. Ханна Блумберг: Я бы сказал, little-- как мы не сделает вас написать огромный HTML- страница просто, потому что это немного утомительно, но вы, возможно, части. Это совершенно справедливая игра. Как небольшой HTML страницы, полностью справедливым. АУДИТОРИЯ: ОК. Как насчет в JavaScript, а? Ханна Блумберг: Да. Справедливая игра в JavaScript. МАРИЯ ZLATKOVA: Да. Это полностью справедливая игра. Ханна Блумберг: Мы получим к тому, что в подобных 10 минут. МАРИЯ ZLATKOVA: SQL, опять же, Structured Query Language. Это в основном позволяет управлять данными в реляционной базы данных управления Система. Это просто означает, в основном что у нас есть где-то хранить некоторые данные, которые мы могли бы использовать в сайте или в другом виде. И тогда у нас есть запросы, чтобы получить Информация из нашей базы данных, или вставить в них информацию. Много общего ones-- UPDATE, INSERT, SELECT и DELETE. Таким образом, для UPDATE, это синтаксис для обновления данных в базе данных. Обновление этой таблицы под названием Таблица говоря SET, мы можем установить некоторые значения во всех Строки в равной чего-то еще. Таким образом, мы можем также указать некоторые конкретные Записи, которые мы хотим изменить и что может быть с помощью ГДЕ. И мы можем указать, что мы хотим, чтобы изменить несколько строк, где дом для, если бы мы имели таблицу студентов и все студенты имели дом, так что мы только изменить некоторые значения где дом равен курьером, например. Для INSERT, мы можем вставить определенные значения в таблицу. Так INSERT INTO таблицы, а затем значения, а затем в скобках мы указываем который ценит вы хотите вставить. Так INSERT в таблицу, col1 и col2, значение val1 и val2. Так что это вставляет в основном новую строку в таблица, содержащая значения 1 и 2 под колоннами 1 и 2. А потом мы собираемся перейти на быстрый пример того, как это выглядит как в нашей базе данных немного. Но этот последний запрос, который я думаю, что мы собираемся перейти, ВЫБОР, он просто позволяет нам для выбора данных из таблицы чтобы, возможно, использовать его впоследствии. И то, как мы делаем это, мы просто хранить его в какой-либо переменной. И тогда, возможно, мы можем использовать его снова. Так ВЫБОР звезда означает выбрать все. Это просто сокращение для выбора всех. ОТ стол, где мы ищем для некоторых конкретных условий, так где колонка равна -то, например. Если мы просто хотели, чтобы выбрать все из-за стола, это просто выбирает все столбцы и все строки таблицы. И тогда удалить из таблицы ГДЕ колонка равна то, это только удаляет некоторые грести с нашего стола где у нас есть некоторые специфические условия. В этом случае условия являются колонки равна кое-что. Так что просто небольшой пример этого. Если у нас есть эта столик прямо здесь, и мы вставьте его в таблицу, эти значения, что бы вставить новую строку. И если бы мы имели автоматическое приращение, это будет просто увеличивать наш ID от 0 до 1 до 2. Если мы выбрали все из студентов, его просто возвращает все поля и все строки. Где больше года чем или равно 2016, что только вернется Ханна и я. И потом, если мы только что выбрали год ID и год от студентов где дом Кабот Дом, который будет, опять же, вернуться Ханна и я. Тогда, если мы удалили из студентов где имя равно Роба, что бы удалить всю строку. И потом, если мы устанавливаем Имя, UPDATE студенты SET имя равна Daven ГДЕ дом равен Кабот Дом, который собирается идти к эти строки, а затем изменить имя. А потом несколько типов данных SQL являются СИМВОЛ, VARCHAR, INT и FLOAT. Это честная игра. Я бы снова и убедитесь, что вы знаете, и иметь их на шпаргалке, что каждый из этих персонажей были использованы для то, что Вы использовали их на ваших psets, и убедитесь, что вы знакомы и комфортно с того, чтобы выбрать из различных типов данных в вашем PSET. Да. АУДИТОРИЯ: Что было то, что таблица хранится? Да, где эта таблица хранится? МАРИЯ ZLATKOVA: Ну, Прямо сейчас, это не хранится. Во всяком случае, где эта таблица хранится? Но он может быть сохранен в базе данных SQL в. АУДИТОРИЯ: А где это база данных SQL? В компьютере, в Интернете где сервер? МАРИЯ ZLATKOVA: Это может быть количество различных вещей. Ханна Блумберг: Мы сопряжена с SQL таблицы в основном с PhpMyAdmin. Таким образом, мы могли бы спросить сервер хранить их для нас. Мы могли бы хранить их на собственном компьютере. МАРИЯ ZLATKOVA: Это зависит только от как вы хотите, чтобы сделать это для себя. Но мы были хранения им, как уже упоминалось Ханна, на PhpMyAdmin, который находится в сети. А потом, как мы используем PHP и SQL, мы храним его в какой-то переменной то, что мы запрашиваются. Так что, если мы Выделить все истории где user_id равна идентификатор сессии, что бы выбрать все строки для конкретного человека, который регистрируется в из истории стол и сортировать их в ряды. Крутая вещь, чтобы знать, что функции запроса CS50 в защищает от тегов SQL-инъекции. Это просто означает, что он делает, что вход, который введен правильно и что человек, который вступает ввод не пытается ввести некоторые вредоносные код либо удалить наши таблицы или удалить все внутри нашей базе. Быстрый обзор Модель Модель View Controller, это просто способ организации и думать о коде. Это опять же, дизайн парадигма. То, что это означает, что мы can-- и это хорошая практика для разделения различных частей наш код и то, что они контролировать в этих трех парадигм. Таким образом, наш взгляд наиболее часто наши шаблоны, наша разметка, путь что мы устанавливаем, как наш код выглядит. Это в основном наши CSS-файлы и так что мы определили дизайн нашего кода, в основном. Наш контроллер в основном то, что мы делали с PHP файлов. Итак, еще раз, работая с Информация, которую мы имеем и определения, как, что информация используется, и передает эту информацию либо на представлении или модели. И модель, так, что мы были используете была наша база, так где наша информация храниться таким образом, он имеет где-то жить, и любой из код, который относится к способу что мы получаем эту информацию или так, что мы обновляем эту информацию. Таким образом, в модели MVC, HTTP запросы направляются на веб-сервере. Затем контроллер интерпретирует запрос от пользователя и затем проверяет данные, введенные пользователем. Это необязательно, что мы имеем контроллер общаться с моделью, так что-то как нашей базе или некоторые другие функциональные что передает информацию. И, наконец, контроллер передает информацию на взгляд таким образом, что он может быть оказывали и что он может становятся видимыми любому лицу доступ к веб-странице. Любые вопросы? Потрясающие. Итак, еще раз, модель, его функция, опять же, это постоянного хранения информации, управления и организации данных. И то, что мы видели до сих далеко база данных MySQL и любые файлы данных, которые могут использовать. Посмотреть, презентация информации пользователь, пользовательский интерфейс, или пользовательский интерфейс. А примером является HTML. И тогда мы могли бы иметь минимальный PHP. Таким образом, цикл, который перебирает по сравнению с данными, которые распечатываются является частью зрения, как противоположность к контроллеру. И тогда многие из наших PHP файлов попадают в категорию контроллера. Это просто обрабатывает запросы пользователей и получает информацию от модели. Прыжки в документ Модель объекта, это только относится к тому, HTML документы организованы. И они организованы в виде дерева Структура, что имеет иерархию. Так что, если у нас есть доступ к [неразборчиво] представление документа, мы можем работать с документом, как мы манипулировать объектами в принципе. И сделать это немного яснее, когда у нас есть много наших различные метки ответить к различным маршрутам в нашем дереве. И тогда для этого примера, мы есть стартовый узел документа. Итак, мы имеем, наш HTML-узел что распадается на голове и теле. Руководитель имеет название, а затем Название содержит привет, мир. И наше тело содержит только привет, мир, а также. Так какие-либо вопросы по любой из вещи, которые мы рассмотрели до сих пор? А если нет, Ханна взять на себя с JavaScript. Потрясающие. Ханна Блумберг: ОК, круто. Если что-то случится с PHP или HTML, или любой материал, Мария, покрытой, мы всегда можем приостановить. Мы делаем лучше на снова, настолько удивительным. И только, чтобы вернуться очень быстро, чтобы это, если вы посмотрите на каждый Экзамен прошедшего года, это приходит either-- здесь некоторые HTML, чтобы эту диаграмму. Или вот эта схема, сделать некоторые HTML, так определенно, что практика. И то это один гарантированный Вопрос, который вы можете получить права. Круто. Итак, давайте поговорим о JavaScript и как это немного отличается от языков, таких как PHP и С двух языках, которые мы видели заранее. Так номер один, это слабо типизированным. Это, как PHP, но в отличие от С. Это интерпретируемый язык. Опять же, это, как PHP, в отличие от С и это собирается, чтобы позволить нам use-- его работает очень хорошо с веб-страниц. Это происходит, чтобы позволить нам манипулировать содержание и как он выглядит и что он делает. Мы собираемся, чтобы увидеть немного Ajax. Это позволяет нам общаться асинхронно с различных серверов и получить информацию. И это то, что действительно отделяет от JavaScript PHP и C является то, что на стороне клиента. Оба PHP и С как правило, на стороне сервера. По большей части, и почти полностью, что мы видели, по крайней мере, в этот класс, JavaScript действует на стороне клиента, а это означает, что браузер на самом деле ответственность за ее запуска. А это значит, что мы не нужно взаимодействовать с сервером. Так это означает, что может быть намного быстрее, потому что это на самом деле просто это хром, это Safari, Firefox, это, все, что вам использовать на самом деле работает ваш JavaScript. АУДИТОРИЯ: Что означает асинхронный? Ханна Блумберг: Ах, что вовсе асинхронно в виду? Большой вопрос. Асинхронный означает: хорошо, содержание в которых мы используем это, хорошо, мы создают веб-страницы и мы должны получить некоторую информацию. Так на примере коллажей, некоторые сведения, которые мы могли бы это заголовки статей. Теперь мы could-- один вариант , чтобы делать это синхронно и это означает, что давайте остановить, иди статью, получить статью спину, а затем оказывать, но это было бы очень медленно. Это было бы плохой опыт пользователя потому что вы просто сидеть там ждет что-то ответить. Асинхронный означает, что мы Мы продолжаем идти о нашем бизнесе, оказание страницу, и мы вышлем запрос от Это вроде собирается произойдет в фоновом режиме. Я думаю, что мы используем пример в Лекция вызова Роба и говорят, эй, вы можете искать это на для меня, и вернуться ко мне, в отличие от просто меня ожидания на телефоне. Так асинхронно означает, что происходит на фоне далеко от нас в параллели. Большой вопрос. Что-нибудь еще? Отлично. Мы прыгать намного больше в асинхронные запросы с Ajax. АУДИТОРИЯ: Есть ли JavaScript-- где делает он упал с Model-View-Controller? Ханна Блумберг: Большой вопрос. Где падение JavaScript с Model-View-Controller? Гектометр Я думаю, это может fall-- таким образом, мы обычно не хотел хлюпать его в том, что парадигма, но я думаю, я бы сказала, Итак, JavaScript на самом деле происходит, чтобы позволить нам собрать данные, интерпретировать данные, на самом деле значимые вещи с данными. Таким образом, это очень управления, как. Но это также собирается позволить нам отображать вещи и печати вещи. Таким образом, это очень вид-как. Да. Так что это вроде как PHP в где он может быть вид обоих. Хороший вопрос. Что-нибудь еще? Ладно, удивительным. Движемся дальше. Итак, давайте посмотрим пример о том, как мы можем использовать JavaScript в одном из наших веб-программ. Так что я считаю, что это index.html с кучей HTML. И что я хочу, чтобы ты сосредоточиться на это сценарий тегов. И это говорит, хорошо, я хочу, чтобы запустить некоторые JavaScript, и вот где она живет. Он живет в hello.js. И очень похоже CSS, мы могли бы поместить JavaScript в HTML. Почему может мы хотим, чтобы отделить его? Да. АУДИТОРИЯ: Легче переписать? Ханна Блумберг: Да. Это проще в использовании по различные веб-страницы. Это держит вещи чище. Это просто хорошая практика. Потрясающие. Хороший ответ. Так хорошо, так что это будет чтобы быть нашим index.html. А потом сюда это наша крошечный файл JavaScript. И все это говорит, оповещения Привет, мир. Так что же происходит, когда Эта страница renders-- так что если вы идете в какой-либо веб-сайте это is-- все, что произойдет это скажет, хорошо, я собирается запустить этот код JavaScript. И это JavaScript код просто говорит оповещения Привет, мир. Так что я собираюсь получить это дружелюбный немного всплывающее. Круто? Это вроде как наш первый JavaScript программа, наш Привет, мир. Давайте посмотрим немного больше о том, что синтаксис JavaScript выглядит. И специально, давайте сравним его С и PHP, которые мы видели раньше. В JavaScript, мы будем иметь вар, имя переменной, а затем его фактическое значение. И мы не указываем тип, только как в PHP, но очень в отличие от С. Так, например, если мы хотим для хранения значения 50, в C, мы должны были бы сказать, эй, С, я хочу целое, Я буду называть его я и его значение 50. В PHP, это немного легче. Мы говорим, эй, я хочу переменную называется я и его значение 50. Очень точно так же, в JavaScript, мы поздороваться, я хочу переменная называется I, его значение 50. Каждый последующий раз, когда я использовать я, мне не нужно, чтобы написать вар. Это просто я с этого момента. Таким же образом, в С, где когда мы говорим, INT I, мы просто используем I. Круто? Отлично. Переходя к петель, К счастью, эти почти искать exactly-- я думаю, что они точно так же, как то, что петли будет выглядеть в что-то вроде C, где ваш цикл будет иметь три parts-- инициализацию, состояние и обновление. Некоторое время цикла, он выглядит точно такой же. Мы просто дать ему состояние. И в то время как петли делать, снова, точно так же. Мы даем это состояние. Скажем, я хотел, чтобы итерации over-- Я хотел сделать что-то в пять раз. В C, мы могли бы написать для инициализации я равна 0. я меньше, чем 5, я ++. Только разница в JavaScript, вместо того чтобы сказать INT я равна 0, мы говорим, вар я равна 0. Красивый. Вот и вся разница. Любые вопросы по любой из, что? Да. АУДИТОРИЯ: Таким образом, в PHP, это то же самое что, за исключением, но, как переменной? Или в том, что в примере вар? Ханна Блумберг: Да. Таким образом, в PHP, это будет быть знак доллара. Так это будет $ я равных 0, $ я меньше 5, $ я ++. Большой вопрос. Теперь давайте поговорим о объявления функций. В C, когда мы объявлен Функция, мы дали ему имя и мы дали ему некоторые параметры. И в начале, мы писали тип. В JavaScript, все мы нужно сделать, это написать функция ключевое слово, говорит, эй, JavaScript, Я собираюсь определить функцию. В этом случае он имеет название сумму. И он принимает два аргумента х и у. Обратите внимание, что мы не заботимся о типах х и у. И так же, как C, у нас есть это возвращение ключевое слово, так что мы можем сделать что-то как обратный х и у. А теперь, когда мы написали этот первый Функция, мы можем использовать сумму в любом месте. И это совершенно нормально. Один действительно здорово вещь о JavaScript, что очень в отличие от C что функции могут рассматриваться как ценности. Таким образом, мы можем сделать что-то вроде здесь где я предполагаю, что я это up-- покрытия Я прикрыли Вар сумму прошёл пробы, и мы только что сказали, Функция ху равна обратный х плюс у. То есть то, что можно было бы назвать анонимная функция. Это функция без имени. В то время как это говорит функции сумма, бла, бла, бла, это просто сказать функции. Но теперь, даже если у меня есть это анонимная функция, что функция на самом деле просто значение. Мы можем рассматривать его как ценности. Таким образом, мы можем сохранить его в переменной то же самое как мы могли бы хранить 50 в переменной. Таким образом, мы можем сказать, ладно, я хочу Переменная, это называется сумма, и эта функция. Таким образом, эти две вещи на самом деле собирается сделать ту же самую вещь, но синтаксис немного отличается и вид веселой ноте. Да. АУДИТОРИЯ: Таким образом, можно назвать функция, которая была анонимной, говоря, сумма кронштейны 2, 5? Ханна Блумберг: Да. Вы можете назвать это анонимный Функция таким же образом. Вы бы сумму (2, 5) ;. Это было бы совершенно нормально. Если я не сделал вар сумма равна Функция, если я просто удалил this-- я знаю, что это на моей руке, но притворяться, что я удалил this-- то что функция как бы просто ушел. Вы никогда не можете использовать его снова, потому что Вы не имеют для него имя. Трудно что-то относятся к Вы не знаете, как назвать. Хороший вопрос. Да. АУДИТОРИЯ: Можете ли вы ссылаться сумму в другие места со значением х плюс у? Ханна Блумберг: Можете ли вы ссылка сумма в других местах со значением х плюс у? Я не совсем уверен, что вы имеете в виду. АУДИТОРИЯ: Так что ваши мимо полу-анонимно Функция сумма равна этого анонимная функция, так сумма Теперь переменная, что вы can-- Ханна Блумберг: Верно. Так сумма переменная, но это actually-- так сумма является переменная, значение функции. Таким образом, это функция, которая является своеобразной странная вещь, чтобы обернуть вокруг головы так как мы играли с С, и вы не можете сделать это на языке C. Но теперь мы можем назвать суммировать Точно так же мы могли бы назвать сумму здесь. АУДИТОРИЯ: ОК. Ханна Блумберг: Да. Хороший вопрос. Да. АУДИТОРИЯ: Таким образом, мы не использовать прототипы в PHP или JavaScript? Ханна Блумберг: Нет, мы не нужно использовать прототипы, особенно в JavaScript. Таким образом, одна плохая практика, что, что я хочу сказать, что вы не должны делать вам не нужно писать уаг I = 50. Вы могли бы просто начать делать I = 50. И будет просто сделать я глобальная переменная. Это очень плохая практика, чтобы никогда не говори в явной вар я, но это что-то можно сделать. Переводчик не собирается кричать на вас. JavaScript является довольно, как, Ты можешь делать, что хочешь. Ой, извини. Там два. В оранжевых штанах. Преуспевать. АУДИТОРИЯ: Нет, ты первый. АУДИТОРИЯ: Нет, я просто говорю У меня не было мою руку вверх. ОК. Так что, если вы были позвонить что первый раз, теперь подвести, мы называем его так же, как, х, у, как каждый раз? Ханна Блумберг: Да. Таким образом, эти два существенно сделать то же самое. АУДИТОРИЯ: И чем преимущество использования одного или другого? Ханна Блумберг: Нет преимуществом использования одного или другого. Я просто хотел показать вам два различные части синтаксиса. Много раз, когда анонимный Функции имеют цель , если аргумент на другой функция должна быть функцией. И мы увидим, что в только второй с Ajax. Так что, если не имеет никакого смысла, хранить его в задней части головы. Вот где анонимный Функция может быть полезна потому что это не действительно стоит давая ему имя, так как мы просто собираетесь использовать его один раз. Да. АУДИТОРИЯ: Если х и у изменение позже от того, будет подвести изменить, а? Ханна Блумберг: Если х и у изменение позже, будут подведены изменить, а? Так что это на самом деле я думаю, то, что это, опять же, это просто чувствует себя очень разные из C. Это не ценность. Это не 5. Это просто сама функция. Поэтому, как только вы дадите ему параметры, то вы на самом деле вычислить значение. МАРИЯ ZLATKOVA: А потом Вы можете вызвать функцию и использовать его, чтобы получить какую-то ценность. Ханна Блумберг: Верно. В точку. Да. АУДИТОРИЯ: Так что, если вы только что хранить его в переменной, как вар х равна сумме двух values-- Ханна Блумберг: Да. Таким образом, вы можете просто сделать уаг сумму равна сумме двух значений. Да. Другие вопросы? Да. АУДИТОРИЯ: Но, что путают сумму и сумму? Как, если вы звоните вашей переменной сумму, вы могли бы назвать функцию сумму? Ханна Блумберг: Мм. Мм. Если вы сделали что-то как, сумма равна сумма 2, 5? АУДИТОРИЯ: Да. Ханна Блумберг: Я считаю, что будет перезаписывать значение суммы. Так еще один интересный вещь JavaScript является то, что одна переменная может принимать на кучу разных типов. Плохая практика. Вы не должны делать что-то как то, что вы только что сказали. Но в C, если я установлено равно целому числу, мы знаем, что это никогда не станет строкой. Это не тот случай в JavaScript. Да, хороший вопрос. Что-нибудь еще? Отлично. Делая все вовремя. Ведение собирается. Отлично. Если мы посмотрим на массив в JavaScript, вот Небольшой пример из массива строк. И массивы могут расти динамически. Они не имеют фиксированный размер так же, как что они делают на C. Мы можем получить доступ к элементы с помощью всего квадратных скобках. Это выглядит как PHP и много как С, где мы можем сказать, в этом случае, если бы я хотел слово JavaScript, я бы у обр квадратные скобки с 0, 1, 2. И потом, если вы помните, в C, когда мы хотел, чтобы получить длину массива, это было действительно раздражает. Но в JavaScript, очень легко. Все, что мы делаем, .length. Дает ему длины. Вот и все. АУДИТОРИЯ: Это просто. Ханна Блумберг: Да, делает Ваша жизнь намного проще. ОК, не object-- там. Объекты в JavaScript ощупь много, как в C структур и ассоциативные массивы в PHP. Так что мы видели Много это JSON, который выступает за JavaScript Object Notation. И это в основном способ структурирования наши данные. Итак, давайте посмотрим пример, вероятно, самый простой. Так вот пример объекта что сохраняет класс, CS50. И когда я говорю класс, я имею в виду, конечно, не like-- да, курс, CS50. И вы увидите, что все в объекте будет содержаться в фигурные скобки. И мы начинаем ассоциировать имена полей или ключи с различными значениями. Таким образом, вы можете начать видеть, как этот вид чувствует, как ассоциативный массив в PHP. Итак, мы собираемся, чтобы связать поле или имя ключа, конечно, со строкой, CS50. Мы собираемся, чтобы иметь инструктора. Мы собираемся, чтобы иметь ТФ. Мы собираемся, чтобы иметь ряд psets и мы собираемся, чтобы записали. И один крутая вещь, чтобы отметить, все эти вещи имеют различные типы, и это совершенно нормально. Это прекрасно для объекта, на самом деле, это, вероятно, ожидается объекта чтобы иметь комбинацию строк и номера и Булевы массивы и и все остальное, вы могли бы хотите, чтобы внутри объекта. И обратите внимание, что они собираются, чтобы быть имена или ключи, а затем мы просто установить его равным с небольшим толстой кишки. АУДИТОРИЯ: Что именно это означает JSON? Ханна Блумберг: Что именно делает JSON в виду? JSON просто стоит для JavaScript Object Notation. Это просто способ форматирования. Да. Это способ форматирования наши данные. В C, это структур. В PHP, это ассоциативные массивы. В JavaScript, у нас есть объекты. АУДИТОРИЯ: Так CS50 это объект? Ханна Блумберг: CS50 является объект в данном случае. Теперь, как мы на самом деле доступ эти поля или изменять эти поля. Например, предположим, что мы решили, что Вы хотели один меньше PSET в этом семестре. Вместо девяти, мы просто придется восемь. Как бы мы изменить это? О, неправильно. Есть два способа, которыми мы можем сделать это. Номер один с точкой обозначение и номер два это с квадратным обозначения кронштейна. Так, например, если я хотел, чтобы изменить или доступ поле psets в нашей CS50 объекта, что я буду делать это CS50.psets, таким образом, название объекта точки имя поля или ключа. Очень точно так же, это именно то, эквивалентно, чтобы сделать CS50, а затем в квадратные скобки, psets. Круто? Да. АУДИТОРИЯ: Так JSON технически JavaScript-прежнему, даже если в psets мы отделить его [неразборчиво]? Ханна Блумберг: Конечно. Таким образом, вопрос, являются JavaScript и JSON эквивалентно? Так JSON является обозначение, в основном так, что мы выписываем объект из JavaScript. Так что они не совсем то же самое. Я бы сказал, JavaScript, есть объекты в JavaScript. JSON принимает эти объекты и печатает их и отображает их или сохраняет их в хороший способ. Так JSON не программирования язык так, что JavaScript есть. Это просто обозначение наши объекты в JavaScript. Да. АУДИТОРИЯ: Так что же [Неразборчиво] завершить? Ханна Блумберг: Конечно. Так это на самом деле ничего не делает. Это просто способ получить доступ. Так что давайте говорить, что мы хотели изменить количество проблемных наборов с девяти до восьми. Что мы делаем это что-то сделать как CS50.psets = 8 ;. Да, большой вопрос. Это просто, чтобы показать вам синтаксис. На самом деле не делают ничего полезного. Любые вопросы? Движемся дальше. Итак, давайте посмотрим на быстрый пример того, как JavaScript работает, потому что я сказал вам это делает все эти вещи и классные позволяет модифицировать веб-страниц. Давайте реально увидеть его в действии. Так что, например, этот HTML-файл. И что я хочу, чтобы вы сосредоточить внимание на это Этот конкретный тег, который представляет собой кнопку, с идентификатором search_button. Это просто на странице. Так что теперь давайте посмотрим, что мы можем на самом деле. Ну, предположим, когда Вы нажмите на эту кнопку, мы хотим, чтобы сделать alert-- Вы нажали кнопку. Давайте посмотрим, как мы можем это сделать. Так window.onload-- это не то, что вы видели в классе, поэтому не нужно знать это для викторины. Но это в основном говорит, хорошо, вызов эта функция, когда окно нагрузки. Так что это просто своего рода код установки. Не волнуйтесь так много об этом. То, что я хочу, чтобы вы сосредоточить внимание на это здесь. Мы говорим вар searchButton равна document.getElementById search_button. Итак, как вы уже могли догадаться, что это делает это говорит, ОК, надо найти элемент с ID search_button. И теперь у нас есть, что текущая элемент, и я собирается хранить его в Переменная searchButton. И теперь мы можете использовать этот элемент и изменить его, или получить доступ к его ценности, такие вещи. Мы можем на самом деле начать взаимодействовать с веб-страницы. Так вот я говорю, хорошо, теперь у меня есть что кнопка, когда она нажата, называют эту анонимную функцию. Так что это, где анонимный функции становятся полезными. И что функция делать? Ну, это просто называет это предупреждение функция, и он говорит, Вы нажали кнопку Search. Так что же произойдет, если я иду туда, где Этот HTML-живет, и я нажмите кнопку, Я получу уведомление, немного фантазии что говорит, что вы нажали кнопку. Таким образом, вещи, чтобы сосредоточиться на here-- document.getElementById получает HTML частности элемент с заданным идентификатором. А теперь мы можем установить то, что должно произойти, когда что конкретный элемент кнопки. АУДИТОРИЯ: Мы должны положить все, что в? Ханна Блумберг: Извините? АУДИТОРИЯ: Есть ли у нас физически код все это? Ханна Блумберг: Есть ли у нас в физически код все это? Да. Разве это не вид раздражает? Это много кода. АУДИТОРИЯ: Вы могли импортировать что-то. Ханна Блумберг: Верно. Мы могли бы использовать что-то. И в particular-- о, это говорит, что мне надо учить раздел. В частности, давайте использовать библиотеку JQuery, потому что на самом деле долго и действительно раздражает и я хочу, чтобы иметь возможность упростить и сделать его короче и легче писать. Так JQuery является библиотека JavaScript. Так JavaScript является программирование язык; JQuery является библиотека. И это делает кучу вещей легче. Это делает изменения и происходит через HTML документ гораздо проще. Это делает обработку события проще. Это делает анимацию проще и это делает Ajax проще. Итак, давайте прыгать в двух эти вещи прямо сейчас. Извините. Прежде, чем мы делаем, некоторые основной синтаксис. Это то, что большинство вызовов библиотека JQuery выглядеть. Мы используем эту доллара sign-- нет знак подключение к PHP, просто inconvenient-- имя Селектор, точка, а затем действие. Итак, давайте посмотрим некоторые конкретные примеры этого. Таким образом, это на самом деле то же самое код из слайда событий. Так что это долго, уродливая вещь становится это намного приятнее, меньше вещь. Так давайте попробуем разорвать этот вниз. Это говорит, хорошо, jQuery-- этот доллар sign-- JQuery, найти мне в окно. Так вот селектор. При загрузке, вызвать эту функцию. Так вот все внутри. ОК. Все идет нормально? Отлично. Теперь, JQuery, найти меня в что с ID search_button. И что она нажата, вызвать эту функцию. А потом этой функции точно так же. Просто сделать немного оповещения, Вы нажали кнопку Search. Так что это действительно приятно. Это действительно конденсируется и упрощает наш код. Как я знаю, что это ID search_button а не как класс search_button? АУДИТОРИЯ: хэштегом? Ханна Блумберг: Да. Этот символ хэш, это просто, как CSS. Так что помните, с CSS, когда мы хотел, чтобы выбрать что-то по ID, мы использовали знак #. И когда мы хотели, чтобы выбрать то по классу, мы используем точку. Отлично. Сделайте чувство? Так JQuery, как предполагается, просто сделать нашу жизнь проще. Да. АУДИТОРИЯ: Так что я немного запутался, о том, как анонимная функция работает. Есть назвать вам эту Anonymouse функция, функция? Как это называется? Ханна Блумберг: Конечно. Так функция просто ключевое слово, говорит, что я собираюсь определить функцию. АУДИТОРИЯ: О, хорошо. Ханна Блумберг: ОК? И тогда мы проходим его в качестве Аргумент, целью которых давайте это внутреннее одно-- функции мыши. Так что, да, так что функции, это анонимная функция, становится фактическим аргументом. Так что помните, в JavaScript, мы может относиться к функции в качестве значений. АУДИТОРИЯ: О, хорошо. Ханна Блумберг: Да. Мне нравится, что "ой". Ницца. Другие вопросы? Время? МАРИЯ ZLATKOVA: Хорошо. Хорошо. Ханна Блумберг: Высокий. Некоторые быстро полезно JQuery. Я не собираюсь идти через всех из них. Эти слайды будут до онлайн немного позже, так что вы можете проверить это из немного позже. Но в принципе, общее рисунок имеет, где мы говорим, ОК, эй, JQuery, вот мой Селектор, а затем вот действие. И вы можете делать вещи, как доступ в значение форме, доступ к некоторым HTML, контроль, что происходит, когда пользователь отправляет форму, подобные вещи. Да. АУДИТОРИЯ: Таким образом, в экзамен, мы будем должны знать довольно много из документация JQuery. Поэтому, учитывая, что мы копировать / вставить JQuery Документация в нашу шпаргалку, где же линия, проведенная? Как, сколько нам нужно знать? Ханна Блумберг: Большой вопрос. Вопрос в том по существу, учитывая, что вы не может получить доступ к документации JQuery во время теста, сколько вы должны знать? Мы не ожидаем, чтобы вы пришли с какой-то случайной функции что можно было бы ожидать вас Google. Вещи, которые являются честная игра, я бы сказать только вид общего синтаксиса, возможность выбора по ID и по class-- так же, как CSS. А затем фактические функции сам себе, мы, скорее всего, вам сказать. Да. АУДИТОРИЯ: Итак, когда вы выберите по классу будет означать точку. Ханна Блумберг: Да, именно так. Хорошо. При выборе по классу, это будет быть точка, а не знак фунта. Да. АУДИТОРИЯ: Хотели бы Вы перейти разницы между выбором по ID и класса? Ханна Блумберг: Конечно. Разница между выбора ID и выбора по классу. Так, как сказал Марии немного ранее, может быть только один элемент HTML- с заданной ID, в то время как класс, это позволяет нам группировать кучу из различных элементов вместе, так что вещи, связанные, но не совсем то же самое. Значит ли это, ответить на вопрос? Потрясающие. Да. АУДИТОРИЯ: Что делать, если у вас есть несколько вещи, которые в одном классе? Ханна Блумберг: Что происходит если у вас есть несколько вещей, которые то же самое класс? Так, например, если мы только с помощью чистого JavaScript, мы хотели бы сделать что-то вроде document.getElementsByClass. А потом, что это на самом деле это возвращает массив элементов. И вы должны либо перебрать их или найти, какой вы хотите. Это не даст Вы один элемент. Это даст вам массив элементов. Большой вопрос. Что-нибудь еще? Потрясающие. Так что я думаю, если вы знакомы с любой JQuery вы видели в PSET, вы должны быть хорошо идти. Вопрос? О нет. Мне действительно нужно учить. Расслабьтесь. Все будет в порядке. Я туда попасть. Давайте поговорим о Ajax. Так Аякс будет a-- хорошо, давайте начнем с того, что это стоит. Это аббревиатура. Это стоит для асинхронных JavaScript и XML-. И XML является в основном будет [Неразборчиво] с типом наших данных. Но мы на самом деле не используется XML. Вместо этого, мы просто используем JSON. Поэтому в основном, это некоторые data-- асинхронный, JavaScript и данные, в этом случае, JSON. И наша цель, как мы уже упоминали немного раньше, является, чтобы иметь возможность сделать Запрос, что запрос уже делать его дело в фон, но по-прежнему делать все, что мы намерены делать. А потом, когда эта информация готовы, то мы будем включать его. Итак, давайте посмотрим, что это на самом деле выглядит. И это, вы должны быть немного знакомы от pset8, тот, который вы только что исполнилось в. Так вот действительный JQuery функция, мы могли бы хотите знать about-- этого знака доллара. Так он говорит функция JQuery, .getJSON. И то, что эта функция делает его принимает URL и некоторые parameters-- так что я думаю, в случае из pset8, как это было, URL-адрес был articles.php и Параметры было идти = некоторое почтовый индекс. И это говорит, хорошо, сделайте запрос на этот адрес с заданными параметрами. И, что просто случается. Когда он заканчивает, это либо собирается для успешного завершения или это будет провал. Так что это эквивалент вызова Роб и попросить его сделать что-то. А потом, когда он перезванивает, он либо хочу сказать, я сделал или я не смог. Таким образом, в случае, когда вы находитесь сделано, вы говорите, ладно, я сделал. И тогда вы называете эту функцию. В этом случае, это будет функция, которая принимает информацию. Тот, который мы, как правило, заботятся о том, данные, данные, которые мы на самом деле были возвращены в результате вызова .getJSON. И вы можете сделать что-то с ним. Таким образом, в случае pset8, мы представили его в виде списка. Отказ будет функция что называется, если запрос не для любой причины. И в случае pset8, мы просто console.log его. Любые вопросы по этому поводу? Да. АУДИТОРИЯ: Можем ли мы просто использовать функцию тета вместо функции, textStatus, jqHXR. Ханна Блумберг: Конечно. Так что да, я думаю, что в PSET, мы только что видели функцию данных. Так что это просто the-- да, хорошо. Это то, что мы видели в PSET. Это совершенно нормально. Таковы лишь, если вы хотите вытащить больше информации, это то, что вы могли бы получить от .getJSON. Хороший вопрос. Что-нибудь еще? Да. АУДИТОРИЯ: Так .getJSON является Аякс? Ханна Блумберг: ОК. Так что это своего рода хитрость. Это функция JQuery, который позволяет Вы сделать асинхронных вызовов. И эти асинхронные вызовы, это то, что мы в виду как Ajax. Да. Это заняло у меня очень много времени, чтобы растащить, когда я был студентом. АУДИТОРИЯ: Можете ли вы сказать, что опять? Ханна Блумберг: Да. Могу ли я сказать, что еще раз? Эта функция .getJSON, это функция JQuery. И это собирается сделать асинхронный вызов. И эти асинхронные вызовы, мы ссылался на те, как Ajax. Другие вопросы? У нас есть всего пара минут осталось. И Мария собирается укутать безопасности а затем мы собираемся чтобы быть почти закончили. МАРИЯ ZLATKOVA: Высокий, хорошо. Так что это просто is-- взять пару секунд, чтобы просмотреть этот. И это не то, что действительно здорово. А может кто скажите мне, почему? Что происходит в Foo и может мог потенциально привести к что-то плохое, и что, что называется? Да. АУДИТОРИЯ: Если аргумент, что это прошел в более чем 12 символов, это может переполнить. МАРИЯ ZLATKOVA: Верно. Отлично. Как это называется? Вы только что упомянули его. АУДИТОРИЯ: Переполнение буфера. МАРИЯ ZLATKOVA: Да, переполнение буфера. Так что это то, что мы называют переполнением буфера. И мы видим, что внутри Foo, мы определили нашу буфера, с, с размером от 12. Тем не менее, в основном, мы не проверить в любом случае на всех ли так, что argv1-- был вторым аргументом. Мы не проверяем, является ли Размер целесообразно. Так что, если мы имели особенно злоумышленник которые положить в некоторых аргумента, который был больше, чем 12, и затем, возможно, за пределы, которые Аргумент, были некоторые исполняемый код что он пытался сделать что-то плохое с этим; то это, что бы произошло, будет превалировать возвращение адрес функции Foo, вызывая функцию, когда возвращение выполнить этот код. И тогда плохие вещи может произойти. Имеет ли это смысл для всех? И как мы можем защитить против этого? Какие-либо предложения? В основном, внутри потенциально Foo, как мы можем проверить, чтобы убедиться, что это не может случиться? АУДИТОРИЯ: Если размер 12 будет превышен, Вы бы выделить дополнительную память? МАРИЯ ZLATKOVA: Предложение это, выделить дополнительная память размером превышен. На самом деле, мы можем сделать что-то намного проще, чем, что, как хорошо. Мы можем просто получить длину строки аргумента, который вводится, проверить, если это менее или равным 12-- что то, что мы хотим его быть, потому что мы не хотим, это выход за границы нашего буфера. И потом, если это не так, мы может работать с аргументом. И потом, если это произойдет, мы на самом деле хотим чтобы Yello потенциально у пользователя. Но это, как мы бы этого делать. Да. АУДИТОРИЯ: Могли бы вы объяснить тетсру очень быстро? МАРИЯ ZLATKOVA: О, извините. Да. Тетсру принимает все is-- извините, ОК. Тетсру принимает все, что в баре, все, что передается на Foo в качестве аргумента командной строки. Таким образом, это займет argv1. Argv1 называется бар здесь. Таким образом, это займет бар и это будет скопировать его в с. АУДИТОРИЯ: ОК. МАРИЯ ZLATKOVA: И он собирается copy-- третий аргумент просто относится о том, сколько это будет скопировать в с. АУДИТОРИЯ: Ах. Так что это своего копирование все это потом. МАРИЯ ZLATKOVA: Да, это копирование всего этого. Ага. Во-первых, мы уверены, бар не равен нулю, потому что это указатель. Тогда мы получим длину строки бар. Мы уверены, что это меньше или равно 12. А потом, потому что мы убедились, мы можем на самом деле тетсру и быть уверены, что это нормально. Любые вопросы? Отлично. У меня есть два истинным или ложным вопросы. Может кто-нибудь сказать мне сразу если они истинны или ложны? Да, это ложь. В точку. Оба из них являются ложными. Таким образом, использование одного пароля никогда не действительно хорошая идея потому что, если кто-то знает пароль, они могут просто доступ ко всем другим свои счета. А потом иконы ничего не делать для обеспечения безопасности. Мы должны, как правило, ищут HTTPS вместо HTTP и URL. И некоторые другие виды атак, которые мы уже упоминали, что Дэвид упоминается в лекции, атаки SQL-инъекции. Мы уже видели, что, если мы don't-- Функция CS50 запрос гарантирует, что SQL атаки инъекции не может произойти. Но если мы не использовали CS50, цитата, конец цитаты "в запросе," мы должны были бы убедиться, что пользовательский ввод на самом деле не некоторые SQL запрос, который будет вызывать все Наши столы для упал или что-то плохое, чтобы произойдет с нашей базой данных. Угон сессии является еще один тип атаки что происходит, когда некоторые плохо человек использует сессии некоторых жертвы ID для доступа к регистрационной информации. Таким образом, очень тривиальный пример, который как если у нас есть компьютер в общественном, то плохой человек входит в, а затем они имеют печенье, сохраненные. И печенье не изменится сессии. Тогда мы жертвой перейти в а затем зайти на сайт. Печенье не изменить в течение определенного сеанса. И тогда жертва регистрирует в сайт, а затем уходит. И тогда человек, который восходит может по-прежнему использовать их идентификатор сеанса чтобы получить доступ к информации. Так вот один из примеров как это могло случиться. И тогда я бы не слишком беспокоиться о конкретной код или что-нибудь так что может привести к этому, но имеющие какой-то идеей, что в переменные, участвующие в этом есть. А потом манипулировать заголовок данные еще один тип атаки что имеет Дэвид говорил о. И это как раз относится к то, что может произойти, когда ответ, то HTTP ответ внутри нашего заголовка не продезинфицировать должным образом. И любой из fields-- например, если кто-то переписывает один из заголовке Значения содержать нечто большее, чем что они должны contain-- и фактически содержит, например, 200 Код ОК-статус, то они потенциально может сделать вредоносный вещи, когда они не должны. Но я не волнуйтесь бы слишком много о конкретной код которые могут привести к этому, только вид понимания на высоком уровне такие вещи. Я думаю, что это все что у нас есть, чтобы покрыть. Удивительно. Кто-нибудь есть какие-либо вопросы по любой из вещей, которые мы рассказывали? Да. АУДИТОРИЯ: Так один вид более материально вопрос. Является ли содержание основном сосредоточены на вещи после викторины 1? МАРИЯ ZLATKOVA: Так Вопрос в том, является содержание сосредоточена главным образом на вещи после викторины 1? Таким образом, акцент делается на после Тест 1, за исключением что мы должны сосредоточиться на вещах, в pset5 и много структур данных что мы рассмотрели. И мы не можем сказать, что мы может игнорировать что-либо до , потому что это опирается на него, а также. Так сосредоточиться на том, что, плюс pset5 материал как в том числе связанные списки, стеки, Очереди, и все что Ханна подошла. Ханна Блумберг: Верно. Да, мы пошли по всей C вещи в самом начале очень быстро. Но убедитесь, что для рассмотрения этого. Вернитесь назад и посмотреть викторины 0 отзыв. Еще пара логистические отмечает, просто в то время как у нас есть Ваше внимание. Мы будем иметь рабочие часы и в понедельник, и во вторник вечером. Они собираются, чтобы быть в MD 119. Это все на сайте, так что если вы не слышите его, ни забот. МАРИЯ ZLATKOVA: с 8:30 до 11:00. Ханна Блумберг: Да, с 8:30 до 11:00. Мы там будем. Мы будем там, чтобы ответить на вопросы. Это довольно холод и веселье. Вы, ребята, можете задать любые вопросы что у вас на викторину 1. И викторины на 1 Среда, так что удачи. Если у вас есть какие-либо вопросы, может быть, прийти поговорить с нами здесь один на один. Круто. Спасибо. МАРИЯ ZLATKOVA: спасибо, парни. АУДИТОРИЯ: Ура. [АПЛОДИСМЕНТЫ]