[Рецензија: Квиз 1] [Али Нахм, Ореолува Барбаринса, Лукас Фреитас, Роб Боуден] [Универзитет Харвард] [Ово је ЦС50.] [ЦС50.ТВ] [Луцас Фреитас] Велцоме свима. Ово је преглед за квиз 1. Баш као одрицање, то је - мислим, да ћемо покушати да покрије колико материјала је могуће, али то не значи да идемо да покрије све ствари које могу бити у квизу 1.. Дакле, будите сигурни да такође погледате предавања, секције, све што можете. Квиз 1 ће бити у среду, следеће среде. Дакле, будите сигурни да студира. То ће бити, прилично, као првог квиза погледу његов формат, али је вероватно да ће бити много теже. Најмање, прошле године кад сам узео 50, мислио сам да је много теже. Дакле студира много. Идем да покрије структуре података и Хуффман кодирање. То је нешто што многи људи мисле да је сложен, али ја ћу покушати да га лако као могуће. Пре свега, оно што ми желимо да ви знате за квиз 1 је да се разумеју концептуалне описе сваког од структуре података које ћу представити. То значи да не морате да се заиста имплементира хасх табелу у вашем квизу 1.. Ми не желимо да спроведе цео хасх табелу, можда ћемо покушати да примените неке функције, најчешће операције, али нећемо да вас спроведе све. Зато је важно да разумете концепт иза сваке структуре података и да сте у стању да код у Ц, само најчешћи послови које они имају за сваку структуру података. А такође бити у могућности да прегледате показиваче и Структуре, јер се појављују много у овим структурама података. Прво, повезане листе. Повезане листе су заправо врло сличне низове, али разлика између повезане листе и низа, пре свега, јесте да повезана листа има веома флексибилну величину, док у низовима морате да одаберете или веома велики величине за низ, тако да знате да ћете бити у могућности да сачувате све своје податке у том низу, или морате да користите маллоц да имају флексибилан дужину низа. У повезаним листама је врло лако да се само добити више елемената, ставити више елемената у повезаној листи или уклоните елементе. А заправо, ако не желите повезана листа да се сортирају, можете тражити и уклонити елементе у константном времену, па О (1) време, тако да је врло згодно. Потребно је само да буду опрезни да се увек сећати да маллоц и слободно чворови, само зато што ако не урадите, имаћете меморије цурења. Тако повезане листе - дефиниција чвор је баш као што ми имамо овде. Ставио сам инт н, али можете да сачувате све податке које желите. Дакле, ако желите да сачувате стринг, то је у реду. Ако желите да меморишете струцт, то је у реду, дупли, шта год желите. Управо сам ставио инт н за примере овде. И имате показивач на следећи чвор. Дакле, у основи, повезана листа има неке податке, а затим указује на следећи чвор. Ако је последњи елемент у повезаној листи, то ће указати на НУЛЛ. Дакле, ово је пример повезаној листи. Ок, па сад да видимо шта би требало да урадим ако желим да убаците елемент у повезаној листи. Прво, функција уметак ће бити од типа воид јер ја не желим ништа да се врате. И ја ћу да узме инт као аргумент, јер желим да знам шта желим да убаците. Дакле, шта је прва ствар коју треба да урадим? Па, ја треба да маллоц на невноде, тако да је прва линија. Ја само ствара нову чвор да се стави у повезаној листи. Па шта да радим? Па, ми знамо да је у нашим имплементације повезаних листи у класи, увек смо ставили главу као глобална променљива. Дакле, шта можемо да урадимо је да промени главу. Ја могу направити овај нови чвор бити нови шеф, и то ће указати на претходну главу. Како можемо то да урадимо? Прва ствар коју морам да урадим је променити 'н' у новом чвору на вредности, који је донет у функцији. Онда следећи невноде је ће бити глава. Глава ће бити невноде. Дакле, то је прилично једноставно. За брисање чвор, ми то можемо као - Један од начина можемо да урадимо то је да кажем, ок, ако сам хтео да избришете, на пример, 3, шта сам могао да урадим је само указати на претходни чвор на следећи чвору од 3. Тако сам урадио тако нешто. Али шта је проблем са тим? Имам цурење меморије, па немам приступ броја 3 више. Проблем је у томе што ја не идем да би могли да ослободе тај чвор. Ја ћу имати осипање меморије и (неразумљив) ће ме мрзети. Дакле, уместо да то раде, вероватно би требало да има привремену показивач. Зато сам ставио темп. То ће да укаже на чвору који сам желите да избришете. И онда ја могу да се померим претходне чворови тачке на следећи чвор од чвора који сам желите да избришете. И на крају, ја могу ослободити показивач. Да ли морам да ослободи показивач који сам створио тамо? Ја не морам да, само зато што - Разлика је у томе што овај чвор је направљен коришћењем маллоц, тако да је у гомилу, док је овај управо је проглашен као НУЛЛ прекидачем у стеку. Дакле, ја не морам да га ослободи. Реду. Дакле, хајде да причамо о гомилама. Гомиле су прилично једноставна. Урадили смо гомиле и редове у класи само помоћу низова, али требало би да буде познато - само будите свесни да можете да урадите гомиле у редовима користе повезане листе, као добро. Дакле, ако имате низ, шта ће бити гомила? Стек, прво ће морати да имају величину. Морате да чувате оно што је величина стека који имате сада. А ти би такође имати низ, у овом случају бројева, али ако желите, то може бити низ низова, низ струцт, све што желите да сачувате. О стека: Разлика између гомиле и повезане листе је да је у стеку само ви имате приступ последњем елементу који је стављен у стеку. То се зове последњи у, први напоље. Баш као да имате гомилу каблова, ако стави послужавник на врху стека, морате прво да уклони ту фиоку да имају приступ другим носачима. То је иста ствар са гомилама. Дакле, ако желим да се, на пример, додати елемент на стек, шта да радим? То се зове пусх, а то је прилично једноставно. Прва ствар коју морате да урадите је да проверите да ли је величина стека није већи или једнак капацитету стека. Јер ако сте већ на пуном капацитету, ви не можете додати још нешто. А онда, ако не, ви само треба да додате елемент у стеку. И на крају, повећате величину. Дакле, то је прилично једноставно. Тако сам само додати број 2. А ако желим да поп, што значи да желим да уклоните последња елемент који је додат и врати вредност елемента, Прва ствар коју треба да проверите је да стек није празан. Јер ако је празна, ја не могу да се врате ништа. У том случају, ја враћам -1. Иначе, ја ћу да декрементирати величину спец, и врати бројеве (с.сизе). Зашто сам декрементирати величину и онда се врати с.сизе? То је зато што, у овом случају, спецификација има величину 4, и ја желим да се вратим четврти елемент, зар не? Али шта је индекс четвртог елемента? Три. Пошто ја величина - ће бити 3, ја само могу да се врате с.нумберс (с.сизе) зато што је 3.. Дакле, то је само индекс. Сада редове. Редови су прилично иста ствар. Једина разлика је у томе што уместо последњи у, прво се, прво морате у, први напоље. Вероватно ако сте чекали да одем на концерт, ти не би био срећан ако сте имали гомилу уместо реду. Бити последња особа да дођу ће бити прва особа која уђе на концерт. Вероватно не би био срећан. У реду, прва особа која се у је такође прва особа да изађу. Дакле, у дефиницији реду, поред има величину у низу, Ви такође треба да имају главу, што је индекс у главу стека. Дакле, први елемент сада. Енкуеуе је иста ствар као и притиском за гомиле. Ако сте били веома наивни, само би рекли, добро, ја само могу да урадим исту ствар као и ја за пусх. Ја само могу да проверим да ли то није изнад капацитета. Ако је, ја ретурн фалсе, иначе ја само могу да извозе на нову вредност а затим повећавати величину. Али зашто је то погрешно? Хајде да видимо овај пример. Покушавам да енкуеуе гомилу ствари, а онда ћу да декуеуе и енкуеуе. Постоји много команди, али то је врло једноставно. Идем да енкуеуе 5, па додати 5, а онда 7, 1, 4, 6, и онда ја желим да декуеуе нешто, што значи да ћу да уклоните први елемент. Зато ћу да уклоните број 3, зар не? Први елемент. Ок. Сада, ако покушам да енкуеуе нешто друго, шта ће се десити? Према мојим имплементације, Хтео сам да ставим следећи број у индекс к.сизе. У овом случају, величина 8, тако индекс 8 ће бити овде у последњој позицији. Ако покушам да енкуеуе 1 овде, ја бих се замене последње позиције на број 1, што је потпуно погрешно. Оно што ја желим да урадим је обмотана и идите на првој позицији. Можда сте управо би рекли, па, ја само морам да проверим ако ја заиста могу ставити нешто тамо. Ако не, само кажем, ох, нови пуни капацитет је заправо капацитет - 1, а ви не можете ставити тамо елемент. Али, шта је проблем? Проблем је у томе што ако сам декуеуе све овде и онда се трудим да додам нешто друго, то је само би рекао, добро, били сте у пуном капацитету, што је 0. Дакле, ваш ред је нестао. Морате да обмотана, и начин увијања око да сте ви научили у визионарским и другим псетс је користећи мод. Можете да пробате код куће да разумем зашто би то к.сизе + к.хеад Мод капацитет, али ако проверите овде, можемо видети да то ради. Дакле, у последњем примеру, к.сизе је 8 а глава је била 1, јер је то био тај положај овде од низа. Тако да ће бити 8 + 1, 9. Мод капацитет 9 ће бити 0. Било би ишли у индексу 0. Ми ћемо бити на правом месту. А онда покушајте ред код куће. Неке важне ствари: да покушамо да разумемо разлику између стека и реда. Код куће, покушајте да се упознају са веома спровођење енкуеуе, декуеуе, пусх и поп. А такође разумети када би користили сваки од њих. Па хајде да се опустите за 10 секунди са гомилом Покемонс. А сада да се вратимо на структуре података. Хасх табеле. Многи људи су били уплашени од хеш табеле. Проблем у сет 6, Спелл Цхецкер. Хасх табеле и труди, много људи се плаше њих. Они мисле да су тако тешко разумети. Да? [Роб Боуден] проблем сет 5. Проблем сет 5, да. Хвала Роб. Да. Шест је Хуфф Н 'Пуфф, да. Проблем је сет 5 Спелл Цхецкер, и морали сте да користите или хеш табелу или пробати. Много људи мисли да су супер тешко разумети, али они заправо прилично једноставна. Шта је хеш табела, у основи? Хасх табела је низ повезаних листи. Једина разлика између низа и хеш табели је да је у хасх табели имате нешто што се зове хеш функција. Шта је хеш функција? Ја не знам да ли ви можете прочитати овде. Ово је пример хеш табели. Тако можете видети да ли имате низ са 31 елемената. А шта ми радимо у хеш табели имају хеш функцију који ће превести кључ, сваки инт на индексу. Ако, на пример, ако желим да изаберем за Б. Харрисон, Ја бих ставио Б. Харисона у мојим хеш функције, и хасх функција ће вратити 24. Тако сам знао да желим да складиште Б. Харрисона у 24.. Дакле, то је разлика између само има низ и има хасх табелу. У хасх табеле ћете имати функцију која ће да вам кажем где да складишти податке које желите да сачувате. За хеш функције, желите да потражите хеш функције који је детерминистички и добро дистрибуирани. Као што можете видети овде, видите да доста података који сам желео да продавници је заправо 19 уместо да користите 31 и 30 и 29, који су сви били слободни. Дакле хасх функција које сам користио није био веома добро дистрибуирани. Када кажемо добро дистрибуирани, то значи да желимо да имамо, отприлике, најмање 1 или 2 за сваку од - као, разлика од 1 или 2 за сваку од индекса у низове. Желите да имате, отприлике, исти број елемената у свакој повезаној листи у низу. И то је лако проверити да ли је важећи у хасх табели, видите као хеш табеле. Онда дрвеће. Ово је дрво. Дрвеће у рачунарству су наглавачке из неког разлога. Дакле, овде имате корен стабла, а затим лишће. Ви само треба да знате номенклатуру за родитеље и дете. Сваки чвор има своју децу, који су чворови који су испод родитеља. Тако, на пример, 2 ће бити родитељ за 3 и за друге дете тамо, док 3 ће бити родитељ за 1 и остала деца која су тамо. Анд 1 ће бити 3 дијете, и тако даље. Ми имамо нешто много занимљивије, назван бинарни претраживање дрво, у којој све вредности на десно од чвора ће бити на десној страни, овде - на десно, ће бити већи од елемента у корену. Дакле, ако имам број 5 овде, сви елементи на десној ће бити већи од 5, а на левој сви елементи ће бити мања од 5. Зашто је ово корисно? Па, ако желим да проверим да ли је број 7 је овде, на пример, Само идите на 5. прво и ја идем да видим, јесте 7 већи или мањи од 5? То је већа, тако да знам да ће то морати да буде на десно од дрвета. Дакле, имам много мање ствари да погледате. У имплементацију бинарног стабла претраге, чвора, само ћу морати да имају податке, па инт н; такође би могао да има ниску или било шта сте хтели. Потребно је само да буду опрезни на дефинисање шта је веће, шта је мање. Дакле, ако сте имали ниске, на пример, можете да дефинишете да су све те ствари на право ће имати већу дужину, лево ће имати ниже дужине, тако да је све на вама. Како могу имплементирати наћи за БСТ? Прва ствар коју ћете морати да урадите је да проверите да ли је корен НУЛЛ. Ако је НУЛЛ, то значи да ствар није тамо јер ви не морате чак ни дрво, зар не? Тако сам ретурн фалсе. Иначе, ја ћу да проверим да ли је број већи од вредности у корену. Ја ћу покушати да пронађе елемент на десној од дрвета. Ви видите да ја користим рекурзија овде. А онда, ако је то мање, ја ћу да погледате лево. И коначно, у супротном, ако је не мање или веће не, то значи да је сама вредност. Тако да сам само вратити истина. Овде можете видети да сам користио, ако, ако, ако. И запамтите, у квизу 0, имали смо проблем који је имао, ако, ако, ако, и да је требало да пронађе неефикасност, и неефикасност је била да ако сте користили. Требало је да се користи ако је, иначе, ако, ако друго, и друго. Дакле, требало би да користите ако још и још ако и други овде? Да ли ико - да? [Студентски говорећи, нечујан] То је савршено. Дакле, она каже да то није важно, само зато неефикасност да смо имали раније био је то зато што, можда, ако је задовољен услов неке, тако да су извршили акцију, али онда ћете да проверите све друге услове. Али у овом случају, она се вратила одмах, тако да није битно. Дакле, не морате да користите иф. И на крају, хајде да разговарамо о томе покушаја, који је свачији омиљени. Покушај је дрво од низова. То је веома брзо да се угледају вредности, али користи много меморије. И то је обично за филтрирање речи, тако да када желе да спроведу, на пример, ја не знам, као именику у телефону и желите да будете у стању да тип Б и само имена људи који имају Б. То је врло лако да се спроведе да користите пробати, на пример. Како дефинисати чвор у покушају? Потребно је само да имате боол која ће да буде ис_ворд. То представља да користите све карактере пре тог чвора, сте били у могућности да формирају реч, и онда ћете имати низ показивача на чворова. Да ли видите да имамо низ матичних чворова, тако чвор * низ? Да? Дакле, хајде да видимо како да ће радити. За проверу правописа, имамо низ од 27 елемената, јер имамо сва слова плус апостроф. Пре него овде ћу само да користи 2 јер желим да будем у стању да пише на табли. Ок. Дакле, ово је пример покушаја. Ако сам само дефинисати први чвор, ја ћу имати низ елемената 2 да су 2 показивачи на НУЛЛ, па сам само ставио 'А' и 'Б'. И ја ћу имати боол који каже ис_ворд. То ће бити лажан за прве, само зато, пре него што ви немате никакве знакове. Дакле, празна реч није реч. Дакле, то је лажна. Ако желим да додам 'А' на овом речнику, шта би ја треба да урадим? Само би да маллоц нови чвор за "А", а затим додати своју реч истина. Тако да само представља да пошто '' ће да буде истина. Смисла? Онда ако желите да додате 'ба', ја ћу морати да маллоц 1 за 'Б', а онда ћу поставити боолеан на фалсе, јер 'Б' по себи није реч. Онда ћу да маллоц још један за 'А', 'ба' тако, а онда ћу поставити је реч истина. Јер 'ба' је реч. А онда, ако хоћу да видим да ли 'Б' је у овом речнику, Ја само могу да одем на првом, 'Б'. Ја идем доле, и гледам је реч, а она каже лажна. Дакле, то није реч. Ако желим да проверим 'ба', Идем у првом, 'Б', а затим идите на 'а', а ја видим тачно, тако да је реч. Смисла? Много људи се збуни покушаја. Не? Коначно, Хуффман кодирање. Хуффман кодирање је веома користан да сачувате меморију и компресује текстуалне датотеке, само зато што много пута користите 'А' и 'е', на пример, у својим документима, али ја не знам да ли ви користите 'к' или 'З' колико. Имајући само 1 бајт за сваки карактер, сваки - у 256 карактера које имамо у АСЦИИ табели није баш оптимално, само зато што постоје неки знакови које користите много више, па вероватно би требало користити мање меморије за оне. Како да користим Хуффман кодирање? Морамо да урадимо Хуффман дрво.  Хуффман дрво има чворове да имају симбол који ће да буде као, '', 'б', 'ц', писма, шта год имате писмо, фреквенција која је фреквенција која се појављује реч у тексту, да ли су креирање Хуффман дрво за, а онда чвор који ће указати на лево од Хуффман дрвета и још један чвор који ће да укаже на десно. Дакле, баш као дрво. Како изградити Хуффман дрво? Идеш да покупите 2 чворови који имају најниже фреквенције. Ако имате кравату идете да изаберете 2 чворова који имају најниже вредности, као и АСЦИИ. Онда ћеш да креирате нову стабло од оних 2 чворова који ће имати комбиноване фреквенцију у родитељ чвора. И онда ћеш да уклоните 2 деце из шуме и замените их са родитељем. И ти ћеш да поновим да све док имате само 1 дрво у шуми. Дакле, хајде да видимо како би урадио Хуффман дрво за ЗАМИЛА. Овде можете видети да сва слова имају фреквенцију 1, осим за 'А'; који има фреквенцију 2. Тако сам створио чворове за све словима сам ставили у поретку АСЦИИ вредности и фреквенције. Дакле, ако желим да створе прву јелку, то ће бити са 'Л' и 'М'. Дакле, то је овде. Учесталост пара ће бити 2 јер је 1 + 1, онда следећи 2 са најнижим фреквенцијама су 'Д' и 'З'. И онда ја имам све од њих је - има фреквенцију 2. Дакле, оне које су оне које имају најнижи АСЦИИ вредност за следећи? 'А' и 'Л'. Тако сам створити нови чвор, и коначно, то је 4 и 2, па 2 ће бити на левој страни. А ово је Хуффман дрво. Онда ако желим да пишем неки текст, као у бинарни да конвертујете у текст, користећи Хуффман дрво је веома лако. На пример, ако кажем да се креће на лево је 0 и креће са десне стране је 1, Шта ће то представљати? Дакле као 1, 1, па десно, десно, и затим 0, па лево би Л, а затим 1, 0, 0. Дакле 1, 0, тако да само 1, 0, ''. А онда 0, 1, па 'З'. А онда 1, 0, 0 - не. 0, 0 ће бити 'Д', тако Лази. Дакле, то је све за мене, Роб ће да преузме. [Роб Боуден] Дакле, недеља 7 ствари. Имамо много тога да пређемо стварно брзо. Битвисе оператери, буффер оверфлов, ЦС50 библиотека, затим ХТМЛ, ХТТП, ЦСС. Све у као 15 до 20 минута. Битвисе оператори. Постоји 6 од њих да вам је потребно да знате. Над битовима и, над битовима или, КСОР, лево смена, смена десно, и не. Право помера и не ви једва видела у предавању уопште. Ми ћемо ићи преко тога брзо овде, али добро је знати да су 6. који постоје. Запамтите да над битовима оператери су као кад радите 3 + 4. Нисте се баве бинарног од 3 и 4. Са над битовима оператера ви заправо баве појединачним битова бројева 3 и 4. Дакле, први који ћемо рећи је над битовима не, и све то ради је окренете све битове. Дакле овде, ако пишете ово у Ц, не би га написати као ~ 11011 или било шта друго, ти би написао то бих ~ 4, а онда би флип бинарни заступљеност 4. Дакле овде, ~ неког бинарног броја 1101101 ће тачно окренете све 1 на 0 и да све је 0 до 1 је. Као што сам тамо рекао, честа употреба овог, и ми ћемо га видети у мало, је као желимо да се са неким бројем где су сви бита су 1, осим једног од њих. Дакле, то је обично лакше да изразе број где је само да један бит постављен, и онда се ~ о томе, па сваки други бит је постављен осим оног. Дакле, то је оно што ћемо користити више у мало. Битвисе или. Овде су 2 бинарних бројева, и ови бројеви 2 су прилично представник, пошто они представљају све могуће комбинација битова можете да треба да раде на. Ево, кад сам ор'д сваки бит, ми ћемо само да упоредите право доле. Дакле, на левој страни имамо 1 и 1. Када сам над битовима | оне, шта ћу ја добити? Један. Затим над битовима | 0 и 1 ће ми дати? Један. Над битовима 1 и 0 ће бити иста ствар, један. Над битовима 0 | 0 ће ми дати 0.. Дакле, једини случај где добијам 0 је у 0 | 0 случај. И можете мислити да баш као ваше логичке ОРС. Дакле, ако мислите да од 1. као истинског и 0 као лажна, иста ствар важи овде. Дакле, истина или истина је истина, тачно или нетачно је истина. Лажни или истина је истина, лажна или лажно је једина ствар која је уствари лажна. Ево примера који треба да знате као прилично добар пример када се користе оператори над битовима. Ево ако ми или капитал "'с Ок20, а ми ћемо погледати на ове у секунди, добијамо нешто. И ако ми или мала слова '' са Ок20, добијамо нешто. Па хајде да подигне АСЦИИ табелу. Ок. Овде видимо да је 'А' - Овде имамо '' је децимално 65. Али ја ћу ићи са хексадецимални, што је Ок41. Прилично сигурни смо га видели у класи. Мислим да смо га видели у класи да је прилично лако да га претвори у хексадецимални у бинарни. Дакле овде, ако хоћу да ставим 4 у бинарни, то је само ће бити 0100. Ово је место за 1, 2 је место, а место 4, па ово је 4. Онда могу поделити 1 у бинарни, који ће бити 0001. И тако ово ће бити представљање 'А' у бинарни. Узимајући мала слова '', то је сада ће бити Ок61, где, поделе ови горе у свом бинарном, па 6 - Хајде да заправо то уради - да нема гумица? Ерасер. Ок61. Дакле, поделите 6 у бинарни ће бити 0 + 4 + 2 + 0. И цепање 1 ће бити 0001. Посматрајући разлике између ових 2, видимо да је једина разлика између малих и великим 'А' је ово један бит. Дакле, враћа се овамо - у реду. Враћајући се овде, ако погледамо шта је мало Ок20, па цепање Ок20 у свом бинарном, је 0010, 0000. Ок20, само мало да се постављена је то мало да се бавимо, са пребацивање између капитала и мала слова 'А'. Ако сам или 'А', који је ова, 'А', ако ја или '' са Ок20, шта ћу ја добити? [Студентски, неразумљиво] мала слова 'а', јер то ће окренете ово мало до 1.. А ако ја или '' са Ок20, шта ћу ја добити? Малим словима, јер само оринг '' са Ок20, Само ћу да се оринг ову једну мало на 1, то је већ 1, тако да није битно. Тако смо добили 'А' и 'А'. Битвисе и. Опет, можемо мислити о овоме као логичан и наше колеге. На левој страни имамо тачно и истинито. То ће бити истина, а за све случајеве, фалсе & тачно или истинито и лажно, или лажно и нетачно, ниједна од тих ствари су истините. Дакле, оно што смо до краја добијање је 1000. Тако сада, овде, ево где сам користио верни битвисе не, где смо имали Ок20. Дакле, ово је Ок20. Сада оно што ја желим да урадим, над битовима ~ на Ок20. То ће да окренете све битове. Па ја имам 1101, 1111. И тако '' андед са ~ Ок20 ће ми дати шта? Само мало ми стварно треба да размислите о је ово један, јер, ако сви ови битови су постављени на 1, онда ћемо добити тачно оно '' је, осим, ​​можда, шта је ово мало је. Јер ако је 1, сада ће то бити постављена на 0, јер шта год да је ово, уз андед ово ће бити 0. Дакле, оно што је "'& ~ Ок20 ће ми дати? [Студенти одговорите, неразумљиво] А шта је '' и - то је "'. А шта је "'& ~ Ок20 ће ми дати? 'А' Јер ово је тренутно 1. Андинг са овим 0 ће да буде 0, а сада ћемо добити 'А'. Оба су ',' и на крају, али не најмање од овог типа, имамо КСОР. То је веома слично, или, осим то искључиво значи или. То је као оно што обично сматрамо или у стварном свету. Дакле, радите или 'к' или 'г', али не обоје. Ево 1 ^ 1 ће бити 0. Јер истина, то је - то не ради, као и са логичан истинито и лажно као и над битовима и или уради, али истинито ^ истина је лаж. Зато што само желимо да се врати труе ако само један од њих је истина. Дакле, 1 ^ 1 је 0. Шта је 0 ^ 1? Је 1. 1 ^ 0 је 1, 0 ^ 0 је 0. Дакле, под свим околностима, 0 0 над битовима нешто ће бити 0. 1 над битовима нешто 0 или 0 битовима 1, ако је то | или ^, то ће бити 1, а ако је и то ће бити 0. И једини случај где 1 битовима 1 није 1 је са ексклузивно или. То је 0110. Дакле овде сада, користећи КСОР - па смо вратили на 20 си. '' ^ Ок20 је ова 2 бита смо упоређивање. Дакле, 1 ^ 0 ће ми дати шта? Један. '' ^ Ок20 ће ми дати? Мала слова. '' ^ Ок20 ће ми дати? Капитал А. Јер шта год ово ради, ово КСОРинг са Ок20 ефективно превртања год ово мало је. Ако је ово 0, то је сада ће постати 1. Пошто је ово 1, 1 ^ 1 је 0. Дакле, наш '' постао '', а наш '' постао '". Дакле КСОР је заиста згодан начин управо случај превртања. Ви само желите да вршите итерацију кроз низ писама и наизменично случај сваког карактера, само КСОР све са Ок20. Сада нам је остало смену. Леви смена је само да, у основи, гурните све бројеве у, или на лево, и убаците 0 стоји иза њих. Дакле, овде имамо 00001101. Идемо да гура 3 0 а са десне стране, и добијамо 01101000. У нонбинари смислу, видимо да је то заиста бави 13 леве помера са 3, што нам даје 104. Дакле лево померања, ми овде видимо, к << и је у основи к * 2 ^ г. 13 * 2 ^ 3, 2 ^ 3 је 8, тако 13 * 8 је 104. Ако само мислите о бинарном уопште, како је свака цифра, ако почнемо са десне стране, то је 1 је место, онда је 2 је место, онда је 4 је место. Дакле, гурајући их у 0 са десне стране, ми смо само гура ствари које су биле у 4 је место на 8 месту је, и ствари које су биле у 8 је место на 16. месту је. Сваки помак само множи са 2. Да? [Студентски] Шта се дешава ако померио за 5? [Боуден] Ако померен је за 5 само би изгубити цифара. Неизбежно, то је иста ствар. Као, цели бројеви су само 32 бита, па ако додати 2 заиста велике бројеве, то једноставно не уклапа у цео број. Дакле, то је иста ствар овде. Ако померио за 5, ми само да изгубе тај један. И то је некако оно мислим тако "грубо" где ако смени предалеко, губите бита. Право смена ће бити супротно, где ћемо гурати 0 је ван крају, и за наше потребе, попуните 0-их са леве стране. Дакле овај начин, ми у суштини уназад оно што смо већ урадили. И видимо да су три 0 је на десној тек отпале, а ми смо гурнути у 1101 све до десне стране. Ово се ради 104 3, који је, практично, к / 2 ^ г. Тако сада, овде, то је слична идеја. Зашто је само грубо х / 2 ^ г, а не заправо х / 2 ^ г? Јер ако сам померио за 4, ја бих изгубио 1. У суштини, шта мислиш о, само мислим целобројног поделе у целини. Дакле, као 5/2 је 2. То није 2.5. То је иста идеја овде. Када смо поделили са 2, можемо изгубити разне битове успут. Дакле, сада - то је то за битвисе. То је све што треба да знате. Запамтите употребе случајеве које смо видели у класи, као мало маска је корисна за битвисе оператере, или их користити за битне маске. Капитални слова и мала слова, конверзија је прилично прототип пример. Ок, па буффер оверфлов напада. Свако се шта није у реду са овом функцијом? Приметићете да прогласила низ од 12 бајтова, 12 знакова, а онда смо копирали у нашој бафер од 12 карактера цео низ шанк. Дакле, шта је овде проблем? Магични број 12 би прилично одмах искочи као - зашто 12? Шта ако се деси да бар буде више од 12 знакова? Шта ако бар милиони знакова? Овде је питање мемцпи. Ако бар довољно дуго, то ће само потпуно - 'Ц', 'ц' не мари да је само 12 карактера; 'Ц' не мари да то не може да стане да много бајтова. То ће само потпуно замени цхар, 12 бајта смо издвојена за њега, и све поред ње у меморији који заправо не припада тој бафер са било бар стринг. Дакле, ово је слика смо видели у класи где ми имамо стек одрастања. Требало би да се користи за ове слике или се упознате са њима поново. Ми смо наш стек расте нагоре, меморијске адресе почети на 0 на врху и расте до волели 4 милијарде на дну. Ми имамо низа 'Ц' негде у меморији, онда имамо показивач на бар десно испод њега, а онда имамо ову сачувану фраме поинтер у нашој повратну адресу и стек Наша матична рутину екипе. Запамтите шта повратак адреса је? То је када главни позива функцију фоо, позива функцију бар, неизбежно, бар повратак. Дакле, када се враћа бар, они треба да знају да то иде назад у ФОО да га зове. Дакле, повратак адреса је адреса функције које она има да се врате када функција враћа. Разлог је то важно за буффер оверфлов напада је зато, повољно, хакери желели да промените ту повратну адресу. Уместо да се вратимо на ФОО, ја ћу да се вратим на где год хакер жели да се вратим у. А, згодно, где хакер често жели да се врати у је почетак бафера које смо првобитно имали. Дакле приметити, опет, Литтле Индиан. Апарат је пример мало индијског система, па цео број или показивач се складишти са обрнутим бајтова. Дакле, овде видимо - је ово? Да. Ми видимо Ок80, ОкЦ0, Ок35, ОкО8. Запамтите хексадецималне цифре? Ми не преокрене хексадецималне цифре у Литтле Индиан, јер 2 хексадецималне цифре чине једну бајт, а ми преокрене бајтова. Зато ми не складишти, као, 80530ЦО8. Ми складиштење, уместо тога, сваки пар 2 цифре, почев од десне стране. Та адреса се односи на адресу почетка наше бафера које смо заправо желели да копирате у на првом месту. Разлог је то корисно, јер је, шта ако нападач десило, уместо низ који је управо безопасан низ као, њихово име или нешто, шта ако, уместо тога, да струна само су неки произвољног кода да радили шта су хтели то да ураде? Тако су могли - не могу да мислим ни једног кул кода. То може бити било шта, мада. Било катастрофалан код. Ако су хтели, они само могу да ураде нешто у сегментима грешака, али то би било бесмислено. Обично су то урадити на пијук ваш систем. Реду. ЦС50 библиотека. То је, у основи, Затамњена, гетСтринг, све те функције обезбедили смо за вас. Дакле, имамо цхар * стринг, а то је да смо далеко апстракција експлодирао у неком тренутку током семестра. Запамтите да је низ само низ знакова. Дакле, овде видимо скраћену верзију гетСтринг. Требало би погледати уназад на томе да се сетим како се то заправо спроводи. Кључни детаљи су, приметили смо да у једном карактеру у време од стандарда у, који је баш као ми куцате на тастатури. Дакле, један лик у исто време, а ако добијемо превише ликова, тако да ако је н + 1 је већи од капацитета, онда морамо да се повећа капацитет нашег бафера. Дакле, овде смо удвостручује нашег бафера. И то се наставља, а ми убацили карактер у нашем бафер док не прими нову линију или крај фајла или шта год, у ком случају, завршили смо са стринг и онда реалном гетСтринг смањује меморију, као да смо издвојено превише меморије то ће ићи назад и психијатар мало. Дакле, ми не показују да, али главна идеја је она мора да се чита у једном карактера у исто време. То не може само читати у целој ствари одједном, јер њихов пуфер је само одређене величине. Дакле, ако је стринг који покушава да убаци у бафер је превелик, онда би преливања. Дакле, овде смо спречили да тако само читање у једном карактеру у време и расте кад год нам је потребно да. Тако Тонирана и остале библиотечке функције ЦС50 имају тенденцију да користе гетСтринг у њиховим имплементацијама. Тако сам истакао важне ствари овде. Он позива да се гетСтринг стринг. Ако гетСтринг није успео да се врати сећање, запамтите да гетСтринг маллоцс нешто, па кад год зовете гетСтринг Ви не треба да (неразумљиво) ослободили тај стринг који сте добили. Дакле овде, ако она није успела да маллоц нешто, ми смо се вратили ИНТ_МАКС само као застава која, хеј, нисмо били у могућности да добију заправо цео број. Треба игнорисати све што се вратим вама, или Ви не треба да третира ово као валидан улаз. Најзад, под претпоставком да сте успели, ми користимо ссцанф са том посебном заставом, што значи, први меч целое, онда дала ниједан знак после тог цео број. Дакле, приметите желимо да једнако 1. Дакле ссцанф враћа колико мечева ако успешно направљен? Она ће се вратити ако се успешно 1. упарен цео број, она ће се вратити 0 ако није подудара са цео број, и она ће се вратити 2 ако је упарен цео број затим неки карактер. Дакле, ми смо приметили да смо поново покушали поклапају све осим 1.. Дакле, ако смо ушли 1, 2, 3, Ц, или 1, 2, 3, Кс, онда 1, 2, 3 би се чувају у цео број, Кс би се складишти у карактеру, ссцанф би се вратили 2, а ми бисмо покушали поново, јер ми само желимо цео број. Брзо дува кроз ХТМЛ, ХТТП, ЦСС. ХиперТект Маркуп Лангуаге је структура и семантика на Интернету. Ево примера из предавања где имамо ХТМЛ тагове. Имамо главу ознаке, ознаке тела, имамо примере празних тагова где смо заправо немају почетак и блиске ознаку, имамо само линк и слику. Нема затварања слика таг, постоји само један тег који остварује све што треба да урадите ознака. Линк је пример, да видимо како ти линк на ЦСС, скрипта је пример како се повежете са спољним ЈаваСцрипт. То је прилично једноставан, и запамтите, ХТМЛ није програмски језик. Ево, запамтите како би дефинисали образац или бар шта би то урадио? Такав облик има акцију и метод. Методе ћете икада видети само су ГЕТ и ПОСТ. Дакле, ГЕТ је верзија где ствар добија ставити у УРЛ. ПОСТ је где се не стави у УРЛ. Уместо тога, сви подаци из форме се убацује више сакривен у ХТТП захтеву. Дакле овде, акција дефинише где ХТТП захтев иде. Где ће је гоогле.цом / претраживање. Метод. Запамтите разлике између добити и ПОСТ, и, само реци као пример, ако желите да сачувате нешто. Ви никада неће бити у стању да обележите један ПОСТ УРЛ јер подаци нису укључени у УРЛ. ХТТП, сада, је ХиперТект Трансфер Протоцол. ХиперТект Трансфер Протоцол, можете очекивати да се пренесе ХиперТект Маркуп Лангуаге, и то ради. Али такође преноси никакве слике можете пронаћи на Веб, било које направите преузимања покренете као ХТТП захтев. Дакле, ХТТП је само језик Ворлд Виде Веб. И овде треба да препознају ову врсту ХТТП захтева. Овде ХТТП/1.1 на страни само каже да је то верзија протокола ја користим. То је прилично увек ће бити ХТТП/1.1, као што ћете видети. Онда видимо да је ово била ГЕТ, ПОСТ алтернатива је, да би сте видели. А УРЛ који сам покушавао да посетите било ввв.гоогле.цом/сеарцх?к = бла, бла, бла. Дакле, запамтите да је ово, знак питања к = бла бла бла, је врста ствари која се подноси на обрасцу. Одговор можда вратити мени би изгледао отприлике овако. Опет, почевши са протоколом, који ће бити тако, следи кодом статуса. Ево то је у реду 200. И на крају, веб страна да сам заправо тражила ће бити праћено. Могуће код Статус можете да видите, а требало би да знате неколико њих. 200 Ок вероватно сте видели раније. 403 Форбидден, 404 Нот Фоунд, 500 Интернал Сервер Еррор Обично ако идете на сајт и нешто је поломљен или њихови ПХП код пада, док је у апарату имамо тако велика наранџаста кутија да дође и каже, као, нешто није у реду, то код не ради или ова функција је лоше. Обично сајтова не желим да знају шта су заправо лоше функционише, па уместо тога они само ћу вам дати 500 Интернал Сервер грешке. ТЦП / ИП је 1 слој под ХТТП. Запамтите да је интернет ван Ворлд Виде Веб. Као ако играте онлине игре која не иде кроз ХТТП, то ће кроз другачији - то је и даље користи Интернет, али не користи ХТТП. ХТТП је само један пример од протокола изграђен на ТЦП / ИП. ИП дословно значи интернет протокол. Сваки рачунар има ИП адресу, они су ти 4-цифра ствари као 192.168.2.1, или шта год, да има тенденцију да буде један локални. Али то је образац ИП адресу. Дакле ДНС, Домаин Наме Сервице, то је оно што се преводи ствари као гоогле.цом на стварну ИП адресу. Дакле, ако откуцате ИП адресу у УРЛ, да би вас довести до Гоогле, али сте склони да се не сећам те ствари. Ви имају тенденцију да уместо тога сетим гоогле.цом. Последња ствар коју имамо је лука, где је овај део ТЦП ИП. ТЦП ради више. Размислите о, као, ви имате свој Веб бровсер. Можда имате неку е-маил апликација; мозда имате неки други програм који користи Интернет ради. Сви они треба да имају приступ Интернету, али рачунар има само 1 ВиФи картицу или шта већ. Дакле, портови су начин на који смо у стању да раздвојимо како ове апликације су у стању да користе Интернет. Свака апликација добија 1 специфичан порт који може да слуша о, и по дефаулту, ХТТП користи порт 80. Неке услуге е-поште користе 25. Оне су ниске-нумерисани имају тенденцију да буду резервисана. Ти су обично у стању да добију виши нумерисане оне за себе. ЦСС, Цасцадинг Стиле Схеетс. Ми стил веб странице са ЦСС, не са ХТМЛ. Постоје 3 места можете ставити ваш ЦСС. То може бити линијски, између стила тагова, или у потпуно посебној датотеци, а затим повезује унутра И овде је само пример ЦСС. Требало би да препознају овај образац, где први пример ми одговара тело ознаку, и овде смо центрирање тело ознаку. Други пример, ми одговара ствар са ИД подножје, а ми смо применом неке стилове за то. Обратите пажњу да ИД подножја-поравнава на леву, док тело текст поравнава-центар. Подножје је унутар тела. То ће, уместо тога, текст-алигн лево, иако тело каже тект-алигн центар. То је цела каскадни део ње. Можете да имате - можете да одредите стилове за тело, а онда ствари у организму можете да наведете више специфичне стилове, и ствари раде као што сте очекивали. Ближе ЦСС спецификатори имати предност. Мислим да је то. [Алија Нахм] Здраво свима. Ако бих само могао добити вашу пажњу. Ја сам Алија и ја ћу ићи кроз ПХП и СКЛ стварно брзо. Дакле, можемо да почнемо. ПХП је скраћеница за ПХП: Хипертект Препроцессор. И као што сви треба да знате, то је на страни сервера језик за скриптовање, и ми га користимо за леђа крај сајтова, и како то чини много на прорачунима, у делу иза сцене. Синтакса. То није као Ц, Изненађење, изненађење. Увек мора да почне са, ако можете да видите, - не могу напредовати. Можете видети морате нове врсте протеза, а онда такође треба пхп?. То је увек како морате да смести своју ПХП текст, свој ПХП код. Дакле, то не може бити само као Ц, где си некако га ставити на прво. Потребно је да увек окружују. А сада, главни синтакса је да све променљиве треба да почне са $ карактера. Потребно је да то урадите када сте их дефинише, потребно је да то урадите када мислите да би им касније. Увек треба да је $. То је ваш нови најбољи пријатељ, прилично. Не - за разлику од Ц, не треба да се стави какав променљиве типа је. Дакле, док ти треба $, ви не треба да се стави, као, инт или ниска лет, и тако даље, и тако даље. Тако мала разлика. Као резултат тога, то значи да ПХП је слабо типа. ПХП је слабо врста језика, а то је слабо откуца променљиве. Другим речима, то значи да можете да се пребацујете између различитих типова променљивих. Можете да чувате број 1 као инт, можете га чувате као стринг, а можете да га сачувате као пловка, и то ће бити све што број 1. Иако сте га складиштење у различитим облицима, то је још увек - варијабилни типови и даље држе у крају. Дакле, ако погледате овде, ако се сећате из псет 7, многи од вас вероватно имали проблема са овим. Две равноправне знаци, 3, 4 једнаке знаци једнаких знакова. Ок, нема 4 једнаке знаци, али постоје 2 и 3. Можете користити 2 једнаке знаци да проверите вредности. То можете да проверите преко типова. Дакле, ако можете да видите на првом примеру, Имам нум_инт == нум_стринг. Дакле, ваш ИНТ и ваш гудачки су обоје, технички, 1, али они су различите врсте. Али за двоструке једнакима, ипак ће проћи. Међутим, за трипле једнакима, она проверава вредност, као и различите врсте. То значи да неће проћи у том другом случају овде, где сте коришћењем 3 једнаке знакове уместо. Дакле, то је велика разлика да би требало сви да сада показала. Стринг спајање је још једна моћна ствар коју можете користити у ПХП. То је у основи само ово згодна тачка нотација, а то је како можете везати жице заједно. Дакле, ако имате мачку и пса имате, а желите да ставите 2 жице заједно, можете користити период, и то је некако како то ради. Такође можете да их само ставите један поред другог, као што можете видети овде у доњем примеру, где сам ехо низ 1, 2 простор стринг. ПХП ће знати да их замени, као што су. Низови. Сада, у ПХП-у, постоје 2 различите врсте низова. Можете да имате редовне низове, а такође можете имати асоцијативне низове, и да ћемо проћи кроз њих сада. Редовни низови су управо то у Ц, и тако имате индекса које су нумерисане. Сада ми само идемо да створи једну и ставио - па ово је како створити празан низ, онда ћемо стави у броју индекса 0.. Идемо да стави број 6, вредност 6. Можете га видети на дну овде. Вхере'с - у индексним бројем 1 ми ћемо ставити вредности број 4, и тако да можете видети има 6, ту је 4, а онда као да смо штампање ствари, када покушамо и штампање вредности ускладиштене у индексним бројем 0, онда ћемо видети вредност 6 буде одштампан. Цоол? Дакле, то је редовни низови за тебе. Други начин можете да додате ствари на редовним низове сада је само да их додате на крају. То значи да не морате да одредите посебан индекс. Можете видети број, а затим у угластим заградама нема индекс наведено. И она ће знати - ПХП ће знати да га само додати на крај листе, следећег слободног места. Тако можете видети 1. право тамо на том месту 0, 2 отишао тамо на првом месту. 3 иде - додао је тамо као добро. Дакле, та врста има смисла. Ти само стално га додао, и онда кад ми одзвања индекс броја 1, она ће одштампати вредност 2. Онда имамо низове који су асоцијативни низови. Асоцијативни низови, уместо нумеричке индексе, оно што они раде јесте, они имају индексе који су од ниске. Можете видети, уместо - Решио сам свих тих бројева индекса, и сада је кеи1, кеи2, кеи3, а они су у наводницима да значи да су сви стрингови. Дакле, можемо да имамо пример ово. Пример за то је да имамо ТФ, а то је индекс име. Идемо на пут "Алија" као име, у индексу, калорија једе, можемо ставити инт овај пут уместо стринга, а затим на индексних воли, можемо ставити цео низ у њему. Дакле, ово је врста - то је сличан концепт како смо имали Индекси са бројевима, али сада можемо да променимо индекса око да их имају као стрингове уместо. Такође можете да урадите, осим само то раде појединачно, можете да урадите све у једном комаду. Дакле, можете видети да је тф тог низа, а онда смо их све поставили у једном џиновском угласте заграде сету. Тако да може да убрза ствари. То је више од стилског избора него не. Такође имамо петље. У Ц имамо петље да раде овако. Имали смо низ, а ми смо ишли од индекса 0 до краја листе, и ми га све одштампате, зар не? Осим проблем је, за асоцијативних низова, не нужно знам те нумеричке индексе јер сада имамо индексе стринг. Сада користимо фореацх петље, која, опет, ви надам се користе у псет 7. Фореацх петље ће само знати сваки део листе. И то не мора да зна тачно бројчану индекс који имате. Дакле, имате фореацх синтаксу, тако да је Еогеасп, ставите низ. Дакле, мој низ се зове псет, а онда као, реч као, а онда сте ставили ову локалну привремену променљиву да идете да користите само за специфичну ствар која ће да се одржи специфична - једна инстанца или један део низа. Псет цилиндра ће одржати 1., а онда можда ће држати број 6, а онда ће држати број 2. Али то је гарантовано да прође кроз сваки вредности која је у низу. Корисне функције које треба да знате у ПХП су потребна, тако да осигурава да сте, укључујући одређене датотеке, ехо, излаз, празан. Топло препоручујем погледате псет 7. и погледате те функције. Можда ћете морати да знају они, па ја бих дефинитивно знам шта, тачно, они су сви радили. А сада ћемо да идемо кроз обим стварно брзо. У оквиру, ПХП је некако фанки ствари, за разлику од Ц, и тако ћемо само да брзо прође кроз њега. Па рецимо да почне у том стрелицом да смо тамо имали. И ми ћемо почети са $ ја. Дакле променљива 'ја' ће бити 0, а ми ћемо само да га штампа у тој великој белој кутији тамо. Ми ћемо почети са И0, а онда ћемо да га ехо. Дакле, ту је 0. А онда ћемо да га повећате до петље за, а онда ће то бити вредност 1. Један је мање од 3, па то ће да прође кроз то за петљу, а онда ћемо да видимо то поново штампају. Идемо да га повећате опет на 2, и 2 је мањи од 3, тако да ће проћи за петљу, и то ће одштампати 2. Тада ћете приметити да 3 није мања од 3, па ћемо разбити од петље за. Дакле, сада смо изашли, а онда ћемо да идемо у аФунцтион. Ок. Дакле, морате имати на уму да је ова варијабла које смо створили, 'ја' променљива, није локално сцопед. То значи да није локалног до петље, и да променљива још увек можете да приступите и промените касније, а то ће и даље бити на снази. Дакле, ако идете у функцији сада, ви ћете видети да смо и користимо 'ја' променљиву, и ми ћемо да повећате 'ја' +. Помислили бисте, на први поглед, на основу Ц, да је то копија 'ја' променљиве. То је потпуно другачији ствар, која је исправна. Дакле, када смо га одштампате, идемо да одштампате 'ја' +, који ће одштампати да 4, а онда ћемо се - извини. Онда ћемо завршити ван те функције, и ми ћемо бити тамо где је сада тај стрелица. То значи да је тада, међутим, иако функција променила вредност 'ја', не промени ван функције, јер функција има посебан обим. То значи да када ецхо 'и', то није променило у оквиру функције, па онда ћемо поново да штампате 3. Различите ствари о обиму у ПХП него у Ц Сада у ПХП и ХТМЛ. ПХП се користи за веб странице динамичан. Она врста чини ствари другачије. Ве хаве то разликује од ХТМЛ. Са ХТМЛ, ми смо увек само имају исти статички ствар, као што је показала како Роб, док ПХП, можете да промените ствари на основу ко је корисник. Дакле, ако ја имам ово, ја сам, "Пријављени сте као -" а онда име, и ја могу да променим име. Дакле, сада је име Јосиф, и она има "о мени", али онда сам такође могу да променим име да има Томија. И то би била друга ствар. Дакле, онда можемо променити различите ствари о њему, и то ће показати различит садржај на основу имена. Дакле, ПХП се некако промени шта се дешава у вашем веб сајту. Исто овде. Ипак, имајте на уму да они имају другачији садржај, иако сте технички и даље приступају ту исту веб страницу на површини. Генерисање ХТМЛ. Постоје 2 начина које можете да урадите ово. Дакле, идемо кроз то право сада. Први начин је, да имате - да, извини. Дакле, потребно је само да ваш редовни за петљи у ПХП, а онда ехо у ПХП и ви ецхо напоље ХТМЛ. Коришћење шта Роб вам показао ХТМЛ скрипте а затим помоћу пхп принт да га само одштампате на веб страници. Алтернативни начин је да се то уради као да издвоје за ПХП и ХТМЛ. Дакле, можете имати линију која почиње ПХП за петље, онда можете имати линију ХТМЛ у посебној ствари, а онда завршити петљу, опет, са ПХП. Дакле, то је некако то одвајање. Са леве стране, можете да имате све - то је само 1 комад ПХП. Са десне стране можете видети да имате линију ПХП, имате линију ХТМЛ, а ви опет имате линију ПХП. Тако да је одвајање од у оно што раде. И ви ћете приметити да на било који начин, за било који од њих, они и даље штампају слике, слика, слика, тако да и даље ХТМЛ је одштампан на исти начин. И онда и даље ћете видети 3 слике појавити на вашем сајту. Дакле, то је 2 различита начина да се то уради исту ствар. Сада имамо облике и захтеве. Као Роб вам показао, постоје облици ХТМЛ, а ми ћемо само ветар кроз ово. Имате акцију и имате метод, и ваша акција некако сте где идете да га пошаљете показује, а метод је да ли то ће бити ГЕТ или ПОСТ. И ГЕТ захтев, као Роб је рекао, значи да идете да га ставите у форми и ви ћете га видети као УРЛ, док захтев ПОШТА нећете видети у УРЛ. Тако мала разлика. Међутим, једна ствар која је слична ствар је да ПОСТ и ГЕТ-подједнако несигурни. Дакле, можда мислите да само зато што не могу да виде у УРЛ, то значи ПОСТ је сигурнији, али још увек можете видети у вашим колачићима у информације које шаљете. Дакле, не мислим да је око један или други. Још једна ствар коју треба напоменути је да имате и одељак променљиве. Ви се користи ово у псет 7 да бисте добили информације кориснички ИД. Шта се десило је да можете да користите овај асоцијативни низ, $ _СЕССИОН, а онда сте у стању да приступите различите ствари и чувате различите ствари преко странице. Последња ствар је да имамо СКЛ, Струцтуред Куери Лангуаге, а то је програмски језик за управљање базама података. Шта је, тачно, базе података? Они су колекције табела, и свака табела може да има сличне врсте објеката. Тако да смо имали табелу корисника у вашем финансија псет. А зашто су они корисни? Зато што је то начин трајно складиштење информација. То је начин праћења ствари и управљање ствари и заправо га виде на различитим странама и праћење. Док Уколико га чувате у том једном тренутку непосредној а затим га користити касније, нећете бити у могућности да приступите било које сте сачували. Имамо 4 главне ствари које користимо за СКЛ команди. Имамо избор, уметање, брисање и ажурирање. Они су заиста важно за вас да знате за ваш квиз. Ћемо брзо прећи изаберите одмах. У суштини, ви изабрати редове из базе података. Дакле, ако имате, овде - имамо ове 2 различите ствари, а ми желимо да изаберете из табеле класа где страшан - где у колони страшан вредност је 1. Дакле, можете видети овде, имамо ове 2 ствари име класе, ЦС50 и Стат110, а имамо класе легитимације и слоган. Дакле, желимо да изаберете све те информације. Тада можете видети овде да је то некако брање из те колоне страшан, где су све ствари су 1, а онда она има ИД класе, име класе и слоган који може да га изабрати. Како тачно радите ово у коду? Морате да користите ПХП. Дакле, то је некако како ПХП и СКЛ су међусобно повезане. Сада имамо код, а ми ћемо да користимо нашу функцију упита као што смо урадили у псет 7, а ми ћемо покренути СКЛ упит. Онда ћемо имати - ми увек морамо да проверите да ли је троструки Ров једнака ако лажна. Па опет, желите да проверите врсту и вредност, а онда, ако то не ради, онда ти желим да се извиним, као и обично, као што смо урадили у псет 7. У супротном, ви желите да петља кроз све са онима руци фореацх петље да смо управо отишао. Сада када смо кроз петље и ми смо га направили прошлост, претпоставимо да је наш упит прошло, сада имамо фореацх петље. И први ред има, па ево ред, баш овде, то је боксовао. То ће одштампати све информације које је постало. Дакле, то ће одштампати на дну "Хоћеш Научите ХТМЛ?" Онда ће да иде у следећи ред, јер је завршен први за петље, па онда иде да одштампате другу линију њега, који ће бити СТАТ110, Пронађи све тренутке. Једна ствар је на СКЛ Слабости. Знам Дејвид дотакли ово мало у предавању. Можете прочитати ово касније. То је стварно смешно. СКЛ Ињецтион је врста лукав ствар. Рецимо да сте управо држимо оне променљиве право у ваш упит, као што можете видети у тој првој линији. Тако се чини добро, зар не? Ти само стављање у корисничком имену и лозинку на вашем СКЛ упиту, а ви желите да га испоручи офф и добити све што је у вашој табели података. То изгледа прилично једноставно. Тако рецимо неко ставља у, за лозинку, овај текст ИЛИ овде - треба да заправо бити у црвеној кутији. Дакле, хајде да кажемо да су они ставили ту лозинку у - то је оно што они уђу. Дакле, они стављање ИЛИ "1" = 1. Врста глупо лозинку да имају. Сада хајде да га замени у, а ви ћете приметити да у тој СКЛ упиту сада, она оцењује да увек тачно, јер ћете приметити да можете СКЛ упит изабрати све ове информације или можете једноставно да имате 1 = 1. Тако да је увек ће да процени да истинито. То неће да се заиста ради, јер то значи да хакер може да провали у ваш систем. Решење за ово је да морате да користите ПДО систем, што значи да морате да користите упитнике, што је оно што сте ви који се користе у псет 7, где идете да користите знак питања на месту где желите да ставите нешто, и онда ћеш имати зарез, а онда ћете касније имати, после низа, различите варијабле које желите да замените у ваш знак питања. Дакле, ви ћете приметити да сада имам ове црвене знакове питања. Онда сам ставио променљиве после мог жице тако да знам да их касније заменити у том циљу. То ће сигурно учинити да ако неко то уради овако, и они имају или 1 = 1 ситуацију, да ће се уверите, у задњем крају, уверите се да то неће сломити заправо СКЛ упит. Ок, тако да је то прилично, вихор ПХП и СКЛ. Најбоље од среће свима вама, а сада се Оре [Ореолуватомива Бабаринса] Ок сви. Време је да одем преко неке ЈаваСцрипт и неке друге ствари врло брзо, тако да ти не држе до вечерас. ЈаваСцрипт. Да. ЈаваСцрипт је некако кул ствар, наводно. Ствари које заиста треба да знате о ЈаваСцрипт, то је нешто као клијент-страни крај шта ваш веб апликација ће радити. Има неких ствари које једноставно не желе да брине о све време на страни сервера. Сви мали интеракције, истичући једну ствар, чинећи нешто нестане. Стварно не желим да причам на свој сервер све време за то. А неки од то није ни могуће урадити на страни сервера. То је разлог зашто нам је потребно нешто попут ЈаваСцрипт. Цоол ствари о ЈаваСцрипт: То је динамички откуцан. То значи да ваш програм не треба да зна шта, тачно, променљиве су када га написати. То ће некако да схватим како се то ради. Друге ствари које су кул о томе: То је коврџава заграда језик, што значи синтакса је слична Ц и ПХП. Не морате да урадите много поновни када учите ЈаваСцрипт. Овде имамо мало ЈаваСцрипт. Занимљива ствар овде је да, ако се осврнемо на њега, имамо мало ЈаваСцрипт тамо у главу ознаку. Шта је то је у основи само укључите ЈаваСцрипт датотеку. Ово је један начин можете укључити ЈаваСцрипт у вашем програму. Онда други мало је заправо неки редни ЈаваСцрипт, веома сличан стилу уметнути са ЦСС, а ви само пишете неки код врло брзо тамо. Јава има низове. Само још један начин да се задржи око података, веома корисно. Веома лепо и лако синтакса. Можете користити угласте заграде за приступ све и да све заједно. Ништа превише сложен. Ствар о ЈаваСцрипт и скрипт језике уопште кул је да не морате да бринете о низу величинама. Можете само да користите арраи.ленгтх и пратите тога, а такође низ може да повећава или смањује колико вам је потребно је да се. Тако да ни не треба да бринете о било којој врсти, ох не, морам да издвоји више ствари, или тако нешто. Кул ствар овде је да има нешто што се зове Јава објеката. То је објектно-оријентисан језик, па шта је је, у суштини, начин за вас да се групи података заједно, донекле сличан струцт, али можете да му приступите као струцт или у асоцијативним низа синтаксе. То је прилично једноставна и шта можете да урадите са овим је група података заједно ако имате гомилу података који се односе. Зато што је све ствари које треба да опише аутомобил, не морате да га имате у гомилу различитих места. Можете само да га држимо у 1 објекат у ЈаваСцрипт. Као што вероватно знате, итератинг је један од оних досадних задатака. Управо си то урадио преко изнова. Треба да разговарате са сваког објекта у колима, или треба да прође кроз сваку ставку на листи или тако нешто. Дакле ЈаваСкрипт има, слично ПХП, а фореацх синтаксе. У овом случају, то је за петљу у. Ви желите да користите ово само на објектима. Постоје неки проблеми који се јављају ако користите ово на низове. То генерално је једна од оних ствари, ипак, да је веома користан, зато што елиминише много изнад главе јер не морате да се повуче све што је у вашем објекту сами. Не морате да памтите све кључне имена. Само некако их вратимо у овој синтакси. У ово, са за, само желите да запамтите да сте добијање натраг све кључеве, на веома сличан начин као хасх табелу. Ако се сећате тога, када би ставио у низу можете да добијете нешто од да би имати придружени вредност са њим. Шта можете да урадите са овим је можете рећи, у реду, Ставио сам у колима, и назвао сам је Ферари. Дакле, можете поново ставити у стринг Феррари касније, а можете добити то напоље. И ви можете да урадите да у петљи, уз јер у петљи. Дакле, само више о објектима. Кључна ствар у ово треба да запамтите је да можете да користите објекат струцт као синтаксе кад год желите са овим, осим ако шта ваш ће користити као стринг није валидан назив променљиве. Дакле, ако погледате да постоји, имамо кључ са размацима. Па, ако сте били да ставе објецт.кеи, простор, уз, простор, простори, да једноставно не би синтаксички смисла. Тако да само могу да урадим са овом врстом носача синтаксе. Такође, веома је ЈаваСцрипт обим-мудро ПХП. Имате 2 начина адресирања обим. Не можете имати вар испред променљиве, и то само значи да је глобална. Можете га видети са било ког места. Чак и ако сте били да стави ово у виду, ако изјави, било где другде у коду након те тачке можете да видите ту променљиву. Друга ствар је, међутим, са вар, то је ограничено на све што функција си унутра Ако нисте у функцији, добро, то је глобална. Али, ако сте у функцији је видљива само унутар те функције. Немам пример, али, да. То је једна од оних ствари где можете да управљате шта променљиве желите да буде глобална, шта варијабле које желите да буду локални, али ви не треба да буду опрезни о томе, јер немате тип фине контроле зрна радите у Ц, где ако се нешто проглашава за петљу у, то ће остати у да је за петљу. Ствар ми заиста стало користећи ЈаваСцрипт за манипулише веб странице, зар не? Мислим, то је разлог зашто ово радимо. Да би то урадио, ми користимо нешто што се зове ДОМ. Објецт Модел документ. У суштини, оно што ради је то потребно све ваше ХТМЛ и модела је пустимо у гомилу објеката који су угнежђених у једни друге. Можете почети са нечим овако. Имате, на десној за мене, гомила кода тамо то је нека врста - Помислили бисте да би било веома тешко да манипулише, јер ћеш бити рашчлањивању кроз гомилу текста и потребе да се комад поред ствари. А шта ако то није исправно форматиран? Лоше ствари ће се десити. Дакле ЈаваСкрипт брине ово за вас, а ви добијете леп структуру података, попут оног на моје леве стране, где сте само један документ, и унутра да имате нешто што се зове ХТМЛ, и унутра да имате главу и тело, и унутар тог глави имате наслов, и тако даље, и тако даље, и тако даље. Ово поједностављује манипулацију веб страницу, тако да је то само, Ох, само желим да причам за овај објекат. Сортирај веома сличан начин би разговарали на други објекат који си сам направио. Као што сам рекао, све је у ДОМ објекат документа. Или је то само једно место, а онда можете да одете у њој наћи ствари, и ви можете да урадите - то је стари стил радиш то, тамо горе, где радите доцумент.гетЕлементБиИд, а затим име, и као што вероватно можете рећи, ово постаје веома незграпан после неког времена. Дакле, ви вероватно не желите да то урадите. Зато имамо Следећа ствар ћемо да причамо о после овога. Кључна ствар овде је да, у реду, ви имате све ове елементе, зар не? Па можда могу променити боју нечега Када се страница учита. Па шта? Шта ако мој корисник кликне несто? Желим то да урадим нешто занимљиво када кликну нешто. Зато имамо догађаје. Можете да, у основи, наћи било који елемент у вашем ДОМ, и онда кажу, хеј. Када се то утоварује или неко кликне на њега, или када се миш преко њега, уради нешто са њим. А шта ви имате је, имате функције да средим ово за тебе. Ове функције су догађај сировина. Шта они су - то је само фенси начин да се каже, ова функција се извршава само када овај догађај деси. Тако да рукује догађај који се дешава. Ово је како би нокаутирати управљач догађаја. Имам мало дугме, и када кликнете на њега, он експлодира. Зато не кликнете на дугме. Ово је један од начина да се то приближава, зар не? Имате дугме ознаку, а на клик имате ниску која каже, Ох, успут, ја радим ово експлодира ствар за мене. У супротном, то је као редован дугмета сте управо направили. Такође можете да урадите на други начин, хватајући ДОМ елемент, али ћемо сачувати да после причамо о јКуери. ЈКуери: То је библиотека која је унакрсно претраживача. Можете га користити у скоро све. И то само да вам даје много алата за рад. Јер Јава, док моћан, нема све алатке које су вам потребне из кутије да стварно позабави веб апликацију ћете можда желети да урадите. Дакле, то поједностављује многе ствари, даје вам много функција из кутије коју иначе би морао да пишем себе, изнова и изнова и изнова. И само чини ствари врло једноставна. Такође имају селекторе, које вам омогућавају да извадите све оне елементе из вашег ДОМ много више једноставно, уместо да користе ове веома дуге позиви функција. Више о овим селектора. Имате, тамо сте, рецимо Желим да се елемент са ИД "камену." Па, у јКуери, то је само $ а онда стринг који има пола килограма, а затим "рок." То је врло једноставно и много брже од традиционалног ЈаваСцрипт начин решавања овог проблема. И ви имате сличне ствари за класа и типова елемената. јКуери је - једна од кул функција је можете некако компресовати доле ваша питања о вашем ДОМ веома, веома брзо. Сада смо вратимо на догађај руковање, а то је како би се бавио један догађај у јКуери. Дакле, оно што ћемо овде говоримо, у реду. Имам скрипту ознаку, зар не? Па ја имам ову уметнуте ЈаваСцрипт. Оно што ћемо урадити је да ћемо рећи, у реду. Када документ је спреман, што значи документ је био напуњен, ћемо ићи у на ту функцију, а ми ћемо да кажемо, у реду, ова функција је заправо радите нешто друго. То је у основи каже, у реду, дај ми елемент са ИД "Иерр." А онда дајте овај функцијски руковалац који извршава када кликнете на њега. У суштини оно што ово ради је, каже, у реду. Страна учита, па ћу у, наћи овај елемент, дајте јој ову евент хандлер, а то је у основи поставља страницу за вас. А ово је како желите да размислите о руковању догађаја. Ви само желите да размишљају о, у реду, када се нешто деси, шта ја желим да се деси? Не желим да мислим о томе, у реду, ја треба да се уверите да ова ствар разговоре ову ствар, ово бла бла бла, јер ви само желите да разговарате ствар у погледу догађаја. Када се то деси, то се дешава. Када се то деси, то се дешава. А ако се ствари покрену друге ствари, то је супер. Али ви не желите да покушате и урадите компликовану шифру где си ов више ствари у исто време, јер ћеш само да себи дају главобољу. Реду. Сада можемо да добијемо нашу страницу за руковање догађајима, али рецимо мој корисник кликне на дугме. Шта ако желим да пошаљем тај захтев назад на сервер, али ја не желим да поново учитате страницу, јер морате да поново учитате нову страницу сваки пут добија некако досадан, и зашто ми је потребно да сруши заглавље опет, и опет подножје, и сви елементи странице поново само да освежите поздрав или време? Зато имамо нешто попут Ајакса. Шта можемо да урадимо овде са Ајакс је можемо рећи, у реду, Желим да пошаљем неке податке на сервер, и ја желим да се одговор врати, тако да могу ажурирати своју страну, или можда само да мало алгоритамску калкулацију да не мора да покаже ништа до корисника. Шта треба да урадите? Па, треба вам УРЛ што је потребно да разговарате са. Ваш сервер не може само слушати у магично ниоткуда. Потребно је да имате посебно место шаљете ове податке да. И ви такође треба неке податке да пошаљете, или можда је даталесс упита. Ви само желите да се вратите на сервер пинг и рећи, хеј, ја сам жив, или тако нешто. А онда желите функцију која у основи рукује са успехом. Рецимо да се вратимо неке информације са вашег сервера, и желите да промените наслов корисника на њиховој страни. Тако да би добили информације назад, и ти би да притиснете на екрану. Шта се дешава је, када страна је спремна, креирате на функцију Кликните за овај дугме зове Греетер. Шта то онда ради је, када се притисне то дугме, Ви разговарате са греетингс.пхп, направите захтев ПОСТ, и ти кажеш, хеј, дај ми нешто из ваше странице. Ми стварно не треба да се опише то, али греетингс.пхп, Рецимо, враћа "здраво свет." Дакле, да се вратимо ову "Хелло Ворлд", а на успех ове, под претпоставком ништа крене наопако, онда само идите на ову циљну месту да ми наведено и ми држимо само одговор на ту. И ово је веома једноставан начин за успостављање Ајакс упита. Врло брзо, Роб некако већ споменуо, ствари могу да крену наопако, лоше ствари се дешавају, па желите да се упознате са овим кодовима ХТТП одговор. Које су то су само, као, 200, све је прошло у реду. Нешто друго, лоше ствари се десило. То је генерално ствар коју желите да запамтите. Али лепо је знати све ово. И на крају, када смо прошли кроз све то, морамо веома брзо говорити о дизајну, а онда можемо да вас све оставити. Дизајн. Ствари које желите да запамтите. Запитајте се ова питања: Ко ће бити користећи ово? Шта ће они бити помоћу то за? Шта моји корисници стало? Шта не стало? Ви једноставно не желе да направи апликацију и пустите да само расте и постао ово гигант, све одузима ствар коју не могу ни завршити. Желите да имате дискретним циљеве и планове и ствари које желите да се обрати. Нека буде без напора. Све ово говори, у основи, олакшавају кориснику да га користите, не то гигант грудвица текст као овај слајд је направити, заправо. Само желим да то буде нешто где је врло лако за некога да иде у и раде шта желе да ураде. Ви не желите да они имају да се крећете на 5 страница доћи до вашег премијера функцији вашег сајта. Ако Гоогле је имао 5 странице пре него што чак и да тражи нешто, нико не би га користили. И на крају, папир прототип, фокус група. Имају добар дизајн и праксе тестирање. Само зато што мислите да то ради за вас, не значи неко други мисли да ради. Али да, то је то. [ЦС50.ТВ]