[00:00:02] [MUZYKA GRY] HANNAH: Cześć wszystkim. Dziękujemy wam bardzo za przybycie na w obrzydliwej pogody dla quizu jednym przeglądu sesji. Jak znacie, quizu jeden jest w środę. Tak więc mamy zamiar iść przez kilka tematów. DAVIN: Hej, mogę powiedzieć, coś bardzo szybko? HANNAH: Tak, Davin dzieje powiedzieć coś naprawdę szybki. DAVIN: Przykro nam. Tylko bardzo szybko, jeśli masz pytania o quizie, możesz przejść do trybu online. Idź do 2.014 jednego sprawdzianu, o quizie. Jest tam logistykę o gdzie iść, kiedy iść. Jeśli jednocześnie zapisał, że jesteśmy będzie mieć quiz makijaż o 5:30. Albo jeśli wysłał mi problem, masz jakiś inny problem. Ale 5:30 jest makijaż Czas w środę. Ale jeśli masz pytania, ogólne pytania, online ma wszelkie logistyki. Więc sprawdzić tam pierwszy. [00:00:47] HANNAH: Niesamowite. Więc tutaj jest duża lista tematów które mamy zamiar iść do dzisiaj. Idę na pokrycie wszystkich C rzeczy, które jest, że pierwsza kolumna. Więc rzeczy, że C pokryte po quizie zera. Wychodząc z połączonej listy które zawiera wskazówki. [00:01:05] W porządku, więc widzieliśmy to na ostatniej sesji przeglądarki, więc mam zamiar przejść przez jest to trochę szybciej. Wystarczy podnieść rękę, jeśli chcesz mnie spowolnić lub adres coś dalej. Ale używamy związane list, ponieważ rozpoczęliśmy w C z tablicami. A tablice są świetne, ale Problemem jest to, że posiada stałą wielkość. Połączone listy pozwalają nam na stworzenie dynamicznie wielkości struktur danych. [00:01:28] A my mamy swoje podstawowe operacje, dodawania, usuwania i wyszukiwania. I możemy zrobić wkładkę Najgorszy przypadek stała czasowa jeśli po prostu umieścić ją na samym początku. Usuwania i wyszukiwania, najgorsze Sprawa duże oh czasu n. Więc jeszcze raz, po prostu odwrócić za pośrednictwem tych zdjęć, Wiem, widzieliśmy te ostatni raz, ale Aby śledzić naszej listy przez śledzenie Szef naszej listy. Ponieważ wiemy, że Każda z tych węzłów jest po prostu będzie wskazywać na następny węzeł w naszej listy. [00:01:58] Tak to w jaki sposób śledzić. Mimo że nie są one ciągłe elementy pamięci, możemy znaleźć je tylko po różnych strzałki. Oto nasza struktura dla połączonego węzła listy. Widzieliśmy ten ostatni raz. Mamy węzeł struct. I to ma dwie właściwości. Numer jeden, rzeczywista Wartość chcemy zapisać. W tym przypadku jest to liczba całkowita. To może być łańcuch, to mógł być char, co chcesz. A potem, musimy śledzić następny węzeł w naszej listy. Tak, że będzie Wskaźnik do następnego węzła. Jeśli to było tylko Wyszukiwarka, jak powiedziałem wcześniej, trzeba by śledzić swoje strzałki w dół. Wstawiania, by śledzić gdzie reszta listy jest. I chcesz przekierować głowicę zwrócić się do naszego nowego elementu, który w tym przypadku jest on, a następnie będzie wskazać z pozostałą częścią połączonego listy. Więc znowu, wiem, że to jest trochę trochę powtórzyć od quizu zera. Tak więc musimy być bardzo ostrożni, o kolejności, w której robić te pointings więc nie stracić z tyłu listy. OK, wszelkie pytania z tylko pojedynczo związane listy? Niesamowite, OK, fajnie. [00:03:06] Więc teraz mamy zamiar iść na coś tylko nieco bardziej skomplikowany podwójnie związany list. Tak więc oprócz utrzymania utwór z kolejnego węzła, Chcemy również, aby śledzić poprzedniego węzła. A to pozwala nam, czy jesteśmy w pewnym punkcie w naszej listy, nie tylko iść do przodu, ale również iteracji wstecznej. Bo jak widzieliśmy w pojedynczo związane listy, gdybyśmy byli w pewnym węźle, a nagle, zdecydowaliśmy, w rzeczywistości, chcę, aby przejść do prawy węzeł przede mną, trzeba by pójść na całość z powrotem do głowy i iteracji, aż znaleziono węzeł, czego szukasz. [00:03:35] Więc to sprawia, że ​​rzeczy nieco łatwiejsze, ponieważ jesteśmy próbuje iteracji za pośrednictwem naszej listy. Ale to wymaga od nas, aby śledzić jednego więcej wskaźnik, więc jeszcze jeden węzeł gwiazdą. W porządku, więc tu pojawia się zabawa. Jedziemy do praktyki wdrażania usunąć za podwójnie związane list. Więc to jest coś, co jest całkowicie uczciwa gra quizu. To pojawił się na ostatnie konkursy. Więc na pewno być przygotowany kodować trochę w C Nie należy zapominać, że ze wszystkim to PHP i JavaScript, zabawy, wciąż mamy do zapamiętania zrobić C. Tak więc odświeżyć, że jeśli czujesz zardzewiałe. [00:04:12] Dobrze, zobaczymy, czy możemy to zrobić. OK, fajnie. Tak więc mamy zamiar spróbować edytować prawo tutaj, i miejmy nadzieję, to idzie zgodnie z planem. Dobra, czy ktoś chce dać mi Sugestia, jak mam zacząć? Założenie, że jestem tylko Podejmowanie jest, że już nie struktury zdefiniowane, jeden pokazałem na ostatniej stronie, na ostatnim slajdzie. A ja przechowywania głowę mojego związane lista w jakiś wskaźnik zwany listę. Czy ktoś chce zaczynaj mi? [00:04:42] PUBLICZNOŚCI: Czy można utworzyć nowy Węzeł zadzwonić listę? [00:04:45] HANNAH: Niesamowite, tak mamy zamiar stworzyć Nowy węzeł przedzierać się przez liście. To mi się podoba. Ja po prostu nazwać to wskaźnik, czy to jest OK. A gdzie powinien początkowo zacząć? [00:04:57] PUBLICZNOŚCI: Prawdopodobnie w Szef listy. HANNAH: Piękna. Chcemy, aby rozpocząć na czele, który Powiedziałem będzie przechowywane w liście. Niesamowite. Tak daleko, tak dobrze. A teraz, naszym celem jest iterację listy aż znajdziemy węzeł z wartość n, które chcemy usunąć. OK? [00:05:13] Więc teraz jest część, gdzie chcemy iteracji. Czy ktoś może sugerować, sposób iteracji? [00:05:19] PUBLICZNOŚCI: pętla. [00:05:20] HANNAH: pętla. Kocham go. W szczególności, możemy spróbować pętli while. OK, a wiemy, że osiągnęliśmy koniec naszej listy, kiedy co? PUBLICZNOŚCI: Gdy wskazówka jest null. HANNAH: Gdy wskazówka jest null. Piękne, kocham go. OK, fajnie. Więc przepraszam, jeśli mój ograniczający klamra jest rodzaj spadającym ekranie. Przywieźliśmy ją z powrotem. OK, fajnie. Co dalej? [00:05:48] Więc wiemy, że chcemy usunąć węzeł, który ma wartość n. Przeanalizujmy więc w przypadku, gdy faktycznie znaleźć nasz węzeł. Więc w jaki sposób mogę sprawdzić, że? Chcę tylko powiedzieć, że jeśli wskaźnik, a następnie, jeśli Aby uzyskać wartość na wskaźniku, Właśnie do arrow n, równa n, parametr że daliśmy do tej funkcji, węzeł, który chcemy rzeczywiście usunąć. Wszelkie pytania, aż tutaj? Dobrze. OK, więc teraz niech narysować szybki obraz na pokładzie w celu wizualizacji tego. [00:06:24] Więc powiedzmy, że nasz piękny węzeł. I to ma wartość, powiem tylko cztery. I wskazuje na następne węzeł w naszej listy. I nie ma nic przed nim. Mamy więc nasz poprzedni wskazując na nic. W tym przypadku, to zwracamy tyłu. OK, po prostu skonfigurowaniu powiązane listę tutaj. A mamy listę, która wskazuje Dzięki takiej konstrukcji, aby rozpocząć. Będę wyciągnąć jeden dla Tytułem uzupełnienia. OK. Będę wskazać tą sprawą. A ja wskazują, że jeden z powrotem. Ups, przepraszam. Tak, ma to do tyłu. Zrób to jeszcze raz. OK, nie idziemy. W porządku, rozumiem. OK, oto nasz obraz. [00:07:21] OK, więc warto rozważyć dwa przypadki. W pierwszym przypadku jest to, czy Węzeł chcemy usunąć znajduje się na samym początku listy. A potem, drugi przypadek, że chcemy do rozważenia jest, czy to gdziekolwiek indziej. Rozumiem, że to zupełnie niechlujny rysunek z całego kasowania, ale mam nadzieję, że będziemy się starać to jasno z kodem. [00:07:40] OK, więc niech obejmuje przypadku gdzie znaleźliśmy nasz węzeł, i to w bardzo początek naszej listy. Ktoś mi Propozycja co do tego, co tutaj Należy zrobić, aby rzeczywiście usunąć nasz węzeł? To trochę skomplikowane. OK? [00:07:56] PUBLICZNOŚCI: Musisz wziąć Węzeł, który jest przed nim i sprawiają, że wskazują na który będzie po nim i wziąć węzeł byłoby po nim i zrobić wskazywać na węźle przed nim. HANNAH: Dokładnie. OK, więc jest to przypadek where-- mamy dwa przypadki. Mamy sytuację, w której się węzeł, który szukamy Jest przód listy. OK, a następnie tak, że ci opisane jest inaczej, prawda? To gdzieś w liście. Więc powiedziałem, musimy spojrzeć na węźle poprzedniego, i sprawiają, że poprzedni węzeł zwrócić do następnego węzła. Więc powiedzmy, że jesteśmy próbuje wykupić pięć w moim bardzo niechlujny rysunek ponad tutaj. Chcemy, aby upewnić się, że cztery wskazuje teraz na sześciu. Cztery na kolejne punkty do sześciu. I sześć za poprzednie punkty do czterech. To jest naszym celem, prawda? To jest to, co myślę, że cię tylko, że tam. [00:08:56] OK, więc zróbmy to pierwszy kawałek. Zróbmy mają poprzednia wskazówka poprzednie. Więc czterech dalej powinien wskazywać na co? Dokładnie, w tym przypadku, sześciu. Więc powinniśmy powiedzieć wskaźnik obok. OK? Dobrze. Warto więc pozbyć się tego brzydki obraz i staramy się wyciągnąć nieco ładniejszy jeden. Mamy tu naszą listę głową. A wskazuje na pierwszym węźle naszej listy, które powiedział, jest cztery. Oto nasz drugi węzeł, pięć. A nasz trzeci węzeł, sześć. Po prostu staramy się wyciągnąć dokładnie to samo obraz, po prostu trochę bardziej czysto. OK, więc na następne cztery początkowo wskazuje na pięć. Five kolejne punkty do sześciu. Sześć za poprzednie punkty do pięciu. A five poprzednie punkty do czterech. Tak wiele ładniejszy! OK, fajnie. [00:10:04] Więc teraz, co zrobiliśmy po prostu tutaj, ta linia kodu, które mówi, wskaźnik poprzednie obok, więc co to oznacza? Oznacza to, że jeśli patrzymy na pięć, przejść do poprzedniego węzła, i to jest następna powinna teraz Punkt do pięciu na następne. Więc zasadniczo, co to robi jest to, że jest usuwanie tę strzałkę a co pominąć tuż ponad pięciu. Czy to jasne? Wiem, że może być trochę pobieżnie. Widzę pewne kiwa głową. To dobrze. OK, fajnie. Teraz, co jest następny krok? [00:10:39] Mam zresetować następne. Teraz, co inne strzałka muszę zmienić? Ten tutaj. Sześć na poprzednie. Nie chcemy, sześć na poprzednie zwrócić się do pięciu już. Chcemy, aby wskazać na cztery. Czy to obraz ma sens? Więc teraz możemy rzeczywiście podjąć pięć out. Więc przejdźmy ten kawałek. Co należy zrobić przed I zresetować sześciu na poprzednie cztery? Wszelkie jakieś pomysły? [00:11:14] PUBLICZNOŚCI: Uwolnij węzeł między je przez ustawienie go na null? HANNAH: Spoko. Zdecydowanie, celem jest nasz koniec Będzie uwolnić węzła. Więc możemy to zrobić tutaj. Bezpłatne wskaźnik. Absolutnie. Ale jeszcze wcześniej, niech just-- Naszym celem prawo o to, aby ustawić wskaźnik obok poprzednia równa wyżeł poprzednie. Wiem, że to jest coraz zasłonięte. OK, niech take-- fajne. Czy każdy może zobaczyć to zyski? Czy jest to bardzo małe? [00:11:50] Więc zanim wykonamy ta linia tutaj, chcemy aby upewnić się, że Wskaźnik obok nie jest null. Bo jeśli wskaźnik obok jest null, jaki rodzaj błędu będę się przy próbie odwoływać się do pustego wskaźnika? PUBLICZNOŚCI: wina Seg. HANNAH: usterka seg, piękne. OK, więc jeśli nie jest to null, to możemy zresetować. I mamy sześć punkt ponownie do czterech. Pytania aż do tego punktu? Tak? [00:12:17] PUBLICZNOŚCI: W Twoja pierwsza if, prawda znaczy mieć strzałkę obok, lub [niesłyszalne]? HANNAH: Miałem na myśli wskaźnik strzałki n. Więc w zasadzie, co próbuję zrobić jest powiedzieć, bieżący węzeł, że jestem iteracji po obecny węzeł Patrzę, jestem przechowywania wskaźnika. A ja chcę wiedzieć, wskaźnik na wartość, która w tym przypadku wynosi n. I chcę, aby zobaczyć, jest Węzeł szukam dla węzła Jestem zmierzające do usunięcia? To dlatego mamy tutaj wskazówka n. [00:12:47] PUBLICZNOŚCI: Więc strzałka będzie do n, ustawić wartość i przechowywać go w węźle o nazwie n? [00:12:55] HANNAH: Więc jak to jest, czy jestem przeżywa tego połączonej listy i wskazując na pięć. Jeśli chcę, aby ta wartość, jeśli Chcę, aby ta liczba, 5, Muszę zrobić wskaźnik strzałki n. Fajne? Tak. [00:13:07] PUBLICZNOŚCI: Czy n nazwę zmiennej? HANNAH: Tak. Jeśli więc przerzucić z powrotem jednego Poślizg, n jest nazwą wartości wewnątrz of węzeł w naszej listy. I wiem, że to może być trochę nieco mylące, ponieważ my również dzwonisz rzeczy że chcemy usunąć n. Więc to jest w przypadku, gdy jedna linia pochodzi. Tak? [00:13:27] PUBLICZNOŚCI: Co masz [Niesłyszalne], jak one działają? Wskaźnik [niesłyszalne]? [00:13:35] HANNAH: Jasne. Mówisz about-- która linia? PUBLICZNOŚCI: Ostatnia linia [niesłyszalne]. [00:13:44] HANNAH: Pewnie, OK. Warto więc spojrzeć na obraz w Aby spróbować wyjaśnić. Przepraszam, za Aparat, pytanie było możemy wyjaśnić wskaźnik strzałkę obok wskaźnika poprzednie. OK, więc powiedzmy, że jesteśmy na pięciu a naszym celem jest, aby usunąć pięć. Więc wyżeł następne, które z nich trzy węzły nam to daje? To prowadzi nas do szóstego węzła, prawda? [00:14:10] OK, więc teraz pytamy dla sześciu na poprzednie. OK? A my resetowania tego powinna być równa cztery, które stało się pięć na poprzednie. Wiem, że to bardzo trudno śledzić. Naprawdę polecam rysować jeśli masz pytanie, jak ten. Tak? [00:14:30] PUBLICZNOŚCI: Czy dlatego, że nie mamy [niesłyszalne]? [00:14:37] HANNAH: Dokładnie. Więc pytanie, dlaczego Nie musimy sprawdzić tutaj? Dlaczego nie musimy sprawdzić, Wskaźnik poprzednia nie jest równa null? A to dlatego, że mamy już oddzielony w przypadku, gdy wskaźnik na na samym początku. Bardzo dobre pytanie. Wszystko inne na ten temat? OK, fajnie. Więc skończmy to. Jesteśmy prawie na miejscu. [00:14:59] Co z tego, że jest na czele? Co zrobić, jeśli zamiast Próbujesz usunąć pięć, rzeczywiście chciał usunąć cztery? Co mam zrobić? Cóż, chcę, aby zresetować głowę do czego? Krzycz to? PUBLICZNOŚCI: jeden po nim. HANNAH: Piękna. OK, więc chcemy wymienić należy wskazując do tego, co nasz wskaźnik następny węzeł. Dobra. I właśnie dla kompletności tych sake, że będzie Aby sprawdzić, jak długo nasze listy to nie jest pusta, tak długo, jak nasza lista nie jest pusty, to chcemy, aby ustawić nasza poprzednia równa null. Pytanie do tej pory? Jeden krok from--? [00:15:53] PUBLICZNOŚCI: czy będzie, jeśli Lista ta nie jest równa null? [00:15:55] HANNAH: Tak, masz całkowitą rację. Tak mi przykro. Czy lista nie jest równa null. Niesamowite. Starając się doprowadzić to wszystko na ekranie. To rodzaj upadkiem. Niestety, chłopaki. I ostatnie, ale nie najmniej, wszystkie musimy zrobić to w obie strony. OK. To było dużo zapchane w bardzo szybko. Poświęć chwilę, aby to rozpatrzyć. Powiadom mnie, jeśli masz jakiekolwiek pytania. Tak? [00:16:20] PUBLICZNOŚCI: Jeżeli lista jest głowa, then-- czekać, nieważne. [00:16:26] HANNAH: OK, dobra. Tak to jest, gdy lista jest na czele, usuwamy go do tego, co możemy dodaje. Tak? [00:16:31] PUBLICZNOŚCI: Czy możesz wyjaśnić Pierwsza instrukcja if ponownie? Jeśli wskaźnik n wynosi n? HANNAH: Jasne. Tak więc naszym celem całej tej funkcji jest usunąć węzeł, który ma wartość n. Więc jeśli znajdziemy, ponieważ jesteśmy iteracja naszej liście, węzeł o wartości n, to jeden chcemy usunąć. Więc wszystko dzieje się z usunięciem wewnątrz tego duża if. Czy to ma sens? Cool. Tak? [00:16:59] PUBLICZNOŚCI: Może po prostu nie widać to, ale nie trzeba również linię do przewijania listy? HANNAH: Niesamowite. Niech przyniesie to się trochę, a dorzucimy tego prawa w dole. Może rada będzie ve był nieco lepszy pomysł. Więc jak by przenieść wskaźnik do przodu? [00:17:17] PUBLICZNOŚCI: Pointer wynosi wskaźnik plus jeden. [00:17:20] HANNAH: Piękna. Tak, że pozwala nam nadal iteracja. OK. PUBLICZNOŚCI: nie Czy istnieje jeszcze? HANNAH: Jeszcze raz? PUBLICZNOŚCI: nie Czy istnieje jeszcze po wielki stary, jeśli Oświadczenie [niesłyszalne]? HANNAH: Która część? Przykro mi. [00:17:38] PUBLICZNOŚCI: przejścia, Nie powinno tam być innego? HANNAH: Absolutnie może mieć innego. Bo mam prawo powrotu nie, nie potrzebujemy innego. Ale tak, dobre pytanie. OK, tak? PUBLICZNOŚCI: Czy możemy myśleć o wskaźnik które przemieszcza się po liście przyjmując jako wartości każdego węzła w liście? A może powinniśmy pomyśleć o tym, jak rodzaj zewnętrznego do listy? [00:18:00] HANNAH: Jeden jest w porządku, myślę. Sposób, w jaki to sobie wyobrazić jest Mówię, OK, jestem wskaźnik. A to ja. To jest moja ręka. Mam zamiar wskazywać na różne rzeczy, które chcę iterację. Po pierwsze, mam zamiar zwrócić na czele listy. I to mówi mi, że jestem będzie wskazywać na czterech. I tak ja jest zewnętrzny w stosunku do listy Można wskazać na każdym z tych elementów. Więc myślę o sobie jako wskaźnika. PUBLICZNOŚCI: Więc kiedy usunięcia jeden z tych elementów, można samemu usuwać, że tak powiem. HANNAH: Dokładnie. Więc usunąć rzeczy jesteś wskazując. Tak więc w tym przykładzie, że widzieliśmy, gdzie jesteśmy Próbujesz usunąć pięć, kiedy jestem wskazując na pięć, Chcę usunąć co mam wskazując. Dokładnie tak. Tak? PUBLICZNOŚCI: Czy my się pod opieką przypadek, w którym n jest na liście? HANNAH: Gdy n nie ma na liście? Wszystko, co się stanie, to jesteś będzie iterację i iteracji przez, a następnie, będziesz dostać się do wskaźnika rygorem, i masz zamiar to zrobić. [00:18:48] PUBLICZNOŚCI: Więc mamy aby powrócić coś? HANNAH: Moglibyśmy. Sposób, że jeżeli określona w tym Funkcja, powiem tylko, że zwraca unieważnić niezależnie. Ale może masz coś jak powrót liczbę całkowitą, i nie wróci ujemna 1, jeśli nie. Coś w tym stylu. Pytania with-- tak? PUBLICZNOŚCI: [niesłyszalne]? HANNAH: Przepraszam? PUBLICZNOŚCI: [niesłyszalne]? HANNAH: Jasne. Więc to actual-- raz mamy zrobić to wszystko praca w ruchu wszystkie te strzały wokół, cała nasza Celem było pozbycie węzła że szukamy. W tym wypadku, uwalniając wskaźnik, czy jestem wskazując na pięć, to jak usuwanie ten środkowy węzeł. To wolna część wskaźnika. To ma sens? [00:19:29] PUBLICZNOŚCI: Więc nawet, że zrobiłeś nie [niesłyszalne]? [00:19:31] HANNAH: Więc założyliśmy na początku mieliśmy jakieś listy, które było already-- oni umieścić to razem. Tak więc w celu skonstruowania tego lista, Musieli [niesłyszalne]. Cool. Czy coś jeszcze z tym? Tak? [00:19:46] PUBLICZNOŚCI: Co zrobić, jeśli lista nie równa linię zerową? [Niesłyszalne]? HANNAH: Tutaj? Publiczność: Tak. HANNAH: OK, wszystko robię jest Ja tylko upewniając że przed próbuję listy wyłuskiwania, przed próbie uzyskania dostępu do poprzedniej, Chcę się upewnić, że to nie jest null, więc nie dostać winy seg. Cool. [00:20:08] OK, wiem, że to było dość Wiele się dotrzeć. Więc to będzie slajdów udostępnione do Ciebie. Więc można przejść przez to bardziej szczegółowo. Tak? [00:20:17] PUBLICZNOŚCI: Dlaczego lista [niesłyszalne]? HANNAH: Jasne. Tak naprawdę wskazuje na listy ten element właśnie tutaj, Pierwszy element listy. Więc to nie może mieć poprzednie. Tak? [00:20:31] PUBLICZNOŚCI: Czy punkt wskaźnika do tego samego adresu w pamięci? Czy to wskazywać na to samo adres w pamięci jako węzeł że to wskazuje? [00:20:40] HANNAH: Tak, to wskazuje do tego węzła w pamięci. [00:20:43] PUBLICZNOŚCI: Prawo, więc kiedy [niesłyszalne]? [00:20:47] HANNAH: W pewnym sensie tak. OK. Dobrze, przejdźmy razem z tym. A jeśli masz więcej pytań, trzymać się na końcu, i możemy przejść przez to jeszcze raz. OK, fajnie. Teraz mamy przejść hash tabele, prób, i drzewa, które masz bardzo znać w p-set pięć, speller. [00:21:04] Więc hash tabeli jest tylko Tablica z pojedynczo związane listy lub podwójnie związany list pochodzących wyłączyć. Tak więc mamy jakieś tablicy asocjacyjnej. A jak wiemy, które z nich tablice wiadra się dostać, używamy funkcji skrótu. Więc w tym przypadku, może ktoś Zgadnij, co do funkcji skrótu będzie tylko w oparciu o niektóre wejścia i wyjścia? [00:21:31] PUBLICZNOŚCI: numer litery alfabetu. HANNAH: Dokładnie. To po prostu umieszcza je w kolejności alfabetycznej. Wszystko co zaczyna się Umieszczany jest w pierwszym segmencie. Wszystko z B wkłada się Drugi wiadra tak dalej, i tak dalej. Niesamowite, OK. A funkcja skrótu jest każda funkcja, która trwa w słowie i powie, co wiadro należy się. Więc, który wpis w naszym Tablica należy się. [00:21:55] Dlatego za każdym razem daję hash funkcjonować słowo, powinien powiedzieć mi to samo to za każdym razem. Więc jeśli używamy funkcji skrótu z poprzedniego slajdu dokąd sortując Pierwsza litera alfabetu, za każdym razem daję funkcja skrótu "jabłko" powinien on zawsze daje mi 0. Więc jeśli mam jabłko aby umieścić w tabeli mieszania, jeśli dam "jabłko" do mojej funkcji skrótu, należy powiedzieć, udać umieścić go w wiadrze 0. Jeśli szukam Apple w mojej tabeli mieszania i mogę powiedzieć, gdzie może jabłko na żywo, można zwrócić się do funkcji skrótu. I to mówi, idź do schowka 0. Wszystko w porządku? Pytania z funkcji skrótu? Niesamowite. [00:22:34] Oto nieco bardziej Szczegółowe wyjaśnienie z tego, co funkcja skrótu może wyglądać. Dobrze. Teraz problem z hash funkcje jest w idealnym świecie, będziemy mieć tylko jedną rzecz w każdym segmencie. Ale w rzeczywistości, nie ma nie tylko jedno słowo która zaczyna się na literę A. Nie ma tylko jedno słowo, które zaczyna się od B. So w tym przypadku, jeśli my nagle się "jagody" i chcemy go umieścić do naszej tabeli mieszania, i widzimy, o nie, banan jest już nie, co zrobimy? [00:23:03] Cóż, mamy dwie opcje. Pierwsza opcja jest liniowa sondowania, które oznacza po prostu idź znaleźć następne puste wiadro. Idź znaleźć następny pusty wpis tablicy. I po prostu umieścić "jagoda" istnieje. Tak wiem, że to ma przejść z bananem w wiadrze jednym. Ale wystarczy umieścić go w wiadrze trzech, bo wiadro trzech jest pusty. Inną możliwością jest pewnie co wdrożenia w p-set, gdzie cię miał oddzielny łańcuchowym. Więc każdego z wiadra, każdego z elementów tablicy, nie tylko posiada jedno słowa, ale w rzeczywistości posiada wskaźnik do listy słów. Tak, że jeśli miał Banan w tabeli mieszania i nagle chciał dodać jagody, nie ma problemu. Wystarczy dodać jagody na końcu, lub początek twojej połączonej listy. OK, super. Pytania z hash tabele, zanim udamy się? [00:23:58] Dobrze. Drzewa i stara. OK, więc to było innej opcji za wdrażanie słownika. Mogłeś się spróbować. Więc jest to szczególny rodzaj drzewa, które zachowuje się jak tabeli mieszania wielopoziomowego. Więc zobaczysz obraz gdzie masz tablicę Wskazuje to na kilka tablic że punkt do kilka tablic że punkt do kilka tablic. I zobaczymy, co to dokładnie będzie wyglądać w przyszłości slajdu. I bardziej ogólnie, drzewo tylko jakaś struktura danych w którym dane zorganizowane w jakimś hierarchii. Więc gdzie widzieliśmy mamy jakiś zrozumienia z najwyższym poziomie, następny poziom, Następny poziom, następny poziom. Więc to jest chyba najbardziej jasne przy pewnych szczególnych przykładów. Więc tutaj jest nasz drzewa. Widać, że to ma szczególne poziomy że zaczynamy z tego korzenia, jeden. I możemy iść za pośrednictwem naszego drzewa. [00:24:50] Binarne drzewo Szczególny rodzaj drzewa. I tylko specyfikacja do binarnego drzewa że każdy węzeł ma co najwyżej dwóch liści. Więc nie będziemy widzieć wszelkie od węzły te mają trzy lub cztery lub innej liczby liści. A potem jeszcze bardziej specyficzne jest drzewo binarne wyszukiwania gdzie każdy węzeł z lewej węzeł będzie miał wartość mniejsza. A co do wartości Prawo będzie większy. Więc jeśli widzisz 44 znajduje się w naszym katalogu głównym, w lewo, 11, 22 i 33 są mniejsze niż nasz root. A po prawej stronie są numery bigger-- 66, 55 i 77. I to jest prawdziwe nieruchomości na każdym poziomie drzewa. [00:25:37] Więc kiedy idziemy w dół do 22, 11 i 33, w dalszym ciągu 11 jest mniejszy niż 22, a 33 jest większy niż 22. I to sprawia, że ​​są łatwiejsze do przeszukiwania bo jeśli szukamy liczby, możemy dokładnie wiedzieć, które Oddział podążać w dół. Tak to powinno ci się przypomni Trochę wyszukiwania binarnego. Tak? [00:25:56] Publiczność: Tak, gdy jesteś Opisując binarny, powiedziałeś, że ma co najwyżej dwóch liści? HANNAH: Mm-hm. PUBLICZNOŚCI: Czy to może mieć mniej? HANNAH: Tak. Powiedzmy, na przykład, nie mają jeszcze wiele rzeczy i nie można wypełnić wszystkie swoje liście, to w porządku, jeśli ma się jedną. OK? Niesamowite. Wszelkie inne pytania na drzewach? OK. [00:26:16] Powrót do naszych prób, jak rozmawiałem o nieco wcześniej, jak mamy te tablice wielopoziomowych. Tak więc w tym przypadku zaczyna się od góry. I możemy wykonać dowolną słowo dół. Więc powiedzmy, że chcemy szukać Turinga. Zaczynamy w T, po nim w dół do macierzy zawierającej U, a następnie ją w dół, aż my osiągnąć ten mały trójkąt, który mówi nam, tak, możesz znaleźć słowa. Jasne, na próbach? Cokolwiek by tam iść? Tak? PUBLICZNOŚCI: Czy symbol delty muszą zajmować przestrzeni w próbie? HANNAH: Tak, tak, to nie robi niekoniecznie musi być nawet trójkąt. Ale musimy w jakiś sposób do Poleć nasz computer-- przykro, tak, że wiemy, że TUR nie ma słowa. Bo powiedzmy, że nie mieliśmy ta koncepcja delta, ta koncepcja gratulacyjny, można znaleźć słowa, to przejść i iteracji T-U-R, a potem mówią, niesamowite, znalazłem! To musi być słowo. Ale to naprawdę nie jest. Chcemy cały Turinga za słowo. Więc musimy mieć coś na Koniec, który mówi, gratulacje, znalazłeś uzasadniony słowo. PUBLICZNOŚCI: Więc jeśli miał jak 26 liter w alfabecie, to faktycznie mają 27 klucze w próbie? [00:27:24] HANNAH: Niesamowite, tak. Tak naprawdę, myślę, że będzie na następnym slajdzie. Ta-da! Gdzie, jeśli masz Węzeł w próbie, jesteś będzie miał 27 dzieci, zamiast 26. Wszelkie pytania z tym? Tak? PUBLICZNOŚCI: Dlaczego próbuje podjąć tak dużo miejsca [niesłyszalne], jak przejść? Dlaczego jest to uważane za [niesłyszalne]? HANNAH: Jasne. Wróćmy. Pytanie brzmi, dlaczego to stara dużo większe niż coś jak tabeli mieszania. Tak więc dla każdej z tych poziomów nawet jeśli nie są one rysowane tutaj trzeba mieć wszystkie 26 znaków. A powodem, że nie można powiedzieć, oh, ale jak dla Turinga, ja nie trzeba mieć żadnej z tych same rzeczy na poziomie U. Well, jeśli nagle chcesz dodać coś, co było jak T-H, że musisz mieć Możliwość dodawania tego słowa. Tak więc dla każdej litery, będziesz mieć mieć kilka tablice spadając z niego. Więc widać, jak by to się bardzo duży, bardzo szybko. Jeszcze jakieś pytania? Dobrze. Tak? [00:28:29] PUBLICZNOŚCI: Gdy się stara szybciej niż tabel hash? [00:28:33] HANNAH: Gdy się stara szybciej niż tabel hash? Więc jeśli masz naprawdę złe funkcja skrótu. Więc powiedzmy, że ja na to: tu jest twoja funkcja skrótu. Bez względu na to, co słowo możesz mi dać, zawsze jestem zamiar umieścić go w pozycji tablicy 0. I tak skończy się tylko wprowadzenie wszystko w jednym wielkim liście długo związane. I tak, wyszukiwanie czasu zajęłoby co najgorsze n czy to na samym końcu naszej listy. Przy próbie, po prostu musimy iteracji przez litery w wyrazie. Więc nawet jeśli dodaliśmy kilka więcej słów do naszej próbie, nie zajmie nam dłużej aby znaleźć konkretny wyraz. [00:29:09] Wszystko, co musimy zrobić, to, na Przykład, w tym przypadku, powiedzmy, że szukamy zoom, to po prostu musimy przejść przez wszystkie Z-O-O-M, cztery litery. Więc to tylko Długość zoom słowo. Nie ma znaczenia, ile więcej słów stawiamy w tej próbie. Zawsze możemy dostać w tych czterech etapach. Niesamowite. Tak? [00:29:32] Publiczność: Tak [niesłyszalne] jest tablica, prawda? [00:29:34] HANNAH: Mm-hm. PUBLICZNOŚCI: Jeśli jesteś Szukam [niesłyszalne], trzeba by przejść przez Twoja tablica znaleźć [niesłyszalne]? HANNAH: Jasne. PUBLICZNOŚCI: Czy to nie trochę więcej czasu? HANNAH: Jeśli będę powiedzieć, że moja tablica jest zawsze będzie A, B, C, D, E, F, G, bla bla bla, więc jeśli zawsze wiem, że to w tym samym dokładnie takiej kolejności, jeśli zawsze wiem, że to w porządku alfabetycznym, Mogę tylko powiedzieć, O jest liczba tak i tak w alfabecie. Wystarczy przejść do tego miejsca. Bo pamiętam, z tablice, mamy dostęp każdy element tej tablicy w stałym czas, gdy wiemy, gdzie szukamy. Tak? [00:30:09] PUBLICZNOŚCI: W ostatnich przesuń [niesłyszalne] 27, a 26 dla pierwszego. [00:30:14] HANNAH: Przepraszam? [00:30:15] PUBLICZNOŚCI: Czy to nie jest pierwsza jedno 0, więc nie byłoby 26? [00:30:18] HANNAH: Jasne, więc gdy mówimy, 27, to da amerykańskie indeksy 0 do 26. Ale jeśli rzeczywiście liczyć ci się, że to będzie 27. Dobre pytanie. Coś jeszcze? Tak? [00:30:31] PUBLICZNOŚCI: Więc to stara wolniej niż tabel hash? [00:30:34] HANNAH: Próby będą w teoria, szybciej niż tabele z cebulą ale zajmują więcej pamięci. Tak? PUBLICZNOŚCI: [niesłyszalne]? [00:30:45] HANNAH: Przykro mi, że nie słyszy. PUBLICZNOŚCI: [niesłyszalne]. 0 do 25 daje 26. [00:30:54] HANNAH: 0 do 25 będzie daje 26, tuż. [00:30:56] PUBLICZNOŚCI: A potem [niesłyszalne]. HANNAH: Prawo. Tak więc liczba jesteśmy określając jest ilość rzeczy w naszej tablicy. Więc jeśli mamy 27, to da nam 0 do 26, co daje nam pokój, w tym przypadku, Nie jestem w tym apostrof. Więc jesteśmy już od 0 do 25 są pierwsze 26 liter alfabetu, lub wszystkie 26 liter alfabetu. A następnie, że w ubiegłym rzeczą, na wejściu 26, jest będzie kontrola Znak lub trójkąt. Coś jeszcze? Niesamowite. Straciłem miejsce. OK, fajnie. [00:31:31] Więc poruszył już tego. Ale wielki kompromis pomiędzy próbami i tabel hash jest to, że próbuje przewidywać, w Teoria, stała patrzeć razy, ale używać dużo pamięci. Dobra, teraz mamy trochę mniej skomplikowane struktury, a my zrobić z C, i będziemy poruszać się w prawo wzdłuż. [00:31:49] Więc stosy, widzieliśmy to w wykładzie, w którym mieć coś takiego Stos tac gdzie Ostatnią rzeczą, którą umieścić na stos będzie być pierwszą rzeczą, którą zdjąć. Więc to, co naprawdę definiuje stos jest to, że ostatnią rzeczą, można umieścić na będzie pierwszym rzeczą, którą zdjąć. I że używamy terminologii jeśli mamy zamiar umieścić coś, jeśli chcemy, aby dodać coś do nasz komin, nazywamy to pchanie. A jeśli wziąć coś off, nazywamy go trzaski. A jeśli będziemy zaimplementować stos, my muszą mieć pewność, aby śledzić zarówno wielkość i pojemność. Tak więc liczba elementów możemy przytrzymaj i aktualna liczba elementów że trzymają. [00:32:27] I bardzo podobnie, mamy kolejki. A jedyna różnica to zamiast w stosy, powiedzieliśmy, ostatnią rzeczą, stawiamy na jest pierwszą rzeczą, którą zdjąć. Więc z kolejki, Pierwszą rzeczą, jaką wkładamy w będzie Pierwszą rzeczą, jaką możemy wziąć. Tak to jest jak, jeśli jesteś rzeczywiście w kolejce w sklepie a ty jest wspomagany, to pierwsza osoba w kolejce powinien być pierwszą osobą, zniesiony. Tak, że będzie kolejka. [00:32:52] Więc musimy śledzić wielkość, pojemność, a ponieważ jesteśmy głowy zamiar wziąć wszyscy się z przodu listy zamiast z tyłu. Pytania na które? Wszelkie pytania C, które są ci przeszkadza? Struktury danych, żadnej z tych zabawnych rzeczy? Wszystko w porządku, super. Będę więc oddać go do Alison, aby wskoczyć do jakiegoś bardziej programowania. [00:33:14] Alison: Och, zobaczymy. Zobaczymy, jak dobrze zrobić tutaj. OK, mam zamiar spróbować i latać przez tych rzeczy, chłopaki. Hannah poszło bardzo w głębokość na wszystkich jej rzeczy. Mam zamiar spróbować dać Ci szybki przegląd wielkopiecowy tak, że możemy dostać się do Davina ze wszystkim zabawy JavaScript i bezpieczeństwa rzeczy że być może rzeczywiście Aby dowiedzieć się więcej na temat. [00:33:33] OK, jak Hannah powiedział, jeśli masz jakieś pytania, Jadę za szybko, proszę, daj mi znać. Odpowiem na pytania, jak to konieczne. Więc na początek, zamierzamy zacząć prawdopodobnie jeden z pierwszych rzeczy nauczyłeś się z sieci programowanie, uprawnienia. Więc chmod, chłopaki powinni byli mistrzami w tym z całej sieci Programowanie, że masz robi ostatnio. To w zasadzie tylko polecenie że zmienia prawa lub uprawnienia dostępu naszych obiektów systemu plików. Oczywiście, aby właściwie zobacz nich, jeśli jesteś mając żadnych problemów z nich podczas swoich zbiorów problemowych, może użyłeś ls -l, które jest długa, aby uzyskać rodzaju widok jak ten, gdzie można rzeczywiście zobaczyć wszystkie uprawnienia do pliku. [00:34:16] A tak naprawdę, jesteśmy po prostu pójdzie przez dość szybko po prostu dość dużo, co każdy z nich oznacza. Więc mamy d tutaj, które tylko stoi w katalogu. Oczywiście tutaj widzimy rwx, które jest czytelny, do zapisu i wykonywalny. Mogą to być również reprezentowane w bitach której zajmiemy się na następnej stronie. Tak więc każdy triada, że ​​widzieliśmy tutaj, więc trzy triady. Mamy RWX, R x i R nic nic x dla tego pierwszego pliku. Jest to ogólna struktura. [00:34:49] Tak więc mamy trochę katalogu. Mamy pewne grupy użytkowników z tych uprawnień. Niektóre grupy, która ma te uprawnienia, i świat, który ma pozwolenie. Można myśleć o nich jako triady. Można myśleć o nich jak o trzech bitów. Więc mogą posiadać wartości w czasie od 0 do góry 7, dlatego też czasem mieliśmy zrobić chmod 600 zamiast chmod rw cokolwiek. Zajmiemy się przykład tam. Ale w zasadzie, można myśleć z nich, jak albo po prostu rwx, czy można myśleć o nich jak niektóre Numer, gdzie ta pierwsza tutaj oznacza liczbę między 0 do 7, ten drugi oznacza liczbę między 0 do 7, a trzeci oznacza liczbę między 0 i 7, OK? [00:35:38] r ma wartość 4. wag ma wartość 2, a X ma wartość 1, co jest, dlaczego tak Pozwolenie tutaj będzie chmod 700. Ponieważ w tym przypadku tutaj, to mówi, że że pierwszy bit nie jest włączył. Mamy więc 4 do odczytu. Drugi bit jest włączył do w, którym jest 2, więc teraz mamy 6. I trzeci bit jest przerzucony na dla x, który jest jeden, więc mamy siedem. I oczywiście, nasza grupa i nasz świat są każdego 0. Jest to więc również odpowiednik chmod 700. I na pewno będę próbować zrozumieć mapowanie pomiędzy tymi. Nie jestem pewien, czy to ma pojawią się na quizie przed, ale byłoby Pytanie, że mogę zapytać. [00:36:18] Tylko trochę będzie nawet dalej w chmod tutaj, tutaj jest bardzo ogólne Struktura rozmowy chmod. Tak, oczywiście, mamy chmod tutaj. Referencje, co odnosi się to tego Kim jesteśmy dając te uprawnienia lub którzy są nam przy nich Uprawnienia z dala od. Mamy więc tutaj w uprawnieniach, jak daliśmy Ci chmod a Plus X, jak zobaczymy niebawem. oznacza po prostu dać to specyficzna uprawnienia dla każdego. Daj im wszystko. Można więc dobrze mieć u Plus X lub g oraz x lub o Plus X lub wielokrotne z nich. Tak, że pierwsza część jest zawsze będzie odniesienia. Kim jesteśmy dając te uprawnienia, lub który zabieramy je z dala od? [00:37:03] Drugi jest operator. Więc chłopaki mają najczęściej do czynienia z plusem. To daje uprawnienia do kto dajesz im, natomiast minus, logicznie, usuwa je. Więc nic zbyt straszne tam. A następnie Tryby jest o czym rozmawialiśmy z czytania, pisania, lub wykonania. Więc plus x oznacza dać wykonywalny uprawnienia dla każdego. A potem, oczywiście, na których Specjalny plik lub katalog. OK? Każdy dobry z chmod? Nie jest tak źle? [00:37:37] OK, więc HTML, każdy z was tyle stary to-- MySpace wiek? Wysłałem to do mojej sekcji, i dosłownie połowa ludzi spojrzał na mnie, jakbym był szalony. A ja na to, chłopaki, Nie jesteśmy, że stare. Chodź. Więc HyperText Markup Language, to szczerze, po prostu sposób dla Ciebie do wyświetlania pewnych rzeczy w internecie. Więc jest to język znaczników. To nie jest język skryptowy. Nie ma logiki w tym. Jest to po prostu zmieniać wyświetlany jest sposobem coś. OK, więc to ważne rozróżnienie zrobić. Jest uważany za język znaczników, Nie językiem skryptowym. [00:38:12] Mamy tu więc nasze znaczniki HTML. Na tym slajdzie są prawdopodobnie większość Te, które powinieneś znać i być naprawdę komfortowo. Tak oczywiście, mamy nasz tag HTML, który oznacza, że ​​wszystko w między tymi dwoma będzie HTML. Mamy jakiś związek, który oczywiście daje link do zewnętrznej strony internetowej. Niektóre tytuł, w naszej głowie tutaj. I mamy ciało h1, która jest nagłówek, więc to sprawiają, że miło i śmiałe i większe. A potem, mamy jedne p, który jest akapit. Powinieneś wiedzieć, i znać rzeczy jak, jak można wstawić obraz, są jakieś inne zajęcia nagłówka? I na pewno będzie wygodne z div. Więc te mają większość tagów które należy znać. Ale oczywiście, jak wszystko w CS 50, lista nie jest wyczerpująca. Więc upewnij się odświeżyć, że. [00:39:08] CSS, więc CSS, jeśli ktoś z was oglądać Seminarium z mojego dwa tygodnie temu, jest tak naprawdę sposób projektować swoją stronę internetową? OK, więc mamy trochę język znaczników. HTML, które zajmuje tylko tekstu i w których może znajdować się na stronie. Ale CSS jest naprawdę co sprawia, że ​​jest ładna. Można mieć to w HTML pliki, ale jak mówimy o później, Jestem pewien, że to może być następny slajd, to Powszechną praktyką jest, a właściwie praktyki, które naprawdę zachęca, , aby zachować je oddzielić, gdy mówić o MVC i tego całego paradygmatu. To naprawdę co to zasila. [00:39:42] Więc CSS jest po prostu sposobem na dokonać rzeczy wyglądają całkiem. Te rzeczy tutaj, jak Ciało i #title i .info, nazywane są one selektorów i co oni robią jest ich wybrać konkretne rzeczy w swoim pliku HTML i mają zastosowanie niezależnie od stylu, bez względu na rodzaj rzeczy, które chcesz, do tego konkretnego elementu swojej sieci strona. Więc tutaj mamy kolor tła i kolor i rodziny czcionek, który jest jest stosowane do tego, co znajduje się w organizmie. Jeśli więc spojrzał tutaj, to nie stosuje się w tytule. To stosuje się tylko do tego, co jest w tych selektorów ciała, OK? [00:40:22] Z tytułu tutaj, to jest Będzie to samo, kolor tekstu jest niebieski tylko jedzie wpływać na to, co jest w zasięgu selektory tytuł. Jak również informacji tutaj tekst będzie różowy, bez względu na informacji, która jest tutaj. Jedyne więc, że będzie różowy na tej stronie jest data, od poniedziałku, 17 listopada 2014. OK, więc CSS jest po prostu sposobem na większą kontrolę over-- tak? [00:40:48] PUBLICZNOŚCI: Dlaczego masz używać skrótu z tytułem? [00:40:51] HANNAH: Następny slajd, obiecuję! Będziemy tam dostać. Tak to jest, dlaczego mamy używać skrótu. Więc selektorów wziąć na trzech głównych Formularze, że mówimy do was o. Fyou Chcę dowiedzieć się więcej, jest mnóstwo tam. Jest świetna dokumentacja CSS. Jest nazwa znacznika, który ma do czynienia z zaledwie normalnych znaczników w HTML. Więc h1, p, div, h2, te różne rzeczy. A może po prostu wymienić te, jak to jest. Tak więc, jak widzimy tutaj z Ciało, to jest normalne znacznik. Tak więc możemy po prostu umieścić ciało, kiedy mówimy w naszym pliku CSS. [00:41:26] Z tytułu, cały powodu mają tego mieszania jest co mamy uważane ID. Tak Identyfikator powinien być zawsze unikatowa w obrębie strony HTML tak, że gdy jesteś odnosi się do tego, można wiem, że jesteś tylko odnosząc jednego konkretnego rzeczy. Więc w tym przypadku tutaj, w naszym h1 tutaj, CS 50 Przegląd sesji, mamy identyfikator tytułu. Aby więc po prostu zwrócić się do Kawałek naszej HTML, robimy tytuł skrótu. Wystarczy umownie, identyfikatory są oznaczone z mieszania przed nimi. W ten sam sposób, widzimy Informacje o to klasa. I tak jest klasa z CSS wyznaczony jako dot klasy lub dot cokolwiek to klasa. Więc w tym przypadku tutaj, to jest informacji. [00:42:10] Więc biorę go z powrotem. Obie te byłyby różowy dla naszego CSS tutaj ponieważ oba mają klasę informacji. A w naszym pliku CSS, mamy wyznaczony że cokolwiek z grupy informacji jest różowy. Czy to ma sens? Tak? [00:42:27] PUBLICZNOŚCI: Jeśli było zrobić wszystko w biały korpus, a następnie starać się coś w nim niebieski, to, że przyczyną problemów? [00:42:34] HANNAH: Tak CSS kaskadowych arkuszy stylów. Więc to, co jest w kierunku Dno ma pierwszeństwo. Więc jeśli coś zrobić z ciałem, i zrobić wszystko, co białe, a następnie później zmienić tytuł lub zmienić tekst w ciele, nadpisuje to. Więc wszystko w kierunku Dno ma pierwszeństwo. Tak? [00:42:56] WIDOWNI: i identyfikatory są unikalne, ale zajęcia mogą być bardziej? HANNAH: Prawo. Więc identyfikatory powinny być unikalne, a zajęcia mogą odnoszą się do tak wielu rzeczy, jak chcesz. Jeszcze jakieś pytania? Tak. [00:43:09] PUBLICZNOŚCI: [niesłyszalne]. Zastanawiam się, czy który robi różnicę. HANNAH: Przykro mi, jakie było pytanie? PUBLICZNOŚCI: Jest mała "F" i kapitału "F." HANNAH: Więc różnica pomiędzy małym "f" i duże "F" nie powinno zmienić. Tak więc "f" będzie 15 albo sposób. Fajne, coś jeszcze? Każdy dobry, CSS? Tak? [00:43:30] PUBLICZNOŚCI: Przykro nam. Czy masz klasę i identyfikator? [00:43:35] HANNAH: Tak, można. Rzeczy mogą mieć zarówno klasy i identyfikator. A ja bardzo polecam testując je na własną rękę. CSS dowiesz się najlepiej właśnie poprzez coś bardzo prosta strona internetowa, sporządzanie niektóre CSS, a tylko widząc, jak ich interakcji. A zyskasz bardzo dobry, intuicyjne wyczucie, jak to działa. [00:43:56] OK, wszyscy dobrze z CSS? Jesteś wszystkim zamiar zrobić piękne strony internetowe z CSS teraz. OK, po prostu najlepsze praktyki, rzeczy, o których warto pamiętać, rzeczy that-- to dlaczego zadokować Ci projektanta i etażerka. Więc zamknij wszystkie znaczniki HTML. Więc jeśli masz otwarte nadwozie, nie powinno być blisko ciała. Jeśli masz otwartą pkt, nie powinno być blisko ust. Sprawdź swoją stronę sprawdza. Powinniście być bardzo znane z tego z p-set siedem z CS 50 finansów z walidator W3. I tak jak powiedziałem wcześniej, jeden z naszych wielkich paradygmatów oddziela swój styl z CSS od znaczników, które jest w języku HTML. A potem, oczywiście, mamy ten wielki XKCD tutaj. Yay, komiczny! [00:44:38] OK, protokół TCP / IP. Między nimi a HTTP, w zasadzie są oba protokoły. Więc może po prostu myśleć ich jako zbiór reguł które regulują jak rzeczy poruszać się po internecie. Więc kontroli transmisji Protokół lub protokół internetowy, jest tylko sposobem, aby upewnić że dane dociera tam, gdzie to będzie i że wiemy, czy jesteśmy coraz brakujących danych. Więc jeśli myślicie powrotem do wykładu kilka tygodni temu z Dawidem gdzie mieliśmy cztery koperty, że były ponumerowane jak jeden z czterech, dwa z czterech, trzech z czterech, czterech cztery, to jest po prostu zbiór zasad. Powiedzieliśmy, OK, gdy jesteśmy wysyłanie więcej niż jeden pakiet, będziemy liczyć to z tego, co to jest numer i ile łączna że Użytkownik powinien dostać. [00:45:19] A to jest po prostu mówienie kto odbiera dane, czy zdobyć wszystko, lub jeśli coś zgubił po drodze. I muszą prosić o nią ponownie. To jest naprawdę tylko zbiór przepisów. To jak można myśleć o tym, OK? A także, że określa port, który Chłopaki can-- Wiem podczas wykładu, mieli całą listę portów. Ale nie mamy ich tu teraz. [00:45:41] Tak Protokół HTTP jest, ponownie, jest to kolejny protokół. Więc jest to kolejny zbiór zasad które regulują, w tym przypadku, jak hipertekst jest przenoszony. Więc po prostu pozwala przeglądarek porozmawiać z serwerów internetowych. I jak tu powiedziane, że to jak ludzki uzgadniania. To jest po prostu sposobem rządzenia jak serwer WWW jest będzie współpracować z Twojej przeglądarce. A my mamy tylko kilka przykładów. Mamy kilka wniosków o gdzie GET jest metoda. Mamy protokołu HTTP 1.1, który jest wersja protokołu dla nas. A potem, gospodarz, który jest co my rzeczywiście próbuje uzyskać dostęp. A potem, jak widać tutaj, że uzyskać odpowiedź w tym 200 OK, jak nasz kod odpowiedzi HTTP. Mamy duży listę Idę ciągnąć się w ciągu jednej sekundy że chłopaki powinni znać. I mamy tego typu treści text / html, który po prostu mówi, jaki rodzaj danych jesteśmy otrzymaniu od serwera, OK? Ten gospodarz i tego typu treści są częścią nagłówków HTTP. Możesz mieć tak mało lub tak mało jak konieczne dla kontekstu, co masz do czynienia. Czasami można mieć dużo Informacje pochodzące z serwera. Być może są one prośbą dużo informacji od użytkownika. Zmienia się ona w zależności od kontekstu. Jeśli spojrzeć na CS 50 Study, jest dużo więcej na ten temat. Ale mamy dużo, aby uzyskać dzięki, więc będę na razie śmiało to jest OK z wami? Cool. Trzymaj się. I na pewno mają, że Cała lista of-- huh! Nie wiem, dlaczego tak jest całą drogę tutaj. Myślałem, że jestem dosłownie przeniósł go, gdy byłem sitting-- [00:47:15] DAVIN: Czy chcesz go nauczyć? A może chcesz, żebym go nauczyć? [00:47:17] PUBLICZNOŚCI: Myślałem, że mogliśmy po prostu pokazać je na początek. To znaczy, można przejść do im dalej, ale myślał, że bardziej sensowne od I Po prostu mówisz statusu HTTP. Więc oto cała lista. Myślę, że to, co się wydarzy jest Davin pójdzie do nich później. Ale to nie cała lista, Podgląd smaku przyjść. OK, mamy zamiar blow-- to będzie być oczywiście PHP katastrofy, jak żaden inny. [00:47:41] Więc PHP Hypertext Preprocessor, to rekurencyjny backronym, co oznacza, że ​​został nazwany coś innego. A potem były one podobne, to naprawdę nie ma sensu. Więc po prostu nazwany it-- i to był skrót, więc po prostu sprawiło, że PHP hipertekst preprocesora, które po prostu nie ma sensu. Zabawa historia. Jest to język programowania. Tak jak podkreślam, że HTML nie jest językiem programowania, jest to język znaczników, PHP jest językiem programowania. Jak wiesz, to jest bo nie jest logiczne. Istnieje warunkowe. Mamy zmienne, podczas gdy my mają żadnej z tych rzeczy w HTML. [00:48:12] W porządku, to mamy ten mały trochę tu, że jest jak smak PHP. Tak więc podstawy, nazwy zmiennych zaczynają się od znaku dolara. Wiele osób lubi to. Przypomina nam pieniądze. To wszystko jest świetnie. Wszyscy chcemy PHP. Więc nie określają Typ zmiennej już. Jest ona określana w czasie wykonywania. Tłumacz będzie jak, oh, my po prostu uruchomić poprzez, i w zależności od kontekstu, Zobaczymy, co rodzaje typów zmienne te muszą mieć. Nie ma główną funkcją. Rzeczy po prostu uruchomić. Chłopaki ze swoim importu w swoim Ostatnia p-set, zauważysz to. Nie było naprawdę główną funkcją. Po prostu napisał, co chcesz się zdarzyć. I to właśnie niby się stało. Więc to jest PHP dla Ciebie. [00:48:56] Tablice są bardzo podobne. Mamy jeszcze ten wspornik. Tutaj mamy kilka zmienną nazywa arr, i to równa to-- mamy nasze normalne notacja nawiasów. A my mamy jakąś wartość klucza. I duża różnica między C i PHP tablice jest to, że możemy mieć ten associate-- możemy powiązać wartości do kluczy. Więc zamiast tylko o tablica jest indeksowana od liczby lub pozycji tego elementu w tablicy, faktycznie możemy powiązać go z kluczem. Gdzie można powiedzieć, OK, chcę cokolwiek Wartość ta jest związana z owoców. A może mamy owoce udał się do bananów. Tak że to powrót banana do nas. [00:49:41] Ale w zasadzie, najbardziej potężne rzeczą jest jest to, że jeśli faceci pamiętam demo z wykładu, gdzie w zasadzie przepisał ortografii w PHP, i to was-- wyszukiwanie było naprawdę po prostu lubię, istnieje ten klucz? To naprawdę rodzaj władzy to. Nie trzeba do iteracji za pośrednictwem swojej tablicy. Nie musisz wiedzieć to, co jest w przestrzeni. To może być na końcu lub na początku. Tak długo, jak wiesz, klucz który jest związany z wartością, PHP może tylko pluć, że wartość prawo wycofać się na ciebie, OK? [00:50:09] A następnie, również po prostu tylko dlatego, że mają może mieć kluczowe par wartości nie oznacza, że ​​musisz. Możesz też po prostu stworzyć normalnie tablica jak tutaj, na dole, gdzie jest to tylko jeden, dwa, trzy, cztery. To są nasze wartości. A w rzeczywistości, ich klucze są indeksy. Dlatego kluczem dla jednego wynosi zero. Kluczowym dla dwóch będzie jeden. Tak dalej, i tak dalej, o ile jawnie przypisać klawisz, można założyć, że wartość jest tylko ich indeksu. Czy to ma sens dla każdego? Żadnych pytań? Niesamowite. [00:50:38] OK, foreach jest sposobem iterację swoich tablic. Tak więc mamy tu coś, tylko ogólna struktura. Więc foreach, nazwa naszej tablicy, a co chcesz dzwonić do siebie element macierzy, i możemy zrobić coś z ten element lub wartości. Tak więc mamy tu przykład. Mamy asocjacyjne Tablica z tych dwóch pozycji zaopatrzonym jest związany z foo a QUX są związane z baz. Tak Klawisze są bla i baz. Wartości są bar i qux. Więc foreach, mamy tablicę Tutaj jako pary wartości klucza. To pozwala nam na dostęp zarówno klucz i wartość. Być może po prostu chcesz wartości, w tym przypadku można po prostu zrobić jak arr jako wartość $, a następnie są po prostu dostęp do wartości jak iterację. Ale być może, dla niektórych Powodem, chcesz klucz, dlatego też wybrałam W tym przykładzie, zamiast. Więc rzeczywiście można manipulować klucz i wartość, w tym przypadku. OK? Pytanie? [00:51:41] PUBLICZNOŚCI: Jeśli chciałeś po prostu manipulować klucz, by co musisz zrobić foreach-- [00:51:45] Alison: Dokładnie. Więc jeśli chcesz manipulować tylko klucz, będzie trzeba jeszcze tego składni, ponieważ jeśli tylko mają arr jako coś, jako pierwsze, jest to zakładam chcesz wartości, a nie klucz. Więc jeśli kiedykolwiek po prostu tak jak arr, jak, może to jest jak $ elementu, to się założyć, że pytasz na tylko wartość w każdym punkcie. Jeśli wyraźnie chcą zrobić coś z kluczem, nawet jeśli nie zamierzasz zrobić coś z wartości, trzeba tę strukturę że mamy tutaj dokąd się wybierasz, wyraźnie prosząc na klucz i wartości. Świetne pytanie. Coś jeszcze? Cool. [00:52:27] Dobrze, PHP i HTML. Och, wracamy do p-set siedem ponownie. Tak to powinno wyglądać trochę znajomo. Więc to jest jakiś prosty formularz HTML że ma jakąś nazwę wejściową cześć. I widzimy, mamy metody GET. A jeśli pamiętamy z naszego p-set, gdy formularz jest składany, wysyła tablicę o nazwie $ _GET, który ma wszystkie z tych wejść lub zmiennych z forma, która powinna być manipulowane w naszej PHP. Więc w tym przypadku, użytkownik stawiałaby w ich imieniu. Podnoszą oni go. I widzimy, że mamy trochę tablicę tutaj. Mamy tablicę GET. A my dostępu nazwę. [00:53:11] Tak, że mówi, OK, daj mi Wartość, która jest związana z nazwą, nazwa jest kluczem tutaj. I że mapy bezpośrednio do tego, co powiedzieliśmy nasze nazwisko wejście jest. Więc to było co daje klucz do tego, co będzie w macierzy tutaj. Czy to ma sens dla każdego? Tak? [00:53:32] PUBLICZNOŚCI: Czy nazwisko w GET odnoszą do purpurowej linii w [niesłyszalne]? [00:53:36] Alison: Odnosi się do tego tutaj. Więc to pole tutaj, odnosi się do tej nazwy tutaj. Więc to może być nazwany jak numer telefonu, czy cokolwiek innego. Nazwa ta rzeczywiście mówi, co dzwonisz to pole? Jak zamierzacie odnoszą się do tej roli? I ta nazwa jest faktycznie jak jesteśmy mówiąc to pole nazywa nazwę. To jak jedziemy do niego dostęp. [00:53:59] Publiczność: Tak to jest jak, Nazwa wejścia równa Bob, and-- [00:54:02] Alison: Racja, to Bob by się tam. Dokładnie. Każdy fajne? W porządku, więc GET kontra POST to są dwa główne sposoby że przekazywanie danych w żądaniu HTTP. Powinniście widziałem zarówno tych z nadzieją. Więc z GET, informacje przechodzi przez URL. Więc jeśli kiedykolwiek zrobić Google wyszukiwania, YouTube, będziesz Prawdopodobnie zauważysz jakiś znak zapytania. A potem, wszystkie słowa że po prostu umieścić tam. I POST przekazuje dane w treści wiadomości HTTP. Tak więc w przeciwieństwie GET, to rodzaj rozważyć że dane są ukryte przed użytkownikiem. Ale to, co naprawdę ważne, aby zrozumieć jest to, że wciąż tak samo niebezpieczny jak GET. Analogia Lubię używać, jeśli jest masz swój numer konta bankowego i zapisz go na zewnątrz koperty, to dość niebezpieczne. Jeśli było napisać na kartce papier i umieścić go wewnątrz koperty, nadal jest bardzo niebezpieczne, ponieważ wszystko co musisz zrobić, to otworzyć, że się i spojrzeć na rzeczywistej zawartości wiadomości, aby zobaczyć, że. Więc to jest "ukryty", a ludzie lubią myślę, że to bezpieczne, ale to naprawdę nie jest. I jestem pewien, Davin będzie dostać się, że więcej, być może. Ale to jest ważne rozróżnienie zrobić i coś naprawdę dobrze zrozumieć. [00:55:15] OK, SQL, Structured Query Language. Wszystkie rzeczy, które widzieliśmy tak niedawno! Więc nie jest to w zasadzie tylko zaprojektowane, oczywiście, do zarządzania danymi. Chłopaki mieli dużo doświadczenia z to w tabelach z PHP MyAdmin. A istnieją cztery wspólne zapytania że chcemy wy wiedzieć. Więc nie ma aktualizacji, wkładka, wybrać i usunąć. Więc upewnij się, że wiesz, że ci naprawdę dobrze. Mamy zamiar iść przez nich bardzo szybko. [00:55:40] Więc aktualizacji, naprawdę, jak to, co Może myślisz, że to robi, to po prostu aktualizuje dane w bazie danych. Tak więc mamy tu jakiś przykład. Jest to ogólnie Struktura kwerendy aktualizacji. Więc zaktualizować tabelę że mówimy. I chcemy, aby ustawić pewne wartości, niektóre kolumny równa określonych wartości. Więc to po prostu aktualizuje tabelę, zmieniając Wartości w wszystkich wierszy w tym przypadku. Więc w tym jednym tu, rzeczywista Przykład mamy insert-- przykro. Zaawansowane, że zjeżdżalnia beze mnie wiedząc. [00:56:17] Więc ta tabela aktualizacje ustawić kol1 równa do VAL1 gdzie dom równa się "Kurier". Co to się robi, jest tylko zmienia, tylko aktualizuje te wartości w konkretnych miejscach. A więc w tym pierwszym, zmienia ich Wartości dla wszystkiego w tabeli, OK? Zapowiada się to zmienić kolumny dla każdego wpisu, dla każdego rzędu. Ale to, gdzie mógłbyś myśleć o nim jako kwalifikator. Więc to będzie tylko zmienić to w bardzo specyficznych miejscach. Tak więc w p-set siedem, kiedy Może aktualizacja kwoty środków pieniężnych że użytkownik miał, to pewnie miał gdzieś ID równa identyfikator sesji, prawda? [00:56:53] Ponieważ nie chciał zmienić ilość gotówki dla każdego, kto wykorzystywał swoją stronę. Chciałeś zmienić go na jeden konkretnej osoby, osoba ta jest kto używał go w tym czasie. Prawda? OK, więc włożyć, wkładki pewne wartości do tabel. To jak, kiedy jesteś stworzenie zupełnie nowego użytkownika. Ogólna struktura tutaj bez względu na to wstawić do tabeli mówimy. Wartości, za wartości, które właściwie chcemy wstawić. OK, więc jak widzimy tutaj, że nie wstawić do tabeli. To konkretne kolumny z ich odzwierciedlał wartości. Więc to mówi, wkładka nowy wiersz zawierający Wartości wart1 i wart2 pod te konkretne kolumny. [00:57:33] Więc może chcesz tylko wypełnić z połowy rzeczy w tym samym wierszu. To właśnie ta część tutaj pozwala zrobić. Pozwala on w rzeczywistości określić, która część. Tak? [00:57:44] PUBLICZNOŚCI: można tylko [niesłyszalne] komórki w wierszu [niesłyszalne]? [00:57:52] Alison: Jeśli tylko wypełnić niektóre części swojej rzędu, Reszta z tych komórek są po prostu puste. Tak długo, jak pozwala im na być pusta, to nie jest problem. Jeśli próbujesz uzyskać do nich dostęp, to zamiar wrócić trochę pusty element. Jednak ważne jest, aby wiedzieć że w niektórych tabelach oni, aby móc być null. Możesz biegać w Problem podczas p-set bo nie dopuszczać z Twoich wartości null. Ale można określić Opcjonalna wartość w tabeli. [00:58:26] OK, wybierz, więc jest to po prostu sposobem na uzyskanie szczegółowe dane w tabeli niektóre identyfikator, który chcesz. Więc wybierz gwiazda z tabeli gdzie kol równa coś po prostu oznacza, daj mi wszystkie dane związane gdzie ten konkretny kolumna jest prawdą. Więc w tym przypadku gwiazdy będzie zwrócić cały wiersz do ciebie, dobrze? [00:58:49] I wtedy, w tym przypadku, wybierz gwiazdę Tabela po prostu daje całą tabelę. A następnie usuń oczywiście, po prostu usuwa wiersz z tabeli. Więc usunąć z tabeli, co tabeli jesteśmy odwołującego, gdzie posiadanie identyfikator lub jakiś warunek jest prawdziwy. Tak? [00:59:07] PUBLICZNOŚCI: Pytanie. Dlaczego używasz podwójna cytaty i czy Ciebie zrobić cudzysłowia lub pojedyncze cytaty, czy to robi różnicę? [00:59:13] Alison: Podwójne cudzysłowy lub apostrofy nie dokonać zmian w SQL. Myślałem, że widziałem jedno pytanie. Tak? [00:59:20] PUBLICZNOŚCI: Czy to nie wpływa co dostaje uciekł z kwerendy? [00:59:25] Alison: Rob? [00:59:27] ROB: Co masz na myśli uciekł z kwerendy? [00:59:31] PUBLICZNOŚCI: Jeśli ktoś ma jedno zapytanie w formie of-- [00:59:36] ROB: Gdyby ktoś umieścić pojedynczy cudzysłów w, to tak długo, jak jesteś odkażania Twój wkład, to nie ma znaczenia. Ale jeśli używasz pojedyncza cytat i są nieprawidłowo ucieczki wprowadzanych danych, to tak, że trzeba umieścić pojedynczy cudzysłów w celu przerwania Twój kod. jeśli używasz cudzysłowy, muszą umieścić podwójne Cytując złamać kod. Ale tak długo, jak można uciec rzeczy prawidłowo, to nie ma znaczenia. To po prostu się do tłumaczenia do odpowiedniego symbolu w każdym razie. [00:59:59] PUBLICZNOŚCI: Co ucieczka oznacza? Alison: Cóż, jak dezynfekcja i ucieczki. Egzamin, który mamy, wielkie XKCD komiks, że pull up, gdzie trzeba, oh-- ROB: To ostatni slajd. Alison: To ostatni slajd, naprawdę? O mój Boże. Nie idziemy, doskonały. OK, więc w zasadzie można wstrzyknąć coś w tym zapytaniu SQL gdzie łamie ci Kod lub jako David pokazał w klasie, jeśli mamy jakiś singiel cytat 1 wynosi 1 i jeśli w naszym kodzie, po prostu bezpośrednio kopiować, że i mamy kończący pojedynczy cudzysłów, co się dzieje, to mamy niektóre wyrażenia, wartość true, które będą niech ktoś wejść do bazy danych a otrzymasz dane, które nie chce im się. Więc odkażania wejść po prostu oznacza, upewniając się, że uciekają one znaków i ich wyznaczania jako znaki, a nie rzeczy które powinny mieć należy rozumieć dosłownie w naszej instrukcji SQL. [01:01:04] Tak wielka rzecz, że powiedział że chłopaki powinien używać były HTML znaki specjalne, która jest czymś że warto przyjrzeć. OK, usunąć. Typy danych, to wszystko będzie w Internecie. Ponieważ mamy 15 minut w lewo, jestem tylko zamiar iść w prawo przez to. PHP i SQL, w zasadzie to jest po prostu mieliśmy funkcję kwerend pomógł chronić przed te złośliwe ataki. Jeśli więc używać zapytania, byliśmy upewniając że rzeczy zostały odkażone i etażerka. [01:01:36] MVC jest właśnie paradygmat projektowania, więc model, widok, kontroler. To jest po prostu sposobem na utrzymanie rzeczy miły i rozdzielić w ten sam sposób, że mamy tendencję do czynnika Kod do funkcji się. To jest po prostu ramy web design że pozwala na to samo. Zamierzam pominąć. [01:01:54] To jest coś, co byłoby super wygodne z. To świetny stolik tam. To daje funkcję Przykład modelu. Mam zamiar po prostu przez to, bo I naprawdę chcesz Davin, aby móc rozmawiać. Jeśli masz jakiekolwiek pytania, uprzejmie prosimy. Będę tu po. Wystarczy przyjść ze mną rozmawiać. Z tym, mamy stany HTTP. I Davin dzieje cios przez to w ciągu 15 minut. To będzie wielki. [01:02:17] DAVIN: OK. Uh, twój mikrofon? Tak. Przepraszam. Alison: Droga do przygotowania. DAVIN: Nie, jestem gotowy. Jestem gotowy. Zróbmy to. Jest to gotowy. OK. Przepraszam. Wylałem kawę na siebie. Nie wiem, czy jestem bardziej zdenerwowany, że wyglądam głupio, lub, że nie mam już kawy. W każdym razie, po prostu szybkie ogłoszenie o arkusz macie. Więc ta karta faceci nie mają Oficjalna co jest na quiz. To jest oficjalna, co jest w quizie. Ponadto, na stronie internetowej, możemy powiedzieć Ci, OK, to będzie na quiz. Więc w małej ściągawki masz, a nie oficjalne. I są błędy na jej temat. Więc najlepiej nie tylko ślepo go używać. Więc tak, to jest to. Więc przejdźmy do tego bardzo szybko. [01:03:05] Więc statusy HTTP. Więc co się dzieje, gdy strona, wszystko jest w porządku. Wszystko jest OK. Wszystko sprowadza się do Ci tak, jak chcemy. Dostajesz 200 OK. 301, gdzie widzieliśmy, że 301 wcześniej? Czekaj, co się dzieje? Przepraszam. Widzieliśmy wykładam cyny podczas bezpieczeństwa. Tak więc podczas bezpieczeństwa, więc jeśli David wpisane http, a następnie próbował przejść do cs50.net, masz zamiar zobaczyć 301 przeniósł. Dlaczego? Bo to będzie przekierować automatycznie do naszego HTTPS. [01:03:35] Więc 301 przeniesiony, po prostu to w zasadzie przekierowania. A może myślisz o tym w ten sposób. Każdy ze stanów, które rozpoczynają się 2-tych, te są podobne, OK, wszystko jest w porządku. Każdy ze stanów, które zaczynają z 3, to są przekierowania. Stany rozpoczynające się 4, co oznacza, istnieje jakiś rodzaj błędu klienta. Stany rozpoczynające się 5, że to jakiś błąd serwera. Więc niby zerwać statusy tak. Tak więc 304 nie nie modyfikowane, więc w swoim server.c P-set, więc powiedzmy, że cię załadowany cat.html. Wszystko wraca, masz 200s, OK, świetnie. [01:04:03] Powiedzmy, że go odświeżyć. Cóż, w środku, że cat.html, masz JPEG. Dobrze, że nie jest w formacie JPEG dostanie przeładowane. Nie będziemy pisać innym Żądanie GET do serwera, a następnie uzyskać wszystkie te informacje z powrotem. To się po prostu być: że obraz jest będą buforowane na komputerze. I tak, że obraz będzie 304. Więc to nie był modyfikowany. Jeśli następnie zamknąć, jasne pliki cookie, a następnie odśwież i spróbować załadować tę stronę znowu, masz zamiar zobaczyć 200S. Nie będziesz widzieć, że 304. [01:04:28] 400, złe wniosek, realne szybkie, jakby Ciebie zamierzali wysłać JSON obiektu do serwera a obiekt JSON było nieprawidłowe, zobaczysz coś takiego. 403, zabronione. Kiedy widzisz zabronione? Prawdopodobnie Prawdopodobnie? PUBLICZNOŚCI: chmod. DAVIN: chmod, tak. Więc nie ustawiono Uprawnienia poprawnie. 404 nie znaleziono. To jest po prostu nie istnieje. Więc jeśli wpiszesz w niewłaściwym adresem. 500, wewnętrzny błąd serwera, serwer Prawdopodobnie nie został prawidłowo skonfigurowany. Coś nie na końcu, ale coś po stronie serwera. 503? Wiele osób zobaczył 503s w ostatniej p-set. Kiedy to się stało? Słyszałem szepty. [01:05:05] PUBLICZNOŚCI: Kiedy Google decyduje jesteś robotem. DAVIN: Tak, gdy Google zdecyduje jesteś robotem, masz 503s. Więc to przeciążenie. Jeśli żądanie z serwera zbyt wiele, to zwykle przemijające. I większość z was go nie zauważył. Więc obejrzałeś 503. Możesz wziąć trochę Przerwa, to 503s odszedł, i wszystko było w porządku. [01:05:20] GABE: bardzo szybko, przy czy faceci się 500 w tym ostatnim problemem prawdopodobnie ustawiony? Tak? [01:05:27] PUBLICZNOŚCI: Zazwyczaj, jeśli Serwer posiada plik niesłuszna lub [niesłyszalne] ich Maszyna [niesłyszalne]. [01:05:34] GABE: Więc może to być konfiguracja Problem w PHP na serwerze. Ale to może być tylko coś jak średnikiem, że zapomniał. Jeśli piszesz PHP, niektóre błędna składnia może Ci coś takiego. OK? [01:05:46] DAVIN: Spoko. Czy chcesz mi zrobić tylko w górę, aż AJAX? [01:05:51] GABE: [niesłyszalne]. DAVIN: OK. Więc co jest DOM? Co DOM oznacza? [01:05:55] PUBLICZNOŚCI: Document Object Model. DAVIN: Nicea. I dlaczego nam się to podoba? Niesamowite. Dobra, więc to właśnie pozwala nam na dostęp HTML, wchodząc na naszą stronę bardzo szybko. Dlaczego? Ponieważ traktujemy nasze Strona, traktując nasze tagów HTML, traktując wszystko a jeśli są obiekty. Jeśli traktujemy ich jak oni obiektów, to co możemy zrobić? Cóż, możemy wywołać funkcje na nich. I to jest ważne, dlaczego? Cóż, ponieważ mamy zamiar użyć Obsługa JavaScript, żeby aktualizować naszą HTML, aktualizacji tych obiektów. Więc jeśli traktujemy je jak przedmioty, możemy wywołać funkcje na nich. Mam zamiar dostać się do tego trochę więcej, gdy idę do JavaScriptu, ale już wszystko widziałem, jak document.getElementById. Tak więc dokument jest taka sama Element, uzyskać elementu przez ID, więc masz zamiar szukać dla jakiegoś ID w tagu HTML. A potem można zrobić coś jeszcze do tego. Na przykład, jak document.body, Następnie możesz dodać dziecko. Więc masz zamiar znaleźć dokumentu. Masz dokument. Będziesz znaleźć ciało. Znalazłeś ciało. A potem, będziesz wywołać jakąś funkcję na nim. Więc dołącz dziecko, możesz dodać niektóre HTML na końcu wewnątrz ciała. Więc w zasadzie, jesteś po prostu traktując go jak przedmiot. Jesteś leczenia HTML tagi, takie jak przedmiot. I to sprawia, że ​​bardzo łatwo i szybko przejść przez nich. Ale także pozwala zadzwonić na nich funkcje więc można manipulować i zmieniać elementy. [01:07:04] GABE: Biorąc pod uwagę to, dlaczego jest takie JavaScript ładny język do interakcji z HTML? Kursy są, kiedy ludzie wybierali język przeglądarki, na stronie klienta, JavaScript jest naprawdę ładne, to naprawdę dobry w pracy z obiektami. I obiekty są trochę jak obiekty, które pojawiają się w HTML, więc jest to bardzo łatwe do JavaScript robić tego rodzaju postępowania. DAVIN: Nicea. Więc tutaj jest tylko przykładem. Więc myślę, że na zeszłorocznym quizu, lub może dwa lata temu poprosił Cię, aby utworzyć drzewo. Więc to jest dokładnie to, co chcesz zrobić. Więc zaczynasz z dokumentu. I wtedy w zasadzie wystarczy spojrzeć na znaczniki. Więc jeśli spojrzeć, mamy rozpocznie z tagu HTML. A potem, otrzymasz wskazówki o tym, jak to na podstawie wcięcia robić. Więc głowa rodzaj oddziałów off. W głowie, mamy kolejny tag tytułu. Tak więc, mamy tagu tytułu. A w środku, że mamy jakiś ciąg. I tak stanowią ciąg w kręgu. I wszystkie tagi są w kwadraty. [01:07:54] A jeśli spojrzeć, jeśli będziemy myśleć o tym, jak drzewo, i powiedzmy, że HTML jest rodzic, a potem głowa i ciało będą rodzeństwem. Oboje będzie dzieci tego rodzica. Tak, bo są oba rodzeństwa, są będzie trochę obok siebie w naszym modelu drzewa. A potem, w zasadzie zrobić dokładnie to samo. Więc nie jest trudne, ale poprosiliśmy pytania, jak to wcześniej w quizie. GABE: Czy ktoś Dotychczas pytania? Czy to dobrze? DAVIN: Spoko. JavaScript, OK, dobre rzeczy. Więc JavaScript, co to jest JavaScript? Cóż, JavaScript is-- to skomplikowany, ale są to tylko niektóre z atrakcji że należy pamiętać. Po pierwsze, jest luźno wpisane. Co to oznacza? Więc PHP was-- tak, co się dzieje? [01:08:35] PUBLICZNOŚCI: Nie musisz jawnie Stan jaki typ zmiennej jest. DAVIN: Idealny. Powiedział więc nie musisz się wyraźne określenie typu zmiennej. Dokładnie tak. Więc w C, gdybym miał int i wynosi 50, następnie w PHP, to jest po prostu tak, $ i, jest równa 50. Następnie w JavaScript, co rozmowa będzie? Var, prawda? To byłoby jak var i wynosi 50. Ale nie trzeba być jak, OK, to int. OK, to jest ciąg. Nie ma potrzeby, aby to zrobić. Jest to język interpretowany. Więc co to oznacza? [01:09:04] PUBLICZNOŚCI: Nie skompilowany. [01:09:06] DAVIN: Co nie jest kompilowany na myśli? Tak? [01:09:11] PUBLICZNOŚCI: Nie ma restrukturyzacji kod aby był on gotowy do komputera, aby go uruchomić. To właśnie podjęte w czasie wykonanie i komputer [niesłyszalne]. DAVIN: Tak, tak, to będzie przekazać za pośrednictwem tłumacza. Ale ty jesteś dokładnie prawo. Tak więc nigdy nie będziemy go skompilować, prawda? Kiedy robisz swoje PHP i kod JavaScript, nigdy nie nazywa kompilacji. Nigdy nie nazywa coś Marka lub coś podobnego. To dlatego, że nie jest to interpretować. Dlatego za każdym razem przechodzi przez przeglądarkę, idzie za pośrednictwem tłumacza. I to się dzieje na jej interpretacji tylko w czasie rzeczywistym zaraz dla Ciebie. Więc jakie są pozytywy i negatywy do posiadania interpretowany język i ma skompilowany języka? Więc compiling-- tak, co się dzieje? [01:09:50] PUBLICZNOŚCI: Zinterpretowany jest wolniejszy. DAVIN: W jakim sensie? [01:09:57] PUBLICZNOŚCI: Po Ciebie kompilacji, nie trzeba wykonywać żadnych dodatkowych czynności do wykonania to, że po tym [niesłyszalne]. [01:10:04] DAVIN: Prawo, doskonały. Więc to, co powiedział, jest w zasadzie, że kompilacja, podczas kompilacji, masz Wiele koszty początkowe, prawda? Będziesz go skompilować. Ale po skompilować, Kompilator będzie ich optymalizacji. To będzie szybka. To będzie w zasadzie tak szybko, jak to tylko możliwe. Z interpretacji, nigdy nie mają, że początkowe nakłady kosztów. Przeciwnie, będzie nieco wolniejszy za każdym razem, gdy je interpretować. I będziesz musiał interpretują to za każdym razem. Więc zamiast tego jeden koszt czasu, teraz jesteś będzie musiał je interpretować za każdym razem strona świadczy. [01:10:29] Więc tłumacze są dobre, ponieważ nie trzeba go skompilować, ale są one złe, że każdy limit czasu wczytywania strony, to będzie musiał interpretują JavaScript. I to będzie działać nieco wolniej niż gdybyś go skompilować. Pozwala communicate-- oh, czekaj. Używane do manipulowania Zawartość i wygląd. Właśnie o tym rozmawialiśmy. Wykorzystuje DOM. AJAX, zajmiemy się AJAX w trochę. A potem, to po stronie klienta. Więc PHP jest po stronie serwera. JavaScript jest po stronie klienta. Jakie są pozytywne na to? To mówi. Jest szybszy, prawda? Ponieważ nie masz to-- to szybciej. Nie musisz się komunikować z innym urządzeniem. Jeśli jesteś tylko na własną klienta, nigdy nie jesteś będzie musiał iść i zobaczyć, co jest na serwerze a następnie zgłoś się czy coś takiego. Tak więc po stronie klienta ma tendencję do być trochę szybciej. [01:11:15] GABE: Tak, ale to nie oznacza, PHP szybciej niż JavaScript czy coś w tym stylu. Biegną rodzaju w tym samym prędkość, bo są zarówno interpretowanych języków. Rzecz, która jest wolna o to wniosek. Więc rzeczywiście będzie wszystkie sposób do Brazylii aby uzyskać informacje że tam mieszka. Ale PHP i JavaScript, ich rodzaj prowadzony w tym samym tempie. Nie jest to, że jest szybciej niż inne. To również, sztuczka pytanie tutaj. Więc nigdy nie staje JavaScript kod maszynowy, prawda czy fałsz? [01:11:47] PUBLICZNOŚCI: Fałsz. GABE: Fałsz. Ma stać się maszyny Kod ponieważ kod maszynowy jest Jedyną rzeczą, maszyna rozumie. Nawet jeśli to nie jest kompilowany, nadal będzie kod maszynowy bo jest tylko tłumacza Program, który przechodzi linia po linii i przekształca tę linię do coś komputer rozumie. OK? Cool. [01:12:08] DAVIN: Tu jest tylko bardzo podstawowe Hello World programu JavaScript. Więc nie wiem if-- widziałem tego. Ale po prostu trzeba tu HTML. I zamiast faktycznie zrealizują JavaScript w znaczniki skryptów, tak, że zazwyczaj umieścić go w głowę. Musisz tagów skryptu. Upuść go tam. Wszystko robiliśmy tu mamy związane in-- więc mamy związane w pliku JavaScript tak. A ty wszystko zrobić, prawda? Więc jeśli były przy użyciu jQuery i Underscore.js w ostatniej p-set, nie masz mnóstwo kodu w górę w tagi skryptów, w twojej głowie. Można to zrobić, ale zamiast jesteś po prostu łącząc go w. A ty łącząc go w tak jak robisz to z CSS. Tak to właśnie sprawia, że ​​łatwiej przeczytać tak Twój kod nie jest tak długo, 1000 linii z mnóstwem funkcji, które nie może być używany. [01:12:52] Zamiast tego, po prostu połączyć je. To compartmentalizes go. To jak pisanie jakiś plik nagłówka i to w tym, że plik nagłówka w C Pomyśl o tym, jak ta. Więc co to robić? Cóż, to będzie działać. To będzie ostrzegać. Więc masz zamiar trochę pop-up o nazwie Hello World. Szybkie pytanie, po prostu kontrola poprawności, więc można zobaczyć tutaj, w ciele, powiedzieć, ciała, HTML tutaj. Co jest na pierwszym miejscu? Widzę tu ciała, HTML, czy mogę zobaczyć ostrzeżenie pierwszy? [01:13:19] PUBLICZNOŚCI: Alert. [01:13:20] DAVIN: Prawo. Mówi, że czujny. Dlaczego? [01:13:22] PUBLICZNOŚCI: Bo Ciebie go od góry do dołu. [01:13:24] DAVIN: Tak. Doskonałe. Więc mówi, idziesz od góry do dolny, który jest absolutnie poprawne. Będziesz go od góry do dołu. I w JavaScript, jQuery, masz funkcja, która jest jak onload lub gotowe, i mówi: OK, poczekaj wszystko to HTML załadował. A potem wywołać JavaScript. Ponieważ nie mamy, że tutaj, Pierwszą rzeczą, która się wydarzy jest to zamiar iść od góry do dołu. To będzie hit, że JS zadzwoń, to będzie ostrzegać. Po tym kliknij przycisk OK, że alert odchodzi. Potem to się pokazać Ci HTML ciała tutaj. Ładny. [01:13:54] OK, więc po prostu bardzo szybko, pisanie w JavaScript jest super szybkie. W celu stwierdzenia, zmienna, nazwa zmiennej. Więc w C, masz int i masz zadeklarować, jakie typu jest. PHP $. JavaScript, var. Rozmawialiśmy o tym. Dobra, chodźmy. [01:14:11] Pętle, to samo. Samo. Deklaracje funkcji, więc tak jak widziałem w C. Jedyne, co różni się tak, gdy można dostać się do innych języków programowania, jak jeśli wziąć 51 następny semestr i robisz z SML, można sobie z funkcji anonimowych. Więc to jest dokładnie to, co masz tutaj. Więc chcesz umieścić w sumie, jakaś wartość sumy. Ale może być robi to tylko raz. Więc nie chcesz, aby nazwać to funkcja Suma, nadać mu deklarację funkcji. Zamiast tego, po prostu go używać jako anonimowej funkcji. A widziałeś to dużo. Zobaczysz przykład to na kilka slajdów. Tak, zobaczymy. GABE: Dobre pytanie. Kiedy warto skorzystać anonimowa funkcja tutaj? Zasadniczo, jeśli chcesz coś, jak wydarzenia, się stało. Więc kiedy mysz jest kliknięciu na przykład chcesz trochę funkcja do wywołania. Tak więc można przejść do zdarzenia obsługi, można przejść do zdarzenia, rodzaj, funkcja chcesz być nazywany. A co jesteś przejazdem jest jak na koniec dnia, tylko wskaźnik do że instrukcje, do funkcji. Więc to nie jest tak, jesteś przejazdem Cały kod, tak jak wskaźnik do funkcji. I wtedy, gdy ktoś kliknie myszy, a następnie, że funkcja jest wywoływana. [01:15:17] Davina: Tablice, więc Ciebie posiadają deklarację tablicy. Następnie, tablica, aby to w. Bardzo szybko, co będzie to wydrukować? Co trzeci element jest? [01:15:31] PUBLICZNOŚCI: "JS". [01:15:32] DAVIN: Tak, to będzie "JS". Poczekaj, wróć. Jaka jest długość? [01:15:37] PUBLICZNOŚCI: Trzy. DAVIN: Trzy, prawda? Dokładnie to, co myślisz. OK, teraz iść. Tablice można dodać rzeczy do nich. Więc można wyjść poza ich początkowe granice. Po prostu coś, aby pamiętać. PHP, JavaScript, są mało nieco bardziej wyrozumiały w kategoriach rzeczy tak. Przedmioty, bardzo podobne elemencie w C, bardzo jak asocjacyjnych w PHP. Ci wszyscy mieliśmy doświadczenia z tym. Więc JSON, kiedy przechodzącą JSON tam iz powrotem w p-set osiem, to Twój obiekt. [01:16:03] Więc tak, przykład, bardzo szybko przykładem. Oto obiektu. Ten sposób można odwołać Obiekt, więc po prostu bardzo szybko, powiedzmy, że chciałem znaleźć się, OK, co jest oczywiście? I tak tu jest nazwa obiektu CS50. I wtedy, gdy miałem asocjacyjne Tablica, w jaki sposób to zrobić? Będę za pomocą klucza, prawda? Mam więc nazwę tablicy. Mam wspornik, cytaty, klucz, cytaty końcowe, wspornik końcowy, i że będzie odwoływać się, że elementem w mojej tablicy asocjacyjnej. Jak mogę odwoływać Oczywiście w moim obiektu? Ktoś wie? [01:16:39] PUBLICZNOŚCI: [niesłyszalne]. [01:16:40] DAVIN: Co się dzieje? PUBLICZNOŚCI: CS50.course. DAVIN: Tak, tak. Więc CS50.course. Więc sposób odwoływać rzeczy wewnątrz obiektu JSON jest kropką. [01:16:48] PUBLICZNOŚCI: Możesz również użyć składni tablic. [01:16:53] DAVIN: OK, w porządku. [01:16:54] GABE: Możesz również użyć wspornika CS50, ciąg, jak cudzysłów. PUBLICZNOŚCI: Myślę, że jest identyczny z PHP. GABE: To samo. DAVIN: Świetnie! Ale widać to inne miejsca. Tak, tak, nie poddawać się. To jest to, co właśnie powiedział. Tak na przykład JavaScript jQuery. Więc to jest mój DOM, prawda? Bardzo szybko, więc mam głowa, hello world, ciało. Mam przycisk. To mówi "poganiaj mnie", więc chcę go naciskać. I chcę coś zrobić kiedy jest kliknięty. Tuż obok. [01:17:31] Dobra, więc to jest mój JavaScript. Więc jQuery jest po prostu łatwiejsze sposób pisać JavaScript. Więc to, i to, co mam zamiar pokazać następnym, będzie jQuery, są identyczne. Tak będą robić te same rzeczy. Wystarczy jQuery wydaje się być trochę łatwiej. Ludzie mają tendencję do bardziej. Ma wiele funkcji. Więc ludzie mają tendencję do używania jQuery. Wszyscy wykorzystywane jQuery w ostatnim p-set. Więc co to robić? Co będzie to JavaScript-- tak to jest po prostu JavaScript. Co stanie to zrobić? Co będzie robić? [01:18:03] Więc po pierwsze, widać okna onload. Prawda? Więc nie widzieliśmy wcześniej. Więc to będzie czekać aż całe okno obciążeń. Więc to będzie czekać, aż Obciążenie HTML, wszystkie obrazy zanim nic nie robi. Powiedzmy więc, że nasz DOM został załadowany. Wszystko tam jest. Następnie, co się wydarzy? Tak? [01:18:19] PUBLICZNOŚCI: pojawia się przycisk. [01:18:22] DAVIN: Przycisk już tam jest. Tak, tak, już tam Buttona. Ale to będzie powiedzieć, OK, jeśli kliknij przycisk, tak już jest przycisk nie, jak tego tagu HTML. Poczekaj, wrócić bardzo szybko. Ten znacznik jest prawo tutaj będzie już przycisk. Istnieje już przycisk. Ale potem, JavaScript tag, tutaj, mówi, OK, chcę, aby uzyskać elementu przez ID, Przycisk wyszukiwania po prostu tak mówi, OK, chcę, mapować tej zmiennej do tego przycisku. Tak, że zmienna jest po prostu łatwiejszy sposób, aby uzyskać dostęp do przycisku. A ja mówię, OK, jeśli kliknę, że Przycisk, więc jeśli kliknij ten element, i element ten dotyczy przycisk, kliknij go, gdybym, Następnie chcę wywołać funkcję. Oto jeden z tych anonimowy Funkcje my mówimy. [01:19:03] Wystarczy zadzwonić niektórych funkcji. Wewnątrz tej funkcji, w zasadzie coś, co widzieliśmy los, alarm. Możesz kliknąć przycisk wyszukiwania. To będzie w zasadzie mają przycisk. Kliknięcie go. Masz ten wpis. X out. To wszystko. Tak? [01:19:16] PUBLICZNOŚCI: Więc jeśli umieścisz skrypt [Niesłyszalne], tag skrypt w HTML? [01:19:21] DAVIN: Możesz umieścić skrypt tag prosto w głowę bo masz to onload. Jest to również, że masz kliknięcie. Więc to będzie czekać, aż Kliknięcie na coś. Ale onload jest dla pewności, aby pewien, że ładuje wszystko do kodu HTML wcześniej. Tak? Chcesz coś powiedzieć? [01:19:40] GABE: [niesłyszalne]. DAVIN: Tak. [01:19:42] Publiczność: Tak onload unika określenie zmiennej przycisk wyszukiwania po prostu mówiąc document.getElementById Wyszukiwarka przycisk dot [niesłyszalne]. [01:19:49] DAVIN: Na pewno, ale potem ciąg po prostu staje się ogromne. Dokładnie tak, to jest po prostu ułatwienia dla ciebie, tak. Tak? [01:19:56] PUBLICZNOŚCI: Skąd my tworzenie window.onload? Albo document.ready? [01:19:58] DAVIN: Tak, jest. Tak, jest, sprawdziłem. [01:20:02] GABE: Nie dla nich zależy. [01:20:03] DAVIN: OK, więc mam zamiar powiedzieć, w każdym razie. Więc w zasadzie, tak w ogóle, więc window.onload czeka aż do DOM, wszystkie Twój HTML, ładunki. Czeka aż do obciążenia zdjęć. Czeka, aż wszystko się ładunku. document.ready, to po prostu czeka, aż Twoje obciążeń DOM. Po HTML jest wszystko, raz Twój DOM jest tam, zaczyna biec. To jedyna różnica. [01:20:23] GABE: Szybkie rozsądek sprawdzić tutaj. Więc to może być postrzegane rodzaj jak linii kodu, prawda? Bo to window.onload równa się kilka rzeczy. Gdy obsługa JavaScript, czyta to, prawda, czy false, funkcja zostanie wykonana. Fałsz. OK? Co dzieje się tutaj, jesteś tylko przejazdem funkcja ta jako anonimowy funkcji do window.onload. I wtedy, kiedy to będzie faktycznie zostanie wykonany? Po załadowaniu okna. To zdarzenie. Więc to jus t rzeczą jesteśmy mówić o wcześniej, prawda? Tak więc, gdy zdarzenie, Funkcja dzieje. To samo z onclick. [01:20:59] DAVIN: OK, więc ktoś wziął dala document.ready. Ale będzie to dokładna same-- PUBLICZNOŚCI: znak dolara, że jest document.ready. To skrót. [01:21:07] DAVIN: Och, to jest? OK, więc to oznacza, document.ready, skrót. Ale jest taka sama jak window.onload oprócz tej małej różnicy Mówiłem o. I to jest jQuery. Więc to jest dokładnie to samo thing-- jest obsługa JavaScript. To jest just-- niektórzy ludzie myśleć w masie więcej światła, elegancki wersja które ma wiele funkcji że prawdopodobnie będziesz używać. Więc to robi dokładnie to samo. [01:21:34] Więc rzeczy rodzaj podkreślić. Dlatego w tym drugim przykładzie miał document.getElementById, więc musieliśmy tak długo Ciąg, który dostanie Identyfikator elementu przez co ma. To się zastąpić niniejszym zaproszeniu tutaj. Więc widzisz znak dolara, wtedy zobaczysz ofertę, hashtag. Hashtag jest zawsze wyboru. To mówi, OK, to ma do czynienia z identyfikatorem. Co znajduje się selektor klasy? [01:21:56] PUBLICZNOŚCI: Dot. [01:21:57] DAVIN: Dot, prawo. Jeśli tylko będzie wybierz znacznik, co to jest? To tylko znak, dokładnie. I można użyć, że tutaj, jak również. [01:22:05] GABE: I po tagu, mamy na myśli, jak div, na przykład, lub głowy. [01:22:08] DAVIN: Albo organ lub p lub coś w tym stylu, tak. Więc tutaj, OK, zamiast mówić document.getElementById, jest to po prostu dokładnie to samo. Tylko w jQuery, to krócej. Więc jest to prostsze. Tak więc, nie więcej onclick, wystarczy kliknąć. Funkcja jQuery, wywołać tę funkcję. Alert jest dokładnie taki sam. Więc to jest trochę mniejsze lub nieco krótszy, trochę bit-- ludzie myślą to jest trochę łatwiej pisać, trochę łatwiejsze do zrozumienia. Ale to jest jQuery. Wielu ludzi się trochę nieco zdezorientowany i martwi i myślą, OK, jQuery jest inny niż JavaScript. Muszę pamiętać, to dwie różne rzeczy. To nie jest. Mam na myśli, że to inna składnia. Ale jQuery jest obsługa JavaScript. To tylko z pozoru lepsza wersja Może być łatwiej Rozumiemy, że ludzie używają. GABE: Tak, być Szczerze mówiąc, to znak dolara które można zobaczyć w jQuery, to tylko nazwa funkcji, która jQuery definiuje. To nie ma nic szczególnego. Czy to tylko nazwa funkcji, tak jak można zdefiniować znak dolara. [01:23:03] DAVIN: Tak, tak, o tym rozmawialiśmy. Kilka przydatnych rzeczy. Ja patrząc na starych quizów. W ciągu ostatnich kilku quizów, oni musieli używać takich rzeczy. Więc document.ready, więc upewnij się, że wszystko jest załadowany przed tobą zacząć robić rzeczy. Wybierz identyfikator, lub wybierz klasa, to bym po prostu być cytat dot trochę klasy, koniec cytatu. Prześlij, więc jeśli jesteś Składając formularz i połączenia funkcja ta po formie twierdzi. Warto, więc powiedzmy, że miałem formę uległość, jak nazwa użytkownika, adres e-mail, cokolwiek. Miałem pole tekstowe. Więc piszę w tym polu tekstowym. Cóż, jeśli chcesz uzyskać wartość z tego pola tekstowego, należy użyć kropki val. A potem, na dół, dot HTML jest sam jest jak dokument kropką getElementById dot innerHTML. Tak, że zamierza wrócić Ci HTML z tego ID. Tutaj, po prostu korzystać z niektórych ID lub cokolwiek dot HTML. To będzie uzyskać HTML z tego elementu. Jeśli chcesz to zmienić HTML, można przekazać mu coś. Więc chcesz być jak dot HTML, a następnie wewnątrz, cytaty, nowa HTML lub coś. [01:24:05] GABE: OK, więc AJAX. Bardzo podoba mi się zrozumieć AJAX naprawdę dobrze. Więc chcę, żebyście rozumiem AJAX naprawdę dobrze. Bo jeśli nie, masz dość dużo się dzieje aby zrozumieć wszystko, ma do czynienia z HTTP, PHP, Obsługa JavaScript, ponieważ to wszystko przychodzi razem w technologii AJAX. AJAX nie jest język. AJAX to technika. I wykorzystuje wiele różnych narzędzi. AJAX oznacza asynchroniczne XML JavaScript. Tak więc metoda, język, dane. [01:24:36] Tak więc głównym języku, którego używamy AJAX wywołać wszystko i obsługiwać wszystko JavaScript jest później. To dlatego, że dotyczy bardzo blisko do JavaScript. A potem jest asynchroniczne dlatego, że nie robi wszystkie na raz, gdy jesteśmy ładowania strony. To jest rzecz, że możemy robić rzeczy rodzaj równolegle. Ideą AJAX to, że chcesz to trochę konkretnych informacji. Na przykład, kiedy piszesz nowy nazwa użytkownika podczas rejestracji nazwy użytkownika, moja nazwa użytkownika jest abc123. A następnie, na koniec forma, trzeba kliknąć Wyślij. I miał udać się do serwera, a następnie sprawdzić, czy w bazie danych, abc123 już tam jest. A jeśli on już tam jest, to mówi, Nazwa już w bazie danych użytkownika. I, trzeba wypełnić z całej postaci ponownie. I to było naprawdę, naprawdę zły. [01:25:23] A potem ludzie mówią, OK, to dlaczego nie możemy po prostu zrobić małe żądania HTTP tylko sprawdzić aby sprawdzić, czy ta osoba jest w bazie danych Zanim użytkownik musiał przedstawić całą formę? Tak na przykład, gdy użytkownik zakończy wpisując abc123, chodźmy do serwera mało nieco i po prostu prawdziwe czy fałszywe z serwera, aby zobaczyć, czy to ważna nazwa użytkownika lub nie. OK, więc to jeden z głównym wykorzystuje AJAX dziś jeszcze. [01:25:49] DAVIN: Więc bardzo szybko, w AJAX w jQuery, można oznaczać, że Ciebie ma to być synchroniczne. Nie powinno się tego robić. Ale można to zrobić. A jeśli to zrobił, co by się stało? Cóż, na przykład, gdy jesteś coraz wiadomości lub cokolwiek, Twoja przeglądarka jest po prostu będzie czekać do momentu, że całe połączenie jest kompletne zamiast pozwolić zrobić inne rzeczy po kliknięciu go. [01:26:14] GABE: To nie przechodząc już. O mój Boże. Przykro mi! Tak. "W przeszłości potrzebne życzenie klienta Cała zawartość strony internetowej. " To, co powiedziałem. To pozwala nam na wysyłanie Dodatkowym GET lub POST wnioski bez konieczności aby odświeżyć naszą przeglądarkę. Tak więc na koniec dnia, jesteśmy faktycznie Dokonywanie żądań HTTP tutaj za pomocą JavaScript. Ponieważ wcześniej, tylko używane JavaScript aby zmienić kod HTML, który już przyszedł. A teraz, możemy użyć go do interfejsu z serwerów internetowych, jak również. Sposób to się dzieje to mamy klienta. Davin jest klient. A on ma wszystkie JavaScript wyświetlane, ponieważ HTML jest niemy. JavaScript jest inteligentny. Więc Davin Davin ma jego inteligentne części i jego głupi częścią. Zamierza wykorzystać swoją inteligentną część teraz. Zamierza wykorzystać JavaScript na żądanie, na przykład czy abc123 jest Baza danych, czy też nie. [01:27:04] Więc Davin, proszę, po prostu wyślij mi żądania HTTP. Dziękuję. Więc on właśnie wysłał żądanie HTTP. Widzisz to? I to właśnie w ten sam sposób że wszelkie żądania HTTP jest wysyłana. Przeglądarka Google Chrome lub coś, to zobaczymy, że Davin na próby wysłania żądania HTTP, pomoże hm trochę. I że pójdzie na drodze do serwera. Teraz, serwer będzie miał PHP tutaj, lub jakikolwiek inny język. Podobnie jak w normalnym żądania HTTP. To dość dużo normalne żądania HTTP. [01:27:31] A następnie serwer powie, OK, Davin chce mnie sprawdzić, czy Ten abc123 w bazie danych. Idź porozmawiać z modelu. Model mówi, że nie jest. abc123 jest dobra nazwa użytkownika. A potem, serwer WWW będzie używać PHP aby uczynić jakąś formę pliku. To może być dosłownie pliku że zawiera "tak" w nim, lub "nie, czy coś takiego. Może to być dowolny plik. [01:27:54] To może być jak będę wyślij DAVIN zdjęcie kaczki czy to w bazie danych i wyślij zdjęcie chomika jeśli nie jest w bazie danych. To byłby rodzaj głupie, ale to będzie działać. OK, więc mogę wysłać kaczkę do Davina. Davin swoją kaczkę. A teraz, kto będzie do obsługi kaczkę? Inteligentna część DAVIN znowu, więc obsługa JavaScript, prawda? JavaScript wysłany wniosek i JavaScript ma otrzymać wniosek i interpretować go w jakiejś formie. [01:28:22] I w tym sensie, to będzie powiedzieć, OK, jeśli kaczka to jestem dobry. Jeśli chomik, to będę powiedzieć, nie, już nazwa użytkownika istnieje w bazie danych. Ale zwykle, nie jesteś zamiar wysłać kaczkę. Masz zamiar wysłać coś nieco mądrzejszy. A co używamy jest XML. A ostatnio, używamy JSON. JSON jest po prostu JavaScript Oznaczenia obiekt, który jest w zasadzie masz Cały obiekt JavaScript. I umieścić go w pliku, tak jak że obiekt CS50, że chłopaki widziałem. Możesz umieścić go w pliku, a wysłać go do Davina. [01:28:53] Więc w tym przypadku, chciałbym aby obiekt JavaScript i po prostu powiedzieć, istnieje łatwy, tak. Czy użytkownik istnieje, nie. I wysłać go z powrotem do niego. I dlaczego JSON? Ponieważ osoba kto odbiera to zamiar użyć skryptu obsłużyć reakcji. I JavaScript działa tak dobrze, ponieważ to się nazywa JavaScript Object Notation. Prawda? Więc może po prostu wywołać funkcję i uzyskać ten miły obiekt od odpowiedzi. A potem, on będzie wiedział, czy że użytkownik znajduje się w bazie danych, czy nie. [01:29:22] Więc widzisz, wszystko to przychodzi wraz z serwerem WWW, A jeszcze jedno żądanie HTTP i jeden odpowiedzi HTTP i wszystko. Więc upewnij się, że chłopaki zrozumieć to wywołanie AJAX ponieważ pomaga zrozumieć wszystko pojęć mówimy. [01:29:37] Tak oto przykład AJAX z jQuery. I tu, robimy z get JSON. Więc my nie staramy się Obraz kota tutaj, lub kaczki. Staramy się uzyskać plik JSON. A potem będziemy czekać, aż to się robi, kropka zrobić. Oznacza to, że czekam na odpowiedź. To może trochę potrwać. Następnie można zobaczyć trochę załadunek. Jeśli chcesz to zrobić w witrynie. Więc dot zrobić, a następnie co się dzieje, gdy to się robi? Przechodzą w anonimowy funkcji, tak jak widzieliśmy wcześniej. Ponieważ odbywa się to wydarzenie, po prostu jak kliknięcie myszą lub cokolwiek, dla jQuery. Więc przekazać w tej funkcji z danych, tekstu, status i jqXHR. A w zasadzie, to tylko niektóre zmienne że można użyć później mieć Stan żądania HTTP Dane, które to będzie wysłać z powrotem do Ciebie. Tak więc można później interpretować i zrobić coś pożytecznego z nim. A jeśli nie, kiedy może nie? Cóż, kiedy żądania HTTP daje masz 500 czy coś takiego. Następnie, to będzie wam stan, jaki rodzaj uszkodzenia, które było, i wszelkiego rodzaju rzeczy. Musisz upewnić się, obsługiwać obydwa przypadki, w przeciwnym razie program wariuje. [01:30:42] DAVIN: Więc tak, to jest dokładnie to, co widziałeś na ostatniej p-set. Rzeczywista zapytanie AJAX jest w JSON get. To jest zaproszenie. A potem, wykonywane jest jak kropka sprawdza, czy jest to sukces. Jeśli to się powiedzie, chcesz coś zrobić z danymi. Wrócisz z tego Dane żądania JSON. To jest to, czego wrócić. Więc jeśli pamiętasz z p-set, Wielu z was było jak wspornika danych i lub cokolwiek, kropka lub tytuł łącza. Cokolwiek wróci z tego, co JSON pola są w tym obiekcie JSON, że to, co dostajesz z powrotem. Dane jest to, co dostajesz z powrotem. Stan Tekst, tylko coś, co pozwala wiedzieć, co się stało. A potem, jqXHR, to tylko Żądanie XML HTTP jQuery. To jest po prostu jak przedmiot. A potem nie, tak jak Gabe powiedział. GABE: W naszym małym przykładzie abc123 tylko, aby sprawdzić, czy to w bazie danych lub nie, dane będzie coś ci zrobi, jeśli nazwa użytkownika dot dane istnieją, co jest, co się generowany przez PHP Ci, jeśli nazwa użytkownika kropka danych istnieje, Mam zamiar poinformować, użytkownik nazwa już istnieje. Innego, jestem po prostu pozwolić Użytkownik przejść wypełnienie formularza. OK, bezpieczeństwo, fajne. [01:31:50] DAVIN: Chcesz mi? [01:31:52] GABE: mi się podoba. Więc coś, co wygląda znajomo. Już prawie gotowe. Więc to jest tylko przykładem chłopaki widzieli w klasie. Uzywasz argv1 tutaj. To tak, jakby argument wiersza poleceń. A my mem kopiowanie, że w buforze o wielkości 12. Co tu problem? Przepełnienie bufora! Ponieważ mamy bufor o wielkości 12. argv1 może mieć wielkość dwóch miliardów. Nie robimy żadnej kontroli granicznej. Więc możemy skopiować dużo pamięci. I będziemy szczególnie tym źle. Co mogliśmy zrobić, to bardzo, bardzo na myśli w tym przypadku? Tak? PUBLICZNOŚCI: Część dwóch miliardów rzeczy zawiera kod wykonywalny, który zwraca [Niesłyszalne]. GABE: Dokładnie. Więc to jest rodzaj rzeczą, że ludzie używają jailbreak iPhone, na przykład. Tak więc tego rodzaju rzeczy. Bo można po prostu zrobić urządzenie wykonania dowolnego kodu, które lubisz. Poprawka, więc poprawka jest łatwe. Wystarczy sprawdzić na granicach. Możesz sprawdzić wartość null, ponieważ zawsze sprawdzić wartość null gdy mamy do czynienia z tekstem. A potem, można podjąć długość ciągu przed. A jeśli ciąg Długość jest prawidłowy ciąg długość, która jest w odległości 0 i 12, to jesteśmy dobrzy. [01:33:03] DAVIN: Jeśli nie sprawdzić null, bardzo szybko, co się stanie? To będzie seg winy. Dlaczego SEG to winić? Bo dzwonisz strlen na null. GABE: Tak. Prawda czy fałsz, za pomocą jednego Hasło jest dobry pomysł. [01:33:19] PUBLICZNOŚCI: Fałsz. [01:33:20] GABE: Fałsz. Korzystać z wielu haseł i duże, długie nich. Ikony kłódki zapewnienia bezpieczeństwa. [01:33:26] PUBLICZNOŚCI: Fałsz. [01:33:27] GABE: Fałsz. To nic nie znaczy. To tylko ikony. SSL chroni przed człowiek w środku ataku. PUBLICZNOŚCI: Fałsz. GABE: Fałsz. OK, więc tych wszystkich, są fałszywe. Ładny. [Niesłyszalne] Chcesz o tym porozmawiać? Twoja kolej. Davina: Rodzaje ataków, człowiek w środku. Co znajduje się człowiek w środku ataku? PUBLICZNOŚCI: [niesłyszalne]. DAVIN: Jeśli wysyłasz HTTP wniosek, mogą to zrobić, prawda? Ale jeśli wysyłasz HTTPS, że prawdopodobnie nie będzie w stanie to zrobić. Jest wiele punktów wraz połączenia. Musisz routerów. Musisz serwerów DNS. Jeśli ktoś jest w stanie fizycznie zobaczyć, co wysyłasz, więc ktoś jest w stanie rzeczywiście się między wami, klient, jak i serwer, i jest w stanie zobaczyć, co wysyłasz, jest to mężczyzna w średnim ataku. Tak więc, aby zobaczyć, co starasz się uzyskać od serwera lub jest w stanie see-- gorsze może być w stanie zobaczyć ciasteczka lub coś w tym stylu. [01:34:16] Tak na przykład, jeśli że nie używa protokołu SSL, to może być w stanie zobaczyć Twoja sesja ciasteczka ID. I to się nazywa porwanie sesji bo widzi cookies ID, a następnie, że jest w stanie iść do Strona internetowa i udawać, że cię. Bo tak jak w PHP, pamiętaj, gdy zalogowany, co mamy robić? Stawiamy identyfikator sesji równe ID. Tak, że identyfikuje cię. Dlatego można zobaczyć swoje portfolio i nie wszyscy portfolio. [01:34:38] Cóż, jeśli jestem w stanie uzyskać to ciasteczko, wtedy mogę zalogować się na tej stronie. A potem, może po prostu zobaczyć swoje rzeczy i rozpocząć kupna i sprzedaży rzeczy. Więc to sesja porwanie. Ale nie powinien być w stanie to-- tak Ciebie Można użyć człowieka w środku ataku nawet jeśli są one przy użyciu protokołu SSL. Ale nie powinien być w stanie. Jeśli są za pomocą protokołu SSL, nie możesz sesji hijack. Dlaczego? Bo to wszystko jest szyfrowane, prawda? jeśli jest szyfrowana, i nadal jestem człowiekiem w średnim, nadal uzyskać dane. To dobrze. Ale jest szyfrowane. Tak naprawdę nie mogę go używać. Więc to jest dwa. [01:35:09] Bardzo szybko, krzyż witryna wniosek fałszerstwo. To tylko jeśli istnieje związek i że związek coś robi , że uważasz, że nie powinien. Tak na przykład, jeśli związek ten zamierza kupić akcje lub sprzedawać akcje, i nie wiedziałem o tym. Kliknąłeś na link, skierowała wniosek, kupił lub sprzedaży czegoś, nie chciałem robić. To, że. [01:35:25] Cross site scripting, więc tutaj, jesteś przechodząc poprzez zmienną q, zamiast przekazywać w jakiejś wartości, może q jest jak imię. Więc zamiast przekazywać sobie równych q Davin czy coś takiego, jeśli nie używać HTML znaki specjalne, jeśli Ciebie nie uciec, aby się upewnić, że to OK, to może mogę przekazać w zamian, powiedzmy, że tutaj mówię druku lub coś w tym stylu, wtedy będę mógł przekazać tutaj wywołanie skryptu. [01:35:51] Tak więc, zamiast dopiero się zmienną, Chciałbym uruchomić to połączenie skryptu. Tak więc w środku tego skryptu nazwać, co to robi? Lokalizacja kropka dokument, który zamierza Zmiana położenia dokumencie. Więc idę do przekierowania gdzieś indziej. To się nazywa zły facet w ten przykład, bardzo dobre. Nie można myśleć o słowa. A potem, co jeszcze gorsze jest to, że mam zamiar by następnie ustawić plik cookie, który jest pewne Zmienna mam na tej stronie. Mam zamiar ustawić go równa do cookie dokument dot. Dlatego mam zamiar wykraść cookies. I mam zamiar przekierowania niektóre informacje na stronie internetowej że nie powinno być dostępu. A wszystko to dzieje się dlatego, że jesteś nie ucieka, co widziałeś. Tak? [01:36:29] Publiczność: Tak po prostu to było jasne, że to vulnerable.com, że jest podatny na to. Więc może pojawić się, że związek na każdej stronie. Ktoś kliknie na niego, idzie do vulnerable.com. Masz ciasteczko do vulnerable.com. Powiedzmy, że Facebook jest wrażliwe, więc facebook.com. Masz swoje ciasteczko Facebook. Co to robi, że jesteś będzie facebook.com, to od razu przekierowuje Ci badguy.com, ale w tym informacji o cookies. Więc to szybkie przekierowanie, ale twój ciasteczko Facebook jest dołączony do tego przekierowania, i to w jaki sposób [niesłyszalne]. GABE: Tak, istnieje kilka bardzo wredne rzeczy że ludzie mogą zrobić, jeśli nie ma tego. Na przykład, jeśli Facebook pozostawiono Wszyscy zmienić swoją nazwę użytkownika, i nie wykonywać żadnej testów poprawności, więc Ciebie może wstawić coś JavaScript, który zmienia swój wizerunek na chomika. I że wstawia sam JavaScript w każdego, kto postrzega swoją stronę. Więc każdy, kto postrzega swoją stronę ma to samo w imieniu użytkownika. A ponieważ jest to wirus, rozprzestrzenia się w postępie geometrycznym. DAVIN: Będziemy pominąć ostatni jeden, a potem gotowe. Więc jest to tylko kolejny przykład. Więc to nie są one ucieczki ich tabeli SQL. Więc można go upuścić. Więc chcesz uciec rzeczy. To był poprzednim przykładzie z cross site scripting. Niestety zabrakło nam trochę późno. Jutro, przepraszam! Jutro mamy dyżury. Więc godziny pracy w Cabbot 08:00 do 11:00. Godziny urzędowania odpowiedzi na pytania konkursowe ściśle.