1 00:00:00,000 --> 00:00:02,270 >> [Recenzja: Quiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali Nahm, Oreoluwa Barbarinsa Lucas Freitas, Rob Bowden] [Harvard University] 3 00:00:04,620 --> 00:00:07,660 [To jest CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Witam wszystkich. To jest ocena za quiz 1. 5 00:00:11,610 --> 00:00:15,040 Podobnie jak zrzeczenie się, to jest - mam na myśli, będziemy starać się pokryć 6 00:00:15,040 --> 00:00:17,770 tak dużo materiału jak to jest możliwe, ale nie oznacza to, że 7 00:00:17,770 --> 00:00:20,780 jedziemy na pokrycie wszystkich rzeczy, które mogą być w quizie 1. 8 00:00:20,780 --> 00:00:25,270 Więc upewnij się, że również spojrzeć na wykładzie, sekcje, wszystko, co można. 9 00:00:25,270 --> 00:00:28,240 Quiz 1 będzie w środę następną środę. 10 00:00:28,240 --> 00:00:33,800 Więc należy się uczyć. To będzie, dość dużo, jak w pierwszym quizie 11 00:00:33,800 --> 00:00:36,390 dotyczące jego format, ale to prawdopodobnie będzie o wiele trudniejsze. 12 00:00:36,390 --> 00:00:39,600 Przynajmniej w zeszłym roku, kiedy wziął 50, myślałem, że to o wiele trudniejsze. 13 00:00:39,600 --> 00:00:42,410 Więc studiować wiele. 14 00:00:42,410 --> 00:00:45,190 >> Idę na pokrycie struktur danych i kodowania Huffmana. 15 00:00:45,190 --> 00:00:47,910 To jest coś, że wiele osób, że jest złożona, 16 00:00:47,910 --> 00:00:51,930 ale mam zamiar spróbować zrobić to tak proste, jak to tylko możliwe. 17 00:00:51,930 --> 00:00:56,330 Przede wszystkim to, co chcemy wam wiedzieć o quizie 1 jest 18 00:00:56,330 --> 00:01:00,970 zrozumieć koncepcyjne opisy każdej ze struktur danych, które mam zamiar przedstawić. 19 00:01:00,970 --> 00:01:03,960 To oznacza, że ​​nie masz do rzeczywistości 20 00:01:03,960 --> 00:01:07,020 wdrożenie tabeli mieszania w quizie 1. 21 00:01:07,020 --> 00:01:10,250 Nie chcemy, aby wdrożyć cały tabeli mieszania, może spróbujemy 22 00:01:10,250 --> 00:01:13,090 aby wdrożyć niektóre funkcje, 23 00:01:13,090 --> 00:01:16,940 najczęstsze operacje, ale my nie będziemy was wdrażać wszystko. 24 00:01:16,940 --> 00:01:21,010 Dlatego tak ważne jest, aby zrozumieć pojęcia za każdym struktury danych 25 00:01:21,010 --> 00:01:23,510 a także, że są w stanie kodować w C, 26 00:01:23,510 --> 00:01:27,880 tylko najczęstsze operacje mają dla każdej struktury danych. 27 00:01:27,880 --> 00:01:30,090 , A także być w stanie dokonać przeglądu wskaźników i przypisać struktury, 28 00:01:30,090 --> 00:01:33,470 ponieważ pojawiają się dużo w tych strukturach. 29 00:01:33,470 --> 00:01:37,380 >> Po pierwsze, związane list. Połączone listy są rzeczywiście bardzo podobne do tablic, 30 00:01:37,380 --> 00:01:39,930 ale różnica między połączonej listy i tablicy, 31 00:01:39,930 --> 00:01:45,160 Przede wszystkim jest związany lista jest bardzo elastyczny wielkości, 32 00:01:45,160 --> 00:01:50,060 natomiast w tablicach trzeba wybrać albo bardzo duży rozmiar tablicy, 33 00:01:50,060 --> 00:01:53,710 więc wiesz, że masz zamiar być w stanie przechowywać wszystkie dane w tej tablicy, 34 00:01:53,710 --> 00:01:59,370 czy trzeba użyć malloc mieć elastyczną długość tablicy. 35 00:01:59,370 --> 00:02:03,680 W połączonych listach jest to bardzo łatwe do po prostu więcej elementów, 36 00:02:03,680 --> 00:02:07,210 umieścić więcej elementów w połączonej listy lub usunąć elementy. 37 00:02:07,210 --> 00:02:09,370 I rzeczywiście, jeśli nie chcesz, połączonej listy mają być sortowane, 38 00:02:09,370 --> 00:02:13,950 można wyszukać i usunąć elementy w czasie stałym, 39 00:02:13,950 --> 00:02:16,800 więc O (1) czasu, więc jest to bardzo wygodne. 40 00:02:16,800 --> 00:02:20,660 Po prostu trzeba być ostrożnym, aby zawsze pamiętać, aby malloc i wolne węzły, 41 00:02:20,660 --> 00:02:25,510 tylko dlatego, że jeśli tego nie zrobisz, będziesz miał wycieki pamięci. 42 00:02:25,510 --> 00:02:31,480 Tak połączone listy - definicja węzła jest jak to, co mamy tutaj. 43 00:02:31,480 --> 00:02:35,110 Włożyłem int n, ale można przechowywać dane. 44 00:02:35,110 --> 00:02:37,280 Więc jeśli chcesz zapisać ciąg, to w porządku. 45 00:02:37,280 --> 00:02:41,690 Jeśli chcesz zapisać struct, jest w porządku, podwójne, co chcesz. 46 00:02:41,690 --> 00:02:44,630 I po prostu umieścić int n dla tutejszych przykładów. 47 00:02:44,630 --> 00:02:46,800 I masz wskaźnik do kolejnego węzła. 48 00:02:46,800 --> 00:02:51,940 Tak więc, w zasadzie, powiązana lista zawiera niektóre dane, a następnie zwraca się do kolejnego węzła. 49 00:02:51,940 --> 00:02:56,710 Jeśli jest to ostatni element w połączonej listy, to będzie wskazywać na NULL. 50 00:02:56,710 --> 00:02:59,060 Tak więc jest na przykład połączony listy. 51 00:02:59,250 --> 00:03:05,960 >> Dobra, teraz zobaczymy, co powinniśmy zrobić, jeśli chcę, aby wstawić element w połączonej listy. 52 00:03:05,960 --> 00:03:08,810 Po pierwsze, funkcja będzie wkładka typu void 53 00:03:08,810 --> 00:03:11,350 ponieważ nie chcę, aby powrócić niczego. 54 00:03:11,350 --> 00:03:14,200 I mam zamiar podjąć int jako argument, 55 00:03:14,200 --> 00:03:17,090 bo chcę wiedzieć, co chcę wstawić. 56 00:03:17,090 --> 00:03:21,840 Więc co jest pierwszą rzeczą, jaką należy zrobić? Cóż, mam malloc na newnode, 57 00:03:21,840 --> 00:03:24,240 tak, to jest pierwsza linia. 58 00:03:24,240 --> 00:03:27,580 Jestem po prostu tworząc nowy węzeł do wprowadzenia w połączonej listy. 59 00:03:27,580 --> 00:03:32,360 Więc co można zrobić? Dobrze wiemy, że w naszych wdrożeń związanych list 60 00:03:32,360 --> 00:03:38,180 w klasie, zawsze stawiamy głowicę w zmiennej globalnej. 61 00:03:38,180 --> 00:03:41,800 Więc co możemy zrobić, to zmienić głowę. 62 00:03:41,800 --> 00:03:44,300 Mogę zrobić to nowy węzeł będzie nowy szef, 63 00:03:44,300 --> 00:03:46,670 i to będzie punkt do poprzedniego szefa. 64 00:03:46,670 --> 00:03:50,390 W jaki sposób możemy to zrobić? Pierwszą rzeczą, którą musisz zrobić, 65 00:03:50,390 --> 00:03:54,770 to zmienić 'n' w nowym węźle do wartości, 66 00:03:54,770 --> 00:03:57,530 , który został przekazany do funkcji. 67 00:03:57,530 --> 00:04:01,050 Następnie newnode dalej będzie głowa. 68 00:04:01,050 --> 00:04:05,800 Głowica będzie newnode. Więc jest to całkiem proste. 69 00:04:05,800 --> 00:04:10,090 Na usunięcie węzła, możemy zrobić to jak - 70 00:04:10,090 --> 00:04:14,790 Jeden sposób możemy zrobić to znaczy, 71 00:04:14,790 --> 00:04:18,160 w porządku, gdybym chciał usunąć, na przykład, 3, 72 00:04:18,160 --> 00:04:24,850 co mogę zrobić, to po prostu punkt poprzedni węzeł 73 00:04:24,850 --> 00:04:27,580 do następnego węzła 3. 74 00:04:27,580 --> 00:04:29,400 Więc chciałbym po prostu zrobić coś takiego. 75 00:04:29,400 --> 00:04:33,400 Ale to, co jest problem z robić? 76 00:04:33,400 --> 00:04:37,400 Mam wyciek pamięci, więc nie mam dostępu do numeru 3 więcej. 77 00:04:37,400 --> 00:04:42,480 Problem z tym jest to, że nie będę w stanie uwolnić ten węzeł. 78 00:04:42,480 --> 00:04:45,360 Zamierzam mieć wyciek pamięci i (niezrozumiałe) będzie mnie nienawidzić. 79 00:04:45,360 --> 00:04:49,370 Więc zamiast robić, że powinienem chyba mieć chwilowy wskaźnik. 80 00:04:49,370 --> 00:04:53,210 Włożyłem więc temp. To będzie wskazywać na węźle, który chcę usunąć. 81 00:04:53,210 --> 00:04:58,170 A następnie można przejść poprzednie węzły do ​​punktu do następnego węzła 82 00:04:58,170 --> 00:05:00,390 węzła, który chcę usunąć. 83 00:05:00,390 --> 00:05:02,730 I wreszcie mogę uwolnić wskaźnik. 84 00:05:02,730 --> 00:05:07,480 Czy muszę zwolnić wskaźnik, który stworzyłem właśnie tam? 85 00:05:07,480 --> 00:05:09,560 I nie trzeba, tylko dlatego, że - 86 00:05:09,560 --> 00:05:13,430 Różnica polega na tym, że węzeł został stworzony za pomocą malloc, 87 00:05:13,430 --> 00:05:17,280 więc jest to w kupie, a ten właśnie ogłosił jako przełącznik NULL w stosie. 88 00:05:17,280 --> 00:05:20,000 Więc nie trzeba go uwolnić. 89 00:05:20,000 --> 00:05:22,030 >> Ok. Teraz porozmawiajmy o stosach. 90 00:05:22,030 --> 00:05:24,680 Stosy są całkiem proste. 91 00:05:24,680 --> 00:05:29,540 Zrobiliśmy Stosy i kolejki w klasie tylko za pomocą tablic, 92 00:05:29,540 --> 00:05:32,820 ale należy znać - po prostu być świadomi 93 00:05:32,820 --> 00:05:40,740 że można to zrobić również w kolejkach z wykorzystaniem stosów list, jak również związane. 94 00:05:40,740 --> 00:05:44,460 Więc jeśli masz tablicę, co byłoby stos? 95 00:05:44,460 --> 00:05:46,810 Stosu, po pierwsze, musi mieć wielkość. 96 00:05:46,810 --> 00:05:49,950 Trzeba zapisać to, co jest rozmiar stosu, że masz teraz. 97 00:05:49,950 --> 00:05:52,980 A także można mieć tablicę, w tym przypadku liczb, 98 00:05:52,980 --> 00:05:55,120 ale jeśli chcesz, może to być tablica 99 00:05:55,120 --> 00:06:00,380 ciągów, tablica struktury, wszystko, co chcesz zachować. 100 00:06:00,380 --> 00:06:03,240 O stosie: różnica między stos i połączonej listy 101 00:06:03,240 --> 00:06:08,590 jest to, że w stosie masz tylko dostęp do ostatniego elementu, który został wprowadzony w stosie. 102 00:06:08,590 --> 00:06:11,770 Nazywa się ostatnio, pierwsze wyszło. 103 00:06:11,770 --> 00:06:15,090 Tak jak masz stos tac, 104 00:06:15,090 --> 00:06:17,670 jeśli umieścić zasobnik na wierzchu stosu 105 00:06:17,670 --> 00:06:22,670 trzeba najpierw usunąć to tacy mają dostęp do innych podajników. 106 00:06:22,670 --> 00:06:26,310 To samo ze stosów. 107 00:06:26,310 --> 00:06:31,220 Więc jeśli chcesz, na przykład, dodać element do stosu, co powinienem zrobić? 108 00:06:31,220 --> 00:06:34,070 To się nazywa przeć, i to jest całkiem proste. 109 00:06:34,070 --> 00:06:37,130 Pierwszą rzeczą, którą musisz zrobić, to sprawdzić, czy rozmiar stosu 110 00:06:37,130 --> 00:06:40,150 nie jest większa lub równa zdolności stosu. 111 00:06:40,150 --> 00:06:45,810 Bo jeśli jesteś już na pełnych obrotach, nie można jeszcze coś dodać. 112 00:06:45,810 --> 00:06:51,140 A jeśli nie, to po prostu trzeba dodać element do stosu. 113 00:06:51,140 --> 00:06:54,530 I wreszcie, zwiększyć rozmiar. Więc jest to całkiem proste. 114 00:06:54,530 --> 00:06:57,140 Więc po prostu dodać numer 2. 115 00:06:57,140 --> 00:07:00,350 A jeśli chcę pop, co oznacza, że ​​chcę, aby usunąć 116 00:07:00,350 --> 00:07:03,870 Ostatnim elementem, który został dodany i zwrócić wartość elementu, 117 00:07:03,870 --> 00:07:09,180 Pierwszą rzeczą, którą trzeba sprawdzić to, że stos nie jest pusty. 118 00:07:09,180 --> 00:07:11,510 Bo jeśli jest pusty, nic nie mogę wrócić. 119 00:07:11,510 --> 00:07:14,820 W tym przypadku, wracam -1. 120 00:07:14,820 --> 00:07:18,960 W przeciwnym razie, mam zamiar zmniejszyć rozmiar specyfikacji, 121 00:07:18,960 --> 00:07:22,510 i powrót numerów (s.size). 122 00:07:22,510 --> 00:07:27,230 Dlaczego zmniejszyć rozmiar, a następnie powrót s.size? 123 00:07:27,230 --> 00:07:30,930 To dlatego, że w tym przypadku, spec ma rozmiar 4, 124 00:07:30,930 --> 00:07:33,810 i chcę wrócić do czwartego elementu, tak? 125 00:07:33,810 --> 00:07:36,030 Jednak, co jest indeksem czwartego elementu? Trzy. 126 00:07:36,030 --> 00:07:44,510 Ponieważ mam rozmiar - będzie 3, może po prostu wrócić s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 bo to 3. Więc jest to tylko wskaźnik. 128 00:07:48,410 --> 00:07:50,380 >> Teraz kolejek. Kolejki są prawie to samo. 129 00:07:50,380 --> 00:07:54,950 Jedyną różnicą jest to, że zamiast ostatniego, pierwsze wyszło, 130 00:07:54,950 --> 00:07:57,480 masz pierwsze weszło, pierwsze wyszło. 131 00:07:57,480 --> 00:07:59,460 Prawdopodobnie, jeśli czekasz iść na koncert, 132 00:07:59,460 --> 00:08:04,260 nie byłby zadowolony, gdybyś miał stos zamiast kolejki. 133 00:08:04,260 --> 00:08:07,730 Będąc ostatnią osobą, która się będzie pierwszą osobą, aby wprowadzić koncert. 134 00:08:07,730 --> 00:08:09,760 Prawdopodobnie nie będzie zadowolony. 135 00:08:09,760 --> 00:08:15,020 W kolejce, pierwszy człowiek, aby w to również pierwszy człowiek się wydostać. 136 00:08:15,020 --> 00:08:18,720 Tak więc w definicji kolejki, poza tym, że rozmiar w tablicy 137 00:08:18,720 --> 00:08:23,360 trzeba też mieć głowę, co jest indeks na głowę stosu. 138 00:08:23,360 --> 00:08:29,000 Tak więc pierwszym elementem w tej chwili. 139 00:08:29,000 --> 00:08:32,710 Enqueue to samo co naciśnięcie na stosach. 140 00:08:32,710 --> 00:08:34,980 Jeśli jesteś bardzo naiwny, by po prostu powiedzieć, 141 00:08:34,980 --> 00:08:39,289 Cóż, mogę tylko zrobić dokładnie to samo co ja za naciśnięciem. 142 00:08:39,289 --> 00:08:44,030 Można po prostu sprawdzić, czy nie jest to poza możliwości. 143 00:08:44,030 --> 00:08:48,760 Jeśli jest, to zwraca false, w przeciwnym razie można po prostu wyeksportować nową wartość 144 00:08:48,760 --> 00:08:50,630 a następnie zwiększyć rozmiar. 145 00:08:50,630 --> 00:08:52,750 Ale dlaczego to jest złe? 146 00:08:52,750 --> 00:08:55,010 Chcę zobaczyć ten przykład. 147 00:08:55,010 --> 00:08:57,020 Próbuję enqueue kilka rzeczy, 148 00:08:57,020 --> 00:08:58,390 a potem idę do usuwania z kolejki i enqueue. 149 00:08:58,390 --> 00:09:00,550 Jest wiele komend, ale jest to bardzo proste. 150 00:09:00,550 --> 00:09:04,790 Zamierzam enqueue 5, więc dodać 5, a następnie 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, a następnie chcę usunie z niej coś, 152 00:09:09,310 --> 00:09:12,000 co oznacza, że ​​mam zamiar usunąć pierwszy element. 153 00:09:12,000 --> 00:09:14,640 Więc mam zamiar usunąć numer 3, tak? 154 00:09:14,640 --> 00:09:17,320 Pierwszy element. Ok. 155 00:09:17,320 --> 00:09:21,450 Teraz gdy próbuję enqueue coś innego, co będzie się działo? 156 00:09:21,450 --> 00:09:24,290 Według mojej realizacji, 157 00:09:24,290 --> 00:09:31,040 Miałem zamiar umieścić następny numer w q.size indeksu. 158 00:09:31,040 --> 00:09:35,140 W takim przypadku, wielkość jest 8 159 00:09:35,140 --> 00:09:38,640 więc wskaźnik 8 będzie tu na ostatniej pozycji. 160 00:09:38,640 --> 00:09:43,900 Jeśli próbuję enqueue 1 tu, będę zastępując ostatnią pozycję 161 00:09:43,900 --> 00:09:45,870 na numer 1, która jest całkowicie błędne. 162 00:09:45,870 --> 00:09:49,870 Co chcę zrobić, to owinąć wokół i przejść do pierwszej pozycji. 163 00:09:49,870 --> 00:09:52,870 Może to po prostu powiedzieć, dobrze, muszę tylko sprawdzić 164 00:09:52,870 --> 00:09:55,600 jeśli faktycznie mogę umieścić coś tam. 165 00:09:55,600 --> 00:09:58,560 Jeśli nie, po prostu powiedzieć, o, nowy pełną zdolność 166 00:09:58,560 --> 00:10:02,010 jest faktycznie pojemność - 1, i nie można umieścić tam element. 167 00:10:02,010 --> 00:10:06,150 Ale jaki jest problem? Problemem jest to, że jeśli tylko usunie z niej wszystko, co tutaj 168 00:10:06,150 --> 00:10:08,240 i staram się dodać coś innego, to po prostu powiedzieć, 169 00:10:08,240 --> 00:10:11,210 dobrze, byłeś na pełnych obrotach, co jest 0. 170 00:10:11,210 --> 00:10:13,620 Więc kolejki nie ma. 171 00:10:13,620 --> 00:10:16,990 Trzeba owinąć wokół i sposobem pakowania wokół 172 00:10:16,990 --> 00:10:22,040 że ludzie nauczyli się w wizjonerskich i innych psets używał mod. 173 00:10:22,040 --> 00:10:29,090 Możesz spróbować w domu, aby zrozumieć, dlaczego chcesz zrobić q.size + q.head 174 00:10:29,090 --> 00:10:31,080 mod pojemność, ale jeśli sprawdzić tutaj, 175 00:10:31,080 --> 00:10:34,760 widzimy, że to działa. 176 00:10:34,760 --> 00:10:37,760 Tak więc w ostatnim przykładzie q.size wynosiła 8 177 00:10:37,760 --> 00:10:47,590 i głowa była 1, ponieważ była to pozycja o tablicy. 178 00:10:47,590 --> 00:10:51,970 Tak będzie 8 + 1, 9. Pojemność mod 9 będzie 0. 179 00:10:51,970 --> 00:10:56,640 Byłoby to z indeksem 0. Będziemy w odpowiedniej pozycji. 180 00:10:56,640 --> 00:10:59,750 A następnie spróbuj kolejkę w domu. 181 00:10:59,750 --> 00:11:04,950 Kilka ważnych rzeczy: spróbować zrozumieć różnicę między stosu i kolejki. 182 00:11:04,950 --> 00:11:11,620 W domu, staramy się bardzo znane z wdrażania enqueue, Dequeue, pchnięcie i pop. 183 00:11:11,620 --> 00:11:16,560 , A także zrozumieć, kiedy należy użyć każdego z nich. 184 00:11:16,560 --> 00:11:22,830 >> Więc odpocząć przez 10 sekund z bandą stworki. 185 00:11:22,830 --> 00:11:26,080 A teraz wróćmy do struktur danych. 186 00:11:26,080 --> 00:11:29,770 Hash tabel. Wiele osób bali tabel hash. 187 00:11:29,770 --> 00:11:33,650 w Problem zestaw 6, sprawdzanie pisowni. 188 00:11:33,650 --> 00:11:35,980 Hash tabele i stara, wiele osób się bać z nich. 189 00:11:35,980 --> 00:11:38,540 Myślą, że są one tak trudne do zrozumienia. Tak? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Problem zestaw 5. >> Problem zestaw 5, tak. Dzięki Rob. 191 00:11:41,490 --> 00:11:43,370 Tak. Sześć był Huff n 'Puff, tak. 192 00:11:43,370 --> 00:11:49,340 Problem zestaw 5 została Sprawdzanie pisowni, i trzeba było użyć tabeli mieszania lub spróbować. 193 00:11:49,340 --> 00:11:55,360 Wiele osób uważało, że były one bardzo trudne do zrozumienia, ale to naprawdę bardzo proste. 194 00:11:55,360 --> 00:12:01,290 Co to jest tabela hash, w zasadzie? Tabela mieszania jest tablica połączonych listach. 195 00:12:01,290 --> 00:12:06,730 Jedyna różnica między tablicą i tabeli mieszania 196 00:12:06,730 --> 00:12:09,730 jest to, że w tabeli mieszania masz coś o nazwie funkcja skrótu. 197 00:12:09,730 --> 00:12:12,080 Co to jest funkcja skrótu? 198 00:12:12,080 --> 00:12:13,970 Nie wiem, czy macie może przeczytać tutaj. 199 00:12:13,970 --> 00:12:16,090 To jest przykład tabeli mieszania. 200 00:12:16,090 --> 00:12:19,220 Więc widać, że masz tablicę z 31 elementów. 201 00:12:19,220 --> 00:12:22,440 I to, co robimy w tabeli mieszania jest mieć funkcji skrótu 202 00:12:22,440 --> 00:12:26,660 że zamierza tłumaczyć klucz, każdy int do indeksu. 203 00:12:26,660 --> 00:12:31,740 Jeśli, na przykład, jeśli chcesz wybrać dla B. Harrison 204 00:12:31,740 --> 00:12:34,190 Chciałbym umieścić B. Harrison w moich funkcji skrótu, 205 00:12:34,190 --> 00:12:36,960 i funkcja skrótu wróci 24. 206 00:12:36,960 --> 00:12:40,930 Tak, wiem, że chcesz przechowywać B. Harrison w 24. 207 00:12:40,930 --> 00:12:46,580 Tak, że jest różnica między tylko o tablicę i posiadające tabeli mieszania. 208 00:12:46,580 --> 00:12:48,740 W tabeli mieszania będziesz mieć funkcję, która jest ci powiedzieć 209 00:12:48,740 --> 00:12:54,740 gdzie do przechowywania danych, które chcesz przechowywać. 210 00:12:54,740 --> 00:12:57,040 Dla funkcji skrótu, chcesz wyglądać na funkcji skrótu 211 00:12:57,040 --> 00:13:00,600 że jest deterministyczny i dobrze rozmieszczone. 212 00:13:00,600 --> 00:13:07,810 Jak widać tutaj, widać, że wiele danych, które chciałem sklepie faktycznie 19 213 00:13:07,810 --> 00:13:12,470 zamiast korzystać z 31 i 30 i 29, które były za darmo. 214 00:13:12,470 --> 00:13:16,920 Więc funkcja skrótu, że kiedyś nie było bardzo dobrze rozmieszczone. 215 00:13:16,920 --> 00:13:20,710 Kiedy mówimy, dobrze rozdzielone, to znaczy, że chcemy mieć, 216 00:13:20,710 --> 00:13:26,520 w przybliżeniu, co najmniej 1 lub 2 dla każdego - 217 00:13:26,520 --> 00:13:32,190 podobne, różnica 1 lub 2 dla każdego z indeksów w tablicach. 218 00:13:32,190 --> 00:13:43,950 Chcesz mieć z grubsza taką samą liczbę elementów w każdej połączonej listy w tablicy. 219 00:13:43,950 --> 00:13:48,600 I jest to łatwe do sprawdzenia, czy jest to ważne w tabeli mieszania, zobaczyć jak tabele mieszania. 220 00:13:48,600 --> 00:13:51,770 >> Wtedy drzewa. To jest drzewo. 221 00:13:51,770 --> 00:13:56,400 Drzewa w informatyce są do góry nogami z jakiegoś powodu. 222 00:13:56,400 --> 00:14:00,150 Więc tu masz korzeń drzewa, a następnie liście. 223 00:14:00,150 --> 00:14:05,630 Należy tylko wiedzieć, nomenklaturę dla rodziców i dziecka. 224 00:14:05,630 --> 00:14:12,880 Każdy węzeł ma swoje dzieci, które są węzły, które są poniżej dominującej. 225 00:14:12,880 --> 00:14:19,660 Tak więc, na przykład, 2 ma być dominująca na 3 i na inne dziecko tam, 226 00:14:19,660 --> 00:14:25,290 natomiast 3 będzie rodzicem dla 1 i inne dzieci, które są tam. 227 00:14:25,290 --> 00:14:29,990 I 1 będzie 3 na dziecko i tak dalej. 228 00:14:29,990 --> 00:14:34,610 Mamy coś dużo bardziej interesujące, zwany wyszukiwanie binarne drzewo, 229 00:14:34,610 --> 00:14:39,040 , w którym wszystkie wartości po prawej stronie węzła 230 00:14:39,040 --> 00:14:41,660 będą na prawo, tutaj - po prawej stronie, 231 00:14:41,660 --> 00:14:46,780 będą większe niż element korzenia. 232 00:14:46,780 --> 00:14:49,780 Więc jeśli mam numer 5 tutaj, wszystkie elementy po prawej stronie 233 00:14:49,780 --> 00:14:51,940 będą większe niż 5, a po lewej 234 00:14:51,940 --> 00:14:56,770 Wszystkie elementy będą mniej niż 5. 235 00:14:56,770 --> 00:14:58,780 Dlaczego jest to przydatne? 236 00:14:58,780 --> 00:15:01,660 Cóż, jeśli chcesz sprawdzić, czy numer 7 jest tutaj, na przykład, 237 00:15:01,660 --> 00:15:05,960 Po prostu idź do 5 pierwszy i mam zamiar zobaczyć, jest 7 większa lub mniejsza niż 5? 238 00:15:05,960 --> 00:15:09,540 To jest większy, więc wiem, że będzie musiał być po prawej stronie drzewa. 239 00:15:09,540 --> 00:15:13,980 Więc mam dużo mniej rzeczy do obejrzenia. 240 00:15:13,980 --> 00:15:19,520 W realizacji wyszukiwania binarnego drzewa, węzeł, jestem po prostu będzie mieć dane, 241 00:15:19,520 --> 00:15:21,750 tak int n; można również ciąg 242 00:15:21,750 --> 00:15:23,630 lub cokolwiek chcesz. 243 00:15:23,630 --> 00:15:28,100 Musisz tylko uważać na określenie tego, co jest większe, co jest mniej. 244 00:15:28,100 --> 00:15:30,390 Więc jeśli miał łańcuchy, na przykład, można zdefiniować 245 00:15:30,390 --> 00:15:34,690 że wszystkie te rzeczy, po prawej stronie będziemy mieć większą długość, 246 00:15:34,690 --> 00:15:40,940 lewej będziemy mieć niższe długości, więc jest to naprawdę zależy od ciebie. 247 00:15:40,940 --> 00:15:44,930 >> W jaki sposób można wdrożyć znaleźć dla BST? 248 00:15:44,930 --> 00:15:47,840 Pierwszą rzeczą, jaką musimy zrobić, to sprawdzić, czy korzeń jest NULL. 249 00:15:47,840 --> 00:15:50,920 Jeżeli jest to wartość NULL, to znaczy, że coś tam nie ma 250 00:15:50,920 --> 00:15:53,330 dlatego, że nie mają nawet drzewa, prawda? 251 00:15:53,330 --> 00:15:55,790 Więc return false. 252 00:15:55,790 --> 00:15:58,740 W przeciwnym razie, mam zamiar sprawdzić, czy liczba jest większa 253 00:15:58,740 --> 00:16:01,720 niż wartość w korzeniu. 254 00:16:01,720 --> 00:16:04,250 Zamierzam spróbować znaleźć element na prawo 255 00:16:04,250 --> 00:16:08,590 drzewa. 256 00:16:08,590 --> 00:16:11,310 Widać, że używam tu rekursji. 257 00:16:11,310 --> 00:16:14,150 A następnie, jeśli jest to mniej, będę patrzeć w lewo. 258 00:16:14,150 --> 00:16:18,330 I wreszcie, w przeciwnym razie, jeśli nie jest mniejsza czy większa, 259 00:16:18,330 --> 00:16:20,660 oznacza to, że jest to wartość sama w sobie. 260 00:16:20,660 --> 00:16:23,010 Więc po prostu wrócić prawdziwe. 261 00:16:23,010 --> 00:16:26,360 Widać tutaj, że kiedyś, jeśli, jeśli, jeśli. 262 00:16:26,360 --> 00:16:30,820 I pamiętaj, że w quizie 0, mieliśmy problem, który miał, jeśli, jeśli, jeśli, 263 00:16:30,820 --> 00:16:32,780 i miałeś znaleźć nieefektywność, 264 00:16:32,780 --> 00:16:35,180 i nieefektywność, że użyłeś jeśli. 265 00:16:35,180 --> 00:16:39,060 Nie powinno być stosowane w przypadku, if, else if i else. 266 00:16:39,060 --> 00:16:44,240 Tak więc, należy użyć innego, jeśli i else if i jeszcze tutaj? 267 00:16:44,240 --> 00:16:46,200 Czy ktoś - tak? 268 00:16:46,200 --> 00:16:51,140 [Mówiąc Student, niesłyszalne] 269 00:16:51,140 --> 00:16:53,480 To jest doskonałe. Tak, ona mówi, że to nie ma znaczenia, 270 00:16:53,480 --> 00:16:55,930 tylko dlatego, nieefektywność, że mieliśmy przed 271 00:16:55,930 --> 00:16:59,550 było to, że, ponieważ, być może, jeśli jakiś warunek został spełniony, 272 00:16:59,550 --> 00:17:03,570 Więc trzeba przeprowadzić akcję, ale potem jechaliśmy do sprawdzenia wszystkich innych warunkach. 273 00:17:03,570 --> 00:17:06,319 Ale w tym przypadku, to wrócił od razu, więc to nie ma znaczenia. 274 00:17:06,319 --> 00:17:09,220 Więc nie trzeba używać if. 275 00:17:09,220 --> 00:17:11,740 >> I wreszcie, porozmawiajmy o próbach 276 00:17:11,740 --> 00:17:13,800 który jest najbardziej lubianym. 277 00:17:13,800 --> 00:17:15,980 Try to drzewo z tablic. 278 00:17:15,980 --> 00:17:20,369 Jest bardzo szybki, aby sprawdzić wartości, ale używa dużo pamięci. 279 00:17:20,369 --> 00:17:22,530 I to zazwyczaj filtrować słowa, więc kiedy 280 00:17:22,530 --> 00:17:27,920 chcą wprowadzić, na przykład, nie wiem, jak z książki telefonicznej w telefonie 281 00:17:27,920 --> 00:17:30,440 i chcesz być w stanie typu B 282 00:17:30,440 --> 00:17:32,510 i tylko nazwiska osób, które mają B. 283 00:17:32,510 --> 00:17:37,960 To jest bardzo łatwe do wykonania, że ​​za pomocą spróbować, na przykład. 284 00:17:37,960 --> 00:17:39,820 Jak zdefiniować węzeł w próbie? 285 00:17:39,820 --> 00:17:43,910 Po prostu trzeba mieć bool, który ma być is_word. 286 00:17:43,910 --> 00:17:48,660 Stanowi, że wykorzystując wszystkie znaki przed tego węzła, 287 00:17:48,660 --> 00:17:51,920 jesteś w stanie utworzyć słowo, 288 00:17:51,920 --> 00:17:57,230 i wtedy będziesz miał tablicę wskaźników do węzłów. 289 00:17:57,230 --> 00:18:03,120 Widać, że mamy tablicę węzłów nadrzędnych, więc węzeł * tablicę? Tak? 290 00:18:03,120 --> 00:18:06,050 Zobaczmy więc, jak to będzie działać. Do sprawdzania pisowni, 291 00:18:06,050 --> 00:18:08,230 mamy tablicę 27 elementów, 292 00:18:08,230 --> 00:18:12,150 bo mamy wszystkie litery i apostrof. 293 00:18:12,150 --> 00:18:17,800 Zanim tu mam zamiar użyć 2, bo chcę, aby móc pisać na forum. 294 00:18:17,800 --> 00:18:20,230 Ok. Jest to więc przykład razem. 295 00:18:20,230 --> 00:18:25,600 Jeśli po prostu zdefiniować pierwszy węzeł, będę musiał tablicę 2 elementy 296 00:18:25,600 --> 00:18:29,290 że są 2 wskaźniki na NULL, więc po prostu umieścić "a" i "b". 297 00:18:29,290 --> 00:18:32,430 I mam zamiar mieć bool, który mówi is_word. 298 00:18:32,430 --> 00:18:34,420 To będzie false dla pierwszego, 299 00:18:34,420 --> 00:18:37,370 tylko dlatego, że wcześniej nie ma żadnych znaków. 300 00:18:37,370 --> 00:18:40,900 Tak puste słowo nie jest słowem. Więc to jest fałszywe. 301 00:18:40,900 --> 00:18:46,320 Jeśli chcę dodać 'A' do tego słownika, co mam zrobić? 302 00:18:46,320 --> 00:18:49,760 Chciałbym po prostu malloc nowy węzeł na 'a', 303 00:18:49,760 --> 00:18:54,630 , a następnie dodać swoje słowo na true. 304 00:18:54,630 --> 00:19:00,180 Więc to po prostu oznacza, że ​​po "a" będzie prawdą. Ma sens? 305 00:19:00,180 --> 00:19:04,120 Następnie, jeśli chcę dodać "BA", będę musiał malloc 1 dla "b", 306 00:19:04,120 --> 00:19:07,550 i mam zamiar ustawić wartość logiczną false, 307 00:19:07,550 --> 00:19:10,160 bo "b" sam w sobie nie jest słowo. 308 00:19:10,160 --> 00:19:13,010 Potem idę do malloc koszu na 'a', więc 'ba', 309 00:19:13,010 --> 00:19:16,290 i mam zamiar założyć, że jest to słowo na true. 310 00:19:16,290 --> 00:19:18,950 Ponieważ 'ba' to słowo. 311 00:19:18,950 --> 00:19:21,910 A potem, jeśli chcę zobaczyć, czy "b" jest w tym słowniku, 312 00:19:21,910 --> 00:19:26,730 Mogę pójść do pierwszego, 'b'. Idę w dół, i patrzę na to słowo, i to mówi fałszywe. 313 00:19:26,730 --> 00:19:30,110 Więc to nie jest słowo. Jeśli chcę sprawdzić "BA", 314 00:19:30,110 --> 00:19:38,010 Chodzę do pierwszej, "b", a następnie przejdź do "a", i widzę, prawda, tak to jest słowo. Ma sens? 315 00:19:38,010 --> 00:19:41,950 Wielu ludzi się mylić próbach. Nie? 316 00:19:41,950 --> 00:19:44,740 >> Wreszcie kodowania Huffmana. Huffman kodowanie jest bardzo przydatna 317 00:19:44,740 --> 00:19:47,550 aby zaoszczędzić pamięć i kompresja plików tekstowych, 318 00:19:47,550 --> 00:19:52,270 tylko dlatego, że wiele razy użyć "a" i "e", na przykład, 319 00:19:52,270 --> 00:19:57,710 w dokumentach, ale nie wiem, czy wam używać "q" lub "Z" jak najwięcej. 320 00:19:57,710 --> 00:20:02,040 Mając tylko 1 bajt dla każdego znaku, 321 00:20:02,040 --> 00:20:08,520 każdy - 256 znaków, że mamy w tabeli ASCII nie jest bardzo optymalna, 322 00:20:08,520 --> 00:20:11,410 tylko dlatego, że są pewne znaki, które używają dużo więcej, 323 00:20:11,410 --> 00:20:15,180 więc powinieneś użyć mniej pamięci dla tych. 324 00:20:15,180 --> 00:20:17,560 Jak używać kodu Huffmana? 325 00:20:17,560 --> 00:20:20,010 Musimy zrobić Huffman drzewo. 326 00:20:20,010 --> 00:20:23,370  Drzewo ma węzły Huffman 327 00:20:23,370 --> 00:20:27,760 które mają symbol, który ma być w stylu: "a", "b", "c", pisma, 328 00:20:27,760 --> 00:20:32,990 co litera masz, częstotliwość, że częstotliwość jest słowo, które pojawia się w tekście, 329 00:20:32,990 --> 00:20:36,280 że podczas tworzenia drzewa Huffmana dla, 330 00:20:36,280 --> 00:20:41,800 i węzeł będzie wskazywać na lewo drzewa Huffmana 331 00:20:41,800 --> 00:20:47,210 oraz inny węzeł, który ma wskazywać na prawo. Więc jak drzewo. 332 00:20:47,210 --> 00:20:49,440 Jak zbudować Huffman drzewo? 333 00:20:49,440 --> 00:20:54,020 Masz zamiar wybrać 2 węzły, które mają najniższe częstotliwości. 334 00:20:54,020 --> 00:20:56,490 Jeśli masz krawat masz zamiar wybrać 2 węzłów 335 00:20:56,490 --> 00:20:59,870 , które mają najniższe wartości ASCII, jak również. 336 00:20:59,870 --> 00:21:02,420 Potem idziesz do tworzenia nowego drzewa z tych 2 węzłów 337 00:21:02,420 --> 00:21:08,030 który będzie miał łączną częstotliwość w węźle nadrzędnym. 338 00:21:08,030 --> 00:21:13,240 A potem idziesz do usunięcia 2 dzieci z lasu 339 00:21:13,240 --> 00:21:15,570 i zastąpienie ich rodzica. 340 00:21:15,570 --> 00:21:18,930 I masz zamiar to powtórzyć, aż masz tylko 1 drzewo w lesie. 341 00:21:18,930 --> 00:21:23,840 Zobaczmy więc, jak można zrobić drzewo Huffmana dla ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Widać tutaj, że wszystkie litery mają częstotliwość 1, z wyjątkiem "A", który ma częstotliwość 2. 343 00:21:29,220 --> 00:21:34,090 Stworzyłem więc węzły dla wszystkich liter i umieszczone w kolejności wartości ASCII i częstotliwości. 344 00:21:34,090 --> 00:21:40,090 Więc jeśli chcę, aby utworzyć pierwszy drzewa, to będzie "L" i "M". 345 00:21:40,090 --> 00:21:43,100 Więc to jest tutaj. Częstotliwość pary będzie 2 346 00:21:43,100 --> 00:21:49,470 ponieważ jest to 1 + 1, to następne 2 z najniższych częstotliwości są "Y" i "Z". 347 00:21:49,470 --> 00:21:53,180 A potem mam wszystkie z nich są - mają częstotliwość 2. 348 00:21:53,180 --> 00:22:00,470 Więc, które z nich są te, które mają najniższą wartość ASCII dla następnej? 349 00:22:00,470 --> 00:22:04,830 "A" i "L". Więc utworzyć nowy węzeł, 350 00:22:04,830 --> 00:22:09,930 i na koniec, jest 4 do 2, w 2 będzie znajdować się na lewo. 351 00:22:09,930 --> 00:22:12,430 I to jest drzewo Huffman. 352 00:22:12,430 --> 00:22:16,060 Następnie, jeśli chcę napisać jakiś tekst, 353 00:22:16,060 --> 00:22:24,440 jak w systemie binarnym do konwersji do tekstu, za pomocą drzewa Huffmana jest bardzo proste. 354 00:22:24,440 --> 00:22:30,220 Na przykład, jeśli powiem, że porusza się po lewej stronie jest 0 i przesunięcie w prawo jest 1, 355 00:22:30,220 --> 00:22:32,410 Co to jest, że będzie reprezentował? 356 00:22:32,410 --> 00:22:35,530 Tak jak 1, 1, tak, dobrze, dobrze, 357 00:22:35,530 --> 00:22:40,370 , a następnie 0, czyli w lewo będzie L, a następnie dodano 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Tak, 1, 0, więc po prostu 1, 0, ''. 359 00:22:43,950 --> 00:22:47,540 , A następnie 0, 1, czyli "Z". 360 00:22:47,540 --> 00:22:52,170 , A następnie 1, 0, 0 - nie. 361 00:22:52,170 --> 00:22:56,780 0, 0 będzie "Y", tak leniwy. 362 00:22:56,780 --> 00:23:06,060 Więc to wszystko dla mnie, Rob zamiar przejąć. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Więc, tydzień 7 rzeczy. 364 00:23:08,400 --> 00:23:11,390 Mamy wiele do przejść bardzo szybko. 365 00:23:11,390 --> 00:23:13,430 Operatory bitowe, przepełnienie bufora, 366 00:23:13,430 --> 00:23:16,760 Biblioteka CS50, to HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Wszystko w jak 15 do 20 minut. 368 00:23:20,990 --> 00:23:24,330 Operatory bitowe. Istnieje 6 z nich, że trzeba wiedzieć. 369 00:23:24,330 --> 00:23:31,200 Bitowe i bitowe lub, XOR, przesunięcie w lewo, w prawo zmiany, i nie. 370 00:23:31,200 --> 00:23:35,420 Prawy shift i nie ledwo widział w wykładzie w ogóle. 371 00:23:35,420 --> 00:23:40,480 Pojedziemy na niej szybko, ale to dobrze wiedzieć, że są to 6, że istnieje. 372 00:23:40,480 --> 00:23:45,070 Pamiętaj, że operatory bitowe są jak gdy zrobisz 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Nie masz do czynienia z pliku binarnego z 3 i 4. 374 00:23:49,420 --> 00:23:56,550 Z operatorów bitowe są faktycznie do czynienia z poszczególnych bitów liczb 3 i 4. 375 00:23:56,550 --> 00:23:59,120 >> Więc pierwszy, że powiemy to bitowe nie, 376 00:23:59,120 --> 00:24:02,340 i wszystko co robi to odwrócić wszystkie bity. 377 00:24:02,340 --> 00:24:05,500 Więc tutaj, jeśli piszesz to w C, możesz napisać to nie 378 00:24:05,500 --> 00:24:09,380 jak ~ 11011 lub cokolwiek, by napisać, że lubię ~ 4, 379 00:24:09,380 --> 00:24:12,970 a potem to odwrócić reprezentacja binarna 4. 380 00:24:12,970 --> 00:24:24,800 Więc tutaj, ~ z pewnej liczby binarnej 1101101 zamierza dokładnie przerzucić wszystkie 1 do 0 i wszystkie 0 do 1 roku. 381 00:24:24,800 --> 00:24:27,600 Jak mówię nie, częste korzystanie z tego, 382 00:24:27,600 --> 00:24:30,830 i zobaczymy go w kawałku, to jak chcemy wymyślić jakiś numer 383 00:24:30,830 --> 00:24:35,460 gdzie wszystkie bity są 1, z wyjątkiem jednego z nich. 384 00:24:35,460 --> 00:24:38,560 Tak to zwykle łatwiejsze do wyrażenia numeru 385 00:24:38,560 --> 00:24:40,630 gdzie tylko, że jeden bit jest ustawiony, 386 00:24:40,630 --> 00:24:44,650 a następnie podjąć ~ go, więc co drugi bit jest ustawiony, z wyjątkiem tego jednego. 387 00:24:44,650 --> 00:24:50,300 Więc to, co mamy zamiar używać więcej za chwilę. 388 00:24:50,300 --> 00:24:58,220 >> Bitowe lub. Oto 2 binarne numery, a te 2 numery 389 00:24:58,220 --> 00:25:00,780 są bardzo reprezentatywne, ponieważ stanowią one co możliwe 390 00:25:00,780 --> 00:25:07,290 Kombinacja bitów można trzeba operować. 391 00:25:07,290 --> 00:25:13,540 Tutaj, kiedy or'd każdy bit, jesteśmy po prostu będzie porównać prosto w dół. 392 00:25:13,540 --> 00:25:15,410 Tak więc na lewym boku mamy 1 i 1. 393 00:25:15,410 --> 00:25:20,510 Kiedy bitowym | tych, co ja mam dostać? Jeden. 394 00:25:20,510 --> 00:25:25,320 Następnie bitowym | 0 i 1 ma dać mi? Jeden. 395 00:25:25,320 --> 00:25:27,840 Bitowe 1 i 0 to będzie to samo, jeden. 396 00:25:27,840 --> 00:25:31,880 Bitowe 0 | 0 ma dać mi 0. 397 00:25:31,880 --> 00:25:37,300 Tak tylko wówczas, gdy pojawia się w 0 0 | 0 sprawa. 398 00:25:37,300 --> 00:25:40,020 A może myślisz, że tak samo, jak logiczne RNO. 399 00:25:40,020 --> 00:25:44,830 Więc jeśli uważasz, że z 1 i 0 jako prawdziwe, jak fałszywe, to samo odnosi się tutaj. 400 00:25:44,830 --> 00:25:50,040 Więc prawda, czy prawda jest prawdą, prawda czy fałsz, jest prawdą. 401 00:25:50,040 --> 00:25:57,150 Fałszywe lub prawdziwe jest prawdziwe, nieprawdziwe lub fałszywe jest jedyną rzeczą, która jest w rzeczywistości fałszywa. 402 00:25:57,150 --> 00:26:00,100 Oto przykład, który należy wiedzieć 403 00:26:00,100 --> 00:26:05,160 jako całkiem dobry przykład, gdy używane są Operatory bitowe. 404 00:26:05,160 --> 00:26:08,660 Tutaj, jeśli kapitał lub "A" z OX20, 405 00:26:08,660 --> 00:26:11,830 i będziemy patrzeć na to w sekundę, mamy coś. 406 00:26:11,830 --> 00:26:16,020 A jeśli my lub małe "a" z OX20, mamy coś. 407 00:26:16,020 --> 00:26:26,750 Warto więc wyciągnąć tabeli ASCII. 408 00:26:26,750 --> 00:26:34,000 Ok. Tutaj widzimy, że "A" jest - 409 00:26:34,000 --> 00:26:36,920 tutaj mamy "A" jest dziesiętnym 65. 410 00:26:36,920 --> 00:26:45,120 Ale pójdę z system szesnastkowy, który jest Ox41. 411 00:26:45,120 --> 00:26:48,280 Całkiem pewien, że widział go w klasie. Myślę, że widzieliśmy go w klasie 412 00:26:48,280 --> 00:26:52,730 , że jest to dość łatwe do konwersji z postaci szesnastkowej na dwójkową. 413 00:26:52,730 --> 00:26:55,280 Więc, jeśli chcesz umieścić 4 do binarnego, 414 00:26:55,280 --> 00:26:59,550 że po prostu będzie 0100. 415 00:26:59,550 --> 00:27:03,620 To jest 1 w miejsce, miejsce 2, w miejsce 4, więc jest to 4. 416 00:27:03,620 --> 00:27:08,550 Wtedy mogę gp 1 do binarnego, który jest będzie 0001. 417 00:27:08,550 --> 00:27:14,280 I tak to będzie przedstawienie "A" w formacie binarnym. 418 00:27:14,280 --> 00:27:22,720 Biorąc małe litery "a", to teraz dzieje się Ox61, 419 00:27:22,720 --> 00:27:27,050 gdzie podział się one w jego binarny, więc 6 - 420 00:27:27,050 --> 00:27:37,830 Niech rzeczywiście to zrobić - to nie ma gumkę? Gumka. 421 00:27:37,830 --> 00:27:48,220 Ox61. Więc podział 6 do binarnego będzie 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 I podział 1 będzie 0001. 423 00:27:54,610 --> 00:27:56,520 Patrząc na różnicę między tymi 2, 424 00:27:56,520 --> 00:28:04,250 widzimy, że jedyna różnica między małymi literami oraz kapitałowym "A" to jest jeden bit. 425 00:28:04,250 --> 00:28:11,810 Więc wracając do tego - w porządku. 426 00:28:11,810 --> 00:28:15,920 Wracając do tego, jeśli spojrzymy na to, co jest nieco OX20, 427 00:28:15,920 --> 00:28:22,210 więc podział OX20 w jego binarny, 428 00:28:22,210 --> 00:28:27,310 jest 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 OX20, tylko nieco, że jest ustawiony to nieco, że mamy do czynienia z, 430 00:28:33,470 --> 00:28:38,210 z przełączaniem między kapitałem i małe litery "A". 431 00:28:38,210 --> 00:28:47,610 Jeśli ja lub "A", która to jest jeden, '', 432 00:28:47,610 --> 00:28:50,580 jeśli ja lub "A" z OX20, 433 00:28:50,580 --> 00:28:53,490 co ja mam dostać? 434 00:28:53,490 --> 00:28:58,960 [Student, niesłyszalne] >> małe litery 'a', bo to będzie odwrócić ten bit na 1. 435 00:28:58,960 --> 00:29:04,170 I gdybym lub "a" z OX20, co ja mam dostać? 436 00:29:04,170 --> 00:29:08,780 Małe litery, bo po prostu oring '' z OX20, 437 00:29:08,780 --> 00:29:14,580 Jestem po prostu będzie oring ten jeden bit na 1, jest to już 1, więc to nie ma znaczenia. 438 00:29:14,580 --> 00:29:17,960 Więc mamy "A" i "a". 439 00:29:17,960 --> 00:29:24,820 >> I bitowe. Ponownie, możemy myśleć o tym, jak nasz logiczny i odpowiednika. 440 00:29:24,820 --> 00:29:28,180 Po lewej stronie mamy prawdziwe i prawdziwe. 441 00:29:28,180 --> 00:29:31,160 To będzie prawdziwe, i dla wszystkich przypadków, 442 00:29:31,160 --> 00:29:36,270 prawdziwe lub fałszywe i prawdziwe i fałszywe, czy fałszywe i fałsz, 443 00:29:36,270 --> 00:29:38,550 żadna z tych rzeczy nie jest prawdą. 444 00:29:38,550 --> 00:29:44,170 Tak więc to, co w końcu się od 1000. 445 00:29:44,170 --> 00:29:48,830 Więc teraz, tutaj, tutaj, gdzie Użyłem wierny bitowe nie, 446 00:29:48,830 --> 00:29:52,230 gdzie mieliśmy OX20. 447 00:29:52,230 --> 00:29:54,350 Więc to jest OX20. 448 00:29:54,350 --> 00:29:59,570 Teraz to, co chcę zrobić, bitowe ~ z OX20. 449 00:29:59,570 --> 00:30:03,600 Że zamierza odwrócić wszystkie bity. 450 00:30:03,600 --> 00:30:09,330 Więc mam 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 I tak '"anded z ~ OX20 zamierza dać mi, co? 452 00:30:18,940 --> 00:30:22,430 Tylko nieco naprawdę musimy myśleć o tym jednym, 453 00:30:22,430 --> 00:30:26,020 gdyż jeśli wszystkie z tych bitów jest ustawiony na 1, 454 00:30:26,020 --> 00:30:29,000 wtedy dostaniesz dokładnie to, co "było, 455 00:30:29,000 --> 00:30:31,260 z wyjątkiem, być może, co to trochę jest. 456 00:30:31,260 --> 00:30:34,460 Bo jeśli to było 1, teraz to będzie ustawiony na 0, 457 00:30:34,460 --> 00:30:39,810 bo co to jest, anded z tym będzie 0. 458 00:30:39,810 --> 00:30:43,280 Tak więc to, co jest '' & ~ OX20 zamiar dać mi? 459 00:30:43,280 --> 00:30:48,200 [Studenci odpowiedzieć, niesłyszalne] >> A co to jest "" i - to jest "A". 460 00:30:48,200 --> 00:30:52,170 I to, co jest '' & ~ OX20 zamiar dać mi? 461 00:30:52,170 --> 00:30:56,720 "A." Ponieważ jest aktualnie 1. 462 00:30:56,720 --> 00:30:59,570 Anding z tym 0 zamierza zrobić to 0, 463 00:30:59,570 --> 00:31:02,530 i teraz mamy zamiar dostać 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Obie są "," i ostatni, ale nie najmniej tego typu, 465 00:31:06,600 --> 00:31:10,830 mamy XOR. Jest to bardzo podobne, lub 466 00:31:10,830 --> 00:31:14,400 chyba oznacza to wyłącznie lub. 467 00:31:14,400 --> 00:31:18,420 To jak to, co zwykle uważamy za lub w rzeczywistym świecie. 468 00:31:18,420 --> 00:31:23,190 Tak zrobić albo "x" lub "y", ale nie obu. 469 00:31:23,190 --> 00:31:28,700 Tutaj 1 ^ 1 będzie 0. 470 00:31:28,700 --> 00:31:33,650 Bo prawda, to jest - to nie działa, jak również z logiczną true i false 471 00:31:33,650 --> 00:31:37,150 jako bitowe & oraz czy, 472 00:31:37,150 --> 00:31:40,100 ale prawdziwe ^ prawda jest fałszywa. 473 00:31:40,100 --> 00:31:44,810 Bo my tylko chcemy powrócić true, jeśli tylko jeden z nich jest prawdziwa. 474 00:31:44,810 --> 00:31:50,950 Więc 1 ^ 1 jest 0. Co o 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Jest 1. 1 ^ 0 ma wartość 1, 0 ^ 0 0.. 476 00:31:56,010 --> 00:32:03,890 Tak, w każdych okolicznościach, 0 bitowe coś 0 będzie 0. 477 00:32:03,890 --> 00:32:10,270 1 0 bitowe coś bitowe 1 lub 0, 478 00:32:10,270 --> 00:32:14,660 czy to | lub ^, to będzie 1, a jeśli jest to i to będzie 0. 479 00:32:14,660 --> 00:32:20,850 I tylko wówczas, gdy 1 bitowe 1 nie jest 1 to z wyłącznym lub. 480 00:32:20,850 --> 00:32:24,580 To jest 0110. 481 00:32:24,580 --> 00:32:36,520 Więc teraz, za pomocą XOR - tak, jesteśmy z powrotem w 20. 482 00:32:36,520 --> 00:32:43,480 '' ^ OX20 jest te 2 bity mamy porównanie. 483 00:32:43,480 --> 00:32:50,020 Więc 1 ^ 0 zamierza dać mi co? Jeden. 484 00:32:50,020 --> 00:32:58,430 '' ^ OX20 zamierza dać mi? Małe litery. 485 00:32:58,430 --> 00:33:04,010 '' ^ OX20 zamierza dać mi? A. Kapitał 486 00:33:04,010 --> 00:33:09,310 Bo co to robi, to XORing z OX20 487 00:33:09,310 --> 00:33:15,380 Rzut co skutecznie ten bit jest. 488 00:33:15,380 --> 00:33:21,240 Jeśli jest to 0, to teraz stanie się 1. 489 00:33:21,240 --> 00:33:26,160 Ponieważ jest 1, 1 ^ 1 0.. 490 00:33:26,160 --> 00:33:33,280 Tak więc nasz "" stała się "A", a nasz "" stała się "". 491 00:33:33,280 --> 00:33:36,910 Więc XOR jest naprawdę wygodny sposób po prostu przerzucanie sprawę. 492 00:33:36,910 --> 00:33:39,960 Chcesz po prostu iteracyjne nad ciąg liter 493 00:33:39,960 --> 00:33:44,330 i zastępców przypadek każdego pojedynczego znaku, 494 00:33:44,330 --> 00:33:50,680 po prostu XOR wszystko z OX20. 495 00:33:50,680 --> 00:33:55,220 >> Teraz mamy lewy SHIFT. Przesunięcie w lewo jest po prostu będzie, w zasadzie, 496 00:33:55,220 --> 00:34:01,250 wcisnąć wszystkie numery w, lub w lewo, a następnie włóż 0 za nimi stoi. 497 00:34:01,250 --> 00:34:05,550 Więc tutaj mamy 00.001.101. 498 00:34:05,550 --> 00:34:08,560 Jedziemy do pchania 3 0 w od prawej, 499 00:34:08,560 --> 00:34:13,580 i otrzymujemy 01101000. 500 00:34:13,580 --> 00:34:16,380 W zakresie nonbinary, 501 00:34:16,380 --> 00:34:24,699 widzimy, że tak naprawdę do czynienia 13 przesuwany w lewo o 3, co daje nam 104. 502 00:34:24,699 --> 00:34:32,530 Więc przesunięcie w lewo, widzimy tutaj, x << y jest zasadniczo x * 2 ^ r. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 to 8 tak 13 * 8 104. 504 00:34:40,139 --> 00:34:45,679 Jeśli po prostu myśleć o dwójkowy Ogólnie, jak każdej cyfry, 505 00:34:45,679 --> 00:34:49,530 jeśli zaczniemy od prawej, to jest miejsce na 1, to miejsce na 2, a następnie miejsce na 4 za. 506 00:34:49,530 --> 00:34:51,330 Tak, popychając w 0-tych z prawej, 507 00:34:51,330 --> 00:34:55,080 jesteśmy po prostu pcha rzeczy, które były w miejscu, do tego 4 na 8 miejscu, w 508 00:34:55,080 --> 00:34:57,920 i rzeczy, które były na miejscu przez 8 do 16 w miejscu. 509 00:34:57,920 --> 00:35:01,280 Każda zmiana tylko mnoży przez 2. Tak? 510 00:35:01,280 --> 00:35:05,210 [Student] Co się stanie, jeśli przesunięty o 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Jeśli przesunięty o 5 to po prostu stracić cyfr. 512 00:35:10,790 --> 00:35:15,410 Nieuchronnie, jest to samo. Jak liczby całkowite są tylko 32 bity, 513 00:35:15,410 --> 00:35:20,750 więc jeśli dodać 2 bardzo duże liczby całkowite, to po prostu nie mieści się w postaci liczby całkowitej. 514 00:35:20,750 --> 00:35:23,660 Więc to samo tutaj. Jeśli przesunięty o 5, 515 00:35:23,660 --> 00:35:25,650 my po prostu stracić tego. 516 00:35:25,650 --> 00:35:28,820 A to niby co mam na myśli przez "mniej więcej" 517 00:35:28,820 --> 00:35:37,470 gdzie jeśli przesunięcie zbyt daleko, można stracić bitów. 518 00:35:37,470 --> 00:35:39,830 >> Prawy shift będzie odwrotnie, 519 00:35:39,830 --> 00:35:43,090 gdzie mamy zamiar wpakować 0-tych od końca, 520 00:35:43,090 --> 00:35:48,400 i dla naszych celów, wypełnij 0-tych z lewej. 521 00:35:48,400 --> 00:35:52,910 Tak to robi, my po prostu odwrócenie tego, co już zrobione. 522 00:35:52,910 --> 00:35:57,780 I widzimy, że trzy 0 jest na prawo właśnie spadł, 523 00:35:57,780 --> 00:36:02,020 i popchnęły 1101 całą drogę w prawo. 524 00:36:02,020 --> 00:36:08,380 Ten sposób 104 >> 3, który jest w praktyce, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Więc teraz, tutaj, to podobny pomysł. 526 00:36:11,200 --> 00:36:18,720 Dlaczego jest to tak mniej więcej x / 2 ^ r, a nie faktycznie x / 2 ^ r? 527 00:36:18,720 --> 00:36:22,240 Bo gdybym przesunął się o 4, bym stracił 1. 528 00:36:22,240 --> 00:36:25,950 Zasadniczo, co myślisz, myśl tylko o podziale całkowitej w ogóle. 529 00:36:25,950 --> 00:36:31,070 Tak więc, tak jak 5/2 wynosi 2. To nie jest 2.5. 530 00:36:31,070 --> 00:36:35,000 To ten sam pomysł tutaj. Kiedy dzielimy przez 2, 531 00:36:35,000 --> 00:36:39,910 możemy stracić nieparzyste bity po drodze. 532 00:36:39,910 --> 00:36:43,870 Więc teraz - to jest to dla bitowe. To wszystko, co trzeba wiedzieć. 533 00:36:43,870 --> 00:36:46,340 Zapamiętaj przypadków użycia widzieliśmy w klasie, 534 00:36:46,340 --> 00:36:49,340 jak maska ​​bitów jest użyteczne dla operatorów bitowe, 535 00:36:49,340 --> 00:36:53,220 lub użyć ich do masek bitowych. 536 00:36:53,220 --> 00:36:58,620 Litery i małe litery, konwersja jest dość prototypowy przykład. 537 00:36:58,620 --> 00:37:01,640 >> Dobra, przepełnienia bufora. 538 00:37:01,640 --> 00:37:05,110 Każdy, kto pamięta, co było nie tak z tej funkcji? 539 00:37:05,110 --> 00:37:10,140 Zauważ, zadeklarowaliśmy tablicę 12 bajtów, 12 znaków, 540 00:37:10,140 --> 00:37:18,510 a następnie kopiujemy do naszego bufora 12 znaków cała kreskowych ciąg. 541 00:37:18,510 --> 00:37:25,080 Więc jaki jest problem? 542 00:37:25,080 --> 00:37:32,270 Magiczna liczba 12 powinna prawie natychmiast wyskoczy jak - dlaczego 12? 543 00:37:32,270 --> 00:37:35,050 Co zrobić, jeśli dzieje się bar więcej niż 12 znaków? 544 00:37:35,050 --> 00:37:41,200 Co zrobić, jeśli bar jest miliony znaków? 545 00:37:41,200 --> 00:37:46,010 Tutaj problem jest memcpy. Jeśli pasek jest wystarczająco długi, 546 00:37:46,010 --> 00:37:50,330 to po prostu całkowicie - "c", "c" nie obchodzi mnie, że to było tylko 12 znaków; 547 00:37:50,330 --> 00:37:53,280 "C" nie obchodzi mnie, że to nie może się zmieścić, że wiele bajtów. 548 00:37:53,280 --> 00:37:58,250 To po prostu całkowicie zastąpić char, 12 bajtów mamy przeznaczone na to, 549 00:37:58,250 --> 00:38:01,830 a wszystko to w pamięci przeszłość, że w rzeczywistości nie należą do tego bufora 550 00:38:01,830 --> 00:38:06,520 z tym, co bar ciąg jest. 551 00:38:06,520 --> 00:38:09,780 Więc to był obraz widzieliśmy w klasie 552 00:38:09,780 --> 00:38:12,220 gdzie mamy nasz stos dorastania. 553 00:38:12,220 --> 00:38:16,040 Należy stosować się do tych zdjęć i zapoznania się z nimi ponownie. 554 00:38:16,040 --> 00:38:21,260 Mamy nasz stos dorastanie, adresy pamięci zaczynają się od 0 w górę 555 00:38:21,260 --> 00:38:26,270 i rośnie w dół, aby jak 4000000000 na dole. 556 00:38:26,270 --> 00:38:28,820 Mamy tablicy 'c' gdzieś w pamięci, 557 00:38:28,820 --> 00:38:32,260 następnie mamy wskaźnik do zablokowania tuż pod nim, 558 00:38:32,260 --> 00:38:38,720 a potem mamy to zapisane w naszej wskaźniki ramki i stosu adres powrotu rutyny w naszej macierzystej. 559 00:38:38,720 --> 00:38:40,800 Pamiętaj, co adres zwrotny jest? 560 00:38:40,800 --> 00:38:45,360 To jest, gdy głównym wywołuje funkcję foo, bar wywołuje funkcję, 561 00:38:45,360 --> 00:38:48,100 nieuchronnie, bar zyski. 562 00:38:48,100 --> 00:38:52,610 Więc kiedy wraca bar, muszą wiedzieć, że wraca do foo, że nazwie go. 563 00:38:52,610 --> 00:39:01,360 Więc adres zwrotny jest adres funkcji, że ma wrócić do po opuszczeniu funkcji. 564 00:39:01,360 --> 00:39:05,830 Dlatego, że jest ważne dla atakami przepełnienia bufora, ponieważ, wygodnie, 565 00:39:05,830 --> 00:39:09,580 hakerzy to zmienić adres zwrotny. 566 00:39:09,580 --> 00:39:14,950 Zamiast iść do foo, mam zamiar wrócić tam, gdzie haker chce mi wracać. 567 00:39:14,950 --> 00:39:17,760 I wygodnie, gdzie haker często chce wrócić do 568 00:39:17,760 --> 00:39:22,400 jest początek bufora, który pierwotnie miał. 569 00:39:22,400 --> 00:39:26,170 Więc zauważyć, ponownie, little Indian. 570 00:39:26,170 --> 00:39:28,490 Urządzenie jest przykładem Mała systemu indyjskiego, 571 00:39:28,490 --> 00:39:34,140 więc całkowitą lub wskaźnik jest przechowywany z bajtów odwróconych. 572 00:39:34,140 --> 00:39:38,980 Więc tutaj widzimy - to jest? Tak. 573 00:39:38,980 --> 00:39:45,660 Widzimy Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Zapamiętaj cyfry w systemie szesnastkowym? 575 00:39:48,250 --> 00:39:50,640 Nie odwracać cyfr szesnastkowych w Little Indian, 576 00:39:50,640 --> 00:39:56,110 bo 2 cyfry szesnastkowe składają się na jeden bajt, a my odwrócenia bajtów. 577 00:39:56,110 --> 00:40:00,300 Dlatego nie należy przechowywać, jak, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 We przechowywania natomiast każdą parę 2 cyfr, zaczynając od prawej strony. 579 00:40:07,520 --> 00:40:10,880 Adres ten oznacza na adres początku 580 00:40:10,880 --> 00:40:15,190 naszego bufora, że ​​faktycznie chcieliśmy kopiować do w pierwszej kolejności. 581 00:40:15,190 --> 00:40:19,230 Dlatego, że jest przydatna, ponieważ, co oznacza, że ​​napastnik 582 00:40:19,230 --> 00:40:24,100 się stało, zamiast ciąg, który był po prostu 583 00:40:24,100 --> 00:40:27,060 nieszkodliwe ciąg jak ich nazwę czy coś, 584 00:40:27,060 --> 00:40:33,900 co, jeśli zamiast tego, że łańcuch to tylko niektóre dowolnego kodu 585 00:40:33,900 --> 00:40:38,610 że zrobił to, co chcieli zrobić? 586 00:40:38,610 --> 00:40:45,630 Więc może - nie mogę myśleć o jakiejkolwiek chłodnym kodu. 587 00:40:45,630 --> 00:40:47,780 To może być cokolwiek, choć. Każdy kod katastrofalne. 588 00:40:47,780 --> 00:40:51,440 Gdyby chcieli, mogliby po prostu zrobić coś na segmenty błędów, ale to nie miałoby sensu. 589 00:40:51,440 --> 00:40:54,950 Zwykle zrobić włamać się systemu. 590 00:40:54,950 --> 00:40:59,930 >> Ok. Biblioteka CS50. 591 00:40:59,930 --> 00:41:04,800 To jest, w zasadzie, getInt, getString, że wszystkie te funkcje przewidziane dla Ciebie. 592 00:41:04,800 --> 00:41:10,630 Więc mamy char * napis, i to jest abstrakcja, że ​​zmiótł 593 00:41:10,630 --> 00:41:12,450 w pewnym momencie w trakcie semestru. 594 00:41:12,450 --> 00:41:18,220 Pamiętaj, że łańcuch jest tylko tablica znaków. 595 00:41:18,220 --> 00:41:23,240 Więc tutaj widzimy skróconą wersję GetString. 596 00:41:23,240 --> 00:41:25,920 Należy spojrzeć wstecz na to, aby pamiętać, jak to jest w rzeczywistości realizowana. 597 00:41:25,920 --> 00:41:30,950 Kluczowe jest, zauważyć możemy uzyskać w jednym znaku naraz 598 00:41:30,950 --> 00:41:34,570 ze standardem, który jest tak samo jak my, wpisując na klawiaturze. 599 00:41:34,570 --> 00:41:37,890 Więc jeden znak na raz, a jeśli mamy zbyt wiele znaków, 600 00:41:37,890 --> 00:41:40,580 więc gdy n + 1 jest większa niż pojemności 601 00:41:40,580 --> 00:41:44,140 to musimy zwiększyć pojemność naszego bufora. 602 00:41:44,140 --> 00:41:47,780 Więc tutaj mamy podwojenie wielkości naszego bufora. 603 00:41:47,780 --> 00:41:51,840 I że wciąż dzieje, mamy wstawić znak do naszego bufora 604 00:41:51,840 --> 00:41:56,220 do czasu otrzymania nowej linii lub koniec pliku lub cokolwiek, 605 00:41:56,220 --> 00:41:59,380 w takim przypadku, że skończyliśmy z łańcucha, a następnie rzeczywistego GetString 606 00:41:59,380 --> 00:42:05,120 kurczy się pamięć, jak gdybyśmy przydzielone zbyt dużo pamięci to będzie wrócić i kurczą się nieco. 607 00:42:05,120 --> 00:42:08,830 Więc nie pokazać, ale główną ideą jest 608 00:42:08,830 --> 00:42:11,960 musi odczytać w jednej postaci w czasie. 609 00:42:11,960 --> 00:42:17,140 Nie można po prostu czytać w całej rzeczy na raz, 610 00:42:17,140 --> 00:42:19,550 ponieważ ich bufora tylko określoną wielkość. 611 00:42:19,550 --> 00:42:26,590 Więc jeśli ciąg znaków, który próbuje wstawić do bufora jest zbyt duży, to będzie przelewać. 612 00:42:26,590 --> 00:42:28,940 Więc tutaj mamy temu zapobiec tylko przez czytanie w jednym znaku 613 00:42:28,940 --> 00:42:33,750 w czasie i rośnie, gdy musimy. 614 00:42:33,750 --> 00:42:40,270 Więc getInt i inne funkcje biblioteczne CS50 mają tendencję do używania GetString 615 00:42:40,270 --> 00:42:42,310 w ich implementacji. 616 00:42:42,310 --> 00:42:45,370 Więc tu podkreślone ważne rzeczy. 617 00:42:45,370 --> 00:42:49,460 Wzywa GetString uzyskać ciąg. 618 00:42:49,460 --> 00:42:51,710 Jeśli nie udało się powrócić getString pamięci 619 00:42:51,710 --> 00:42:54,270 pamiętaj, że getString mallocs coś, więc kiedy tylko zadzwonić GetString 620 00:42:54,270 --> 00:42:57,820 nie należy (niezrozumiałe) uwolnić ten ciąg, że masz. 621 00:42:57,820 --> 00:43:02,870 Więc, jeśli nie malloc coś, wracamy INT_MAX jak tylko flagi, które, 622 00:43:02,870 --> 00:43:05,650 hej, nie byliśmy rzeczywiście w stanie uzyskać całkowitą. 623 00:43:05,650 --> 00:43:10,830 Należy zignorować cokolwiek wrócę do ciebie, lub 624 00:43:10,830 --> 00:43:15,540 nie należy traktować tego jako ważny wkład. 625 00:43:15,540 --> 00:43:21,360 Wreszcie, przy założeniu, że nie uda, możemy użyć tej specjalnej sscanf z flagą, 626 00:43:21,360 --> 00:43:23,820 co oznacza, po pierwsze dopasować liczbę całkowitą 627 00:43:23,820 --> 00:43:26,770 następnie wszystkie znaki po tej liczby całkowitej. 628 00:43:26,770 --> 00:43:29,070 Więc zauważyć, że ma on wynosić 1. 629 00:43:29,070 --> 00:43:32,940 Tak jak wielu powraca sscanf mecze, jeśli pomyślnie wykonane? 630 00:43:32,940 --> 00:43:37,010 To zwraca 1, jeśli z powodzeniem dopasować liczbę całkowitą, 631 00:43:37,010 --> 00:43:40,890 to zwraca 0, jeśli nie pasuje do liczby całkowitej, i powróci 2 632 00:43:40,890 --> 00:43:45,920 jeśli dopasowane całkowitą następnie charakterem. 633 00:43:45,920 --> 00:43:49,780 Więc zauważyć, że ponownie, jeśli pasuje do niczego, ale 1. 634 00:43:49,780 --> 00:43:55,230 Jeśli więc wprowadzone 1, 2, 3, C lub 1, 2, 3, X 635 00:43:55,230 --> 00:43:57,400 następnie 1, 2, 3 będą przechowywane w całkowitej, 636 00:43:57,400 --> 00:43:59,620 X będą przechowywane w postaci, 637 00:43:59,620 --> 00:44:06,410 sscanf zwróci 2, a my ponownie, ponieważ chcemy tylko liczbę całkowitą. 638 00:44:06,410 --> 00:44:09,810 >> Szybko dmuchanie przez HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 Hypertext Markup Language jest struktura i semantyka z sieci. 640 00:44:15,340 --> 00:44:19,960 Oto przykład z wykładu, gdzie mamy znaczniki HTML. 641 00:44:19,960 --> 00:44:22,110 Mamy tagi głowy, znaczniki ciała, 642 00:44:22,110 --> 00:44:27,770 mamy przykłady pustych znaczników, w których faktycznie nie mają początku i blisko znacznika, 643 00:44:27,770 --> 00:44:30,820 musimy po prostu link i zdjęcie. 644 00:44:30,820 --> 00:44:38,480 Nie ma zamykająca znacznik obrazu, jest tylko jeden tag, który dokonuje wszystkiego tag musi zrobić. 645 00:44:38,480 --> 00:44:41,950 Link jest przykładem, zobaczymy, jak link do CSS 646 00:44:41,950 --> 00:44:45,910 Skrypt jest przykładem tego, jak można połączyć z zewnętrznym JavaScript. 647 00:44:45,910 --> 00:44:53,100 Jest to dość proste, i pamiętaj, HTML nie jest językiem programowania. 648 00:44:53,100 --> 00:44:58,250 Tutaj należy pamiętać, w jaki sposób zdefiniować formularz lub przynajmniej, co to zrobi? 649 00:44:58,250 --> 00:45:01,740 Taka forma ma działania i metody. 650 00:45:01,740 --> 00:45:06,210 Metody będzie zawsze tylko zobaczyć to GET i POST. 651 00:45:06,210 --> 00:45:09,040 Więc jest wersja, gdzie sprawa zostanie umieszczona w adresie URL. 652 00:45:09,040 --> 00:45:11,680 POST, gdzie nie jest umieścić w adresie URL. 653 00:45:11,680 --> 00:45:18,520 Zamiast tego, wszystkie dane z formularza dodaje bardziej ukryty w żądaniu HTTP. 654 00:45:18,520 --> 00:45:22,390 Więc, gdzie działanie określa idzie żądania HTTP. 655 00:45:22,390 --> 00:45:27,490 Gdzie to będzie to google.com / search. 656 00:45:27,490 --> 00:45:32,890 Metoda. Zapamiętaj różnice między GET i POST, 657 00:45:32,890 --> 00:45:37,200 i, po prostu powiedzieć, na przykład, jeśli chcesz, aby zakładki coś. 658 00:45:37,200 --> 00:45:40,660 Nigdy nie będzie w stanie zakładki URL POST 659 00:45:40,660 --> 00:45:44,970 ponieważ dane nie są zawarte w adresie URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, teraz, jest HyperText Transfer Protocol. 661 00:45:49,790 --> 00:45:54,080 HyperText Transfer Protocol, można się spodziewać, że do transferu 662 00:45:54,080 --> 00:45:57,710 Hypertext Markup Language, i to robi. 663 00:45:57,710 --> 00:46:00,170 Ale także przenosi żadnych obrazów można znaleźć w internecie, 664 00:46:00,170 --> 00:46:05,400 wszelkie pliki do pobrania wprowadzone początku jako żądania HTTP. 665 00:46:05,400 --> 00:46:10,350 Więc HTTP jest tylko językiem World Wide Web. 666 00:46:10,350 --> 00:46:15,610 I tutaj trzeba rozpoznać ten rodzaj żądania HTTP. 667 00:46:15,610 --> 00:46:19,300 Tutaj HTTP/1.1 na stronie po prostu mówi, że jest to wersja 668 00:46:19,300 --> 00:46:21,570 protokołu używam. 669 00:46:21,570 --> 00:46:25,770 To dość dużo zawsze będzie HTTP/1.1, jak będziesz go zobaczyć. 670 00:46:25,770 --> 00:46:30,110 Następnie widzimy, że jest to GET, POST jest alternatywa, że ​​można zobaczyć. 671 00:46:30,110 --> 00:46:40,790 I adres URL, który starałem się wizyta www.google.com/search?q = bla, bla, bla. 672 00:46:40,790 --> 00:46:44,240 Więc pamiętaj, że to znak zapytania q = bla bla bla, 673 00:46:44,240 --> 00:46:49,040 jest to rodzaj rzeczy, który jest przedstawiony przez postać. 674 00:46:49,040 --> 00:46:51,830 Odpowiedź może wrócić do mnie będzie wyglądać mniej więcej tak. 675 00:46:51,830 --> 00:46:54,050 I znowu, wychodząc z protokołem, który zamierza się, że 676 00:46:54,050 --> 00:46:59,190 następnie kod stanu. Tutaj jest to 200 OK. 677 00:46:59,190 --> 00:47:05,060 I w końcu, strona internetowa, która faktycznie poprosił nastąpi. 678 00:47:05,060 --> 00:47:08,210 Możliwe, kod statusu można zobaczyć, a trzeba wiedzieć, kilka z nich. 679 00:47:08,210 --> 00:47:12,770 200 OK, masz prawdopodobnie widział. 680 00:47:12,770 --> 00:47:17,830 403 Forbidden, 404 Not Found, 500 Internal Server Error 681 00:47:17,830 --> 00:47:22,140 jest zazwyczaj, jeśli przejdziesz do strony internetowej, a coś jest uszkodzone lub ich awarii kodu PHP, 682 00:47:22,140 --> 00:47:24,930 podczas gdy w urządzeniu mamy tak duże pole pomarańczowy 683 00:47:24,930 --> 00:47:27,830 że przychodzi i mówi, jak coś jest nie tak, ten kod nie działa 684 00:47:27,830 --> 00:47:30,380 czy ta funkcja jest złe. 685 00:47:30,380 --> 00:47:33,230 Zazwyczaj strony internetowe nie chcą Państwo wiedzieć, jakie funkcje są rzeczywiście złe, 686 00:47:33,230 --> 00:47:37,880 więc zamiast tego po prostu dać 500 wewnętrzne błędy serwera. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP jest 1 warstwa pod HTTP. 688 00:47:43,050 --> 00:47:47,550 Pamiętaj, że nie ma Internetu poza World Wide Web. 689 00:47:47,550 --> 00:47:52,270 Podobnie jak w przypadku grania w gry sieciowe, które nie przechodzi przez protokół HTTP, 690 00:47:52,270 --> 00:47:55,740 to będzie poprzez różne - to jeszcze za pomocą Internetu, 691 00:47:55,740 --> 00:47:58,900 ale nie używa protokołu HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP jest tylko jeden przykład oparty na protokole TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP dosłownie oznacza Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Każdy komputer ma adres IP, są te rzeczy, 4-cyfrowy 695 00:48:11,500 --> 00:48:16,510 jak 192.168.2.1, czy cokolwiek, to wydaje się być lokalna. 696 00:48:16,510 --> 00:48:23,390 Ale to jest wzór adresu IP. 697 00:48:23,390 --> 00:48:29,060 Więc DNS, Domain Name Service, 698 00:48:29,060 --> 00:48:33,410 to co przekłada rzeczy jak google.com do faktycznego adresu IP. 699 00:48:33,410 --> 00:48:37,700 Więc jeśli wpiszesz ten adres IP do adresu URL, 700 00:48:37,700 --> 00:48:40,850 że przyniesie ci to Google, ale raczej nie pamiętać tych rzeczy. 701 00:48:40,850 --> 00:48:45,470 Masz tendencję do zapamiętania google.com zamiast. 702 00:48:45,470 --> 00:48:51,560 Ostatnią rzeczą, mamy to porty, w których jest to część TCP IP. 703 00:48:51,560 --> 00:48:54,880 TCP nie więcej. Pomyśl o tym, jak, masz swój bieg przeglądarka. 704 00:48:54,880 --> 00:48:58,670 Może masz jakieś działającej aplikacji e-mail; 705 00:48:58,670 --> 00:49:02,150 może masz jakiś inny program, który używa programu Internet. 706 00:49:02,150 --> 00:49:05,090 Wszyscy muszą mieć dostęp do Internetu, 707 00:49:05,090 --> 00:49:08,100 ale komputer ma tylko 1 kartę WiFi lub cokolwiek. 708 00:49:08,100 --> 00:49:10,780 Więc porty są sposobem, że jesteśmy w stanie podzielić się 709 00:49:10,780 --> 00:49:13,550 jak te aplikacje są w stanie korzystać z Internetu. 710 00:49:13,550 --> 00:49:17,230 Każdy wniosek otrzymuje 1 konkretny port, który może nasłuchiwać, 711 00:49:17,230 --> 00:49:19,670 i domyślnie HTTP korzysta z portu 80. 712 00:49:19,670 --> 00:49:22,410 Niektóre usługi e-mail, korzystać z 25. 713 00:49:22,410 --> 00:49:24,490 Te niskie numerach wydają się być zarezerwowane. 714 00:49:24,490 --> 00:49:29,270 Jesteś zwykle w stanie uzyskać wyższe numerach te dla siebie. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 My style stron internetowych z CSS, a nie HTML. 717 00:49:36,030 --> 00:49:38,440 Są 3 miejsca, które można umieścić swój CSS. 718 00:49:38,440 --> 00:49:46,300 To może być w jednej linii, pomiędzy znacznikami stylu, całkowicie lub w osobnym pliku, a następnie połączone w. 719 00:49:46,300 --> 00:49:48,470 I tu jest właśnie przykład CSS. 720 00:49:48,470 --> 00:49:50,450 Należy uznać ten wzór, 721 00:49:50,450 --> 00:49:54,310 gdzie Pierwszy przykład mamy dopasowanie znacznik ciała 722 00:49:54,310 --> 00:49:56,680 i tutaj mamy do centrowania znacznika body. 723 00:49:56,680 --> 00:50:00,420 Drugi przykład, że są dopasowane rzeczy 724 00:50:00,420 --> 00:50:04,740 o ID stopki, a my stosowania niektórych stylów do tego. 725 00:50:04,740 --> 00:50:07,310 Zauważ, że ID stopki wyrównuje tekst do lewej, 726 00:50:07,310 --> 00:50:09,840 natomiast centrum ciała wyrównuje tekst. 727 00:50:09,840 --> 00:50:13,180 Stopka jest wewnątrz ciała. 728 00:50:13,180 --> 00:50:16,470 To będzie, zamiast tego, text-align w lewo, chociaż ciało mówi centrum text-align. 729 00:50:16,470 --> 00:50:18,880 Jest cała część kaskadowy z niego. 730 00:50:18,880 --> 00:50:22,110 Można mieć - można określić style dla ciała, 731 00:50:22,110 --> 00:50:25,320 i rzeczy w organizmie można określić bardziej szczegółowe style, 732 00:50:25,320 --> 00:50:28,160 i wszystko działa zgodnie z oczekiwaniami. 733 00:50:28,160 --> 00:50:34,420 Specyfikatory CSS bardziej szczegółowe mają pierwszeństwo. 734 00:50:34,420 --> 00:50:46,140 Myślę, że to jest to. 735 00:50:46,140 --> 00:50:49,260 >> [Ali Nahm] Witam wszystkich. Gdybym tylko mógł dostać swoją uwagę. 736 00:50:49,260 --> 00:50:53,990 Jestem Ali i mam zamiar przejść przez PHP i SQL naprawdę szybko. 737 00:50:53,990 --> 00:51:00,310 Więc możemy zacząć. PHP to skrót od PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 I jak powinna wszyscy wiecie, że to język skryptów po stronie serwera, 739 00:51:03,730 --> 00:51:06,800 i używamy go do tylnego końca stron internetowych, 740 00:51:06,800 --> 00:51:12,540 i jak to robi wiele obliczeń, części zza kulis. 741 00:51:12,540 --> 00:51:17,510 Składnia. To nie tak, C, niespodzianka, niespodzianka. 742 00:51:17,510 --> 00:51:22,060 Zawsze ma się rozpocząć, jeśli widzisz, - Nie mogę iść do przodu. 743 00:51:22,060 --> 00:51:31,340 Widać potrzebne są nowe rodzaje szelki i to trzeba także PHP?. 744 00:51:31,340 --> 00:51:35,780 Że zawsze, jak masz do ramki tekstu PHP, kod PHP. 745 00:51:35,780 --> 00:51:39,180 Więc to nie może być tak, jak C, w którym rodzaj umieścić go na pierwszym. 746 00:51:39,180 --> 00:51:42,290 Trzeba zawsze otaczają go. 747 00:51:42,290 --> 00:51:47,610 A teraz, głównym składnia jest, że wszystkie zmienne muszą zaczynać się od znaku $. 748 00:51:47,610 --> 00:51:49,490 Musisz to zrobić, gdy jesteś ich definiowania, co musisz zrobić, to 749 00:51:49,490 --> 00:51:51,860 jeśli masz na myśli do nich później. 750 00:51:51,860 --> 00:51:56,510 Zawsze trzeba to $. To Twój nowy najlepszy przyjaciel, bardzo dużo. 751 00:51:56,510 --> 00:52:01,690 Nie - w przeciwieństwie do C, nie trzeba umieścić co to zmienna typu jest. 752 00:52:01,690 --> 00:52:04,940 Tak więc, podczas gdy ty potrzebujesz $, nie trzeba umieścić, jak, 753 00:52:04,940 --> 00:52:09,470 int x lub ciąg r, etcetera, etcetera. 754 00:52:09,470 --> 00:52:11,490 Tak niewielka różnica. 755 00:52:11,490 --> 00:52:15,590 W związku z tym oznacza, że ​​PHP typu słabo. 756 00:52:15,590 --> 00:52:19,310 PHP jest językiem typu słabo, i to słabo wpisane zmienne. 757 00:52:19,310 --> 00:52:24,020 Innymi słowy, oznacza to, że można przełączać się pomiędzy różnymi rodzajami typów zmiennych. 758 00:52:24,020 --> 00:52:27,230 Możesz zapisać numer 1 jako int, 759 00:52:27,230 --> 00:52:29,650 Można także zapisać jako ciąg znaków, i można przechowywać go jako pływaka, 760 00:52:29,650 --> 00:52:33,550 i wszystko będzie, że numer 1. 761 00:52:33,550 --> 00:52:36,080 Nawet jeśli jesteś przechowywania go w różnych formach, 762 00:52:36,080 --> 00:52:39,120 to nadal - zmienne typy wciąż trzyma w końcu. 763 00:52:39,120 --> 00:52:41,540 Więc jeśli spojrzeć tutaj, jeśli pamiętasz z pset 7, 764 00:52:41,540 --> 00:52:43,500 wielu z was zapewne miał problemy z tym. 765 00:52:43,500 --> 00:52:47,280 Dwa znaki równości, 3 znaki równości, 4 znaki równości. 766 00:52:47,280 --> 00:52:49,990 Dobra, nie ma 4 znaki równości, ale są 2 i 3. 767 00:52:49,990 --> 00:52:53,320 Są 2 znaki równości, aby sprawdzić wartości. 768 00:52:53,320 --> 00:52:55,830 Można go sprawdzić, różnych typów. 769 00:52:55,830 --> 00:52:58,770 Więc jeśli można zobaczyć w pierwszym przykładzie, 770 00:52:58,770 --> 00:53:02,210 Mam num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Więc int i ciąg są zarówno technicznie, 1, 772 00:53:06,710 --> 00:53:10,790 ale są różne rodzaje. Ale dla podwójnych równych, będzie to nadal przechodzą. 773 00:53:10,790 --> 00:53:15,510 Jednakże dla trzyosobowych równych, sprawdza wartość, jak również różne rodzaje. 774 00:53:15,510 --> 00:53:18,760 Oznacza to, że to nie przejdzie w tym drugim przypadku, tutaj, 775 00:53:18,760 --> 00:53:22,350 gdzie używasz 3 znaki równości zamiast. 776 00:53:22,350 --> 00:53:26,590 Więc to jest zasadnicza różnica, że ​​należy wszystko pokazywali teraz. 777 00:53:26,590 --> 00:53:31,570 >> Łączenie String to kolejne istotne, co można użyć w PHP. 778 00:53:31,570 --> 00:53:34,080 To w zasadzie tylko to przydatny notacja kropki, 779 00:53:34,080 --> 00:53:36,230 i to w jaki sposób można powiązać ze sobą łańcuchy. 780 00:53:36,230 --> 00:53:40,800 Więc jeśli masz kota i masz psa i chcesz umieścić dwa ciągi razem, 781 00:53:40,800 --> 00:53:44,080 można wykorzystać okres, i że niby jak to działa. 782 00:53:44,080 --> 00:53:46,660 Możesz też po prostu umieścić je obok siebie, 783 00:53:46,660 --> 00:53:49,030 jak widać tutaj, w dolnej przykład 784 00:53:49,030 --> 00:53:51,610 gdzie mam echo ciąg 1, kosmiczny ciąg 2. 785 00:53:51,610 --> 00:53:56,930 PHP będzie wiedzieć, aby zastąpić je jako takie. 786 00:53:56,930 --> 00:53:59,780 Matryce. Teraz, w PHP, są 2 rodzaje tablic. 787 00:53:59,780 --> 00:54:03,180 Możesz mieć regularne tablice, a także można mieć tablice asocjacyjne, 788 00:54:03,180 --> 00:54:06,040 i mamy zamiar przejść przez nich teraz. 789 00:54:06,040 --> 00:54:08,280 Regularne tablice są właśnie tego w C, 790 00:54:08,280 --> 00:54:11,240 i tak masz indeksy, które są numerowane. 791 00:54:11,240 --> 00:54:13,160 Teraz mamy tylko zamiar utworzyć i umieścić - 792 00:54:13,160 --> 00:54:15,500 tak to jest jak tworzymy pustą tablicę, a następnie jedziemy do 793 00:54:15,500 --> 00:54:17,310 umieścić w indeksem 0.. 794 00:54:17,310 --> 00:54:19,200 Zamierzamy umieścić numer 6, wartość 6. 795 00:54:19,200 --> 00:54:21,500 Widać to na dole tutaj. 796 00:54:21,500 --> 00:54:24,240 Where's - pod indeksem 1 zamierzamy umieścić wartość 4, 797 00:54:24,240 --> 00:54:26,720 i tak widać jest 6, nie 4, 798 00:54:26,720 --> 00:54:29,160 a potem, kiedy drukujesz rzeczy, 799 00:54:29,160 --> 00:54:33,550 gdy staramy i wydrukować wartość przechowywaną pod indeksem 0, 800 00:54:33,550 --> 00:54:36,900 potem zobaczymy wartość 6 jest drukowane. Fajne? 801 00:54:36,900 --> 00:54:40,160 Więc to jest regularne tablice dla Ciebie. 802 00:54:40,160 --> 00:54:42,750 Inny sposób można również dodawać rzeczy do regularnych tablic teraz 803 00:54:42,750 --> 00:54:44,780 to można po prostu dopisać je na końcu. 804 00:54:44,780 --> 00:54:47,240 Oznacza to, że nie trzeba, aby określić konkretny indeks. 805 00:54:47,240 --> 00:54:51,000 Możesz zobaczyć liczbę, a następnie w nawiasach kwadratowych nie ma indeks określony. 806 00:54:51,000 --> 00:54:56,270 I będzie to wiedzieć - PHP wiedzieć, aby po prostu dodać go do końca listy, kolejnym wolnym miejscu. 807 00:54:56,270 --> 00:54:59,190 Więc można zobaczyć 1 tam w tym 0 miejscu, 808 00:54:59,190 --> 00:55:02,690 2 poszedł tam na pierwszym miejscu. 809 00:55:02,690 --> 00:55:04,690 3 idzie - dodaje również tam. 810 00:55:04,690 --> 00:55:06,720 Tak, że niby ma sens. Jesteś po prostu stale dodając go, 811 00:55:06,720 --> 00:55:09,360 i wtedy, gdy jesteśmy echem indeks numer 1, 812 00:55:09,360 --> 00:55:13,080 będzie drukować wartość 2. 813 00:55:13,080 --> 00:55:16,800 >> Następnie mamy tablice, które są Tablice asocjacyjne. 814 00:55:16,800 --> 00:55:19,370 Tablice asocjacyjne, zamiast wskaźników liczbowych, 815 00:55:19,370 --> 00:55:23,630 to, co robią jest, mają indeksy, które są przez ciąg. 816 00:55:23,630 --> 00:55:25,670 Możesz zobaczyć, zamiast - Pozbyłem się wszystkich tych wskaźników numerycznych, 817 00:55:25,670 --> 00:55:32,140 i teraz to klucz1, klucz2, key3, a oni w cudzysłów oznaczać, że są wszystkie ciągi. 818 00:55:32,140 --> 00:55:34,470 Tak więc możemy mieć tego przykład. 819 00:55:34,470 --> 00:55:38,790 Przykładem tego jest to, że mamy tf, i to jest nazwa indeksu. 820 00:55:38,790 --> 00:55:42,030 Zamierzamy umieścić "Ali" jako nazwa, w indeksie, kalorie spożywane, 821 00:55:42,030 --> 00:55:47,640 możemy umieścić int tym razem zamiast łańcucha, 822 00:55:47,640 --> 00:55:52,240 a następnie w m.in. indeksu, możemy umieścić całą tablicę w jej wnętrzu. 823 00:55:52,240 --> 00:55:55,490 Więc to jest rodzaj - to podobna koncepcja jak mieliśmy 824 00:55:55,490 --> 00:55:58,930 indeksów z numerami, ale teraz możemy zmienić indeksów wokół 825 00:55:58,930 --> 00:56:03,890 mieć je jako ciągi znaków zamiast. 826 00:56:03,890 --> 00:56:06,070 Możesz też to zrobić, poza tym po prostu robi to indywidualnie, 827 00:56:06,070 --> 00:56:09,400 możesz robić to wszystko w jednym kawałku. Więc widać, że TF z tej tablicy, 828 00:56:09,400 --> 00:56:13,350 a następnie ustawiamy je wszystkie w jeden olbrzymi kwadratowy zestaw wspornika. 829 00:56:13,350 --> 00:56:15,220 Tak, że można przyspieszyć. 830 00:56:15,220 --> 00:56:19,730 To jest bardziej stylistycznego wyboru niż nie. 831 00:56:19,730 --> 00:56:21,550 Mamy też pętle. 832 00:56:21,550 --> 00:56:26,020 W C mamy pętle, które działają w ten sposób. 833 00:56:26,020 --> 00:56:29,690 Mieliśmy naszą tablicę i poszliśmy od indeksu 0 do końca listy, 834 00:56:29,690 --> 00:56:31,740 i to wszystko wydrukować, prawda? 835 00:56:31,740 --> 00:56:33,880 Wyjątkiem jest problem, dla tablic asocjacyjnych, 836 00:56:33,880 --> 00:56:36,610 nie muszą wiedzieć, te wskaźniki liczbowe 837 00:56:36,610 --> 00:56:39,610 bo teraz mamy indeksy łańcuchowe. 838 00:56:39,610 --> 00:56:44,800 Teraz używamy pętli foreach, które znowu, mam nadzieję, że użyte w pset 7. 839 00:56:44,800 --> 00:56:48,930 Pętle foreach będzie po prostu wiem, każdy element listy. 840 00:56:48,930 --> 00:56:52,450 I to nie musi wiedzieć dokładnie indeks liczbowy, że masz. 841 00:56:52,450 --> 00:56:56,490 Więc trzeba składni foreach, więc foreach, umieścić tablicę. 842 00:56:56,490 --> 00:57:00,430 Więc moja tablica nazywa pset, a następnie jako, słowo jako, 843 00:57:00,430 --> 00:57:04,530 a następnie umieścić tę zmienną tymczasową lokalnej, że masz zamiar używać 844 00:57:04,530 --> 00:57:10,690 tylko dla konkretnej rzeczy, która się dzieje posiadać specyficzne - 845 00:57:10,690 --> 00:57:14,770 jedno wystąpienie lub jedna część tablicy. 846 00:57:14,770 --> 00:57:18,350 Pset num będzie posiadać 1, a następnie być może będzie posiadać numer 6, 847 00:57:18,350 --> 00:57:20,410 a następnie będzie ona posiadać numer 2. 848 00:57:20,410 --> 00:57:26,630 Ale to na pewno przejść przez każdą pojedynczą wartość, która jest w tej tablicy. 849 00:57:26,630 --> 00:57:30,530 Przydatne funkcje, które powinieneś wiedzieć w PHP są wymagają, 850 00:57:30,530 --> 00:57:35,880 tak, daje pewność, że jesteś w tym pewne pliki, echo zjazd, pusty. 851 00:57:35,880 --> 00:57:40,490 Gorąco polecam spojrzeć na pset 7 i patrzeć na te funkcje. 852 00:57:40,490 --> 00:57:42,810 Może trzeba znać tych, 853 00:57:42,810 --> 00:57:47,060 więc na pewno wiesz, co dokładnie ci są robią. 854 00:57:47,060 --> 00:57:50,080 >> A teraz mamy zamiar przejść przez zakres naprawdę szybko. 855 00:57:50,080 --> 00:57:53,490 W zakresie, w PHP jest trochę funky rzeczy, w przeciwieństwie do C, 856 00:57:53,490 --> 00:57:56,170 i tak po prostu się przejść przez to szybko. 857 00:57:56,170 --> 00:57:58,930 Więc powiedzmy, że zaczynamy w tym strzałki, które mamy tam. 858 00:57:58,930 --> 00:58:02,900 I mamy zamiar zacząć $ i. Więc zmienna "i" będzie 0, 859 00:58:02,900 --> 00:58:06,730 a my po prostu się zatrzymać drukowanie jej w tym dużym białym polu tam. 860 00:58:06,730 --> 00:58:09,220 Zamierzamy rozpocząć i0, a następnie jedziemy do jej echo. 861 00:58:09,220 --> 00:58:12,670 Więc jest 0. 862 00:58:12,670 --> 00:58:15,210 A potem będziemy zwiększać go do pętli, 863 00:58:15,210 --> 00:58:17,810 i to będzie wartość 1. 864 00:58:17,810 --> 00:58:20,070 Jednym z nich jest mniejsza niż 3, więc to będzie przechodzić przez które do pętli, 865 00:58:20,070 --> 00:58:23,230 a następnie jedziemy zobaczyć to ponownie drukowane. 866 00:58:23,230 --> 00:58:25,520 Zamierzamy zwiększyć go ponownie do 2, 867 00:58:25,520 --> 00:58:29,860 i 2 jest mniejsza niż 3, więc ono przechodzi przez pętlę, a my go wydrukować 2. 868 00:58:29,860 --> 00:58:35,100 Wtedy będziesz pamiętać, że 3 jest nie mniejsza niż 3, więc będziemy wyrwać się z pętli. 869 00:58:35,100 --> 00:58:40,050 Więc teraz mamy odszedł, a następnie będziemy iść do aFunction. 870 00:58:40,050 --> 00:58:45,010 Ok. Więc trzeba pamiętać, że ta zmienna, że ​​stworzyliśmy, 871 00:58:45,010 --> 00:58:48,270 Zmienna "i", nie jest lokalnym zakresie. 872 00:58:48,270 --> 00:58:50,280 To oznacza, że ​​nie jest do pętli lokalnej, 873 00:58:50,280 --> 00:58:58,060 i że nadal możemy zmienna dostęp i zmienić później, i to nadal będzie obowiązywać. 874 00:58:58,060 --> 00:59:02,160 Więc jeśli się do funkcji teraz, zobaczysz, że my też użyć zmiennej 'i', 875 00:59:02,160 --> 00:59:05,320 i zamierzamy zwiększyć "i" + +. 876 00:59:05,320 --> 00:59:09,410 Można by pomyśleć, w pierwszym, w oparciu o C, że jest to kopia zmiennej "i". 877 00:59:09,410 --> 00:59:12,830 To zupełnie inna sprawa, co jest poprawne. 878 00:59:12,830 --> 00:59:16,560 Więc kiedy go wydrukować, będziemy drukować "i" + +, który będzie wydrukować, że 4, 879 00:59:16,560 --> 00:59:19,640 a następnie jedziemy do - przepraszam. 880 00:59:19,640 --> 00:59:22,030 Następnie idziemy do końca z tej funkcji, 881 00:59:22,030 --> 00:59:24,820 i mamy zamiar być w przypadku, gdy strzałka jest teraz. 882 00:59:24,820 --> 00:59:29,190 Oznacza to, że to jednak, mimo że funkcja zmienił wartość "I", 883 00:59:29,190 --> 00:59:32,620 nie zmieniła się poza funkcji 884 00:59:32,620 --> 00:59:35,060 ponieważ funkcja ma osobny zakres. 885 00:59:35,060 --> 00:59:38,960 Oznacza to, że gdy echo "i", to nie zmienia się w zakresie funkcji 886 00:59:38,960 --> 00:59:43,660 i tak to mamy zamiar ponownie wydrukować 3. 887 00:59:43,660 --> 00:59:47,520 Różne rzeczy o zakresie w PHP niż w C. 888 00:59:47,520 --> 00:59:51,130 >> Teraz w PHP i HTML. 889 00:59:51,130 --> 00:59:53,510 PHP jest używany do stron internetowych dynamiczny. 890 00:59:53,510 --> 00:59:58,660 To sprawia, że ​​rzeczy trochę inaczej. 891 00:59:58,660 --> 01:00:02,090 Mamy to różni się od HTML. 892 01:00:02,090 --> 01:00:05,230 Z HTML, zawsze wystarczy samo jak statyczne, jak Rob pokazał, 893 01:00:05,230 --> 01:00:09,370 mając na uwadze, PHP, możesz zmienić rzeczy na podstawie ich użytkownika. 894 01:00:09,370 --> 01:00:11,830 Więc jeśli mam to, ja, "Jesteś zalogowany jako -", a następnie nazwa, 895 01:00:11,830 --> 01:00:14,420 i może zmienić nazwę. Więc teraz na imię Józef, 896 01:00:14,420 --> 01:00:18,880 i ma "o mnie", ale to mogę też zmienić nazwę, aby Tommy. 897 01:00:18,880 --> 01:00:21,700 I to byłoby co innego. 898 01:00:21,700 --> 01:00:23,840 Tak więc możemy zmienić różne rzeczy o nim, 899 01:00:23,840 --> 01:00:27,070 i pokaże inną zawartość na podstawie nazwy. 900 01:00:27,070 --> 01:00:31,430 Więc PHP może trochę zmienić to, co dzieje się w Twojej witrynie. 901 01:00:31,430 --> 01:00:33,540 Same here. Wciąż pamiętać, że mają one różne treści, 902 01:00:33,540 --> 01:00:38,870 nawet jeśli są technicznie nadal dostępu do tej samej stronie internetowej na powierzchni. 903 01:00:38,870 --> 01:00:43,450 Generowania kodu HTML. Są to 2 różne sposoby, że można to zrobić. 904 01:00:43,450 --> 01:00:48,980 Więc idziemy przez to teraz. Pierwszy sposób jest, trzeba - tak, przepraszam. 905 01:00:48,980 --> 01:00:51,150 Więc po prostu trzeba się z regularnych na pętli w PHP, 906 01:00:51,150 --> 01:00:56,270 a następnie echo w PHP i echo z HTML. 907 01:00:56,270 --> 01:00:58,720 Za pomocą tego, co Rob pokazał ci skryptu HTML 908 01:00:58,720 --> 01:01:04,030 a następnie za pomocą PHP do drukowania tylko wydrukować go na stronie internetowej. 909 01:01:04,030 --> 01:01:09,520 Alternatywnym sposobem jest zrobić to tak, jakby oddzielić PHP i HTML. 910 01:01:09,520 --> 01:01:11,940 Więc można mieć linię PHP, który rozpoczyna na pętli, 911 01:01:11,940 --> 01:01:16,020 to możesz mieć linię HTML w oddzielnej rzeczy, 912 01:01:16,020 --> 01:01:19,700 , a następnie w końcu pętli, znowu, z PHP. 913 01:01:19,700 --> 01:01:21,800 Więc jest to rodzaj oddzielenia go. 914 01:01:21,800 --> 01:01:24,020 Po lewej stronie, można się, że masz wszystko - 915 01:01:24,020 --> 01:01:26,360 to tylko 1 kawałek PHP. 916 01:01:26,360 --> 01:01:28,510 Po prawej stronie można zobaczyć, że masz linię PHP, 917 01:01:28,510 --> 01:01:32,540 masz linię HTML i masz linię PHP ponownie. 918 01:01:32,540 --> 01:01:36,870 Więc oddzielenie go w to, co robią. 919 01:01:36,870 --> 01:01:39,330 I będziesz pamiętać, że tak czy inaczej, dla jednego z nich, 920 01:01:39,330 --> 01:01:41,980 nadal wydrukować obraz, wizerunek, obraz, 921 01:01:41,980 --> 01:01:44,540 HTML tak, że wciąż jest drukowany w taki sam sposób. 922 01:01:44,540 --> 01:01:49,870 A potem będziesz jeszcze zobaczyć 3 obrazy wyświetlane na swojej stronie. 923 01:01:49,870 --> 01:01:52,820 Więc jest to 2 różne sposoby robienia tego samego. 924 01:01:52,820 --> 01:01:55,060 >> Teraz mamy formularze i wnioski. Jak Rob pokazał ci, 925 01:01:55,060 --> 01:01:59,400 istnieją formy HTML, a my po prostu wiatr przez to. 926 01:01:59,400 --> 01:02:02,040 Masz akcję i masz sposób, a działania 927 01:02:02,040 --> 01:02:04,350 rodzaj pokazuje gdzie masz zamiar wysłać go, a to, czy metoda 928 01:02:04,350 --> 01:02:06,960 to będzie GET lub POST. 929 01:02:06,960 --> 01:02:11,220 I żądanie GET, jak Rob powiedział, to oznacza, że ​​masz zamiar umieścić go w formie 930 01:02:11,220 --> 01:02:15,760 i zobaczysz go jako adres URL, natomiast żądanie POST nie będzie widać w adresie URL. 931 01:02:15,760 --> 01:02:17,840 Tak niewielka różnica. 932 01:02:17,840 --> 01:02:19,950 Jednak jedna rzecz, która jest podobna sprawa 933 01:02:19,950 --> 01:02:22,560 jest to, że POST i GET są równie niebezpieczne. 934 01:02:22,560 --> 01:02:26,430 Więc można pomyśleć, że tylko dlatego, że nie widać go w URL, 935 01:02:26,430 --> 01:02:28,790 co oznacza, że ​​PO jest bardziej bezpieczny, 936 01:02:28,790 --> 01:02:34,420 ale nadal można zobaczyć to w twoich ciasteczek w informacji, że jesteś wysyłającego. 937 01:02:34,420 --> 01:02:38,260 Więc nie sądzę, że o jeden lub drugi. 938 01:02:38,260 --> 01:02:42,160 Inną rzeczą, aby pamiętać, jest to, że również zmienne sekcji. 939 01:02:42,160 --> 01:02:45,850 Chłopaki używane to w pset 7, aby uzyskać identyfikator użytkownika. 940 01:02:45,850 --> 01:02:48,550 Co się stało, że możesz użyć tej tablicy asocjacyjnej, 941 01:02:48,550 --> 01:02:53,310 $ _SESSION, a następnie jesteś w stanie uzyskać dostęp do różnych rzeczy 942 01:02:53,310 --> 01:02:57,720 i przechowywać różne rzeczy w poprzek strony. 943 01:02:57,720 --> 01:03:00,750 >> Ostatnia rzeczą jest to, że mamy SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 i to jest język programowania do zarządzania bazami danych. 945 01:03:04,360 --> 01:03:08,220 Co dokładnie są bazy danych? Są kolekcje stołów, 946 01:03:08,220 --> 01:03:10,630 i każda tabela może mieć podobne rodzaje obiektów. 947 01:03:10,630 --> 01:03:14,990 Więc mieliśmy tabelę użytkowników w finansach pset. 948 01:03:14,990 --> 01:03:20,610 I dlaczego są one przydatne? Ponieważ jest to sposób na stałe przechowywanie informacji. 949 01:03:20,610 --> 01:03:22,840 Jest to sposób na śledzenie i zarządzanie rzeczy rzeczy 950 01:03:22,840 --> 01:03:25,890 i rzeczywiście widząc go na różnych stronach i śledzenie. 951 01:03:25,890 --> 01:03:29,930 Natomiast jeśli po prostu zapisać je w tym jednym momencie natychmiastowym 952 01:03:29,930 --> 01:03:33,720 a następnie użyć go później, nie będzie w stanie uzyskać dostęp do wszystkiego, co masz zapisane. 953 01:03:33,720 --> 01:03:37,660 Mamy 4 główne rzeczy, które możemy użyć do poleceń SQL. 954 01:03:37,660 --> 01:03:40,190 Mamy SELECT, INSERT, DELETE i aktualizacji. 955 01:03:40,190 --> 01:03:42,880 To są bardzo ważne dla wy wiedzieć do quizu. 956 01:03:42,880 --> 01:03:45,990 >> Będziemy szybko przejść wybierz teraz. 957 01:03:45,990 --> 01:03:48,540 W zasadzie masz wybór wierszy z bazy danych. 958 01:03:48,540 --> 01:03:52,400 Więc jeśli masz, tu - 959 01:03:52,400 --> 01:03:56,740 mamy te 2 różne rzeczy, a my chcemy, aby wybrać z tabeli klas 960 01:03:56,740 --> 01:04:01,480 gdzie niesamowite - gdzie w kolumnie niesamowite wartość to 1. 961 01:04:01,480 --> 01:04:04,460 Więc można zobaczyć tutaj, mamy te 2 rzeczy z nazwą klasy, 962 01:04:04,460 --> 01:04:08,490 CS50 i Stat110 i mamy identyfikatory klas i hasło. 963 01:04:08,490 --> 01:04:13,150 Więc chcemy wybrać wszystkie te informacje. 964 01:04:13,150 --> 01:04:17,480 Następnie można zobaczyć tutaj, że jest to rodzaj zbierając z tego niesamowite kolumny, 965 01:04:17,480 --> 01:04:25,170 gdzie wszystkie rzeczy są 1, a następnie, że ma identyfikator klasy, nazwę klasy i hasło, które może wybierać. 966 01:04:25,170 --> 01:04:28,100 Jak dokładnie to zrobić w kodzie? Musisz użyć PHP. 967 01:04:28,100 --> 01:04:33,830 Tak więc jest to rodzaj, jak PHP i SQL są ze sobą powiązane. 968 01:04:33,830 --> 01:04:38,130 Teraz mamy nasz kod, i będziemy używać naszej funkcji kwerendy 969 01:04:38,130 --> 01:04:41,370 jak my w pset 7, i mamy zamiar uruchomić zapytanie SQL. 970 01:04:41,370 --> 01:04:43,870 Wtedy będziemy mieć - 971 01:04:43,870 --> 01:04:46,280 zawsze musimy sprawdzić, czy Row potrójne równe, jeśli fałszywe. 972 01:04:46,280 --> 01:04:49,010 Więc jeszcze raz, chcesz sprawdzić, rodzaj i wartość, 973 01:04:49,010 --> 01:04:53,880 a następnie, jeśli to nie działa, to chcesz, żeby przepraszać, jak zwykle, jak to zrobiliśmy w pset 7. 974 01:04:53,880 --> 01:04:55,870 W przeciwnym razie, chcesz pętli wszystkiego z tych, poręczny 975 01:04:55,870 --> 01:04:59,410 foreach pętli, że po prostu poszedł. 976 01:04:59,410 --> 01:05:01,280 Teraz, że jesteśmy przelotowego i zrobiliśmy to w przeszłości, 977 01:05:01,280 --> 01:05:05,080 załóżmy, że nasze zapytanie minęło, teraz mamy pętli foreach. 978 01:05:05,080 --> 01:05:11,050 I pierwszy wiersz ma, więc o to rząd, tutaj, to w pudełku. 979 01:05:11,050 --> 01:05:14,010 To będzie wydrukować wszystkie informacje, które to zdobyć. 980 01:05:14,010 --> 01:05:18,070 Więc to będzie drukować na dole "Wanna Dowiedz się HTML?" 981 01:05:18,070 --> 01:05:23,370 To się dzieje, aby przejść do następnego wiersza, ponieważ jest zakończona pierwsza pętla for, 982 01:05:23,370 --> 01:05:26,510 i tak to się dzieje, aby wydrukować drugą linię z nim, 983 01:05:26,510 --> 01:05:32,120 który będzie STAT110, Znajdź wszystkie chwile. 984 01:05:32,120 --> 01:05:34,290 >> Ostatnia sprawa jest na SQL luk. 985 01:05:34,290 --> 01:05:37,300 Wiem, że David poruszył ten trochę w wykładzie. 986 01:05:37,300 --> 01:05:40,730 Można to przeczytać później. To naprawdę zabawne. 987 01:05:40,730 --> 01:05:45,320 SQL Injection jest trochę trudne rzeczy. 988 01:05:45,320 --> 01:05:49,890 Powiedzmy, że po prostu trzymać się tych zmiennych w prawo w zapytaniu, 989 01:05:49,890 --> 01:05:52,290 jak widać w tej pierwszej linii. 990 01:05:52,290 --> 01:05:54,520 Tak więc wydaje się w porządku, prawda? Jesteś po prostu wprowadzenie nazwy użytkownika 991 01:05:54,520 --> 01:05:58,820 i hasło do Twojego zapytania SQL, a ty chcesz wysyłać je i dostać wszystko, co jest w tabeli danych. 992 01:05:58,820 --> 01:06:01,450 To wydaje się dość prosta. Więc powiedzmy, że ktoś kładzie się, 993 01:06:01,450 --> 01:06:04,910 o hasło, to czy tekst tutaj - 994 01:06:04,910 --> 01:06:06,780 powinien być w czerwonym polu. 995 01:06:06,780 --> 01:06:11,920 Więc powiedzmy, że wprowadzone hasło do tego - to jest to, co wpisać. 996 01:06:11,920 --> 01:06:16,520 Więc oni wprowadzenie lub "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Niby głupie hasło mieć. 998 01:06:20,880 --> 01:06:25,070 Teraz po prostu wymienić go i będziesz pamiętać, że w tym zapytaniu SQL teraz, 999 01:06:25,070 --> 01:06:29,090 ocenia się zawsze prawdą, bo będziesz pamiętać, że 1000 01:06:29,090 --> 01:06:32,240 Kwerenda SQL można wybrać wszystkie te informacje 1001 01:06:32,240 --> 01:06:35,420 albo po prostu mieć 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Tak, że zawsze będzie oceniać true. 1003 01:06:41,030 --> 01:06:46,610 To nie dzieje się naprawdę pracować, bo to oznacza, że ​​haker może włamać się do systemu. 1004 01:06:46,610 --> 01:06:49,300 Rozwiązaniem tego problemu jest to, że trzeba korzystać z systemu PDO, 1005 01:06:49,300 --> 01:06:51,360 co oznacza, że ​​trzeba używać znaków zapytania, 1006 01:06:51,360 --> 01:06:53,350 co jest, co wy używane w pset 7, 1007 01:06:53,350 --> 01:06:57,620 gdzie masz zamiar używać znaku zapytania w miejscu, w którym chcesz umieścić coś, 1008 01:06:57,620 --> 01:07:01,430 i wtedy będziesz mieć przecinek, a następnie będziesz musiał potem, 1009 01:07:01,430 --> 01:07:07,610 po Twojej ciąg, różne zmienne, które mają zastąpić w swoim znakiem zapytania. 1010 01:07:07,610 --> 01:07:10,330 Więc można tu zauważyć, że teraz mam te czerwone znaki zapytania. 1011 01:07:10,330 --> 01:07:15,420 Następnie umieścić zmienne po moich strunach, więc wiem, aby zastąpić je w tej kolejności potem. 1012 01:07:15,420 --> 01:07:18,470 Które sprawią, że jeśli ktoś robi to w ten sposób, 1013 01:07:18,470 --> 01:07:24,050 i mają lub 1 = 1 sytuację, która zadba, 1014 01:07:24,050 --> 01:07:30,490 na tylnym końcu, upewnij się, że nie będzie faktycznie złamać zapytanie SQL. 1015 01:07:30,490 --> 01:07:33,660 Ok, więc to dość dużo, wicher z PHP i SQL. 1016 01:07:33,660 --> 01:07:41,520 Powodzenia dla wszystkich, a teraz się stanie Oregon 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] Dobra wszyscy. Czas iść na pewne JavaScript 1018 01:07:44,270 --> 01:07:48,840 i kilka innych rzeczy, bardzo szybko więc nie trzymać cię dziś w nocy. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Tak. JavaScript jest niby fajne, rzekomo. 1020 01:07:56,930 --> 01:07:59,090 Rzeczy, które naprawdę trzeba wiedzieć o JavaScript, to jest coś w rodzaju 1021 01:07:59,090 --> 01:08:03,810 po stronie klienta końcowego, co Twoja aplikacja internetowa będzie robić. 1022 01:08:03,810 --> 01:08:08,280 Jest kilka rzeczy, które po prostu nie chcą się zająć cały czas po stronie serwera. 1023 01:08:08,280 --> 01:08:12,880 Wszystkie małe interakcje, podkreślając jedno, co coś zniknie. 1024 01:08:12,880 --> 01:08:15,340 Naprawdę nie chcę rozmawiać z serwerem cały czas na to. 1025 01:08:15,340 --> 01:08:18,069 I niektóre, że nie jest to nawet możliwe, aby zrobić po stronie serwera. 1026 01:08:18,069 --> 01:08:21,899 Dlatego trzeba coś JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Fajne rzeczy o JavaScript: To jest dynamicznie wpisany. 1028 01:08:24,359 --> 01:08:27,149 Oznacza to, że Twój program nie musi wiedzieć 1029 01:08:27,149 --> 01:08:30,970 co dokładnie, zmienne są podczas pisania go. 1030 01:08:30,970 --> 01:08:34,510 To tylko rodzaj zrozumieć to, jak to działa. 1031 01:08:34,510 --> 01:08:37,520 Inne rzeczy, które są fajne o tym: To język klamra, kręcone 1032 01:08:37,520 --> 01:08:41,359 co oznacza, że ​​składnia jest podobna do C i PHP. 1033 01:08:41,359 --> 01:08:47,050 Nie musisz robić wiele przeróbek, kiedy uczysz JavaScript. 1034 01:08:47,050 --> 01:08:49,180 Tutaj mamy trochę JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Interesującą rzeczą jest to, że tutaj, jeśli spojrzeć na to, 1036 01:08:52,560 --> 01:08:56,330 mamy trochę JavaScriptu tam w tagu głowy. 1037 01:08:56,330 --> 01:08:59,479 Co to jest już w zasadzie tylko to plik JavaScript. 1038 01:08:59,479 --> 01:09:02,260 To jest jeden sposób można dołączyć JavaScript do programu. 1039 01:09:02,260 --> 01:09:06,910 Następnie drugi trochę faktycznie niektóre inline JavaScript, 1040 01:09:06,910 --> 01:09:10,790 bardzo podobny do stylu inline z CSS, 1041 01:09:10,790 --> 01:09:16,180 i jesteś tylko pisanie kodu bardzo szybko tam. 1042 01:09:16,180 --> 01:09:18,120 JavaScript ma tablic. 1043 01:09:18,120 --> 01:09:20,850 Tylko kolejny sposób, aby zachować dane w okolicy, bardzo przydatne. 1044 01:09:20,850 --> 01:09:25,180 Bardzo ładne i łatwe składni. 1045 01:09:25,180 --> 01:09:29,870 Używać nawiasów kwadratowych, aby uzyskać dostęp wszystko i utrzymać wszystko razem. 1046 01:09:29,870 --> 01:09:35,020 Nic nie jest zbyt skomplikowane. 1047 01:09:35,020 --> 01:09:38,630 Świetną rzeczą JavaScript i ogólnie języków skryptowych 1048 01:09:38,630 --> 01:09:40,920 jest to, że nie musisz się martwić o rozmiarach tablicy. 1049 01:09:40,920 --> 01:09:43,880 Możesz po prostu użyć Array.length i śledzić to, 1050 01:09:43,880 --> 01:09:46,960 a także tablica może rosnąć lub kurczyć, jak trzeba go. 1051 01:09:46,960 --> 01:09:49,279 Więc nawet nie trzeba się martwić o jakichkolwiek, 1052 01:09:49,279 --> 01:09:57,050 O nie, muszę przeznaczyć więcej rzeczy, lub coś podobnego. 1053 01:09:57,050 --> 01:10:00,090 >> Fajne jest to, że JavaScript jest coś, co nazywa obiekty. 1054 01:10:00,090 --> 01:10:04,800 To obiektowy język programowania, więc to, co jest w istocie, 1055 01:10:04,800 --> 01:10:10,100 sposób, aby dane grupy razem, nieco podobny do struktury, 1056 01:10:10,100 --> 01:10:17,280 ale można go jak struktury asocjacyjnej lub w składni tablicy. 1057 01:10:17,280 --> 01:10:22,520 To bardzo proste i co można z tym zrobić to razem grupa danych 1058 01:10:22,520 --> 01:10:24,810 jeśli masz kilka danych, które związane. 1059 01:10:24,810 --> 01:10:26,850 Bo to jest wszystko, co potrzebne, by opisać samochód, 1060 01:10:26,850 --> 01:10:29,050 nie musisz mieć go w kilka różnych miejsc. 1061 01:10:29,050 --> 01:10:35,300 Można po prostu trzymać go do 1 obiektu w JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Jak zapewne wiesz, powtarzanie jest jedną z tych nudnych zadań. 1063 01:10:39,090 --> 01:10:43,810 Po prostu zrobić to nad znowu. Musisz porozmawiać z każdego obiektu w samochodzie, 1064 01:10:43,810 --> 01:10:47,340 albo musisz przejść przez każdy element na liście lub coś w tym stylu. 1065 01:10:47,340 --> 01:10:51,770 Więc JavaScript ma, podobnie jak PHP, składni foreach. 1066 01:10:51,770 --> 01:10:54,590 W tym przypadku, to w pętli. 1067 01:10:54,590 --> 01:10:57,300 Chcesz używać tego tylko na obiektach. 1068 01:10:57,300 --> 01:11:01,030 Są pewne problemy, które pojawiają się, jeśli używasz tego na tablicach. 1069 01:11:01,030 --> 01:11:03,750 Zazwyczaj jest jedna z tych rzeczy, jednak, że jest bardzo przydatne, 1070 01:11:03,750 --> 01:11:06,590 bo dużo napowietrznych wyeliminować 1071 01:11:06,590 --> 01:11:10,270 bo nie trzeba ciągnąć wszystko w swoim obiekcie samodzielnie. 1072 01:11:10,270 --> 01:11:12,300 Nie musisz pamiętać wszystkich najważniejszych nazwisk. 1073 01:11:12,300 --> 01:11:18,270 Po prostu jakby je z powrotem w tej składni. 1074 01:11:18,270 --> 01:11:21,500 W tym, ze w przypadku osób po prostu chcesz zapamiętać 1075 01:11:21,500 --> 01:11:27,180 że dostajesz z powrotem wszystkie klucze, w bardzo podobny sposób do hash tabeli. 1076 01:11:27,180 --> 01:11:30,880 Jeśli pamiętasz z tego, kiedy będzie można umieścić w ciągu znaków można dostać coś 1077 01:11:30,880 --> 01:11:33,840 które mają wartość skojarzoną z nim. 1078 01:11:33,840 --> 01:11:36,360 Co można z tym zrobić to można powiedzieć, wszystko w porządku, 1079 01:11:36,360 --> 01:11:42,120 I umieścić w samochodzie, i nazwał to Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Dzięki czemu można umieścić w ciągu Ferrari ponownie później, i można dostać to. 1081 01:11:45,290 --> 01:11:50,000 I można to zrobić w pętli, z w pętli. 1082 01:11:50,000 --> 01:11:53,320 Więc po prostu więcej o obiektach. Kluczem jest, od tego trzeba pamiętać, 1083 01:11:53,320 --> 01:12:00,340 jest to, że można korzystać z struct obiektu jak składni, kiedy chcesz z nich, 1084 01:12:00,340 --> 01:12:04,590 wyjątkiem sytuacji, gdy to, co zamierza używać jako ciąg nie jest prawidłową nazwą zmiennej. 1085 01:12:04,590 --> 01:12:07,650 Więc jeśli spojrzeć na które nie mamy klucza ze spacjami. 1086 01:12:07,650 --> 01:12:12,500 Cóż, jeśli były, aby umieścić object.key, miejsca, z, miejsca, przestrzeni, 1087 01:12:12,500 --> 01:12:15,320 że po prostu nie ma sensu składniowo. 1088 01:12:15,320 --> 01:12:22,730 Więc może to zrobić tylko z tego rodzaju składni wspornika. 1089 01:12:22,730 --> 01:12:26,520 >> Również obsługa JavaScript, jest bardzo mądry, aby zakres PHP. 1090 01:12:26,520 --> 01:12:29,050 Masz 2 sposoby rozwiązania zakresu. 1091 01:12:29,050 --> 01:12:31,960 Nie można mieć var ​​przed zmienną, 1092 01:12:31,960 --> 01:12:34,060 i oznacza to, że po prostu jest globalny. 1093 01:12:34,060 --> 01:12:37,050 Możesz zobaczyć go w dowolnym miejscu. Nawet jeśli było umieścić to w instrukcji if, 1094 01:12:37,050 --> 01:12:42,430 nigdzie indziej w kodzie po tym momencie widać, że zmienna. 1095 01:12:42,430 --> 01:12:46,730 Inną rzeczą jest jednak to, z var, jest ograniczona do tego, co funkcja jesteś w. 1096 01:12:46,730 --> 01:12:48,870 Jeśli nie jesteś w funkcji, dobrze, to jest globalna. 1097 01:12:48,870 --> 01:12:53,900 Ale jeśli jesteś w funkcji jest widoczny tylko wewnątrz tej funkcji. 1098 01:12:53,900 --> 01:12:56,420 Nie mam przykład, ale tak. To jedna z tych rzeczy, w których 1099 01:12:56,420 --> 01:12:59,900 można zarządzać, co zmienne chcesz być globalne, 1100 01:12:59,900 --> 01:13:03,810 co zmienne, które chcesz być lokalna, ale trzeba być ostrożnym w tym, 1101 01:13:03,810 --> 01:13:06,890 bo nie masz rodzaj dokładnej kontroli ziarna zrobić w C, 1102 01:13:06,890 --> 01:13:15,820 gdzie jeśli coś jest zadeklarowana w pętli, to będzie, że za pobyt w pętli. 1103 01:13:15,820 --> 01:13:18,790 Co tak naprawdę dbają o użyciu JavaScript na stronach internetowych jest manipulować, prawda? 1104 01:13:18,790 --> 01:13:21,800 Mam na myśli, to dlatego to robimy. 1105 01:13:21,800 --> 01:13:23,840 >> W tym celu możemy użyć czegoś, co nazywa DOM. 1106 01:13:23,840 --> 01:13:25,850 Document Object Model. 1107 01:13:25,850 --> 01:13:29,430 Zasadniczo, co robi to bierze cały swój HTML 1108 01:13:29,430 --> 01:13:34,110 i modelach obecnie w bandę obiektów, które są zagnieżdżone w siebie. 1109 01:13:34,110 --> 01:13:37,080 Zaczynasz z czymś takim. 1110 01:13:37,080 --> 01:13:44,770 Masz, na prawo do mnie, kilka kodu tam, że coś w rodzaju - 1111 01:13:44,770 --> 01:13:46,640 Można by pomyśleć, że byłoby bardzo trudno manipulować, 1112 01:13:46,640 --> 01:13:48,700 bo chcesz być analizowania przez kilka tekstu 1113 01:13:48,700 --> 01:13:52,080 i konieczności poskładać siebie rzeczy. A co, jeśli to nie był poprawnie sformatowany? 1114 01:13:52,080 --> 01:13:54,880 Złe rzeczy się wydarzy. 1115 01:13:54,880 --> 01:13:58,140 Więc JavaScript załatwia to za ciebie, i masz ładne struktury danych, 1116 01:13:58,140 --> 01:14:01,390 tak jak na mojej lewej stronie, gdzie trzeba tylko dokument, 1117 01:14:01,390 --> 01:14:03,530 i wewnątrz, że masz coś, co nazywa HTML, 1118 01:14:03,530 --> 01:14:05,600 i wewnątrz, że masz głowę i ciało, 1119 01:14:05,600 --> 01:14:08,420 i wewnątrz tej głowie masz tytuł, etcetera, etcetera, etcetera. 1120 01:14:08,420 --> 01:14:11,810 To ułatwia manipulowanie strony internetowej tak, że po prostu, 1121 01:14:11,810 --> 01:14:14,190 oh, chcę tylko porozmawiać z tym obiektem. 1122 01:14:14,190 --> 01:14:21,340 Rodzaj bardzo podobny sposób, jak mówić do innego obiektu, wykonanego samodzielnie. 1123 01:14:21,340 --> 01:14:25,980 Tak jak powiedziałem, wszystko DOM jest w obiekcie dokumentu. 1124 01:14:25,980 --> 01:14:29,290 Albo to jest tylko jedno miejsce, a następnie można przejść w niej znaleźć rzeczy, 1125 01:14:29,290 --> 01:14:33,880 i można to zrobić - jest to stary styl to zrobić, tam, 1126 01:14:33,880 --> 01:14:38,130 gdzie można zrobić document.getElementById, a następnie imię, 1127 01:14:38,130 --> 01:14:42,420 i jak można prawdopodobnie powiedzieć, to staje się bardzo nieporęczny po chwili. 1128 01:14:42,420 --> 01:14:44,480 Więc prawdopodobnie nie chcesz zrobić. Dlatego mamy 1129 01:14:44,480 --> 01:14:48,760 Następną rzeczą, którą mamy zamiar mówić o po tym. 1130 01:14:48,760 --> 01:14:52,510 Kluczem jest tutaj to, że wszystko w porządku, masz wszystkie te elementy, tak? 1131 01:14:52,510 --> 01:14:56,400 Więc może uda mi się zmienić kolor coś podczas wczytywania strony. 1132 01:14:56,400 --> 01:14:58,380 Więc co? Co zrobić, jeśli użytkownik kliknie coś? 1133 01:14:58,380 --> 01:15:00,540 Chcę, aby zrobić coś ciekawego po kliknięciu coś. 1134 01:15:00,540 --> 01:15:02,600 Dlatego mamy wydarzenia. 1135 01:15:02,600 --> 01:15:05,330 Można w zasadzie znaleźć dowolny element w swoim DOM, 1136 01:15:05,330 --> 01:15:08,560 a następnie powiedzieć, hej. Gdy ta ładuje lub ktoś kliknie, 1137 01:15:08,560 --> 01:15:11,410 lub gdy myszy nad nim, zrób coś z tym. 1138 01:15:11,410 --> 01:15:15,330 I co masz jest, masz funkcje, które obsługują to za Ciebie. 1139 01:15:15,330 --> 01:15:17,980 Funkcje te są procedury obsługi zdarzeń. 1140 01:15:17,980 --> 01:15:20,440 Co S № - to tylko fantazyjny sposób na powiedzenie, 1141 01:15:20,440 --> 01:15:23,500 Funkcja ta jest wykonywana tylko wtedy, gdy to zdarzenie. 1142 01:15:23,500 --> 01:15:28,070 Więc obsługuje zdarzenie, które występuje. 1143 01:15:28,070 --> 01:15:30,810 To w jaki sposób ułożyć obsługi zdarzeń. 1144 01:15:30,810 --> 01:15:34,750 Mam przycisk, a po kliknięciu go, wybucha. 1145 01:15:34,750 --> 01:15:40,560 Więc nie, kliknij przycisk. 1146 01:15:40,560 --> 01:15:42,910 Jest to jeden ze sposobów zbliża go, prawda? 1147 01:15:42,910 --> 01:15:46,430 Masz tag przycisk, a na kliknięcia masz ciąg, który mówi, 1148 01:15:46,430 --> 01:15:50,460 Och, przy okazji, mam ten wybucha coś dla mnie. 1149 01:15:50,460 --> 01:15:53,990 Inaczej, to jest po prostu jak zwykły przycisk po prostu wykonane. 1150 01:15:53,990 --> 01:15:56,550 Możesz też to zrobić w inny sposób, 1151 01:15:56,550 --> 01:16:02,770 chwytając elementu DOM, ale my z tym że po mówimy o jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Jest to biblioteka, która jest cross-browser. 1153 01:16:07,580 --> 01:16:09,580 Można go używać w prawie wszystko. 1154 01:16:09,580 --> 01:16:12,090 I to właśnie daje wiele narzędzi do pracy. 1155 01:16:12,090 --> 01:16:15,850 Ponieważ obsługa JavaScript, a potężny, nie posiada wszystkie narzędzia potrzebne 1156 01:16:15,850 --> 01:16:20,550 po wyjęciu z pudełka, aby naprawdę rozwiązania aplikacji sieci web może chcesz zrobić. 1157 01:16:20,550 --> 01:16:24,650 Więc to upraszcza wiele rzeczy, daje wiele funkcji 1158 01:16:24,650 --> 01:16:28,760 po wyjęciu z pudełka, które normalnie można napisać samemu, w kółko i od nowa. 1159 01:16:28,760 --> 01:16:31,600 I po prostu sprawia, że ​​rzeczy bardzo prosta. 1160 01:16:31,600 --> 01:16:35,780 Masz również selektorów, które pozwalają podjąć się wszystkie te elementy, 1161 01:16:35,780 --> 01:16:42,800 od DOM dużo więcej po prostu, zamiast używać tych bardzo długich wywołań funkcji. 1162 01:16:42,800 --> 01:16:46,630 Więcej na tych selektorów. Masz, tam masz, powiedzmy, 1163 01:16:46,630 --> 01:16:49,800 Chcę uzyskać element z ID "skały". 1164 01:16:49,800 --> 01:16:56,450 Cóż, w jQuery, to tylko $ i ciąg znaków, który ma funt, a następnie "Skała". 1165 01:16:56,450 --> 01:17:01,960 Jest to bardzo proste i dużo szybciej niż w tradycyjny sposób JavaScript w rozwiązywaniu tego problemu. 1166 01:17:01,960 --> 01:17:06,120 I masz podobne rzeczy dla klas i typów elementów. 1167 01:17:06,120 --> 01:17:08,140 jQuery jest - jednym z ciekawych funkcji jest można rodzaj kompresji 1168 01:17:08,140 --> 01:17:14,350 dół zapytań na swojej DOM bardzo, bardzo szybko. 1169 01:17:14,350 --> 01:17:18,980 Teraz wracamy do obsługi zdarzeń, a to w jaki sposób obsługiwać jedno zdarzenie w jQuery. 1170 01:17:18,980 --> 01:17:23,090 Więc to, co zamierzamy o to mówimy, wszystko w porządku. Mam znacznika script, prawda? 1171 01:17:23,090 --> 01:17:25,400 Więc mam ten inline JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Co mamy zamiar zrobić, to będziemy mówić, wszystko w porządku. 1173 01:17:27,750 --> 01:17:30,860 Kiedy dokument jest gotowy, co oznacza, że ​​dokument został załadowany, 1174 01:17:30,860 --> 01:17:34,660 mamy zamiar udać się do tej funkcji, a będziemy mówić, wszystko w porządku, 1175 01:17:34,660 --> 01:17:37,060 ta funkcja faktycznie robi coś innego. 1176 01:17:37,060 --> 01:17:42,320 Jest to w zasadzie mówiąc, wszystko w porządku, daj mi element z ID "myid." 1177 01:17:42,320 --> 01:17:47,960 A potem dać to do obsługi funkcji, które wykonuje się po kliknięciu go. 1178 01:17:47,960 --> 01:17:49,820 Zasadniczo co to robi to, to mówi, wszystko w porządku. 1179 01:17:49,820 --> 01:17:52,630 Załadowaniu strony, więc będę w, znaleźć ten element, 1180 01:17:52,630 --> 01:17:56,420 dać ten moduł obsługi zdarzeń, i to w zasadzie ustawia stronę dla Ciebie. 1181 01:17:56,420 --> 01:18:00,520 I to jest, jak chcesz, aby myśleć o obsłudze zdarzeń. 1182 01:18:00,520 --> 01:18:06,310 Po prostu chcesz, aby myśleć o, dobrze, gdy wydarzy się coś, co chcę się zdarzyć? 1183 01:18:06,310 --> 01:18:10,520 Nie chcę o tym myśleć, w porządku, muszę mieć pewność, że rozmowy to coś do tej rzeczy, 1184 01:18:10,520 --> 01:18:14,660 to coś bla bla bla, bo po prostu chcę mówić rzeczy pod względem imprez. 1185 01:18:14,660 --> 01:18:17,650 Gdy tak się stanie, to się stanie. Gdy tak się stanie, to się stanie. 1186 01:18:17,650 --> 01:18:20,240 A jeśli coś wywołać inne rzeczy, to świetnie. 1187 01:18:20,240 --> 01:18:22,150 Ale ty nie chcesz, aby spróbować zrobić skomplikowany kod 1188 01:18:22,150 --> 01:18:24,130 dokąd się wybierasz, wywołując wiele rzeczy w tym samym czasie, 1189 01:18:24,130 --> 01:18:28,860 bo jesteś po prostu da sobie głowy. 1190 01:18:28,860 --> 01:18:32,340 >> Wszystko w porządku. Teraz możemy się nasza strona do obsługi zdarzeń, 1191 01:18:32,340 --> 01:18:35,640 ale powiedzmy, że mój użytkownik kliknie przycisk. 1192 01:18:35,640 --> 01:18:38,040 Co zrobić, jeśli chcę wysłać ten wniosek z powrotem do serwera, 1193 01:18:38,040 --> 01:18:41,100 ale nie chcę, aby odświeżyć stronę, ponieważ konieczności przeładowania nową stronę 1194 01:18:41,100 --> 01:18:44,390 za każdym razem robi to za nudne, i dlaczego muszę 1195 01:18:44,390 --> 01:18:47,430 aby rozwinąć nagłówek znowu, i znowu stopki, 1196 01:18:47,430 --> 01:18:49,670 i wszystkie elementy strony again 1197 01:18:49,670 --> 01:18:53,180 po prostu odświeżyć powitanie lub czasu? 1198 01:18:53,180 --> 01:18:55,290 Więc dlatego mamy coś jak Ajax. 1199 01:18:55,290 --> 01:18:59,150 Co możemy zrobić, tutaj z Ajax jest można powiedzieć, wszystko w porządku, 1200 01:18:59,150 --> 01:19:01,290 Chcę wysłać jakieś dane do serwera, 1201 01:19:01,290 --> 01:19:04,010 i chcę uzyskać odpowiedź z powrotem, więc mogę zaktualizować moją stronę, 1202 01:19:04,010 --> 01:19:12,120 a może po prostu zrobić kilka algorytmów obliczeń, które nie koniecznie pokazać coś do użytkownika. 1203 01:19:12,120 --> 01:19:15,500 Czego potrzebujesz, aby to zrobić? Cóż, trzeba URL trzeba rozmawiać. 1204 01:19:15,500 --> 01:19:18,650 Serwer nie może po prostu magicznie podsłuchiwać znikąd. 1205 01:19:18,650 --> 01:19:21,960 Trzeba mieć konkretne miejsce wyślesz te dane. 1206 01:19:21,960 --> 01:19:26,240 I trzeba także niektóre dane do wysłania, a może to zapytanie dataless. 1207 01:19:26,240 --> 01:19:31,380 Chcesz po prostu ping do serwera i powiedzieć, hej, ja żyję, czy coś takiego. 1208 01:19:31,380 --> 01:19:35,150 A następnie chcesz funkcję w zasadzie obsługuje się sukcesem. 1209 01:19:35,150 --> 01:19:38,250 Powiedzmy, że wrócisz informacje z serwera, 1210 01:19:38,250 --> 01:19:42,960 i chcesz zmienić nazwę użytkownika na swojej stronie. 1211 01:19:42,960 --> 01:19:44,930 Więc co można uzyskać informacje z powrotem, 1212 01:19:44,930 --> 01:19:48,860 i chcesz wcisnąć, że na ekranie. 1213 01:19:48,860 --> 01:19:51,170 Co się dzieje, gdy strona będzie gotowa, 1214 01:19:51,170 --> 01:19:56,500 utworzyć na funkcję kliknij na ten przycisk o nazwie logowania. 1215 01:19:56,500 --> 01:19:58,810 Co to to nie jest, gdy przycisk jest wciśnięty, 1216 01:19:58,810 --> 01:20:03,700 mówisz do greetings.php, dokonać żądania POST, 1217 01:20:03,700 --> 01:20:07,290 i można powiedzieć, hej, daj mi coś z twojej strony. 1218 01:20:07,290 --> 01:20:09,890 Tak naprawdę nie trzeba opisywać, ale greetings.php, 1219 01:20:09,890 --> 01:20:12,480 powiedzmy, oddaje "Hello World". 1220 01:20:12,480 --> 01:20:15,650 Więc wracamy to "Hello World", a na sukces to, 1221 01:20:15,650 --> 01:20:20,730 przy założeniu, że nic się nie uda, to po prostu idź do tego miejsca docelowego 1222 01:20:20,730 --> 01:20:25,720 że określony i po prostu trzymać tam odpowiedź. 1223 01:20:25,720 --> 01:20:31,560 I jest to bardzo prosty sposób na utworzenie kwerendy Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Bardzo szybko, Rob jakby to już wspomniano, 1225 01:20:34,340 --> 01:20:37,170 rzeczy może pójść nie tak, złe rzeczy mogą się zdarzyć, 1226 01:20:37,170 --> 01:20:42,660 więc chcesz zapoznać się z tymi kodami odpowiedzi HTTP. 1227 01:20:42,660 --> 01:20:46,030 Co to są po prostu, jak, 200, wszystko poszło dobrze. 1228 01:20:46,030 --> 01:20:48,670 Coś innego, złych rzeczy się stało. 1229 01:20:48,670 --> 01:20:50,790 To na ogół rzeczą, którą chcesz zapamiętać. 1230 01:20:50,790 --> 01:20:53,440 Ale miło jest wiedzieć wszystko o nich. 1231 01:20:53,440 --> 01:20:55,970 I wreszcie, kiedy już przeszli przez to wszystko, 1232 01:20:55,970 --> 01:20:58,680 Musimy porozmawiać o konstrukcji bardzo szybko, 1233 01:20:58,680 --> 01:21:00,620 i wtedy możemy pozwolić ci wszystko zostawić. 1234 01:21:00,620 --> 01:21:03,410 Projekt. Rzeczy, które chcesz zapamiętać. 1235 01:21:03,410 --> 01:21:06,950 Zadaj sobie następujące pytania: Kto będzie używać tego? 1236 01:21:06,950 --> 01:21:09,580 Co oni będą go używać do? Co moi użytkownicy dbają o? 1237 01:21:09,580 --> 01:21:11,750 Co oni nie dbają o? 1238 01:21:11,750 --> 01:21:14,500 Po prostu nie chcę, aby aplikację i niech to po prostu rosną 1239 01:21:14,500 --> 01:21:18,270 i stać się gigantyczny, pochłaniająca wszystko rzeczą, że nie można nawet zakończyć. 1240 01:21:18,270 --> 01:21:23,900 Chcesz mieć odrębne cele i plany i rzeczy, które chcesz rozwiązać. 1241 01:21:23,900 --> 01:21:29,000 Zrób to bez wysiłku. Wszystko to mówi zasadniczo 1242 01:21:29,000 --> 01:21:34,950 ułatwiają użytkownikowi go używać; nie sprawiają, że gigant z tekstem jak kropelka tym slajdzie jest, rzeczywiście. 1243 01:21:34,950 --> 01:21:38,020 Po prostu ma to być coś, gdzie jest to bardzo proste dla kogoś, aby przejść w 1244 01:21:38,020 --> 01:21:40,800 i robić to, co chcą robić. 1245 01:21:40,800 --> 01:21:42,920 Nie chcesz, żeby mieć do nawigacji 5 stron 1246 01:21:42,920 --> 01:21:45,460 aby dostać się do głównego funkcji witryny. 1247 01:21:45,460 --> 01:21:49,290 Jeśli Google miał 5 stron, zanim można nawet sprawdzić coś, 1248 01:21:49,290 --> 01:21:53,080 nikt nie będzie go używać. 1249 01:21:53,080 --> 01:21:55,890 I wreszcie, prototyp papieru, grupa ostrości. 1250 01:21:55,890 --> 01:21:59,220 Mają dobry projekt i praktyki badań. 1251 01:21:59,220 --> 01:22:00,730 Tylko dlatego, że uważasz, że pracuje dla Ciebie, 1252 01:22:00,730 --> 01:22:04,860 nie oznacza, że ​​ktoś jeszcze myśli, że działa. 1253 01:22:04,860 --> 01:22:14,490 Ale tak, to jest to. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]