1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> David J. MALAN: Dobrze. 3 00:00:12,900 --> 00:00:16,790 Tak więc zapraszamy do pierwszego w historii CS50 pośmiertna na quiz. 4 00:00:16,790 --> 00:00:18,340 Myśleliśmy, że będziemy zainaugurować tradycja ta w tym roku. 5 00:00:18,340 --> 00:00:20,960 I będzie to okazja przejść przez 6 00:00:20,960 --> 00:00:22,220 rozwiązania quizu. 7 00:00:22,220 --> 00:00:26,160 A my przyspieszyć lub spowolnić w oparciu na interesie tych tutaj. 8 00:00:26,160 --> 00:00:29,730 >> Tak, jesteś prawdopodobnie dlatego, że jesteś tu zainteresowany jak można mieć lub 9 00:00:29,730 --> 00:00:31,170 powinien odpowiedzieć niektóre z tych problemów. 10 00:00:31,170 --> 00:00:33,300 Więc dlaczego nie spojrzeć w tej części pierwsze? 11 00:00:33,300 --> 00:00:34,450 Więc coraz sznurki. 12 00:00:34,450 --> 00:00:37,600 Ten dał ci trzy różne wersje programu, który był, ostatecznie, 13 00:00:37,600 --> 00:00:39,650 Oznaczało uzyskać ciąg od użytkownika. 14 00:00:39,650 --> 00:00:42,530 Czy nie jest tak, że był w lewo, aby was do ustalenia. 15 00:00:42,530 --> 00:00:45,150 >> I zapytaliśmy w pytaniu 0, Przypuszczam, że jest w wersji 1 16 00:00:45,150 --> 00:00:46,400 opracowany i wykonany. 17 00:00:46,400 --> 00:00:48,860 Dlatego program może się wysypać? 18 00:00:48,860 --> 00:00:51,150 Na pierwszy rzut oka, wszelkie sugestie dlaczego? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Tak. 21 00:00:54,489 --> 00:00:59,260 >> PUBLICZNOŚCI: Więc Pamiętam to w poprzedni przykład, patrząc na 22 00:00:59,260 --> 00:01:05,506 char * s, a widząc skanowanie si zobaczyć, bo to wskaźnik, jak 23 00:01:05,506 --> 00:01:07,971 nie wpływać na to, co skanowane? 24 00:01:07,971 --> 00:01:10,940 Czy to s lub adres s? 25 00:01:10,940 --> 00:01:11,180 >> David J. MALAN: OK. 26 00:01:11,180 --> 00:01:11,480 Dobry. 27 00:01:11,480 --> 00:01:14,830 Tak więc ostatecznie źródłem problemu jest prawdopodobnie w stanie zredukować 28 00:01:14,830 --> 00:01:16,210 do tej zmiennej s. 29 00:01:16,210 --> 00:01:17,280 I to jest rzeczywiście zmienna. 30 00:01:17,280 --> 00:01:19,900 Typ danych tej zmiennej jest char *, co oznacza, że ​​będzie 31 00:01:19,900 --> 00:01:22,570 zawierać adres charakter. 32 00:01:22,570 --> 00:01:23,850 I na tym polega wgląd. 33 00:01:23,850 --> 00:01:28,330 To będzie zawierać adres charakter lub, bardziej ogólnie, 34 00:01:28,330 --> 00:01:32,110 adres pierwszego znaku Cały blok znaków. 35 00:01:32,110 --> 00:01:36,680 >> Ale Połów jest, że s skanowania, cel w życie, jest podany adres i podane 36 00:01:36,680 --> 00:01:40,960 Kod formatu, jak% s, przeczytaj Ciąg do kawałka 37 00:01:40,960 --> 00:01:42,330 pamięci pod tym adresem. 38 00:01:42,330 --> 00:01:46,040 Ale ponieważ nie ma znaku równości przed że średnik na pierwszy 39 00:01:46,040 --> 00:01:49,310 linii kodu, ponieważ w rzeczywistości nie przydzielić dowolną pamięć 40 00:01:49,310 --> 00:01:53,020 malloc, ponieważ w rzeczywistości nie przydzielić tablicę jakiegoś rozmiaru, wszystko 41 00:01:53,020 --> 00:01:57,620 robisz czyta użytkownika klawiatura w niektórych kompletne 42 00:01:57,620 --> 00:02:00,490 wartość śmieci, które jest w s domyślnie. 43 00:02:00,490 --> 00:02:04,480 Więc kursy masz zamiar wysypać jeśli że adres nie tak się stało 44 00:02:04,480 --> 00:02:08,009 jest to wartość, która się da, w rzeczywistości, napisz do. 45 00:02:08,009 --> 00:02:10,889 Tak źle nie przeznaczyć pamięć nie. 46 00:02:10,889 --> 00:02:13,150 >> Więc w pytaniu 1, poprosiliśmy, Przypuszczam, że jest w wersji 2 47 00:02:13,150 --> 00:02:14,230 opracowany i wykonany. 48 00:02:14,230 --> 00:02:15,900 Dlaczego ten program może się wysypać? 49 00:02:15,900 --> 00:02:17,990 Więc ten jest mniej błędów. 50 00:02:17,990 --> 00:02:21,470 I jest tylko jedna oczywisty sposób, gdzie można 51 00:02:21,470 --> 00:02:22,810 wywołać segfault tutaj. 52 00:02:22,810 --> 00:02:23,730 I to jest tematyczna. 53 00:02:23,730 --> 00:02:28,180 Za każdym razem używamy c w pamięci, co można zrobić, aby wywołać segfault 54 00:02:28,180 --> 00:02:30,718 w wersji 2? 55 00:02:30,718 --> 00:02:35,560 >> PUBLICZNOŚCI: Jeśli używasz tego wejścia w ciąg znaków, który jest dłuższy niż 49 56 00:02:35,560 --> 00:02:35,975 znaków. 57 00:02:35,975 --> 00:02:37,260 >> David J. MALAN: Dokładnie. 58 00:02:37,260 --> 00:02:41,420 Za każdym razem można zobaczyć coś o stałej długości jeśli chodzi o tablicę, twój 59 00:02:41,420 --> 00:02:44,650 Radar powinien zgasnąć, że może to być problematyczne, jeśli nie sprawdzając 60 00:02:44,650 --> 00:02:45,810 Granice tablicy. 61 00:02:45,810 --> 00:02:46,650 I to jest problem. 62 00:02:46,650 --> 00:02:47,910 Wciąż za pomocą scanf. 63 00:02:47,910 --> 00:02:52,200 Wciąż za pomocą% s, co oznacza, spróbuj czytać ciąg od użytkownika. 64 00:02:52,200 --> 00:02:56,300 Że będzie czytać do s, która, W tym momencie jest skutecznie 65 00:02:56,300 --> 00:02:58,570 adres pamięci kawałka czy jest to równoważne. 66 00:02:58,570 --> 00:03:02,080 To jest nazwa tablicy znaków z pamięci. 67 00:03:02,080 --> 00:03:07,610 >> Ale dokładnie to, jeśli czytasz ciąg że jest dłuższy niż 49 znaków, 49 68 00:03:07,610 --> 00:03:10,440 bo trzeba pokój dla backslash 0, idziesz do przepełnienia 69 00:03:10,440 --> 00:03:11,390 że bufor. 70 00:03:11,390 --> 00:03:16,410 I może będziesz miał szczęście i być w stanie napisz 51-sze charakter, 52-ga, 53-sze. 71 00:03:16,410 --> 00:03:18,560 Ale w pewnym momencie, OS powie, nie. 72 00:03:18,560 --> 00:03:21,270 To na pewno nie jest pamięć masz prawo dotykać. 73 00:03:21,270 --> 00:03:23,380 I program będzie się wysypać. 74 00:03:23,380 --> 00:03:26,650 >> Tak więc, gdy powinien być dowolny heurystyczne czas masz stałą długość, masz 75 00:03:26,650 --> 00:03:30,150 aby upewnić się, że sprawdzanie długości o cokolwiek to jest, że próbujesz 76 00:03:30,150 --> 00:03:31,090 czytać do niego. 77 00:03:31,090 --> 00:03:35,110 >> PUBLICZNOŚCI: Więc do rozwiązania, że ​​można mieli faktycznie sprawdzania oświadczenia 78 00:03:35,110 --> 00:03:37,140 Czy długość większą lub mniejsza niż? 79 00:03:37,140 --> 00:03:37,730 >> David J. MALAN: Absolutnie. 80 00:03:37,730 --> 00:03:41,706 Musisz tylko warunek , który mówi, jeśli - 81 00:03:41,706 --> 00:03:46,080 czy raczej nie koniecznie wiedzieć z góry, ile znaków 82 00:03:46,080 --> 00:03:49,060 użytkownik będzie wpisać, ponieważ masz kurczaka i jaj. 83 00:03:49,060 --> 00:03:51,860 Nie, dopóki nie przeczytać w ze scanf można dowiedzieć się, jak długo to jest. 84 00:03:51,860 --> 00:03:54,500 Ale w tym momencie, nie jest za późno, bo już ją przeczytać w 85 00:03:54,500 --> 00:03:55,710 jakiś blok pamięci. 86 00:03:55,710 --> 00:03:59,590 Tak na marginesie, unika biblioteki CS50 Ten problem w ogóle, przywróć 87 00:03:59,590 --> 00:04:01,060 za pomocą fgetc. 88 00:04:01,060 --> 00:04:05,390 I odczytuje jeden znak na raz, tip-toeing wzdłuż, wiedząc, że 89 00:04:05,390 --> 00:04:08,060 nie może przelewać razie charakter czytasz po jednym na raz. 90 00:04:08,060 --> 00:04:11,580 >> Połów z wycofaniem GetString jest że musimy stale re-size 91 00:04:11,580 --> 00:04:13,590 że fragment pamięci, który jest po prostu ból. 92 00:04:13,590 --> 00:04:15,310 To wiele linii Kod do tego celu. 93 00:04:15,310 --> 00:04:18,779 Więc inne podejście byłoby faktycznie korzysta kuzyna, więc 94 00:04:18,779 --> 00:04:19,790 powiem, scanf. 95 00:04:19,790 --> 00:04:22,820 Istnieją warianty wielu z nich Funkcje, które faktycznie sprawdź 96 00:04:22,820 --> 00:04:25,870 długość ile znaków można odczytać maksymalnie. 97 00:04:25,870 --> 00:04:29,430 I można określić, nie czytaj więcej niż 50 znaków. 98 00:04:29,430 --> 00:04:34,110 Tak, że będzie to kolejne podejście, ale mniej przychylne większych nakładów. 99 00:04:34,110 --> 00:04:37,040 >> Więc pytanie 2 pyta, przypuszczam, że wersja 3 jest kompilowany i wykonywany. 100 00:04:37,040 --> 00:04:39,960 Dlatego, że program może się wysypać? 101 00:04:39,960 --> 00:04:42,650 Więc ten jest rzeczywiście taki sam odpowiedzieć, mimo że 102 00:04:42,650 --> 00:04:43,590 wygląda trochę bardziej wyszukane. 103 00:04:43,590 --> 00:04:46,440 Używamy malloc, która czuje się jak dajemy sobie więcej opcji. 104 00:04:46,440 --> 00:04:48,030 A następnie, że mamy uwolnienie Pamięć na końcu. 105 00:04:48,030 --> 00:04:49,580 To wciąż zaledwie 50 bajtów pamięci. 106 00:04:49,580 --> 00:04:53,620 Więc może nadal próbować czytać w 51, 52, 1000 bajtów. 107 00:04:53,620 --> 00:04:55,830 To się wysypać na dokładnie z tego samego powodu. 108 00:04:55,830 --> 00:04:57,530 >> Ale jest też inny powód. 109 00:04:57,530 --> 00:05:03,890 Co jeszcze może malloc zwrot oprócz adres kawałkiem pamięci? 110 00:05:03,890 --> 00:05:04,920 Może to zwróci null. 111 00:05:04,920 --> 00:05:07,560 A ponieważ nie jesteśmy sprawdzanie że możemy robić coś 112 00:05:07,560 --> 00:05:11,350 głupi z innego powodu, co jest, że możemy opowiadać scanf, przeczytaj 113 00:05:11,350 --> 00:05:16,050 Wejście użytkownika z klawiatury do 0 lokalizacji, AKA zerowy. 114 00:05:16,050 --> 00:05:18,890 I to też na pewno wywołać segfault. 115 00:05:18,890 --> 00:05:21,590 Więc dla celów quiz, w my by zaakceptowali albo jako tych, 116 00:05:21,590 --> 00:05:22,740 ważny powód. 117 00:05:22,740 --> 00:05:23,420 Jednym z nich jest identyczna. 118 00:05:23,420 --> 00:05:25,720 Jednym z nich jest trochę bardziej dopracowany. 119 00:05:25,720 --> 00:05:28,975 >> Wreszcie, w odniesieniu do programu jest Korzystanie z pamięci, jak zrobić w wersji 2 i 120 00:05:28,975 --> 00:05:30,350 wersja 3 różnią? 121 00:05:30,350 --> 00:05:35,070 Więc na co warto, widzieliśmy nieskończoną dostaw możliwe 122 00:05:35,070 --> 00:05:35,770 Odpowiedzi na to. 123 00:05:35,770 --> 00:05:39,300 A wśród odpowiedzi ludzi, co my nadzieję, ale przyjęte inne 124 00:05:39,300 --> 00:05:42,250 rzeczy, była jakaś wzmianka o Fakt, że w wersji 2 korzysta 125 00:05:42,250 --> 00:05:44,560 tak zwany stos. 126 00:05:44,560 --> 00:05:46,710 Wersja 3 jest za pomocą sterty. 127 00:05:46,710 --> 00:05:50,060 I funkcjonalnie, to naprawdę nie ma uczynić wszystko, że wielkiej różnicy. 128 00:05:50,060 --> 00:05:54,040 Na koniec dnia, wciąż dopiero się 50 bajtów pamięci. 129 00:05:54,040 --> 00:05:56,640 >> Ale to był jeden z możliwych odpowiedzi że szukaliśmy na. 130 00:05:56,640 --> 00:05:59,730 Ale zobaczymy, jak masz swoje quizy z powrotem z TFS, że zrobiliśmy 131 00:05:59,730 --> 00:06:04,330 przyjąć inne dyskusje na ich odmienne zastosowania pamięci, jak również. 132 00:06:04,330 --> 00:06:08,600 Ale stosu i sterty byłoby Prosta odpowiedź, aby przejść z. 133 00:06:08,600 --> 00:06:11,150 Masz pytanie? 134 00:06:11,150 --> 00:06:12,400 Daję ci Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: Więc problemem 4. 137 00:06:20,210 --> 00:06:21,985 To jest to, w którym trzeba było wypełnić liczby bajtów ze wszystkich 138 00:06:21,985 --> 00:06:23,460 Te różne typy używane. 139 00:06:23,460 --> 00:06:24,830 Tak więc pierwszą rzeczą, którą widzimy. 140 00:06:24,830 --> 00:06:27,930 Zakładają architekturę 32-bitową, jak tego urządzenia CS50. 141 00:06:27,930 --> 00:06:33,530 Tak więc jedną z podstawowych rzeczy na temat 32-bitowych, które mówi nam, 142 00:06:33,530 --> 00:06:37,490 dokładnie, jak duża będzie wskaźnik być w architekturze. 143 00:06:37,490 --> 00:06:43,020 >> Więc od razu wiemy, że każdy wskaźnik typ jest 32-bitowy lub 4 bajty. 144 00:06:43,020 --> 00:06:46,010 Tak więc, patrząc przy tym stole, węzeł * jest typ wskaźnika. 145 00:06:46,010 --> 00:06:47,250 Że będzie to 4 bajty. 146 00:06:47,250 --> 00:06:51,640 Węzeł struct *, to jest dosłownie identyczna gwiazda węzła. 147 00:06:51,640 --> 00:06:53,590 I tak, że będzie to 4 bajty. 148 00:06:53,590 --> 00:06:58,270 String, więc to nie wygląda pointer jeszcze, ale typedef, 149 00:06:58,270 --> 00:07:01,590 ciąg jest tylko char *, które jest typ wskaźnika. 150 00:07:01,590 --> 00:07:03,550 Tak, że będzie to 4 bajty. 151 00:07:03,550 --> 00:07:06,150 >> Więc te trzy są wszystkie 4 bajty. 152 00:07:06,150 --> 00:07:09,350 Teraz, węzeł i uczeń są nieco bardziej skomplikowana. 153 00:07:09,350 --> 00:07:15,160 Więc patrząc na węźle i ucznia, widzimy węzeł jako liczba całkowita i wskaźnik. 154 00:07:15,160 --> 00:07:18,050 A uczeń jest dwa wskaźniki w jej wnętrzu. 155 00:07:18,050 --> 00:07:23,340 Więc przynajmniej tutaj w naszym przypadku, sposób które kończy się obliczanie rozmiaru 156 00:07:23,340 --> 00:07:27,020 ta struktura jest po prostu dodać wszystko to jest wewnątrz struktury. 157 00:07:27,020 --> 00:07:30,690 >> Więc dla węzła, mamy liczbę całkowitą, który wynosi 4 bajty. 158 00:07:30,690 --> 00:07:32,830 Mamy wskaźnik, który jest 4 bajty. 159 00:07:32,830 --> 00:07:35,820 I tak jeden węzeł będzie do podjęcia 8 bajtów. 160 00:07:35,820 --> 00:07:39,490 I podobnie dla ucznia, mamy wskaźnik to 4 bajty i innym 161 00:07:39,490 --> 00:07:40,770 wskaźnik to 4 bajty. 162 00:07:40,770 --> 00:07:43,180 Tak, że będzie do końca się jest 8 bajtów. 163 00:07:43,180 --> 00:07:45,480 Więc węzeł i studentów jest 8 bajtów. 164 00:07:45,480 --> 00:07:48,950 I te trzy są wszystkie 4 bajty. 165 00:07:48,950 --> 00:07:50,240 Pytania na ten temat? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Tak. 168 00:07:54,990 --> 00:07:58,413 >> PUBLICZNOŚCI: Czy to był 64-bitowy architektura, czy to 169 00:07:58,413 --> 00:07:59,880 podwoić wszystkie z nich? 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: To nie byłoby podwoić wszystkie z nich. 171 00:08:01,790 --> 00:08:05,830 Tak więc 64-bitowa architektura, to, znowu, Zmiany, które podstawową rzeczą, która 172 00:08:05,830 --> 00:08:08,910 wskaźnik jest teraz 64 bity. 173 00:08:08,910 --> 00:08:09,290 Tak. 174 00:08:09,290 --> 00:08:10,930 Więc wskaźnik wynosi 8 bajtów. 175 00:08:10,930 --> 00:08:15,420 Więc to, że były 4 bajty będą 8 bajtów. 176 00:08:15,420 --> 00:08:18,617 Uczeń, który był dwa wskaźniki, No, teraz to się 177 00:08:18,617 --> 00:08:19,800 jest 8 bajtów 8 bajtów. 178 00:08:19,800 --> 00:08:21,980 To się dzieje, aby 16 bajtów. 179 00:08:21,980 --> 00:08:25,710 >> Jednak wciąż jest węzeł 4 bajty. 180 00:08:25,710 --> 00:08:27,800 Więc ten wskaźnik będzie się 8 bajtów. 181 00:08:27,800 --> 00:08:28,930 Jest to 4 bajty. 182 00:08:28,930 --> 00:08:30,870 Tak się dzieje tylko węzeł być 12 bajtów. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Wszelkie inne pytania dotyczące tego jednego? 185 00:08:39,280 --> 00:08:44,500 Tak więc następna, są kody stanu HTTP. 186 00:08:44,500 --> 00:08:48,000 I trzeba było opisać okoliczności , zgodnie z którymi mogą one 187 00:08:48,000 --> 00:08:49,810 być zwrócone. 188 00:08:49,810 --> 00:08:56,730 jeden problem, że słyszałem jakieś studentów jest to, że starali się zrobić 189 00:08:56,730 --> 00:08:58,950 Błędy są na końcu klienta. 190 00:08:58,950 --> 00:09:02,320 Tak więc, gdy staramy się, aby wniosek do serwera, coś się 191 00:09:02,320 --> 00:09:03,820 porządku na naszym celu. 192 00:09:03,820 --> 00:09:07,660 Ale ogólnie, kody te są zwracane przez serwer. 193 00:09:07,660 --> 00:09:11,720 Dlatego chcemy, aby dowiedzieć się, co się dzieje źle lub w prawo na serwerze, 194 00:09:11,720 --> 00:09:14,280 powoduje, że te rzeczy, które mają być zwrócone. 195 00:09:14,280 --> 00:09:18,670 A może tak, dlaczego serwer powraca Kod statusu 200? 196 00:09:18,670 --> 00:09:19,920 Wszelkie myśli? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Tak. 199 00:09:23,730 --> 00:09:27,850 Więc coś o pomyślnym Wniosek przeszedł. 200 00:09:27,850 --> 00:09:30,260 I są w stanie powrócić co prosiłeś. 201 00:09:30,260 --> 00:09:32,240 Tak więc wszystko było w porządku. 202 00:09:32,240 --> 00:09:35,662 Co o 302 znaleziono? 203 00:09:35,662 --> 00:09:36,618 Tak. 204 00:09:36,618 --> 00:09:39,008 >> PUBLICZNOŚCI: serwer szukał za to, co szukasz. 205 00:09:39,008 --> 00:09:40,442 Ale nie mógł go znaleźć. 206 00:09:40,442 --> 00:09:42,850 Więc jest błąd. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: serwer był więc patrząc na to, co chciał. 208 00:09:47,720 --> 00:09:51,682 Więc po prostu patrząc tu 302 znalezionych, było w stanie go znaleźć. 209 00:09:51,682 --> 00:09:53,035 >> PUBLICZNOŚCI: Przepraszam. 210 00:09:53,035 --> 00:09:54,388 Znaleziono oznacza, że ​​zrobili go znaleźć. 211 00:09:54,388 --> 00:09:55,638 Przepraszam. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: Tak 302 stwierdzone. 214 00:10:00,160 --> 00:10:02,350 Serwer jest w stanie znaleźć co chciałeś. 215 00:10:02,350 --> 00:10:04,640 >> PUBLICZNOŚCI: Ale to nie pokazujemy go? 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: różnica między to 302 200 jest to, że 217 00:10:08,180 --> 00:10:09,280 wie, co chcesz. 218 00:10:09,280 --> 00:10:12,000 Ale to nie jest dokładnie tam, gdzie chciałeś zapytać. 219 00:10:12,000 --> 00:10:14,580 Więc 302 to typowy przekierowanie. 220 00:10:14,580 --> 00:10:16,510 Więc wniosek strony. 221 00:10:16,510 --> 00:10:19,590 Wie, oh, chcę to do ciebie wrócić. 222 00:10:19,590 --> 00:10:21,070 Jest to jednak w innym URL. 223 00:10:21,070 --> 00:10:23,534 Więc hej, rzeczywiście chcesz tego. 224 00:10:23,534 --> 00:10:26,950 >> David J. MALAN: To jest kawałek, który powiedział: że daliśmy wam przekierowanie 225 00:10:26,950 --> 00:10:30,830 Funkcja używana funkcję nagłówka To z kolei, drukowane lokalizację 226 00:10:30,830 --> 00:10:34,110 okrężnicy, a następnie adres URL, który chcesz odrzucić użytkownika. 227 00:10:34,110 --> 00:10:37,480 Nawet jeśli nie widziałeś 302 tam wyraźnie, że co PHP 228 00:10:37,480 --> 00:10:41,550 będzie magicznie wstawić jako nagłówek mówiąc dokładnie to, co powiedział, że Rob - 229 00:10:41,550 --> 00:10:41,930 znaleziono. 230 00:10:41,930 --> 00:10:43,180 Ale go tutaj zamiast. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB BOWDEN: OK. 233 00:10:46,160 --> 00:10:47,630 Więc co o 403 zakazane? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> PUBLICZNOŚCI: Myślę, że to, że serwer jest w zasadzie powiedzieć, że klient 236 00:10:57,120 --> 00:10:59,970 Nie można przejść do strony startowej. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: Więc tak. 238 00:11:03,260 --> 00:11:07,670 Cóż, typowa odpowiedź byliśmy spodziewałem się czegoś podobnego, plików 239 00:11:07,670 --> 00:11:08,920 nie chmodded odpowiednio. 240 00:11:08,920 --> 00:11:11,590 To prawdopodobnie w jakich okolicznościach je zobaczył. 241 00:11:11,590 --> 00:11:18,920 Ale nie ma powodu, że klient może być winy tutaj. 242 00:11:18,920 --> 00:11:20,440 Jest rzeczywiście inny kod statusu - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Tak więc są one bardzo podobne. 245 00:11:22,820 --> 00:11:24,590 >> 401 jest nieuprawnione. 246 00:11:24,590 --> 00:11:26,130 I 403 jest zabronione. 247 00:11:26,130 --> 00:11:31,890 I tak można wyłącznie nieuprawnione uzyskać, jeśli nie jesteś zalogowany 248 00:11:31,890 --> 00:11:34,520 Ale może oznaczać zalogowaniu które są upoważnione. 249 00:11:34,520 --> 00:11:37,930 Ale jeśli jesteś już zalogowany i nadal nie ma uprawnień, a następnie 250 00:11:37,930 --> 00:11:40,140 można również uzyskać zabronione. 251 00:11:40,140 --> 00:11:45,320 Tak więc, jeśli jesteś zalogowany i nie mają zgody, zabronione jest również 252 00:11:45,320 --> 00:11:47,164 coś, co możesz dostać. 253 00:11:47,164 --> 00:11:48,900 >> David J. MALAN: I przez mechanizm którym problemy te są zwykle 254 00:11:48,900 --> 00:11:53,100 rozwiązany na serwerze jest przez co polecenie? 255 00:11:53,100 --> 00:11:57,700 Chmod, jeśli jest, rzeczywiście, uprawnienia wydać na pliku lub katalogu. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: A 404 nie znaleziono. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Tak. 259 00:12:03,470 --> 00:12:10,150 Tak więc w przeciwieństwie do 302, w którym nie było dokładnie to, w którym prosisz, ale wie, co 260 00:12:10,150 --> 00:12:12,710 chcesz, to po prostu ma nie wiem, co chcesz. 261 00:12:12,710 --> 00:12:15,648 I nie żądają coś ważne. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Jestem czajnik, a następnie 500 wewnętrzny serwer. 264 00:12:22,310 --> 00:12:24,870 Dlaczego więc może masz? 265 00:12:24,870 --> 00:12:26,120 >> Więc segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Właściwie nie wiem, zaszeregowanie Norma tego. 268 00:12:30,640 --> 00:12:34,850 Ale jeśli Twój kod PHP coś złego w tym, teoretycznie, może to 269 00:12:34,850 --> 00:12:39,650 faktycznie wysypać, w tym przypadku, to 500 wewnętrzny błąd serwera, coś 270 00:12:39,650 --> 00:12:41,400 jest nie tak z Twojego serwera konfiguracja. 271 00:12:41,400 --> 00:12:44,320 Lub jest błąd składni w kodzie PHP. 272 00:12:44,320 --> 00:12:46,095 Lub coś złego się dzieje. 273 00:12:46,095 --> 00:12:48,320 >> David J. MALAN: Widzieliśmy segfault Wśród odpowiedzi kilka osób. 274 00:12:48,320 --> 00:12:49,490 I technicznie, to może się zdarzyć. 275 00:12:49,490 --> 00:12:53,820 Ale to byłoby PHP, program napisane przez innych ludzi, w rzeczywistości 276 00:12:53,820 --> 00:12:57,790 segfaulted, które tylko wtedy, gdy te osoby wkręca się i napisał kod w buggy 277 00:12:57,790 --> 00:13:00,680 by ich tłumacz Samo PHP wysypać. 278 00:13:00,680 --> 00:13:06,460 Tak więc mimo, że 500 jest jak segfault w duchu, to prawie zawsze 279 00:13:06,460 --> 00:13:10,490 wynikiem emisji pliku konfiguracyjnego z serwera WWW lub, jak Rob powiedział, 280 00:13:10,490 --> 00:13:13,200 błąd składni, jak ty nie zamknąć cytatów. 281 00:13:13,200 --> 00:13:16,180 Lub zgubiłeś średnik gdzieś. 282 00:13:16,180 --> 00:13:23,677 >> PUBLICZNOŚCI: Tak dla pset Shuttle, ja że kiedy zrobiłem to raz kliknąłem 283 00:13:23,677 --> 00:13:26,300 Przeglądarka, ale nic nie wymyślił, co nazywa biała strona. 284 00:13:26,300 --> 00:13:28,056 Ale to było ze względu na kod. 285 00:13:28,056 --> 00:13:29,440 Myślę, że była obsługa JavaScript, prawda? 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Tak. 287 00:13:29,770 --> 00:13:31,180 >> PUBLICZNOŚCI: Czy ten błąd jeszcze wymyślić? 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Więc to nie dostał ten błąd, bo wszystko 289 00:13:34,290 --> 00:13:36,930 z punktu widzenia serwera WWW było całkowicie w porządku. 290 00:13:36,930 --> 00:13:39,090 Ale o index.html. 291 00:13:39,090 --> 00:13:42,000 Zażądano shuttle.js i service.js. 292 00:13:42,000 --> 00:13:44,580 I było w stanie z powodzeniem powrócić do was wszystkich z tych rzeczy - 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 To tylko wtedy, gdy Twoja przeglądarka próbował interpretują kod JavaScript, który 296 00:13:49,330 --> 00:13:51,370 to jak, czekaj, to nie jest ważny błąd JavaScript. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Wszelkie inne pytania? 299 00:13:58,210 --> 00:14:00,750 Dobrze. 300 00:14:00,750 --> 00:14:04,120 >> David J. MALAN: Więc następna up był numer 11. 301 00:14:04,120 --> 00:14:07,610 I 11 był najstraszniejszy dla wielu ludzi. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Więc najważniejsze jest, aby pamiętać o to, że jest to w istocie o 304 00:14:18,570 --> 00:14:19,840 listy dwukierunkowe. 305 00:14:19,840 --> 00:14:23,160 Ale to nie był taki sam jak w zeszłym roku podwójnie związany lista problemu, 306 00:14:23,160 --> 00:14:27,170 która nie daje zastrzeżeniem, że Lista ta może, w rzeczywistości, być sortowane. 307 00:14:27,170 --> 00:14:29,640 >> Tak więc fakt, że lista była nieposortowane i fakt, że to słowo było 308 00:14:29,640 --> 00:14:32,930 podkreślony nie miał przekazać że jest to faktycznie uproszczenie 309 00:14:32,930 --> 00:14:35,430 , co w przeciwnym razie byłoby trudniejsze problemem 310 00:14:35,430 --> 00:14:36,600 i dłuższa. 311 00:14:36,600 --> 00:14:40,760 Tak częstym błędem tutaj było wyprowadzić zeszłoroczny rozwiązanie na jeden 312 00:14:40,760 --> 00:14:45,580 pager, a następnie po prostu ślepo kopiować że w dół jako odpowiedź, co jest w porządku 313 00:14:45,580 --> 00:14:48,520 odpowiedzieć na inne pytanie podobne w duchu. 314 00:14:48,520 --> 00:14:51,340 Ale tu subtelności był następujący. 315 00:14:51,340 --> 00:14:55,200 >> Tak jeden, mamy zgłoszone i węzła określono w zwykły sposób tutaj. 316 00:14:55,200 --> 00:14:59,230 Następnie zdefiniowano lista być globalne wskaźnik zerowane. 317 00:14:59,230 --> 00:15:02,150 Potem najwyraźniej, nie dwie funkcje mamy prototypy tutaj, wkładka 318 00:15:02,150 --> 00:15:03,240 i usunąć. 319 00:15:03,240 --> 00:15:06,600 A potem mamy przykładowy kod tutaj robi kilka wstawek. 320 00:15:06,600 --> 00:15:09,930 A następnie prosimy o wypełnienie Realizacja takich poniżej wkładki 321 00:15:09,930 --> 00:15:14,380 sposób, że wchodzi n na liście w stałym czasie, podkreślił również, 322 00:15:14,380 --> 00:15:15,730 nawet jeśli już obecny. 323 00:15:15,730 --> 00:15:20,600 >> Tak więc piękno jest w stanie włożyć W czasie stałym jest to, że wiąże 324 00:15:20,600 --> 00:15:23,060 że trzeba włożyć nowy węzeł, gdzie? 325 00:15:23,060 --> 00:15:23,690 Do przodu. 326 00:15:23,690 --> 00:15:27,760 Więc to eliminuje, na szczęście, przynajmniej jeden z przypadków, które wymagają używanych 327 00:15:27,760 --> 00:15:30,520 jeszcze więcej linii kodu, jak to miało w zeszłym roku, a nawet w klasie, kiedy 328 00:15:30,520 --> 00:15:34,040 rozmawiał przez tego typu rzeczy z ludzi, a niektóre 329 00:15:34,040 --> 00:15:35,250 werbalne pseudo kod. 330 00:15:35,250 --> 00:15:39,190 Więc w tutaj rozwiązania, niech pominąć się, że po prostu mają na Visual 331 00:15:39,190 --> 00:15:40,480 ekran. 332 00:15:40,480 --> 00:15:42,230 >> Zauważ, że robimy, co następuje. 333 00:15:42,230 --> 00:15:45,140 A także zauważyć inne uproszczenia , że nawet jeżeli jest 334 00:15:45,140 --> 00:15:48,280 obecna, więc oznacza to, nawet jeśli Numer jest już tam, można 335 00:15:48,280 --> 00:15:50,280 ślepo wstawić inny kopia. 336 00:15:50,280 --> 00:15:52,560 I tak też, miało być uproszczenia, tak aby można było 337 00:15:52,560 --> 00:15:54,940 skupić się na naprawdę, niektóre z bardziej ciekawe intelektualnie część i 338 00:15:54,940 --> 00:15:58,090 nie tylko niektóre dodatkowe sprawdzanie błędów z uwagi na ograniczony czas. 339 00:15:58,090 --> 00:16:02,880 >> Tak więc w tym roztworze próbki, możemy przydzielić Wskaźnik na lewej 340 00:16:02,880 --> 00:16:04,510 bok, żeby węzeł. 341 00:16:04,510 --> 00:16:07,190 Teraz, uświadomić sobie, że wskaźnik, jak Rob powiedział, jest tylko 32 bitów. 342 00:16:07,190 --> 00:16:09,060 I faktycznie nie zawierają adres, dopóki nie 343 00:16:09,060 --> 00:16:09,970 przypisać mu adres. 344 00:16:09,970 --> 00:16:13,220 I robimy to na prawej z boku przez malloc. 345 00:16:13,220 --> 00:16:16,550 Jak dobry obywatel, możemy sprawdzić, że się przydzielić nie jest w rzeczywistości pusty, tak że 346 00:16:16,550 --> 00:16:18,690 nie przypadkowo utworzyć segfault tutaj. 347 00:16:18,690 --> 00:16:22,840 I za każdym razem użyć malloc w życiu, należy sprawdzanie wartości null, bo 348 00:16:22,840 --> 00:16:24,090 masz subtelny błąd. 349 00:16:24,090 --> 00:16:28,460 >> Potem zainicjować że NULL przypisywania N i poprzedni i następny. 350 00:16:28,460 --> 00:16:32,450 I w tym przypadku tutaj, zainicjowany poprzednia wartość null, ponieważ ten nowy 351 00:16:32,450 --> 00:16:34,780 Węzeł będzie nowy początku mojej listy. 352 00:16:34,780 --> 00:16:37,050 Więc nie będzie nic przed nim. 353 00:16:37,050 --> 00:16:42,010 I chcę w zasadzie dołączania istniejącej listy do nowego węzła przez 354 00:16:42,010 --> 00:16:44,700 ustawienie obok równa listy się. 355 00:16:44,700 --> 00:16:47,120 Ale ja nie skończyłem jeszcze. 356 00:16:47,120 --> 00:16:51,780 Więc jeśli sama lista już istnieje, i była co najmniej jeden węzeł 357 00:16:51,780 --> 00:16:57,070 już na miejscu, jeżeli jest to lista tu i wstawić nowy węzeł tutaj, 358 00:16:57,070 --> 00:17:01,840 należy upewnić się, że mój dawny węzeł wskazuje w tył do mojego nowego węzła, 359 00:17:01,840 --> 00:17:04,260 ponieważ jest to znowu listy dwukierunkowe. 360 00:17:04,260 --> 00:17:05,460 >> Więc robimy sprawdzenie poprawności. 361 00:17:05,460 --> 00:17:10,109 Jeśli lista jest pusta, czy jest już jeden lub więcej węzłów w nim, a następnie 362 00:17:10,109 --> 00:17:12,470 dodać, że z powrotem odniesienie tak powiem. 363 00:17:12,470 --> 00:17:15,420 A potem bardzo Ostatnią rzeczą musimy zrobić, to faktycznie zaktualizować globalny 364 00:17:15,420 --> 00:17:20,329 Zmienna lista sam punkt do tego nowego węzła. 365 00:17:20,329 --> 00:17:21,790 Tak. 366 00:17:21,790 --> 00:17:26,579 >> PUBLICZNOŚCI: W strzałkę wskaźnika [Niesłyszalne] jest równa null, robi 367 00:17:26,579 --> 00:17:30,420 radzić sobie z listy, ponieważ lista jest pusta? 368 00:17:30,420 --> 00:17:30,596 >> David J. MALAN: Nie. 369 00:17:30,596 --> 00:17:34,500 To jest po prostu mnie jest aktywnie uważać, że jeśli to jest moja 370 00:17:34,500 --> 00:17:38,730 Oryginalna lista z może trochę więcej węzłów tu, a ja wkładając moje 371 00:17:38,730 --> 00:17:42,380 tu nowy węzeł, nie będzie za nic tutaj. 372 00:17:42,380 --> 00:17:44,720 I chcę, aby uchwycić ten pomysł ustawiając poprzedni do 373 00:17:44,720 --> 00:17:47,740 wartość null na nowym węźle. 374 00:17:47,740 --> 00:17:51,410 I prawdopodobnie, jeśli mój kod jest poprawny i nie ma innego sposobu, aby wstawić 375 00:17:51,410 --> 00:17:54,970 węzły inne niż tej funkcji, Prawdopodobnie, nawet jeśli lista ma już 376 00:17:54,970 --> 00:18:00,090 jeden lub więcej węzłów w tym, przypuszczalnie lista, pierwszy węzeł, musiałby 377 00:18:00,090 --> 00:18:02,750 poprzedni wskaźnik samego null. 378 00:18:02,750 --> 00:18:03,550 >> PUBLICZNOŚCI: I tylko obserwacji. 379 00:18:03,550 --> 00:18:08,139 Powodem umieścić wskaźnik next równi Lista jest robisz wskaźnik 380 00:18:08,139 --> 00:18:13,579 przed tym, że list to wskazuje do następnego, tak myślę - 381 00:18:13,579 --> 00:18:14,980 Ja nie - 382 00:18:14,980 --> 00:18:15,450 po prostu można znaleźć? 383 00:18:15,450 --> 00:18:16,400 >> David J. MALAN: Dokładnie. 384 00:18:16,400 --> 00:18:19,400 A więc niech faktycznie rozważyć dwa przypadki tutaj naprawdę, choć 385 00:18:19,400 --> 00:18:22,070 zamów będziemy je brać pod uwagę nie jest zupełnie taki sam jak kod. 386 00:18:22,070 --> 00:18:26,250 Jednak na wysokim poziomie, jeśli stanowi listy i jest to 32-bitowy 387 00:18:26,250 --> 00:18:29,560 wskaźnik, najprostszy scenariusz jest że to jest null domyślnie. 388 00:18:29,560 --> 00:18:33,010 I przypuśćmy, że chcesz wstawić Numer 50 był pierwszy numer. 389 00:18:33,010 --> 00:18:37,640 Więc mam zamiar iść do przodu i przeznaczyć Węzeł, który będzie zawierać 390 00:18:37,640 --> 00:18:38,770 trzy pola - 391 00:18:38,770 --> 00:18:42,070 n, poprzedni i następny. 392 00:18:42,070 --> 00:18:44,580 >> Mam zamiar umieścić numer 50 tutaj, ponieważ będzie to n. 393 00:18:44,580 --> 00:18:46,130 To będzie dalej. 394 00:18:46,130 --> 00:18:48,530 I będzie to poprzednie. 395 00:18:48,530 --> 00:18:50,910 A więc co mam zrobić w tym przypadku? 396 00:18:50,910 --> 00:18:53,900 Cóż, po prostu zrobić linię 1 tutaj. 397 00:18:53,900 --> 00:18:55,400 Wskaźnik n pobiera n. 398 00:18:55,400 --> 00:18:57,740 Ja wtedy mówiąc, poprzednie powinien dostać wartość null. 399 00:18:57,740 --> 00:18:59,470 Więc to będzie puste. 400 00:18:59,470 --> 00:19:01,365 Potem mam zamiar powiedzieć, następny będzie lista dostać. 401 00:19:01,365 --> 00:19:05,150 >> I to po prostu działa dobrze. 402 00:19:05,150 --> 00:19:06,500 To jest null. 403 00:19:06,500 --> 00:19:10,620 I tak mówię, jest następny nowy węzeł pole powinno dostać cokolwiek to jest. 404 00:19:10,620 --> 00:19:12,570 Tak, że stawia inną wartość null tam. 405 00:19:12,570 --> 00:19:14,510 A następnie ostatnia rzecz Mam to sprawdzić tutaj. 406 00:19:14,510 --> 00:19:17,870 Jeśli lista nie jest równe NULL, ale jest równa null, więc pominąć, że 407 00:19:17,870 --> 00:19:18,470 całkowicie. 408 00:19:18,470 --> 00:19:23,520 I tak wszystko, co robić dalej jest lista dostaje wskaźnik, który powoduje obrazowo 409 00:19:23,520 --> 00:19:25,570 obraz tak. 410 00:19:25,570 --> 00:19:26,620 Więc to jest jeden ze scenariuszy. 411 00:19:26,620 --> 00:19:30,490 >> I jeden, który pytał o konkretnie jest taka sytuacja, 412 00:19:30,490 --> 00:19:33,190 gdzie mamy już listę jednego węzła. 413 00:19:33,190 --> 00:19:36,240 I jeśli wrócę w oryginale Oświadczenie problemem, obok będziemy 414 00:19:36,240 --> 00:19:39,320 wstawić powiedzmy jest 34, tylko dla dobra dyskusji. 415 00:19:39,320 --> 00:19:46,210 Więc mam zamiar po prostu wygodnie narysować, że tutaj. 416 00:19:46,210 --> 00:19:47,540 Właśnie malloced. 417 00:19:47,540 --> 00:19:49,310 Załóżmy, że mam sprawdzanie null. 418 00:19:49,310 --> 00:19:51,870 >> Teraz mam zamiar zainicjować n być 34. 419 00:19:51,870 --> 00:19:53,040 I będzie to n. 420 00:19:53,040 --> 00:19:54,670 To będzie dalej. 421 00:19:54,670 --> 00:19:57,100 I będzie to poprzednie. 422 00:19:57,100 --> 00:19:59,370 Upewnijmy się, że nie zrobił uzyskać to do tyłu. 423 00:19:59,370 --> 00:20:01,110 Poprzedni jest na pierwszym w definicji. 424 00:20:01,110 --> 00:20:03,070 Pozwól mi to naprawić. 425 00:20:03,070 --> 00:20:04,410 To poprzedni. 426 00:20:04,410 --> 00:20:05,780 To jest następna. 427 00:20:05,780 --> 00:20:08,620 Mimo iż są identyczne Niech tak zgodne. 428 00:20:08,620 --> 00:20:09,450 >> Poprzedni. 429 00:20:09,450 --> 00:20:11,030 To jest następna. 430 00:20:11,030 --> 00:20:16,310 Tak właśnie malloced moją uwagę, sprawdzone na null, przypisane 34 do węzła. 431 00:20:16,310 --> 00:20:17,570 Poprzedni dostaje puste. 432 00:20:17,570 --> 00:20:19,480 Tak, że daje mi to. 433 00:20:19,480 --> 00:20:21,010 Następne dostaje list. 434 00:20:21,010 --> 00:20:22,370 Więc lista jest to. 435 00:20:22,370 --> 00:20:26,520 Tak, to jest to samo teraz, jak ten rysunek strzałka, dzięki czemu wskazują one na jednej 436 00:20:26,520 --> 00:20:27,940 W taki sam. 437 00:20:27,940 --> 00:20:30,400 , A następnie sprawdzenie, czy mam listy nie jest równa null. 438 00:20:30,400 --> 00:20:31,740 I to nie jest ten czas. 439 00:20:31,740 --> 00:20:35,580 Potem idę do zrobienia poprzedni dostaje wskaźnik. 440 00:20:35,580 --> 00:20:39,700 >> Więc listy poprzedni dostaje PTR. 441 00:20:39,700 --> 00:20:44,300 Tak więc to nie ma wpływu wprowadzenie graficzny strzałka tutaj. 442 00:20:44,300 --> 00:20:46,930 I to się trochę faliste linie. 443 00:20:46,930 --> 00:20:50,780 A potem, na koniec, zaktualizować listy punkt do wskaźnika. 444 00:20:50,780 --> 00:20:55,560 Więc teraz to wskazuje na tego faceta. 445 00:20:55,560 --> 00:20:57,170 A teraz zróbmy szybkie sprawdzenie poprawności. 446 00:20:57,170 --> 00:20:59,470 >> Oto lista, która jest zmienna globalna. 447 00:20:59,470 --> 00:21:02,850 Pierwszy węzeł jest rzeczywiście, 34, ponieważ Śledzę tę strzałkę. 448 00:21:02,850 --> 00:21:05,210 I to jest prawidłowe, bo chcę wstaw na początku listy 449 00:21:05,210 --> 00:21:06,070 wszystkie nowe węzły. 450 00:21:06,070 --> 00:21:08,860 Jego następne pole prowadzi mnie do tego faceta. 451 00:21:08,860 --> 00:21:10,710 Jeśli wracamy, uderzyłem obok jest null. 452 00:21:10,710 --> 00:21:11,760 Więc nie ma więcej lista. 453 00:21:11,760 --> 00:21:14,460 Jeśli uderzę poprzedni, mam tam, gdzie spodziewam. 454 00:21:14,460 --> 00:21:16,435 >> Więc jest jeszcze kilka wskazówek, oczywiście, do manipulowania. 455 00:21:16,435 --> 00:21:19,870 Ale fakt, że powiedziano nam, aby zrobić to w czasie stałym oznacza, że ​​tylko 456 00:21:19,870 --> 00:21:22,910 ma skończoną liczbę rzeczy masz prawo to zrobić. 457 00:21:22,910 --> 00:21:24,290 I co to jest numer? 458 00:21:24,290 --> 00:21:25,185 Może to być jeden krok. 459 00:21:25,185 --> 00:21:25,700 Może to być dwa. 460 00:21:25,700 --> 00:21:26,820 Może to być 1000 kroków. 461 00:21:26,820 --> 00:21:30,500 Ale to jest skończone, co oznacza, że ​​nie możesz nie każdy rodzaj pętli dzieje 462 00:21:30,500 --> 00:21:32,010 tutaj nie rekurencji, nie pętle. 463 00:21:32,010 --> 00:21:37,390 Po prostu musi być zakodowane linie kodu, jak mamy w tej próbce. 464 00:21:37,390 --> 00:21:42,330 >> Więc następnym problemem poprosił nas o 12 zakończyć realizację usuń 465 00:21:42,330 --> 00:21:46,740 poniżej w taki sposób, że usuwa n z listy w czasie liniowym. 466 00:21:46,740 --> 00:21:48,740 Więc trzeba trochę więcej manewru teraz. 467 00:21:48,740 --> 00:21:52,380 Możesz założyć, że n, jeśli występuje na liście, będzie obecny 468 00:21:52,380 --> 00:21:53,340 nie więcej niż jeden raz. 469 00:21:53,340 --> 00:21:56,770 I to też ma być oparte na quiz uproszczenia założenie, więc 470 00:21:56,770 --> 00:21:59,780 że jeśli znajdziesz gdzieś numer 50 w liście, nie musisz również 471 00:21:59,780 --> 00:22:02,890 musiał martwić się o dalsze iteracji, szuka każdego możliwego 472 00:22:02,890 --> 00:22:06,990 kopia z 50, które właśnie przechodzą w pewnym Minutia w ograniczonym czasie. 473 00:22:06,990 --> 00:22:10,460 >> Więc remove, ten był zdecydowanie trudniejsze i bardziej 474 00:22:10,460 --> 00:22:11,640 Kod napisać. 475 00:22:11,640 --> 00:22:14,990 Ale na pierwszy rzut oka, szczerze mówiąc, to może spójrz zdecydowaną i jak coś 476 00:22:14,990 --> 00:22:17,060 nie ma mowy, można mieć wymyślić na quiz. 477 00:22:17,060 --> 00:22:22,450 Ale jeśli skupimy się na poszczególnych etapach, miejmy nadzieję, że będzie się nagle 478 00:22:22,450 --> 00:22:26,060 strajku, że każdy z tych pojedynczych kroków sprawia oczywisty sens 479 00:22:26,060 --> 00:22:27,080 z perspektywy czasu. 480 00:22:27,080 --> 00:22:28,200 Warto więc przyjrzeć. 481 00:22:28,200 --> 00:22:32,570 >> Więc po pierwsze, możemy zainicjować wskaźnik się lista się. 482 00:22:32,570 --> 00:22:36,040 Bo chcę czas liniowy, to znaczy Zamierzam mieć jakieś pętli. 483 00:22:36,040 --> 00:22:39,730 I powszechnym sposobem iteracyjne nad węzłami w strukturze listy lub jakiejkolwiek 484 00:22:39,730 --> 00:22:43,860 struktury iteracyjnie ma mieć wskaźnik do przodu dane 485 00:22:43,860 --> 00:22:46,990 struktury, a następnie po prostu uruchomić aktualizację to i iść na swój sposób 486 00:22:46,990 --> 00:22:48,650 przez strukturę danych. 487 00:22:48,650 --> 00:22:50,040 Więc mam zamiar zrobić dokładnie to. 488 00:22:50,040 --> 00:22:54,260 >> , Podczas gdy wskaźnik, moja zmienna tymczasowa, nie jest równe NULL, niech 489 00:22:54,260 --> 00:22:55,660 idź i sprawdź. 490 00:22:55,660 --> 00:22:56,910 Czy mi się poszczęści? 491 00:22:56,910 --> 00:23:01,740 Pole jest w węźle n jestem obecnie patrząc równa 492 00:23:01,740 --> 00:23:03,380 Numer szukam? 493 00:23:03,380 --> 00:23:05,410 A jeśli tak, zróbmy coś. 494 00:23:05,410 --> 00:23:10,020 Teraz, to zauważyć, jeśli stan otacza cały 495 00:23:10,020 --> 00:23:11,520 Poniższe wiersze kodu. 496 00:23:11,520 --> 00:23:14,610 To jest jedyna rzecz, dbam o - znalezienie liczbę mowa. 497 00:23:14,610 --> 00:23:18,010 Więc nie ma innego, co upraszcza rzeczy koncepcyjnie trochę. 498 00:23:18,010 --> 00:23:22,040 >> Ale teraz, uświadomiłam sobie, i możesz mieć tylko sobie z tego sprawę po myśli 499 00:23:22,040 --> 00:23:24,720 to przez trochę, tam właściwie dwa przypadki tutaj. 500 00:23:24,720 --> 00:23:28,060 W jednej z nich znajduje się węzeł początku listy, która jest 501 00:23:28,060 --> 00:23:31,040 trochę irytujące, bo to specjalny przypadek, ponieważ mamy do czynienia 502 00:23:31,040 --> 00:23:33,340 z tym czymś, co jest tylko anomalii. 503 00:23:33,340 --> 00:23:35,720 Wszędzie w liście, to jest to samo. 504 00:23:35,720 --> 00:23:38,050 Jest poprzedni i następny węzeł węzeł, węzeł poprzedni, następny węzeł. 505 00:23:38,050 --> 00:23:40,940 Ale ten facet jest trochę specjalne czy on jest na początku. 506 00:23:40,940 --> 00:23:48,710 >> Więc jeśli wskaźnik wynosi listę sam, więc jeśli jestem na początku 507 00:23:48,710 --> 00:23:53,960 lista i znalazłem n, muszę zrobić kilka rzeczy. 508 00:23:53,960 --> 00:23:59,230 Jeden, muszę przejść do listy pkt do następnego pola, 50. 509 00:23:59,230 --> 00:24:01,270 Więc przypuszczam, że staram usunięcie 34. 510 00:24:01,270 --> 00:24:03,560 Więc ten facet ma iść wyjazd za chwilę. 511 00:24:03,560 --> 00:24:07,210 >> Więc mam zamiar powiedzieć, lista dostaje pointer następny. 512 00:24:07,210 --> 00:24:08,570 Cóż, to jest wskazówka. 513 00:24:08,570 --> 00:24:10,360 Następny wskazuje tutaj. 514 00:24:10,360 --> 00:24:17,470 Tak to się zmienia to strzałka w prawo teraz zwrócić się do tego faceta tutaj. 515 00:24:17,470 --> 00:24:19,580 Teraz pamiętam, mamy tymczasowa zmienna. 516 00:24:19,580 --> 00:24:23,520 Więc nie osierocony wszystkie węzły, bo ja też mam ten facet w moim 517 00:24:23,520 --> 00:24:25,010 Realizacja Usuń. 518 00:24:25,010 --> 00:24:29,600 Więc teraz, jeśli lista nie jest sam w sobie null Potrzebuję, aby naprawić coś małego. 519 00:24:29,600 --> 00:24:32,690 >> Muszę się teraz upewnić, że ta strzałka, którą uprzednio wskazując 520 00:24:32,690 --> 00:24:36,830 od 50 do 34, to musi odejść, bo jeśli staram się pozbyć 521 00:24:36,830 --> 00:24:41,910 z 34, 50, lepiej nie utrzymywać żadnych rodzaju powrotem odniesienie do niego jako 522 00:24:41,910 --> 00:24:42,820 strzałka sugeruje. 523 00:24:42,820 --> 00:24:44,820 Tak właśnie zrobiłem tę linię. 524 00:24:44,820 --> 00:24:46,520 Więc skończę. 525 00:24:46,520 --> 00:24:48,040 Sprawa jest rzeczywiście bardzo proste. 526 00:24:48,040 --> 00:24:51,010 Odcięcie głowy listy jest stosunkowo proste. 527 00:24:51,010 --> 00:24:52,980 >> Niestety, nie jest to irytujące inny blok. 528 00:24:52,980 --> 00:24:56,170 Więc teraz muszę zająć się sprawą gdzie jest coś w środku. 529 00:24:56,170 --> 00:24:59,880 Ale to nie jest zbyt straszne, z wyjątkiem dla składni takiego. 530 00:24:59,880 --> 00:25:03,080 Więc jeśli nie jestem na początku lista, jestem gdzieś w środku. 531 00:25:03,080 --> 00:25:08,160 I ta linia tutaj mówi, początek bez względu na węzeł jesteś. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Przejdź do następnego pola poprzedniego węzła i wskazują, że na wskaźnik. 534 00:25:18,550 --> 00:25:20,390 >> Zróbmy to obrazowo. 535 00:25:20,390 --> 00:25:21,640 Że był już skomplikowane. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Więc jeśli mam poprzednie pola tutaj - zróbmy to - Kolejne pola tutaj. 538 00:25:37,990 --> 00:25:41,200 Mam zamiar uprościć swoje wskaźniki, a niż wyciągnąć całą masę 539 00:25:41,200 --> 00:25:45,710 rzeczy przecinających tam iz powrotem nawzajem. 540 00:25:45,710 --> 00:25:50,870 A teraz, powiedzmy, to jest 1, 2, 3 ze względu na dyskusji, nawet 541 00:25:50,870 --> 00:25:53,410 jednak, że nie jest w jednej linii z problemem w kwestii. 542 00:25:53,410 --> 00:25:55,900 >> Więc oto moja lista powiązana. 543 00:25:55,900 --> 00:25:59,300 Staram się usunąć w tym dwa szczególności wersja historii. 544 00:25:59,300 --> 00:26:01,960 Tak już zaktualizowany wskaźnik być skierowane do tego faceta. 545 00:26:01,960 --> 00:26:03,315 Więc to jest PTR. 546 00:26:03,315 --> 00:26:04,530 To wskazuje tutaj. 547 00:26:04,530 --> 00:26:07,170 Jest to lista, która istnieje w skali globalnej, jak wcześniej. 548 00:26:07,170 --> 00:26:09,200 A on wskazuje tutaj nie wiem co. 549 00:26:09,200 --> 00:26:10,800 A teraz, staram się usunąć dwa. 550 00:26:10,800 --> 00:26:13,850 >> Więc jeśli wskaźnik wskazuje tutaj, że jestem będzie śledzić, jak widać, 551 00:26:13,850 --> 00:26:17,110 poprzedni wskaźnik, który mnie stawia na 1. 552 00:26:17,110 --> 00:26:22,290 Ja wtedy powiedzieć, że obok Pole, które przynosi mnie do tego 553 00:26:22,290 --> 00:26:25,410 pudełko tutaj, będzie równy wskaźnik obok. 554 00:26:25,410 --> 00:26:28,400 Więc jeśli ten wskaźnik, to jest obok. 555 00:26:28,400 --> 00:26:31,840 To oznacza, że ​​ta strzałka potrzeby zwrócić się do tego faceta. 556 00:26:31,840 --> 00:26:35,140 >> To co, że linia kodu ma tylko zrobione jest trochę tego. 557 00:26:35,140 --> 00:26:37,500 A teraz to wygląda jak krok w dobrym kierunku. 558 00:26:37,500 --> 00:26:41,390 My w zasadzie chcą ciach 2 z w środku 1 i 3. 559 00:26:41,390 --> 00:26:44,400 Więc to ma sens, że chcemy Trasa tego wskaźnika wokół niego. 560 00:26:44,400 --> 00:26:50,400 Więc to kolejny wiersz jest sprawdzenie, czy wskaźnik obok nie jest pusta, nie ma 561 00:26:50,400 --> 00:26:54,200 Rzeczywiście ktoś po prawej 2, co oznacza, że ​​musimy także zrobić 562 00:26:54,200 --> 00:26:55,850 trochę ciach tutaj. 563 00:26:55,850 --> 00:27:00,590 >> Więc teraz trzeba się do tego wskaźnika i aktualizuje poprzedni wskaźnik na 564 00:27:00,590 --> 00:27:05,410 ten facet zrobić trochę obejścia tutaj punkt tutaj. 565 00:27:05,410 --> 00:27:07,100 A teraz, wizualnie jest to miłe. 566 00:27:07,100 --> 00:27:11,930 To jest trochę brudny, że nie jest w nikt nie wskazując na 2 więcej. 567 00:27:11,930 --> 00:27:13,600 2 jest skierowany w lewą stronę. 568 00:27:13,600 --> 00:27:14,980 I 2 jest skierowany w prawą stronę. 569 00:27:14,980 --> 00:27:17,480 Ale on może robić, co chce, bo on o to, aby się uwolnił. 570 00:27:17,480 --> 00:27:19,480 I nie ma znaczenia, co te wartości są już. 571 00:27:19,480 --> 00:27:23,040 >> Ważne jest to, że pozostałe Chłopaki są trasy powyżej 572 00:27:23,040 --> 00:27:24,280 i poniżej niego. 573 00:27:24,280 --> 00:27:25,810 I rzeczywiście, to jest to, co robić dalej. 574 00:27:25,810 --> 00:27:29,360 Mamy wolne wskaźnik, co oznacza, że ​​powie system operacyjny, zapraszamy 575 00:27:29,360 --> 00:27:30,906 odzyskać to. 576 00:27:30,906 --> 00:27:34,900 I wtedy wreszcie wracamy. 577 00:27:34,900 --> 00:27:37,220 Inny sposób dorozumiany, jeśli jeszcze nie wrócił, 578 00:27:37,220 --> 00:27:38,290 Musimy szukać dalej. 579 00:27:38,290 --> 00:27:41,485 Więc wskaźnik wynosi wskaźnik obok tylko Oznacza przenieść ten facet tutaj. 580 00:27:41,485 --> 00:27:42,600 Przenieś ten facet tutaj. 581 00:27:42,600 --> 00:27:45,400 Przenieś ten facet tutaj, jeśli w rzeczywistości, nie znaleźliśmy numer 582 00:27:45,400 --> 00:27:46,960 mamy jeszcze szuka. 583 00:27:46,960 --> 00:27:49,630 >> Tak szczerze mówiąc, wygląda na całkowicie przytłaczające, jak sądzę, w pierwszym 584 00:27:49,630 --> 00:27:52,180 spojrzenie, zwłaszcza jeśli z trudem z tym podczas quizu to zobaczyć 585 00:27:52,180 --> 00:27:52,850 coś takiego. 586 00:27:52,850 --> 00:27:55,050 I poklepać się po plecach. 587 00:27:55,050 --> 00:27:57,080 Cóż, nie ma sposobu, mogłem wymyślić, że w quizie. 588 00:27:57,080 --> 00:28:00,470 Ale jestem zdania, możesz, jeśli przerwa to w dół do tych indywidualnych 589 00:28:00,470 --> 00:28:04,400 przypadków i tylko przez nie przejść starannie, choć, co prawda, w ramach 590 00:28:04,400 --> 00:28:06,300 stresujących okolicznościach. 591 00:28:06,300 --> 00:28:09,470 >> Na szczęście, obraz wykonany wszystko szczęśliwszy. 592 00:28:09,470 --> 00:28:11,050 Można narysować to w dowolną liczbę sposobów. 593 00:28:11,050 --> 00:28:12,760 Nie musisz robić przecinających rzecz tutaj. 594 00:28:12,760 --> 00:28:14,520 Można to zrobić z prostej linie takie jak ten. 595 00:28:14,520 --> 00:28:18,790 Ale sedno tego problemu, w Ogólnie rzecz biorąc, było uświadomienie sobie, że 596 00:28:18,790 --> 00:28:22,060 obraz w końcu powinien wyglądać trochę coś takiego, bo 597 00:28:22,060 --> 00:28:25,030 Stała czasowa do zrozumienia, że ​​można zachować zakłócenia i zacinanie i zagłuszania 598 00:28:25,030 --> 00:28:29,900 nowe węzły na początek z wykazu. 599 00:28:29,900 --> 00:28:31,960 Masz pytanie? 600 00:28:31,960 --> 00:28:34,565 Prawdopodobnie najtrudniejszych na pewno pytania kodowania. 601 00:28:34,565 --> 00:28:37,690 >> PUBLICZNOŚCI: Tak jest podobna do listy uderzeniem w poprzednich przykładach. 602 00:28:37,690 --> 00:28:39,640 >> David J. MALAN: Dokładnie, dokładnie. 603 00:28:39,640 --> 00:28:43,130 Po prostu inna nazwa dla zmienna globalna. 604 00:28:43,130 --> 00:28:44,380 Na całym świecie, co? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB BOWDEN: OK. 607 00:28:49,730 --> 00:28:52,020 Więc to jest ten, w którym miał napisać pkt. 608 00:28:52,020 --> 00:28:56,060 Niektórzy ludzie pisali eseje na to pytanie. 609 00:28:56,060 --> 00:29:00,230 Ale po prostu trzeba korzystać z tych sześciu warunki aby opisać to, co się dzieje, gdy 610 00:29:00,230 --> 00:29:02,440 spróbować skontaktować facebook.com. 611 00:29:02,440 --> 00:29:07,930 Więc ja po prostu porozmawiać przez proces wykorzystując wszystkie te warunki. 612 00:29:07,930 --> 00:29:11,290 Tak więc w naszej przeglądarce wpisujemy facebook.com i naciśnij klawisz Enter. 613 00:29:11,290 --> 00:29:17,280 Więc nasza przeglądarka będzie konstruować HTTP żądania, że ​​zamierza wysłać 614 00:29:17,280 --> 00:29:22,220 przez jakiś proces do Facebook dla Facebook w odpowiedzi na nas z 615 00:29:22,220 --> 00:29:24,450 HTML jej strony. 616 00:29:24,450 --> 00:29:28,800 >> Tak więc to, co jest procesem które żądania HTTP 617 00:29:28,800 --> 00:29:30,730 faktycznie dostaje na Facebook? 618 00:29:30,730 --> 00:29:32,790 Więc po pierwsze, musimy tłumaczyć Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Więc po prostu podana nazwa Facebook.com, gdzie faktycznie robi żądania HTTP 620 00:29:38,780 --> 00:29:39,940 trzeba iść? 621 00:29:39,940 --> 00:29:44,120 Więc musimy tłumaczyć Facebook.com na adres IP, który jednoznacznie 622 00:29:44,120 --> 00:29:47,620 identyfikuje urządzenie faktycznie Aby wysłać żądanie. 623 00:29:47,620 --> 00:29:49,310 Twój laptop ma adres IP. 624 00:29:49,310 --> 00:29:52,240 Wszystko, co związane z internetem zawiera adres IP. 625 00:29:52,240 --> 00:29:59,030 >> Więc DNS, Domain Name System, który jest co się dzieje w obsłudze tłumaczenie 626 00:29:59,030 --> 00:30:03,750 z facebook.com do adresu IP, który rzeczywiście chcesz się skontaktować. 627 00:30:03,750 --> 00:30:08,075 Więc serwery DNS kontakt i powiedzmy, co jest facebook.com? 628 00:30:08,075 --> 00:30:16,560 Mówi, och, to adres IP 190,212 coś, coś, coś. 629 00:30:16,560 --> 00:30:16,900 Dobrze. 630 00:30:16,900 --> 00:30:18,850 Teraz wiem, co urządzenie Chcę skontaktować. 631 00:30:18,850 --> 00:30:22,360 >> Więc wtedy wysłać żądanie HTTP na tej maszynie. 632 00:30:22,360 --> 00:30:24,140 Więc jak to się do tej maszyny? 633 00:30:24,140 --> 00:30:27,200 Cóż, wniosek przechodzi od routera do routera odrzuconych. 634 00:30:27,200 --> 00:30:32,630 Pamiętaj przykład w klasie, w której rzeczywiście widział drogę, która 635 00:30:32,630 --> 00:30:35,340 pakiety trwało kiedy próbowaliśmy komunikować. 636 00:30:35,340 --> 00:30:38,460 Widzieliśmy to skok przez Atlantyk Ocean w jednym punkcie lub cokolwiek. 637 00:30:38,460 --> 00:30:42,820 >> Więc ostatni port termin. 638 00:30:42,820 --> 00:30:46,520 Więc to jest teraz na komputerze. 639 00:30:46,520 --> 00:30:49,970 Można mieć wiele rzeczy obecnie komunikować się z Internetem. 640 00:30:49,970 --> 00:30:53,730 Więc mogę być uruchomiony, powiedzmy, Skype. 641 00:30:53,730 --> 00:30:55,670 Może mam przeglądarka open. 642 00:30:55,670 --> 00:30:59,010 Może mam coś, co torrenting pliki. 643 00:30:59,010 --> 00:31:00,880 Tak więc wszystkie te rzeczy są komunikacji z 644 00:31:00,880 --> 00:31:02,600 Internet w jakiś sposób. 645 00:31:02,600 --> 00:31:08,070 >> Tak więc, gdy komputer odbiera pewne dane z internetu, jak to 646 00:31:08,070 --> 00:31:10,130 wiedzieć, co rzeczywiście aplikacji chce dane? 647 00:31:10,130 --> 00:31:12,610 Jak to jest wiedzieć, czy ten konkretny danych jest przeznaczona dla 648 00:31:12,610 --> 00:31:16,070 torrenting aplikacji, w przeciwieństwie z przeglądarki? 649 00:31:16,070 --> 00:31:20,980 Więc to jest cel, że porty w wszystkie te aplikacje mają 650 00:31:20,980 --> 00:31:22,720 twierdził, port w komputerze. 651 00:31:22,720 --> 00:31:27,580 Więc przeglądarka mówi, hej, Jestem nasłuchuje na porcie 1000. 652 00:31:27,580 --> 00:31:32,240 I program torrenting mówi: Jestem nasłuchuje na porcie 3000. 653 00:31:32,240 --> 00:31:34,770 I Skype mówi używam portu 4000. 654 00:31:34,770 --> 00:31:41,950 >> Tak więc, gdy pojawi się jakieś dane, które należy do jednej z tych aplikacji, danych 655 00:31:41,950 --> 00:31:45,510 jest oznaczony, który port jest faktycznie należy przesłać wraz z. 656 00:31:45,510 --> 00:31:47,950 Więc to mówi, och, ja należę do portu 1000. 657 00:31:47,950 --> 00:31:50,950 Wiem, że to ja potrzebuję do przekazania tego wraz z moim przeglądarki. 658 00:31:50,950 --> 00:31:56,440 Więc powód jest istotne tutaj jest to, że często serwery www 659 00:31:56,440 --> 00:31:58,240 nasłuchuje na porcie 80. 660 00:31:58,240 --> 00:32:02,420 Więc kiedy kontakt Facebook.com, jestem komunikuje się z jakimś urządzeniem. 661 00:32:02,420 --> 00:32:06,390 Ale muszę powiedzieć, który z tego portu Maszyna chcę się komunikować. 662 00:32:06,390 --> 00:32:09,160 I serwery internetowe wydają się być nasłuchuje na porcie 80. 663 00:32:09,160 --> 00:32:14,010 >> Jeśli chcieli, mogli go ustawić tak, że można znaleźć w na porcie 7000. 664 00:32:14,010 --> 00:32:19,090 A następnie w przeglądarce internetowej, mogłem ręcznie wpisać Facebook.com: 7000 do 665 00:32:19,090 --> 00:32:24,600 wysłać żądanie do portu 7000 z serwera internetowej Facebook jest. 666 00:32:24,600 --> 00:32:26,820 >> David J. MALAN: I w tym przypadku, nawet choć nie wymaga, aby ludzie 667 00:32:26,820 --> 00:32:30,000 Wspominam o tym, w tym przypadku, co Port że wniosek rzeczywiście iść do? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Spróbuj ponownie. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Dokładnie. 672 00:32:44,300 --> 00:32:47,960 Nie patrząc na to, ale subtelność że tam nie ostatni. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: Więc HTTPS, ponieważ jest to specjalnie do słuchania 674 00:32:51,770 --> 00:32:55,180 szyfrowane, to na porcie 4430. 675 00:32:55,180 --> 00:32:57,680 >> WIDOWNI: 25 i e-maile są, prawda? 676 00:32:57,680 --> 00:33:00,670 >> David J. MALAN: Wychodzące e-maile, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Ja nawet nie wiem, większość - wszystkie dolnych bywają 678 00:33:03,760 --> 00:33:06,310 zarezerwowane dla rzeczy. 679 00:33:06,310 --> 00:33:09,260 Myślę, że wszystko pod 1024 jest zarezerwowane. 680 00:33:09,260 --> 00:33:13,450 >> PUBLICZNOŚCI: Dlaczego mówisz 3 był zły numer? 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Bo w adresie IP, tam cztery grupy cyfr. 682 00:33:18,820 --> 00:33:21,090 I są one od 0 do 255. 683 00:33:21,090 --> 00:33:28,060 192.168.2.1 jest tak powszechne lokalny adres IP w sieci. 684 00:33:28,060 --> 00:33:30,840 Zauważ, wszystkie z nich są mniejsze niż 255. 685 00:33:30,840 --> 00:33:33,570 Tak więc, gdy zacząłem z 300, które nie mogła mieć 686 00:33:33,570 --> 00:33:35,210 jednym z numerów. 687 00:33:35,210 --> 00:33:38,170 >> David J. MALAN: Ale to głupie clip od - był to CSI, gdzie mieli 688 00:33:38,170 --> 00:33:39,970 numer, który był zbyt duży na adres IP. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Wszelkie pytania na ten temat? 691 00:33:46,110 --> 00:33:51,710 Następny, więc całkowita zmiana temat, ale mamy za to tablicy PHP 692 00:33:51,710 --> 00:33:53,270 domy w quadzie. 693 00:33:53,270 --> 00:33:56,360 I mamy listę nieuporządkowaną. 694 00:33:56,360 --> 00:33:59,550 I chcemy wydrukować element listy zawierającym nazwę tylko dom. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Mamy więc pętli foreach. 697 00:34:11,870 --> 00:34:17,540 Więc pamiętaj, że składnia jest foreach tablicy jako elementu w tablicy. 698 00:34:17,540 --> 00:34:22,360 Tak więc za pomocą każdej iteracji pętli dom zajmie się na jednym z 699 00:34:22,360 --> 00:34:24,060 wartości wewnątrz tablicy. 700 00:34:24,060 --> 00:34:26,530 >> Na pierwszej iteracji, domu będzie Cabot Dom. 701 00:34:26,530 --> 00:34:30,370 Na drugiej iteracji, dom będzie być Courier budynku i tak dalej. 702 00:34:30,370 --> 00:34:34,370 Więc dla każdego quad jako domu, jesteśmy po prostu się do drukowania - 703 00:34:34,370 --> 00:34:37,250 również mogło echem - 704 00:34:37,250 --> 00:34:42,199 element listy, a następnie w domu Nazwa a następnie zamknąć pozycję z listy. 705 00:34:42,199 --> 00:34:45,210 Nawiasy klamrowe są tu obowiązkowe. 706 00:34:45,210 --> 00:34:49,480 >> I wtedy też, w odpowiedzi na pytanie Sam, pamiętaj, aby zamknąć 707 00:34:49,480 --> 00:34:50,770 nieuporządkowana lista znaczników. 708 00:34:50,770 --> 00:34:53,949 Więc musimy wyjść z trybu PHP w tym celu. 709 00:34:53,949 --> 00:35:00,280 Lub że nie powtórzył zamknij Lista nieuporządkowana znacznik. 710 00:35:00,280 --> 00:35:02,380 >> David J. MALAN: tu także dobrze byłoby było użyć starej szkoły dla 711 00:35:02,380 --> 00:35:07,340 Pętla z $ i = 0 0 i liczy do korzystania dowiedzieć się długość promienia. 712 00:35:07,340 --> 00:35:09,240 Całkowicie zbyt dobrze, po prostu trochę wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> PUBLICZNOŚCI: Więc jeśli jechaliśmy [Niesłyszalne], by to zrobić - 715 00:35:14,742 --> 00:35:16,734 I zapomnieć, co pętla [niesłyszalne] jest. 716 00:35:16,734 --> 00:35:21,380 Czy $ wspornik quad I? 717 00:35:21,380 --> 00:35:21,850 >> David J. MALAN: Dokładnie. 718 00:35:21,850 --> 00:35:23,100 Tak, dokładnie. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: Coś jeszcze? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> David J. MALAN: Dobrze. 723 00:35:32,010 --> 00:35:32,300 Kompromisy. 724 00:35:32,300 --> 00:35:38,290 Tak było kiści odpowiedzi możliwe dla każdej z nich. 725 00:35:38,290 --> 00:35:40,510 Byliśmy naprawdę tylko szukasz coś atrakcyjne dla wzrostu inflacji oraz 726 00:35:40,510 --> 00:35:41,100 minusem. 727 00:35:41,100 --> 00:35:44,830 I numer 16 zapytałem, weryfikacji użytkowników ' Wejście po stronie klienta, jak z JavaScript, 728 00:35:44,830 --> 00:35:47,280 zamiast po stronie serwera, jak w PHP. 729 00:35:47,280 --> 00:35:49,450 Więc co jest z góry robi po stronie klienta? 730 00:35:49,450 --> 00:35:53,780 >> Cóż, jedna z rzeczy, które proponowane jest że zmniejszenie opóźnienia, ponieważ 731 00:35:53,780 --> 00:35:56,750 nie muszą się martwić kontaktując serwer, który może potrwać kilka 732 00:35:56,750 --> 00:36:00,390 milisekundy lub nawet kilka sekund poprzez unikanie, że i tak 733 00:36:00,390 --> 00:36:04,670 zatwierdzanie użytkowników naliczonego po stronie klienta przez wywołania obsługi na przedłożenie i 734 00:36:04,670 --> 00:36:06,650 Sprawdzam, czy ich typ coś na imię? 735 00:36:06,650 --> 00:36:08,080 Oni wpisać coś w na adres e-mail? 736 00:36:08,080 --> 00:36:10,950 Oni wybrać akademiku z rozwijane menu? 737 00:36:10,950 --> 00:36:14,360 >> Możesz dać im natychmiastową informację zwrotną przy użyciu komputera gigaherca 738 00:36:14,360 --> 00:36:16,770 lub co mają to faktycznie na biurku. 739 00:36:16,770 --> 00:36:19,310 Więc to jest po prostu lepsza użytkownika doświadczyć typowo. 740 00:36:19,310 --> 00:36:24,460 Ale minusem robić po stronie klienta walidacji, jeśli robisz to bez również 741 00:36:24,460 --> 00:36:29,860 robi walidację po stronie serwera jest to, że Najbardziej ktoś wychodzi z CS50 wie 742 00:36:29,860 --> 00:36:33,980 , że można po prostu wysyłać dane, które chcesz do serwera dowolną liczbę sposobów. 743 00:36:33,980 --> 00:36:37,030 Szczerze mówiąc, w niemal każdej przeglądarce, można Kliknij wokół w ustawieniach i po prostu 744 00:36:37,030 --> 00:36:40,110 wyłączyć JavaScript, która, w związku z tym, należy wyłączyć wszelkie formy 745 00:36:40,110 --> 00:36:41,080 walidacji. 746 00:36:41,080 --> 00:36:44,460 >> Ale także może przypomnieć, że nawet ja zrobił kilka rzeczy tajemne klasy za pomocą 747 00:36:44,460 --> 00:36:47,790 telnet i faktycznie udaje być przeglądarka wysyłając get 748 00:36:47,790 --> 00:36:49,240 żądania do serwera. 749 00:36:49,240 --> 00:36:51,030 I to nie jest na pewno za pomocą dowolnego JavaScript. 750 00:36:51,030 --> 00:36:53,290 To tylko ja, wpisując polecenia na klawiaturze. 751 00:36:53,290 --> 00:36:57,410 Tak naprawdę, każdy programista w ciągu wystarczająco komfort z sieci i HTTP 752 00:36:57,410 --> 00:37:01,690 może wysłać cokolwiek danych on chce do serwera bez sprawdzania. 753 00:37:01,690 --> 00:37:05,470 A jeśli twój serwer nie jest również sprawdzenie, oni dają mi nazwę, jest 754 00:37:05,470 --> 00:37:08,930 to faktycznie ważny adres e-mail, nie oni wybrać akademiku, może skończyć 755 00:37:08,930 --> 00:37:12,800 Wkładanie fałszywe dane lub po prostu puste do bazy danych, która prawdopodobnie 756 00:37:12,800 --> 00:37:15,450 nie będzie dobrze, jeśli zakładając, że pan tam był. 757 00:37:15,450 --> 00:37:16,770 >> Więc to jest denerwujące rzeczywistość. 758 00:37:16,770 --> 00:37:19,890 Ale w ogóle, po stronie klienta walidacja jest świetna. 759 00:37:19,890 --> 00:37:21,810 Ale to oznacza dwa razy więcej pracy. 760 00:37:21,810 --> 00:37:25,970 Chociaż tam nie istnieją różne biblioteki, biblioteki skryptów JavaScript 761 00:37:25,970 --> 00:37:28,830 wystąpienie, które sprawiają, że to dużo, mniej bólu głowy. 762 00:37:28,830 --> 00:37:31,940 I można ponownie wykorzystać niektóre z kodem po stronie serwera, po stronie klienta. 763 00:37:31,940 --> 00:37:35,980 Ale zdają sobie sprawy, że jest to zazwyczaj dodatkowa praca. 764 00:37:35,980 --> 00:37:36,415 Tak. 765 00:37:36,415 --> 00:37:37,792 >> PUBLICZNOŚCI: Tak, jeśli tylko powiedział mniej bezpieczne - 766 00:37:37,792 --> 00:37:39,205 >> David J. MALAN: [śmieje się] 767 00:37:39,205 --> 00:37:39,680 Fuj. 768 00:37:39,680 --> 00:37:43,105 To są zawsze trudniejsze te, do orzekania. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN: że zostały przyjęte. 770 00:37:44,480 --> 00:37:44,810 >> David J. MALAN: Co? 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: Stworzyłem ten problem. 772 00:37:45,810 --> 00:37:46,735 , Które zostały przyjęte. 773 00:37:46,735 --> 00:37:47,220 >> David J. MALAN: Tak. 774 00:37:47,220 --> 00:37:47,830 >> PUBLICZNOŚCI: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: Ale my nie akceptujemy do pierwszej - 776 00:37:51,770 --> 00:37:53,630 dobrze, co szukaliśmy jest coś jak ty nie musisz 777 00:37:53,630 --> 00:37:55,270 komunikować się z serwerem. 778 00:37:55,270 --> 00:37:58,355 Nie akceptujemy tylko szybciej. 779 00:37:58,355 --> 00:38:00,080 >> PUBLICZNOŚCI: Co nie przeładować stronę? 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Tak. 781 00:38:00,430 --> 00:38:03,000 To było akceptowane odpowiedź. 782 00:38:03,000 --> 00:38:06,300 >> David J. MALAN: Wszystko gdzie czuliśmy to było bardziej prawdopodobne niż nie może 783 00:38:06,300 --> 00:38:09,780 że wiedział, co było mówiąc, co jest trudne 784 00:38:09,780 --> 00:38:13,500 linia do rysowania czasami. 785 00:38:13,500 --> 00:38:16,000 Korzystanie z połączonej listy zamiast tablicy, aby utrzymać 786 00:38:16,000 --> 00:38:17,590 sortowanie listy liczb całkowitych. 787 00:38:17,590 --> 00:38:21,000 Więc odwrotnie często powołują się związane Listy, które motywowane ich całość 788 00:38:21,000 --> 00:38:22,370 wprowadzenie było uzyskać dynamikę. 789 00:38:22,370 --> 00:38:23,030 Mogą rosnąć. 790 00:38:23,030 --> 00:38:23,950 Mogą one kurczyć. 791 00:38:23,950 --> 00:38:27,370 Więc nie trzeba skakać przez obręcze faktycznie utworzyć więcej pamięci 792 00:38:27,370 --> 00:38:28,140 z tablicą. 793 00:38:28,140 --> 00:38:30,310 Lub nie ma po prostu powiedzieć, przepraszam, użytkownik. 794 00:38:30,310 --> 00:38:31,410 Tablica jest wypełniona. 795 00:38:31,410 --> 00:38:35,850 Tak dynamiczny wzrost listy. 796 00:38:35,850 --> 00:38:37,210 Minusem jednak połączonych listach? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> PUBLICZNOŚCI: To jest liniowa. 799 00:38:43,356 --> 00:38:45,800 Wyszukiwanie w połączonej listy jest liniowa zamiast tego, co zalogowaniem 800 00:38:45,800 --> 00:38:46,360 >> David J. MALAN: Dokładnie. 801 00:38:46,360 --> 00:38:50,160 Wyszukiwanie w połączonej listy jest liniowy, nawet jeśli jest to sortowanie, ponieważ można 802 00:38:50,160 --> 00:38:53,170 tylko za te okruszki chleba, to Wskaźniki z początku listy 803 00:38:53,170 --> 00:38:53,570 do końca. 804 00:38:53,570 --> 00:38:57,970 Nie można wykorzystać swobodny dostęp i, w ten sposób, wyszukiwanie binarne, nawet jeśli jest to 805 00:38:57,970 --> 00:39:00,740 sortowane, że można zrobić z tablicą. 806 00:39:00,740 --> 00:39:02,390 I jest jeszcze inny koszt. 807 00:39:02,390 --> 00:39:02,966 Tak. 808 00:39:02,966 --> 00:39:03,800 >> PUBLICZNOŚCI: Pamięć nieskuteczne? 809 00:39:03,800 --> 00:39:04,130 >> David J. MALAN: Tak. 810 00:39:04,130 --> 00:39:06,940 Cóż, niekoniecznie powiedzieć nieefektywne. 811 00:39:06,940 --> 00:39:10,110 Ale to nie kosztuje więcej pamięci, bo trzeba 32 bity dla każdego 812 00:39:10,110 --> 00:39:13,400 węzeł dla dodatkowego wskaźnika, co przynajmniej dla pojedynczo połączonego listy. 813 00:39:13,400 --> 00:39:16,660 Teraz, jeśli tylko liczby całkowite i przechowywania dodajesz wskaźnik, że jest 814 00:39:16,660 --> 00:39:17,830 faktycznie niby nietrywialne. 815 00:39:17,830 --> 00:39:19,340 To podwojenie ilości pamięci. 816 00:39:19,340 --> 00:39:22,330 Ale w rzeczywistości, jeśli przechowywania powiązana lista strukturach, które mogą mieć 817 00:39:22,330 --> 00:39:25,540 8 bajtów, 16 bajtów, a nawet więcej niż to, być może jest to mniej 818 00:39:25,540 --> 00:39:26,500 o marginalnym. 819 00:39:26,500 --> 00:39:28,320 Ale to jest koszt jednak. 820 00:39:28,320 --> 00:39:31,880 Więc jeden z tych nie mam było w porządku, jak downsides. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Używanie PHP zamiast C napisać Program wiersza poleceń. 823 00:39:36,100 --> 00:39:41,890 Więc, jest to często korzystają z język jak PHP czy Ruby lub Python. 824 00:39:41,890 --> 00:39:43,700 Po prostu szybko otworzyć się w edytorze tekstu. 825 00:39:43,700 --> 00:39:45,900 Masz wiele więcej funkcji dostępne. 826 00:39:45,900 --> 00:39:49,325 PHP ma zlewozmywaka funkcji, natomiast w C, to 827 00:39:49,325 --> 00:39:50,420 bardzo, bardzo mało. 828 00:39:50,420 --> 00:39:53,820 W rzeczywistości, ludzie wiedzą na własnej skórze że nie masz tabel mieszania. 829 00:39:53,820 --> 00:39:55,000 Nie łączyli list. 830 00:39:55,000 --> 00:39:57,470 Jeśli chcesz te, trzeba wdrożyć je samodzielnie. 831 00:39:57,470 --> 00:40:00,950 >> Więc jeden plus z PHP, lub naprawdę każdy interpretowany język jest szybkość 832 00:40:00,950 --> 00:40:02,920 z którym można pisać kod. 833 00:40:02,920 --> 00:40:06,660 Ale minusem, widzieliśmy to, kiedy szybko przeniesiono na misspeller 834 00:40:06,660 --> 00:40:11,780 Wdrożenie w wykładzie z wykorzystaniem PHP, jest że stosując interpretować język 835 00:40:11,780 --> 00:40:13,570 jest wolniejsze. 836 00:40:13,570 --> 00:40:18,420 I widzieliśmy, że w sposób oczywisty z zwiększa się w czasie od 0,3 sekund do 3 837 00:40:18,420 --> 00:40:24,440 sekund, z powodu interpretacji że faktycznie się dzieje. 838 00:40:24,440 --> 00:40:27,060 >> Kolejny górą był, że ci nie trzeba kompilować. 839 00:40:27,060 --> 00:40:30,130 Więc to także przyspiesza rozwój nawiasem mówiąc, bo nie mają 840 00:40:30,130 --> 00:40:31,360 dwa kroki do uruchomienia programu. 841 00:40:31,360 --> 00:40:32,140 Musisz tylko jeden. 842 00:40:32,140 --> 00:40:35,260 A więc to jest dość przekonujące, jak również. 843 00:40:35,260 --> 00:40:38,450 Korzystanie z bazy danych SQL, a nie CSV do przechowywania danych. 844 00:40:38,450 --> 00:40:40,230 Więc wykorzystywana jest baza danych SQL dla pset7. 845 00:40:40,230 --> 00:40:42,060 Pliki CSV można nie używać dużo. 846 00:40:42,060 --> 00:40:45,960 Ale używane to pośrednio, jak w pset7 dobrze rozmawiając z Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Ale jest jak CSV do pliku programu Excel, ale bardzo prosty, w którym kolumny są 848 00:40:49,330 --> 00:40:54,010 tylko demarked przecinkami wewnątrz skądinąd pliku tekstowego. 849 00:40:54,010 --> 00:40:56,740 I korzystania z bazy danych SQL jest trochę bardziej przekonujące. 850 00:40:56,740 --> 00:41:00,060 To plus, bo można dostać rzeczy jak wybrać i wstawić i usunąć. 851 00:41:00,060 --> 00:41:03,790 I masz, indeksy, które przypuszczalnie MySQL oraz inne bazy danych, takie jak 852 00:41:03,790 --> 00:41:07,510 Oracle, zbudować dla Ciebie w pamięci, które oznacza, że ​​prawdopodobnie nie jest wybrać 853 00:41:07,510 --> 00:41:09,000 będzie liniowy od góry do dołu. 854 00:41:09,000 --> 00:41:11,300 To naprawdę będzie coś jak poszukiwania binarnego lub coś 855 00:41:11,300 --> 00:41:12,520 podobne w duchu. 856 00:41:12,520 --> 00:41:13,930 Więc są one na ogół szybciej. 857 00:41:13,930 --> 00:41:16,040 >> Jednak minusem jest to, że to jest po prostu więcej pracy. 858 00:41:16,040 --> 00:41:16,730 To więcej wysiłku. 859 00:41:16,730 --> 00:41:18,140 Musisz zrozumieć, bazy danych. 860 00:41:18,140 --> 00:41:18,940 Trzeba go ustawić. 861 00:41:18,940 --> 00:41:20,840 Trzeba, aby uruchomić serwer że baza danych. 862 00:41:20,840 --> 00:41:22,750 Musisz zrozumieć, jak go skonfigurować. 863 00:41:22,750 --> 00:41:24,930 To są właśnie te rodzaju kompromisy. 864 00:41:24,930 --> 00:41:27,860 Natomiast plik CSV, można utworzyć ją gedit. 865 00:41:27,860 --> 00:41:28,770 I jesteś dobry, aby przejść. 866 00:41:28,770 --> 00:41:31,550 Nie ma złożoność dalej. 867 00:41:31,550 --> 00:41:34,870 >> Korzystanie z TRIE zamiast tabeli mieszania z oddzielnym łańcuchowych do przechowywania 868 00:41:34,870 --> 00:41:37,490 Słownik słów przypominających z pset5. 869 00:41:37,490 --> 00:41:42,480 Więc próbuje odwrotnie, w teorii co najmniej, to co? 870 00:41:42,480 --> 00:41:46,380 Stały czas, co najmniej, jeśli jesteś mieszania na każdym z poszczególnych 871 00:41:46,380 --> 00:41:48,990 litery w słowa, jak ty może mieć dla pset5. 872 00:41:48,990 --> 00:41:52,720 To może być pięć, sześć hashe Sumy, czy jest pięć lub sześć 873 00:41:52,720 --> 00:41:53,900 litery w słowie. 874 00:41:53,900 --> 00:41:54,580 I to jest bardzo dobre. 875 00:41:54,580 --> 00:41:56,910 A jeśli nie ma górnej granicy, w jaki sposób długo twoje słowa może być, że jest 876 00:41:56,910 --> 00:41:59,320 rzeczywiście asymptotycznie Stała czasowa. 877 00:41:59,320 --> 00:42:05,180 >> Natomiast tabela hash z osobna łańcuchowym, problem jest z tym 878 00:42:05,180 --> 00:42:09,070 rodzaj struktury danych jest to, że wykonywanie swoich algorytmów zwykle 879 00:42:09,070 --> 00:42:12,700 zależy od wielu miejscach Już w strukturze danych. 880 00:42:12,700 --> 00:42:15,660 I to jest na pewno w przypadku sieci, w której można umieścić więcej rzeczy 881 00:42:15,660 --> 00:42:18,800 w tabeli mieszania, już ci Łańcuchy go, co oznacza, w najgorszym 882 00:42:18,800 --> 00:42:21,960 Sprawa, sprawa może być szukasz wszystko sposób na końcu jednej 883 00:42:21,960 --> 00:42:26,000 z tych łańcuchów, który skutecznie nakładanych na coś liniowego. 884 00:42:26,000 --> 00:42:29,450 >> Teraz, w praktyce może to absolutnie być tak, że z tabeli hash 885 00:42:29,450 --> 00:42:32,820 Łańcuchy jest większa niż odpowiadająca wdrożenie trie. 886 00:42:32,820 --> 00:42:35,570 Ale to z różnych powodów, między które próbuje wykorzystywać mnóstwo 887 00:42:35,570 --> 00:42:39,240 pamięci, która może, w rzeczywistości, powolne rzeczy w dół, bo nie dostaniesz ładne 888 00:42:39,240 --> 00:42:42,410 korzyści z czegoś, co nazywa buforowanie, gdzie rzeczy, które są blisko siebie 889 00:42:42,410 --> 00:42:45,420 w pamięci mogą być dostępne często szybciej. 890 00:42:45,420 --> 00:42:48,180 I czasami można wymyślić bardzo dobra funkcja skrótu. 891 00:42:48,180 --> 00:42:51,060 Nawet jeśli masz do stracenia trochę pamięci, to może rzeczywiście być w stanie 892 00:42:51,060 --> 00:42:54,430 znaleźć rzeczy szybko i nie tak źle, jak się liniowo. 893 00:42:54,430 --> 00:42:58,410 >> Tak w skrócie, nie było konieczności W każdej z tych jeden albo dwa 894 00:42:58,410 --> 00:43:00,050 konkretne rzeczy szukaliśmy. 895 00:43:00,050 --> 00:43:03,080 Naprawdę nic przekonujące jako pozytywnych i negatywnych 896 00:43:03,080 --> 00:43:04,800 ogólnie złapał nasze oko. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: Tak na plus, my nie przyjąć na swoim "szybciej". Ty 898 00:43:11,840 --> 00:43:14,540 miał powiedzieć coś na ten temat. 899 00:43:14,540 --> 00:43:17,910 Nawet jeśli powiedział teoretycznie szybszy, wiedzieliśmy, że niby rozumie 900 00:43:17,910 --> 00:43:19,470 że jest to 0 z 1. 901 00:43:19,470 --> 00:43:22,820 I tabeli mieszania, w teorii, Nie jest 0 o 1. 902 00:43:22,820 --> 00:43:26,550 Wspomnieć coś o czasie pracy generalnie mam Ci punkty. 903 00:43:26,550 --> 00:43:32,640 Ale "szybciej", większość rozwiązań na wielka płyta, które stara się 904 00:43:32,640 --> 00:43:34,990 obiektywnie wolniejszy od rozwiązań że były stoliki z cebulą. 905 00:43:34,990 --> 00:43:37,250 Więc szybciej w sobie Nie jest to prawda. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> David J. MALAN: Dom de dom dom. 908 00:43:44,380 --> 00:43:46,686 Jestem chyba jedynym, który zdaje sobie sprawę, to jak to ma 909 00:43:46,686 --> 00:43:47,500 wymawiać, prawda? 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: Miałem naprawdę nie wiem. 911 00:43:50,400 --> 00:43:51,650 >> David J. MALAN: Wykonana sens w mojej głowie. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: robię to. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Więc to jest taki, w którym trzeba było wyciągnąć schemat podobny do ciebie może 916 00:44:04,243 --> 00:44:06,040 widziałem na ostatnich egzaminów. 917 00:44:06,040 --> 00:44:12,200 Więc po prostu patrzeć na to. 918 00:44:12,200 --> 00:44:18,170 Więc od węzła HTML, mamy dwa dzieci, głowy i ciała. 919 00:44:18,170 --> 00:44:20,570 Więc oddział - głowę i ciało. 920 00:44:20,570 --> 00:44:22,280 Głowica posiada tagu tytułu. 921 00:44:22,280 --> 00:44:23,710 Mamy więc tytuł. 922 00:44:23,710 --> 00:44:28,450 >> Teraz, jedna rzecz, wiele osób Zapomniałem, że te węzły tekstowe są 923 00:44:28,450 --> 00:44:30,430 elementy w tym drzewie. 924 00:44:30,430 --> 00:44:36,260 Więc tak się zwrócić je jak owale odróżnić je od tych 925 00:44:36,260 --> 00:44:37,380 rodzaje węzłów. 926 00:44:37,380 --> 00:44:41,450 Ale informacja także tu mamy góry, środkowy i dolny będzie w końcu jest 927 00:44:41,450 --> 00:44:42,560 węzły tekstowe. 928 00:44:42,560 --> 00:44:46,250 Więc był nieco zapominając tych wspólnej pomyłkę. 929 00:44:46,250 --> 00:44:48,770 >> Ciało ma trójkę dzieci - te trzy DIV. 930 00:44:48,770 --> 00:44:53,340 Więc div, div, div, a następnie tekst dzieci węzeł tych DIV. 931 00:44:53,340 --> 00:44:55,900 To dość dużo do tego pytania. 932 00:44:55,900 --> 00:44:57,860 >> David J. MALAN: A warto zauważyć, mimo że nie mieszkają na nich 933 00:44:57,860 --> 00:45:01,040 szczegóły w czasu spędzamy na Obsługę JavaScript w przeglądarce, że kolejność ma, w 934 00:45:01,040 --> 00:45:02,290 Fakt, sprawa technicznie. 935 00:45:02,290 --> 00:45:06,330 Więc jeśli szef jest przed ciałem w HTML, to powinno pojawić się 936 00:45:06,330 --> 00:45:08,860 pozostało z ciała w rzeczywistym DOM. 937 00:45:08,860 --> 00:45:12,265 Że jego jest, ogólnie rzecz biorąc, tylko do Twojej wiadomości, coś, co nazywa zamówienie dokument, w którym 938 00:45:12,265 --> 00:45:13,260 to ma znaczenie. 939 00:45:13,260 --> 00:45:17,470 A jeśli były wdrożenia parser, Program, który czyta HTML w budynku 940 00:45:17,470 --> 00:45:20,960 w górę drzewa w pamięci, aby być uczciwym, to jest prawdopodobnie to, co intuicyjnie 941 00:45:20,960 --> 00:45:24,720 nie tak - od góry do dołu, od lewej do prawej. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Pytania na które? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Należy zrobić następny? 945 00:45:30,000 --> 00:45:32,380 >> David J. MALAN: Jasne. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Więc to jest przepełnienie buforu Atak pytanie. 948 00:45:39,320 --> 00:45:43,740 Najważniejsze, aby rozpoznać tu jest, dobrze, jak przeciwnik może sztuczka 949 00:45:43,740 --> 00:45:46,170 program do wykonywania wybranego kodu? 950 00:45:46,170 --> 00:45:51,860 Więc argv1, pierwszy z linii poleceń argumentem do tego programu, który może być 951 00:45:51,860 --> 00:45:53,920 dowolnie długo. 952 00:45:53,920 --> 00:45:59,160 Ale tutaj używamy memcpy skopiować argv1, która tutaj jest bar. 953 00:45:59,160 --> 00:46:00,165 Przekazujemy go jako argumentu. 954 00:46:00,165 --> 00:46:02,050 I tak to trwa na pasku nazwy. 955 00:46:02,050 --> 00:46:08,040 >> Więc my memcpying bar w tym buforze C. 956 00:46:08,040 --> 00:46:09,400 Ile bajtów mamy kopiowania? 957 00:46:09,400 --> 00:46:14,040 Cóż jednak wiele dzieje się bar bajtów być używany, długość tego argumentu. 958 00:46:14,040 --> 00:46:17,930 Ale c jest tylko 12 bajtów szeroki. 959 00:46:17,930 --> 00:46:22,280 Jeśli więc wpisz w linii poleceń to jest więcej niż 12 bajtów, jesteśmy 960 00:46:22,280 --> 00:46:25,470 Ten będzie się przelewać szczególności bufor. 961 00:46:25,470 --> 00:46:31,000 Teraz, jak można oszukać przeciwnik zaprogramować na wykonanie dowolnego kodu? 962 00:46:31,000 --> 00:46:34,910 >> Więc pamiętaj, że tutaj Głównym dzwoni foo. 963 00:46:34,910 --> 00:46:37,340 I tak to główne połączenia foo. 964 00:46:37,340 --> 00:46:40,408 Miejmy wyciągnąć to. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Więc mamy stos. 967 00:46:46,990 --> 00:46:49,090 I główny ma ramkę stosu na dole. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 W pewnym momencie, główne połączenia foo. 970 00:46:53,250 --> 00:46:55,390 Cóż, od razu, główne połączenia foo. 971 00:46:55,390 --> 00:46:57,130 I tak bla otrzymuje własne ramki stosu. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Teraz, w pewnym momencie, bla zamierza powrócić. 974 00:47:02,220 --> 00:47:06,810 I poszedł powraca Foo, musimy wiedzieć, co co wiersz kodu wewnątrz głównej my 975 00:47:06,810 --> 00:47:10,610 były w celu poznania powinniśmy wznowić w głównym. 976 00:47:10,610 --> 00:47:13,100 Możemy wywołać foo od całości kilka różnych miejsc. 977 00:47:13,100 --> 00:47:14,620 Skąd mamy wiedzieć, gdzie się zwrócić? 978 00:47:14,620 --> 00:47:16,460 Cóż, musimy zapisać, że gdzieś. 979 00:47:16,460 --> 00:47:23,010 >> Więc gdzieś tu w prawo, możemy zapisać gdzie powinniśmy powrócić do raz 980 00:47:23,010 --> 00:47:24,070 powraca foo. 981 00:47:24,070 --> 00:47:26,350 I to jest adres zwrotny. 982 00:47:26,350 --> 00:47:30,490 Tak jak przeciwnik może wykorzystać tego jest to, że 983 00:47:30,490 --> 00:47:37,550 Bufor ten c jest zapisane, niech powiedzieć, tutaj jest c. 984 00:47:37,550 --> 00:47:39,690 Więc mamy 12 bajtów dla C. 985 00:47:39,690 --> 00:47:40,540 To jest c. 986 00:47:40,540 --> 00:47:43,030 I to jest pierścień stos Foo. 987 00:47:43,030 --> 00:47:49,970 Więc jeśli złośliwy użytkownik wpisze więcej bajtów niż 12 albo wpisać polecenie 988 00:47:49,970 --> 00:47:54,570 argument wiersza to dłużej niż 12 znaków, a następnie jedziemy do 989 00:47:54,570 --> 00:47:57,540 przepełnienie tego bufora. 990 00:47:57,540 --> 00:47:59,910 >> Możemy iść dalej. 991 00:47:59,910 --> 00:48:02,220 I w pewnym momencie, że daleko wystarczy, że zaczniemy 992 00:48:02,220 --> 00:48:05,120 nadpisywania ten adres zwrotny. 993 00:48:05,120 --> 00:48:08,310 Więc gdy tylko nadpisać adres powrotu, Oznacza to, że kiedy foo 994 00:48:08,310 --> 00:48:14,220 powraca, jesteśmy wszędzie tam, gdzie wraca do Złośliwy użytkownik mówi jej przez 995 00:48:14,220 --> 00:48:19,490 bez względu na wartość weszła, przez co znaków użytkownik wprowadził. 996 00:48:19,490 --> 00:48:24,320 I tak, jeśli użytkownik jest szkodliwy szczególnie mądry, to może on mieć 997 00:48:24,320 --> 00:48:29,255 powrócić do gdzieś w printDef Funkcja lub gdzieś w malloc 998 00:48:29,255 --> 00:48:31,830 funkcji, po prostu wszędzie arbitralne. 999 00:48:31,830 --> 00:48:38,420 >> Ale jeszcze bardziej sprytny, co oznacza, że ​​ma łatwy powrót do tutaj. 1000 00:48:38,420 --> 00:48:41,920 A następnie rozpocząć wykonywanie je jako linii kodu. 1001 00:48:41,920 --> 00:48:46,610 Więc w tym momencie, użytkownik może wprowadzić co chce w tym regionie. 1002 00:48:46,610 --> 00:48:52,210 I ma pełną kontrolę nad swoim programem. 1003 00:48:52,210 --> 00:48:53,460 Pytania na ten temat? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Więc następne pytanie jest kompletny reimplementacja foo w taki sposób, 1006 00:49:00,970 --> 00:49:02,620 że to już nie jest zagrożone. 1007 00:49:02,620 --> 00:49:03,870 >> Więc jest kilka sposobów można tego zrobić. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Mamy jeszcze c tylko jest długości 12. 1010 00:49:13,330 --> 00:49:16,480 Można to zmieniły jako część rozwiązania. 1011 00:49:16,480 --> 00:49:18,930 Dodaliśmy również sprawdzić, Nie był pewien bar zerowy. 1012 00:49:18,930 --> 00:49:24,460 Chociaż nie trzeba że do pełnego kredytu. 1013 00:49:24,460 --> 00:49:27,690 Więc sprawdzamy najpierw Długość ciąg bar. 1014 00:49:27,690 --> 00:49:31,650 Jeśli jest to większa niż 12, a następnie faktycznie nie kopię. 1015 00:49:31,650 --> 00:49:33,010 Więc to jest jeden sposób go naprawić. 1016 00:49:33,010 --> 00:49:36,750 >> Innym sposobem mocowania to jest zamiast mając c tylko o długości 12, ma to 1017 00:49:36,750 --> 00:49:39,310 być o długości strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Innym sposobem jest mocowanie go faktycznie po prostu wrócić. 1019 00:49:43,370 --> 00:49:46,690 Więc jeśli właśnie pozbyć wszystkich to, jeśli właśnie usunięte wszystkie 1020 00:49:46,690 --> 00:49:51,830 linii kodu, możesz zdobyć pełny kredyt, od tej funkcji 1021 00:49:51,830 --> 00:49:54,150 faktycznie nie osiągnąć niczego. 1022 00:49:54,150 --> 00:49:57,650 To kopiowanie wiersza poleceń Argument do jakiejś tablicy w 1023 00:49:57,650 --> 00:49:59,960 lokalna ramki stosu. 1024 00:49:59,960 --> 00:50:01,310 I wtedy sprawa wraca. 1025 00:50:01,310 --> 00:50:04,020 I cokolwiek to znakomity zniknął. 1026 00:50:04,020 --> 00:50:09,740 Więc powrót był również wystarczający sposób pełny kredyt. 1027 00:50:09,740 --> 00:50:13,425 >> David J. MALAN: Nie dość duch pytanie, ale do zaakceptowania za 1028 00:50:13,425 --> 00:50:15,580 Spec jednak. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Pytania na temat żadnej z tych rzeczy? 1030 00:50:18,260 --> 00:50:22,270 Jedna rzecz, że co najmniej potrzebne są kompilacji kodu. 1031 00:50:22,270 --> 00:50:24,810 Więc nawet jeśli nie są technicznie narażone, jeśli kod nie 1032 00:50:24,810 --> 00:50:29,130 kompilacji, nie zaakceptować. 1033 00:50:29,130 --> 00:50:31,350 Żadnych pytań? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> David J. MALAN: Chcesz znaczy ten tytuł? 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: Nie. 1037 00:50:37,230 --> 00:50:40,470 >> David J. MALAN: Więc w tym jednym, to była albo dobra wiadomość czy zła wiadomość. 1038 00:50:40,470 --> 00:50:43,870 To jest dosłownie sam problem jako pierwszy quiz. 1039 00:50:43,870 --> 00:50:46,140 I jest to prawie to samo Problem jak pset1. 1040 00:50:46,140 --> 00:50:49,980 Ale to było celowo uproszczone być prostsze piramidy, który może być 1041 00:50:49,980 --> 00:50:52,330 rozwiązany nieco prostsze iteracji. 1042 00:50:52,330 --> 00:50:55,680 A tak naprawdę, czego się w tutaj nie tyle logiki, 1043 00:50:55,680 --> 00:50:58,100 bo prawdopodobnie przez to punkt, jesteś bardziej komfortowo niż było 1044 00:50:58,100 --> 00:51:01,850 w tym tygodniu jeden z pętli lub dlaczego pętli, ale naprawdę drażnić siebie, że 1045 00:51:01,850 --> 00:51:04,790 jesteś trochę wygodne z Pogląd, że PHP nie jest tylko o tym, co 1046 00:51:04,790 --> 00:51:05,290 programowania. 1047 00:51:05,290 --> 00:51:07,820 Można go rzeczywiście stosować jako język pisać programy linii poleceń. 1048 00:51:07,820 --> 00:51:10,060 >> I rzeczywiście, to, co staraliśmy zwrócić uwagę. 1049 00:51:10,060 --> 00:51:12,060 Jest to program PHP z linii poleceń. 1050 00:51:12,060 --> 00:51:16,690 Więc kod C tutaj, podczas gdy prawidłowa w C, nie jest prawidłowy dla PHP. 1051 00:51:16,690 --> 00:51:17,940 Jednakże kod jest rzeczywiście jest taka sama. 1052 00:51:17,940 --> 00:51:21,720 Jeśli porównać rozwiązania Quiz 0 przeciw Quiz 1, przekonasz się, że 1053 00:51:21,720 --> 00:51:25,630 jest prawie identyczne, z wyjątkiem niektóre znaki dolara i do 1054 00:51:25,630 --> 00:51:27,250 Nieobecność typu. 1055 00:51:27,250 --> 00:51:31,720 W szczególności, jeśli przyjrzymy się tutaj, zobaczysz, że iteracji, w tym 1056 00:51:31,720 --> 00:51:33,730 przypadku, od 1 aż do 7. 1057 00:51:33,730 --> 00:51:34,910 >> Mogliśmy zrobić to 0 indeks. 1058 00:51:34,910 --> 00:51:37,320 Ale czasami myślę, że to po prostu psychicznie łatwiej myśleć o rzeczach 1059 00:51:37,320 --> 00:51:38,200 od 1 do 7. 1060 00:51:38,200 --> 00:51:40,300 Jeśli chcesz jeden blok, a następnie dwa bloki, a następnie trzy, a następnie 1061 00:51:40,300 --> 00:51:41,770 kropka, kropka, kropka siedem. 1062 00:51:41,770 --> 00:51:45,960 Mamy j inicjowany na 1 a następnie licząc na do i. 1063 00:51:45,960 --> 00:51:48,150 I wszystko tu jest względami identyczne. 1064 00:51:48,150 --> 00:51:49,790 Ale godne uwagi są Kilka rzeczy. 1065 00:51:49,790 --> 00:51:53,230 Dajemy wam te dwie linie, to pierwszy jeden, goofily nazwany jako shebang 1066 00:51:53,230 --> 00:51:54,560 do gwałtownego wybuchu. 1067 00:51:54,560 --> 00:51:58,770 I to właśnie określa ścieżkę, folderu, w którym program może być 1068 00:51:58,770 --> 00:52:02,160 okazało się, że chcesz użyć interpretować ten plik. 1069 00:52:02,160 --> 00:52:04,710 >> A następnie linia po tym, z Oczywiście, oznacza wejście w tryb PHP. 1070 00:52:04,710 --> 00:52:07,740 I linia na samym dole oznacza tryb wyjścia PHP. 1071 00:52:07,740 --> 00:52:09,740 I działa w ogóle, z interpretowane języki. 1072 00:52:09,740 --> 00:52:14,370 To trochę denerwujące, jeśli piszesz Program w pliku o nazwie foo.php. 1073 00:52:14,370 --> 00:52:17,320 A następnie użytkownicy muszą tylko pamiętać, OK, aby uruchomić ten program, 1074 00:52:17,320 --> 00:52:22,320 trzeba wpisać "kosmiczny php foo.php." Rodzaj irytujące, jeśli nic innego. 1075 00:52:22,320 --> 00:52:25,270 I to również pokazuje, że program jest napisany w PHP, który nie jest wszystko 1076 00:52:25,270 --> 00:52:27,060 że świetlnej dla użytkownika. 1077 00:52:27,060 --> 00:52:30,100 >> Więc można usunąć. Całkowicie php pamiętam z wykładu. 1078 00:52:30,100 --> 00:52:35,690 I rzeczywiście można zrobić. / Foo, jeśli masz chmodded go poprzez to 1079 00:52:35,690 --> 00:52:36,500 wykonywalny. 1080 00:52:36,500 --> 00:52:39,630 Więc chmod + x bla zrobiłby to. 1081 00:52:39,630 --> 00:52:41,460 A jeśli dodać także shebang tutaj. 1082 00:52:41,460 --> 00:52:45,320 Ale tak naprawdę, problem był już na drukując coś takiego. 1083 00:52:45,320 --> 00:52:51,100 Nie HTML, nie ma na pewno kod C, tylko niektóre PHP. 1084 00:52:51,100 --> 00:52:54,100 Więc Milo wrócił w błąd 25. 1085 00:52:54,100 --> 00:52:58,050 I 25, to dano następujące Kod szkielet, który był 1086 00:52:58,050 --> 00:52:59,730 dość prosta strona internetowa. 1087 00:52:59,730 --> 00:53:04,230 I soczyste część HTML-mądry był w dół tu, gdzie mamy do wnętrza korpusu 1088 00:53:04,230 --> 00:53:09,160 Formularz, który ma unikatowy identyfikator wejść wewnątrz której były dwa wejścia, jedno 1089 00:53:09,160 --> 00:53:11,950 z pomysłem, jedna nazwa pomysł przycisku. 1090 00:53:11,950 --> 00:53:14,240 >> Najpierw był tekst typ, drugi typ przedstawienia. 1091 00:53:14,240 --> 00:53:16,930 I tak daliśmy ci, rzeczywiście, więcej składników, niż to konieczne, tak 1092 00:53:16,930 --> 00:53:19,230 wy miał możliwości, z którymi rozwiązać ten problem. 1093 00:53:19,230 --> 00:53:21,130 Nie muszą ściśle Wszystkie te ID. 1094 00:53:21,130 --> 00:53:23,580 Ale to pozwala rozwiązać to na różne sposoby. 1095 00:53:23,580 --> 00:53:27,050 I się w górę, zauważył, że celem było wywołanie 1096 00:53:27,050 --> 00:53:27,960 okno jak ten - 1097 00:53:27,960 --> 00:53:28,780 Witam, Milo! - 1098 00:53:28,780 --> 00:53:31,270 pop-up w przeglądarce za pomocą bardzo proste, jeżeli 1099 00:53:31,270 --> 00:53:33,190 nie brzydka, powiadomienie funkcję. 1100 00:53:33,190 --> 00:53:37,480 I tak, w końcu, to sprowadza się koncepcyjnie jakoś nasłuchując 1101 00:53:37,480 --> 00:53:41,290 Oświadczenia formularza po stronie klienta , A nie po stronie serwera, w jakiś 1102 00:53:41,290 --> 00:53:45,640 odpowiadając na złożenie przez chwytając wartość wpisaną przez użytkownika 1103 00:53:45,640 --> 00:53:50,120 w pola Nazwa, a następnie pokazujemy go w organizmie wpisu. 1104 00:53:50,120 --> 00:53:53,460 >> Tak więc jednym ze sposobów można to zrobić, to z jQuery, która wygląda trochę 1105 00:53:53,460 --> 00:53:56,880 składniowo kłopotliwy w pierwszej kolejności. 1106 00:53:56,880 --> 00:54:00,760 Możesz to zrobić z czystego kodu DOM - document.getelement przez ID. 1107 00:54:00,760 --> 00:54:02,530 Ale rzućmy okiem na tej wersji. 1108 00:54:02,530 --> 00:54:05,110 Mam kilka ważnych Linie pierwszy. 1109 00:54:05,110 --> 00:54:09,460 Tak jeden, mamy tę linię, która jest identyczne, co może widzieliście 1110 00:54:09,460 --> 00:54:13,830 w, wierzę, form2.html z klasy w 9 tygodniu. 1111 00:54:13,830 --> 00:54:16,960 I to jest po prostu mówiąc, wykonać Poniższy kod, gdy 1112 00:54:16,960 --> 00:54:18,430 Dokument jest gotowy. 1113 00:54:18,430 --> 00:54:21,770 To jest ważne, ponieważ tylko Strony HTML są czytane od góry do 1114 00:54:21,770 --> 00:54:23,280 dolny, od lewej do prawej. 1115 00:54:23,280 --> 00:54:27,910 >> A zatem, jeśli spróbujesz zrobić coś w kodzie tutaj do jakiegoś DOM 1116 00:54:27,910 --> 00:54:31,560 Element, niektóre tag HTML, który znajduje się w dół tutaj, robisz to zbyt szybko, 1117 00:54:31,560 --> 00:54:34,220 bo to nawet nie ma były wczytywane do pamięci. 1118 00:54:34,220 --> 00:54:37,740 Więc mówiąc to document.ready linia, mówimy, 1119 00:54:37,740 --> 00:54:39,040 Oto niektóre kodu, przeglądarka. 1120 00:54:39,040 --> 00:54:42,440 Ale to nie do wykonania całości Dokument jest gotowy, to DOM 1121 00:54:42,440 --> 00:54:44,320 drzewa istnieje w pamięci. 1122 00:54:44,320 --> 00:54:47,110 Ten jest trochę bardziej proste, jeśli składniowo 1123 00:54:47,110 --> 00:54:51,890 nieco inny, w którym mówię, grab Element HTML, którego unikalna 1124 00:54:51,890 --> 00:54:53,560 Identyfikator jest wejść. 1125 00:54:53,560 --> 00:54:56,220 To hash tag oznacza, unikatowy identyfikator. 1126 00:54:56,220 --> 00:54:58,070 A potem dzwonię. Kliknij. 1127 00:54:58,070 --> 00:55:01,660 >> Więc. Złożyć o to funkcja, w przeciwnym razie znana jako metoda, to 1128 00:55:01,660 --> 00:55:05,850 wewnątrz obiektu, na lewym bok tam, że nie podkreślają. 1129 00:55:05,850 --> 00:55:08,990 Więc jeśli uważasz, że wejść jako obiekt w pamięci - i rzeczywiście jest. 1130 00:55:08,990 --> 00:55:10,440 Jest to węzeł w drzewie - 1131 00:55:10,440 --> 00:55:16,580 . Przedstawienia środków, kiedy ta forma z identyfikator ten jest złożony, należy wykonać 1132 00:55:16,580 --> 00:55:17,700 Poniższy kod. 1133 00:55:17,700 --> 00:55:20,290 Nie obchodzi mnie to, co nazwa Funkcja jest mi wykonanie. 1134 00:55:20,290 --> 00:55:23,760 Więc używam, tak jak poprzednio, co jest zwana funkcja lambda lub 1135 00:55:23,760 --> 00:55:24,720 anonim funkcja. 1136 00:55:24,720 --> 00:55:27,640 To nie jest w ogóle intelektualnie ciekawe, inne niż to ma nazwę, 1137 00:55:27,640 --> 00:55:30,220 co jest w porządku, jeśli jesteś tylko kiedykolwiek będzie nazywać go raz. 1138 00:55:30,220 --> 00:55:34,490 A w środku jest tak naprawdę obsłużyć Złożenie formularza. 1139 00:55:34,490 --> 00:55:36,810 Ja najpierw zadeklarować zmienną zwana wartość. 1140 00:55:36,810 --> 00:55:40,610 A potem to, co jest skutkiem tego podświetlona część tu teraz? 1141 00:55:40,610 --> 00:55:44,755 Co to zrobić w wysoki poziom dla mnie? 1142 00:55:44,755 --> 00:55:48,539 >> PUBLICZNOŚCI: To staje się, że wartość Użytkownik nie poniższy kod HTML. 1143 00:55:48,539 --> 00:55:50,920 To staje się, że ID, a następnie wyszukuje wartość nim. 1144 00:55:50,920 --> 00:55:51,590 >> David J. MALAN: Dokładnie. 1145 00:55:51,590 --> 00:55:54,300 To chwyta węzeł, którego unikalna Identyfikator jest nazwa. 1146 00:55:54,300 --> 00:55:56,900 Robi się w niej wartości, które jest, prawdopodobnie, co użytkownik 1147 00:55:56,900 --> 00:55:58,190 wpisaniu go lub siebie. 1148 00:55:58,190 --> 00:56:01,020 A następnie przechowuje, że w zmienną wartość. 1149 00:56:01,020 --> 00:56:03,720 Tak na marginesie, może mieć także zrobić to trochę inaczej. 1150 00:56:03,720 --> 00:56:09,250 Całkowicie do przyjęcia przez robienie czegoś var dostaje wartość kłamstwo 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 A to dlatego, że jest to mało nudne, aby nie używać jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Nazwa". Wartość. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Tak całkowicie do przyjęcia. 1157 00:56:19,620 --> 00:56:22,770 Różnych sposobów, aby to zrobić. jQuery tylko wydaje się być nieco bardziej zwięzłe i 1158 00:56:22,770 --> 00:56:25,230 zdecydowanie bardziej popularne wśród programistów. 1159 00:56:25,230 --> 00:56:27,590 >> Teraz robię się trochę normalności sprawdzić, bo w błąd 1160 00:56:27,590 --> 00:56:30,820 oświadczenie, że wyraźnie powiedział, jeśli Użytkownik jeszcze nie wpisane jego lub jej 1161 00:56:30,820 --> 00:56:32,580 Nazwa, nie wykazują alerty. 1162 00:56:32,580 --> 00:56:35,390 Ale można sprawdzić, że po prostu sprawdzenie na pusty ciąg dla 1163 00:56:35,390 --> 00:56:37,850 cytat-cytatu, jeśli istnieje nic faktycznie istnieje. 1164 00:56:37,850 --> 00:56:40,880 Ale jeśli to nie jest równa cytatem-cytatu, Chcę zadzwonić alerty. 1165 00:56:40,880 --> 00:56:45,610 I ciekawe jest to, że część używamy operatora plusa, który 1166 00:56:45,610 --> 00:56:48,130 co robi w JavaScript? 1167 00:56:48,130 --> 00:56:48,740 Złączyć. 1168 00:56:48,740 --> 00:56:50,690 Tak to jest jak phps kropki. 1169 00:56:50,690 --> 00:56:52,820 Sam pomysł, nieco inna składnia. 1170 00:56:52,820 --> 00:56:55,280 A ja po prostu tworząc ciąg obejrzałeś na zrzucie ekranu - 1171 00:56:55,280 --> 00:56:57,750 Witam, tak i tak. 1172 00:56:57,750 --> 00:56:59,200 >> I wtedy jest to ostatni szczegół. 1173 00:56:59,200 --> 00:57:04,970 Dlaczego return false wnętrze tej anonimowej funkcji? 1174 00:57:04,970 --> 00:57:07,420 >> PUBLICZNOŚCI: Nie ma żadnej wartości. 1175 00:57:07,420 --> 00:57:09,380 Można umieścić go w formie. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 To po prostu mówi, jeśli wartość nie jest równa się puste, to zrób to. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Nie było puste w tym składania. 1180 00:57:20,940 --> 00:57:21,170 >> David J. MALAN: OK. 1181 00:57:21,170 --> 00:57:21,640 Ostrożny. 1182 00:57:21,640 --> 00:57:22,830 Nie ma nikogo innego tutaj. 1183 00:57:22,830 --> 00:57:25,510 I że fałszywa jest poza powrót o jeżeli warunki. 1184 00:57:25,510 --> 00:57:29,470 Więc to podświetlony wiersz, return false, wykonywany bez względu na to, co po 1185 00:57:29,470 --> 00:57:32,310 formularza. 1186 00:57:32,310 --> 00:57:36,810 Co powrocie fałszywe wnętrze tego obsługi zdarzeń, jak to się nazywa, 1187 00:57:36,810 --> 00:57:38,450 Wydarzenie, o którym mowa jest poddanie? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> PUBLICZNOŚCI: Ponieważ zdarza się tylko raz. 1190 00:57:44,470 --> 00:57:45,320 >> David J. MALAN: dzieje tylko raz. 1191 00:57:45,320 --> 00:57:46,821 Nie całkiem. 1192 00:57:46,821 --> 00:57:47,292 Tak? 1193 00:57:47,292 --> 00:57:50,589 >> PUBLICZNOŚCI: Zapobiega formularz z złożenie do domyślnego zachowania, 1194 00:57:50,589 --> 00:57:52,480 które sprawiają, że odświeżyć stronę. 1195 00:57:52,480 --> 00:57:53,110 >> David J. MALAN: Dokładnie. 1196 00:57:53,110 --> 00:57:56,490 Więc jestem przeciążenia termin przedstawienia tutaj, bo mówię, forma jest 1197 00:57:56,490 --> 00:57:57,670 składany. 1198 00:57:57,670 --> 00:58:02,240 Ale jak to sugerują, że nie jest w rzeczywistości został złożony w prawdziwej drodze HTTP. 1199 00:58:02,240 --> 00:58:06,870 Po kliknięciu przycisku Prześlij, ponieważ z naszych onSubmit obsługi, jesteśmy przechwytywania 1200 00:58:06,870 --> 00:58:09,040 że złożenie formularza tak powiem. 1201 00:58:09,040 --> 00:58:11,290 Mamy wtedy robi nasze rzeczy z kodem JavaScript. 1202 00:58:11,290 --> 00:58:14,070 Ale ja celowo powrocie fałszywe, bo to, co nie chcę się stać 1203 00:58:14,070 --> 00:58:18,430 Ułamek sekundy później jest dla całego formularza Sam należy składać w internecie 1204 00:58:18,430 --> 00:58:22,800 Serwer z par wartości kluczowych poprzez zmianę Adres URL jest czymś 1205 00:58:22,800 --> 00:58:26,180 q = koty lub co zrobiliśmy, na przykład w klasie. 1206 00:58:26,180 --> 00:58:29,640 Nie chcę, żeby to się stało, bo nie ma do tego serwera słuchania 1207 00:58:29,640 --> 00:58:30,690 Formularz zgłoszeniowy. 1208 00:58:30,690 --> 00:58:32,320 Jest czysto zrobić w kodzie JavaScript. 1209 00:58:32,320 --> 00:58:35,760 A to dlatego, że nie mają nawet przypisywać działanie na mojej postaci, bo 1210 00:58:35,760 --> 00:58:38,870 nie zamierzam do tego, aby nigdy go na serwer. 1211 00:58:38,870 --> 00:58:40,780 >> Więc to jest złożone. 1212 00:58:40,780 --> 00:58:44,340 Ale mamy tę formę przechwytujące Składanie i zapobiegania domyślne 1213 00:58:44,340 --> 00:58:47,477 Zachowanie to jest rzeczywiście przejść całą drogę do serwera. 1214 00:58:47,477 --> 00:58:48,730 >> PUBLICZNOŚCI: Więc utrzymanie jej po stronie klienta. 1215 00:58:48,730 --> 00:58:49,780 >> David J. MALAN: Prowadzenie to po stronie klienta. 1216 00:58:49,780 --> 00:58:51,030 Dokładnie tak. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Następna w kolejce była moja oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB BOWDEN: OK. 1221 00:59:00,430 --> 00:59:04,990 Więc to pierwsze pytanie było ogólnie szorstki dla ludzi. 1222 00:59:04,990 --> 00:59:07,270 Choć późniejsze poszło lepiej. 1223 00:59:07,270 --> 00:59:12,260 Więc trzeba było wybrać odpowiedni dane Typy na obu kolumnach. 1224 00:59:12,260 --> 00:59:17,750 I obie z nich mają pewne rzeczy o nich, że 1225 00:59:17,750 --> 00:59:20,620 dokonać wyboru trudne. 1226 00:59:20,620 --> 00:59:24,430 Tak int nie ważne wpisać do liczby. 1227 00:59:24,430 --> 00:59:29,410 Powodem jest konto 12-cyfrowy liczba, int nie jest wystarczająco duży, aby 1228 00:59:29,410 --> 00:59:31,070 zapisać sumę cyfr. 1229 00:59:31,070 --> 00:59:36,570 Tak ważny wybór byłby duży int jeśli zdarzy się, że. 1230 00:59:36,570 --> 00:59:42,090 Innym wyborem może być pola char długości 12. 1231 00:59:42,090 --> 00:59:44,560 Więc jeden z tych będzie pracował. 1232 00:59:44,560 --> 00:59:46,100 Int nie. 1233 00:59:46,100 --> 00:59:50,170 >> Teraz, równowaga, że ​​powrót do pset7. 1234 00:59:50,170 --> 00:59:59,540 Więc specjalnie używane do dziesiętnych przechowywania wartości akcji lub - 1235 00:59:59,540 --> 01:00:00,550 >> David J. MALAN: Gotówka. 1236 01:00:00,550 --> 01:00:01,060 >> ROB BOWDEN: Gotówka. 1237 01:00:01,060 --> 01:00:05,710 Użyliśmy dziesiętny przechowywać ilość pieniężne, które użytkownik ma obecnie. 1238 01:00:05,710 --> 01:00:10,950 Więc powód, że to robimy bo pamiętam, pływa. 1239 01:00:10,950 --> 01:00:12,480 Jest zmiennoprzecinkowych w precyzji. 1240 01:00:12,480 --> 01:00:18,200 Nie można dokładnie przechowywać gotówkę Wartości takie jak chcemy tutaj. 1241 01:00:18,200 --> 01:00:23,630 Więc po przecinku jest w stanie precyzyjnie sklep coś, powiedzmy, dwa miejsca po przecinku. 1242 01:00:23,630 --> 01:00:27,630 Dlatego równowaga, chcemy go być po przecinku, a nie unosić. 1243 01:00:27,630 --> 01:00:30,230 >> David J. MALAN: A także, też, choć może to być mądry w innych 1244 01:00:30,230 --> 01:00:32,760 konteksty, aby myśleć, może to jest szansa na int. 1245 01:00:32,760 --> 01:00:34,420 Ja po prostu śledzić rzeczy w groszach. 1246 01:00:34,420 --> 01:00:38,670 Dlatego, że wyraźnie pokazał domyślne wartość jest 100.00, który 1247 01:00:38,670 --> 01:00:40,380 Oznacza to może być po prostu int. 1248 01:00:40,380 --> 01:00:45,310 I też z innego numeru subtelność było to, że nie miał 1249 01:00:45,310 --> 01:00:46,180 być podchwytliwe pytanie. 1250 01:00:46,180 --> 01:00:49,860 Ale przypominam, że int w MySQL, jak w C, co najmniej 1251 01:00:49,860 --> 01:00:51,440 Urządzenie, jest 32-bitowy. 1252 01:00:51,440 --> 01:00:53,960 I mimo, że nie spodziewam się dokładnie wiedzieć, ile cyfr, które 1253 01:00:53,960 --> 01:00:56,910 środki, pamiętam, że największa liczba potencjalnie można reprezentować 1254 01:00:56,910 --> 01:01:00,710 z liczbą 32-bitową jest mniej więcej to, co? 1255 01:01:00,710 --> 01:01:02,760 >> Jaki numer zawsze mówimy? 1256 01:01:02,760 --> 01:01:04,530 2 do 32, co jest, co z grubsza? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Nie musisz dokładnie wiedzieć. 1259 01:01:08,780 --> 01:01:10,580 Ale z grubsza jest pomocne w życiu. 1260 01:01:10,580 --> 01:01:12,200 To mniej więcej 4 mld. 1261 01:01:12,200 --> 01:01:14,430 Więc powiedziałem, że już kilka razy. 1262 01:01:14,430 --> 01:01:16,360 Wiem, że powiedział, że kilka razy. 1263 01:01:16,360 --> 01:01:17,670 I to jest mniej więcej 4 mld. 1264 01:01:17,670 --> 01:01:19,710 I to jest dobra zasada kciuka wiedzieć. 1265 01:01:19,710 --> 01:01:21,880 Jeśli masz 8 bitów, 256 to magiczna liczba. 1266 01:01:21,880 --> 01:01:24,160 Jeśli masz 32 bity, 4 mld mniej więcej. 1267 01:01:24,160 --> 01:01:27,140 Więc jeśli tylko napisać 4000000000, zobaczysz, że jest to mniej cyfr niż 1268 01:01:27,140 --> 01:01:30,970 12, co oznacza, że ​​z pewnością nie jest wystarczy wyrazistość uchwycić 1269 01:01:30,970 --> 01:01:34,220 12-cyfrowy numer konta. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 Więc gdy inne poszło lepiej. 1272 01:01:38,520 --> 01:01:40,900 Więc załóżmy, że bank nakłada co miesiąc 20 dolarów 1273 01:01:40,900 --> 01:01:42,400 Opłata za obsługę na wszystkich rachunkach. 1274 01:01:42,400 --> 01:01:45,506 SQL kwerendy, co może bank odliczyć 20 dolarów od każdej liczby, nawet jeśli 1275 01:01:45,506 --> 01:01:47,520 powoduje w niektórych negatywnych stanów? 1276 01:01:47,520 --> 01:01:50,380 Więc w zasadzie, są cztery główne typy pytań - 1277 01:01:50,380 --> 01:01:52,840 wstawić, wybierz, aktualizacji i usuwania. 1278 01:01:52,840 --> 01:01:56,080 Więc co my myślimy, że jesteśmy zamiar użyć tutaj? 1279 01:01:56,080 --> 01:01:57,000 Zaktualizować. 1280 01:01:57,000 --> 01:01:58,260 >> Warto więc przyjrzeć. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Więc tutaj mamy do aktualizacji. 1283 01:02:05,870 --> 01:02:09,900 Co my aktualizacji tabeli konta? 1284 01:02:09,900 --> 01:02:11,670 Więc aktualizacji konta. 1285 01:02:11,670 --> 01:02:15,390 I wtedy składnia mówi, co na rachunkach mamy aktualizację? 1286 01:02:15,390 --> 01:02:19,520 Cóż, mamy do ustawiania balansu równą Aktualna wartość salda minus 20. 1287 01:02:19,520 --> 01:02:22,860 Więc to będzie zaktualizować wszystkie wiersze rachunków, odejmując 1288 01:02:22,860 --> 01:02:26,250 20 dolarów z równowagi. 1289 01:02:26,250 --> 01:02:29,260 >> David J. MALAN: Częstym błędem tutaj, chociaż czasami to wybaczył, 1290 01:02:29,260 --> 01:02:32,990 było rzeczywiście kod PHP tutaj wywołaniu funkcji kwerendy lub oddanie 1291 01:02:32,990 --> 01:02:35,460 cytaty wokół wszystkiego, co nie trzeba tam być. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Pamiętaj, że MySQL jest osobny język z PHP. 1293 01:02:39,780 --> 01:02:42,410 Przyzwyczailiśmy się do pisania MySQL w PHP. 1294 01:02:42,410 --> 01:02:46,180 I PHP jest następnie wysłanie go na serwer MySQL. 1295 01:02:46,180 --> 01:02:51,120 Ale nie trzeba, aby PHP komunikować się z serwerem MySQL. 1296 01:02:51,120 --> 01:02:51,730 >> David J. MALAN: Dokładnie. 1297 01:02:51,730 --> 01:02:54,240 Więc nie ma zmienne z symbolem dolara powinna być w tym kontekście. 1298 01:02:54,240 --> 01:02:59,550 To może po prostu zrobić wszystko z matematyki w samej bazy danych. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Więc następny. 1301 01:03:01,300 --> 01:03:02,731 Czy to następny? 1302 01:03:02,731 --> 01:03:03,210 Tak. 1303 01:03:03,210 --> 01:03:06,570 Więc z tego, co SQL kwerenda może bank pobierać numery kont z jej 1304 01:03:06,570 --> 01:03:09,300 najbogatszych klientów, tych z Salda większe niż 1000? 1305 01:03:09,300 --> 01:03:13,280 Tak więc, który z czterech głównych typów będziemy chcieli tutaj? 1306 01:03:13,280 --> 01:03:14,430 Wybierz. 1307 01:03:14,430 --> 01:03:16,650 Więc chcemy wybrać. 1308 01:03:16,650 --> 01:03:17,610 Czego chcemy się wybrać? 1309 01:03:17,610 --> 01:03:19,380 Jakie kolumny chcemy wybrać? 1310 01:03:19,380 --> 01:03:20,970 Będziemy konkretnie chcesz , aby wybrać numer. 1311 01:03:20,970 --> 01:03:23,910 Ale jeśli mówi gwiazda, my Przyjmujemy również, że. 1312 01:03:23,910 --> 01:03:25,820 >> Więc wybierz numer z jakim stole? 1313 01:03:25,820 --> 01:03:26,640 Konta. 1314 01:03:26,640 --> 01:03:28,370 A następnie stan chcemy? 1315 01:03:28,370 --> 01:03:30,140 W przypadku, gdy saldo przekracza 1000. 1316 01:03:30,140 --> 01:03:31,720 Przyjmujemy także większe niż lub równe. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Ostatnia. 1319 01:03:36,190 --> 01:03:42,940 SQL kwerendy, co może bank blisko, to znaczy usunąć wszystkie konta, które 1320 01:03:42,940 --> 01:03:44,480 ma równowagę $ 0? 1321 01:03:44,480 --> 01:03:47,620 Więc, który z czterech jesteśmy będzie chciał skorzystać? 1322 01:03:47,620 --> 01:03:48,320 Usuń. 1323 01:03:48,320 --> 01:03:50,180 Tak składnia, że? 1324 01:03:50,180 --> 01:03:51,890 Usuń z jakiej tabeli? 1325 01:03:51,890 --> 01:03:53,550 Konta. 1326 01:03:53,550 --> 01:03:55,790 A następnie stan, w którym chcemy usunąć - 1327 01:03:55,790 --> 01:03:57,280 gdzie równowaga jest równa zeru. 1328 01:03:57,280 --> 01:04:03,050 Więc usunąć wszystkie wiersze z kont gdzie bilans jest zerowy. 1329 01:04:03,050 --> 01:04:04,300 Pytania na każdy z nich? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Chce stać w kolejce? 1332 01:04:10,260 --> 01:04:11,200 >> David J. MALAN: Podręcznik kolejki. 1333 01:04:11,200 --> 01:04:17,110 Więc w tym jednym, daliśmy wam dość zna strukturę, że badał 1334 01:04:17,110 --> 01:04:20,450 nieco w klasie wraz z kodowanym, które to dane 1335 01:04:20,450 --> 01:04:21,910 Struktura związana w duchu. 1336 01:04:21,910 --> 01:04:24,670 Różnica jednak jest w kolejce że musieliśmy jakoś pamiętam kto 1337 01:04:24,670 --> 01:04:27,900 był z przodu w kolejce, w dużych część tak, że mogliśmy zrobić więcej 1338 01:04:27,900 --> 01:04:30,530 efektywne wykorzystanie pamięci, co najmniej jeśli byliśmy za pomocą tablicy. 1339 01:04:30,530 --> 01:04:35,460 >> Ponieważ wycofanie, jeśli mamy tablicę, jeśli, na przykład, jest z przodu 1340 01:04:35,460 --> 01:04:38,470 kolejki, jeśli dostanie się do kolejki tutaj, a potem ktoś dostaje w linii 1341 01:04:38,470 --> 01:04:42,710 za mną, za mną, za mną, i jedna osoba wychodzi z linii, 1342 01:04:42,710 --> 01:04:45,930 może, jak widzieliśmy niektóre z naszych ludzi wolontariuszy w klasie, wszyscy mają 1343 01:04:45,930 --> 01:04:47,100 przesuwać w ten sposób. 1344 01:04:47,100 --> 01:04:50,880 Ale w ogóle, że każdy robi coś nie jest najlepsze wykorzystanie czasu 1345 01:04:50,880 --> 01:04:54,600 w programie, bo to znaczy, że Algorytm jest uruchomiony, w jaki 1346 01:04:54,600 --> 01:04:56,520 asymptotycznej czas pracy? 1347 01:04:56,520 --> 01:04:57,420 To jest liniowa. 1348 01:04:57,420 --> 01:04:59,600 >> I czuję, że to głupie. 1349 01:04:59,600 --> 01:05:02,890 Jeśli kolejna osoba w kolejce jest następny osoba, która ma przejść do 1350 01:05:02,890 --> 01:05:04,660 sklep, nie mają poruszać się razem. 1351 01:05:04,660 --> 01:05:08,200 Tylko niech ta osoba się wyrywałem kiedy przyjdzie czas, na przykład. 1352 01:05:08,200 --> 01:05:09,870 Więc możemy zaoszczędzić trochę czasu tam. 1353 01:05:09,870 --> 01:05:14,840 I tak to zrobić jednak, że środki że szef kolejki lub 1354 01:05:14,840 --> 01:05:18,060 przód kolejki będzie stopniowego przesuwania się głębiej i głębiej 1355 01:05:18,060 --> 01:05:23,340 do tablicy i ostatecznie może rzeczywiście owinąć wokół jeśli używamy 1356 01:05:23,340 --> 01:05:25,790 tablica do przechowywania ludzi w tej kolejce. 1357 01:05:25,790 --> 01:05:28,390 Więc można myśleć o prawie tablica danych w okrągłym 1358 01:05:28,390 --> 01:05:29,880 Struktura w tym sensie. 1359 01:05:29,880 --> 01:05:33,970 >> Więc jakoś trzeba śledzić rozmiar to czy naprawdę koniec tego 1360 01:05:33,970 --> 01:05:36,250 a następnie, gdzie to jest początkiem. 1361 01:05:36,250 --> 01:05:39,490 Więc proponuję zadeklarować jedna taka kolejka, wywołujący 1362 01:05:39,490 --> 01:05:41,330 q to, tylko jedna litera. 1363 01:05:41,330 --> 01:05:44,570 Następnie proponujemy, aby być z przodu ustawiany na zero, a wielkość 1364 01:05:44,570 --> 01:05:45,470 być inicjowane na zero. 1365 01:05:45,470 --> 01:05:47,770 >> Więc teraz nie ma nic wewnątrz tej kolejki. 1366 01:05:47,770 --> 01:05:50,910 I prosimy, aby zakończyć Realizacja enqueue poniżej 1367 01:05:50,910 --> 01:05:55,250 taki sposób, że funkcja dodaje się n koniec q, a następnie zwraca wartość true. 1368 01:05:55,250 --> 01:05:58,690 Ale jeśli q jest pełna lub ujemny, Funkcja powinna zamiast return false. 1369 01:05:58,690 --> 01:06:01,060 I daliśmy wam kilka założeń. 1370 01:06:01,060 --> 01:06:04,320 Ale tak naprawdę nie są funkcjonalnie istotne, tylko że bool istnieje, 1371 01:06:04,320 --> 01:06:06,690 ponieważ, technicznie, nie bool istnieją w C, chyba że zawierają 1372 01:06:06,690 --> 01:06:07,310 pewien plik nagłówka. 1373 01:06:07,310 --> 01:06:09,350 Tak, że po prostu upewnić się, że nie były to sztuczka 1374 01:06:09,350 --> 01:06:10,940 Pytanie takie rzeczy. 1375 01:06:10,940 --> 01:06:16,280 >> Więc enqueue, zaproponowaliśmy w próbce Roztwory do wykonania w sposób następujący. 1376 01:06:16,280 --> 01:06:20,420 Jeden, najpierw sprawdzić, łatwość, owoce niskiej powieszenie. 1377 01:06:20,420 --> 01:06:23,820 Jeśli kolejka jest pełna lub liczba, która próbujesz włożyć mniej 1378 01:06:23,820 --> 01:06:26,380 od zera, w którym wspomniana Specyfikacja problemu należy 1379 01:06:26,380 --> 01:06:30,320 Nie wolno, bo my tylko chcemy wartości nieujemne, to należy 1380 01:06:30,320 --> 01:06:31,640 po prostu return false natychmiast. 1381 01:06:31,640 --> 01:06:33,820 Więc niektóre stosunkowo łatwo sprawdzanie błędów. 1382 01:06:33,820 --> 01:06:38,720 Jeśli jednak chcesz dodać, że rzeczywista numer, trzeba było zrobić trochę 1383 01:06:38,720 --> 01:06:39,440 tu na myśli. 1384 01:06:39,440 --> 01:06:41,330 I to, gdzie jest to trochę denerwujące psychicznie, bo trzeba 1385 01:06:41,330 --> 01:06:43,000 dowiedzieć się, jak radzić sobie z zawijanym. 1386 01:06:43,000 --> 01:06:46,870 >> Ale zalążek idei tutaj to z odsetki do nas jest to, że wraparound 1387 01:06:46,870 --> 01:06:51,480 często oznacza arytmetyczny i modułowe mod operatora, strona procent, 1388 01:06:51,480 --> 01:06:55,140 gdzie można iść z większej wartości do zera, a następnie jeden i dwa i 1389 01:06:55,140 --> 01:06:58,650 trzy, a następnie powraca do zera jeden i dwa i trzy i tak dalej 1390 01:06:58,650 --> 01:06:59,380 znowu i znowu. 1391 01:06:59,380 --> 01:07:02,880 Więc sposób proponujemy ten sposób jest , że chcemy, aby indeks do 1392 01:07:02,880 --> 01:07:05,850 gdzie macierz nazywa numery Nasze całkowite kłamać. 1393 01:07:05,850 --> 01:07:10,740 Ale aby się tam dostać, najpierw chce zrobić niezależnie od wielkości kolejki jest tylko 1394 01:07:10,740 --> 01:07:14,080 następnie dodać do tego, co Przód liście jest. 1395 01:07:14,080 --> 01:07:17,880 A efekt to stawia nas w właściwej pozycji w kolejce i 1396 01:07:17,880 --> 01:07:20,970 Nie zakładamy, że pierwsza osoba w kolejce ma miejsce na początku, który albo 1397 01:07:20,970 --> 01:07:24,130 ona absolutnie może być, jeśli również przesunięcie wszystkich. 1398 01:07:24,130 --> 01:07:26,710 Ale my tylko tworzenie pracy dla siebie, jeśli wzięliśmy 1399 01:07:26,710 --> 01:07:27,800 że szczególnie droga. 1400 01:07:27,800 --> 01:07:29,330 >> Więc możemy zachować to stosunkowo proste. 1401 01:07:29,330 --> 01:07:32,180 Mamy pamiętać, że po prostu dodaje int do kolejki. 1402 01:07:32,180 --> 01:07:35,850 A potem po prostu wrócić prawdziwe. 1403 01:07:35,850 --> 01:07:38,560 Tymczasem w Dequeue, poprosiliśmy można wykonać następujące czynności. 1404 01:07:38,560 --> 01:07:42,260 Wdrożyć w taki sposób, że dequeues, to usuwa i zwroty, 1405 01:07:42,260 --> 01:07:44,190 Int. z przodu kolejki. 1406 01:07:44,190 --> 01:07:46,410 Aby usunąć int wystarczy o tym zapomnieć. 1407 01:07:46,410 --> 01:07:47,650 Nie trzeba zastąpić jej trochę. 1408 01:07:47,650 --> 01:07:48,820 Więc to jest nadal faktycznie istnieje. 1409 01:07:48,820 --> 01:07:51,930 Podobnie jak dane na dysku twardym, jesteśmy po prostu ignorując fakt, 1410 01:07:51,930 --> 01:07:52,970 że to teraz jest. 1411 01:07:52,970 --> 01:07:55,520 A jeśli q jest pusty, powinniśmy zamiast wrócić negatywny 1. 1412 01:07:55,520 --> 01:07:56,750 Tak to czuje się arbitralne. 1413 01:07:56,750 --> 01:08:01,640 Dlaczego powrót ujemne 1. zamiast fałsz? 1414 01:08:01,640 --> 01:08:02,620 Tak. 1415 01:08:02,620 --> 01:08:05,070 >> PUBLICZNOŚCI: P jest przechowywanie wartości dodatnie. 1416 01:08:05,070 --> 01:08:10,950 Ponieważ tylko przechowywać wartości dodatnie w q, minusem jest błąd. 1417 01:08:10,950 --> 01:08:11,510 >> David J. MALAN: OK, to prawda. 1418 01:08:11,510 --> 01:08:14,850 Tak, ponieważ jesteśmy tylko przechowywania pozytywne wartości lub zera, to jest to w porządku, aby 1419 01:08:14,850 --> 01:08:18,050 zwróci wartość ujemną, jako strażnik wartość, specjalny symbol. 1420 01:08:18,050 --> 01:08:21,630 Ale jesteś przepisywanie historii tam, ponieważ powód, że jesteśmy tylko 1421 01:08:21,630 --> 01:08:25,890 zwrotu wartości nieujemne to dlatego, że chcemy 1422 01:08:25,890 --> 01:08:27,670 mają wartość wartownika. 1423 01:08:27,670 --> 01:08:32,617 Tak dokładniej, dlaczego po prostu nie return false w przypadku błędów? 1424 01:08:32,617 --> 01:08:33,099 Tak. 1425 01:08:33,099 --> 01:08:35,510 >> PUBLICZNOŚCI: Ty nie powiodło się zwraca liczbę całkowitą. 1426 01:08:35,510 --> 01:08:36,630 >> David J. MALAN: Dokładnie. 1427 01:08:36,630 --> 01:08:38,569 I to, gdzie C dostaje dość ograniczający. 1428 01:08:38,569 --> 01:08:40,590 Jeśli mówisz, że idziesz aby powrócić int, masz 1429 01:08:40,590 --> 01:08:41,279 aby powrócić int. 1430 01:08:41,279 --> 01:08:43,689 Nie można się kręci i rozpocząć powrót bool lub pływak lub 1431 01:08:43,689 --> 01:08:45,040 ciąg lub coś w tym stylu. 1432 01:08:45,040 --> 01:08:49,370 Teraz, w międzyczasie, PHP i JavaScript oraz inne języki może, w rzeczywistości, 1433 01:08:49,370 --> 01:08:51,310 ty powrocie różne rodzaje wartości. 1434 01:08:51,310 --> 01:08:54,819 , A w rzeczywistości może być użyteczne, tam gdzie można powrócić pozytywne wskazówki, zer, 1435 01:08:54,819 --> 01:08:59,439 negatywne ints, lub false lub null, nawet oznaczać błąd. 1436 01:08:59,439 --> 01:09:01,890 Ale nie mamy, że Wszechstronność w C. 1437 01:09:01,890 --> 01:09:04,569 >> Więc z Dequeue, co Proponuję zrobić to - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Możesz return false. 1440 01:09:09,830 --> 01:09:13,189 Tyle, że nieprawdziwe jest hash define false do zera. 1441 01:09:13,189 --> 01:09:16,000 Więc jeśli return false, Wracasz do zera. 1442 01:09:16,000 --> 01:09:25,470 I zero to ważna rzecz w naszej kolejce, natomiast ujemne 1, jeśli nie jest 1443 01:09:25,470 --> 01:09:27,000 fałszywe stało się ujemne 1. 1444 01:09:27,000 --> 01:09:29,972 Jednak nie powinno się nawet musisz wiedzieć, że. 1445 01:09:29,972 --> 01:09:32,399 >> David J. MALAN: To dlaczego nie powiedzieć. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: Ale to nie była prawda że nie można return false. 1447 01:09:36,450 --> 01:09:37,700 >> David J. MALAN: Jasne. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Więc Dequeue, zawiadomienia akceptujemy unieważnić jako argument. 1450 01:09:44,240 --> 01:09:45,479 A to dlatego, że nie jesteśmy przechodząc nic w. 1451 01:09:45,479 --> 01:09:48,359 Chcemy tylko, aby usunąć element na czele kolejki. 1452 01:09:48,359 --> 01:09:49,819 Więc jak możemy to zabrać? 1453 01:09:49,819 --> 01:09:51,290 Cóż, po pierwsze, zróbmy to szybkie sprawdzenie poprawności. 1454 01:09:51,290 --> 01:09:53,350 Jeśli rozmiar kolejki wynosi 0, nie nie do zrobienia. 1455 01:09:53,350 --> 01:09:54,210 Powrót ujemna 1. 1456 01:09:54,210 --> 01:09:54,800 Gotowe. 1457 01:09:54,800 --> 01:09:56,340 Więc to jest kilka linii mojego programu. 1458 01:09:56,340 --> 01:09:58,180 Więc tylko cztery linie pozostają. 1459 01:09:58,180 --> 01:10:01,310 >> Więc zdecyduję się zmniejszyć rozmiar. 1460 01:10:01,310 --> 01:10:04,620 I skutecznie zmniejszanie rozmiaru Oznacza to, że ja zapominam 1461 01:10:04,620 --> 01:10:06,010 coś tam jest. 1462 01:10:06,010 --> 01:10:09,910 Ale mam też zaktualizować gdzie z przodu z numerami są. 1463 01:10:09,910 --> 01:10:11,620 Tak, aby to zrobić, muszę zrobić dwie rzeczy. 1464 01:10:11,620 --> 01:10:16,390 I najpierw trzeba sobie przypomnieć, co numer znajduje się w przedniej części kolejki 1465 01:10:16,390 --> 01:10:17,860 ponieważ muszę wrócić tą rzecz. 1466 01:10:17,860 --> 01:10:20,910 Więc nie chcę przypadkowo zapomnieć o tym, a następnie zastąpić ją. 1467 01:10:20,910 --> 01:10:22,840 Idę do zapamiętania w int. 1468 01:10:22,840 --> 01:10:27,310 >> A teraz chcę zaktualizować q.front być q.front 1. 1469 01:10:27,310 --> 01:10:30,070 Więc jeśli jest to pierwsza osoba w linia, teraz, chcę zrobić plus 1 do 1470 01:10:30,070 --> 01:10:31,930 wskazują na następnej osoby w kolejce. 1471 01:10:31,930 --> 01:10:33,420 Ale mam do obsługi tego zawijanym. 1472 01:10:33,420 --> 01:10:37,270 A jeśli pojemność jest globalna stała, że będzie pozwala mi się upewnić, 1473 01:10:37,270 --> 01:10:41,140 jak wskazują na ostatniej osoby w Linia, operacja modulo przyniesie 1474 01:10:41,140 --> 01:10:43,840 mnie z powrotem do zera z przodu kolejki. 1475 01:10:43,840 --> 01:10:46,050 I że obsługuje Wraparound tutaj. 1476 01:10:46,050 --> 01:10:48,950 A potem przystąpić do zwrotu n. 1477 01:10:48,950 --> 01:10:51,530 >> Teraz, ściśle mówiąc, ja nie muszą zadeklarować n. 1478 01:10:51,530 --> 01:10:53,880 Nie miałem chwycić go i przechowywać go czasowo, ponieważ wartość 1479 01:10:53,880 --> 01:10:54,740 nadal. 1480 01:10:54,740 --> 01:10:57,490 Więc może po prostu zrobić dobry arytmetyki powrót byłego szefa 1481 01:10:57,490 --> 01:10:58,450 kolejki. 1482 01:10:58,450 --> 01:11:01,850 Ale ja po prostu czułem, że było to bardziej oczywiste, rzeczywiście chwycić int, umieścić go 1483 01:11:01,850 --> 01:11:04,320 w n, a następnie wrócić, że dla jasności, ale 1484 01:11:04,320 --> 01:11:05,735 nie jest to konieczne. 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 Oni wszyscy wymówienia w mojej głowie. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: Więc pierwsze pytanie jest drzewo binarne problemem. 1490 01:11:19,110 --> 01:11:22,140 Więc pierwsze pytanie jest, że jesteśmy biorąc pod uwagę te liczby. 1491 01:11:22,140 --> 01:11:27,160 I chcemy w jakiś sposób wstawić je do Te węzły, tak że jest 1492 01:11:27,160 --> 01:11:30,110 ważne wyszukiwanie drzewo binarne. 1493 01:11:30,110 --> 01:11:36,260 Więc jedna rzecz, aby pamiętać o drzewa wyszukiwań binarnych jest to, że nie jest to 1494 01:11:36,260 --> 01:11:39,800 tylko, że coś się w lewo jest mniejszy i co do 1495 01:11:39,800 --> 01:11:41,120 prawda jest większa. 1496 01:11:41,120 --> 01:11:44,580 To musi być to, że całe drzewo do lewy jest mniej, a całe drzewo 1497 01:11:44,580 --> 01:11:45,740 po prawej stronie jest większa. 1498 01:11:45,740 --> 01:11:55,260 >> Więc jeśli mogę umieścić 34 tutaj na górze, a następnie Włożyłem 20 tutaj, więc to ważne, tak 1499 01:11:55,260 --> 01:11:56,970 daleko, bo 34 się tutaj. 1500 01:11:56,970 --> 01:11:57,920 20 będzie w lewą stronę. 1501 01:11:57,920 --> 01:11:58,950 Więc to jest mniej. 1502 01:11:58,950 --> 01:12:03,640 Ale nie można wtedy umieścić tutaj 59, ponieważ mimo że fig. 59 po prawej stronie 20, 1503 01:12:03,640 --> 01:12:06,140 to jeszcze po lewej 34. 1504 01:12:06,140 --> 01:12:10,760 Więc z tego ograniczenia w umyśle, Prawdopodobnie najprostszym sposobem rozwiązania tego 1505 01:12:10,760 --> 01:12:14,330 Problem jest tylko rodzaj z tych numerów - 1506 01:12:14,330 --> 01:12:18,720 tak, 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 A następnie włóż te od lewej do prawej. 1508 01:12:21,640 --> 01:12:23,390 >> Więc 20 idzie tutaj. 1509 01:12:23,390 --> 01:12:24,630 34 idzie tutaj. 1510 01:12:24,630 --> 01:12:25,830 36 idzie tutaj. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 A także może zorientowali się, z niektóre podłączając i realizacji, 1513 01:12:34,730 --> 01:12:38,830 oh, czekaj, nie mam wystarczającej ilości numerów aby wypełnić to tutaj. 1514 01:12:38,830 --> 01:12:42,170 Więc muszę reshift co moja uwaga trasa będzie. 1515 01:12:42,170 --> 01:12:47,490 Jednak zauważyć, że w finałowej trójki, jeśli czytać od lewej do prawej, to jest w 1516 01:12:47,490 --> 01:12:48,740 rosnące. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Więc teraz, chcemy zadeklarować co struktura będzie dla 1519 01:12:56,540 --> 01:12:58,300 węzły w tym drzewie. 1520 01:12:58,300 --> 01:13:02,720 Więc co musimy w binarnym drzewie? 1521 01:13:02,720 --> 01:13:05,830 Więc mamy wartość typu int, więc niektóre int wartość. 1522 01:13:05,830 --> 01:13:07,220 Nie wiem, co nazywamy to w roztworze - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Musimy wskaźnik do lewego dziecka oraz wskaźnik do prawej dziecka. 1525 01:13:13,570 --> 01:13:17,540 Tak to będzie wyglądać. 1526 01:13:17,540 --> 01:13:20,510 I będzie to faktycznie wyglądać przed kiedy podwójnie związany 1527 01:13:20,510 --> 01:13:25,090 Lista rzeczy, więc informacja - 1528 01:13:25,090 --> 01:13:27,860 Będę musiał przejść wszystkie droga z powrotem do problemu 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Więc zauważyć, że wygląda identycznie jak ta, chyba, że ​​akurat te nazywamy 1531 01:13:36,390 --> 01:13:38,590 różne nazwy. 1532 01:13:38,590 --> 01:13:41,440 Nadal mamy liczbę całkowitą wartość i dwa wskaźniki. 1533 01:13:41,440 --> 01:13:44,850 Tyle, że zamiast leczenia wskazówek, jak wskazuje na następnej rzeczy 1534 01:13:44,850 --> 01:13:47,955 i poprzedni rzeczą, traktujemy Wskaźniki wskazać na lewym dzieckiem 1535 01:13:47,955 --> 01:13:49,205 oraz prawo dziecka. 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 Więc to jest nasz węzeł struct. 1539 01:13:59,650 --> 01:14:03,920 A teraz tylko musimy funkcja wdrożenia tego jest trawers, który 1540 01:14:03,920 --> 01:14:08,320 chcemy przejść przez drzewa, drukowania z wartościami drzewa w porządku. 1541 01:14:08,320 --> 01:14:15,241 >> Więc patrząc tutaj, że chcemy wydrukować z 20, 34, 36, 52, 59 i 106. 1542 01:14:15,241 --> 01:14:17,970 Jak możemy tego dokonać? 1543 01:14:17,970 --> 01:14:18,890 Więc to jest bardzo podobne. 1544 01:14:18,890 --> 01:14:22,910 Jeśli obejrzałeś egzaminu w przeszłości problem że chcesz wydrukować 1545 01:14:22,910 --> 01:14:25,940 Całe drzewo między przecinkami wszystko, to faktycznie nawet 1546 01:14:25,940 --> 01:14:27,320 łatwiejsze niż to. 1547 01:14:27,320 --> 01:14:30,950 Więc tutaj jest rozwiązanie. 1548 01:14:30,950 --> 01:14:33,110 Było to znacznie łatwiejsze jeśli nie to rekurencyjnie. 1549 01:14:33,110 --> 01:14:36,650 Nie wiem, czy ktoś próbował to zrobić iteracyjnie. 1550 01:14:36,650 --> 01:14:38,340 >> Ale po pierwsze, mamy sprawę podstawową. 1551 01:14:38,340 --> 01:14:39,660 Co zrobić, jeśli korzeń jest null? 1552 01:14:39,660 --> 01:14:40,610 Potem po prostu się do powrotu. 1553 01:14:40,610 --> 01:14:42,300 Nie chcemy, aby wydrukować niczego. 1554 01:14:42,300 --> 01:14:45,940 Jeszcze będziemy przemierzać rekurencyjnie w dół. 1555 01:14:45,940 --> 01:14:48,140 Wydrukuj całą lewą poddrzewa. 1556 01:14:48,140 --> 01:14:51,440 Więc drukować wszystko mniej od mojej aktualnej wartości. 1557 01:14:51,440 --> 01:14:53,930 A potem mam zamiar wydrukować sobie. 1558 01:14:53,930 --> 01:14:57,310 A potem mam zamiar rekursja dół moja Cała prawda poddrzewo, więc wszystko 1559 01:14:57,310 --> 01:14:58,810 większa niż moja wartość. 1560 01:14:58,810 --> 01:15:03,870 I to będzie drukować się, wszystko w porządku. 1561 01:15:03,870 --> 01:15:05,860 Pytania na temat, jak to w rzeczywistości realizuje to? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> PUBLICZNOŚCI: Mam pytanie na [niesłyszalne]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: Więc jeden sposób zbliża każdy rekurencyjne problemem jest po prostu, że 1566 01:15:23,550 --> 01:15:26,275 o to jak trzeba myśleć o wszystkich przypadkach rożny. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Więc uznać, że chcemy drukować całe to drzewo. 1569 01:15:38,110 --> 01:15:42,030 Więc wszystko mamy zamiar skupić się na jest ten konkretny węzeł - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Wywołania rekurencyjne, udajemy ci, po prostu pracować. 1572 01:15:47,420 --> 01:15:54,000 Więc, to wywołanie rekurencyjne trawers, że nawet bez myślenia 1573 01:15:54,000 --> 01:15:58,640 o tym, po prostu przejazd w lewo trzy, wyobraź sobie, że już drukuje 20 1574 01:15:58,640 --> 01:16:00,730 i 34 dla nas. 1575 01:16:00,730 --> 01:16:03,350 A potem, kiedy w końcu rekurencyjnie zadzwoń trawers na 1576 01:16:03,350 --> 01:16:07,890 Dobrze, że będzie poprawnie wydrukować 52, 59, i 106 dla nas. 1577 01:16:07,890 --> 01:16:13,620 >> Tak więc biorąc pod uwagę, że to może wydrukować 20, 34 i inne można drukować 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 wszystko, czego potrzebujesz, aby być w stanie to zrobić, to wydrukować Nas w środku tego. 1579 01:16:17,180 --> 01:16:21,250 Więc drukować wszystko przed nami. 1580 01:16:21,250 --> 01:16:27,710 Wydrukuj Nas, więc obecny węzeł druku 36, regularne printf, a następnie 1581 01:16:27,710 --> 01:16:31,170 wydrukować wszystko po nas. 1582 01:16:31,170 --> 01:16:32,730 >> David J. MALAN: To gdzie rekurencji robi się naprawdę piękne. 1583 01:16:32,730 --> 01:16:36,270 To ten niesamowity skok wiary, gdzie ty najmniejszy kawałek pracy. 1584 01:16:36,270 --> 01:16:38,460 A potem niech ktoś jeszcze zrobić resztę. 1585 01:16:38,460 --> 01:16:40,180 I że ktoś inny jest, jak na ironię, ci. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Tak poważnych punktów na ciastka, jeśli przewijania w górę na pytania - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: Na pytania? 1589 01:16:50,530 --> 01:16:53,490 >> David J. MALAN: I trochę w dół numery, czy ktoś wie gdzie 1590 01:16:53,490 --> 01:16:55,190 liczby te pochodzą z? 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: Mam dosłownie nie wiem. 1592 01:16:56,610 --> 01:16:59,794 >> David J. MALAN: Pojawiają się w całym quizie. 1593 01:16:59,794 --> 01:17:01,150 >> PUBLICZNOŚCI: Czy są one takie same numery? 1594 01:17:01,150 --> 01:17:01,910 >> David J. MALAN: Te liczby. 1595 01:17:01,910 --> 01:17:03,260 Trochę jajko. 1596 01:17:03,260 --> 01:17:08,100 Więc dla tych, oglądania online w domu, czy możesz nam powiedzieć, za pośrednictwem poczty elektronicznej do 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net jakie znaczenie sześć z tych numerów są powtarzające 1598 01:17:12,680 --> 01:17:18,560 całej Quiz 1, będziemy cię prysznic z niezwykłą dbałością w finale 1599 01:17:18,560 --> 01:17:21,610 Wykład i piłka stres. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Ładne, subtelne. 1602 01:17:27,790 --> 01:17:29,570 >> Rob Bowden: Jakieś ostatnie pytania o wszystkim na quizie? 1603 01:17:29,570 --> 01:17:32,608