1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> Дејвид Џ MALAN: Во ред. 3 00:00:12,900 --> 00:00:16,790 Па добредојде на првиот CS50 посмртна за квиз. 4 00:00:16,790 --> 00:00:18,340 Ние сме мислеле дека би се инаугурира оваа традиција оваа година. 5 00:00:18,340 --> 00:00:20,960 И ова ќе биде можност да одиме преку 6 00:00:20,960 --> 00:00:22,220 решенија за квиз. 7 00:00:22,220 --> 00:00:26,160 И ние ќе го забрза или успори врз на интересот на оние тука. 8 00:00:26,160 --> 00:00:29,730 >> Па ти си веројатно тука, бидејќи сте заинтересирани за тоа како би можеле да имаат или 9 00:00:29,730 --> 00:00:31,170 треба да се одговори на некои од овие проблеми. 10 00:00:31,170 --> 00:00:33,300 Па зошто да не фрлите поглед во оваа секција првиот? 11 00:00:33,300 --> 00:00:34,450 Па добивање жици. 12 00:00:34,450 --> 00:00:37,600 Ова ви даде три различни верзии на програмата што беше, во крајна линија, 13 00:00:37,600 --> 00:00:39,650 со цел да се добие низа од корисникот. 14 00:00:39,650 --> 00:00:42,530 Дали е или не го сторија тоа беше лево кон вас да се утврди. 15 00:00:42,530 --> 00:00:45,150 >> А ние праша во прашање 0, Претпоставувам дека таа верзија 1 е 16 00:00:45,150 --> 00:00:46,400 Составувач и егзекутирани. 17 00:00:46,400 --> 00:00:48,860 Зошто би можело програмата segfault? 18 00:00:48,860 --> 00:00:51,150 На прв поглед, какви предлози зошто? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Да. 21 00:00:54,489 --> 00:00:59,260 >> Публика: Се сеќавам гледаат оваа во претходниот пример на гледање на 22 00:00:59,260 --> 00:01:05,506 char * а и при гледањето на скенирање на ОК и види, бидејќи тоа е покажувач, како 23 00:01:05,506 --> 00:01:07,971 сето тоа влијае на она што се скенираат во? 24 00:01:07,971 --> 00:01:10,940 Е тоа е или адресата на е? 25 00:01:10,940 --> 00:01:11,180 >> Дејвид Џ MALAN: OK. 26 00:01:11,180 --> 00:01:11,480 Добро. 27 00:01:11,480 --> 00:01:14,830 Значи во крајна линија, изворот на било каков проблем е веројатно нема да се намали 28 00:01:14,830 --> 00:01:16,210 на тој променлива s. 29 00:01:16,210 --> 00:01:17,280 И тоа е навистина променлива. 30 00:01:17,280 --> 00:01:19,900 Типот податоците на таа променлива е char *, што значи дека нема да се 31 00:01:19,900 --> 00:01:22,570 содржи адреса на некој лик. 32 00:01:22,570 --> 00:01:23,850 И во него лежи увид. 33 00:01:23,850 --> 00:01:28,330 Тоа се случува да содржи адреса на карактер или, поопшто, 34 00:01:28,330 --> 00:01:32,110 адресата на првиот карактер во целина блок карактери. 35 00:01:32,110 --> 00:01:36,680 >> Но се фати е дека скенирање с, намена во живот, е дадена адреса и дава 36 00:01:36,680 --> 00:01:40,960 формат код, како% s, да се прочита стринг во залакот на 37 00:01:40,960 --> 00:01:42,330 меморија на таа адреса. 38 00:01:42,330 --> 00:01:46,040 Но, бидејќи не постои знак за еднаквост пред дека запирка на првиот 39 00:01:46,040 --> 00:01:49,310 линија код, бидејќи ние не, всушност, распредели било меморија со 40 00:01:49,310 --> 00:01:53,020 Примерок, бидејќи тоа всушност не распредели низа на некои големина, сите 41 00:01:53,020 --> 00:01:57,620 правиш е читање на корисникот тастатура за внес во некои целосно 42 00:01:57,620 --> 00:02:00,490 ѓубре вредност, која е во с од стандардните. 43 00:02:00,490 --> 00:02:04,480 Затоа, шансите се сте ќе segfault ако таа адреса не само да се случи 44 00:02:04,480 --> 00:02:08,009 да биде вредност што можеш, всушност, пишете на. 45 00:02:08,009 --> 00:02:10,889 Толку лошо да не се распредели вашата меморија таму. 46 00:02:10,889 --> 00:02:13,150 >> Значи во прашање 1, ги прашавме, Претпоставувам дека верзијата 2 е 47 00:02:13,150 --> 00:02:14,230 Составувач и егзекутирани. 48 00:02:14,230 --> 00:02:15,900 Зошто би можело оваа програма segfault? 49 00:02:15,900 --> 00:02:17,990 Така што ова е помалку кабриолет. 50 00:02:17,990 --> 00:02:21,470 И таму е навистина само еден очигледен начин каде што можете да 51 00:02:21,470 --> 00:02:22,810 предизвика segfault тука. 52 00:02:22,810 --> 00:02:23,730 И ова е тематика. 53 00:02:23,730 --> 00:02:28,180 Секое време ние сме користење на C во меморијата, што можете да го направите да предизвикаат segfault 54 00:02:28,180 --> 00:02:30,718 со верзијата 2? 55 00:02:30,718 --> 00:02:35,560 >> Публика: Ако користите дека влез во стринг кој е повеќе од 49 56 00:02:35,560 --> 00:02:35,975 карактери. 57 00:02:35,975 --> 00:02:37,260 >> Дејвид Џ MALAN: Токму така. 58 00:02:37,260 --> 00:02:41,420 Во секое време да видите нешто со фиксна должина кога станува збор за низа, вашиот 59 00:02:41,420 --> 00:02:44,650 радар треба да одам дека ова би можело да биде проблематична ако не сте проверка на 60 00:02:44,650 --> 00:02:45,810 границите на низата. 61 00:02:45,810 --> 00:02:46,650 И тоа е проблемот тука. 62 00:02:46,650 --> 00:02:47,910 Ние сме сè уште користење scanf. 63 00:02:47,910 --> 00:02:52,200 Ние сме сè уште користење на% s, што значи се обиде да го прочитате низа од корисникот. 64 00:02:52,200 --> 00:02:56,300 Тоа се случува да се прочита во ОК, што, во овој момент, е ефективно 65 00:02:56,300 --> 00:02:58,570 адресата на парче меморија или тоа е еквивалентно. 66 00:02:58,570 --> 00:03:02,080 Тоа е името на низа на карактери на меморија. 67 00:03:02,080 --> 00:03:07,610 >> Но, токму тоа, ако го прочитате низа тоа е повеќе од 49 карактери, 49 68 00:03:07,610 --> 00:03:10,440 затоа што треба простор за обратна коса црта 0, си оди за да претекување 69 00:03:10,440 --> 00:03:11,390 дека тампон. 70 00:03:11,390 --> 00:03:16,410 И можеби ќе имаат среќа и ќе биде во можност да напише 51. карактер, 52., 53. 71 00:03:16,410 --> 00:03:18,560 Но во одреден момент, оперативниот систем се случува да се каже, бр. 72 00:03:18,560 --> 00:03:21,270 Ова дефинитивно не е меморија сте дозволено да го допре. 73 00:03:21,270 --> 00:03:23,380 И програма ќе се segfault. 74 00:03:23,380 --> 00:03:26,650 >> Па таму, хеуристичко треба да има никаква време имаш фиксна должина, имате 75 00:03:26,650 --> 00:03:30,150 да бидете сигурни дека сте проверка на должината на што и да е што се обидуваш 76 00:03:30,150 --> 00:03:31,090 да се прочита во неа. 77 00:03:31,090 --> 00:03:35,110 >> ПУБЛИКАТА: Значи да се реши тоа, можете да имале изјава проверка всушност 78 00:03:35,110 --> 00:03:37,140 е со должина поголема или помала од? 79 00:03:37,140 --> 00:03:37,730 >> Дејвид Џ MALAN: Апсолутно. 80 00:03:37,730 --> 00:03:41,706 Вие само треба услов кој се вели дека, ако - 81 00:03:41,706 --> 00:03:46,080 или подобро кажано, вие не мора да знаете однапред колку знаци на 82 00:03:46,080 --> 00:03:49,060 корисникот е случува да напишеш, затоа што имате пилешко и јајца. 83 00:03:49,060 --> 00:03:51,860 Не додека сте го прочитате во со scanf може да дознаам колку долго е. 84 00:03:51,860 --> 00:03:54,500 Но, во тој момент, тоа е премногу доцна, бидејќи веќе сте го прочитате во 85 00:03:54,500 --> 00:03:55,710 некои блок од меморија. 86 00:03:55,710 --> 00:03:59,590 Па како настрана, CS50 библиотека избегнува ова прашање заедно, да се потсетиме 87 00:03:59,590 --> 00:04:01,060 со користење на fgetc. 88 00:04:01,060 --> 00:04:05,390 И гласи еден карактер во еден момент, врвот-toeing заедно, знаејќи дека 89 00:04:05,390 --> 00:04:08,060 не може да претекување лик ако ќе прочитате еден по еден. 90 00:04:08,060 --> 00:04:11,580 >> Улов е со getstring потсетиме е дека мораме постојано да се ре-големина 91 00:04:11,580 --> 00:04:13,590 дека парче на меморија, која е само болка. 92 00:04:13,590 --> 00:04:15,310 Тоа е многу линии на кодот да го направите тоа. 93 00:04:15,310 --> 00:04:18,779 Па друг пристап ќе биде да се всушност се користи братучед, па 94 00:04:18,779 --> 00:04:19,790 да се каже, на scanf. 95 00:04:19,790 --> 00:04:22,820 Постојат варијанти на многу од овие функции кои всушност се провери 96 00:04:22,820 --> 00:04:25,870 должина од колку знаци може да се прочита максимално. 97 00:04:25,870 --> 00:04:29,430 И може да се одреди, не ги читаат повеќе од 50 карактери. 98 00:04:29,430 --> 00:04:34,110 Така што ќе биде поинаков пристап, но помалку сместување на поголеми влезови. 99 00:04:34,110 --> 00:04:37,040 >> Значи прашањето 2 прашува, да претпоставиме дека верзијата 3 е составена и погубен. 100 00:04:37,040 --> 00:04:39,960 Зошто би можело таа програма segfault? 101 00:04:39,960 --> 00:04:42,650 Така што ова е всушност истиот одговори, иако тоа 102 00:04:42,650 --> 00:04:43,590 изгледа малку познавач. 103 00:04:43,590 --> 00:04:46,440 Ние сме користење Примерок, кој се чувствува како ние сме се даваат повеќе опции. 104 00:04:46,440 --> 00:04:48,030 А потоа ние сме ослободување што меморија на крајот. 105 00:04:48,030 --> 00:04:49,580 Тоа е сепак само 50 бајти меморија. 106 00:04:49,580 --> 00:04:53,620 Па ние се уште може да се обиде да го прочитате во 51, 52, 1000 бајти. 107 00:04:53,620 --> 00:04:55,830 Тоа се случува да segfault за иста причина. 108 00:04:55,830 --> 00:04:57,530 >> Но, постои уште една причина премногу. 109 00:04:57,530 --> 00:05:03,890 Што друго би можел Примерок враќање покрај адресата на парче меморија? 110 00:05:03,890 --> 00:05:04,920 Тоа би можело да се врати NULL. 111 00:05:04,920 --> 00:05:07,560 И бидејќи ние не сме проверка за тоа, ние би можеле да се прави нешто 112 00:05:07,560 --> 00:05:11,350 глупави за друга причина, а тоа е дека ние би можеле да се кажува scanf, да се прочита 113 00:05:11,350 --> 00:05:16,050 влез на корисникот од тастатура во 0 локација, АКА нула. 114 00:05:16,050 --> 00:05:18,890 И дека, исто така, дефинитивно ќе предизвика segfault. 115 00:05:18,890 --> 00:05:21,590 Па за целта на квизот, ние ќе го прифатиле било кој од овие како 116 00:05:21,590 --> 00:05:22,740 оправдана причина. 117 00:05:22,740 --> 00:05:23,420 Една од нив е идентична. 118 00:05:23,420 --> 00:05:25,720 Една од нив е малку посуптилни. 119 00:05:25,720 --> 00:05:28,975 >> Крај, во однос на програмата употреба на меморија, како да верзија 2 и 120 00:05:28,975 --> 00:05:30,350 верзија 3 се разликуваат? 121 00:05:30,350 --> 00:05:35,070 Па за она што вреди, видовме навидум бескрајна снабдување на можни 122 00:05:35,070 --> 00:05:35,770 одговори на ова. 123 00:05:35,770 --> 00:05:39,300 И меѓу одговорите на луѓето, она што бевме надевајќи се дека за, но го прифативме други 124 00:05:39,300 --> 00:05:42,250 работи, беше некои споменување на Фактот дека верзијата 2 е користење на 125 00:05:42,250 --> 00:05:44,560 т.н. оџак. 126 00:05:44,560 --> 00:05:46,710 Верзија 3 е користење на грамада. 127 00:05:46,710 --> 00:05:50,060 И функционално, ова навистина не направи сето тоа многу разлика. 128 00:05:50,060 --> 00:05:54,040 На крајот на денот, ние сме се уште само добивање 50 бајти меморија. 129 00:05:54,040 --> 00:05:56,640 >> Но, тоа беше една од можните одговори дека ние се гледа во. 130 00:05:56,640 --> 00:05:59,730 Но ќе се види, како ќе ја добиете вашата квизови назад од TFS, дека ние го сторивме 131 00:05:59,730 --> 00:06:04,330 прифатат други дискусиите на нивните различни начини на употреба на меморијата, како и. 132 00:06:04,330 --> 00:06:08,600 Но магацинот и грамада би биле лесен одговор да одам со. 133 00:06:08,600 --> 00:06:11,150 Било какви прашања? 134 00:06:11,150 --> 00:06:12,400 Јас ви даде Роб. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> Роб BOWDEN: Значи проблемот 4. 137 00:06:20,210 --> 00:06:21,985 Ова е една каде што требаше да се пополни на бројот на бајти од сите 138 00:06:21,985 --> 00:06:23,460 овие различни видови се користат. 139 00:06:23,460 --> 00:06:24,830 Па првото нешто што го гледаме. 140 00:06:24,830 --> 00:06:27,930 Претпостави 32-битна архитектура, вака CS50 апаратот. 141 00:06:27,930 --> 00:06:33,530 Така една од основните работи за 32-битна архитектура, која ни кажува 142 00:06:33,530 --> 00:06:37,490 точно колку е голема покажувач се случува да биде во архитектурата. 143 00:06:37,490 --> 00:06:43,020 >> Па веднаш, ние знаеме дека секој покажувачот тип е 32-бита или 4 бајти. 144 00:06:43,020 --> 00:06:46,010 Па гледајќи оваа маса, јазол * е тип покажувач. 145 00:06:46,010 --> 00:06:47,250 Тоа ќе биде 4 бајти. 146 00:06:47,250 --> 00:06:51,640 Struct јазол *, тоа е буквално идентична со јазол ѕвезда. 147 00:06:51,640 --> 00:06:53,590 И така што ќе биде 4 бајти. 148 00:06:53,590 --> 00:06:58,270 Стринг, па тоа не изгледа како покажувачот уште, но typedef, на 149 00:06:58,270 --> 00:07:01,590 стринг е само char *, која е тип покажувач. 150 00:07:01,590 --> 00:07:03,550 Така што ќе биде 4 бајти. 151 00:07:03,550 --> 00:07:06,150 >> Значи овие три се сите 4 бајти. 152 00:07:06,150 --> 00:07:09,350 Сега, јазол и ученикот се малку посложена. 153 00:07:09,350 --> 00:07:15,160 Па гледајќи јазол и студент, гледаме јазол како цел број и покажувач. 154 00:07:15,160 --> 00:07:18,050 И студентски е два совети во него. 155 00:07:18,050 --> 00:07:23,340 Па барем за нашиот случај тука, начинот на дека на крајот ќе заврши пресметување на големината на 156 00:07:23,340 --> 00:07:27,020 овој struct е само да додадете на сè тоа е во внатрешноста на struct. 157 00:07:27,020 --> 00:07:30,690 >> Значи за јазол, имаме цел број, кое што е 4 бајти. 158 00:07:30,690 --> 00:07:32,830 Ние имаат покажувач, што е 4 бајти. 159 00:07:32,830 --> 00:07:35,820 И така еден јазол се случува да ги преземат 8 бајти. 160 00:07:35,820 --> 00:07:39,490 И слично за студент, имаме покажувачот тоа е 4 бајти, а друг 161 00:07:39,490 --> 00:07:40,770 покажувачот тоа е 4 бајти. 162 00:07:40,770 --> 00:07:43,180 Така што се случува да се стави крај до суштество 8 бајти. 163 00:07:43,180 --> 00:07:45,480 Па јазол и ученикот се 8 бајти. 164 00:07:45,480 --> 00:07:48,950 И овие три се сите 4 бајти. 165 00:07:48,950 --> 00:07:50,240 Прашања во врска со тоа? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Да. 168 00:07:54,990 --> 00:07:58,413 >> ПУБЛИКАТА: Дали тоа беше 64-битна архитектура, би дека 169 00:07:58,413 --> 00:07:59,880 двојно сите од нив? 170 00:07:59,880 --> 00:08:01,790 >> Роб BOWDEN: Тоа не би двојно сите нив. 171 00:08:01,790 --> 00:08:05,830 Па 64-битна архитектура, тоа, повторно, промени кои фундаментално нешто што 172 00:08:05,830 --> 00:08:08,910 покажувачот е сега 64 бита. 173 00:08:08,910 --> 00:08:09,290 Да. 174 00:08:09,290 --> 00:08:10,930 Па покажувачот е 8 бајти. 175 00:08:10,930 --> 00:08:15,420 Па овие, кои беа 4 бајти се случува да биде 8 бајти. 176 00:08:15,420 --> 00:08:18,617 Еден студент, кој беше два покажувачи, Па, сега тоа се случува да 177 00:08:18,617 --> 00:08:19,800 биде 8 бајти, 8 бајти. 178 00:08:19,800 --> 00:08:21,980 Тоа ќе го направат 16 бајти. 179 00:08:21,980 --> 00:08:25,710 >> Но еден јазол е сеуште 4 бајти. 180 00:08:25,710 --> 00:08:27,800 Значи ова покажувачот се случува да биде 8 бајти. 181 00:08:27,800 --> 00:08:28,930 Ова е 4 бајти. 182 00:08:28,930 --> 00:08:30,870 Па еден јазол е само ќе да биде 12 бајти. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Било какви други прашања на оној? 185 00:08:39,280 --> 00:08:44,500 Па следниот, овие се кодови HTTP статус. 186 00:08:44,500 --> 00:08:48,000 И ти мораше да се опише околности под кои тие би можеле да 187 00:08:48,000 --> 00:08:49,810 да Ви бидат вратени. 188 00:08:49,810 --> 00:08:56,730 еден проблем што слушнав некои студенти имаат е дека тие се обиделе да се направи 189 00:08:56,730 --> 00:08:58,950 грешки биде на крајот на клиентот. 190 00:08:58,950 --> 00:09:02,320 Па кога ние се обидуваме да се направи барање до серверот, нешто ќе тргне 191 00:09:02,320 --> 00:09:03,820 ред на нашиот крај. 192 00:09:03,820 --> 00:09:07,660 Но, генерално, овие кодови се се врати од страна на серверот. 193 00:09:07,660 --> 00:09:11,720 Затоа сакаме да дознаам што се случува погрешно или десно на сервер кој 194 00:09:11,720 --> 00:09:14,280 предизвикува овие работи кои треба да бидат вратени. 195 00:09:14,280 --> 00:09:18,670 Па зошто би можеле сервер се враќа статус код 200? 196 00:09:18,670 --> 00:09:19,920 Било кој мисли? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Да. 199 00:09:23,730 --> 00:09:27,850 Па нешто за успешно барање помина низ. 200 00:09:27,850 --> 00:09:30,260 И тие се способни да се вратат што и да побара. 201 00:09:30,260 --> 00:09:32,240 Значи се е во ред. 202 00:09:32,240 --> 00:09:35,662 Што е со 302 пронајден? 203 00:09:35,662 --> 00:09:36,618 Да. 204 00:09:36,618 --> 00:09:39,008 >> ПУБЛИКАТА: Серверот е во потрага за она што го бара. 205 00:09:39,008 --> 00:09:40,442 Но, тоа не можеше да го најде. 206 00:09:40,442 --> 00:09:42,850 Значи има грешка. 207 00:09:42,850 --> 00:09:47,720 >> Роб BOWDEN: Значи серверот беше во потрага по она што ти сакаше. 208 00:09:47,720 --> 00:09:51,682 Па само бараат овде, 302 се најде, тоа беше во можност да го најдете. 209 00:09:51,682 --> 00:09:53,035 >> Публика: Жал ми е. 210 00:09:53,035 --> 00:09:54,388 Најде значи дека тие не го најдете. 211 00:09:54,388 --> 00:09:55,638 Жал. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> Роб BOWDEN: Значи 302 пронајдени. 214 00:10:00,160 --> 00:10:02,350 Серверот е во состојба да се најде она што го сакаше. 215 00:10:02,350 --> 00:10:04,640 >> Публика: Но, тоа не е тоа прикажување? 216 00:10:04,640 --> 00:10:08,180 >> Роб BOWDEN: Разликата помеѓу ова 302 и 200 е тоа што 217 00:10:08,180 --> 00:10:09,280 знае она што го сакате. 218 00:10:09,280 --> 00:10:12,000 Но тоа не е точно каде си сакал да прашам. 219 00:10:12,000 --> 00:10:14,580 Па 302 е типичен пренасочување. 220 00:10:14,580 --> 00:10:16,510 Така да побара страница. 221 00:10:16,510 --> 00:10:19,590 Тоа познава, ах, сакам да ви се врати ова. 222 00:10:19,590 --> 00:10:21,070 Но, ова е на друг URL. 223 00:10:21,070 --> 00:10:23,534 Па еј, ти всушност сакаат тоа. 224 00:10:23,534 --> 00:10:26,950 >> Дејвид Џ MALAN: Тоа е парче што рече дека ние даде вас момци пренасочување 225 00:10:26,950 --> 00:10:30,830 функција која се користи насловот функција тоа, пак, отпечатени локација, 226 00:10:30,830 --> 00:10:34,110 дебелото црево, а потоа рачно на која сакате да ги одбивате корисникот. 227 00:10:34,110 --> 00:10:37,480 И покрај тоа што не гледам 302 експлицитно таму, тоа е она што PHP 228 00:10:37,480 --> 00:10:41,550 магично ќе се вметне како и заглавието велејќи дека токму она што Роб рече дека - 229 00:10:41,550 --> 00:10:41,930 најде. 230 00:10:41,930 --> 00:10:43,180 Но оди тука, наместо. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> Роб BOWDEN: OK. 233 00:10:46,160 --> 00:10:47,630 Значи она што за 403 забрането? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> Публика: Мислам дека тоа е дека серверот е во основа велејќи дека клиентот 236 00:10:57,120 --> 00:10:59,970 не може да пристапи на почетната страница. 237 00:10:59,970 --> 00:11:03,260 >> Роб BOWDEN: Така да. 238 00:11:03,260 --> 00:11:07,670 Па, типичниот одговор бевме очекувајќи е нешто како, на датотеки 239 00:11:07,670 --> 00:11:08,920 не се chmodded соодветно. 240 00:11:08,920 --> 00:11:11,590 Тоа е веројатно под кои околности ги видов. 241 00:11:11,590 --> 00:11:18,920 Но, постои причина дека клиентот би можело да биде виновен тука. 242 00:11:18,920 --> 00:11:20,440 Таму е всушност уште еден код за статус - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Па овие се многу слични. 245 00:11:22,820 --> 00:11:24,590 >> 401 е неовластено. 246 00:11:24,590 --> 00:11:26,130 И 403 е забрането. 247 00:11:26,130 --> 00:11:31,890 И така неовластено вас исклучиво добиете ако вие не сте најавени 248 00:11:31,890 --> 00:11:34,520 Но влезете во би можело да значи дека се овластени. 249 00:11:34,520 --> 00:11:37,930 Но, ако веќе сте најавени и ќе уште немате дозвола, а потоа 250 00:11:37,930 --> 00:11:40,140 исто така можете да добиете забрането. 251 00:11:40,140 --> 00:11:45,320 Значи, ако сте најавени во и немаат дозвола, забрането е, исто така, 252 00:11:45,320 --> 00:11:47,164 нешто што може да се добие. 253 00:11:47,164 --> 00:11:48,900 >> Дејвид Џ MALAN: И механизмот со кои овие проблеми се обично 254 00:11:48,900 --> 00:11:53,100 реши на серверот е преку она команда? 255 00:11:53,100 --> 00:11:57,700 Chmod, ако тоа е, всушност, дозволи прашање на датотека или директориум. 256 00:11:57,700 --> 00:11:59,220 >> Роб BOWDEN: Тогаш 404 не е пронајден. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Да. 259 00:12:03,470 --> 00:12:10,150 Па за разлика од 302, каде што тоа не беше точно каде што го бараме, но тоа не знае што 260 00:12:10,150 --> 00:12:12,710 сакате, тоа, тоа само има никаква идеја што сакате. 261 00:12:12,710 --> 00:12:15,648 И да не се бара нешто валидно. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Јас сум Чајникот, а потоа 500 внатрешниот сервер. 264 00:12:22,310 --> 00:12:24,870 Па зошто би можеле да ти е тоа? 265 00:12:24,870 --> 00:12:26,120 >> Па segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Јас всушност не знаат оценување стандард за ова. 268 00:12:30,640 --> 00:12:34,850 Но, ако вашиот PHP код имаше нешто лошо во тоа, во теорија, тоа би можело да 269 00:12:34,850 --> 00:12:39,650 всушност segfault, во кој случај, овој 500 внатрешна грешка на серверот, нешто 270 00:12:39,650 --> 00:12:41,400 не е во ред со вашиот сервер конфигурација. 271 00:12:41,400 --> 00:12:44,320 Или има синтаксички грешки во вашиот PHP код. 272 00:12:44,320 --> 00:12:46,095 Или нешто лошо се случува. 273 00:12:46,095 --> 00:12:48,320 >> Дејвид Џ MALAN: Ние го види segfault меѓу одговорите на неколку луѓе. 274 00:12:48,320 --> 00:12:49,490 И технички, тоа би можело да се случи. 275 00:12:49,490 --> 00:12:53,820 Но, тоа ќе биде PHP, на програмата напишани од други луѓе, всушност 276 00:12:53,820 --> 00:12:57,790 segfaulted, која само ако тие луѓе зезнав и напиша кабриолет кодот во 277 00:12:57,790 --> 00:13:00,680 нивни преведувач би PHP е самата segfault. 278 00:13:00,680 --> 00:13:06,460 Па дури иако 500 е како segfault во духот, тоа е речиси секогаш 279 00:13:06,460 --> 00:13:10,490 резултат на конфигурациската датотека прашање со вашиот веб сервер или, како Роб рече, 280 00:13:10,490 --> 00:13:13,200 синтаксата, како тебе не го затвори понуда. 281 00:13:13,200 --> 00:13:16,180 Или сте ја изгубиле точка-запирка некаде. 282 00:13:16,180 --> 00:13:23,677 >> ПУБЛИКАТА: Значи за шатлот pset, јас дека кога јас го направив тоа еднаш јас кликна на 283 00:13:23,677 --> 00:13:26,300 пребарувач, но ништо не излезе, она што се нарекува бела страница. 284 00:13:26,300 --> 00:13:28,056 Но тоа е затоа што на кодот. 285 00:13:28,056 --> 00:13:29,440 Мислам дека тоа беше да го вклучите Javascript, нели? 286 00:13:29,440 --> 00:13:29,770 >> Роб BOWDEN: Да. 287 00:13:29,770 --> 00:13:31,180 >> Публика: Дали тоа грешка уште да излезе? 288 00:13:31,180 --> 00:13:34,290 >> Роб BOWDEN: Значи вие не би го добиле оваа грешка, бидејќи сè 289 00:13:34,290 --> 00:13:36,930 од перспектива на веб-серверот беше сосема во ред. 290 00:13:36,930 --> 00:13:39,090 Но вие бара index.html. 291 00:13:39,090 --> 00:13:42,000 Баравте shuttle.js и service.js. 292 00:13:42,000 --> 00:13:44,580 И тоа беше во состојба успешно да се вратат на сите оние работи што - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Тоа е само кога вашиот прелистувач се обиде да толкуваат JavaScript код кој 296 00:13:49,330 --> 00:13:51,370 Тоа е како, чекај, ова не е валидна го вклучите Javascript-грешка. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Било какви други прашања? 299 00:13:58,210 --> 00:14:00,750 Во ред е. 300 00:14:00,750 --> 00:14:04,120 >> Дејвид Џ MALAN: Значи следниот беше за бројот 11. 301 00:14:04,120 --> 00:14:07,610 И 11 е најстрашниот за многу луѓе. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Па најважното нешто да се напомене тука ова беше, всушност, за 304 00:14:18,570 --> 00:14:19,840 двојно поврзана листа. 305 00:14:19,840 --> 00:14:23,160 Но, тоа не беше иста како минатата година двојно поврзана листа проблеми, 306 00:14:23,160 --> 00:14:27,170 кои не ви даде забелешката дека листата може, всушност, да бидат несортиран. 307 00:14:27,170 --> 00:14:29,640 >> Значи фактот дека листата е несортиран и фактот дека тој збор беше 308 00:14:29,640 --> 00:14:32,930 подвлече дека требаше да се пренесе дека ова е всушност поедноставување 309 00:14:32,930 --> 00:14:35,430 на она што инаку би биле повеќе предизвик проблем 310 00:14:35,430 --> 00:14:36,600 и не една. 311 00:14:36,600 --> 00:14:40,760 Така честа грешка тука беше да се стави минатата година решение на вашиот еден 312 00:14:40,760 --> 00:14:45,580 пејџер, а потоа само слепо копија од тоа надолу како одговор, што е право 313 00:14:45,580 --> 00:14:48,520 одговори на различно прашање слични во духот. 314 00:14:48,520 --> 00:14:51,340 Но суптилностите тука беа како што следи. 315 00:14:51,340 --> 00:14:55,200 >> Значи еден, имаме еден јазол декларирани и дефинирани во вообичаениот начин тука. 316 00:14:55,200 --> 00:14:59,230 Тогаш ние дефинирана листа на биде глобален покажувачот иницијализиран на NULL. 317 00:14:59,230 --> 00:15:02,150 Тогаш очигледно, има две функции имаме прототипови за тука, вметнете 318 00:15:02,150 --> 00:15:03,240 и извадете го. 319 00:15:03,240 --> 00:15:06,600 А потоа имаме некои примерок код овде на вршење на еден куп на инсерции. 320 00:15:06,600 --> 00:15:09,930 А потоа бараме од вас да се заврши спроведувањето на вметнете подолу во таква 321 00:15:09,930 --> 00:15:14,380 начин што го внесува n во листата во постојана време, исто така, истакна, 322 00:15:14,380 --> 00:15:15,730 дури и ако веќе присутни. 323 00:15:15,730 --> 00:15:20,600 >> Па убавината на можноста да се вметне во постојан време е дека тоа подразбира 324 00:15:20,600 --> 00:15:23,060 дека мора да се вметне на нов јазол каде? 325 00:15:23,060 --> 00:15:23,690 Во предниот. 326 00:15:23,690 --> 00:15:27,760 Така ја елиминира, за среќа, барем еден од случаите кои се користат да се бара 327 00:15:27,760 --> 00:15:30,520 дури и повеќе линии на код, како тоа го правеше минатата година и дури во класа кога ние 328 00:15:30,520 --> 00:15:34,040 зборуваше преку овој вид на работа со луѓето и со некои 329 00:15:34,040 --> 00:15:35,250 вербална псевдо код. 330 00:15:35,250 --> 00:15:39,190 Па во раствор тука, ајде да ја прескокнете над за тоа само за да имаат визуелна на 331 00:15:39,190 --> 00:15:40,480 екранот. 332 00:15:40,480 --> 00:15:42,230 >> Забележите дека ние сме прави следново. 333 00:15:42,230 --> 00:15:45,140 И исто така забележуваме останатите поедноставување беше дека дури и ако тоа е 334 00:15:45,140 --> 00:15:48,280 веќе присутни, така што ова значи дека дури и ако бројот е веќе таму, можете да 335 00:15:48,280 --> 00:15:50,280 само слепо вметнете друга копија од него. 336 00:15:50,280 --> 00:15:52,560 И дека, исто така, беше замислена да биде поедноставување, така што ќе може 337 00:15:52,560 --> 00:15:54,940 се фокусираат на, навистина, некои од повеќе интелектуално интересна дел и 338 00:15:54,940 --> 00:15:58,090 а не само некои дополнителни грешка проверка со оглед на ограничено време. 339 00:15:58,090 --> 00:16:02,880 >> Така што во овој примерок решение, ние додели покажувач на левата рака 340 00:16:02,880 --> 00:16:04,510 страна овде на јазол. 341 00:16:04,510 --> 00:16:07,190 Сега, да сфатат дека покажувачот, како Роб рече, е само 32 бита. 342 00:16:07,190 --> 00:16:09,060 И тоа всушност не содржи адреса, додека не се 343 00:16:09,060 --> 00:16:09,970 додели адресата. 344 00:16:09,970 --> 00:16:13,220 И тоа го правиме на десната страна страна преку Примерок. 345 00:16:13,220 --> 00:16:16,550 Како добар граѓанин, ние се провери дали Примерок не е, всушност, нула, така што 346 00:16:16,550 --> 00:16:18,690 ние не случајно се создаде на segfault тука. 347 00:16:18,690 --> 00:16:22,840 И во секое време да го користите Примерок во животот, ти треба да се проверуваат за ништовни, за да не 348 00:16:22,840 --> 00:16:24,090 имате суптилен бубачка. 349 00:16:24,090 --> 00:16:28,460 >> Тогаш ние се иницијализира дека нула од доделување n и претходната и следната. 350 00:16:28,460 --> 00:16:32,450 И во овој случај тука, јас се иницијализира претходна на нула, затоа што овој нов 351 00:16:32,450 --> 00:16:34,780 јазол ќе биде новиот на почетокот на мојата листа. 352 00:16:34,780 --> 00:16:37,050 Па таму се случува да биде ништо пред него. 353 00:16:37,050 --> 00:16:42,010 И сакам да суштина додаваат постоечка листа на нов јазол од 354 00:16:42,010 --> 00:16:44,700 поставување следната еднаква на самата листа. 355 00:16:44,700 --> 00:16:47,120 Но, јас не сум сторил само уште. 356 00:16:47,120 --> 00:16:51,780 Значи, ако на листата се веќе постоеле, и имаше барем еден јазол 357 00:16:51,780 --> 00:16:57,070 веќе во место, ако ова е листа тука и јас ја внесе нов јазол тука, јас 358 00:16:57,070 --> 00:17:01,840 треба да бидете сигурни дека мојот поранешен јазол укажува наназад мојот нов јазол, 359 00:17:01,840 --> 00:17:04,260 бидејќи ова е, повторно, двојно поврзана листа. 360 00:17:04,260 --> 00:17:05,460 >> Па ние се направи здрав разум чек. 361 00:17:05,460 --> 00:17:10,109 Ако листата не е нула, ако има веќе еден или повеќе јазли таму, тогаш 362 00:17:10,109 --> 00:17:12,470 додадете дека назад референца така да се каже. 363 00:17:12,470 --> 00:17:15,420 А потоа самиот последното нешто што ние треба да се направи е, всушност, ажурирање на глобалната 364 00:17:15,420 --> 00:17:20,329 променлива листата по себе да се истакне на тој нов јазол. 365 00:17:20,329 --> 00:17:21,790 Да. 366 00:17:21,790 --> 00:17:26,579 >> ПУБЛИКАТА: Во стрелката на покажувачот [Нечујни] еднаква на нула, не дека 367 00:17:26,579 --> 00:17:30,420 се справи со список, бидејќи листата е нула? 368 00:17:30,420 --> 00:17:30,596 >> Дејвид Џ MALAN: Не бе. 369 00:17:30,596 --> 00:17:34,500 Тоа е едноставно ми се проактивно внимателно, со тоа ако ова е мојот 370 00:17:34,500 --> 00:17:38,730 оригиналната листа со можеби некои повеќе јазли овде и јас сум вметнување ми 371 00:17:38,730 --> 00:17:42,380 нов јазол овде, таму ќе да биде ништо повеќе од тука. 372 00:17:42,380 --> 00:17:44,720 И сакам да се фати дека идејата со поставување претходно да 373 00:17:44,720 --> 00:17:47,740 нула на новиот јазол. 374 00:17:47,740 --> 00:17:51,410 И веројатно, ако ми кодот е точен и не постои друг начин да се вметне 375 00:17:51,410 --> 00:17:54,970 јазли, освен оваа функција, веројатно, дури и ако веќе има листа 376 00:17:54,970 --> 00:18:00,090 еден или повеќе лимфни јазли во него, веројатно листа, првиот јазол, ќе има 377 00:18:00,090 --> 00:18:02,750 претходната покажувачот на нула себе. 378 00:18:02,750 --> 00:18:03,550 >> Публика: И само follow-up. 379 00:18:03,550 --> 00:18:08,139 Причина што стави покажувачот следната еднаквите Листата е што ги правите на покажувачот 380 00:18:08,139 --> 00:18:13,579 пред листата во кои тоа е покажувајќи на следната, претпоставувам - 381 00:18:13,579 --> 00:18:14,980 Јас Дон - 382 00:18:14,980 --> 00:18:15,450 само Листи? 383 00:18:15,450 --> 00:18:16,400 >> Дејвид Џ MALAN: Токму така. 384 00:18:16,400 --> 00:18:19,400 И така ајде да всушност се разгледа два случаи тука, навистина, иако 385 00:18:19,400 --> 00:18:22,070 цел ќе ги разгледа не е сосема исто како и код. 386 00:18:22,070 --> 00:18:26,250 Но на високо ниво, ако ова претставува листа и ова е 32-битна 387 00:18:26,250 --> 00:18:29,560 покажувачот, наједноставниот сценарио е дека ова е нула од стандардните. 388 00:18:29,560 --> 00:18:33,010 И претпоставувам дека сакате да го вметнете број 50 беше првиот број. 389 00:18:33,010 --> 00:18:37,640 Па ќе одам да се оди напред и да се распределат јазол, кој ќе содржи 390 00:18:37,640 --> 00:18:38,770 три области - 391 00:18:38,770 --> 00:18:42,070 n, претходниот, а следната. 392 00:18:42,070 --> 00:18:44,580 >> Одам да се стави на бројот 50 тука, бидејќи ова ќе биде н. 393 00:18:44,580 --> 00:18:46,130 Ова ќе биде следниот. 394 00:18:46,130 --> 00:18:48,530 И тоа ќе биде претходниот. 395 00:18:48,530 --> 00:18:50,910 И уште па што да правам во овој случај? 396 00:18:50,910 --> 00:18:53,900 Па, јас сум само направено алинеја 1 тука. 397 00:18:53,900 --> 00:18:55,400 Покажувачот N добива n. 398 00:18:55,400 --> 00:18:57,740 Јас сум да кажат, претходните треба да добие нула. 399 00:18:57,740 --> 00:18:59,470 Па ова ќе биде нула. 400 00:18:59,470 --> 00:19:01,365 Тогаш јас ќе одам да се каже следното се случува да добиете листа. 401 00:19:01,365 --> 00:19:05,150 >> И тоа само работи добро. 402 00:19:05,150 --> 00:19:06,500 Ова е нула. 403 00:19:06,500 --> 00:19:10,620 И така сакам да кажам дека, новиот јазол следната поле треба да се добие она што е оваа. 404 00:19:10,620 --> 00:19:12,570 Така што става уште еден null таму. 405 00:19:12,570 --> 00:19:14,510 А потоа последното нешто Јас направите е да проверите тука. 406 00:19:14,510 --> 00:19:17,870 Ако листата не е еднаква на нула, но тоа е еднаква на нула, па ние го прескокнете дека 407 00:19:17,870 --> 00:19:18,470 заедно. 408 00:19:18,470 --> 00:19:23,520 И така сите да направам следно е листа добива покажувач, што сликовито резултира со 409 00:19:23,520 --> 00:19:25,570 слика слично. 410 00:19:25,570 --> 00:19:26,620 Па тоа е едно сценарио. 411 00:19:26,620 --> 00:19:30,490 >> И оној што го бараа за конкретно е ваква ситуација, 412 00:19:30,490 --> 00:19:33,190 каде што веќе имаат еден јазол листа. 413 00:19:33,190 --> 00:19:36,240 И ако се вратам во оригиналната проблем изјава, Следна ние ќе 414 00:19:36,240 --> 00:19:39,320 вметнете го кажам е 34, само за доброто на дискусијата. 415 00:19:39,320 --> 00:19:46,210 Па ќе одам да се само погодно подготви кои овде. 416 00:19:46,210 --> 00:19:47,540 Јас сум само malloced. 417 00:19:47,540 --> 00:19:49,310 Ајде да се претпостави Јас сум проверка за ништовни. 418 00:19:49,310 --> 00:19:51,870 >> Сега, јас ќе одам да се иницијализира n да биде 34. 419 00:19:51,870 --> 00:19:53,040 И ова ќе биде n. 420 00:19:53,040 --> 00:19:54,670 Ова ќе биде следниот. 421 00:19:54,670 --> 00:19:57,100 И тоа ќе биде претходниот. 422 00:19:57,100 --> 00:19:59,370 Ајде да бидете сигурни дека не направив добие оваа наназад. 423 00:19:59,370 --> 00:20:01,110 Претходна прво во дефиницијата. 424 00:20:01,110 --> 00:20:03,070 Дозволете ми да го надминете овој. 425 00:20:03,070 --> 00:20:04,410 Ова е претходен. 426 00:20:04,410 --> 00:20:05,780 Ова е следната. 427 00:20:05,780 --> 00:20:08,620 Иако овие се идентични, нека си го задржи доследни. 428 00:20:08,620 --> 00:20:09,450 >> Претходниот. 429 00:20:09,450 --> 00:20:11,030 Ова е следната. 430 00:20:11,030 --> 00:20:16,310 Па јас сум само malloced мојата забелешка, проверив за ништовни, доделен 34 во јазол. 431 00:20:16,310 --> 00:20:17,570 Претходна добива нула. 432 00:20:17,570 --> 00:20:19,480 Така што ми дава тоа. 433 00:20:19,480 --> 00:20:21,010 Следна добива листа. 434 00:20:21,010 --> 00:20:22,370 Па листата е ова. 435 00:20:22,370 --> 00:20:26,520 Па ова е исто сега како цртање ова Arrow, така што тие укажуваат на еден 436 00:20:26,520 --> 00:20:27,940 во истиот. 437 00:20:27,940 --> 00:20:30,400 И тогаш јас сум проверка, ако листа не е еднаква на нула. 438 00:20:30,400 --> 00:20:31,740 И тоа не е овој пат. 439 00:20:31,740 --> 00:20:35,580 Тогаш јас ќе одам да направите листа претходната добива покажувач. 440 00:20:35,580 --> 00:20:39,700 >> Значи листа претходната добива кон меморија. 441 00:20:39,700 --> 00:20:44,300 Па ова има ефект на ставање графички стрелките тука. 442 00:20:44,300 --> 00:20:46,930 И тоа е добивање малку брановидна, линиите. 443 00:20:46,930 --> 00:20:50,780 И тогаш, на крај, јас се ажурира листа за да се укаже на покажувачот. 444 00:20:50,780 --> 00:20:55,560 Па сега ова укажува на ова момче. 445 00:20:55,560 --> 00:20:57,170 И сега, ајде да направиме еден брз разумност проверка. 446 00:20:57,170 --> 00:20:59,470 >> Тука е листа, која е на глобалната променлива. 447 00:20:59,470 --> 00:21:02,850 Првиот јазол е, всушност, 34, бидејќи Јас сум по стрела. 448 00:21:02,850 --> 00:21:05,210 И тоа е точно, бидејќи сакам да вметнување на почетокот од листата 449 00:21:05,210 --> 00:21:06,070 сите нови јазли. 450 00:21:06,070 --> 00:21:08,860 Неговиот следен поле, ме тера да овој човек. 451 00:21:08,860 --> 00:21:10,710 Ако јас Продолжувам да одам, јас хит следната е нула. 452 00:21:10,710 --> 00:21:11,760 Па нема повеќе листата. 453 00:21:11,760 --> 00:21:14,460 Ако го погоди претходната, да се добие се врати каде што се очекува. 454 00:21:14,460 --> 00:21:16,435 >> Значи се уште има неколку совети, очигледно, да се манипулира. 455 00:21:16,435 --> 00:21:19,870 Но, фактот дека ти беше кажано да се направи ова во постојан пат кога ќе значи само 456 00:21:19,870 --> 00:21:22,910 имаат ограничен број на работи сте дозволено да се направи. 457 00:21:22,910 --> 00:21:24,290 И она што е тој број? 458 00:21:24,290 --> 00:21:25,185 Тоа може да биде еден чекор. 459 00:21:25,185 --> 00:21:25,700 Тоа може да биде два. 460 00:21:25,700 --> 00:21:26,820 Тоа може да биде 1000 чекори. 461 00:21:26,820 --> 00:21:30,500 Но тоа е ограничен, што значи дека не може било каков вид на looping случува 462 00:21:30,500 --> 00:21:32,010 тука, без рекурзија, нема петелки. 463 00:21:32,010 --> 00:21:37,390 Тоа е само што влегов да биде хард-кодирани линии на кодот како што имаме во овој пример. 464 00:21:37,390 --> 00:21:42,330 >> Па следниот проблем 12 побара од нас да заврши спроведувањето на отстранување 465 00:21:42,330 --> 00:21:46,740 под на таков начин што ги отстранува n од листата во линеарно време. 466 00:21:46,740 --> 00:21:48,740 Па имате малку повеќе шаване соба сега. 467 00:21:48,740 --> 00:21:52,380 Може да се претпостави дека N, доколку се присутни во листата, ќе бидат присутни 468 00:21:52,380 --> 00:21:53,340 не повеќе од еднаш. 469 00:21:53,340 --> 00:21:56,770 И дека премногу е замислена да биде квиз-базирани поедноставување на претпоставката, па 470 00:21:56,770 --> 00:21:59,780 дека ако се најде бројот 50 некаде во листата, не направи, исто така 471 00:21:59,780 --> 00:22:02,890 мора да се грижите за продолжуваат да iterate, во потрага по сите можни 472 00:22:02,890 --> 00:22:06,990 Копија од 50, која само ќе се префрлат во некои minutia во ограничено време. 473 00:22:06,990 --> 00:22:10,460 >> Така е и со отстранат, ова беше дефинитивно поголем предизвик и повеќе 474 00:22:10,460 --> 00:22:11,640 кодот да се напише. 475 00:22:11,640 --> 00:22:14,990 Но на прв поглед, искрено, тоа би можело изгледа огромна и како нешто 476 00:22:14,990 --> 00:22:17,060 не постои начин би можеле да имаат излезе со на квизот. 477 00:22:17,060 --> 00:22:22,450 Но, ако ние се фокусира на индивидуалните чекори, се надевам, ќе одеднаш 478 00:22:22,450 --> 00:22:26,060 штрајк вас, кои секоја од овие индивидуални чекори прави очигледно смисла 479 00:22:26,060 --> 00:22:27,080 во ретроспектива. 480 00:22:27,080 --> 00:22:28,200 Па ајде да ги разгледаме. 481 00:22:28,200 --> 00:22:32,570 >> Значи прво, ние се иницијализира покажувачот да биде на листата себе. 482 00:22:32,570 --> 00:22:36,040 Затоа што сакам линеарно време, тоа значи дека Одам да имаат некои јамка. 483 00:22:36,040 --> 00:22:39,730 И заеднички начин да iterate преку јазли во листа структура или било каков вид 484 00:22:39,730 --> 00:22:43,860 на структурата iteratively е да се земе покажувач на предниот дел на податоци 485 00:22:43,860 --> 00:22:46,990 структура и тогаш само на проектот ажурирање тоа и одиме вашиот пат 486 00:22:46,990 --> 00:22:48,650 преку податочна структура. 487 00:22:48,650 --> 00:22:50,040 Па јас ќе одам да направите токму тоа. 488 00:22:50,040 --> 00:22:54,260 >> Додека покажувачот, мојата привремена променлива, не е еднаков на нула, ајде да 489 00:22:54,260 --> 00:22:55,660 оди напред и да се провери. 490 00:22:55,660 --> 00:22:56,910 Никако не можев да добиете среќа? 491 00:22:56,910 --> 00:23:01,740 Е поле n во јазол Јас сум во моментов гледајќи еднаква на 492 00:23:01,740 --> 00:23:03,380 број Го барам? 493 00:23:03,380 --> 00:23:05,410 И ако е така, ајде да направиме нешто. 494 00:23:05,410 --> 00:23:10,020 Сега, забележуваат тоа, ако состојба опкружува целата 495 00:23:10,020 --> 00:23:11,520 следниве линии на код. 496 00:23:11,520 --> 00:23:14,610 Ова е единственото нешто што можам се грижат за тоа - изнаоѓање на број во прашање. 497 00:23:14,610 --> 00:23:18,010 Па нема друг, кој го поедноставува работи концептуално малку. 498 00:23:18,010 --> 00:23:22,040 >> Но сега, сфатив, и вие би можеле да имаат само реализира ова откако размислување 499 00:23:22,040 --> 00:23:24,720 преку малку, има всушност два случаи тука. 500 00:23:24,720 --> 00:23:28,060 Еден е местото каде што јазол е во почетокот на листата, која е 501 00:23:28,060 --> 00:23:31,040 малку досадни, затоа што тоа е посебен случај, бидејќи ќе треба да се справи 502 00:23:31,040 --> 00:23:33,340 со оваа работа, што е единствениот аномалија. 503 00:23:33,340 --> 00:23:35,720 Секаде на друго место во листата, тоа е иста работа. 504 00:23:35,720 --> 00:23:38,050 Има претходната јазол и следната јазол, претходниот јазол, следниот јазол. 505 00:23:38,050 --> 00:23:40,940 Но, овој човек е малку посебна ако тој е на почетокот. 506 00:23:40,940 --> 00:23:48,710 >> Па ако покажувачот еднаква на листа себе, па ако сум на почетокот на 507 00:23:48,710 --> 00:23:53,960 листата и сум ги нашол n, ми треба да се направи неколку работи. 508 00:23:53,960 --> 00:23:59,230 Еден, јас треба да се промени листа за да укажуваат на следното поле, 50. 509 00:23:59,230 --> 00:24:01,270 Па претпоставувам дека јас се обидувам да се отстрани 34. 510 00:24:01,270 --> 00:24:03,560 Па овој човек мора да оди далеку во само еден миг. 511 00:24:03,560 --> 00:24:07,210 >> Па ќе одам да се каже, листа добива покажувачот следната. 512 00:24:07,210 --> 00:24:08,570 Па, ова е покажувач. 513 00:24:08,570 --> 00:24:10,360 Следна е да се покажува овде. 514 00:24:10,360 --> 00:24:17,470 Значи ова се менува овој стрелките право сега да се укаже на овој човек тука. 515 00:24:17,470 --> 00:24:19,580 Сега, сетете се, имаме привремена променлива. 516 00:24:19,580 --> 00:24:23,520 Па не сме сираче било јазли, бидејќи исто така имам овој човек во мојата 517 00:24:23,520 --> 00:24:25,010 имплементација на отстранување. 518 00:24:25,010 --> 00:24:29,600 Па сега, ако листата по себе не е нула, Јас треба да се поправи малку нешто. 519 00:24:29,600 --> 00:24:32,690 >> Ми треба сега да бидете сигурни дека ова стрела, кој е претходно укажува 520 00:24:32,690 --> 00:24:36,830 50-34, ова мора да си оди, бидејќи ако јас се обидувам да се ослободи 521 00:24:36,830 --> 00:24:41,910 на 34, 50 имале подобро да не се одржи било вид на back однос на тоа како 522 00:24:41,910 --> 00:24:42,820 стрелка предложи. 523 00:24:42,820 --> 00:24:44,820 Па јас само направив оваа линија. 524 00:24:44,820 --> 00:24:46,520 Па тогаш сум се направи. 525 00:24:46,520 --> 00:24:48,040 Тој случај е всушност прилично лесно. 526 00:24:48,040 --> 00:24:51,010 Секое отсечено чело на листата е релативно јасна. 527 00:24:51,010 --> 00:24:52,980 >> За жал, не е тоа досадни друго блок. 528 00:24:52,980 --> 00:24:56,170 Па сега, морам да го разгледа случајот каде што има нешто во средината. 529 00:24:56,170 --> 00:24:59,880 Но тоа не е премногу страшно, освен за синтакса како оваа. 530 00:24:59,880 --> 00:25:03,080 Значи, ако јас не сум на почетокот на листа, јас сум некаде во средината. 531 00:25:03,080 --> 00:25:08,160 И оваа линија тука е велејќи дека, почетокот на она што јазол сте во. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Оди до следното поле претходната јазол и точка дека на покажувачот. 534 00:25:18,550 --> 00:25:20,390 >> Да го направиме ова сликовито. 535 00:25:20,390 --> 00:25:21,640 Тоа беше добивање комплицирано. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Па ако имам претходната полиња тука - ајде да го сторат тоа - следната полиња тука. 538 00:25:37,990 --> 00:25:41,200 Одам да се поедностави мојот совети, а од нацрта цела група на 539 00:25:41,200 --> 00:25:45,710 работите и назад crisscrossing едни со други. 540 00:25:45,710 --> 00:25:50,870 И сега, да речеме ова е 1, 2, 3 за доброто на дискусијата, дури и 541 00:25:50,870 --> 00:25:53,410 иако тоа не се редат со проблемот е во прашање. 542 00:25:53,410 --> 00:25:55,900 >> Па овде е мојата поврзана листа. 543 00:25:55,900 --> 00:25:59,300 Јас се обидувам да се отстрани два во овој особено верзија на приказната. 544 00:25:59,300 --> 00:26:01,960 Па јас нема покажувач на се укажува на овој човек. 545 00:26:01,960 --> 00:26:03,315 Значи ова е кон меморија. 546 00:26:03,315 --> 00:26:04,530 Тој покажува тука. 547 00:26:04,530 --> 00:26:07,170 Ова е листа, која постои на глобално ниво како порано. 548 00:26:07,170 --> 00:26:09,200 И тој е покажувајќи тука, без разлика што. 549 00:26:09,200 --> 00:26:10,800 И сега, јас се обидувам да се отстрани два. 550 00:26:10,800 --> 00:26:13,850 >> Па ако покажувачот е да се покажува тука, јас сум ќе следат, очигледно, 551 00:26:13,850 --> 00:26:17,110 претходната покажувач, што ме става во 1. 552 00:26:17,110 --> 00:26:22,290 Јас сум тогаш случува да се каже дека следната поле, што ме доведува во текот на оваа 553 00:26:22,290 --> 00:26:25,410 кутија тука, се случува да се еднакви покажувачот следната. 554 00:26:25,410 --> 00:26:28,400 Значи, ако овој покажувач, ова е следната. 555 00:26:28,400 --> 00:26:31,840 Тоа значи дека овој стрелките потреби да се укаже на овој човек. 556 00:26:31,840 --> 00:26:35,140 >> Па што таа линија на кодот има само направи е малку од ова. 557 00:26:35,140 --> 00:26:37,500 И сега, ова е гледа како чекор во вистинската насока. 558 00:26:37,500 --> 00:26:41,390 Ние во суштина сакаат да режа 2 од на средината на 1 и 3. 559 00:26:41,390 --> 00:26:44,400 Па тоа го прави смисла дека ние сакаме да пат овој покажувач околу неа. 560 00:26:44,400 --> 00:26:50,400 Значи ова следната линија е проверка ако покажувачот Следниот не е нула, има 561 00:26:50,400 --> 00:26:54,200 навистина некој на правото на 2, тоа значи дека ние, исто така, треба да се направи 562 00:26:54,200 --> 00:26:55,850 малку парченце тука. 563 00:26:55,850 --> 00:27:00,590 >> Па јас сега треба да го следат овој покажувач и ажурирање на претходните покажувачот на 564 00:27:00,590 --> 00:27:05,410 овој човек да се направи малку на заобиколи тука поентата тука. 565 00:27:05,410 --> 00:27:07,100 И сега, визуелно ова е убаво. 566 00:27:07,100 --> 00:27:11,930 Тоа е малку неуредна во кои има никој посочувајќи на 2 повеќе. 567 00:27:11,930 --> 00:27:13,600 2 е да се покажува кон лево. 568 00:27:13,600 --> 00:27:14,980 И 2 е да се покажува кон десно. 569 00:27:14,980 --> 00:27:17,480 Но тој може да направи она што тој сака, затоа што тој е за да се ослободи. 570 00:27:17,480 --> 00:27:19,480 И тоа не е важно она што тие вредности се веќе. 571 00:27:19,480 --> 00:27:23,040 >> Она што е важно е дека останатите момци се рутирање над 572 00:27:23,040 --> 00:27:24,280 и под него сега. 573 00:27:24,280 --> 00:27:25,810 И навистина, тоа е она што го правиме понатаму. 574 00:27:25,810 --> 00:27:29,360 Ние слободен покажувач, што значи дека ние ја каже оперативен систем, вие сте добредојдени 575 00:27:29,360 --> 00:27:30,906 да бараат враќање на тоа. 576 00:27:30,906 --> 00:27:34,900 А потоа на крај, ние се вратат. 577 00:27:34,900 --> 00:27:37,220 Друго имплицитно, ако ние се уште не се вратени, 578 00:27:37,220 --> 00:27:38,290 ние мора да ги бараме. 579 00:27:38,290 --> 00:27:41,485 Па покажувачот еднаква на покажувачот следната само значи се движат овој човек тука. 580 00:27:41,485 --> 00:27:42,600 Се движат овој човек тука. 581 00:27:42,600 --> 00:27:45,400 Се движат овој човек тука ако, всушност, ние не се најде бројот 582 00:27:45,400 --> 00:27:46,960 ние сме во потрага по уште. 583 00:27:46,960 --> 00:27:49,630 >> Па искрено, тоа изгледа сосема големо, мислам, во прво 584 00:27:49,630 --> 00:27:52,180 поглед, особено ако се бореше со ова во текот на квизот потоа види 585 00:27:52,180 --> 00:27:52,850 нешто како ова. 586 00:27:52,850 --> 00:27:55,050 А ти си туп на грбот. 587 00:27:55,050 --> 00:27:57,080 Па, не постои начин би можел да има излезе со дека на квизот. 588 00:27:57,080 --> 00:28:00,470 Но јас би рекол, можете да ако се скрши го надолу во овие индивидуални 589 00:28:00,470 --> 00:28:04,400 случаи и само оди преку неа внимателно, иако, очигледно, под 590 00:28:04,400 --> 00:28:06,300 стресни околности. 591 00:28:06,300 --> 00:28:09,470 >> За среќа, сликата направена сè што посреќни. 592 00:28:09,470 --> 00:28:11,050 Вие би можеле да се подготви овој во било кој број на начини. 593 00:28:11,050 --> 00:28:12,760 Вие не треба да го стори crisscrossing нешто овде. 594 00:28:12,760 --> 00:28:14,520 Вие би можеле да го направи тоа со директно линии вака. 595 00:28:14,520 --> 00:28:18,790 Но главното обележје на овој проблем, во Генерално, беше да се сфати дека 596 00:28:18,790 --> 00:28:22,060 слика на крајот треба да се погледне малку нешто како ова, бидејќи 597 00:28:22,060 --> 00:28:25,030 постојана време се подразбира дека ќе ги задржи притискање и притискање и притискање на 598 00:28:25,030 --> 00:28:29,900 нови јазли на почетокот на листата. 599 00:28:29,900 --> 00:28:31,960 Било какви прашања? 600 00:28:31,960 --> 00:28:34,565 Веројатно најголемиот предизвик на сигурно кодирање прашања. 601 00:28:34,565 --> 00:28:37,690 >> Публика: Така е листа слични на главата во претходните примери. 602 00:28:37,690 --> 00:28:39,640 >> Дејвид Џ MALAN: Точно, точно. 603 00:28:39,640 --> 00:28:43,130 Само друго име за глобална променлива. 604 00:28:43,130 --> 00:28:44,380 Ширум светот што? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> Роб BOWDEN: OK. 607 00:28:49,730 --> 00:28:52,020 Значи ова е една, каде што мораше да напише став. 608 00:28:52,020 --> 00:28:56,060 Некои луѓе напиша есеи за ова прашање. 609 00:28:56,060 --> 00:29:00,230 Но вие само треба да ги користат овие шест услови за да се опише она што се случува кога 610 00:29:00,230 --> 00:29:02,440 ќе се обидат да се поврзеш facebook.com. 611 00:29:02,440 --> 00:29:07,930 Па јас само ќе разговара во текот на процесот користење на сите овие термини. 612 00:29:07,930 --> 00:29:11,290 Па во нашата интернет пребарувач, ние тип facebook.com и притиснете Enter. 613 00:29:11,290 --> 00:29:17,280 Значи нашата интернет пребарувач се случува да се изгради HTTP барање дека тоа се случува да се испрати 614 00:29:17,280 --> 00:29:22,220 преку некој процес на Facebook за Фејсбук за да одговори на нас со 615 00:29:22,220 --> 00:29:24,450 HTML кодот на својата страница. 616 00:29:24,450 --> 00:29:28,800 >> Значи она што е процес со кој HTTP барање 617 00:29:28,800 --> 00:29:30,730 всушност добива на Facebook? 618 00:29:30,730 --> 00:29:32,790 Значи прво, ние треба да се преведе Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Па само дадено името Facebook.com, каде што всушност го прави HTTP барање 620 00:29:38,780 --> 00:29:39,940 треба да се оди? 621 00:29:39,940 --> 00:29:44,120 Значи ние треба да се преведе Facebook.com до IP адресата, која уникатно 622 00:29:44,120 --> 00:29:47,620 се идентификува она што машина ние всушност сакате да ја пратите оваа барање до. 623 00:29:47,620 --> 00:29:49,310 Вашиот лаптоп има IP адреса. 624 00:29:49,310 --> 00:29:52,240 Нешто поврзано со интернет има IP адреса. 625 00:29:52,240 --> 00:29:59,030 >> Па DNS, Domain Name System, кој е она што се случува да се справи со превод 626 00:29:59,030 --> 00:30:03,750 од facebook.com за да се IP адресата, кој вие всушност сакате да го контактирате. 627 00:30:03,750 --> 00:30:08,075 Па ние се поврзеш со DNS серверите и да речеме, што е facebook.com? 628 00:30:08,075 --> 00:30:16,560 Таа вели дека, ох, тоа е IP адреса 190,212 нешто, нешто, нешто. 629 00:30:16,560 --> 00:30:16,900 Во ред е. 630 00:30:16,900 --> 00:30:18,850 Сега, знам што машина Сакам да се јавите. 631 00:30:18,850 --> 00:30:22,360 >> Па тогаш ќе ја испратите вашата HTTP барање во текот на таа машина. 632 00:30:22,360 --> 00:30:24,140 Па, како тоа дојде до таа машина? 633 00:30:24,140 --> 00:30:27,200 Па, на барање оди од рутер да рутер бие. 634 00:30:27,200 --> 00:30:32,630 Се сеќавам на пример во класа, каде што бевме сведоци на пат дека 635 00:30:32,630 --> 00:30:35,340 пакети зеде кога се обидовме да се комуницира. 636 00:30:35,340 --> 00:30:38,460 Видовме тоа скокаат над Атлантикот Океанот во еден момент или whatever. 637 00:30:38,460 --> 00:30:42,820 >> Па на последниот мандат порта. 638 00:30:42,820 --> 00:30:46,520 Значи ова е сега на вашиот компјутер. 639 00:30:46,520 --> 00:30:49,970 Можете да имате повеќе работи во моментов комуникација со интернет. 640 00:30:49,970 --> 00:30:53,730 За да можам да се работи, да речеме, Skype. 641 00:30:53,730 --> 00:30:55,670 Јас би можеле да имаат веб-пребарувач е отворен. 642 00:30:55,670 --> 00:30:59,010 Јас би можеле да имаат нешто што torrenting датотеки. 643 00:30:59,010 --> 00:31:00,880 Значи сите овие нешта се комуникација со 644 00:31:00,880 --> 00:31:02,600 интернет на некој начин. 645 00:31:02,600 --> 00:31:08,070 >> Значи, кога вашиот компјутер добива некои податоци од интернет, како тоа го прави 646 00:31:08,070 --> 00:31:10,130 знаете што апликација всушност сака на податоци? 647 00:31:10,130 --> 00:31:12,610 Како не го знае дали овој податоци е наменета за 648 00:31:12,610 --> 00:31:16,070 torrenting пријавата што е спротивно на веб прелистувач? 649 00:31:16,070 --> 00:31:20,980 Значи ова е целта на пристаништа во кои сите овие апликации имаат 650 00:31:20,980 --> 00:31:22,720 тврди порта на вашиот компјутер. 651 00:31:22,720 --> 00:31:27,580 Така да твојот веб пребарувач вели, еј, Јас сум слуша на порта 1000. 652 00:31:27,580 --> 00:31:32,240 И вашиот torrenting програма е велејќи дека, Јас сум слуша на порта 3000. 653 00:31:32,240 --> 00:31:34,770 И Skype вели, јас сум користење пристаниште 4000. 654 00:31:34,770 --> 00:31:41,950 >> Па кога ќе добие некои податоци што му припаѓа на еден од овие апликации, податоци 655 00:31:41,950 --> 00:31:45,510 е означена со кој порт тоа всушност треба да бидат испратени заедно да. 656 00:31:45,510 --> 00:31:47,950 Значи ова вели, ох, јас припаѓам да пристаниште 1000. 657 00:31:47,950 --> 00:31:50,950 Знам тогаш јас треба да го проследи ова заедно со мојот веб прелистувач. 658 00:31:50,950 --> 00:31:56,440 Значи причината тоа е релевантно тука е дека на веб сервери, имаат тенденција да се 659 00:31:56,440 --> 00:31:58,240 слушате на порта 80. 660 00:31:58,240 --> 00:32:02,420 Па кога ќе се јавите Facebook.com, јас сум комуникација со некои машина. 661 00:32:02,420 --> 00:32:06,390 Но јас треба да се каже кој порт на кој машина Сакам да комуницира со. 662 00:32:06,390 --> 00:32:09,160 И веб сервери имаат тенденција да бидат слушање на порта 80. 663 00:32:09,160 --> 00:32:14,010 >> Ако сакаат, тие би можеле да го постави така што наведува како на порта 7000. 664 00:32:14,010 --> 00:32:19,090 А потоа во веб прелистувачот, можев рачен тип Facebook.com: 7000 665 00:32:19,090 --> 00:32:24,600 испрати барање до пристаништето 7000 на Фејсбук веб серверот. 666 00:32:24,600 --> 00:32:26,820 >> Дејвид Џ MALAN: И во овој случај, дури и иако ние не бара луѓе 667 00:32:26,820 --> 00:32:30,000 се спомене и тоа, во овој случај, на која порта би барање всушност, оди на? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Обидете се повторно. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Токму така. 672 00:32:44,300 --> 00:32:47,960 Не барам за тоа, но суптилноста дека е таму никој последен. 673 00:32:47,960 --> 00:32:51,770 >> Роб BOWDEN: Значи HTTPS, бидејќи тоа е слушање специјално за 674 00:32:51,770 --> 00:32:55,180 шифрирана, тоа е на порта 4430. 675 00:32:55,180 --> 00:32:57,680 >> Публика: и пораки се 25, нели? 676 00:32:57,680 --> 00:33:00,670 >> Дејвид Џ MALAN: Излезни пораки, 25, Да. 677 00:33:00,670 --> 00:33:03,760 >> Роб BOWDEN: Јас дури и не знаат повеќето од на - сите на долниот оние со тенденција да биде 678 00:33:03,760 --> 00:33:06,310 резервирана за нештата. 679 00:33:06,310 --> 00:33:09,260 Мислам дека сè под 1024 е резервирана. 680 00:33:09,260 --> 00:33:13,450 >> ПУБЛИКАТА: Зошто рековте 3 е погрешен број? 681 00:33:13,450 --> 00:33:18,820 >> Роб BOWDEN: Бидејќи во IP адреса, има четири групации на цифри. 682 00:33:18,820 --> 00:33:21,090 И тие се 0-255. 683 00:33:21,090 --> 00:33:28,060 Па 192.168.2.1 е заеднички локалната мрежа IP адреса. 684 00:33:28,060 --> 00:33:30,840 Забележите и сите од нив се помалку од 255. 685 00:33:30,840 --> 00:33:33,570 Па кога почнав со 300, што не може да можеби имаат 686 00:33:33,570 --> 00:33:35,210 е еден од броеви. 687 00:33:35,210 --> 00:33:38,170 >> Дејвид Џ MALAN: Но, тоа глупо клип од - тоа беше CSI, каде што имаше 688 00:33:38,170 --> 00:33:39,970 број што беше премногу голем за IP адреса. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> Роб BOWDEN: Било какви прашања за тоа? 691 00:33:46,110 --> 00:33:51,710 Следниот, па целосна промена во тема, но ние имаме овој PHP низа за 692 00:33:51,710 --> 00:33:53,270 куќи во четири. 693 00:33:53,270 --> 00:33:56,360 И ние имаме неподреден список. 694 00:33:56,360 --> 00:33:59,550 И ние сакаме да испечатите секој елемент од листата само што содржи името на куќата. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Па ние имаме foreach циклусот. 697 00:34:11,870 --> 00:34:17,540 Значи се сеќавам, синтаксата е foreach низа како ставка во низа. 698 00:34:17,540 --> 00:34:22,360 Па преку секоја повторување на јамка, куќа се случува да се земе на една од 699 00:34:22,360 --> 00:34:24,060 вредности во внатрешноста на низата. 700 00:34:24,060 --> 00:34:26,530 >> На првиот повторување, куќа ќе биде Кабот куќа. 701 00:34:26,530 --> 00:34:30,370 На втората итерација, куќа ќе биде Куриерски Дом и така натаму. 702 00:34:30,370 --> 00:34:34,370 Значи за секој quad како куќа, ние сме само ќе се печати - 703 00:34:34,370 --> 00:34:37,250 Можете исто така би можеле да имаат повтори - 704 00:34:37,250 --> 00:34:42,199 на елемент во листата, а потоа името на куќата а потоа ја затвори елемент во листата. 705 00:34:42,199 --> 00:34:45,210 На тркалезните загради се опционални тука. 706 00:34:45,210 --> 00:34:49,480 >> А потоа ние, исто така, рече дека во прашање себе, не заборавајте да се затвори 707 00:34:49,480 --> 00:34:50,770 неподреден список таг. 708 00:34:50,770 --> 00:34:53,949 Значи ние треба да излезете PHP на владата со цел да го направите тоа. 709 00:34:53,949 --> 00:35:00,280 Или би можеле да се повтори затвори неподреден список таг. 710 00:35:00,280 --> 00:35:02,380 >> Дејвид Џ MALAN: Исто така во ред тука ќе да се да се користи старата школа за 711 00:35:02,380 --> 00:35:07,340 јамка со $ i = 0 0 и користење точки да дознаам должината на зраци. 712 00:35:07,340 --> 00:35:09,240 Целосно во ред, само малку wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> Публика: Значи, ако си одеше да [Нечујни], ќе се направи - 715 00:35:14,742 --> 00:35:16,734 Го заборавам она јамка [нечујни] е. 716 00:35:16,734 --> 00:35:21,380 Ќе ви $ quad заградата јас? 717 00:35:21,380 --> 00:35:21,850 >> Дејвид Џ MALAN: Токму така. 718 00:35:21,850 --> 00:35:23,100 Да, точно. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> Роб BOWDEN: Нешто друго? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> Дејвид Џ MALAN: Во ред. 723 00:35:32,010 --> 00:35:32,300 Размени. 724 00:35:32,300 --> 00:35:38,290 Па имаше гроздовете на одговори можно за секоја од нив. 725 00:35:38,290 --> 00:35:40,510 Ние бевме навистина само барате нешто релевантни за главата и 726 00:35:40,510 --> 00:35:41,100 недостатоци. 727 00:35:41,100 --> 00:35:44,830 И бројот 16 прашав, проверување на корисниците влез клиент-страна, како со JavaScript, 728 00:35:44,830 --> 00:35:47,280 наместо на страна на серверот, како и со PHP. 729 00:35:47,280 --> 00:35:49,450 Значи она што е наопаку на прави клиент-страна? 730 00:35:49,450 --> 00:35:53,780 >> Па, една од работите што предлага е дека ќе се намали латентност, затоа што 731 00:35:53,780 --> 00:35:56,750 не мора да се мачат да се јавите на серверот, која може да потрае неколку 732 00:35:56,750 --> 00:36:00,390 милисекунди или дури неколку секунди преку избегнување тоа и само 733 00:36:00,390 --> 00:36:04,670 потврдување на корисниците влез клиентот-страна од активира он-достават управувачот и 734 00:36:04,670 --> 00:36:06,650 само проверка, дали тие тип нешто за името? 735 00:36:06,650 --> 00:36:08,080 Дали тие напишеш нешто во за е-мејл адреса? 736 00:36:08,080 --> 00:36:10,950 Дали тие избираат дом од опаѓачкото мени? 737 00:36:10,950 --> 00:36:14,360 >> Можете да ги даде моментален фидбек со користење на гигахерците компјутер 738 00:36:14,360 --> 00:36:16,770 или што и тие го имаат тоа е всушност на нивната маса. 739 00:36:16,770 --> 00:36:19,310 Па тоа е само подобро корисничко искуство обично. 740 00:36:19,310 --> 00:36:24,460 Но недостатоци на тоа клиент-страна валидација, ако го направи тоа без, исто така, 741 00:36:24,460 --> 00:36:29,860 прави од страна на серверот валидација е дека повеќето никого излегува од CS50 знае 742 00:36:29,860 --> 00:36:33,980 дека само може да испрати било податоци што сакате на сервер кој било број на начини. 743 00:36:33,980 --> 00:36:37,030 Искрено, во повеќето секој интернет пребарувач, можете да кликнете наоколу во подесувањата и само 744 00:36:37,030 --> 00:36:40,110 исклучи го вклучите Javascript, која би, Затоа, се оневозможи било каква форма на 745 00:36:40,110 --> 00:36:41,080 валидација. 746 00:36:41,080 --> 00:36:44,460 >> Но вие исто така може да се сети дека дури и јас не некои arcane работи во класа користење 747 00:36:44,460 --> 00:36:47,790 телнет и всушност преправајќи се биде прелистувачот со испраќање добие 748 00:36:47,790 --> 00:36:49,240 барања до серверот. 749 00:36:49,240 --> 00:36:51,030 И тоа е, секако, не користење на било кој вклучите Javascript-. 750 00:36:51,030 --> 00:36:53,290 Тоа е само мене пишување команди на тастатурата. 751 00:36:53,290 --> 00:36:57,410 Значи, навистина, секој програмер во рамките доволно удобност со веб и HTTP 752 00:36:57,410 --> 00:37:01,690 може да се испрати сите податоци тој или таа сака на серверот без валидација. 753 00:37:01,690 --> 00:37:05,470 И ако вашиот сервер не е, исто така, проверка, не тие ми даде името, е 754 00:37:05,470 --> 00:37:08,930 ова всушност валидна емаил адреса, дали тие избираат дом, може да заврши 755 00:37:08,930 --> 00:37:12,800 до вметнување лажни или само празни податоци во вашата база на податоци, која, најверојатно, 756 00:37:12,800 --> 00:37:15,450 нема да биде добра работа, ако сте биле под претпоставка дека тоа беше таму. 757 00:37:15,450 --> 00:37:16,770 >> Па ова е досадно реалност. 758 00:37:16,770 --> 00:37:19,890 Но, во принцип, клиент-страна валидација е одлично. 759 00:37:19,890 --> 00:37:21,810 Но тоа значи двојно повеќе работа. 760 00:37:21,810 --> 00:37:25,970 Иако таму постојат различни библиотеки, го вклучите Javascript-библиотеки за 761 00:37:25,970 --> 00:37:28,830 пример, кои го прават тоа многу, многу помалку од главоболка. 762 00:37:28,830 --> 00:37:31,940 И можете да повторна употреба на некои од кодот од страна на серверот, клиентот-страна. 763 00:37:31,940 --> 00:37:35,980 Но не сфаќаат дека тоа е типично дополнителна работа. 764 00:37:35,980 --> 00:37:36,415 Да. 765 00:37:36,415 --> 00:37:37,792 >> Публика: Значи, ако ние само рече помалку безбеден - 766 00:37:37,792 --> 00:37:39,205 >> Дејвид Џ MALAN: [се смее] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Тие се секогаш толку потешко од нив да се судат. 769 00:37:43,105 --> 00:37:44,480 >> Роб BOWDEN: Тоа би биле прифатени. 770 00:37:44,480 --> 00:37:44,810 >> Дејвид Џ MALAN: Што? 771 00:37:44,810 --> 00:37:45,810 >> Роб BOWDEN: Јас создаде овој проблем. 772 00:37:45,810 --> 00:37:46,735 Кои би биле прифатени. 773 00:37:46,735 --> 00:37:47,220 >> Дејвид Џ MALAN: Да. 774 00:37:47,220 --> 00:37:47,830 >> ПУБЛИКАТА: Кул. 775 00:37:47,830 --> 00:37:51,770 >> Роб BOWDEN: Но, ние не го прифати за првиот - 776 00:37:51,770 --> 00:37:53,630 добро, она што ние баравме е нешто како не треба да се 777 00:37:53,630 --> 00:37:55,270 комуницира со серверот. 778 00:37:55,270 --> 00:37:58,355 Ние не го прифати само побрзо. 779 00:37:58,355 --> 00:38:00,080 >> Публика: Што е со не ја превчитате страница? 780 00:38:00,080 --> 00:38:00,430 >> Роб BOWDEN: Да. 781 00:38:00,430 --> 00:38:03,000 Тоа беше прифатен одговор. 782 00:38:03,000 --> 00:38:06,300 >> Дејвид Џ MALAN: ништо, каде што се чувствува тоа е поверојатно отколку не, најверојатно, 783 00:38:06,300 --> 00:38:09,780 дека ти знаеше што сте биле велејќи, која е тешка 784 00:38:09,780 --> 00:38:13,500 линија за да се подготви понекогаш. 785 00:38:13,500 --> 00:38:16,000 Користење на поврзана листа, наместо на низа да се одржи 786 00:38:16,000 --> 00:38:17,590 Подредена листа на цели броеви. 787 00:38:17,590 --> 00:38:21,000 Па наопаку, ние често се цитираат со поврзани листи кои ги мотивираше нивните целата 788 00:38:21,000 --> 00:38:22,370 Воведувањето беше добиете динамика. 789 00:38:22,370 --> 00:38:23,030 Тие може да расте. 790 00:38:23,030 --> 00:38:23,950 Тие може да се намали. 791 00:38:23,950 --> 00:38:27,370 Значи, вие не треба да скокаат преку карики за да всушност се создаде повеќе меморија 792 00:38:27,370 --> 00:38:28,140 со низа. 793 00:38:28,140 --> 00:38:30,310 Или не треба да се само велат, извинете, корисникот. 794 00:38:30,310 --> 00:38:31,410 Низата е исполнет. 795 00:38:31,410 --> 00:38:35,850 Па динамичен раст на листата. 796 00:38:35,850 --> 00:38:37,210 А недостатоци иако на поврзани листи? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> ПУБЛИКАТА: Тоа е линеарна. 799 00:38:43,356 --> 00:38:45,800 Пребарување на поврзана листа е линеарна наместо на она што ќе се логирам 800 00:38:45,800 --> 00:38:46,360 >> Дејвид Џ MALAN: Токму така. 801 00:38:46,360 --> 00:38:50,160 Пребарување на поврзана листа е линеарна, дури и ако тоа е сортирана, затоа што може 802 00:38:50,160 --> 00:38:53,170 само следете ги овие трошки од леб, овие совети, од почетокот на листата 803 00:38:53,170 --> 00:38:53,570 до крај. 804 00:38:53,570 --> 00:38:57,970 Вие не може да потпора случаен пристап и, Така, бинарни пребарување, дури и ако тоа е 805 00:38:57,970 --> 00:39:00,740 подредени, дека можете да направи со низа. 806 00:39:00,740 --> 00:39:02,390 И таму е исто така уште еден трошок. 807 00:39:02,390 --> 00:39:02,966 Да. 808 00:39:02,966 --> 00:39:03,800 >> ПУБЛИКАТА: Меморија неефикасна? 809 00:39:03,800 --> 00:39:04,130 >> Дејвид Џ MALAN: Да. 810 00:39:04,130 --> 00:39:06,940 Па, јас не би нужно велат неефикасни. 811 00:39:06,940 --> 00:39:10,110 Но тоа не ве чини повеќе меморија, затоа што треба 32 бита за секој 812 00:39:10,110 --> 00:39:13,400 јазол за дополнителни покажувач, во барем за одделно поврзана листа. 813 00:39:13,400 --> 00:39:16,660 Сега, ако сте само чување на цели броеви и сте додавање на покажувачот, тоа е 814 00:39:16,660 --> 00:39:17,830 всушност вид на не-тривијални. 815 00:39:17,830 --> 00:39:19,340 Тоа е удвојување на износот на меморија. 816 00:39:19,340 --> 00:39:22,330 Но, во реалноста, ако сте чување на поврзани листа на structs дека би можеле да имаат 817 00:39:22,330 --> 00:39:25,540 8 бајти, 16 бајти, па дури и повеќе Освен тоа, можеби е помалку 818 00:39:25,540 --> 00:39:26,500 на маргиналните трошоци. 819 00:39:26,500 --> 00:39:28,320 Но тоа е цената сеедно. 820 00:39:28,320 --> 00:39:31,880 Значи, која било од тие ќе си е парична казна како негативни страни. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Користење на PHP, наместо Ц за да напишете командната линија програма. 823 00:39:36,100 --> 00:39:41,890 Па еве, тоа е често побрзо да се користи јазик како PHP или Ruby или Пајтон. 824 00:39:41,890 --> 00:39:43,700 Вие само брзо отворање до уредувач на текст. 825 00:39:43,700 --> 00:39:45,900 Имаш многу повеќе функции достапни за вас. 826 00:39:45,900 --> 00:39:49,325 PHP има кујна со мијалник на функции, додека во Ц, 827 00:39:49,325 --> 00:39:50,420 имаат многу, многу малку. 828 00:39:50,420 --> 00:39:53,820 Всушност, момци знаат на потешкиот начин дека немате хеш табели. 829 00:39:53,820 --> 00:39:55,000 Вие не се поврзани листи. 830 00:39:55,000 --> 00:39:57,470 Ако сакате оние, што треба да ги имплементира себе. 831 00:39:57,470 --> 00:40:00,950 >> Така што едно главата на PHP или навистина било толкува јазик е брзината 832 00:40:00,950 --> 00:40:02,920 со кој можете да се напише кодот. 833 00:40:02,920 --> 00:40:06,660 Но недостатоци, видовме ова кога ќе се брзо крави до misspeller 834 00:40:06,660 --> 00:40:11,780 имплементација во предавање користење на PHP, е дека со користење на толкува јазик 835 00:40:11,780 --> 00:40:13,570 обично побавно. 836 00:40:13,570 --> 00:40:18,420 И видовме дека очигледно со се зголеми во време од 0,3 секунди за да 3 837 00:40:18,420 --> 00:40:24,440 секунди, бидејќи на толкување кои, всушност, се случува. 838 00:40:24,440 --> 00:40:27,060 >> Друга главата е во тоа што не мора да се компајлира. 839 00:40:27,060 --> 00:40:30,130 Па затоа, исто така, го забрзува развојот патем, затоа што немаат 840 00:40:30,130 --> 00:40:31,360 два чекори за водење на програма. 841 00:40:31,360 --> 00:40:32,140 Вие само треба еден. 842 00:40:32,140 --> 00:40:35,260 И така тоа е доста релевантни, како и. 843 00:40:35,260 --> 00:40:38,450 Користење на SQL база на податоци, наместо на CSV датотека за складирање на податоци. 844 00:40:38,450 --> 00:40:40,230 Па SQL база на податоци се користи за pset7. 845 00:40:40,230 --> 00:40:42,060 CSV датотеки не сте го користите многу. 846 00:40:42,060 --> 00:40:45,960 Но го користи посредно во pset7 како и од разговорот со Јаху финансии. 847 00:40:45,960 --> 00:40:49,330 >> Но CSV е исто како една датотека Excel, но супер едноставен, каде што колони се 848 00:40:49,330 --> 00:40:54,010 само demarked со запирки во внатрешноста на инаку текстуална датотека. 849 00:40:54,010 --> 00:40:56,740 И со помош на SQL база на податоци е малку повеќе привлечни. 850 00:40:56,740 --> 00:41:00,060 Тоа е главата, затоа што се работи како да изберете и вметнување и бришење. 851 00:41:00,060 --> 00:41:03,790 И ќе добиете, веројатно, индекси кои MySQL и други бази на податоци, како 852 00:41:03,790 --> 00:41:07,510 Oracle, се изгради за вас во меморија, која значи дека вашиот изберете веројатно не е 853 00:41:07,510 --> 00:41:09,000 ќе биде линеарна врвот до дното. 854 00:41:09,000 --> 00:41:11,300 Тоа е всушност ќе биде нешто како бинарен за пребарување или нешто 855 00:41:11,300 --> 00:41:12,520 слични во духот. 856 00:41:12,520 --> 00:41:13,930 Па тие се генерално побрзо. 857 00:41:13,930 --> 00:41:16,040 >> Но Недостатоци е тоа што тоа е само повеќе работа. 858 00:41:16,040 --> 00:41:16,730 Тоа е повеќе напор. 859 00:41:16,730 --> 00:41:18,140 Мора да се разбере бази на податоци. 860 00:41:18,140 --> 00:41:18,940 Што треба да го постави. 861 00:41:18,940 --> 00:41:20,840 Ви треба сервер да се кандидира таа база на податоци за. 862 00:41:20,840 --> 00:41:22,750 Треба да се разбере Како да го конфигурирате. 863 00:41:22,750 --> 00:41:24,930 Значи овие се само овие видови на размени. 864 00:41:24,930 --> 00:41:27,860 Додека CSV датотека, можете да создаде со gedit. 865 00:41:27,860 --> 00:41:28,770 И вие ќе бидете добро да отидевме. 866 00:41:28,770 --> 00:41:31,550 Нема комплексноста подалеку од тоа. 867 00:41:31,550 --> 00:41:34,870 >> Користење на TRIE наместо на хеш табелата со посебен врзувањето да се складира 868 00:41:34,870 --> 00:41:37,490 речник на зборови потсетува на pset5. 869 00:41:37,490 --> 00:41:42,480 Па се обидува со главата, во теорија барем, е она? 870 00:41:42,480 --> 00:41:46,380 Постојана време, барем ако сте hashing на секоја од поединечните 871 00:41:46,380 --> 00:41:48,990 букви во еден збор, како тебе би можеле да имаат за pset5. 872 00:41:48,990 --> 00:41:52,720 Тоа може да биде пет хашови, шест хашови ако има пет или шест 873 00:41:52,720 --> 00:41:53,900 букви во зборот. 874 00:41:53,900 --> 00:41:54,580 И тоа е прилично добар. 875 00:41:54,580 --> 00:41:56,910 И ако има горна граница за тоа како долго твоите зборови може да биде, тоа е 876 00:41:56,910 --> 00:41:59,320 навистина асимптоматично постојана време. 877 00:41:59,320 --> 00:42:05,180 >> Со оглед на тоа хеш табелата со посебни врзувањето, проблемот постои со тоа 878 00:42:05,180 --> 00:42:09,070 вид на податоци структура е дека ефикасноста на вашиот алгоритми обично 879 00:42:09,070 --> 00:42:12,700 зависи од бројот на нештата веќе во податочна структура. 880 00:42:12,700 --> 00:42:15,660 И тоа е дефинитивно случај со синџири, при што повеќе работи се стави 881 00:42:15,660 --> 00:42:18,800 во хеш табелата, толку подолго оние синџири одат, што значи во најлош 882 00:42:18,800 --> 00:42:21,960 случај, нешто што може да се бара е целиот пат на крајот на една 883 00:42:21,960 --> 00:42:26,000 на оние синџири, кои ефикасно devolves во нешто линеарна. 884 00:42:26,000 --> 00:42:29,450 >> Сега, во пракса, тоа би можело апсолутно да биде случај дека хаш табелата со 885 00:42:29,450 --> 00:42:32,820 синџири е побрз од соодветните TRIE имплементација. 886 00:42:32,820 --> 00:42:35,570 Но тоа е поради различни причини, меѓу кои се обидува користат едночудо 887 00:42:35,570 --> 00:42:39,240 меморија која може, всушност, бавен работи надолу, затоа што не се добие убав 888 00:42:39,240 --> 00:42:42,410 придобивките од нешто што се нарекува кеширање, каде работите кои се блиску еден до друг 889 00:42:42,410 --> 00:42:45,420 во меморијата може да се пристапи често побрзо. 890 00:42:45,420 --> 00:42:48,180 А понекогаш може да излезе со навистина добра хеш функција. 891 00:42:48,180 --> 00:42:51,060 Дури и ако имате да потроши малку меморија, може да, навистина, да биде во можност да 892 00:42:51,060 --> 00:42:54,430 најдат работи брзо и не толку лоша како линеарно. 893 00:42:54,430 --> 00:42:58,410 >> Значи во кратки, не беше неопходно со било кој од овие еден или дури и две 894 00:42:58,410 --> 00:43:00,050 специфични работи што го барате. 895 00:43:00,050 --> 00:43:03,080 Навистина ништо убедлив како главата и недостатоци 896 00:43:03,080 --> 00:43:04,800 Општо земено фатени нашето око. 897 00:43:04,800 --> 00:43:11,840 >> Роб BOWDEN: Значи за главата, ние го сторивме не го прифати за свој "побрзо". Можете 898 00:43:11,840 --> 00:43:14,540 имаше да каже нешто околу тоа. 899 00:43:14,540 --> 00:43:17,910 Дури и ако рече теоретски побрзо, знаевме дека сте вид на разбрана 900 00:43:17,910 --> 00:43:19,470 дека е 0 од 1. 901 00:43:19,470 --> 00:43:22,820 И хаш табелата, во теорија, не е 0 од 1. 902 00:43:22,820 --> 00:43:26,550 Се спомне нешто за траење Општо земено имаш поени. 903 00:43:26,550 --> 00:43:32,640 Но, "побрзо", повеќето решенија за на големите одбор, кои беа обиди беа 904 00:43:32,640 --> 00:43:34,990 објективно побавно отколку решенија кои беа хеш табели. 905 00:43:34,990 --> 00:43:37,250 Толку побрзо во себе и за себе не е навистина точно. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> Дејвид Џ MALAN: Дом де ДОМ ДОМ. 908 00:43:44,380 --> 00:43:46,686 Јас сум веројатно единствениот кој сфаќа тоа е како што би требало да 909 00:43:46,686 --> 00:43:47,500 се изрече, нели? 910 00:43:47,500 --> 00:43:50,400 >> Роб BOWDEN: Имав всушност немаат идеја. 911 00:43:50,400 --> 00:43:51,650 >> Дејвид Џ MALAN: Тоа го направи смисла во мојата глава. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> Роб BOWDEN: Јас го правам ова. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Значи ова е една, каде што имаше да се подготви дијаграмот слични на вас може 916 00:44:04,243 --> 00:44:06,040 видовме на минатото испити. 917 00:44:06,040 --> 00:44:12,200 Па да се погледне на овој. 918 00:44:12,200 --> 00:44:18,170 Па од HTML јазол, имаме две деца, главата и телото. 919 00:44:18,170 --> 00:44:20,570 Па ние гранка - главата и телото. 920 00:44:20,570 --> 00:44:22,280 На главата има наслов таг. 921 00:44:22,280 --> 00:44:23,710 Па ние имаме титула. 922 00:44:23,710 --> 00:44:28,450 >> Сега, една работа многу луѓе заборавив е дека овие текстуални јазли се 923 00:44:28,450 --> 00:44:30,430 елементи во рамките на ова дрво. 924 00:44:30,430 --> 00:44:36,260 Па еве ние се случи да ги привлече како ovals да се разликуваат од овие 925 00:44:36,260 --> 00:44:37,380 видови на јазли. 926 00:44:37,380 --> 00:44:41,450 Но известување, исто така, тука имаме врвот, средината и дното ќе завршат да бидат 927 00:44:41,450 --> 00:44:42,560 текст јазли. 928 00:44:42,560 --> 00:44:46,250 Па заборавам беше малку на честа грешка. 929 00:44:46,250 --> 00:44:48,770 >> Телото има три деца - овие три Divs. 930 00:44:48,770 --> 00:44:53,340 Па div, div, div, а потоа текстот јазол деца од оние Divs. 931 00:44:53,340 --> 00:44:55,900 Тоа е доста тоа за тоа прашања. 932 00:44:55,900 --> 00:44:57,860 >> Дејвид Џ MALAN: И тоа е вреди да се напомене, иако ние не се задржиме на овие 933 00:44:57,860 --> 00:45:01,040 детали во време трошиме на JavaScript, дека наредбата не, во 934 00:45:01,040 --> 00:45:02,290 Всушност, прашање технички. 935 00:45:02,290 --> 00:45:06,330 Значи, ако главата доаѓа пред телото во HTML, тогаш тоа треба да се појави на 936 00:45:06,330 --> 00:45:08,860 лево од телото во конкретната ДОМ. 937 00:45:08,860 --> 00:45:12,265 Дека неговата е, воопшто, само Материјал цел, нешто што се нарекува документот ред, каде што 938 00:45:12,265 --> 00:45:13,260 тоа не е важно. 939 00:45:13,260 --> 00:45:17,470 И ако сте биле спроведување на парсер, програма која го чита HTML во зграда 940 00:45:17,470 --> 00:45:20,960 до дрвото во меморијата, да бидам искрен, тоа е интуитивно веројатно она што го 941 00:45:20,960 --> 00:45:24,720 направи секој случај - врвот до дното, лево кон десно. 942 00:45:24,720 --> 00:45:26,116 >> Роб BOWDEN: Прашања за тоа? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Треба да направам следниот? 945 00:45:30,000 --> 00:45:32,380 >> Дејвид Џ MALAN: Секако. 946 00:45:32,380 --> 00:45:33,810 >> Роб BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Значи ова е тампон превишаването напад прашање. 948 00:45:39,320 --> 00:45:43,740 Главната работа е да се препознае тука е, Па, како би можеле да противник трик 949 00:45:43,740 --> 00:45:46,170 оваа програма во извршување арбитрарен код? 950 00:45:46,170 --> 00:45:51,860 Па argv1, првиот командната линија аргумент на оваа програма, која може да биде 951 00:45:51,860 --> 00:45:53,920 произволно долго. 952 00:45:53,920 --> 00:45:59,160 Но тука ние сме со користење memcpy да го копирате argv1, која тука е бар. 953 00:45:59,160 --> 00:46:00,165 Ние сме го поминува како аргумент. 954 00:46:00,165 --> 00:46:02,050 И така тоа е преземање на бар име. 955 00:46:02,050 --> 00:46:08,040 >> Па ние сме memcpying бар во оваа тампон в. 956 00:46:08,040 --> 00:46:09,400 Колку бајти сме копирање? 957 00:46:09,400 --> 00:46:14,040 Па сепак многу бајти бар се случува да биде со користење, должината на тој аргумент. 958 00:46:14,040 --> 00:46:17,930 Но в е само 12 бајти широк. 959 00:46:17,930 --> 00:46:22,280 Значи, ако ние напишете командата тоа е подолг од 12 бајти, ние сме 960 00:46:22,280 --> 00:46:25,470 ќе претекување овој особено тампон. 961 00:46:25,470 --> 00:46:31,000 Сега, како би можеле да противник трик на програма во извршување на произволен код? 962 00:46:31,000 --> 00:46:34,910 >> Па се сеќавам дека тука Главната повикува foo. 963 00:46:34,910 --> 00:46:37,340 И така, тогаш главната повици foo. 964 00:46:37,340 --> 00:46:40,408 Ајде да се подготви овој. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Па ние имаме оџак. 967 00:46:46,990 --> 00:46:49,090 И главните има магацинот рамка на дното. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Во одреден момент, главни повици foo. 970 00:46:53,250 --> 00:46:55,390 Добро, веднаш, главни повици foo. 971 00:46:55,390 --> 00:46:57,130 И така foo добива свој магацинот рамка. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Сега, во одреден момент, foo се случува да се вратат. 974 00:47:02,220 --> 00:47:06,810 И отиде foo се враќа, треба да знаеме на што линија код во внатрешноста на главниот ние 975 00:47:06,810 --> 00:47:10,610 беа со цел да се знае каде ние треба да продолжат во главната. 976 00:47:10,610 --> 00:47:13,100 Можеме да го наречеме foo од цела куп на различни места. 977 00:47:13,100 --> 00:47:14,620 Како да знаеме каде да се вратат? 978 00:47:14,620 --> 00:47:16,460 Па, ние треба да ги чувате дека некаде. 979 00:47:16,460 --> 00:47:23,010 >> Значи некаде во право околу тука, ние да се сместат каде што треба да се врати за уште 980 00:47:23,010 --> 00:47:24,070 foo враќа. 981 00:47:24,070 --> 00:47:26,350 И ова е враќање адреса. 982 00:47:26,350 --> 00:47:30,490 Па како противник би можеле да ги искористат предностите за ова е фактот дека 983 00:47:30,490 --> 00:47:37,550 овој тампон в е зачувана, ајде да велат, токму тука е в. 984 00:47:37,550 --> 00:47:39,690 Значи имаме 12 бајти за в. 985 00:47:39,690 --> 00:47:40,540 Ова е в. 986 00:47:40,540 --> 00:47:43,030 И ова е оџакот прстен foo е. 987 00:47:43,030 --> 00:47:49,970 Значи, ако злонамерен корисник влегува повеќе бајти од 12 или внесете ја командата 988 00:47:49,970 --> 00:47:54,570 линија аргумент дека е подолг од 12 карактери, тогаш ние ќе треба да 989 00:47:54,570 --> 00:47:57,540 претекување оваа тампон. 990 00:47:57,540 --> 00:47:59,910 >> Ние можеме да продолжувам да одам. 991 00:47:59,910 --> 00:48:02,220 И во одреден момент, ние одиме далеку доволно е што ние почнат 992 00:48:02,220 --> 00:48:05,120 пребрише ова враќање адреса. 993 00:48:05,120 --> 00:48:08,310 Значи еднаш сме ја пребришете враќање адреса, тоа значи дека кога foo 994 00:48:08,310 --> 00:48:14,220 се враќа, ние сме се врати на секаде каде што злонамерен корисник е тоа го кажувам за да од страна на 995 00:48:14,220 --> 00:48:19,490 она што вредност се влезе, со какви било карактери на корисникот внесе. 996 00:48:19,490 --> 00:48:24,320 И така ако злонамерен корисник е да се биде особено умен, тој може да ја имаат оваа 997 00:48:24,320 --> 00:48:29,255 се вратат во некаде во printDef функција или некаде во Примерок 998 00:48:29,255 --> 00:48:31,830 функција, само насекаде произволни. 999 00:48:31,830 --> 00:48:38,420 >> Но, дури и попаметниот е што ако тој има корисникот врати во право тука. 1000 00:48:38,420 --> 00:48:41,920 А потоа ќе почнете извршување овие како линии на код. 1001 00:48:41,920 --> 00:48:46,610 Значи во тој момент, корисникот може да влезе она што тој сака во овој регион. 1002 00:48:46,610 --> 00:48:52,210 И тој има целосна контрола над вашата програма. 1003 00:48:52,210 --> 00:48:53,460 Прашања во врска со тоа? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Па следното прашање е завршена reimplementation на foo на таков начин 1006 00:49:00,970 --> 00:49:02,620 дека тоа е веќе ранливи. 1007 00:49:02,620 --> 00:49:03,870 >> Значи има неколку начини би можеле да имаат направено ова. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Ние се уште имаат в само се должина 12. 1010 00:49:13,330 --> 00:49:16,480 Вие би можеле да се промени оваа како дел од вашиот решение. 1011 00:49:16,480 --> 00:49:18,930 Ние, исто така, додаде проверка за да бидете сигурни бар не беше нула. 1012 00:49:18,930 --> 00:49:24,460 Покрај тоа што не треба дека за целосна кредитна. 1013 00:49:24,460 --> 00:49:27,690 Па ние сме проверка првиот стринг должина на бар. 1014 00:49:27,690 --> 00:49:31,650 Ако тоа е поголема од 12, а потоа всушност не копија. 1015 00:49:31,650 --> 00:49:33,010 Значи тоа е еден начин на одредување неа. 1016 00:49:33,010 --> 00:49:36,750 >> Друг начин на одредување на тоа е наместо има в само да биде со должина од 12, ја имаат 1017 00:49:36,750 --> 00:49:39,310 биде со должина од strlen (лента). 1018 00:49:39,310 --> 00:49:43,370 Друг начин на одредување на тоа е за да всушност само се вратат. 1019 00:49:43,370 --> 00:49:46,690 Значи, ако сте имале само добиле ослободи од сите ова, ако сте имале само избришани сите 1020 00:49:46,690 --> 00:49:51,830 линии на код, што би добиле целосна кредитна, бидејќи оваа функција 1021 00:49:51,830 --> 00:49:54,150 всушност не се постигне ништо. 1022 00:49:54,150 --> 00:49:57,650 Тоа е копирање на командната линија аргумент во некои низа во 1023 00:49:57,650 --> 00:49:59,960 нејзините локални магацинот рамка. 1024 00:49:59,960 --> 00:50:01,310 А потоа нешто се враќа. 1025 00:50:01,310 --> 00:50:04,020 И што и да оствари е нема. 1026 00:50:04,020 --> 00:50:09,740 Па враќање исто така беше доволно начин на добивање целосна кредитна. 1027 00:50:09,740 --> 00:50:13,425 >> Дејвид Џ MALAN: Не сосема во духот на прашање, но прифатливо за на 1028 00:50:13,425 --> 00:50:15,580 спецификации сеедно. 1029 00:50:15,580 --> 00:50:18,260 >> Роб BOWDEN: Прашања на која било од тоа? 1030 00:50:18,260 --> 00:50:22,270 Едно нешто што ти барем потребни за да се составувањето код. 1031 00:50:22,270 --> 00:50:24,810 Па дури иако технички не сте ранливи ако вашиот код не 1032 00:50:24,810 --> 00:50:29,130 состави, ние не го прифати тоа. 1033 00:50:29,130 --> 00:50:31,350 Без прашања? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> Дејвид Џ MALAN: Дали сакате да се каже овој наслов? 1036 00:50:34,580 --> 00:50:37,230 >> Роб BOWDEN: Не 1037 00:50:37,230 --> 00:50:40,470 >> Дејвид Џ MALAN: Значи во овој, овој беше или добра вест или лоша вест. 1038 00:50:40,470 --> 00:50:43,870 Ова е буквално истиот проблем како на првиот квиз. 1039 00:50:43,870 --> 00:50:46,140 И тоа е речиси ист проблем како pset1. 1040 00:50:46,140 --> 00:50:49,980 Но тоа беше намерно поедноставен за да биде поедноставен пирамида, која може да биде 1041 00:50:49,980 --> 00:50:52,330 реши со малку поедноставно повторување. 1042 00:50:52,330 --> 00:50:55,680 И навистина, она што се добива на тука не беше толку логика, 1043 00:50:55,680 --> 00:50:58,100 бидејќи веројатно, од оваа точка, ти си поудобно отколку што беа 1044 00:50:58,100 --> 00:51:01,850 во една недела со за петелки или зошто петелки, но навистина да ги разграничат дека 1045 00:51:01,850 --> 00:51:04,790 си малку удобно со Идејата дека PHP не е само за тоа што 1046 00:51:04,790 --> 00:51:05,290 програмирање. 1047 00:51:05,290 --> 00:51:07,820 Тоа всушност може да се користи како јазик да се напише командната линија програми. 1048 00:51:07,820 --> 00:51:10,060 >> И навистина, тоа е она што ние се обидувавме да привлече вашето внимание на. 1049 00:51:10,060 --> 00:51:12,060 Ова е командната линија PHP програма. 1050 00:51:12,060 --> 00:51:16,690 Па C код овде, додека точниот во C, не се поправи за PHP. 1051 00:51:16,690 --> 00:51:17,940 Но го кодот навистина е иста. 1052 00:51:17,940 --> 00:51:21,720 Ако се споредат решенија за одбивање 0 против Квиз 1, ќе најдете дека 1053 00:51:21,720 --> 00:51:25,630 тоа е речиси идентични, освен за некои доларот знаци и за 1054 00:51:25,630 --> 00:51:27,250 отсуство на тип на податоци. 1055 00:51:27,250 --> 00:51:31,720 Особено, ако ги погледнеме тука, ќе видите дека ние iterate, во овој 1056 00:51:31,720 --> 00:51:33,730 случај, од 1 до преку 7. 1057 00:51:33,730 --> 00:51:34,910 >> Ние може да го направи 0 индекс. 1058 00:51:34,910 --> 00:51:37,320 Но, понекогаш, мислам дека тоа е само ментално полесно да размислувам за нешта 1059 00:51:37,320 --> 00:51:38,200 од 1 до 7. 1060 00:51:38,200 --> 00:51:40,300 Ако сакате еден блок, а потоа два блокови, а потоа три, а потоа 1061 00:51:40,300 --> 00:51:41,770 точка, точка, точка седум. 1062 00:51:41,770 --> 00:51:45,960 Ние сме ѕ се иницијализиран на 1 а потоа смета на до i. 1063 00:51:45,960 --> 00:51:48,150 И тука сè е инаку идентични. 1064 00:51:48,150 --> 00:51:49,790 Но достоен за ум се неколку работи. 1065 00:51:49,790 --> 00:51:53,230 Ние ви даде овие две линии, првата еден, goofily именуван како shebang 1066 00:51:53,230 --> 00:51:54,560 за остар тресок. 1067 00:51:54,560 --> 00:51:58,770 И дека само одредува патот, папка, во која програма може да биде 1068 00:51:58,770 --> 00:52:02,160 покажа дека сакате да го користите да го протолкува оваа датотека. 1069 00:52:02,160 --> 00:52:04,710 >> А потоа линијата после тоа, на Се разбира, значи влезе PHP на владата. 1070 00:52:04,710 --> 00:52:07,740 И линијата на самото дно значи излез PHP на владата. 1071 00:52:07,740 --> 00:52:09,740 И тоа функционира, во целина, со толкува јазици. 1072 00:52:09,740 --> 00:52:14,370 Тоа е вид на досадни, ако ти напишам Програмата во датотека наречена foo.php. 1073 00:52:14,370 --> 00:52:17,320 А потоа вашата корисниците имаат само се сеќавам, во ред, да ја извршите оваа програма, јас 1074 00:52:17,320 --> 00:52:22,320 треба да напишете "PHP простор foo.php." Вид на досадни, ако ништо друго. 1075 00:52:22,320 --> 00:52:25,270 И тоа, исто така, открива дека вашата програма е напишана во PHP, што не е за сите 1076 00:52:25,270 --> 00:52:27,060 дека осветлуваат за корисникот. 1077 00:52:27,060 --> 00:52:30,100 >> Па може да се отстрани. PHP целосно потсетиме од предавање. 1078 00:52:30,100 --> 00:52:35,690 И навистина може да се направи. / Foo ако сте го chmodded со тоа што 1079 00:52:35,690 --> 00:52:36,500 извршна. 1080 00:52:36,500 --> 00:52:39,630 Па chmod a + x foo би го сторил тоа. 1081 00:52:39,630 --> 00:52:41,460 И ако вие исто така да додадете на shebang тука. 1082 00:52:41,460 --> 00:52:45,320 Но, навистина, проблемот е добивање на печатење нешто како ова. 1083 00:52:45,320 --> 00:52:51,100 Без HTML, без C-кодот, секако, само некои PHP. 1084 00:52:51,100 --> 00:52:54,100 Па Мило а потоа се врати во проблем 25. 1085 00:52:54,100 --> 00:52:58,050 И во 25, ќе се даде следниве скелет код, што беше 1086 00:52:58,050 --> 00:52:59,730 прилично едноставна веб-страница. 1087 00:52:59,730 --> 00:53:04,230 И сочни дел HTML-мудар беше долу тука, каде што имаме внатрешноста на телото 1088 00:53:04,230 --> 00:53:09,160 форма која има уникатен ID на влезови внатрешноста на кој беше два влеза, еден 1089 00:53:09,160 --> 00:53:11,950 со идеја за името, еден со идеја на копче. 1090 00:53:11,950 --> 00:53:14,240 >> Првиот беше тип текст, Вториот тип поднесе. 1091 00:53:14,240 --> 00:53:16,930 И така ние ви даде, всушност, повеќе состојки отколку што е потребно, само така 1092 00:53:16,930 --> 00:53:19,230 вие момци имаше опции со кои за решавање на овој проблем. 1093 00:53:19,230 --> 00:53:21,130 Вие не треба строго сите овие ИД. 1094 00:53:21,130 --> 00:53:23,580 Но тоа ви овозможува да ги реши тоа на различни начини. 1095 00:53:23,580 --> 00:53:27,050 И на врвот, забележи дека целта е да се активира 1096 00:53:27,050 --> 00:53:27,960 прозорец вака - 1097 00:53:27,960 --> 00:53:28,780 Здраво, Мило! - 1098 00:53:28,780 --> 00:53:31,270 да pop-up во прелистувачот користење супер едноставен, ако 1099 00:53:31,270 --> 00:53:33,190 не грда, алармирање функција. 1100 00:53:33,190 --> 00:53:37,480 И така, во крајна линија, тоа се сведува концептуално некако да слуша за 1101 00:53:37,480 --> 00:53:41,290 поднесоци од формата клиент-страна , А не од страна на серверот, некако 1102 00:53:41,290 --> 00:53:45,640 одговарајќи на кој поднесување од страна грабање вредноста што корисникот внесе 1103 00:53:45,640 --> 00:53:50,120 во полето за име, а потоа прикажување на тоа во телото на алармирање. 1104 00:53:50,120 --> 00:53:53,460 >> Значи еден од начините можете да го направите ова е со jQuery, кој изгледа малку 1105 00:53:53,460 --> 00:53:56,880 синтаксички тежок на прв. 1106 00:53:56,880 --> 00:54:00,760 Можете да го направите ова со чиста ДОМ код - document.getelement од проект. 1107 00:54:00,760 --> 00:54:02,530 Но, ајде да ги разгледаме во оваа верзија. 1108 00:54:02,530 --> 00:54:05,110 Имам неколку важна линии во прв план. 1109 00:54:05,110 --> 00:54:09,460 Значи еден, имаме оваа линија, која е идентични со она што може да се види 1110 00:54:09,460 --> 00:54:13,830 во, верувам, form2.html од класа во 9 недела. 1111 00:54:13,830 --> 00:54:16,960 И ова е само велејќи, извршување го следниов код кога 1112 00:54:16,960 --> 00:54:18,430 документот е подготвен. 1113 00:54:18,430 --> 00:54:21,770 Ова се важни само затоа што HTML страници се читаат врвот до 1114 00:54:21,770 --> 00:54:23,280 дното, лево кон десно. 1115 00:54:23,280 --> 00:54:27,910 >> И затоа, ако се обидете да го направите нешто во кодот тука некои ДОМ 1116 00:54:27,910 --> 00:54:31,560 елемент, некои HTML таг, тоа е надолу тука, сте го прави тоа прерано, 1117 00:54:31,560 --> 00:54:34,220 бидејќи тоа има дури и не се прочита во меморијата. 1118 00:54:34,220 --> 00:54:37,740 Значи со ова го зборувам document.ready линија, ние велиме, 1119 00:54:37,740 --> 00:54:39,040 еве некои код, прелистувачот. 1120 00:54:39,040 --> 00:54:42,440 Но, не ја изврши оваа додека целата документот е подготвен, тоа е ДОМ 1121 00:54:42,440 --> 00:54:44,320 дрво постои во меморија. 1122 00:54:44,320 --> 00:54:47,110 Оваа една е малку повеќе јасна, ако синтаксички на 1123 00:54:47,110 --> 00:54:51,890 малку различни, каде што јас велам, го дофати елементот на HTML, чија единствена 1124 00:54:51,890 --> 00:54:53,560 идентификатор е влезови. 1125 00:54:53,560 --> 00:54:56,220 Тоа е она што на хаш таг означува, единствен проект. 1126 00:54:56,220 --> 00:54:58,070 А потоа јас го повикувам. Поднесе. 1127 00:54:58,070 --> 00:55:01,660 >> Тоа. Праќајте овде е функција, инаку познат како метод, тоа е 1128 00:55:01,660 --> 00:55:05,850 внатрешноста на објектот на левата рака страна има дека јас не се потенцира. 1129 00:55:05,850 --> 00:55:08,990 Значи, ако мислите на инпутите како објект во меморија - и навистина е тоа. 1130 00:55:08,990 --> 00:55:10,440 Тоа е јазол на дрво - 1131 00:55:10,440 --> 00:55:16,580 . Поднесат средства кога овој формулар со овој проект е поднесен, извршување 1132 00:55:16,580 --> 00:55:17,700 следниве код. 1133 00:55:17,700 --> 00:55:20,290 Не ми е гајле што името на функција е јас сум извршување. 1134 00:55:20,290 --> 00:55:23,760 Па еве јас сум со користење, како и досега, она што е наречен ламбда функција или 1135 00:55:23,760 --> 00:55:24,720 анонимен функција. 1136 00:55:24,720 --> 00:55:27,640 Тоа не е воопшто интелектуално Интересно освен тоа нема име, 1137 00:55:27,640 --> 00:55:30,220 што е во ред ако сте само некогаш ќе го нарекуваат еднаш. 1138 00:55:30,220 --> 00:55:34,490 И во внатрешноста таму всушност се справи со поднесување на формуларот. 1139 00:55:34,490 --> 00:55:36,810 Јас прв пат декларирате променлива наречен вредност. 1140 00:55:36,810 --> 00:55:40,610 И тогаш што е ефект на овој Нагласени дел тука сега? 1141 00:55:40,610 --> 00:55:44,755 Што значи дека го прават на високо ниво за мене? 1142 00:55:44,755 --> 00:55:48,539 >> Публика: Станува вредноста што корисникот не во HTML подолу. 1143 00:55:48,539 --> 00:55:50,920 Станува тој проект, а потоа добива вредноста на неа. 1144 00:55:50,920 --> 00:55:51,590 >> Дејвид Џ MALAN: Токму така. 1145 00:55:51,590 --> 00:55:54,300 Тоа зграпчува јазол, чија единствена идентификатор е името. 1146 00:55:54,300 --> 00:55:56,900 Станува вредноста него, која е, веројатно, она што корисникот 1147 00:55:56,900 --> 00:55:58,190 отчукува него или себе си. 1148 00:55:58,190 --> 00:56:01,020 И тогаш тоа продавници кои во променлива наречена вредност. 1149 00:56:01,020 --> 00:56:03,720 Како настрана, би можеле да имаат, исто така, направиле ова малку поинаку. 1150 00:56:03,720 --> 00:56:09,250 Сосема прифатлива правејќи нешто лага var вредност добива 1151 00:56:09,250 --> 00:56:10,500 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 И ова е причината зошто тоа е малку досадни да не ги користат jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Името". Вредност. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Па сосема прифатлива. 1157 00:56:19,620 --> 00:56:22,770 Различни начини да го направите тоа. jQuery само има тенденција да биде малку повеќе содржаен и 1158 00:56:22,770 --> 00:56:25,230 дефинитивно повеќе популарни меѓу програмери. 1159 00:56:25,230 --> 00:56:27,590 >> Сега, јас сум прави малку здрав разум провери, бидејќи во проблемот 1160 00:56:27,590 --> 00:56:30,820 изјава ние експлицитно рече, ако корисникот сеуште не внесе неговото или нејзиното 1161 00:56:30,820 --> 00:56:32,580 името, не покажуваат сигнали. 1162 00:56:32,580 --> 00:56:35,390 Но, можете да се провери за што, со само проверка за празен стринг за 1163 00:56:35,390 --> 00:56:37,850 Цитат-unquote ако има всушност ништо не постои. 1164 00:56:37,850 --> 00:56:40,880 Но, ако тоа не е еднаква на понуда-unquote, Сакам да се јавам сигнали. 1165 00:56:40,880 --> 00:56:45,610 И интересна дел овде е дека ние сме со користење на плус оператор, кој 1166 00:56:45,610 --> 00:56:48,130 што прави во вклучите Javascript-? 1167 00:56:48,130 --> 00:56:48,740 CONCATENATE. 1168 00:56:48,740 --> 00:56:50,690 Па тоа е како Phps точка оператор. 1169 00:56:50,690 --> 00:56:52,820 Истата идеја, малку поинаков синтакса. 1170 00:56:52,820 --> 00:56:55,280 И јас сум само создавање на стринг кој те видов на екранот - 1171 00:56:55,280 --> 00:56:57,750 Здраво, така и така. 1172 00:56:57,750 --> 00:56:59,200 >> А потоа последниот детал е ова. 1173 00:56:59,200 --> 00:57:04,970 Зошто се врати лажни внатре на овој анонимен функција? 1174 00:57:04,970 --> 00:57:07,420 >> Публика: Нема вредност. 1175 00:57:07,420 --> 00:57:09,380 Ќе го стави во форма. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Тоа само вели, ако вредноста не е еднаков на празно, тогаш направете го тоа. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Имаше празни во тој поднесување. 1180 00:57:20,940 --> 00:57:21,170 >> Дејвид Џ MALAN: OK. 1181 00:57:21,170 --> 00:57:21,640 Внимателно иако. 1182 00:57:21,640 --> 00:57:22,830 Нема никој друг тука. 1183 00:57:22,830 --> 00:57:25,510 И дека враќањето лажни е надвор на ако услови. 1184 00:57:25,510 --> 00:57:29,470 Значи ова истакна линија, враќање false, извршува без разлика што кога 1185 00:57:29,470 --> 00:57:32,310 форма се доставува. 1186 00:57:32,310 --> 00:57:36,810 Што значи враќање лажни внатрешноста на оваа ракувачот со настани, како што се вика, 1187 00:57:36,810 --> 00:57:38,450 настанот во прашање се поднесување? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> ПУБЛИКАТА: Поради тоа што се случува само еднаш. 1190 00:57:44,470 --> 00:57:45,320 >> Дејвид Џ MALAN: се случува само еднаш. 1191 00:57:45,320 --> 00:57:46,821 Не сосема. 1192 00:57:46,821 --> 00:57:47,292 Да? 1193 00:57:47,292 --> 00:57:50,589 >> Публика: Тоа го спречува форма од потчинува на стандардно однесување, 1194 00:57:50,589 --> 00:57:52,480 која ќе го направи страница Вчитај ја страната повторно. 1195 00:57:52,480 --> 00:57:53,110 >> Дејвид Џ MALAN: Токму така. 1196 00:57:53,110 --> 00:57:56,490 Па јас сум преоптоварување терминот достават тука, бидејќи јас велам, формата е 1197 00:57:56,490 --> 00:57:57,670 се поднесува. 1198 00:57:57,670 --> 00:58:02,240 Но како што укажуваат, тоа е, всушност, не се поднесени во вистинска HTTP начин. 1199 00:58:02,240 --> 00:58:06,870 Кога ќе кликнете на Прати, бидејќи на нашите onSubmit управувачот, ние сме зграпчување 1200 00:58:06,870 --> 00:58:09,040 таа форма поднесување така да се каже. 1201 00:58:09,040 --> 00:58:11,290 Ние сме тогаш прави нашата работа со JavaScript код. 1202 00:58:11,290 --> 00:58:14,070 Но јас сум намерно се враќа лажни, затоа што јас не сакам да се случи 1203 00:58:14,070 --> 00:58:18,430 секундата подоцна е за целото форма себе да се достават до веб 1204 00:58:18,430 --> 00:58:22,800 сервер со клучните вредност парови со промена на URL-то да биде нешто како 1205 00:58:22,800 --> 00:58:26,180 q = мачки или што ние го сторивме, на пример, во класата. 1206 00:58:26,180 --> 00:58:29,640 Не сакам тоа да се случи, затоа што не постои на серверот слушање на оваа 1207 00:58:29,640 --> 00:58:30,690 форма поднесување. 1208 00:58:30,690 --> 00:58:32,320 Тоа е чисто направено во JavaScript код. 1209 00:58:32,320 --> 00:58:35,760 И тоа е причината зошто јас дури и не мора на акција атрибут на мојата форма, затоа што 1210 00:58:35,760 --> 00:58:38,870 не планираат за тоа да некогаш одат на серверот. 1211 00:58:38,870 --> 00:58:40,780 >> Така, тоа е се поднесува. 1212 00:58:40,780 --> 00:58:44,340 Но, ние сме зграпчување таа форма поднесување и спречување на стандардниот 1213 00:58:44,340 --> 00:58:47,477 однесување, што е всушност одат сите на патот до серверот. 1214 00:58:47,477 --> 00:58:48,730 >> ПУБЛИКАТА: Значи тоа имајќи клиент-страна. 1215 00:58:48,730 --> 00:58:49,780 >> Дејвид Џ MALAN: Одржување тоа клиент-страна. 1216 00:58:49,780 --> 00:58:51,030 Точно во право. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Потоа ми беше ох MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> Роб BOWDEN: OK. 1221 00:59:00,430 --> 00:59:04,990 Значи ова прво прашање беше генерално груб за луѓе. 1222 00:59:04,990 --> 00:59:07,270 Иако подоцна оние отиде подобро. 1223 00:59:07,270 --> 00:59:12,260 Па ти мораше да се избере точниот податоци типови за двете од овие столбови. 1224 00:59:12,260 --> 00:59:17,750 И двете од овие имаат некои работи за нив, кои 1225 00:59:17,750 --> 00:59:20,620 направи избор тешко. 1226 00:59:20,620 --> 00:59:24,430 Па int не беше валиден тип за број. 1227 00:59:24,430 --> 00:59:29,410 Причината е во тоа 12-цифрен сметка број, со int не е доволно голема за да се 1228 00:59:29,410 --> 00:59:31,070 складирање на вкупно цифри. 1229 00:59:31,070 --> 00:59:36,570 Па валидна избор би бил голем int ако се случи да знаете дека. 1230 00:59:36,570 --> 00:59:42,090 Друг избор би можело да се на знак областа на должина 12. 1231 00:59:42,090 --> 00:59:44,560 Значи, која било од тие би работеле. 1232 00:59:44,560 --> 00:59:46,100 Int не би. 1233 00:59:46,100 --> 00:59:50,170 >> Сега, рамнотежа, се сетам на pset7. 1234 00:59:50,170 --> 00:59:59,540 Значи ние специјално се користат децимална до чување на вредноста на акциите или - 1235 00:59:59,540 --> 01:00:00,550 >> Дејвид Џ MALAN: Кеш. 1236 01:00:00,550 --> 01:00:01,060 >> Роб BOWDEN: Кеш. 1237 01:00:01,060 --> 01:00:05,710 Ние се користат децимална за чување на износот на готово дека корисникот моментов има. 1238 01:00:05,710 --> 01:00:10,950 Па причина ние го направите тоа е затоа, се сеќавам, лебди. 1239 01:00:10,950 --> 01:00:12,480 Има подвижна запирка во прецизноста. 1240 01:00:12,480 --> 01:00:18,200 Тоа не може прецизно да се сместат на пари вредности како што сакаме овде. 1241 01:00:18,200 --> 01:00:23,630 Па децимална е во состојба прецизно да продавница нешто, да речеме, две децимални места. 1242 01:00:23,630 --> 01:00:27,630 Тоа е зошто рамнотежа, што сакаме ние да биде децимална и не лебдат. 1243 01:00:27,630 --> 01:00:30,230 >> Дејвид Џ MALAN: И, исто така, исто така, иако тоа би можело да се паметни во други 1244 01:00:30,230 --> 01:00:32,760 контексти да се размислува, можеби ова е шанса за Инт. 1245 01:00:32,760 --> 01:00:34,420 Јас само ќе ги пратите на работи во пени. 1246 01:00:34,420 --> 01:00:38,670 Затоа што експлицитно му покажа стандардно вредноста на се 100.00, што 1247 01:00:38,670 --> 01:00:40,380 значи тоа само може да биде Инт. 1248 01:00:40,380 --> 01:00:45,310 И уште суптилност премногу со број беше во тоа што не требаше 1249 01:00:45,310 --> 01:00:46,180 да биде трик прашање. 1250 01:00:46,180 --> 01:00:49,860 Но се потсетиме дека int во MySQL, како во C, барем во 1251 01:00:49,860 --> 01:00:51,440 апаратот, е 32-битна. 1252 01:00:51,440 --> 01:00:53,960 И иако ние не ќе очекуваат да знаат точно колку бројки кои 1253 01:00:53,960 --> 01:00:56,910 средства, се сеќавам дека најголемиот број можете да ја претставува потенцијално 1254 01:00:56,910 --> 01:01:00,710 со 32-битен број е околу што? 1255 01:01:00,710 --> 01:01:02,760 >> Она што бројот ние секогаш велат? 1256 01:01:02,760 --> 01:01:04,530 2 до 32, кое е што околу? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Вие не треба да се знае точно. 1259 01:01:08,780 --> 01:01:10,580 Но, грубо е корисен во животот. 1260 01:01:10,580 --> 01:01:12,200 Тоа е околу 4 милијарди долари. 1261 01:01:12,200 --> 01:01:14,430 Па ние рековме дека неколку пати. 1262 01:01:14,430 --> 01:01:16,360 Знам дека велат дека неколку пати. 1263 01:01:16,360 --> 01:01:17,670 И тоа е околу 4 милијарди долари. 1264 01:01:17,670 --> 01:01:19,710 И тоа е добро правило на палецот да знаеш. 1265 01:01:19,710 --> 01:01:21,880 Ако имате 8 бита, 256 е магичната бројка. 1266 01:01:21,880 --> 01:01:24,160 Ако имате 32 бита, 4 милијарди се дава или зема. 1267 01:01:24,160 --> 01:01:27,140 Значи, ако само ги запишувам 4 милијарди долари, ќе видите дека тоа е помалку цифри од 1268 01:01:27,140 --> 01:01:30,970 12, што значи дека е јасно доволно експресивност да го фати 1269 01:01:30,970 --> 01:01:34,220 12-цифрен број на сметка. 1270 01:01:34,220 --> 01:01:34,940 >> Роб BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 Па останатите отиде подобро. 1272 01:01:38,520 --> 01:01:40,900 Па претпоставувам дека банката наметнува $ 20 месечно 1273 01:01:40,900 --> 01:01:42,400 надомест за одржување на сите сметки. 1274 01:01:42,400 --> 01:01:45,506 Со она што SQL пребарување на можеле банка одземе 20 $ од секој брои, дури и ако 1275 01:01:45,506 --> 01:01:47,520 тоа резултира со некои негативни салда? 1276 01:01:47,520 --> 01:01:50,380 Значи, во основа, постојат четири Главните видови на пребарувања - 1277 01:01:50,380 --> 01:01:52,840 вметнете, изберете, ажурирање и бришење. 1278 01:01:52,840 --> 01:01:56,080 Значи она што мислиме дека ние сме случува да се користи тука? 1279 01:01:56,080 --> 01:01:57,000 Ажурира. 1280 01:01:57,000 --> 01:01:58,260 >> Па ајде да ги разгледаме. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Значи тука сме ажурирање. 1283 01:02:05,870 --> 01:02:09,900 Што табелата сме ажурирање сметки? 1284 01:02:09,900 --> 01:02:11,670 Значи ажурирање сметки. 1285 01:02:11,670 --> 01:02:15,390 А потоа синтаксата вели, што во сметките сме ажурирање? 1286 01:02:15,390 --> 01:02:19,520 Па, ние сме поставување рамнотежа еднаква на Сегашната вредност на рамнотежа минус 20. 1287 01:02:19,520 --> 01:02:22,860 Па ова ќе ги ажурира сите редови на сметките, одземање 1288 01:02:22,860 --> 01:02:26,250 20 $ од рамнотежа. 1289 01:02:26,250 --> 01:02:29,260 >> Дејвид Џ MALAN: Честа грешка тука, иако ние понекогаш прости, 1290 01:02:29,260 --> 01:02:32,990 беше да всушност имаат PHP код овде повикување на пребарување функција или ставање 1291 01:02:32,990 --> 01:02:35,460 наводници околу сето она што не треба да биде таму. 1292 01:02:35,460 --> 01:02:39,780 >> Роб BOWDEN: Запомни дека MySQL е посебен јазик од PHP. 1293 01:02:39,780 --> 01:02:42,410 Се случи да биде пишување MySQL, во PHP. 1294 01:02:42,410 --> 01:02:46,180 И PHP е испраќање на истата во текот на MySQL серверот. 1295 01:02:46,180 --> 01:02:51,120 Но, вие не треба PHP со цел да се комуницира со MySQL серверот. 1296 01:02:51,120 --> 01:02:51,730 >> Дејвид Џ MALAN: Токму така. 1297 01:02:51,730 --> 01:02:54,240 Па нема променливи со доларот знаци треба да биде во овој контекст. 1298 01:02:54,240 --> 01:02:59,550 Тоа само може да направи сите по математика во базата на податоци себе. 1299 01:02:59,550 --> 01:03:00,080 >> Роб BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Значи следниот. 1301 01:03:01,300 --> 01:03:02,731 Дали е ова следниот? 1302 01:03:02,731 --> 01:03:03,210 Да. 1303 01:03:03,210 --> 01:03:06,570 Така да со тоа што на SQL query на можеле банка добивање на сметка броеви на нејзиниот 1304 01:03:06,570 --> 01:03:09,300 најбогатите клиенти, оние со салда поголема од 1000? 1305 01:03:09,300 --> 01:03:13,280 Значи кој од четири главни типови одиме да сакаат тука? 1306 01:03:13,280 --> 01:03:14,430 Изберете. 1307 01:03:14,430 --> 01:03:16,650 Затоа сакаме да изберете. 1308 01:03:16,650 --> 01:03:17,610 Што сакаме да изберете? 1309 01:03:17,610 --> 01:03:19,380 Што колона сакаме да изберете? 1310 01:03:19,380 --> 01:03:20,970 Ние конкретно ќе сакаат за да го изберете бројот. 1311 01:03:20,970 --> 01:03:23,910 Но, ако ти рече ѕвезда, ние исто така прифатена тоа. 1312 01:03:23,910 --> 01:03:25,820 >> Па одберете број од она маса? 1313 01:03:25,820 --> 01:03:26,640 Сметки. 1314 01:03:26,640 --> 01:03:28,370 А потоа состојбата сакаме? 1315 01:03:28,370 --> 01:03:30,140 Каде рамнотежа поголема од 1000. 1316 01:03:30,140 --> 01:03:31,720 Ние, исто така, прифати поголема од или еднаква. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Последен. 1319 01:03:36,190 --> 01:03:42,940 Со она што SQL пребарување на можеле банка блиску, односно, избришете секоја сметка што 1320 01:03:42,940 --> 01:03:44,480 има биланс од $ 0? 1321 01:03:44,480 --> 01:03:47,620 Значи кој од четири сме ние ќе сакате да ги користите? 1322 01:03:47,620 --> 01:03:48,320 Избришеш. 1323 01:03:48,320 --> 01:03:50,180 Па синтакса за тоа? 1324 01:03:50,180 --> 01:03:51,890 Избришете од она маса? 1325 01:03:51,890 --> 01:03:53,550 Сметки. 1326 01:03:53,550 --> 01:03:55,790 А потоа состојбата на кој ние сакаме да ја избришете - 1327 01:03:55,790 --> 01:03:57,280 каде рамнотежа е еднаква на нула. 1328 01:03:57,280 --> 01:04:03,050 Па ги избришете сите редови од сметки каде што рамнотежата е нула. 1329 01:04:03,050 --> 01:04:04,300 Прашања на која било од овие? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Сакате да задача? 1332 01:04:10,260 --> 01:04:11,200 >> Дејвид Џ MALAN: Задача водич. 1333 01:04:11,200 --> 01:04:17,110 Така што во овој еден, ние ќе ви даде малку запознаени структура која ние ја испитавме на 1334 01:04:17,110 --> 01:04:20,450 малку во класа заедно на structs, кој беше на податоци 1335 01:04:20,450 --> 01:04:21,910 структура поврзани во духот. 1336 01:04:21,910 --> 01:04:24,670 Разликата иако со редица е дека моравме да некако се сеќавам на кој 1337 01:04:24,670 --> 01:04:27,900 беше во предниот дел на дното, во голем дел, така што би можеле да заработат повеќе 1338 01:04:27,900 --> 01:04:30,530 ефикасна употреба на меморија, најмалку ако бевме користење низа. 1339 01:04:30,530 --> 01:04:35,460 >> Бидејќи повлекување, ако имаме низа, ако, на пример, ова е пред 1340 01:04:35,460 --> 01:04:38,470 на листа на чекање, ако одам во редот тука, а потоа некој добива во согласност 1341 01:04:38,470 --> 01:04:42,710 зад мене и зад мене и зад мене, и едно лице излегува од линија, 1342 01:04:42,710 --> 01:04:45,930 може, како што видовме некои од нашите човечки волонтери во класа, има секој 1343 01:04:45,930 --> 01:04:47,100 префрлат на овој начин. 1344 01:04:47,100 --> 01:04:50,880 Но, во принцип, откако сите го прават нешто не е најдобро да се користи на време 1345 01:04:50,880 --> 01:04:54,600 во програмата, бидејќи тоа значи дека вашиот алгоритам работи во она што 1346 01:04:54,600 --> 01:04:56,520 асимптотска трчање време? 1347 01:04:56,520 --> 01:04:57,420 Тоа е линеарна. 1348 01:04:57,420 --> 01:04:59,600 >> И јас се чувствувам како тоа е вид на глупави. 1349 01:04:59,600 --> 01:05:02,890 Ако следната лице во линија е следниот лице кое би требало да одат во 1350 01:05:02,890 --> 01:05:04,660 продавница, тие не сите имаат да се движат заедно. 1351 01:05:04,660 --> 01:05:08,200 Само нека тоа лице се куби надвор кога ќе дојде време, на пример. 1352 01:05:08,200 --> 01:05:09,870 За да можеме да ги зачувате малку време таму. 1353 01:05:09,870 --> 01:05:14,840 И така да го стори тоа иако, тоа значи дека дека шефот на дното или на 1354 01:05:14,840 --> 01:05:18,060 редот на чекање се случува да се постепено се движи подлабоко и подлабоко 1355 01:05:18,060 --> 01:05:23,340 во низа и на крајот може да всушност заврши околу ако ние сме со користење на 1356 01:05:23,340 --> 01:05:25,790 низа за чување на луѓето во оваа задача. 1357 01:05:25,790 --> 01:05:28,390 Па речиси може да се мисли на низа на кружен податоци 1358 01:05:28,390 --> 01:05:29,880 структура во таа смисла. 1359 01:05:29,880 --> 01:05:33,970 >> Така некако мора да ги пратите на големината на неа, или навистина на крајот од неа 1360 01:05:33,970 --> 01:05:36,250 а потоа, каде што на почетокот на тоа. 1361 01:05:36,250 --> 01:05:39,490 Па ние предлагаме дека прогласи една таква задача, нарекувајќи 1362 01:05:39,490 --> 01:05:41,330 тоа q, само една буква. 1363 01:05:41,330 --> 01:05:44,570 Тогаш ние предлагаме дека пред да биде иницијализиран на нула и дека големината 1364 01:05:44,570 --> 01:05:45,470 да се иницијализира на нула. 1365 01:05:45,470 --> 01:05:47,770 >> Па сега, нема ништо внатре во тоа задача. 1366 01:05:47,770 --> 01:05:50,910 И бараме од вас да се заврши имплементација на Стави во ред подолу во 1367 01:05:50,910 --> 01:05:55,250 таков начин што функцијата додава n да на крајот на q, а потоа се враќа точно. 1368 01:05:55,250 --> 01:05:58,690 Но, ако q е целосно или негативен, функција, наместо да се врати лажни. 1369 01:05:58,690 --> 01:06:01,060 А ние ви даде неколку на претпоставки. 1370 01:06:01,060 --> 01:06:04,320 Но тие не се навистина функционално релевантни, само што bool постои, 1371 01:06:04,320 --> 01:06:06,690 бидејќи, технички, bool не го прави тоа постојат во C, освен ако не се вклучат во 1372 01:06:06,690 --> 01:06:07,310 одредени хедер датотека. 1373 01:06:07,310 --> 01:06:09,350 Така што беше само бидете сигурни дека не беа дали е ова трик 1374 01:06:09,350 --> 01:06:10,940 Прашањето вид на работа. 1375 01:06:10,940 --> 01:06:16,280 >> Па Стави во ред, ние предложени во примерокот решенија да се имплементираат како што следи. 1376 01:06:16,280 --> 01:06:20,420 Еден, ние прво проверете на леснотија, ниско-бесење плодови. 1377 01:06:20,420 --> 01:06:23,820 Ако задача е полна или бројот што ти се обидуваш да го вметнете е помалку 1378 01:06:23,820 --> 01:06:26,380 од нула, кои што се вели во спецификација на проблемот треба да 1379 01:06:26,380 --> 01:06:30,320 не се дозволени, бидејќи ние само сакаме не-негативни вредности, тогаш треба да 1380 01:06:30,320 --> 01:06:31,640 само враќање false веднаш. 1381 01:06:31,640 --> 01:06:33,820 Па некои релативно лесно грешка проверка. 1382 01:06:33,820 --> 01:06:38,720 Ако сепак сакате да додадете дека вистинските број, ти мораше да се направи малку 1383 01:06:38,720 --> 01:06:39,440 размислување тука. 1384 01:06:39,440 --> 01:06:41,330 И ова е местото каде што тоа е малку досадни ментално, бидејќи ќе треба да 1385 01:06:41,330 --> 01:06:43,000 да дознаам како да се справи со заобиколен. 1386 01:06:43,000 --> 01:06:46,870 >> Но зародишот на идејата дека тука е на интерес за нас е тоа што заобиколен 1387 01:06:46,870 --> 01:06:51,480 често имплицира модуларен аритметика и МО оператор, процентот страна, 1388 01:06:51,480 --> 01:06:55,140 каде што можете да одат од поголема вредност назад до нула, а потоа еден и два и 1389 01:06:55,140 --> 01:06:58,650 три, а потоа назад околу да се нула, еден и два и три и така натаму 1390 01:06:58,650 --> 01:06:59,380 повторно и повторно. 1391 01:06:59,380 --> 01:07:02,880 Па начинот на кој ние предлагаме тоа е дека ние сакаме да индексира во 1392 01:07:02,880 --> 01:07:05,850 низа наречен броеви каде нашите цели броеви лаже. 1393 01:07:05,850 --> 01:07:10,740 Но, за да одам таму, ние прво ќе сакате да направите без оглед на големината на редот е само 1394 01:07:10,740 --> 01:07:14,080 потоа додадете дека без оглед на пред листа е. 1395 01:07:14,080 --> 01:07:17,880 И ефектот од тоа е да ни стави на вистинската позиција на листа на чекање и 1396 01:07:17,880 --> 01:07:20,970 Не се претпостави дека првиот човек во линија е на почетокот, која тој или 1397 01:07:20,970 --> 01:07:24,130 таа апсолутно би можело да биде ако ние исто така се менувале секого. 1398 01:07:24,130 --> 01:07:26,710 Но, ние сме само создавање работа за нас ако ние ја 1399 01:07:26,710 --> 01:07:27,800 дека одредена патека. 1400 01:07:27,800 --> 01:07:29,330 >> За да можеме да го задржи релативно едноставна. 1401 01:07:29,330 --> 01:07:32,180 Ние треба да се запамети дека ние само додаде int на дното. 1402 01:07:32,180 --> 01:07:35,850 А потоа ние едноставно се врати вистина. 1403 01:07:35,850 --> 01:07:38,560 Во меѓувреме, во dequeue, ги прашавме можете да го направите следново. 1404 01:07:38,560 --> 01:07:42,260 Спроведување на таков начин што тоа dequeues, односно ги отстранува и се враќа, 1405 01:07:42,260 --> 01:07:44,190 ИНТ во предниот дел на дното. 1406 01:07:44,190 --> 01:07:46,410 Да се ​​отстрани int, е доволно да го заборавам. 1407 01:07:46,410 --> 01:07:47,650 Вие не треба да ја замени својата малку. 1408 01:07:47,650 --> 01:07:48,820 Па тоа е уште всушност таму. 1409 01:07:48,820 --> 01:07:51,930 Исто како и податоците на хард дискот, ние сме само игнорира фактот 1410 01:07:51,930 --> 01:07:52,970 дека тоа е сега таму. 1411 01:07:52,970 --> 01:07:55,520 И ако q е празна, ние треба да наместо да се врати негативни 1. 1412 01:07:55,520 --> 01:07:56,750 Значи ова се чувствува произволни. 1413 01:07:56,750 --> 01:08:01,640 Зошто се врати негативни 1 наместо лажни? 1414 01:08:01,640 --> 01:08:02,620 Да. 1415 01:08:02,620 --> 01:08:05,070 >> ПУБЛИКАТА: П е чување позитивни вредности. 1416 01:08:05,070 --> 01:08:10,950 Бидејќи вие само да се сместат позитивни вредности во q, негативен е грешка. 1417 01:08:10,950 --> 01:08:11,510 >> Дејвид Џ MALAN: Добро, точно. 1418 01:08:11,510 --> 01:08:14,850 Па затоа ние сме само чување на позитивни вредности или нула, тогаш тоа е во ред да се 1419 01:08:14,850 --> 01:08:18,050 врати негативна вредност како стража вредност, посебен симбол. 1420 01:08:18,050 --> 01:08:21,630 Но ти си пренапишување на историjата таму, бидејќи причина ние сме само 1421 01:08:21,630 --> 01:08:25,890 враќање не-негативни вредности е затоа што ние сакаме да 1422 01:08:25,890 --> 01:08:27,670 имаат стража вредност. 1423 01:08:27,670 --> 01:08:32,617 Па поконкретно, зошто да не само враќање false во случаи на грешки? 1424 01:08:32,617 --> 01:08:33,099 Да. 1425 01:08:33,099 --> 01:08:35,510 >> Публика: Сте успеа да се вратат цел број. 1426 01:08:35,510 --> 01:08:36,630 >> Дејвид Џ MALAN: Токму така. 1427 01:08:36,630 --> 01:08:38,569 И ова е местото каде што C добива прилично ограничувачки. 1428 01:08:38,569 --> 01:08:40,590 Ако си ти што зборуваш си оди да се вратат int, имаш 1429 01:08:40,590 --> 01:08:41,279 да се вратат Инт. 1430 01:08:41,279 --> 01:08:43,689 Вие не може да се фенси и да почне враќањето на bool или плови или 1431 01:08:43,689 --> 01:08:45,040 стринг или нешто слично. 1432 01:08:45,040 --> 01:08:49,370 Сега, пак, JavaScript и PHP и некои други јазици може, всушност, 1433 01:08:49,370 --> 01:08:51,310 ви се врати различни типови на вредности. 1434 01:08:51,310 --> 01:08:54,819 И кои, всушност, може да биде корисно, каде можете да се врати позитивен ints, нули, 1435 01:08:54,819 --> 01:08:59,439 негативни ints, или лажни или нула дури и да се означи грешка. 1436 01:08:59,439 --> 01:09:01,890 Но, ние не го имаат тоа флексибилност во C. 1437 01:09:01,890 --> 01:09:04,569 >> Така е и со dequeue, она што ние предлагаат да се направи е - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> Роб BOWDEN: Вие може да се врати лажни. 1440 01:09:09,830 --> 01:09:13,189 Тоа е само дека лажно е хаш дефинираат лажни до нула. 1441 01:09:13,189 --> 01:09:16,000 Значи, ако се врати лажни, сте враќа нула. 1442 01:09:16,000 --> 01:09:25,470 И нула е валидна нешто во нашата листа на чекање, додека негативните 1 не е ако 1443 01:09:25,470 --> 01:09:27,000 лажни случи да биде негативен 1. 1444 01:09:27,000 --> 01:09:29,972 Но вие не треба дури и треба да знаете дека. 1445 01:09:29,972 --> 01:09:32,399 >> Дејвид Џ MALAN: Тоа е зошто не сум го кажам. 1446 01:09:32,399 --> 01:09:36,450 >> Роб BOWDEN: Но, тоа не е вистина дека не може да се врати лажни. 1447 01:09:36,450 --> 01:09:37,700 >> Дејвид Џ MALAN: Секако. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Па dequeue, информации ние прифаќаме поништат како свој аргумент. 1450 01:09:44,240 --> 01:09:45,479 И тоа е затоа што ние не сме поминува ништо внатре 1451 01:09:45,479 --> 01:09:48,359 Ние само сакаме да се отстрани елементот во предниот дел на дното. 1452 01:09:48,359 --> 01:09:49,819 Па, како би можеле да се обратите за тоа? 1453 01:09:49,819 --> 01:09:51,290 Па, прво, да го направите ова брзо здрав разум чек. 1454 01:09:51,290 --> 01:09:53,350 Ако на листа на чекање големина е 0, постои нема работа да се направи. 1455 01:09:53,350 --> 01:09:54,210 Врати негативни 1. 1456 01:09:54,210 --> 01:09:54,800 Направи. 1457 01:09:54,800 --> 01:09:56,340 Па тоа е неколку линии на мојата програма. 1458 01:09:56,340 --> 01:09:58,180 Па остануваат само четири линии. 1459 01:09:58,180 --> 01:10:01,310 >> Па еве јас да одлучи да Decrement големината. 1460 01:10:01,310 --> 01:10:04,620 И, намалување на големината ефикасно значи дека јас сум заборавил 1461 01:10:04,620 --> 01:10:06,010 нешто не е во таму. 1462 01:10:06,010 --> 01:10:09,910 Но јас, исто така, треба да се ажурира каде предниот дел на броеви се. 1463 01:10:09,910 --> 01:10:11,620 Па да го направите тоа, ми треба да направите две работи. 1464 01:10:11,620 --> 01:10:16,390 Јас прво треба да се сетиш што бројот е во предниот дел на дното, 1465 01:10:16,390 --> 01:10:17,860 затоа што треба да се врати таа работа. 1466 01:10:17,860 --> 01:10:20,910 Па јас не сакаат да случајно забораваат за него, а потоа запишете врз неа. 1467 01:10:20,910 --> 01:10:22,840 Јас сум само ќе се сетам во Инт. 1468 01:10:22,840 --> 01:10:27,310 >> И сега, сакам да се ажурира q.front да се q.front +1. 1469 01:10:27,310 --> 01:10:30,070 Така да ако ова е првата личност во линија, сега, сакам да направам плус 1 до 1470 01:10:30,070 --> 01:10:31,930 укаже на следната лице во линија. 1471 01:10:31,930 --> 01:10:33,420 Но, морам да се справи со тоа заобиколен. 1472 01:10:33,420 --> 01:10:37,270 И ако капацитетот е глобален константна, тоа ќе ми овозможи да бидете сигурни дека 1473 01:10:37,270 --> 01:10:41,140 како што укажуваат на многу последната личност во линија, операцијата modulo ќе донесе 1474 01:10:41,140 --> 01:10:43,840 ме врати на нула на пред редот. 1475 01:10:43,840 --> 01:10:46,050 И што се справува со заобиколен тука. 1476 01:10:46,050 --> 01:10:48,950 А потоа да продолжите да се вратат n. 1477 01:10:48,950 --> 01:10:51,530 >> Сега, строго земено, не сум мора да се декларираат n. 1478 01:10:51,530 --> 01:10:53,880 Јас не треба да го грабне и чувајте го привремено, бидејќи вредноста е 1479 01:10:53,880 --> 01:10:54,740 уште е таму. 1480 01:10:54,740 --> 01:10:57,490 Па јас само би можеле да ја направат вистинската аритметички да се вратат поранешниот шеф 1481 01:10:57,490 --> 01:10:58,450 на задачата. 1482 01:10:58,450 --> 01:11:01,850 Но јас само се чинеше дека ова е повеќе јасно за да всушност го дофати int, го стави 1483 01:11:01,850 --> 01:11:04,320 во N, а потоа се врати што заради јасност, но 1484 01:11:04,320 --> 01:11:05,735 не е строго неопходно. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psst. 1487 01:11:12,130 --> 01:11:13,410 Сите тие се произносим во мојата глава. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> Роб BOWDEN: Значи првото прашање е бинарно дрво проблем. 1490 01:11:19,110 --> 01:11:22,140 Па првото прашање е, ние сме со оглед на овие броеви. 1491 01:11:22,140 --> 01:11:27,160 И ние сакаме некако да ги вметнете во овие јазли, така што тоа е 1492 01:11:27,160 --> 01:11:30,110 регуларна програма пребарување дрво. 1493 01:11:30,110 --> 01:11:36,260 Значи едно нешто да се запамети околу бинарни пребарување дрвја е дека тоа не е 1494 01:11:36,260 --> 01:11:39,800 само дека она кон лево е помалку и нешто што треба да 1495 01:11:39,800 --> 01:11:41,120 право е поголема. 1496 01:11:41,120 --> 01:11:44,580 Тоа треба да биде дека целата дрвото за да Лево е помалку, а целиот дрво 1497 01:11:44,580 --> 01:11:45,740 на правото е поголема. 1498 01:11:45,740 --> 01:11:55,260 >> Значи, ако јас се стави 34 тука на врвот, а потоа Ставив 20 тука, па тоа е валидна, па 1499 01:11:55,260 --> 01:11:56,970 далеку, бидејќи 34 до тука. 1500 01:11:56,970 --> 01:11:57,920 20 ќе левата страна. 1501 01:11:57,920 --> 01:11:58,950 Па тоа е помалку. 1502 01:11:58,950 --> 01:12:03,640 Но, јас не тогаш може да се стави 59 тука, затоа што иако 59 е на десната страна од 20, 1503 01:12:03,640 --> 01:12:06,140 тоа е уште на левата страна на 34. 1504 01:12:06,140 --> 01:12:10,760 Така да со тоа ограничување на ум, Најлесниот начин за веројатно решавање на овој 1505 01:12:10,760 --> 01:12:14,330 Проблемот е само вид од овие броеви - 1506 01:12:14,330 --> 01:12:18,720 така 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 И потоа вметнете оние од лево кон десно. 1508 01:12:21,640 --> 01:12:23,390 >> Па 20 оди овде. 1509 01:12:23,390 --> 01:12:24,630 34 оди овде. 1510 01:12:24,630 --> 01:12:25,830 36 оди овде. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 И ти исто така би можеле да имаат сфатиле со некои приклучување и реализација, 1513 01:12:34,730 --> 01:12:38,830 О, чекај, јас немам доволно броеви да се пополни оваа во текот тука. 1514 01:12:38,830 --> 01:12:42,170 Значи ми треба да reshift што ми пат белешка ќе биде. 1515 01:12:42,170 --> 01:12:47,490 Но да се забележи дека во последните три, ако ви се чита од лево кон десно, тоа е во 1516 01:12:47,490 --> 01:12:48,740 зголемување на ред. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Па сега, ние сакаме да се декларираат она на struct ќе биде за 1519 01:12:56,540 --> 01:12:58,300 јазли во ова дрво. 1520 01:12:58,300 --> 01:13:02,720 Значи она што ние треба во бинарно дрво? 1521 01:13:02,720 --> 01:13:05,830 Па ние имаме вредноста на тип int, па така некои int вредност. 1522 01:13:05,830 --> 01:13:07,220 Не знам она што се нарекува тоа во решение - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Ние треба покажувач кон лево дете и покажувач на правото на детето. 1525 01:13:13,570 --> 01:13:17,540 Па затоа се случува да изгледа вака. 1526 01:13:17,540 --> 01:13:20,510 А тоа всушност ќе изгледа пред Кога на двојно поврзани 1527 01:13:20,510 --> 01:13:25,090 листа нешта, па најава - 1528 01:13:25,090 --> 01:13:27,860 Одам да мора да дојдете сите начин назад до проблем 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Па се забележи тоа изгледа идентично на ова, освен ние едноставно се случи да се јавите на овие 1531 01:13:36,390 --> 01:13:38,590 различни имиња. 1532 01:13:38,590 --> 01:13:41,440 Ние се уште имаат цел број вредност и два покажувачи. 1533 01:13:41,440 --> 01:13:44,850 Тоа е само дека наместо лекување на совети како да се покажува кон следното нешто 1534 01:13:44,850 --> 01:13:47,955 и претходната работа, ние сме лекување покажувачи да се укаже на левата дете 1535 01:13:47,955 --> 01:13:49,205 и правото на детето. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 Па тоа е нашата struct јазол. 1539 01:13:59,650 --> 01:14:03,920 И сега, единствената функција треба да спроведување за ова е пресек, кој 1540 01:14:03,920 --> 01:14:08,320 ние сакаме да одиме во текот на дрво, печатење од вредностите на дрво во ред. 1541 01:14:08,320 --> 01:14:15,241 >> Така гледајќи тука, ние би сакале да се печати од 20, 34, 36, 52, 59, и 106. 1542 01:14:15,241 --> 01:14:17,970 Како да се постигне тоа? 1543 01:14:17,970 --> 01:14:18,890 Така, тоа е прилично слични. 1544 01:14:18,890 --> 01:14:22,910 Ако сте гледале во минатото испит проблемот што си сакал да испечатите 1545 01:14:22,910 --> 01:14:25,940 целото дрво со запирки помеѓу сè, тоа беше, всушност, дури и 1546 01:14:25,940 --> 01:14:27,320 полесно од тоа. 1547 01:14:27,320 --> 01:14:30,950 Значи тука е решение. 1548 01:14:30,950 --> 01:14:33,110 Ова беше значително полесен ако тоа го правеше рекурзивно. 1549 01:14:33,110 --> 01:14:36,650 Не знам дали некој се обидел да го стори тоа iteratively. 1550 01:14:36,650 --> 01:14:38,340 >> Но, прво, имаме нашата база на случајот. 1551 01:14:38,340 --> 01:14:39,660 Што ако коренот е нула? 1552 01:14:39,660 --> 01:14:40,610 Тогаш ние само ќе се вратат. 1553 01:14:40,610 --> 01:14:42,300 Ние не сакаме да се печати ништо. 1554 01:14:42,300 --> 01:14:45,940 Друг ние ќе напречни рекурзивно надолу. 1555 01:14:45,940 --> 01:14:48,140 Печати целата лева поддрво. 1556 01:14:48,140 --> 01:14:51,440 Па печати сè помалку од мојата тековна вредност. 1557 01:14:51,440 --> 01:14:53,930 А потоа јас ќе одам да си се печати. 1558 01:14:53,930 --> 01:14:57,310 А потоа јас ќе одам да recurse по моите Целиот право поддрво, па сè 1559 01:14:57,310 --> 01:14:58,810 поголема од мојата вредност. 1560 01:14:58,810 --> 01:15:03,870 И ова се случува да се печати од сè во ред. 1561 01:15:03,870 --> 01:15:05,860 Прашања за тоа како ова всушност остварува тоа? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> Публика: Имам едно прашање на [нечујни]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> Роб BOWDEN: Значи еден од начините на приближување било рекурзивен проблем е само да мислат 1566 01:15:23,550 --> 01:15:26,275 за тоа како треба да мислат за сите агол случаи. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Па сметаат дека сакаме да печати целата оваа дрво. 1569 01:15:38,110 --> 01:15:42,030 Така што сите ние ќе се обидеме да се фокусира на е ова особено јазол - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 На рекурзивните повици, ние се преправаме оние кои само работа. 1572 01:15:47,420 --> 01:15:54,000 Па еве, овој рекурзивен повик да се напречни, ние дури и без размислување 1573 01:15:54,000 --> 01:15:58,640 во врска со тоа, само traversing на левата три, замислете дека веќе отпечатоци 20 1574 01:15:58,640 --> 01:16:00,730 и 34 за нас. 1575 01:16:00,730 --> 01:16:03,350 А потоа кога ние на крајот рекурзивно јавете се напречни на 1576 01:16:03,350 --> 01:16:07,890 право, дека правилно ќе печати 52, 59, и 106 за нас. 1577 01:16:07,890 --> 01:16:13,620 >> Па со оглед дека ова може да печати 20, 34, и другите може да печати 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 сите ние треба да бидат способни да направите е да печати потполно во средината на тоа. 1579 01:16:17,180 --> 01:16:21,250 Па испечатите сè пред нас. 1580 01:16:21,250 --> 01:16:27,710 Печати потполно, па сегашната јазол печатење 36, редовно printf, а потоа 1581 01:16:27,710 --> 01:16:31,170 печати сè по нас. 1582 01:16:31,170 --> 01:16:32,730 >> Дејвид Џ MALAN: Ова е местото каде рекурзија добива навистина убава. 1583 01:16:32,730 --> 01:16:36,270 Тоа е овој неверојатен скок на верата каде да го направите на најситните малку на работа. 1584 01:16:36,270 --> 01:16:38,460 А потоа ќе ги споделите со некој друг го стори останатото. 1585 01:16:38,460 --> 01:16:40,180 И дека некој друг е, иронично, вас. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Па за сериозни пусти поени, ако дојдете горе на прашања - 1588 01:16:48,360 --> 01:16:50,530 >> Роб BOWDEN: На прашања? 1589 01:16:50,530 --> 01:16:53,490 >> Дејвид Џ MALAN: И по малку да се на броеви, дали некој знае каде 1590 01:16:53,490 --> 01:16:55,190 овие бројки доаѓаат од? 1591 01:16:55,190 --> 01:16:56,610 >> Роб BOWDEN: Имам буквално нема идеја. 1592 01:16:56,610 --> 01:16:59,794 >> Дејвид Џ MALAN: Тие се појавуваат во текот на квизот. 1593 01:16:59,794 --> 01:17:01,150 >> Публика: Дали се тие иста броеви? 1594 01:17:01,150 --> 01:17:01,910 >> Дејвид Џ MALAN: Оние броеви. 1595 01:17:01,910 --> 01:17:03,260 А малку велигденско јајце. 1596 01:17:03,260 --> 01:17:08,100 Така и за оние од вас гледа на интернет на Дома, ако можете да ни кажете преку е-маил за да 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net што значењето на овие периодични шест броеви се 1598 01:17:12,680 --> 01:17:18,560 во текот Квиз 1, ние ќе ви туш со неверојатни внимание на финалната 1599 01:17:18,560 --> 01:17:21,610 предавање и стрес топче. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Убаво, суптилни. 1602 01:17:27,790 --> 01:17:29,570 >> Роб BOWDEN: Секое минатата прашања за ништо на квизот? 1603 01:17:29,570 --> 01:17:32,608