>> [Дел 9] [поудобно]
[Роб Бауден] [Универзитетот Харвард]
[Ова е CS50.] [CS50.TV]
>> Ред. Во суштина денес сето тоа е до вас момци да поставам неколку прашања.
Јас би можеле да бидат во можност да талкаат со некои теми
за малку ако никој не има било какви прашања да прашам.
Се надеваме дека ќе го направите. Дали некој има било какви прашања?
Можеби од минатото квизови, работи што не сте удобно со моментно.
>> Да. >> [Студентите] Може да одите во текот buffer overflow напади? >> [Роб] Секако.
Главната пример всушност би можеле да бидат во право тука.
Главната договор зад buffer overflow напади се
имаме некои тампон, тука.
Char в - која е само на големината 12 -
но тогаш ние сме вметнување нешто во таа тампон
но не проверува колку точно ние сме вметнување.
Тука сме вметнување strlen (bar) во C, но кој знае колку долго бар е.
Ако тоа е подолг од 12 карактери, тогаш ова ќе претекување оваа тампон.
Гледајќи во оваа слика -
ако имате 61 ќе добиете многу повеќе запознаени со овој вид на распоред
и справување со снимени рамка покажувач и враќање адреса и рутинска магацинот родителите
и сите на овие вистински нешта.
Но тука сте само треба да се знае дека имаме
ова малку простор за нашите тампон.
Тука имаме (0) в а потоа имаме в, 1, 2, 3, 4, 5 и така натаму.
Под нормални околности би се пополни оваа тампон, како на обично.
Ако ние вметнува "hello" би имале ж-е-л-л-о / 0,
а потоа само еден куп на празен простор.
За хакер - ох, претпоставувам дека ова е пример.
За хакер да добиеме нешто како ова, каде што
она што го конкретно се обидува да направите е да
обично ги избегне враќање адреса.
Секогаш кога ќе се јавите на функција и вашиот магацинот рамка добива турна врз оџакот
дека магацинот рамка треба да знае како -
добро, функција која е наречена треба да знае како да се врати на функцијата што ја нарече.
Значи, ако главната повици Foo, foo треба да се врати во главната,
и така тоа е она што ова враќање адреса прави.
Но, она што на хакерите се случува да направите е да
избегне тоа, со посебен враќање адреса
каде повторно - Малку Индискиот - тоа не е јасна, но секој бајт е наназад.
Ова враќање адреса колку што компјутерот е загрижен
Се враќате на овој адресата е еквивалентно на враќање да Foo или главни
или што и функција тоа се нарекува.
Па затоа се случува да се врати на оваа адреса
кои само така се случува да биде оваа адреса
кои или понекогаш она што го прават тука е да се користи за враќање адреса
на специфична функција дека тие знаат што е веќе таму.
Не можам да се сетам што функција се нарекува.
Јас ќе го гледам нагоре подоцна.
>> Еве она што го правиш е полагање на повратната адреса
до магацинот себе, и ова е нешто чудно, каде што
постојат примери на меморија, каде што -
меморија може да се подели на само за читање, читање пишуваат, и извршна меморија
каде што видовме само за читање меморија пред каде што -
ако кажам char * S = здраво Не можам да менувате здраво.
Тоа е само за читање меморија.
Постои, исто така оваа идеја на извршна меморија
каде извршна меморија ќе биде текстот сегмент на вашиот код.
Гледање на вашиот вообичаена адреса простор распоред -
Верувам дека ќе биде добра слика -
тоа функционира - каде што имаме магацинот до тука. Имаме меморија на податоци.
Игнорираат ова во основа. Ова е нашиот грамада.
И тогаш имаме овде нашата главна програма код.
Ова е слично на местото каде што ќе стави нашите низи како char * = здраво
и тоа е само за читање.
Но вие исто така може да го означи овој главната програма кодот како извршна.
И ако тоа го прават или вашиот оперативен систем прави тоа правилно
тогаш тоа треба да биде единственото место во меморијата
дека кодот всушност може да се изврши
што значи дека овој вид на buffer overflow напад имаме над тука
ќе биде неефикасен, бидејќи ова е се обидувам да се изврши меморија до овде, во нашата оџак.
Огласот за доделување на сликите се во прв план.
Ние имаме магацинот растат.
Тука магацинот расте надолу.
За CS50 цели магацинот порасне.
>> Можно е да се заобиколат овој тип на buffer overflow
со тоа што овие извршна региони на меморија во не-извршна региони.
Но, тоа само така се случува, дека ретко е извршна меморија означени како извршна.
Тоа само има тенденција да биде само за читање и пре-пишуваат се единствените нешта кои се користат,
па ова е уште многу ефикасни.
И тука би можеле да се стави она што го сакаме.
Тоа не е всушност направено како Pset во 61 оваа година,
но ако се погледне на минатата година понуда на неа, или било која претходна година
еден Pset е сте специјално треба да го вметнете во тука код кој би требало да се
печати некои специфични вредност или се врати на вредност кој е различен од
вредноста која би требало да бидат испечатени.
Или дури и повеќе умно, таа сака да јавете се или пишете -
па ова ќе се вратат до тука, а потоа ќе се изврши некои кодирање тука,
и најпаметните на поплавите потоа ќе се врати на она што ова враќање адреса се користи да биде.
Па дури иако ни е потребно да ја замени оваа
да се дојде до тука, ние уште се сеќавам дека враќањето адреса некаде
така што можеме да се вратат до главна или што,
и тоа е како ние никогаш не дури и забележав дека работите не беше во ред.
Но, работите не е така тоа е случај каде што можеби внатрешноста на тука сме gelbroke нашите iPhone-от.
Работите одат како што е нормално - како што се кандидира на некои програми и работите да завршат враќањето во
она што би требало да се врати, но во меѓувреме
успеа да го уништи целиот оперативен систем.
Вие не треба да знаете кодот во врска со тампон поплавите или, всушност, искористувајќи од неа.
Вие не треба да се знаат основните идеи на ова е тампон и тоа е се излеа,
и ова е причината што може да се преплави бидејќи ние не сме проверка дали
ние сме всушност во рамките на границите на тоа.
>> [Студентите] Решението за спречување на тоа е само проверка на границите?
[Роб] Да. Во овој случај решението би било
можете или може да се каже ако strlen на бар е поголем од 12-1 -
бидејќи ви е потребна / 0 на крајот -
или можете рачно може да се направи за телефонска линија дека само копии првите 11 карактери,
или само нешто каде што сте, всушност, проверка за да бидете сигурни дека ќе не претекување дека тампон.
>> Други прашања? Да?
[Студентите] можеш да зборуваш за се обидува и можеби нешто за програмирање (нечујни).
[Роб] Секако.
Вистинските програма -
ние никогаш нема да направи да се направи една имплементација на TRIE на испит
затоа што тоа би било нефер да оние кои не хеш табели.
И слично, ние никогаш нема да ве натера да се спроведе хеш табелата на испит
затоа што тоа би било нефер да оние кои не се обидува.
Ќе треба сепак да знаат на struct на TRIE или на struct на хеш табелата или whatever.
Тоа е всушност важи и за било кој вид на податоци структура сме виделе.
Поврзани листи, рангирани skews, бинарни дрва -
треба да бидат способни да се дефинираат оние structs од срце.
А TRIE - тоа значи дека единственото нешто што ќе треба да направите е можеби и ќе ви даде
некој збор или нешто и ние ќе каже изградба на TRIE тоа -
ние ќе ви даде можеби збир на зборови
и ние сме како изградба на TRIE кој претставува овој речник.
>> Да направиме нашата речник мачка и куче.
Идејата на TRIE е ние почнете да излегува со оваа низа -
26 слотови -
и во секој слот вистинските индексот на слот одговара на писмото сме загрижени со.
Па еве, ако ние се обидуваме да го вметнете мачка во нашите TRIE
првиот карактер е "c", кој ќе биде "доколку е 0, тогаш b е 1, c е 2. '
Ние ќе одиме во вториот индекс,
и ние ќе се создаде TRIE на тој начин.
Ние ќе мора 26 слотови.
А потоа ние ќе се обидеме да индексира вториот карактер на мачка.
Тоа е "една", кој се случува да биде 0 самото место.
И дека се случува да имаат 26 места.
Потоа одиме на "t" и ние, исто така, ќе го имаат тоа слегува кој е всушност вид на важни
затоа што - ајде да дојде до тука. Тука е нашата TRIE за "t".
Да речеме ова е индекс "t" е 19.
Важно е да се запамети околу се обидува е не само да ги пратите на овие совети.
Исто така мора да ги пратите на тоа дали ова е всушност на крајот на зборот.
Значи, во внатрешноста на тука ние треба некој вид на знамето што вели
Океј, ова е всушност на крајот на зборот.
Причината е во тоа ако ние подоцна се обиде да го вметнете катастрофални во нашиот речник
која го има истиот почнувајќи 3 карактери
но продолжува понатаму ние треба да се признае дека ова е крајот на зборот.
Или алтернативно, ако ние се обидуваме да се погледне до "Ca 'што можеби не е збор
но ние се фаќате за тука тогаш ние -
или тоа ќе биде в а потоа ќе погледнеме во -
ние треба да се признае дека иако има покажувач излегувањето на овој јазол
не претставува на крајот на збор.
>> Значи, она што значи тоа - она ​​што се сакаше да кажеш?
Што значи тоа нашите struct личи?
[Студентите] Тоа е низа на совети кои е 26 долги и тогаш bool беа или не беа.
[Роб] Да. Значи, ќе имаме struct TRIE * совети - тука ние ќе каже [26] на
а потоа запирка овде.
Но на Pset, ние исто така треба да сметка за апострофи,
што значи што ви е потребно на хард-код кој апостроф со индекс 27 или така нешто.
Но тука ние само се грижат за 26.
И тогаш ние треба можеби знак или bool - да ја наречеме тоа е зборот.
Тоа е 2 на 3 работи мислам дека некогаш ќе треба да знаете за обиди -
градење на нив, на struct од нив, и последното нешто е во бегство време на нив.
>> Што е траење на TRIE - или пребарување во TRIE?
Ова е местото каде што велат дека тоа е О (к) каде k е должината на зборот се случи да се гледа нагоре;
но во исто време ние велиме - барем за доброто Pset 5 правопис е - ние велиме
најдолгиот збор во речникот е 45 карактери, па ова е во основа
О 45 кое е постојана време.
Значи, ако постои горна граница на вашиот најдолгиот збор, тогаш -
или дури и како англиски речник - постои горна граница на вашиот најдолгиот збор.
Или било кој речник - постои најдолго обврзани на горниот дел од зборот.
Без разлика што правиш е постојана време,
но о к е убаво, бидејќи таму всушност е разликата помеѓу водење велат
45-карактер збор наспроти азбука која има само зборови до 3 карактери.
Друга работа во врска со тоа е дека -
ох, бидејќи само велејќи дека 45 случува да биде нашата најдолгиот збор
е вид на глупо бидејќи во исто време да речеме алгоритам е О на Н
Па во ред, бидејќи меморија поддржува само до 2 ^ 32 бајти,
тогаш N е најмногу 4 милијарди и тоа е постојана време, кој е зошто во одреден момент
тоа е глупо да се каже овој вид на работа каде што има горна граница
дека ние само може да се намали на постојана време, бидејќи сè е постојана време
кога ќе помислите на тоа на тој начин.
Но, ние најверојатно ќе ги прифати и двете од овие.
Во секој случај се објасни или дека О (1) значи имате горниот граничи должина на зборот;
О (к) значи дека вашиот должина на зборот -
добро, к значи должина на зборот.
>> Да. >> [Студентите] Дали bool - затоа што кога ќе направи вашиот TRIE
се чинеше како да е - ќе одат мачка и потоа да одите на следното покажувачот
а потоа ти кажам, ако тоа е еднакво точно - ќе ви го стави тоа точно на како со Т?
[Роб] Ајде да мислам дека ова е случај каде што многу примери вие само може да се обиде и да излезе со
едноставен и / или екстремни примери и она што треба да биде, па ајде да мислам на зборот "една".
Во нашата изворна TRIE -
ние би сакале да се стави 1 тука, или ние би сакале да се стави 1 овде долу.
Јас би рекол дека на крајот тоа најверојатно ќе биде или / или.
Не можам да се сетам на причина - или навистина wouldn't -
причина јас не би го стави таму долу е затоа што дури и не треба да се оди толку далеку.
Ние никогаш не треба да одвои оваа TRIE.
Ние само стави 1 до таму.
Ова е уште покажува кон нула.
Ако ние сме само ќе имаат единствено карактери
нема причина да се прошири надолу до друга TRIE само да се одбележи дека писмото како што се користи.
Слично на тоа, ако ние го стави на "а" таму долу
тогаш мора сите овие само ќе биде 0 на сите времиња.
>> [Студентите] Но, не ни треба, почнувајќи TRIE кои ќе укажуваат на тоа "а"?
[Роб] Имаме некои глобални или нешто struct TRIE * T
што укажува тука, но тоа е само покажувач.
Тоа не е целосно разнесени TRIE тоа е укажува на тоа.
[Студентите] Во ред. Како би ја додели буквата "I'- со зборот јас?
[Роб] Неговото прашање може да се одговори на тоа. Држи се.
Тоа е прашање каде TRIE во себе и за себе -
Не знам начинот на Pset би го напишале.
Претходната struct беше лошо.
Но, ние исто така може да го направи struct јазол е bool - и покажувач -
има всушност повеќе начини можете да го напише.
Алтернативно TRIE не треба да биде struct.
Тоа дури може да биде TRIE - typedef јазол * -
јазол [26] е TRIE и тоа веќе не е struct.
Сега има се случува да биде - Јас сум се обидува да се размислува за начинот на кој Pset би се очекува од вас.
[Студентите] јас го зафрла тој преглед седница и мислам дека тие само одат -
како ако имате голем потоа да одите на следното - >> [Роб] Тоа е како тие го прават тоа?
[Студентите], а потоа ако има вистински постои тоа не функционира -
[Роб] Да. Дека не функционира. Тоа отпад простор на -
ќе мора да имаат цела друго ниво на TRIE дека не ќе треба на прво место.
Тука станува грд едни со -
во основа она што јас се обидувам да го направите тука е соработник -
наместо да биде 26 совети за вашиот неуспешни обиди,
тоа е 26 bool покажувач, bool покажувач, bool покажувач, и така натаму.
>> [Студентите] Вие не може да го направи тој 2 низи? Низа на bools и низа на совети?
[Роб] Вие би можеле, но тогаш ќе треба да се -
2 низи на booleans и совети.
Вие ќе треба да потоа да се изгради вашиот спектар на booleans -
Вашиот спектар на booleans треба да бидат толку големи како TRIE
затоа што не може само да имаат 26 booleans.
Тоа мора да расте со секој што е можно -
како вашиот TRIE има повеќе од 26 точно или неточно можни зборови.
Во тој момент тие можат, како и само да биде една struct дека вашиот TRIE расте надолу со.
Ова не чини право, бидејќи - она ​​што сакам тука?
Значи, TRIE * T -
можете да направите typedef (јазол *) [26] TRIE;
тоа може да биде синтакса Јас сум во потрага за.
И тоа само треба да биде редовна TRIE.
Не сум сигурен.
Но, тоа е начинот на кој ние го сторивме тоа во прегледот, така што работи совршено добро, исто така.
Во кој случај ако тоа е само bool е збор, а потоа низа од 26
тогаш ќе мора да одат на следното ниво.
Ќе се размислува за начинот на кој јас би го направил тоа.
>> Други прашања?
[Студентите] Може ли да поставуваат прашања за нешто друго? >> [Роб] Да.
[Студентите] Може да ви одат над она што разликата е и кога ќе го користите jQuery наспроти Ајакс?
[Роб] Тие се во себе и за себе сосема поинаква.
JQuery им овозможи Ајакс. Тоа го прави ни даде некои полесно користење на Ајакс.
Но Ајакс доаѓа испорачуван со вклучите Javascript-. Го вклучите Javascript-има Ајакс способности.
Сите Ајакс значи оприличавам јас сум веќе на една страница и кога сакам да -
кога ќе кликнете на нешто што не треба да ја страната да ја преземете дека новите информации.
Јас само да побара нови информации.
Можете да се погледне во него во Фејсбук или нешто слично.
Увид мрежа.
Намалувачки ова.
Овде можеме да видиме дека ние сме добивање на сите овие барања.
Сега кога ќе кликнете на - добро, тоа го прави Ајакс пред јас дури и кликнете на ништо.
Но, ако јас кликнете на ова, тогаш тоа се случува да направи еден куп на барањата овде
кои само што овие барања - ох, сега е овде.
Ајде да се одмориме.
Направите ова повторно.
Можеме да видиме дека ние ги добиете сите овие барања, но ова сè уште може да биде во процес на вчитување на страницата.
Забележите Фејсбук прави овие постојани барања дури и по страница е вчитан.
И ако јас кликнете на тука, тоа ќе направи некои повеќе барања за некои податоци
што е во одговор на нешто што само кликна.
Тоа е токму она Ајакс е. Тоа ви овозможува да се повлече за податоци што не бил симнат со страница оригинално.
>> JQuery е посебен. JQuery е само JavaScript библиотека која го прави многу работи полесно.
Со jQuery е многу предност е тоа само -
знакот за долар - знакот за долар е валидна променлива во вклучите Javascript-.
Значи, jQuery - сето тоа го прави е велејќи дека како var $ = целиот куп на работи -
како некои големи функција со сите овие работи во него -
а потоа ќе ја користат таа знакот за долар во начини како
$ ("# Подножјето"). Стил ("text-align", "центар").
JQuery ни дава овој вид на синтакса каде голема предност -
има и други можности, но она што сакаме да се фокусираат на повеќето
е само да се биде во можност да изберете елементи како оваа.
Во редовните, обичен стар вклучите можете да ги правите нештата како
документ-точка-get елемент од проект подножјето-точка - Не знам што е тоа во тој момент -
нешто во врска со CSS или стил или нешто -
но потоа пак, да речеме сакавме да изберете од класа.
Сега сме стајлинг сè со класа подножјето со овој стил.
Дури и ако сакаме да стил било ставови.
Значи, ова селектор - да биде во можност да изберете нешта во ДОМ, како ова е неверојатно удобен
бидејќи во обичен стар вклучите вие ​​ќе треба да се направи документ-точка-get елементи од класа име
или што и да е, или ако сакав таг би треба да се каже добие елементи по име на етикета.
Значи, ми треба да се знае конкретната начини на кои јас пристап до сите од овие работи.
Функциите се случува да бидат различни во зависност од тоа дали јас сум со користење на класа или проект
или ознака или што, додека jQuery само дали тоа за мене.
>> [Студентите] е jQuery ќе се користи кога правиш почетна стил на страница?
Или со цел за промена на стил по тоа е веќе - >> [Роб] За да го промените.
[Студентите] По тоа е веќе вчитан. >> [Роб] Да.
Било почетна стил - добро, па дури и на -
генерално ќе се користи овој вид на промени.
Вие не би се промени - тоа ќе работи совршено добро.
Но обично не би го промените стилот вака.
Наместо тоа, би го даде нова класа или нешто
со оглед на тоа CSS веќе беше дефинирана за таа класа на одреден начин.
Со давање на овие предмети Јас сум изборот на нова класа
Јас сум примена на стилови кои се веќе преземени.
[Студентите] Така да изберете неколку изберете и работите што сте го избрале
се менува во нов стил и почнете да барате различни. >> [Роб] Да.
Други работи да се запамети околу -
добро, постојат неколку функции треба да се запамети околу jQuery.
Да речеме дека ние сме изборот нешто со проект П
>> [Студентите] Дали секогаш треба да се користи на фунтата?
[Роб] Ова значи проект. Тоа е еквивалентно на CSS, па CSS селектори - тоа е инспирирана од тоа.
Каде во CSS ако сакав да стил на подножјето -
или нешто со проект подножјето -
тоа ќе биде како text-align: центар;
вие не ќе треба да пишува CSS скрипти на испит, но треба да се знае селектори.
Што треба да се знае што - што треба да знаете како да го прочита.
Но, ние никогаш не би -
не треба да се запаметат сите на различни можни стил нешта. Или било која од нив.
>> JQuery работи што треба да се сеќавам -
треба да се запамети точка-HTML и заедничка шема, во jQuery - да пре-пишуваат ова.
А заеднички модел е имаме $ ("# ѓ"). Html
Ако јас ставам само обичен заграда тоа значи дека го добиете HTML;
а ако кажам HTML и стави што сакам тука - некои линк до нешто -
ставање нешто внатрешноста на загради сега се поставува на HTML.
Тоа е доста заеднички меѓу еден куп на функции.
Има истиот договор со текст.
Разликата помеѓу HTML и текст е дека текстот ќе го вметнете овој
буквално помалку од една, поголема-од, наместо како сидро таг.
И текст ќе бидат исти, ако јас само го направите тоа.
Тоа се случува да се добие текстот на документот - не го HTML на документот
но само на текст во рамките на овој елемент.
Уште еден е ако 'F' се случува да биде проект за влез,
потоа хаш-ѓ-точка-val - ако сакам да го поставите на влез на нешто како -
Да речеме јас хит на полето и сакам да се постави стандардна вредност -
дот-val - Јас дури и не знаат - 3 - така што автоматски ќе внесете во полето за текст 3,
но ако кажам 3-точка-Вал, која ќе се добие она што во моментов е во полето за текст за мене.
>> Ова е корисно за форма валидација каде
ако јас само сакате да бидете сигурни дека тие всушност пополнети сите од работите.
Еден начин да се направи тоа е ако откако хит поднесе тоа е неизбежно испратени до некои страница на серверот -
како за нас тоа ќе биде PHP - и дека ќе се обиде да ги обработува податоците и би рекол
тие не се пополни нешто, така што сега ги пренасочува кон друга страница, која вели
не сте се пополни се надвор.
Наместо да го направат тоа, во JavaScript / jQuery можете само да се види дали Вал е празна.
Или е val - празни цитати.
Што се случува на само - сега можеме да ги извести дека не сте ги пополните ова поле.
Неизбежно ќе треба да се направи за PHP на серверот проверка бидејќи
можете само да се оневозможи JavaScript во сите прелистувачи.
Но го вклучите Javascript-го прави погоден за оние кои не го имаат активирано,
и речиси деведесет и девет-точка-нешто проценти од прелистувачи го имаат на денешно време.
Многу малку луѓе се свртат го вклучите Javascript-оф.
Таа е корисник погодност. Што треба да направите PHP валидација.
Што треба да направите го вклучите Javascript-валидација.
>> [Студентите] Што значи # ѓ однесуваат тука?
[Роб] Што значи # ѓ однесуваат на?
Има некои елементи во мојот документ со проект "F".
Ќе гледам - ​​веројатно Фејсбук има многу примери каде што ако дојдам со елементи
Барате тука по елементите таг гледам ова особено div тоа е се нагласи тука -
или тоа е целата страница - Да, тоа е таму горе. Ова има проект pagelet_bluebar.
Во конзола Претпоставувам тие се со користење на веб.
Значи, јас би можеле да одберете pagelet_bluebar така што избира тоа, и јас направив нешто погрешно.
Ајде да се обидеме - или можеби тие не се користат jQuery и дека ликот одбележан на нешто друго.
А подобро пример во нешто за кое знам е користење jQuery -
уште гледа во нашите елементи тука - ние сме тука класа еднаква на статистика лента.
Ова е нешто со класа статистика лента,
па во внатрешноста на нашите конзола може да се погледне до работа со класа статистика лента.
Тука можеме да дојдете во текот на овој и да види дека е она што е оваа.
Ако сакав да го направам. Текст Ова е текстот од тоа, па гледам поставувања за извештај погоре за одјавување
кои се сите под тука, но тоа е уште текстот во рамките на таа HTML таг.
Јас би можеле да се постави на HTML само некои врската,
па јас ќе се ослободи од мојот бар. Сега дека се ослободи од насловот целосно само така тоа е поврзано со YouTube.
>> А, постои ли било каква форма пример?
Тука е форма.
Можам да кликнете со десното копче и проверете елемент да се дојде до тоа право овде.
Гледам дека неговиот проект е пребарување на текст,
па овде, ако го направам проект пребарување на текст.
Јас ќе донесе над него и гледам дека е точниот нешто што беше барате.
Ако сакам да го направам. Val ќе ми даде она што го внесе таму.
Ако сакав да направам здраво тоа ќе го промени тука за да здраво - jQuery.
Се разбира, јас не можеше да стори смешно како document.get елемент од проект - пребарување на текст -
Јас дури и не знаат што е тоа во овој момент - точка вредност - не, јас заборавив дека дечко.
Значи, тоа е здраво. Јас не знам како би го поставите изнесува нешто.
Да, па тоа се промени тоа.
Но, вие не треба да користите овие и многу многу веб-сајтови во овој момент употреба jQuery.
Дури и како на финалниот проект - ако правиш веб-проект - првата работа
Јас препорачувам е само вклучувајќи jQuery така можете да добиете погодности на сите овие функции.
>> [Студентите] Мислам дека го видов на поинаков начин да се дојде до елемент користење дом.
Дали имате да се користи точка, а потоа продолжувам да одам долу?
[Роб] Можете да го направите тоа. Јас не знам дали тоа ќе функционира многу добро.
Тоа е тешко да се движите на тој начин.
Еден пример е - јас дури и не знам дали имаме било форми -
но document.forms се случува да се врати на листата на форми тоа е на оваа страница,
тогаш можам да направам document.forms 0 ќе биде првата форма.
Точка - Не знам она што го нарекува тоа - па тоа дури и не мора име,
па можеби влезови ќе работат. Бр.
Јас дури и не знаат како да се добие на ова - се елемент-I-името на тагот влез.
Да, тоа ми даде влез, и сега сакам да го внесете 0
и јас сакам да го изберете нејзината вредност, така што нема да биде текстот.
Морав да заврши прави добие елементи по име на етикета секој случај.
Може да има некој начин да го изберете директно
преку форма 0, но убаво нешто за ова е уште како што имав само да одам на тагови наречен влез
дека биле дете на оваа форма, инаку ако јас само го направи тоа право до пред
ова ќе изберете сите елементи на целата страница, во целиот документ
наместо само таа форма и тоа најверојатно нема ни да биде оној што го сакате.
Јас дури и не знам кој е тоа. Не знам.
Претпоставувам дека првиот влез елемент на нашата страница е оваа мала Обележувач.
>> [Студентите] Ова е прилично неповрзани
а можеби и вид на глупо, но за клучните одговор се вели дека PHP -
Не знам дали тоа е одговор клуч или белешки, но таа вели PHP е од страна на серверот
и го вклучите Javascript-е клиент-страна. Која е разликата помеѓу 2?
[Роб] Разликата помеѓу вклучите Javascript клиент-страна и PHP на серверот.
Ако сте слушнале за коса црта / се користи јазол js, пред да би помислил дека
Го вклучите Javascript-не е само клиент-страна, но за CS50 цели што е -
или барем за целите на овој квиз е тоа.
PHP е од страна на серверот. Без JavaScript.
Кога пишувате вашата интернет страница ќе бидат писмено PHP на серверот.
Вие никогаш не ќе бидат писмено да го вклучите Javascript на серверот.
Го вклучите Javascript-завршува добивање испраќаат до прелистувачот, каде што го вклучите Javascript-кодот се извршува.
И JavaScript код треба да живеат во прелистувачот затоа што во спротивно кога сакам да
само се направи било кој вид на JavaScript-Y нешто како кликнување на ова,
Јас не сум претовар страница. Ова е само да вклучите повторно форматирање работи за мене.
Ако го вклучите Javascript живееле на серверот, а потоа јас ќе треба да се неизбежно бара нешто
на серверот за да знаат што да прават.
PHP - не постои такво нешто како PHP во прелистувачот.
Кога ќе побара некоја страница - Па да речеме еве јас побара ова особено страница.
Тоа значи дека ова ќе побара -
освежување - тоа се случува да се освежи оваа страница -
па ова барање излегува на нашиот сервер.
Гледа дека тоа треба да се вратат овој особено тема со овој конкретен проект,
Па сега дека ќе биде некои PHP дека преведувач PHP се случува да го протолкува оваа страница
и тоа се трансформира во само HTML, CSS, можеби го вклучите Javascript-, сеедно.
Тоа е PHP дека процесите ова барање и вади сите на текстот и работи
дека јас сум всушност барате од базата на податоци.
Но, она што остава на серверот е само HTML / ЈС / CSS.
Нема PHP која остава на серверот, бидејќи ако тоа всушност не
тогаш прелистувачот ќе немаат идеја што да прават со него, бидејќи тоа не знае што PHP е.
Но, во истата мисла, бидејќи го вклучите Javascript-е клиент-страна,
никогаш не можете да пристапите MySQL, од неа.
Затоа што PHP е од страна на серверот и да правите пристап на MySQL од него.
>> [Студентите] Може да ви одат над некои од загриженоста за безбедноста со колачиња во HTTP?
[Роб] Оние кои не се работи ние ќе треба да знаеш.
Некои од загриженоста за безбедноста со колачиња во HTTP.
Големото прашање овде е што гледаме дека овде ми колаче е PHP / проект.
Тоа е како универзална PHP сесијата.
Вашата сесија е нешто што во внатрешноста на PHP никогаш не ќе треба да биде потврдена
затоа што тоа е сервер кој има целосна контрола врз сесија.
Вие не може да го допрат воопшто.
Но, тоа е ова колаче - тоа едно -
и претпоставувам дека би можеле да се најавите како мене, веднаш, ако си сакал да го користите тоа -
но тоа е дека колачето дека - неизбежно ќе се направи ниту едно барање до серверот.
Серверот се враќа на страницата. Барањето е направено.
Тоа веќе нема никаков поим кој си ти.
Значи, следниот барање ќе се направи се случува да го вклучите дека куки, така што тоа го знае
ова е лицето кое го направило ова барање пред тоа.
Ова е сесија податоци кои се поврзани со овој корисник.
Тоа е зошто вие не треба да се логирате во за секој и секоја страница што ја користите.
Прашањето на безбедноста тука е дека колачето е испратена во текот на веб.
Ние сме користење на HTTPS тука, па во овој случај тоа значи дека ние сме енкрипција овој материјал.
Некој не може да дојде и само крадат моите куки и сега серверот ќе мислат дека ме си.
Но, со право на HTTP можат.
Исто како и оваа Wireshark / FireSheep нешта кои можете само да слушате на сите на Wi-fi уредите во воздухот
и интервенира она што го сакате, па је.
>> [Студентите] Еден вид на слични безбедносен ризик е зачувување на корисник проект во пост
бидејќи тоа може слободно да се уредува користење на конзоли и работи.
[Роб] Да. Има многу прашања, каде што како само нешто што доаѓа од корисникот
што треба да се провери.
Постојат голем број на случаи каде што тоа ќе биде корисно за како што јас сум за да се направи еден пост.
Бла, бла, бла, бла, бла. Тогаш јас хит одговор.
Тоа ќе биде многу корисно ако пост барање вклучени мојот проект, бидејќи
Сакам да се дружат овој пост со мене.
Но не можам да го направите тоа, бидејќи јас сум слободен да се направи еден пост барање - исто како рачен
излезе со моето мислење барање -
кој користи вашиот кориснички ID и сега тоа ќе ја објавите како вас.
Тоа е причината зошто на серверот не може да се потпре на пост барања кои содржат точната корисничко име.
Тоа е зошто тоа мора да припаѓаат во мојата сесија.
Па јас се погледне до вашиот кориснички ID во мојот сесија низа и јас вметнете дека во мојата база на податоци
како корисник кој всушност го направи овој пост.
[Студентите] И тоа е врз основа на вашите куки?
[Роб] Да. Таа користи колачиња за да одговара до вас како корисник кој тоа барање.
Тоа вади корисничко име од таа седница и дека потоа внесува во базата на податоци
користење на тој корисник проект.
Ова како копче - она ​​што е, всушност, прави е -
Јас не одам за да го најдете тука. Тоа се случува да биде функција Ајакс
Што е Ајакс функција?
Дозволете ми да дознаете она што ми го вклучите Javascript-е.
Тоа беше CS50 проект пред некое време.
Не можам да се сетам на тоа што е.
Ајакс функција - сите Ајакс функција прави е правејќи барање Ајакс за да страница со овој проект -
со ID 22.453.
Тоа не е дури и пост барање. Тоа е GET барањето што го прави уште полесно.
Ако знаев што ја URL адресата е - тоа е нешто како вака / ID = 22.453 -
или ID = 22.453 -
па посета на овој URL ќе се допаѓа тоа.
Што не би било како голем дел од проблемот, но тоа е неверојатно лесно да се напише јамка
кој е само ќе ја посетите оваа рачно одново и одново, која е причината зошто гледате
Isawyouharvard пост со илјадници нешта.
И тие имаат тенденција да бидат CS50-базирани Isawyouharvard мислења.
Како можам да се најде на повеќето се допадна?
Тие имаат тенденција да се брише прилично брзо, исто така.
Ова не е најстариот допадна. Таму ќе одиме.
Измамници на повеќето се допадна страница - тоа е прилично релевантни за ова право сега.
Ох Wow. Тие веќе избришани било кој од оние од оваа година, кои биле
изневерил. Оние имаат сите се избришани.
Никогаш нема да биде пост, кој добива ова високо.
Оваа беше очигледно измамени за да се добие за да се повеќето се допадна страница.
>> Повеќе прашања?
[Студентите] Што треба да знаеме за XHTML?
[Роб] речиси ништо. Само што е тоа.
Разликата помеѓу него и HTML е во тоа што XML е многу слична по изглед
со HTML, освен во HTML ние само треба да имаат предефинирани ознаки.
Но со XML - XML ​​е само како општа формат, каде можете да направите XML документ
поради кои било причини сакате.
Така, на пример, ако сакав можев да се изгради на XML за курсеви -
и јас всушност мислам дека CS50 има API за ова.
Мојата XML документ би можел да изгледа нешто како -
курсеви и се разбира ќе ми треба малку крајот курсеви.
Јас би можеле да имаат се разбира и тоа би можело да има име е еднаква на CS50.
А потоа мојот крај се разбира и јас би можеле да се стави во внатрешноста на тука на студентите,
а потоа внатрешноста на студентите имам листа на еден студент чие име е сеедно.
Јас заврши што студентот и така натаму.
Јас едноставно се случи да се изградат некои произволни XML документ, но тоа е валидна XML.
XML - сето тоа е е овој вид на структура и убаво нешто - причина што ние дури и го нарекуваат XML
е дека овој вид на работа е многу лесно да го анализирам.
Тоа е многу лесно да се преземе овој документ и да направи низа од неа.
И така XHTML е обид да се добие HTML да биде валидна XML.
Веќе ова изгледа прилично сличен со HTML.
Некои од разликите се HTML сте во можност да ги правите нештата како влез можеби тип еднаква на текст
што е стандардно па јас не треба да се каже тоа.
Најава.
>> Постојат 2 работи тука кои го прават овој валиден XHTML.
Првата работа е дека сите XML тагови треба затворање на тагот.
Така што во случај на влез треба да се направи на - која насока на коса црта е тоа?
Оваа насока? Што изгледа погрешно.
Друга насока.
Авто-затворање на тагот.
Втората работа е дека со XML ви треба на овие видови на како клучните вредност парови.
Тоа треба вредност поврзани со неа.
Значи, иако хендикепирани во себе и за себе изразува она што сакам -
овој влез треба да се оневозможи -
тоа е валиден XHTML.
Она што јас всушност треба да се напише е оневозможено еднаква на лицата со хендикеп.
Сега е валиден XHTML.
И овие се само овие мали разлики кои ги трансформираат HTML да XML-базиран вид на работа.
>> [Студентите] XML е за како повлечат преку свој Х целосно од типот на зошто е тоа (нечујни)
[Роб] На нешто од како CSV - на CSV имате само вредности одделени со -
само мислам на табела. А CSV во основа е табела.
Имате можеби колони и имаш еден куп на редови
соработник на податоци со овие колумни, но тоа е тоа.
XML е многу повеќе разноврсна во кои можете да - ќе имаат произволен хиерархија на податоци.
Јас би можеле да имаат повеќе курсеви, кои имаат повеќе студенти во рамките на тоа
каде што ќе биде тешко да се сетам на табела дека -
само дека една табела - CSV особено е како само една табела -
така што една табела има сите CS50, 51, и 61 и во рамките на тие сите
студентите во врска со тие времиња, можеби средба времиња и сите тој вид на работа.
Од друга работа е дека таг имиња даде убав име на сите елементи
па читање CSV датотека може да биде тешко да се обиде и анализирам она што е, всушност, гледате.
XML е многу повеќе читливо, па затоа како - да дојде до некоја личност кој не
навистина знаете што CSV датотека е или како да не е програмер или нешто -
може да им даде како дефиниција XML датотека и тие може да се следат линиите и -
О, јас сум требало да се вметне моето име тука.
Тоа е многу повеќе употребливи формат.
CSV има многу користи, но XML има различни намени.
>> Повеќе прашања?
Други прашања?
[Студентите] Од претходниот квиз - вертикална прошири наспроти хоризонтална скалирање.
[Роб] Вие не би требало да знаеш дека. Јас не мислам дека ние дури и разговаравме за тоа дека.
Јас сум Сомневајќи се дека тоа е само еднократна коментар.
Ох. Хоризонтална наспроти вертикална прошири не е нешто што ќе треба да знаеш.
Мислам дека разликата е само како - О, добро, клучот одговорот ќе каже разликата.
Вертикална прошири е исто како ох, мојот компјутер прави лошо. Јас ќе добиете подобра.
Додека хоризонталната скалирање е ох, мојот компјутер прави лошо -
дозволете ми да добиете 20 од нив на сите работа на истата задача.
>> [Студентите] Може ли да одиме во текот на поврзаните листа начин за правење редици. >> [Роб] Секако.
Тоа е полесно отколку низата начин.
Поврзаните листа начин за правење редици.
Прво, она што не ни struct за поврзана листа изгледа?
[Студентите] Дали сме го прави тоа за - >> [Роб] Ајде да си ја работи својата - Да.
Int вредност, а потоа struct јазол * следниот;
па тоа е она што ние ќе го користите за пример тука.
Ајде да всушност тип на овој материјал.
Ајде да направиме linked_list.
Нашите struct -
Во ред. Сега се гледа во нашата листа на чекање имаме -
ајде да се направи глобална задача.
Тоа ќе биде јазол * дното, и ние имаме dequeue функција.
Претпоставувам овие работи, исто така, може да го скрши точно или неточно - ајде да го направите тоа.
Bool dequeue - и ние сме dequeueing - ох. Hmm.
Int dequeue - она ​​што не го правиме со ова и пред тоа?
Int dequeue и имаме bool Стави во ред и ние треба да Стави во ред некои средства вистина.
Ајде да направиме Стави во ред во прв план.
Ние имаме задача. Ние сакаме да го внесете нешто во редот.
Што е најдобар начин да го направите тоа?
Овде нашата задача во моментов изгледа како имаме некои глобални покажувачот да се започне.
Таму е нашата задача.
Претпоставувајќи дека ние dequeue со преземање на првиот елемент,
Каде сме ние нема да сакате да го вметнете нашите јазол, така што редици работат како што треба?
[Студентите] На самиот крај. >> [Роб] Да. Редици се би требало да биде прв во, прв надвор.
Што значи дека новиот елемент треба да се вметнат овде. Во ред.
>> Враќање код,
тоа значи дека ние ќе сакаат да прават јамки низ нашата задача.
Ајде да направиме јазол * тековната = редот, додека тековната не е еднакво NULL.
Јас би го направил - сите во право, нека го направи тоа одделно.
Прво, сегашниот = редот.
Што ќе правиме ако тековната започнува како NULL?
Ние ќе го правиме ова 2 начини. Прво на овој начин.
Што ќе правиме ако струјата е Нулев?
Дали е ова еквивалентно на, ако задачата е NULL?
[Студентите] Тоа се случува да се врати лажни. >> [Роб] Треба ли да се врати лажни?
Што е во ред со вметнување нешто во празен листа?
[Студентите] Ништо не е во ред со тоа. Жал.
[Роб] Да. Па тука само разликата е мојот глобалната листа на чекање се испратени до мојот нов јазол.
И тогаш морам да сторам проверки на, ако задачата е NULL.
Враќање false.
А потоа чекаат на val i изнесува; редот следната еднаква NULL; врати вистина.
Во ред. Одам да скокаат пиштолот во право тука.
Се сеќавам она што го правевме дека последен пат
каде што рече дека тоа е многу полесно да се работи со јазол ** со овој вид на работа.
Па сега тековната ќе биде и на дното, и доаѓа до тука -
додека моменталниот - додека * тековната не е еднакво на нула -
па дозволете ми да го направите струја - we'll се зборува за ова во една секунда.
Тековната следната. Во ред.
Гледајќи уште во неа на овој начин, ова е процесирањето над сите од моите совети се додека не го достигне нула покажувачот.
Нула покажувачот ќе биде покажувачот Сакам да го замени со мојот нов јазол.
Во потрага на iPad верзија -
ако мојата оригинална покажувач и поврзаните листа е празна тогашниот ќе укаже тука.
Ова се случува да се укаже на нула,
па ова е покажувачот јас се заокружи движат да се укаже на некои други нови јазол.
А ако примерот е овој случај тука
тогашниот ќе напречни од тука - јас збркана малку.
Каде тековната би требало да биде на адресата на тековната следната.
Е она што го сакам? Тековната така * тековната ми дава јазол.
Следна преминува кон следниот.
Јас сум во моментов покажува тука.
Ајде да направиме црвено - па јас сум во моментов покажува тука.
Потоа * тековната ќе референтни овој јазол.
И * тековната следната референци овој јазол, но тоа не е она што сакам.
Сакам овој покажувачот во тој јазол.
Значи, тоа покажувач на овој јазол е симболот (* струја) следната.
>> Во овој момент во времето што сум официјално достигна јазол дека сакам да се замени.
Ајде да ги замени сите од овие редици тековната - и сега сме готови.
Може да има грешки, но идејата е дека со внесување на овој вид на начин
тоа е полесно да се работи со совети кои ние сакаме да се промени
наместо да има потреба да ги пратите на - Добро, е мојот почеток NULL?
О, тоа е? Тогаш јас треба да се создаде на почетокот јазол да биде нешто посебно
на друго место јас ќе сакате да iterate до следното нешто што укажуваат на е NULL,
а потоа јас ќе го замени тоа - она ​​што следната работа е - да ми Примерок јазол.
Наместо да има потреба да се одвојат овие случаи, еве јас само се справи со случајот на
она што е покажувач, кој е NULL дека јас повеќе не сакаат да бидат NULL,
и дека го прави животот полесен освен, тие би требало да биде * тековната сега, бидејќи -
[Студентите] Дали тие се уште големината на еден јазол?
[Роб] Да. Јас сум уште mallocing еден јазол.
[Студентите] Е тоа ќе биде со големина на еден јазол *?
[Роб] Враќање тука, мислам на случај, ако ова е нашата поврзана листа.
Овој човек укажува исклучување на нула.
После тоа зошто јамка, тековни поени до тука
бидејќи ова е покажувач, кој е NULL.
Сега сакам да го промените ова покажувачот да се укаже на нов јазол.
Прво јас Примерок дека новиот јазол - така Примерок големината на јазол.
И дека се враќа јазол * и сега се менува овој покажувач гради на * тековната еднаквите
овој нов јазол дека јас распределени.
Значи, ако струјата е еден јазол **, потоа * тековната ќе биде еден јазол *,
и ако сум mallocing нешто големината на јазол, тогаш ова се враќа покажувач кон јазол
па ова е еден јазол * - па и двете страни коректно имаат ист тип.
И така, ако она што јас само распределени беше NULL, враќање false;
друг заврши поставување на нив со она што сакаме од нив да биде - освен овие треба загради
бидејќи тоа не е како цел на работите работа.
Без загради што го толкува како
тековната стрелка-val dereference тоа.
Наместо Сакам да dereference струја која ме доведува до еден јазол.
Тогаш сакам да се добие вредност поврзани со тој јазол.
>> [Студентите] Мислев стрели дозволено да се заобиколат дека и одат директно на вредноста.
[Роб] Тие го прават. Тоа е ако имам - да речеме задача е еден пример.
Јас сум дозволено да се направи на дното стрелка-val i изнесува бидејќи задача е еден јазол *.
Дали имало некои убави синтаксата на како тековната повеќе стрелка-val или нешто
кои не 2 dereferences, тогаш ова ќе работат добро.
[Студентите] Значи стрелката е само за 1 dereference. >> [Роб] Да.
Алтернативно Можев да напишам ова како (** current.val).
Исто како и јас, исто така, би можела да напише ред како (* дното). Вал.
Па ајде го внесете. Па, тоа е во ред претпоставувам.
Dequeue ќе биде значително покус.
Ајде да се стави празнина тука за чистота.
Значи, dequeue. Што елемент сум јас dequeueing?
[Студентите] Првиот? >> [Роб] Да.
Ако мојот прв еден е NULL - враќање - не знам она што сакаме да се врати - INT_MAX;
и тогаш треба да се направи проверка за да види дали INT_MAX беше вратен.
Тоа е вид на нешто што се вклучени не друго сакаме да -
можеме само да се врати редот на val? Е дека она што сакате да го направите?
Dequeue, исто така, имплицитно ги отстранува објект од дното,
па ајде прво се каже - да добие tmp да се укаже на првиот јазол на нашата листа на чекање.
Сега сакаме да ја подигнеме нашата задача да се укаже на следното нешто во редот.
Сега имаме мали лево. Tmp вредност е нешто што сакаме да се врати.
Значи, вредност = tmp-> Val;
но пред да го врати треба да се ослободи мали и да се врати вредност.
Редоследот на операциите тука е важно во која ние треба да го зграби мали
пред да преминеме на дното на следниот елемент.
Ние треба да добие на вредност, пред да ја ослободи мали,
а потоа можеме да го врати вредност.
>> [Студентите] Треба ли да се постави на дното до дното?
[Роб] Да. Што беше создавање на лоши јамка / не би сакал да работиш по ослободувањето тоа во секој случај.
Редот = дното-> Next.
Ние сакаме да ги унапредат редот во следната елемент не напредуваат на следниот елемент
на она што елементот во моментов е.
Купишта ќе биде значително - како дури и полесно во тоа dequeue е иста
бидејќи ние сме одлепувате на предниот дел на магацинот.
Крајот задача ќе биде многу сличен, каде што само сакате да ги распредели еден јазол
и вметнете во предниот дел на оџакот, па ние дури и не треба да се прават јамки низ ништо.
Ние само внесете директно на фронт.
Е секој добар за тоа?
>> Океј. Повеќе прашања?
[Студентите] Што големи нешта што треба да ги држи во умот од најновите лекција?
[Роб] Најновите предавање.
Вие не треба да знаат било код.
Што треба да знаете Општата идеи.
Половина на Nate не се имате било какви код и така тие слајдови онлајн.
Тие се само како погледнам во нив и тие имаат големи идеи.
Моето полу - знаејќи целокупната идеја на прв не можете да им верувате ништо.
Фактот дека како можеби процесот на компајлерот може да биде лошо,
но тоа дури и не е важно дека изворниот код изгледа добро.
Бидејќи на компајлерот може да се специјално променет да се промени изворниот код
во процесот на составувањето.
Во исто време исто како и - Мислам дека тие се како големи идеи за тоа.
>> [Студентите] Дали ќе се спомене дека ние не треба да се знае нешто во врска со Firesheep -
или ние треба да знаете дека?
[Роб] Со Нејт е половина од работите, нешто што Нејт се осврна и на -
како FireSheep, Wireshark - Јас дури и не мислам дека тој не Firesheep во детали.
Можете исто така, направи нешто со тоа - тоа беше Firesheep - минатата недела?
Дали ќе се смести на тоа?
[Студентите] Да, мислам дека ние би можеле да имаат - >> [Роб] Да.
Ние нема да ви даде Firesheep излез и да каже се протолкува ова.
Тоа е само ќе да биде - тоа ќе биде прашање како што е Firesheep?
Што е тоа користи за?
[Студентите] Мислам дека тоа работи само на верзија 4 на Firefox или нешто слично.
[Роб] Тоа би можело да биде скршена од сега.
Јас немам идеја.
Тие не чини да го оневозможи рачно,
но можеби тоа не функционира со најновите Firefox.
[Студентите] Јас всушност се обидел да го инсталирате бидејќи рече дека тоа ќе биде компатибилен.
[Роб] Значи, претпоставувам дека тоа не функционира со најновите Firefox.
Но, идејата се уште стои на она што требаше да се покаже.
Тоа беше апсурдно колку на светот не живеел во HTTPS во тоа време.
Дури и во последните 2 години, или што и да, тоа е уште - има драматично подобрување во
бројот на веб-сајтови кои го користите HTTPS.
>> [Студентите] Дали ние треба да одиме преку HTTP?
[Роб] Протоколот од него? >> [Студентите] Некои од работите што треба да знаеме.
[Роб] Во ред. Основни работи се сè може да се види во вашата мрежа табот.
Кога ќе побара некоја страница - се враќаат до врвот за главните работи.
Можете да видите тука барањето што можам да направам.
Хром се случува на сите ја форматирате убаво за нас
каде што URL на барањето беше ова, метода на барање беше ГЕТ,
и кодот статус беше 200 OK.
Ако го погоди видите извор, гледам подиректно тоа -
и ова е - ние може да ви покаже било кој од овие, но тоа не е премногу тешко да се протолкува меѓу нив.
Тука е директно барање не сум направил, па тоа значи дека отидов да
apps.cs50.net/discuss/threads/inbox/all/HTTP/1.1.
И протоколот што се користи е HTTP/1.1 кој е буквално - тоа е секогаш ќе биде тоа.
Овде се користи ГЕТ, така што ова, исто така, може да биде пост.
А потоа доаѓаат надолу - сите патот надолу за да се заглавија одговор - ако ние ја видите дека извор,
тоа е местото каде што можеме да видиме на 200 OK.
Знаат можните различен статус кодекси на овие.
Мислам дека во прегледот ние не кажам неколку од овие,
па 403, 404 - оние вид на заеднички претпријатија.
Тоа е голема идеја за неа.
Разликата само помеѓу HTTP и HTTPS е оваа енкрипција.
>> [Студентите] Дали си направил? >> [Роб] Јас мислам така. Па, Да.
[Студентите] Ќе се зборува многу, генерално, за тоа како енкрипција дела?
Бидејќи ние разговаравме за пример кога компресирање Хафман датотеки,
знаете како да ги намалување притисок затоа што всушност испратени на hashtable во рамките на датотеката
Па како не енкрипција работа?
Како да знаете како да го криптирате информации ако не сте всушност пратени на клиентот
клучот за - и ти всушност може да го дофати дека клучот од -?
Како се општиот процес работи?
[Роб] Општите процесот на енкрипција -
тоа е неверојатно детални прашање јас ќе ти одговорам.
Таму е краток - добро, Томи и јас го кратко.
За жал, тоа е како 26 минути, па тоа не е краток. Тоа е долг.
Но нашиот краток беше на RSA, која е само еден пример од овие,
и ова RSA е дел од целокупната HTTPS протокол.
Идејата - RSA е пример за јавен клуч криптографија,
што значи дека имате 2 посебни копчиња.
Го користите копчето 1 за да всушност енкриптираат нешта,
и можете да користите друг клуч за декриптирање работи.
Овој клуч кој го користите за да го криптирате работи е оној кој е јавна.
На веб-сајтот може да ви го испратам овој клуч за енкрипција.
Тие не ви испрати дека клуч за енкрипција, и кога сакате да испратите нешто назад кон нив
го користите дека клуч за енкрипција за да го криптирате сите ваши податоци и испратете ја на нив.
Значи, тие се единствените со приватниот клуч.
Ако тоа приватен клуч стана познат тогаш секој ќе биде во можност да ја декриптираат вашите податоци.
Но, тоа приватен клуч - која е математички поврзани со јавниот клуч, но не можете да
бројка издвојува од другите - така што приватниот клуч може да се користи за декриптирање на податоците.
Бидејќи тие се единствените со приватниот клуч,
тие се единствените кои можат да ги чита податоците.
Па дури иако на јавниот клуч е јавна,
Ја користам истата - кога ќе одам во Google.com или што и да,
тие би можеле да имаат повеќе, не знам - но ако одат на Google.com,
тој оди на Google.com, таа оди на Google.com--
сите ние да го користите истиот јавен клуч за криптирање нашите сопствени информации сепак сакаме.
Но никој од нас не се случува да бидат во можност да дознаам - се случува да бидат во можност да ја декриптираат
на нивните информации, бидејќи јавниот клуч не е во состојба да се дешифрирате.
Тоа само може да криптирате.
И тоа е забавно / детални математика на - како еден куп на модулот оператори и exponentials и работи,
дека тоа едноставно работи дека приватниот клуч е единственото нешто што може да
декриптирање на јавниот клуч на енкрипција нешта.
Да. Види на RSA краток за повеќе детали.
[Студентите] е дека на веб-страница?
[Роб] Да, мислам дека тоа е во овој момент. Или барем на YouTube линк до него беше објавен.
Ајде да видиме. Шорцеви. Мислам дека тоа би биле недела 2-поврзани. Да. RSA.
А тоа е - Не сме случува да се игра оваа - 24 минути.
Тоа е долга еден.
>> Повеќе прашања?
[Студентите] може да се зборува кратко за bitmasks? >> [Роб] Секако.
Накратко кажано, идејата е само тоа како - >> [Студентите] Што е тоа, Роб?
[Роб] Bitmasks. Идејата е - да речеме имаме некои - we're користење на некои цел број -
int x - така, ние го започнете во 0.
Сега, ова е цел број 32 бита, па секој поединечен 1 на оние битови може да се користат за да претставуваат
одредена FLAC.
Ова е местото каде ако се погледне на оперативниот систем кодови, тие ги користат оваа насекаде
каде можеби до врвот некаде тие хаш-дефинирање -
Да видиме некои примери.
Човекот-2-отворен - отворен систем повик може да се види тука дека еден од нејзините аргументи е int знамиња -
она што го очекува како тој аргумент се некои од овие знамиња.
Гледаме O_append, O_ASYNC, O_CLOEXEC,
O_CREAT, и така натаму.
O_DIRECT. Овие видови на знамиња се хаш-се дефинира некаде.
И сите од нив се токму 1 малку.
Значи, O_CREAT може да биде хаш-дефинира како 1, лево смена, 4 (1 << 4).
Тоа ќе биде - кога јас го користам O_CREAT дека е само случува да биде -
во бинарен 1, 0, 0, 0, и 30-носталгичната нули пред тоа.
Тоа е само еден малку сет, а тоа малку претставува ова знаме.
И така нема други знаме ќе треба да се остави се менувале од 4.
Јас сум во можност да ги претставуваат до 32 знамиња во еден цел број од тоа -
x = O_CREAT малку мудар или O_DIRECT.
Сте само подигање било 2 од оние знамиња.
Сега x се случува да имаат 2 битови во собата кои одговараат на 2 парчиња
на O_CREAT и O_DIRECT.
Начинот на кој потоа - па потоа го поминавме x во отворен функција,
и отворен треба да се види она што знамиња беа всушност во собата.
Значи, тоа е каде што тоа се случува да ги правите нештата како
ако (x & O_CREAT) се направи нешто,
или ако (x & O_DIRECT) направи нешто друго,
а потоа може да има некои знаме дека ние не имаат поставено -
ако (x & O_ - Јас не знам што другите знамиња се -
(X & O_RDONLY) - тоа особено состојба не се случува да биде погубен.
Или дека блок од код нема да биде погубен,
но овие 2 се затоа што тие 2 знамиња беа поставени.
И ќе забележите дека во C, секоја вредност не е 0 е точно.
Значи, (X & O_CREAT) ќе биде 0 или O_CREAT
бидејќи O_CREAT има само еден малку во собата.
Ако тоа малку е поставена следно, тогаш ова ќе се вратат O_CREAT -
бинарни каде што само тоа малку е поставена.
Ако тоа малку следната не е наместена, а потоа тоа се случува да се врати 0, во кој случај знаеме знаме не беше во собата.
Тоа е како да се користи bitmasks.
Мислам дека на претходната испит или можеби во класа или нешто -
исто така можете да го користите bitmasks за печатење на бинарни на променливата.
Па јас да го користите - looping преку - 1, лево смена, 0 - а потоа печати ако x и тоа -
ако x & 1, лево смена, 0 - потоа отпечатите 0 или 1. Или да ги печатите од 1 друго испечатите 0.
А потоа одам во текот уште еднаш - ако x & 1, лево смена, 2 - тогаш тоа значи дека вториот малку
на променлива е поставено, па јас се печати 1 на друго место јас печати 0.
И мислам дека ние, всушност, можеби ќе сакате да го стори тоа во обратен редослед, бидејќи
обично дека сакате левата страна да биде од највисок ред битови
и на десната страна да биде најниската битови, па тоа ќе веројатно јамка 4 int i = 31 до јас хит 0,
тогаш се точно услов - ако x & 1, лево-Shift, I; печати 1 друго 0.
[Студентите] Ви благодарам.
>> [Роб] Мислам дека ние сме надвор од времето.
Повеќе прашања во последните неколку надвор од работно време секунди?
Во ред е. Со среќа утре.
Ова беше последниот дел каде што следната недела ќе биде задолжително.
Јас ќе му ја врати квизови и можеме да одиме над нив, а можеби и одат над други работи кои
сте биле заинтересирани, или финалниот проект нешта, или идните CS класи работи или - не знам.
Но ова е последен материјал исполнето секција.
Чао!
(Аплауз)
>> [CS50.TV]