[00:00:02] [MUSIC PLAYING] HANNAH: Hi, semua orang. Terima kasih kalian begitu banyak untuk keluar dalam cuaca menjijikkan untuk kuis satu meninjau sesi. Seperti kalian tahu, kuis satu adalah Rabu ini. Jadi kita akan pergi melalui sekelompok topik. Davin: Hei, bisa saya katakan sesuatu yang nyata cepat? HANNAH: Ya, Davin yang akan untuk mengatakan sesuatu dengan cepat. Davin: Maaf. Hanya nyata cepat, jika Anda memiliki pertanyaan tentang kuis, Anda dapat pergi online. Pergi ke 2014 kuis satu, tentang kuis. Itu punya logistik tentang ke mana harus pergi, kapan harus pergi. Jika Anda secara bersamaan terdaftar, kami akan memiliki kuis makeup pada pukul 5:30. Atau jika Anda mengirim saya masalah, Anda memiliki beberapa masalah lainnya. Tapi 05:30 adalah make-up waktu pada hari Rabu. Tapi jika Anda memiliki pertanyaan, pertanyaan umum, online memiliki semua logistik. Jadi periksa dulu. [00:00:47] HANNAH: Awesome. Jadi, inilah daftar besar topik bahwa kita akan pergi melalui hari. Aku akan menutup semua C hal, yaitu bahwa kolom pertama. Jadi hal-hal yang kita C tertutup setelah kuis nol. Dimulai dengan linked list, yang meliputi pointer. [00:01:05] Baiklah, jadi kami melihat ini dalam sesi kajian terakhir, jadi saya akan pergi melalui ini adalah sedikit lebih cepat. Hanya mengangkat tangan Anda jika Anda ingin aku memperlambat atau mengatasi sesuatu lanjut. Tapi kita menggunakan daftar terkait karena kami mulai di C dengan array. Dan array yang besar, tetapi masalah adalah mereka memiliki ukuran yang tetap. Daftar link memungkinkan kita untuk membuat dinamis berukuran struktur data. [00:01:28] Dan kami memiliki operasi dasar kami, menyisipkan, menghapus, dan mencari. Dan kita bisa melakukan insert di kasus terburuk waktu konstan jika kita hanya menaruhnya di awal. Hapus dan mencari, terburuk kasus besar oh waktu n. Jadi sekali lagi, hanya untuk membalik melalui foto-foto ini, Aku tahu kami melihat ini terakhir kali, tapi kami ingin melacak linked list kami dengan melacak kepala linked list kami. Karena kita tahu bahwa masing-masing node kami hanya akan menunjuk ke simpul berikutnya dalam linked list kami. [00:01:58] Jadi itulah bagaimana kita melacak. Meskipun ini tidak potongan terus menerus memori, kita dapat menemukan mereka dengan hanya mengikuti panah yang berbeda. Berikut ini adalah struktur kami untuk daftar simpul linked. Kami melihat ini terakhir kali. Kami memiliki struct simpul kami. Dan memiliki dua sifat. Nomor satu, sebenarnya nilai yang kita ingin menyimpan. Dalam kasus ini, itu adalah bilangan bulat. Ini bisa menjadi string, itu bisa menjadi char, apa pun yang Anda inginkan. Dan kemudian, kita harus melacak node berikutnya dalam linked list kami. Sehingga akan menjadi pointer ke node berikutnya. Jika Anda hanya melakukan pencarian, seperti saya katakan sebelumnya, Anda harus mengikuti panah ke bawah. Penyisipan, Anda akan melacak di mana sisa daftar Anda. Dan Anda ingin mengarahkan kepala untuk menunjuk ke elemen baru, yang dalam hal ini adalah satu, dan kemudian satu akan mengarahkan untuk sisa linked list. Jadi sekali lagi, saya tahu ini sedikit sedikit pengulangan dari kuis nol. Jadi kita harus sangat berhati-hati tentang urutan di mana kita melakukan pointings ini sehingga kita tidak kehilangan jejak belakang daftar. OK, pertanyaan dengan hanya tunggal terkait daftar? Awesome, OK, keren. [00:03:06] Jadi sekarang, kita akan pergi ke sesuatu hanya sedikit lebih rumit, ganda terkait daftar. Jadi selain menjaga melacak node berikutnya, kami juga ingin melacak dari node sebelumnya. Dan ini memungkinkan kita untuk, jika kita di beberapa titik dalam linked list kami, tidak hanya pergi ke depan, tapi juga iterate mundur. Karena seperti yang kita lihat di daftar sendiri-sendiri terkait, jika kita berada di beberapa simpul, dan tiba-tiba, kami memutuskan, sebenarnya, saya ingin pergi ke node tepat sebelum saya, Anda harus pergi semua Dalam perjalanan kembali ke kepala dan iterate melalui sampai Anda menemukan node yang Anda cari. [00:03:35] Jadi ini membuat hal-hal sedikit lebih mudah karena kita mencoba untuk beralih melalui linked list kami. Tetapi membutuhkan kita untuk melacak satu lebih pointer, sehingga satu node bintang lagi. Baiklah, jadi inilah bagian yang menyenangkan. Kita akan berlatih menerapkan hapus untuk penggandaan daftar. Jadi ini adalah sesuatu yang permainan benar-benar adil untuk kuis. Hal ini menunjukkan pada kuis masa lalu. Jadi pasti bersiaplah kode sedikit di C. Jangan lupa bahwa dengan semua menyenangkan ini PHP dan JavaScript, kita masih harus ingat untuk melakukan C. Jadi memoles yang jika Anda merasa berkarat. [00:04:12] Baiklah, mari kita lihat apakah kita bisa melakukan ini. OK, keren. Jadi kita akan mencoba untuk mengedit tepat di sini, dan mudah-mudahan ini berjalan seperti yang direncanakan. Baiklah, apakah ada yang ingin memberikan saya saran bagaimana saya harus mulai? Satu-satunya asumsi saya keputusan adalah bahwa saya sudah telah struktur didefinisikan, yang saya menunjukkan pada halaman terakhir, pada slide terakhir. Dan aku menyimpan kepala terkait saya Daftar di beberapa pointer yang disebut daftar. Apakah ada yang ingin mendapatkan saya mulai? [00:04:42] AUDIENCE: Dapatkah Anda membuat baru simpul untuk panggilan melalui daftar? [00:04:45] HANNAH: Awesome, jadi kita akan membuat node baru untuk merangkak melalui daftar. Aku suka itu. Aku hanya akan menyebutnya pointer kalau itu OK. Dan di mana seharusnya itu awalnya dimulai? [00:04:57] AUDIENCE: Mungkin di kepala daftar. HANNAH: Beautiful. Kami ingin mulai kepala, yang Aku berkata akan disimpan dalam daftar. Mengagumkan. Sejauh ini, begitu baik. Dan sekarang, tujuan kami adalah untuk iterate melalui daftar sampai kita menemukan simpul dengan Nilai n yang ingin kita hapus. OKE? [00:05:13] Jadi sekarang adalah bagian di mana kami ingin iterate melalui. Can anyone menyarankan cara untuk iterate melalui? [00:05:19] AUDIENCE: Sebuah loop. [00:05:20] HANNAH: Sebuah loop. Saya menyukainya. Secara khusus, kita dapat mencoba loop sementara. OK, dan kita tahu bahwa kita telah mencapai akhir daftar kami ketika apa? AUDIENCE: Ketika pointer adalah null. HANNAH: Ketika pointer adalah null. Indah, aku menyukainya. OK, keren. Jadi maaf jika berlari brace saya jenis jatuh dari layar. Kami membawanya kembali. OK, keren. Apa selanjutnya? [00:05:48] Jadi kita tahu bahwa kita ingin menghapus simpul yang memiliki nilai n. Jadi mari kita cari kasus di mana kita benar-benar menemukan simpul kami. Jadi bagaimana saya akan memeriksa bahwa? Saya hanya akan mengatakan jika pointer, dan kemudian jika saya ingin mendapatkan nilai dari pointer, Aku hanya panah n, sama n, parameter yang kami berikan untuk fungsi ini, simpul yang ingin kita benar-benar menghapus. Setiap pertanyaan sampai di sini? Baiklah. OK, jadi sekarang mari kita menggambar cepat di papan untuk memvisualisasikan ini. [00:06:24] Jadi katakanlah ada simpul yang indah. Dan memiliki nilai, saya hanya akan mengatakan empat. Dan menunjuk ke depan node dalam linked list kami. Dan tidak ada sebelumnya. Jadi kita harus sebelumnya kami menunjuk apa-apa. Dalam hal ini, kami arahkan ke belakang. OK, hanya menyiapkan saya linked list di sini. Dan kami memiliki daftar yang menunjuk struktur ini untuk memulai. Aku akan menarik satu lagi untuk demi kelengkapan. OKE. Aku akan menunjuk ke depan ini. Dan saya akan menunjukkan bahwa satu kembali. Ups, maaf. Ya, punya ini mundur. Melakukannya lagi. OK, ada kita pergi. Baiklah, mendapatkannya. OK, inilah gambaran kita. [00:07:21] OK, jadi kami ingin mempertimbangkan dua kasus. Kasus pertama adalah jika simpul kita ingin menghapus adalah di awal daftar kami. Dan kemudian, kasus kedua yang kita inginkan untuk dipertimbangkan adalah apakah itu di tempat lain. Saya memahami bahwa ini benar-benar berantakan menggambar dengan semua Menghapus saya, tapi mudah-mudahan kita akan mencoba untuk membuat ini jelas dengan beberapa kode. [00:07:40] OK, jadi mari kita menutupi kasus ini di mana kami menemukan simpul kami, dan itu di bagian paling mulai dari linked list kami. Siapapun memberi saya saran di sini seperti apa Aku harus Anda lakukan untuk benar-benar menghapus simpul kami? Ini sedikit rumit. OKE? [00:07:56] AUDIENCE: Anda harus mengambil node yang akan sebelum dan membuatnya menunjuk ke salah satu yang akan menjadi setelah, dan mengambil node yang akan setelah dan membuat menunjuk ke node sebelumnya. HANNAH: Tepat. OK, jadi hal ini terjadi where-- kita memiliki dua kasus. Kami memiliki kasus di mana node yang kita cari adalah depan daftar. OK, dan kemudian kasus yang Anda dijelaskan sebaliknya, kan? Ini tempat lain dalam daftar. Jadi kau bilang, kita perlu melihat simpul sebelumnya, dan membuat simpul sebelumnya menunjuk ke simpul berikutnya. Jadi katakanlah kita mencoba untuk mengambil lima dalam gambar sangat kacau saya di sini. Kami ingin memastikan bahwa empat sekarang menunjuk ke enam. Four poin berikutnya untuk enam. Dan enam poin yang sebelumnya empat. Itulah tujuan kita di sini, kan? Ini adalah apa yang saya pikir Anda hanya mengatakan di sana. [00:08:56] OK, jadi mari kita mendapatkan potongan pertama. Mari kita lakukan memiliki pointer sebelumnya sebelumnya. Jadi empat berikutnya harus menunjuk ke apa? Tepat, dalam hal ini, enam. Jadi kita harus mengatakan pointer, selanjutnya. OKE? Baiklah. Jadi mari kita menyingkirkan gambar jelek ini dan mencoba untuk menarik yang sedikit lebih baik. Kami memiliki daftar kepala kami di sini. Dan yang menunjuk ke node pertama dalam linked list kami, yang kami katakan adalah empat. Berikut simpul kedua, lima. Dan simpul ketiga, enam. Hanya mencoba untuk menarik sama persis gambar, hanya sedikit lebih bersih. OK, jadi empat berikutnya awalnya menunjuk ke lima. Lima berikutnya poin menjadi enam. Enam poin yang sebelumnya lima. Dan lima di poin sebelumnya untuk empat. Jauh lebih bagus! OK, keren. [00:10:04] Jadi sekarang, apa yang kita lakukan hanya di sini, ini baris kode, yang mengatakan pointer sebelumnya selanjutnya, jadi apa artinya? Itu berarti jika kita sedang melihat lima, pergi ke node sebelumnya, dan itu berikutnya harus sekarang arahkan ke lima berikutnya. Jadi pada dasarnya, apa yang dilakukan adalah yang menghapus panah ini dan membuatnya melewatkan tepat di atas lima. Apakah itu jelas? Saya tahu bahwa bisa menjadi sedikit samar. Saya melihat beberapa mengangguk kepala. Itu bagus. OK, keren. Sekarang, apa langkah selanjutnya? [00:10:39] Aku ulang berikutnya. Sekarang, yang panah lainnya apakah saya harus berubah? Yang satu ini di sini. Enam sebelumnya. Kami tidak ingin enam sebelumnya untuk menunjuk ke lima lagi. Kami ingin menunjuk ke empat. Apakah gambar yang masuk akal? Jadi sekarang kita benar-benar dapat mengambil lima. Jadi mari kita mendapatkan bagian itu. Apa yang harus saya lakukan sebelum saya ulang enam sebelumnya empat? Setiap ide di sana? [00:11:14] AUDIENCE: Bebaskan node antara mereka dengan menetapkan ke nol? HANNAH: Cool. Jelas, tujuan akhir kita adalah akan membebaskan node. Jadi kita bisa melakukan itu di sini. Gratis pointer. Tentu saja. Tapi bahkan sebelum itu, mari kita hanya-- benar tujuan kami di sini adalah untuk mengatur pointer berikutnya sebelumnya sebesar pointer sebelumnya. Saya tahu ini semakin ditutup-tutupi. OK, mari kita take-- dingin. Dapatkah orang melihat garis bawah ini? Atau itu super kecil? [00:11:50] Jadi sebelum kita mengeksekusi baris ini di sini, kami ingin untuk memastikan bahwa pointer berikutnya tidak nol. Karena jika pointer berikutnya adalah null, apa jenis kesalahan Saya akan dapatkan ketika saya mencoba untuk referensi pointer nol? AUDIENCE: Seg kesalahan. HANNAH: Sebuah kesalahan seg, indah. OK, jadi kalau itu tidak null, maka kita dapat mengatur ulang. Dan kami memiliki enam poin lagi untuk empat. Pertanyaan sampai titik ini? Iya Nih? [00:12:17] AUDIENCE: Dalam pertama Anda jika pernyataan, apakah Anda artinya memiliki panah selanjutnya, atau [tidak terdengar]? HANNAH: Aku berarti pointer panah n. Jadi pada dasarnya, apa yang saya coba lakukan adalah mengatakan, node saat yang aku iterasi, node saat yang Aku sedang melihat, aku menyimpan dalam pointer. Dan aku ingin tahu pointer nilai, yang dalam hal ini adalah n. Dan saya ingin melihat, adalah node yang saya cari untuk node saya bertujuan untuk menghapus? Jadi itu sebabnya kita miliki di sini pointer n. [00:12:47] AUDIENCE: Jadi panah akan untuk n, Anda menetapkan nilai dan menyimpannya dalam sebuah simpul yang disebut n? [00:12:55] HANNAH: Jadi itu seperti jika saya melalui linked list ini dan menunjuk ke lima. Jika saya ingin mendapatkan nilai tersebut, jika Saya ingin mendapatkan jumlah itu, 5, Saya harus melakukan pointer panah n. Keren? Ya. [00:13:07] AUDIENCE: Apakah n nama variabel? HANNAH: Ya. Jadi jika kita membalik kembali satu slide, n adalah nama dari nilai bagian dalam node dalam linked list kami. Dan aku tahu itu bisa mendapatkan sedikit bit membingungkan karena kita juga menyebut hal bahwa kita ingin menghapus n. Jadi di situlah yang satu baris berasal dari. Ya? [00:13:27] AUDIENCE: Apa yang Anda miliki [Tak terdengar] bagaimana mereka bekerja? Sebuah pointer [tidak terdengar]? [00:13:35] HANNAH: Tentu. Apakah Anda berbicara about-- garis yang? AUDIENCE: Baris terakhir [tidak terdengar]. [00:13:44] HANNAH: Tentu, OK. Jadi mari kita lihat gambar di Untuk mencoba untuk menjelaskan hal ini. Maaf, untuk kamera, pertanyaannya adalah dapat kita jelaskan pointer panah pointer sebelumnya berikutnya. OK, jadi katakanlah kita berada di lima dan tujuan kami adalah untuk menghapus lima. Jadi pointer berikutnya, yang ini tiga node apakah itu memberi kita? Yang membawa kita ke node keenam, kan? [00:14:10] OK, jadi sekarang kita minta selama enam sebelumnya. OKE? Dan kita ulang ini untuk menjadi sama dengan empat, yang kebetulan lima sebelumnya. Aku tahu, itu super sulit untuk melacak. Saya sangat merekomendasikan Anda menggambar jika Anda mendapatkan pertanyaan seperti ini. Iya Nih? [00:14:30] AUDIENCE: Apakah alasan bahwa kita tidak memiliki [tidak terdengar]? [00:14:37] HANNAH: Tepat. Jadi pertanyaannya adalah, mengapa kita tidak perlu memeriksa di sini? Mengapa kita tidak perlu memeriksa bahwa pointer sebelumnya tidak sama dengan nol? Dan itu karena kita sudah sudah dipisahkan terjadi jika pointer di awal. Pertanyaan yang sangat bagus. Ada lagi hal ini? OK, keren. Jadi mari kita selesaikan itu. Kita sudah hampir sampai. [00:14:59] Jadi bagaimana jika itu adalah di kepala? Bagaimana jika bukan mencoba untuk menghapus lima, kita benar-benar ingin menghapus empat? Apa yang akan saya lakukan? Nah, saya ingin me-reset kepala saya untuk apa? Shout itu? AUDIENCE: Yang setelah. HANNAH: Beautiful. OK, jadi kami ingin daftar untuk menunjuk apa pun pointer simpul berikutnya adalah. Baik Lah. Dan hanya untuk kelengkapan dunia kepentingan, kami akan ingin memeriksa bahwa selama daftar kami tidak null, selama daftar kami tidak kosong, maka kita ingin mengatur kami sama sebelumnya nol. Pertanyaan sejauh ini? Satu langkah from--? [00:15:53] AUDIENCE: Apakah akan jika Daftar ini tidak sama dengan nol? [00:15:55] HANNAH: Ya, Anda benar-benar benar. Saya sangat minta maaf. Apakah daftar tidak sama dengan nol. Mengagumkan. Mencoba untuk membawa ini semua pada layar. Ini semacam jatuh. Maaf, guys. Dan last but not least, semua yang harus kita lakukan adalah kembali. OKE. Itu banyak berdesakan benar-benar cepat. Mengambil kedua untuk melihat lebih ini. Beritahu saya jika Anda memiliki pertanyaan. Ya? [00:16:20] AUDIENCE: Jika daftar adalah di Kepala, then-- menunggu, Nevermind. [00:16:26] HANNAH: OK, baik. Jadi ini adalah jika daftar di kepala, kita keluarkan untuk apa pun yang kita dimasukkan. Ya? [00:16:31] AUDIENCE: Bisakah Anda menjelaskan pertama jika pernyataan lagi? Jika pointer ke n adalah sama dengan n? HANNAH: Tentu. Jadi tujuan kami seluruh fungsi ini untuk menghapus simpul yang memiliki nilai n. Jadi jika kita menemukan, seperti kita iterasi melalui daftar kami, node dengan nilai n, itu salah satu yang ingin kita hapus. Jadi semua menghapus terjadi dalam yang besar jika pernyataan. Apakah itu masuk akal? Keren. Ya? [00:16:59] AUDIENCE: Mungkin Anda tidak bisa melihat itu, tetapi tidak anda juga membutuhkan garis untuk bergulir melalui daftar? HANNAH: Awesome. Mari kita membawa hal ini sedikit, dan kita akan membuang itu tepat di bagian bawah. Mungkin dewan akan sudah menjadi ide yang sedikit lebih baik. Jadi bagaimana saya akan bergerak pointer ke depan? [00:17:17] AUDIENCE: Pointer sama pointer ditambah satu. [00:17:20] HANNAH: Beautiful. Sehingga memungkinkan kita untuk terus iterasi melalui. OKE. AUDIENCE: Bukankah ada menjadi lain? HANNAH: Sekali lagi? AUDIENCE: Bukankah ada else setelah tua besar jika Pernyataan [tak terdengar]? HANNAH: Bagian mana? Maafkan saya. [00:17:38] AUDIENCE: traversal The, seharusnya tidak ada menjadi lain? HANNAH: Anda benar-benar bisa memiliki lagi. Karena saya memiliki kembali hak ada, Anda tidak perlu lagi. Tapi ya, pertanyaan yang bagus. OK, ya? AUDIENCE: Dapatkah kita berpikir tentang pointer yang bergerak melalui daftar sebagai mengambil nilai setiap node dalam daftar? Atau harus kita menganggapnya sebagai semacam eksternal ke dalam daftar? [00:18:00] HANNAH: Salah satu yang baik, saya pikir. Cara saya membayangkan itu Saya katakan, OK, saya pointer. Dan ini adalah saya. Ini adalah tanganku. Aku akan menunjuk ke berbeda hal yang saya ingin iterate melalui. Pertama, aku akan menunjukkan kepala daftar. Dan yang memberitahu saya aku akan menunjuk ke empat. Dan aku, karena sudah di luar daftar, Saya bisa menunjukkan masing-masing elemen. Jadi saya menganggap diri sebagai pointer. AUDIENCE: Jadi, ketika Anda menghapus salah satu elemen, Anda menghapus diri sendiri, sehingga untuk berbicara. HANNAH: Tepat. Jadi Anda menghapus hal Anda menunjuk ke. Jadi, dalam contoh yang kita lihat di mana kami mencoba untuk menghapus lima, ketika saya menunjuk ke lima, Saya ingin menghapus hal yang saya menunjuk ke. Tepat. Iya Nih? AUDIENCE: Apakah kita diurus dengan kasus di mana n tidak ada dalam daftar tersebut? HANNAH: Jika n tidak dalam daftar? Semua yang akan terjadi adalah Anda akan iterate melalui dan iterate melalui, dan kemudian, Anda akan untuk mendapatkan pointer menjadi nol, dan kemudian Anda akan dilakukan. [00:18:48] AUDIENCE: Jadi yang kita miliki kembali apa-apa? HANNAH: Kita bisa. Cara yang jika didefinisikan ini fungsi, saya hanya mengatakan bahwa ia mengembalikan membatalkan terlepas. Tapi Anda bisa memiliki sesuatu seperti kembali integer, dan memilikinya kembali negatif 1 jika gagal. Sesuatu seperti itu. Pertanyaan with-- ya? AUDIENCE: [tidak terdengar]? HANNAH: Maaf? AUDIENCE: [tidak terdengar]? HANNAH: Tentu. Jadi itulah actual-- setelah kami sudah melakukan semua pekerjaan ini bergerak semua panah ini sekitar, seluruh kami Tujuannya adalah untuk menyingkirkan node bahwa kita sedang mencari. Jadi dalam hal ini, membebaskan pointer, jika saya menunjuk ke lima, itu seperti menghapus simpul tengah ini. Itulah bagian pointer gratis. Itu masuk akal? [00:19:29] AUDIENCE: Jadi bahkan berpikir Anda tidak [tidak terdengar]? [00:19:31] HANNAH: Jadi kita mengasumsikan pada awal kami memiliki beberapa daftar yang already-- mereka telah menempatkan ini bersama-sama. Jadi dalam rangka untuk membangun ini daftar, mereka pasti [tidak terdengar]. Keren. Ada lagi dengan ini? Iya Nih? [00:19:46] AUDIENCE: Bagaimana jika daftar tidak sama dengan garis nol? [Tak terdengar]? HANNAH: Di sini? AUDIENCE: Ya. HANNAH: OK, semua yang saya lakukan adalah aku hanya memastikan bahwa sebelum saya mencoba untuk daftar dereference, sebelum saya mencoba mengakses sebelumnya, Saya ingin memastikan bahwa itu bukan batal jadi saya tidak mendapatkan kesalahan seg. Keren. [00:20:08] OK, saya tahu ini cukup banyak untuk melewati. Jadi geser ini akan menjadi dibuat tersedia untuk Anda. Sehingga Anda dapat pergi melalui itu secara lebih rinci. Iya Nih? [00:20:17] AUDIENCE: Mengapa daftar [tidak terdengar]? HANNAH: Tentu. Jadi daftar benar-benar menunjuk ke Unsur ini di sini, elemen pertama dalam daftar. Sehingga tidak bisa memiliki sebelumnya. Iya Nih? [00:20:31] AUDIENCE: Apakah titik pointer ke alamat yang sama dalam memori? Apakah itu menunjuk ke sama alamat dalam memori sebagai node bahwa itu menunjuk ke? [00:20:40] HANNAH: Ya, itu menunjukkan node ini dalam memori. [00:20:43] AUDIENCE: Benar, jadi ketika Anda [tidak terdengar]? [00:20:47] HANNAH: Dalam arti, ya. OKE. Baiklah, mari kita bergerak bersama dengan ini. Dan jika Anda memiliki pertanyaan lebih lanjut, bertahan pada akhirnya, dan kita bisa pergi melalui itu lagi. OK, keren. Sekarang, kita bisa melanjutkan hash tabel, mencoba, dan pohon-pohon, yang Anda punya super akrab dengan p-set lima, ejaan. [00:21:04] Jadi tabel hash hanya sebuah array dengan daftar sendiri-sendiri terkait atau ganda terkait daftar datang dari itu. Jadi kita memiliki semacam array asosiatif. Dan bagaimana kita tahu mana yang array ember untuk masuk ke dalam, kita menggunakan fungsi hash. Jadi dalam hal ini, bisa siapa pun menebak apa fungsi hash akan hanya didasarkan pada beberapa input dan output? [00:21:31] AUDIENCE: Nomor Surat alfabet. HANNAH: Tepat. Itu hanya menempatkan mereka dalam urutan abjad. Segala sesuatu yang dimulai dengan A dimasukkan ke dalam ember pertama. Semuanya dengan B dimasukkan ke dalam ember kedua, seterusnya, dan sebagainya. Awesome, OK. Dan fungsi hash adalah setiap fungsi yang mengambil dalam kata dan akan memberitahu Anda apa ember itu termasuk dalam. Jadi yang masuk dalam kami Array itu termasuk dalam. [00:21:55] Jadi setiap kali saya memberikan saya hash fungsi kata, harus memberitahu saya sama tempat setiap saat. Jadi jika kita menggunakan fungsi hash dari slide sebelumnya di mana kita menyortir oleh huruf pertama dari alfabet, setiap kali saya memberikan saya Fungsi hash "apple," itu harus selalu memberi saya kembali 0. Jadi jika saya memiliki sebuah apel untuk dimasukkan ke dalam tabel hash saya, jika saya memberikan "apel" ke fungsi hash saya, itu harus mengatakan, pergi memasukkannya ke dalam ember 0. Jika saya mencari apel dalam tabel hash saya dan saya katakan, di mana kekuatan apple hidup, Anda bertanya fungsi hash Anda. Dan ia mengatakan, pergi untuk ember 0. Baiklah? Pertanyaan dengan fungsi hash? Mengagumkan. [00:22:34] Berikut adalah sedikit lebih penjelasan rinci apa fungsi hash mungkin terlihat seperti. Baiklah. Sekarang, masalah dengan hash fungsi dalam dunia yang ideal, kita hanya akan memiliki satu hal dalam setiap kotak. Namun dalam kenyataannya, ada tidak hanya satu kata yang dimulai dengan A. Tidak ada hanya satu kata yang dimulai dengan B. Jadi dalam hal ini, jika kita tiba-tiba "berry," dan kami ingin meletakkannya ke dalam tabel hash kami, dan kita lihat, oh, tidak, pisang adalah sudah ada, apa yang akan kita lakukan? [00:23:03] Yah, kita memiliki dua pilihan. Opsi pertama adalah linear probing, yang hanya berarti pergi mencari ember kosong berikutnya. Pergi menemukan entri array kosong berikutnya. Dan hanya menempatkan "berry" di sana. Jadi saya tahu itu seharusnya pergi dengan pisang dalam ember satu. Tapi memasukkannya ke dalam ember tiga, karena ember tiga kosong. Pilihan lain mungkin apa yang Anda menerapkan dalam p-set Anda, di mana Anda memiliki chaining terpisah. Jadi masing-masing ember Anda, masing-masing elemen array, tidak hanya memegang satu kata, namun sebenarnya memegang pointer ke daftar kata. Sehingga jika Anda memiliki pisang dalam tabel hash Anda dan Anda tiba-tiba ingin untuk menambahkan berry, tidak ada masalah. Cukup tambahkan berry pada akhir, atau awal, dari daftar link. OK, mengagumkan. Pertanyaan dengan hash tabel sebelum kita melanjutkan? [00:23:58] Baiklah. Pohon dan mencoba. OK, jadi ini adalah pilihan lain untuk menerapkan kamus. Anda bisa membuat mencoba. Jadi itu adalah jenis khusus dari pohon yang berperilaku seperti tabel hash multi-level. Jadi, Anda akan melihat gambar di mana Anda memiliki sebuah array yang menunjuk sekelompok array yang mengarah ke sekelompok array yang mengarah ke sekelompok array. Dan kita akan melihat apa yang akan terlihat seperti pada slide di masa depan. Dan lebih umum, pohon hanya struktur data dimana data tersebut diselenggarakan di beberapa hirarki. Jadi di mana kita melihat kita semacam pemahaman dari tingkat atas, tingkat berikutnya, tingkat berikutnya, tingkat berikutnya. Jadi ini mungkin yang paling jelas dengan beberapa contoh spesifik. Jadi, inilah pohon kita. Anda dapat melihat bahwa itu memiliki tingkat tertentu bahwa kita mulai dengan simpul akar, satu. Dan kita bisa turun melalui pohon kita. [00:24:50] Sebuah pohon biner adalah jenis tertentu pohon. Dan satu-satunya spesifikasi untuk pohon biner adalah bahwa setiap node memiliki paling banyak dua daun. Jadi Anda tidak akan melihat node ini memiliki tiga atau empat atau nomor lain daun. Dan kemudian bahkan lebih spesifik adalah pohon pencarian biner dimana setiap node ke kiri node akan memiliki nilai yang lebih kecil. Dan setiap nilai ke hak akan menjadi lebih besar. Jadi jika Anda melihat 44 di akar kami, ke kiri, 11, 22, dan 33 semua kurang dari akar kami. Dan di sebelah kanan semua nomor bigger-- 66, 55, dan 77. Dan properti ini berlaku di setiap tingkat pohon. [00:25:37] Jadi ketika kita pergi ke 22, 11, dan 33, masih 11 lebih kecil dari 22 dan 33 lebih besar dari 22. Dan ini membuat lebih mudah untuk mencari karena jika kita mencari nomor, kita tahu persis mana cabang untuk mengikuti bawah. Jadi ini harus mengingatkan Anda sedikit dari pencarian biner. Ya? [00:25:56] AUDIENCE: Jadi ketika Anda menggambarkan biner, Anda mengatakan itu memiliki paling banyak dua daun? HANNAH: Mm-hm. AUDIENCE: Mungkinkah memiliki lebih sedikit? HANNAH: Ya. Jadi katakanlah, misalnya, Anda tidak memiliki bahkan beberapa hal dan Anda tidak bisa mengisi semua Anda daun, tidak apa-apa jika seseorang memiliki satu. OKE? Mengagumkan. Pertanyaan lain di pohon? OKE. [00:26:16] Kembali ke mencoba kami seperti yang saya sedang berbicara sekitar sedikit lebih awal, bagaimana kita memiliki ini array multi-level. Jadi dalam hal ini, kita mulai di bagian atas. Dan kita bisa mengikuti setiap kata yang diberikan ke bawah. Jadi katakanlah kita ingin untuk mencari Turing. Kami mulai T, mengikutinya turun ke array yang berisi U, dan mengikutinya ke bawah sampai kita mencapai delta kecil ini yang memberitahu kita, ya, Anda menemukan sebuah kata. Jelas pada mencoba? Apa saja untuk pergi ke sana? Iya Nih? AUDIENCE: Apakah simbol delta harus menempati ruang di dalam coba? HANNAH: Ya, sehingga tidak tentu bahkan harus delta. Tapi kita perlu beberapa cara untuk memberitahu kami computer-- maaf, sehingga kita tahu bahwa TUR tidak sepatah kata pun. Karena katakanlah kita tidak memiliki Konsep ini delta, konsep ini ucapan selamat, Anda menemukan sebuah kata, itu akan pergi melalui dan iterate T-U-R, dan kemudian berkata, mengagumkan, saya menemukannya! Ini harus menjadi kata. Tapi itu benar-benar tidak. Kami ingin seluruh Turing menjadi kata. Jadi kita harus memiliki sesuatu di end yang mengatakan, selamat, Anda telah menemukan kata yang sah. AUDIENCE: Jadi, jika Anda memiliki seperti 26 huruf dalam alfabet, akan Anda benar-benar memiliki 27 kunci dalam mencoba Anda? [00:27:24] HANNAH: Awesome, ya. Jadi sebenarnya, saya berpikir bahwa akan berada di slide berikutnya. Ta-da! Dimana jika Anda memiliki node dalam try Anda, Anda akan memiliki 27 anak, bukan 26. Setiap pertanyaan dengan itu? Ya? AUDIENCE: Mengapa mencoba mengambil begitu banyak ruang [tak terdengar] saat Anda pergi? Mengapa dianggap [tidak terdengar]? HANNAH: Tentu. Mari kita kembali. Pertanyaannya adalah, mengapa adalah mencoba jauh lebih besar dari sesuatu seperti tabel hash. Jadi untuk masing-masing tingkat, bahkan jika mereka tidak ditarik di sini, Anda harus memiliki semua 26 karakter. Dan alasan bahwa Anda tidak bisa mengatakan, oh, tapi seperti untuk Turing, saya tidak perlu memiliki salah satu dari mereka hal yang sama pada tingkat U. Nah, jika tiba-tiba Anda ingin menambahkan sesuatu yang seperti T-H, Anda akan perlu untuk memiliki kemampuan menambahkan kata itu. Jadi untuk setiap huruf, Anda akan memiliki memiliki sekelompok array datang dari itu. Sehingga Anda dapat melihat bagaimana hal itu akan mendapatkan benar-benar besar, benar-benar cepat. Ada pertanyaan lain? Baiklah. Ya? [00:28:29] AUDIENCE: Kapan mencoba lebih cepat dari tabel hash? [00:28:33] HANNAH: Kapan mencoba lebih cepat dari tabel hash? Jadi jika Anda telah benar-benar Fungsi hash yang buruk. Jadi katakanlah aku seperti, inilah fungsi hash Anda. Tidak peduli apa kata Anda memberi saya, saya selalu akan memasukkannya ke dalam array yang masuk 0. Dan jadi kita berakhir dengan hanya menempatkan semuanya dalam satu besar daftar panjang terkait. Dan waktu pencarian akan mengambil paling buruk n jika di akhir daftar kami. Dengan mencoba, kita hanya perlu iterate melalui surat dalam kata. Jadi, bahkan jika kita menambahkan bunch lebih kata-kata untuk mencoba kami, itu tidak akan membawa kita lagi untuk menemukan kata tertentu. [00:29:09] Yang harus kita lakukan adalah, untuk Misalnya, dalam hal ini, katakanlah kita sedang mencari zoom, kita hanya harus iterate atas Z-O-O-M, empat huruf. Jadi itu hanya panjang kata zoom. Tidak peduli berapa banyak kata yang lebih kita masukkan ke dalam mencoba ini. Kami selalu bisa mendapatkannya dalam empat langkah. Mengagumkan. Iya Nih? [00:29:32] AUDIENCE: Jadi [tidak terdengar] adalah array, kan? [00:29:34] HANNAH: Mm-hm. AUDIENCE: Jika Anda mencari [tidak terdengar], Anda akan harus melalui array Anda untuk menemukan [tidak terdengar]? HANNAH: Tentu. AUDIENCE: Bukankah itu mengambil lebih banyak waktu? HANNAH: Jika aku akan mengatakan bahwa array saya selalu akan A, B, C, D, E, F, G, bla bla bla, jadi jika saya selalu tahu itu dalam urutan yang sama persis, jika saya selalu tahu itu dalam urutan abjad, Aku hanya bisa mengatakan O adalah nomor begitu dan begitu dalam alfabet. Hanya melompat ke tempat itu. Karena ingat, dengan array, kita dapat mengakses adanya unsur bahwa array konstan waktu jika kita tahu di mana kita cari. Ya? [00:30:09] AUDIENCE: Pada sebelumnya geser [tidak terdengar] 27, tapi 26 untuk yang pertama. [00:30:14] HANNAH: Maaf? [00:30:15] AUDIENCE: Apakah bukan yang pertama satu 0, sehingga tidak akan menjadi 26? [00:30:18] HANNAH: Tentu, jadi ketika kita mengatakan 27, yang akan memberi kita indeks 0 sampai 26. Tetapi jika Anda benar-benar menghitung mereka keluar, itu akan menjadi 27. Pertanyaan yang bagus. Ada yang lain? Ya? [00:30:31] AUDIENCE: Jadi yang mencoba lebih lambat dari tabel hash? [00:30:34] HANNAH: Tries akan menjadi, dalam teori, lebih cepat dari tabel hash namun mengambil lebih banyak memori. Ya? AUDIENCE: [tidak terdengar]? [00:30:45] HANNAH: Maaf, saya tidak mendengar Anda. AUDIENCE: [tidak terdengar]. 0-25 memberikan 26. [00:30:54] HANNAH: 0-25 akan memberikan 26, benar. [00:30:56] AUDIENCE: Dan kemudian [tidak terdengar]. HANNAH: Benar. Jadi jumlah kita menentukan adalah jumlah hal dalam array kita. Jadi jika kita memiliki 27, itu akan memberi kita 0 sampai 26, yang akan memberikan kami ruang untuk, dalam hal ini, Saya tidak termasuk apostrof. Jadi kita sudah 0 sampai 25 adalah pertama 26 huruf abjad, atau ke-26 huruf abjad. Dan itulah terakhir hal, pada awal 26, adalah akan cek mark, atau delta. Ada yang lain? Mengagumkan. Kehilangan ruang saya. OK, keren. [00:31:31] Jadi kita sudah menyentuh ini. Namun perdagangan besar off antara mencoba dan tabel hash adalah bahwa mencoba menyediakan, di Teori, konstan mencari kali tapi menggunakan seluruh banyak memori. Baiklah, sekarang kita memiliki sedikit struktur lebih rumit, dan kami akan dilakukan dengan C, dan kami akan bergerak kanan sepanjang. [00:31:49] Jadi tumpukan, kami melihat ini dalam kuliah di mana Anda memiliki sesuatu seperti tumpukan nampan mana hal terakhir yang Anda menempatkan di stack akan menjadi hal pertama yang Anda lepas landas. Jadi itulah yang benar-benar mendefinisikan stack adalah bahwa hal terakhir yang Anda memakai akan menjadi yang pertama hal yang Anda lepas landas. Dan istilah yang kita gunakan jika kita akan meletakkan sesuatu, jika kita akan menambahkan sesuatu untuk tumpukan kami, kita sebut bahwa mendorong. Dan jika kita mengambil sesuatu off, kita menyebutnya popping. Dan jika kita akan mengimplementasikan stack, kita harus yakin untuk melacak baik ukuran dan kapasitas. Jadi jumlah total elemen kita bisa tahan dan saat ini jumlah elemen bahwa kita memegang. [00:32:27] Dan sangat mirip, kita memiliki antrian. Dan satu-satunya perbedaan adalah bukan dengan tumpukan, kita mengatakan hal terakhir yang kita memakai adalah hal pertama yang kita lepas landas. Jadi dengan antrian, yang Hal pertama yang kita masukkan ke dalam akan menjadi Hal pertama yang kita mengambil. Jadi ini seperti jika Anda sebenarnya berbaris di toko dan Anda sedang membantu, maka orang pertama di baris harus menjadi orang pertama yang akan membantu. Sehingga akan menjadi antrian. [00:32:52] Jadi kita perlu melacak ukuran, kapasitas, dan kepala karena kita akan mengambil semua orang dari depan daftar bukan belakang. Pertanyaan itu? Pertanyaan C yang mengganggu Anda? Struktur data, semua itu hal yang menyenangkan? Baiklah, keren. Jadi saya akan menyerahkannya kepada Alison ke melompat ke beberapa program lagi. [00:33:14] ALISON: Oh, kita akan lihat. Kita akan melihat seberapa baik saya lakukan di sini. OK, aku akan mencoba dan terbang melalui hal ini, orang-orang. Hannah berjalan sangat di mendalam pada semua barang-barangnya. Aku akan mencoba untuk memberikan Anda gambaran ledakan cepat sehingga kita bisa mendapatkan Davin dengan semua menyenangkan JavaScript dan keamanan hal-hal bahwa mungkin Anda benar-benar ingin mendengar lebih banyak tentang. [00:33:33] OK, seperti kata Hannah, jika Anda memiliki pertanyaan, Aku akan terlalu cepat, silahkan, beritahu saya. Saya akan menjawab pertanyaan-pertanyaan yang diperlukan. Jadi untuk memulai, kita akan mulai dengan mungkin salah satu hal pertama Anda pelajari dengan web pemrograman, perizinan. Jadi chmod, kalian harus sudah master ini dengan semua web pemrograman yang sudah telah melakukan akhir-akhir ini. Itu pada dasarnya hanya perintah yang mengubah izin atau izin akses objek sistem berkas kami. Tentu saja, untuk benar-benar melihat ini, jika Anda memiliki masalah dengan ini selama set masalah Anda, Anda mungkin telah menggunakan ls-l, yang panjang, untuk mendapatkan tampilan jenis seperti ini, di mana Anda benar-benar melihat semua izin untuk file. [00:34:16] Dan sungguh, kami hanya akan pergi melalui cukup cepat hanya cantik banyak apa masing-masing berarti. Jadi kita telah d di sini, yang hanya singkatan direktori. Jelas di sini, kita melihat rwx, yang dibaca, ditulisi, dan dieksekusi. Ini juga dapat direpresentasikan sebagai bit, yang kita akan masuk ke pada halaman berikutnya. Jadi setiap triad yang kami lihat di sini, jadi tiga triad. Kami telah rwx, r tidak x dan r ada x file pertama ini. Ini struktur umum ini. [00:34:49] Jadi kita memiliki beberapa direktori. Kami memiliki beberapa kelompok pengguna dengan hak akses ini. Beberapa kelompok yang memiliki izin tersebut, dan dunia yang memiliki izin. Anda dapat menganggap ini sebagai triad. Anda dapat menganggap ini sebagai tiga bit. Jadi mereka bisa memegang nilai-nilai mana saja dari 0 sampai 7, yang mengapa kadang-kadang kami memiliki Anda lakukan chmod 600 bukannya chmod rw apapun. Kita akan masuk ke contoh di sana. Tapi pada dasarnya, Anda bisa memikirkan ini sebagai baik hanya rwx, atau Anda dapat menganggap mereka sebagai beberapa nomor mana yang pertama ini di sini merupakan angka antara 0 dan 7, yang kedua ini merupakan angka antara 0 dan 7, dan yang ketiga merupakan angka antara 0 dan 7, OK? [00:35:38] r memiliki nilai 4. w memiliki nilai 2, dan x memiliki nilai 1, yang mengapa ini izin di sini akan chmod 700. Karena dalam hal ini di sini, ia mengatakan kita telah bit pertama ada membalik atas. Jadi kita memiliki 4 untuk membaca. Kedua bit membalik selama w, yang 2, jadi sekarang kita memiliki 6. Dan bit ketiga membalik atas untuk x, yaitu 1, sehingga kita mendapatkan tujuh. Dan tentu saja, kelompok kami dan dunia kita masing-masing 0. Jadi ini juga merupakan setara dengan chmod 700. Dan saya pasti akan mencoba untuk memahami pemetaan antara mereka. Saya tidak yakin jika memiliki datang pada kuis sebelumnya, tapi itu akan menjadi pertanyaan yang saya mungkin bertanya. [00:36:18] Hanya sedikit akan lebih lebih lanjut ke chmod sini, di sini adalah sangat umum struktur panggilan chmod. Jadi tentu saja, kami telah chmod sini. Referensi, apa ini mengacu adalah yang kita memberikan izin ini untuk atau yang kita mengambil ini izin dari. Jadi kita memiliki di sini di perizinan, seperti kita telah memberikan chmod plus x, seperti yang akan kita lihat segera. hanya berarti memberikan ini khusus izin untuk semua orang. Beri mereka semua. Jadi Anda bisa sangat baik u ditambah x atau g ditambah x atau o ditambah x atau beberapa daripadanya. Sehingga bagian pertama selalu akan menjadi referensi. Siapakah kita memberikan izin ini untuk, atau yang kita membawa mereka pergi dari? [00:37:03] Yang kedua adalah operator. Jadi kalian sebagian besar telah ditangani dengan plus. Hal ini memberikan izin untuk siapa pun yang Anda memberi mereka, sedangkan dikurangi, logis, menghapus mereka. Jadi tidak ada yang terlalu mengerikan di sana. Dan kemudian Modus adalah apa yang kita bicarakan dengan membaca, menulis, atau mengeksekusi. Jadi plus x berarti memberikan executable izin untuk semua orang. Dan kemudian, tentu saja, di mana file tertentu atau direktori. OKE? Semua orang yang baik dengan chmod? Lumayan? [00:37:37] OK, jadi HTML, salah satu dari Anda cukup tua to-- usia MySpace? Saya mengirimkan ini ke bagian saya, dan benar-benar setengah orang menatapku seperti aku gila. Dan aku seperti, orang-orang, kami tidak setua. Ayolah. Jadi HyperText Markup Language, itu jujur ​​hanya satu cara bagi Anda untuk menampilkan hal-hal tertentu di web. Jadi itu adalah bahasa markup. Ini bukan bahasa scripting. Tidak ada logika di dalamnya. Hal ini hanya untuk mengubah cara tampilan yang diinginkan. OK, jadi itu yang penting perbedaan untuk membuat. Ini dianggap sebagai bahasa markup, bukan bahasa scripting. [00:38:12] Jadi di sini kita memiliki tag HTML kita. Pada slide ini mungkin sebagian besar orang-orang yang Anda harus akrab dengan dan benar-benar nyaman dengan. Jadi jelas, kita memiliki tag HTML, yang menunjuk bahwa segala sesuatu di antara kedua akan HTML. Kami memiliki beberapa link, yang jelas akan memberikan Anda link ke halaman web eksternal. Beberapa judul, dalam kepala kami di sini. Dan kami memiliki tubuh kita dengan h1, yang merupakan header, sehingga akan membuatnya bagus dan berani dan lebih besar. Dan kemudian, kami memiliki beberapa p, yang merupakan paragraf. Anda mungkin harus tahu dan akrab dengan hal-hal seperti bagaimana Anda menyisipkan gambar, yang ada kelas header lain? Saya pasti akan nyaman dengan div. Jadi ini memiliki mayoritas tag Anda harus akrab dengan. Tapi tentu saja, seperti dengan segala sesuatu di CS 50, daftar ini tidak lengkap. Jadi, pastikan Anda memoles itu. [00:39:08] CSS, jadi CSS, jika salah satu dari Anda menonton seminar saya dari dua minggu lalu, benar-benar hanya cara untuk gaya halaman web Anda? OK, jadi kami memiliki beberapa bahasa markup. HTML, yang menangani hanya teks dan di mana mungkin pada halaman. Tapi CSS benar-benar apa yang membuatnya cantik. Anda bisa memiliki ini dalam HTML Anda file, tapi seperti yang kita akan bicarakan nanti, Aku cukup yakin itu mungkin menjadi slide berikutnya, itu adalah praktek yang umum, dan benar-benar praktek yang kita benar-benar mendorong, bagi Anda untuk menjaga mereka terpisah ketika kita berbicara tentang MVC dan seluruh paradigma. Itu benar-benar apa ini feed ke. [00:39:42] Jadi CSS adalah cara untuk membuat benda terlihat cantik. Hal-hal di sini, seperti tubuh dan #title dan .info, ini disebut penyeleksi dan apa mereka lakukan adalah mereka memilih hal-hal tertentu dalam file HTML Anda dan menerapkan gaya apapun, semacam hal-hal yang Anda inginkan apa pun, dengan unsur spesifik web Anda Halaman. Jadi di sini, kami memiliki warna latar belakang dan warna dan keluarga font yang menjadi diterapkan untuk apa yang ada di tubuh. Jadi, jika kita melihat kembali ke sini, itu tidak akan berlaku untuk judul. Itu hanya akan berlaku untuk apa dalam penyeleksi tubuh ini, OK? [00:40:22] Dengan judul di sini, ini adalah akan menjadi hal yang sama, warna teks menjadi biru hanya akan untuk mempengaruhi apa yang ada di dalam pemilih judul. Serta info di sini, teks akan menjadi merah muda, apapun itu info, yang ada di sini. Jadi satu-satunya hal yang akan menjadi merah muda pada halaman ini adalah tanggal, Senin 17 November, 2014. OK, jadi CSS adalah cara untuk memiliki kontrol lebih over-- ya? [00:40:48] AUDIENCE: Mengapa kau harus menggunakan hash dengan judul? [00:40:51] HANNAH: Slide berikutnya, janji! Kita akan sampai di sana. Jadi ini adalah mengapa kita harus menggunakan hash. Jadi penyeleksi mengambil tiga utama bentuk yang kita berbicara dengan kalian tentang. Saya fyou ingin mempelajari lebih lanjut, ada banyak di luar sana. Ada dokumentasi CSS besar. Ada nama tag, yang harus dilakukan hanya dengan tag normal Anda dalam HTML. Jadi h1, p, div, h2, orang-orang macam hal. Dan kita bisa saja nama mereka seperti. Jadi seperti yang kita lihat di sini dengan tubuh, itu adalah tag normal. Jadi kami hanya dapat menempatkan tubuh saat kita berbicara dalam file CSS kami. [00:41:26] Dengan judul, seluruh alasan kita memiliki hash ini adalah kita harus apa dianggap sebagai ID. Jadi ID harus selalu unik dalam halaman HTML Anda sehingga ketika Anda mengacu pada itu, Anda tahu bahwa Anda hanya merujuk satu hal yang spesifik. Jadi dalam hal ini di sini, dengan kami h1 sini, CS 50 sesi review, kami memiliki id judul. Jadi untuk hanya merujuk bahwa sepotong HTML kita, kita melakukan judul hash. Hanya dengan konvensi, ID yang ditunjuk dengan hash di depan mereka. Dengan cara yang sama, kita melihat info di sini adalah kelas. Dan kelas dengan CSS ditunjuk sebagai kelas dot atau dot apapun kelas itu. Jadi dalam hal ini di sini, itu info. [00:42:10] Jadi saya mengambil kembali. Kedua hal ini akan merah muda untuk CSS kami di sini karena mereka berdua memiliki kelas info. Dan dalam file CSS kami, kami telah ditunjuk bahwa apa-apa dengan kelas info harus merah muda. Apakah itu masuk akal? Iya Nih? [00:42:27] AUDIENCE: Jika Anda adalah untuk membuat segala sesuatu di tubuh putih, dan kemudian Anda mencoba untuk membuat sesuatu di dalamnya biru, akan yang menyebabkan masalah? [00:42:34] HANNAH: Jadi CSS cascading style sheets. Jadi apa pun yang menuju bawah akan diutamakan. Jadi jika Anda melakukan sesuatu dengan tubuh, dan engkau membuat semuanya putih, dan kemudian nanti Anda mengubah judul atau Anda mengubah teks dalam tubuh, menimpa itu. Jadi apa pun terhadap bawah akan diutamakan. Iya Nih? [00:42:56] AUDIENCE: Dan ID yang unik, tapi kelas bisa lebih? HANNAH: Benar. Jadi ID harus unik, dan kelas dapat sebut sebagai banyak hal yang Anda inginkan. Ada pertanyaan lain? Iya Nih. [00:43:09] AUDIENCE: [tidak terdengar]. Aku bertanya-tanya apakah yang membuat perbedaan. HANNAH: Maafkan aku, apa pertanyaannya? AUDIENCE: Ada kecil "F" dan modal "F." HANNAH: Jadi perbedaan antara kecil "f" dan modal "F" seharusnya tidak membuat perbedaan. Jadi "f" akan 15 cara baik. Keren, hal lain? Semua orang baik, CSS? Iya Nih? [00:43:30] AUDIENCE: Maaf. Dapatkah Anda memiliki kelas dan ID? [00:43:35] HANNAH: Ya, Anda bisa. Hal dapat memiliki kedua kelas dan ID. Dan saya sangat merekomendasikan pengujian ini sendiri. CSS Anda akan belajar terbaik hanya dengan membuat sesuatu, halaman web yang sangat sederhana, menyusun beberapa CSS, dan hanya melihat bagaimana mereka berinteraksi. Dan Anda akan mendapatkan yang sangat baik, akal intuitif untuk cara kerjanya. [00:43:56] OK, semua orang baik dengan CSS? Kalian semua akan membuat situs yang indah dengan CSS sekarang. OK, praktik terbaik, hanya hal yang perlu diingat, hal-hal itu-- ini adalah mengapa kita dermaga Anda untuk desainer dan yang lainnya. Jadi menutup semua tag HTML Anda. Jadi jika Anda memiliki tubuh yang terbuka, harus ada tubuh dekat. Jika Anda memiliki paragraf terbuka, harus ada ayat dekat. Periksa untuk melihat halaman Anda memvalidasi. Kalian harus sangat akrab dengan ini dari p-set tujuh dengan CS 50 keuangan dengan validator W3. Dan seperti yang saya katakan sebelumnya, salah satu paradigma besar kami adalah memisahkan gaya Anda dengan CSS dari markup Anda, yaitu HTML. Dan kemudian, tentu saja, kita memiliki ini XKCD besar di sini. Yay, komik lega! [00:44:38] OK, TCP / IP. Antara ini dan HTTP, pada dasarnya mereka berdua protokol. Jadi Anda hanya bisa memikirkan dari mereka sebagai seperangkat aturan yang mengatur bagaimana hal-hal bergerak di internet. Jadi kontrol transmisi protokol, atau protokol internet, adalah cara untuk memastikan Data yang mendapat di mana itu akan dan bahwa kita tahu apakah kita pernah hilang data. Jadi, jika kalian berpikir kembali ke kuliah beberapa minggu yang lalu dengan David di mana kami memiliki empat amplop, mereka semua nomor seperti salah satu dari empat, dua dari empat, tiga dari empat, empat dari empat, ini hanya satu set aturan. Kami berkata, OK, setiap kali kita berada mengirimkan lebih dari satu paket, kita akan ke nomor dengan apa nomor itu dan berapa banyak jumlah yang pengguna harus mendapatkan. [00:45:19] Dan ini hanya mengatakan siapa pun menerima data apakah mereka mendapatkan segala sesuatu atau jika sesuatu yang tersesat sepanjang jalan. Dan mereka harus meminta lagi. Ini benar-benar hanya satu set aturan. Itulah cara Anda bisa memikirkan itu, OK? Dan juga, itu menentukan port, yang kalian can-- saya tahu selama kuliah, mereka memiliki daftar seluruh port. Tapi kita tidak memiliki mereka di sini sekarang. [00:45:41] Protokol transfer Jadi hypertext adalah, sekali lagi, itu protokol lain. Jadi itu satu set aturan yang mengatur, dalam hal ini, bagaimana hypertext ditransfer. Jadi hanya memungkinkan browser untuk berbicara dengan server web. Dan seperti yang kita katakan di sini, itu seperti handshaking manusia. Ini hanya cara untuk memerintah bagaimana server web akan berinteraksi dengan browser Anda. Dan kami memiliki hanya beberapa contoh. Kami memiliki beberapa permintaan sini di mana GET adalah metode. Kami memiliki HTTP 1.1, yang versi protokol bagi kita. Dan kemudian, tuan rumah, yang adalah apa yang Kami benar-benar mencoba untuk mengakses. Dan kemudian, seperti yang Anda lihat di sini, kami mendapatkan beberapa respon dengan 200 ini OK sebagai kode respon HTTP kami. Kami memiliki daftar besar aku akan untuk menarik dalam satu detik bahwa kalian harus akrab dengan. Dan kami memiliki jenis konten ini text / HTML, yang hanya mengatakan apa jenis data kita menerima dari server, OK? Host ini dan jenis konten ini merupakan bagian dari header HTTP. Anda dapat memiliki sedikit atau sesedikit diperlukan untuk konteks apa Anda sedang berhadapan dengan. Kadang-kadang Anda akan memiliki banyak informasi yang datang dari server Anda. Mungkin mereka sedang meminta banyak informasi dari pengguna. Ini bervariasi tergantung pada konteksnya. Jika Anda melihat CS 50 Study, ada lebih banyak tentang itu. Tapi kami memiliki banyak untuk mendapatkan melalui, jadi aku akan untuk pergi kanan depan jika itu OK dengan kalian? Keren. Tahan. Saya pasti memiliki seluruh daftar of-- ya! Saya tidak tahu mengapa hal ini semua jalan di sini. Saya pikir saya benar-benar pindah sementara aku sitting-- [00:47:15] Davin: Apakah Anda ingin mengajarkannya? Atau apakah Anda ingin aku mengajarkannya? [00:47:17] AUDIENCE: Saya pikir kita bisa hanya menunjukkan mereka untuk memulai dengan. Maksudku, Anda dapat pergi ke mereka lebih lanjut, tapi aku pikir itu lebih masuk akal karena saya hanya berbicara tentang status HTTP. Jadi, inilah seluruh daftar. Saya kira apa yang akan terjadi adalah Davin akan masuk ke mereka nanti. Tapi ada daftar keseluruhan, preview rasa yang akan datang. OK, kita akan blow-- ini akan untuk menjadi program PHP kecelakaan seperti yang lain. [00:47:41] Jadi PHP, hypertext preprocessor, itu backronym rekursif, yang berarti itu bernama sesuatu yang lain. Dan kemudian mereka seperti, ini tidak benar-benar masuk akal. Jadi mereka hanya bernama itu-- dan itu adalah singkatan, jadi mereka hanya membuat PHP hypertext preprocessor, yang hanya tidak masuk akal. Fun cerita. Ini adalah bahasa pemrograman. Jadi sebanyak yang saya menekankan bahwa HTML bukan bahasa pemrograman, itu adalah bahasa markup, PHP adalah bahasa pemrograman. Bagaimana Anda tahu ini adalah karena ada logika. Ada conditional. Kami memiliki variabel, sedangkan kita memiliki satu pun dari hal-hal di HTML. [00:48:12] Baiklah, maka kita memiliki sedikit ini bit di sini bahwa seperti rasa PHP. Jadi dasar, nama variabel mulai dengan tanda dolar. Banyak orang-orang seperti itu. Mengingatkan kita uang. Ini semua besar. Kita semua ingin PHP. Jadi kita tidak menentukan variabel jenis lagi. Hal ini ditentukan pada saat dijalankan. Penafsir akan menjadi seperti, oh, kami hanya akan dijalankan melalui, dan menurut konteks, kita akan melihat apa jenis jenis variabel tersebut harus memiliki. Tidak ada fungsi utama. Hal hanya akan berjalan. Kalian dengan impor di Anda p-set terakhir, Anda akan melihat ini. Ada tidak benar-benar fungsi utama. Anda hanya menulis apa Anda ingin terjadi. Dan itu hanya semacam terjadi. Jadi itulah PHP untuk Anda. [00:48:56] Array sangat mirip. Kami masih memiliki braket ini. Di sini, kami memiliki beberapa variabel disebut arr, dan itu sama to-- kita memiliki normal kita notasi braket. Dan kami memiliki beberapa nilai kunci. Dan perbedaan besar antara C dan PHP array adalah bahwa kita dapat memiliki associate-- ini kita dapat mengaitkan nilai ke kunci. Jadi bukan hanya memiliki array yang diindeks dengan jumlah atau posisi itu elemen dalam array, kita benar-benar bisa mengasosiasikannya dengan kunci. Dimana kita dapat mengatakan, OK, saya ingin apa pun Nilai dikaitkan dengan buah. Dan mungkin kita memiliki buah pergi ke pisang. Jadi akan kembali pisang kepada kami. [00:49:41] Tapi pada dasarnya, yang paling Hal kuat tentang hal ini adalah bahwa jika kalian ingat demo dari kuliah di mana kita pada dasarnya ejaan Menulis ulang di PHP, dan lookup was-- benar-benar hanya suka, apakah kunci ini ada? Itu benar-benar jenis kekuatan itu. Anda tidak perlu beralih melalui array Anda. Kamu tidak perlu tahu apa ruang itu di. Bisa jadi pada akhir atau awal. Selama Anda tahu kunci yang berhubungan dengan nilai, PHP bisa meludah nilai yang benar kembali keluar pada Anda, OK? [00:50:09] Dan kemudian, kami juga hanya baru saja karena kita dapat memiliki pasangan nilai kunci tidak berarti Anda harus. Anda juga bisa hanya membuat array biasa seperti di sini, di bagian bawah, di mana itu hanya satu, dua, tiga, empat. Mereka adalah nilai-nilai kita. Dan pada kenyataannya, kunci mereka adalah indeks. Jadi kunci untuk satu akan menjadi nol. Kunci untuk dua akan menjadi satu. Seterusnya dan sebagainya, kecuali Anda secara eksplisit menetapkan kunci, Anda bisa berasumsi bahwa Nilai hanya indeks mereka. Apakah itu masuk akal untuk semua orang? Tidak ada pertanyaan? Mengagumkan. [00:50:38] OK, foreach adalah cara untuk iterate melalui array Anda. Jadi kita memiliki sesuatu di sini, hanya struktur umum. Jadi foreach, nama array kita, sebagai apa pun Anda ingin memanggil masing-masing elemen dalam array, dan kita bisa melakukan sesuatu dengan bahwa unsur atau dengan nilai tersebut. Jadi kita memiliki contoh di sini. Kami memiliki asosiatif array dengan dua entri ini dengan bar dikaitkan dengan foo dan qux dikaitkan dengan baz. Jadi tombol yang foo dan baz. Nilai bar dan qux. Jadi foreach, kita memiliki array kita di sini, sebagai pasangan nilai kunci. Hal ini memungkinkan kita untuk mengakses baik kunci dan nilai. Mungkin Anda hanya ingin nilai, dalam hal ini Anda hanya bisa melakukan seperti arr sebagai $ nilai, dan kemudian Anda hanya mengakses nilai Anda iterate melalui. Tapi mungkin, untuk beberapa Alasannya, Anda ingin kunci, itulah sebabnya saya memilih Contoh ini sebagai gantinya. Jadi Anda benar-benar dapat memanipulasi kunci dan nilai dalam hal ini. OKE? Pertanyaan? [00:51:41] AUDIENCE: Jika Anda ingin hanya memanipulasi kunci, akan Anda harus melakukan foreach-- [00:51:45] ALISON: Benar. Jadi jika Anda ingin memanipulasi hanya kunci, Anda masih akan membutuhkan ini sintaks karena jika Anda hanya memiliki arr dengan sesuatu, sebagai salah satu hal, itu akan menganggap Anda ingin nilai, bukan kunci. Jadi, jika Anda pernah hanya seperti arr dengan, mungkin ini adalah seperti $ elemen, itu akan berasumsi bahwa Anda meminta hanya nilai pada setiap titik. Jika Anda secara eksplisit ingin melakukan sesuatu dengan kunci, bahkan jika Anda tidak akan melakukan apa saja dengan nilai, Anda perlu struktur ini yang kita miliki di sini di mana Anda secara eksplisit meminta untuk kedua kunci dan nilai. Pertanyaan besar. Ada yang lain? Keren. [00:52:27] Baiklah, PHP dan HTML. Oh, kami kembali ke p-set tujuh lagi. Jadi ini akan terlihat sedikit akrab. Jadi ini adalah beberapa bentuk HTML sederhana yang memiliki beberapa nama input halo. Dan kita melihat kami memiliki metode kami GET. Dan jika kita ingat dari kami p-set, ketika formulir ini diajukan, ia akan mengirimkan sebuah array disebut $ _GET yang memiliki semua masukan ini atau variabel dari form yang harus dimanipulasi dalam PHP kita. Jadi dalam hal ini, pengguna akan dimasukkan ke dalam nama mereka. Mereka mengirimkannya. Dan kita melihat bahwa kita mendapatkan beberapa array yang di sini. Kami memiliki berbagai GET kami. Dan kita mengakses nama. [00:53:11] Jadi yang mengatakan, OK, beri aku nilai yang terkait dengan nama, nama menjadi kunci di sini. Dan yang memetakan secara langsung apa kami katakan masukan nama kita. Jadi ini memberikan Anda kunci untuk apa akan menjadi dalam array Anda di sini. Apakah itu masuk akal untuk semua orang? Iya Nih? [00:53:32] AUDIENCE: Apakah nama dalam GET merujuk dengan garis ungu di [tidak terdengar]? [00:53:36] ALISON: Ini mengacu pada ini di sini. Jadi bidang ini di sini, mengacu pada nama ini di sini. Jadi ini bisa saja bernama seperti nomor telepon, atau apa pun. Nama ini sebenarnya mengatakan, apa yang Anda menelepon bidang ini? Bagaimana Anda akan lihat bidang ini? Dan nama ini benar-benar seperti, kita mengatakan bidang ini disebut nama. Itulah cara kita akan mengaksesnya. [00:53:59] AUDIENCE: Jadi rasanya, masukan nama sama dengan Bob, dan-- [00:54:02] ALISON: Benar, maka Anda akan mendapatkan Bob di sana. Tepat. Semua orang keren? Baiklah, jadi GET vs POST, ini adalah dua cara utama bahwa kita melewatkan data dalam permintaan HTTP. Kalian seharusnya melihat kedua hal ini mudah-mudahan. Jadi dengan GET, informasi dilewatkan melalui URL. Jadi, jika Anda pernah melakukan Google pencarian, YouTube, Anda akan mungkin melihat beberapa tanda tanya. Dan kemudian, semua kata-kata bahwa Anda hanya menempatkan di sana. Dan POST melewati data dalam tubuh pesan HTTP. Jadi tidak seperti GET, Anda jenis pertimbangkan bahwa data yang disembunyikan dari pengguna. Tapi apa benar-benar penting untuk memahami adalah bahwa ini masih seperti tidak aman seperti GET. Analogi saya gunakan adalah jika Anda memiliki nomor rekening bank Anda dan Anda menulis di luar amplop, itu cukup aman. Jika Anda adalah untuk menulis di selembar kertas dan memasukkannya ke dalam amplop, itu masih benar-benar tidak aman karena yang perlu anda lakukan adalah membuka bahwa sampai dan melihat isi sebenarnya pesan untuk melihat itu. Jadi ini adalah "tersembunyi", dan orang-orang seperti untuk pikir itu aman, tapi itu benar-benar tidak. Dan aku yakin Davin akan masuk ke dalam itu lagi, mungkin. Tapi itu yang penting perbedaan untuk membuat dan sesuatu yang benar-benar baik untuk memahami. [00:55:15] OK, SQL, Structured Query Language. Semua hal-hal yang kita telah melihat begitu baru-baru ini! Jadi itu pada dasarnya hanya dirancang, jelas, untuk mengelola data. Kalian punya banyak pengalaman dengan ini dalam tabel dengan PHP MyAdmin. Dan ada empat pertanyaan umum bahwa kami ingin kalian tahu. Jadi ada pembaruan, insert, pilih, dan menghapus. Jadi, pastikan Anda tahu orang-orang yang benar-benar baik. Kita akan pergi melalui mereka benar-benar cepat. [00:55:40] Jadi memperbarui, benar-benar, seperti apa Anda mungkin berpikir hal itu terjadi, hanya update data dalam database Anda. Jadi kita memiliki beberapa contoh di sini. Ini adalah umum struktur query pembaruan. Jadi kami memperbarui tabel bahwa kita sedang berbicara tentang. Dan kami ingin mengatur tertentu nilai-nilai, kolom tertentu sama dengan nilai-nilai tertentu. Jadi ini hanya update tabel, mengubah nilai dalam semua baris dalam kasus ini. Jadi dalam satu ini di sini, aktual Misalnya, kita memiliki insert-- maaf. Slide yang maju tanpa saya sadari. [00:56:17] Jadi tabel update ini ditetapkan col1 sama untuk VAL1 mana rumah sama "Currier." Apa yang dilakukan adalah hanya perubahan, hanya update nilai-nilai ini di tempat-tempat tertentu. Jadi dalam satu pertama ini, perubahan ini Nilai untuk segala sesuatu di meja Anda, OKE? Ini akan mengubah ini kolom untuk setiap entri, untuk setiap baris. Tapi di mana ini, Anda bisa menganggapnya sebagai kualifikasi. Jadi itu hanya akan berubah di tempat-tempat yang sangat spesifik. Jadi dalam p-set tujuh, ketika Anda mungkin diperbarui jumlah kas bahwa pengguna Anda memiliki, Anda mungkin memiliki beberapa tempat ID sama ID sesi, kan? [00:56:53] Karena Anda tidak ingin mengubah jumlah uang tunai untuk setiap orang yang menggunakan website Anda. Anda ingin mengubahnya untuk satu orang tertentu, orang itu menjadi siapa pun menggunakannya pada waktu itu. Yang Tepat? OK, jadi masukkan, masukkan nilai-nilai tertentu ke dalam tabel. Ini seperti ketika Anda menciptakan pengguna baru. Struktur umum di sini adalah menyisipkan ke dalam tabel apapun kita bicarakan. Nilai, menjadi nilai-nilai yang kita benar-benar ingin menyisipkan. OK, jadi seperti yang kita lihat di sini, kami telah memasukkan ke dalam tabel. Ini adalah kolom tertentu dengan nilai berhubungan mereka. Jadi ini mengatakan, insert baris baru yang berisi Nilai VAL1 dan VAL2 bawah ini kolom tertentu. [00:57:33] Jadi mungkin Anda hanya ingin mengisi keluar setengah hal-hal berturut-turut ini. Itulah yang bagian ini di sini memungkinkan Anda lakukan. Ini memungkinkan Anda benar-benar menentukan bagian mana. Iya Nih? [00:57:44] AUDIENCE: Dapatkah Anda hanya [tidak terdengar] Sel-sel di baris [tidak terdengar]? [00:57:52] ALISON: Jika Anda hanya mengisi bagian-bagian tertentu dari baris Anda, sisa sel-sel hanya kosong. Selama Anda memungkinkan mereka untuk kosong, itu tidak masalah. Jika Anda mencoba untuk mengaksesnya, itu akan kembali beberapa elemen kosong. Tetapi penting untuk mengetahui bahwa dalam tabel tertentu, mereka harus diizinkan untuk menjadi nol. Anda mungkin telah lari ke masalah selama p-set Anda karena kita tidak membiarkan nilai-nilai Anda null. Tapi Anda dapat menentukan Nilai opsional di meja Anda. [00:58:26] OK, pilih, jadi ini adalah hanya cara untuk mendapatkan Data dari meja di beberapa pengenal yang Anda inginkan. Jadi pilih star dari meja tempat col sama sesuatu hanya berarti, memberikan semua data yang terkait di mana kolom tertentu ini benar. Jadi Bintang dalam hal ini akan mengembalikan seluruh baris untuk Anda, OK? [00:58:49] Dan kemudian, dalam hal ini, pilih bintang dari meja hanya memberikan seluruh tabel. Dan kemudian, hapus jelas, itu hanya menghapus baris dari tabel. Jadi menghapus dari meja, tabel apapun kami referensi, di mana beberapa spesifik identifier atau kondisi benar. Iya Nih? [00:59:07] AUDIENCE: Pertanyaan. Mengapa Anda menggunakan dua kutipan, dan apakah Anda melakukan tanda kutip ganda atau tunggal kutipan, apakah itu membuat perbedaan? [00:59:13] ALISON: kutipan Double atau tanda kutip tunggal tidak membuat perbedaan dalam SQL. Saya pikir saya melihat pertanyaan lain. Iya Nih? [00:59:20] AUDIENCE: Apakah itu tidak mempengaruhi apa akan melarikan diri dari query? [00:59:25] ALISON: Rob? [00:59:27] ROB: Apa yang Anda maksud dengan melarikan diri dari query? [00:59:31] AUDIENCE: Jika seseorang memiliki query tunggal dalam bentuk of-- [00:59:36] ROB: Jika ada orang yang menempatkan kutip tunggal di, maka selama Anda sedang sanitasi masukan Anda, maka tidak masalah. Tetapi jika Anda menggunakan satu kutipan dan Anda tidak benar melarikan diri masukan Anda, maka ya, mereka perlu untuk menempatkan satu kutipan untuk memecahkan kode Anda. jika Anda menggunakan tanda kutip ganda, mereka harus menempatkan ganda mengutip untuk memecahkan kode Anda. Tapi selama Anda menghindari hal-hal benar, tidak masalah. Ini hanya akan diterjemahkan dengan simbol yang benar pula. [00:59:59] AUDIENCE: Apa escape artinya? ALISON: Yah, seperti sanitasi dan melarikan diri. Ujian yang kita miliki, XKCD besar komik yang mereka menarik di mana Anda memiliki, oh-- ROB: Ini slide terakhir. ALISON: Ini slide terakhir, benar-benar? Astaga. Di sana kami pergi, sempurna. OK, jadi pada dasarnya, Anda dapat menyuntikkan sesuatu ke dalam query SQL ini di mana rusak Anda kode, atau sebagai David menunjukkan di kelas, jika kita memiliki beberapa tunggal quote 1 sama dengan 1 dan jika dalam kode kami, kita hanya langsung menyalin bahwa dalam, dan kami memiliki kutip tunggal berakhir, apa yang terjadi adalah kita beberapa ekspresi yang bernilai true yang akan membiarkan orang masuk database kami dan mendapatkan data yang kita tidak ingin mereka mendapatkan. Jadi sanitasi input hanya berarti memastikan bahwa kita melarikan diri ini karakter dan menunjuk mereka sebagai karakter dan bukan hal-hal yang harus dibiarkan harus dipahami secara harfiah sebagai pernyataan SQL kami. [01:01:04] Jadi hal besar yang kami katakan bahwa kalian harus menggunakan adalah HTML karakter khusus, yang merupakan sesuatu Anda mungkin ingin mengambil melihat. OK, hapus. Tipe data, ini semua akan online. Karena kita telah 15 menit tersisa, aku hanya akan pergi kanan melalui ini. PHP dan SQL, pada dasarnya ini adalah hanya kami memiliki fungsi query yang membantu melindungi terhadap serangan-serangan berbahaya. Jadi setiap kali Anda menggunakan permintaan, kami memastikan bahwa hal-hal yang dibersihkan dan yang lainnya. [01:01:36] MVC hanya paradigma desain, jadi model, melihat, pengendali. Ini hanya cara untuk menjaga hal-hal bagus dan berpisah dengan cara yang sama bahwa kita cenderung faktor keluar kode ke fungsi. Ini hanya kerangka desain web yang memungkinkan Anda untuk melakukan hal yang sama. Aku akan melewatkan ini. [01:01:54] Ini adalah sesuatu yang saya akan menjadi super nyaman dengan. Ini adalah meja kecil yang besar di sana. Ini memberi Anda fungsi contoh model. Aku hanya akan melalui ini karena saya benar-benar ingin Davin untuk dapat berbicara. Jika Anda memiliki pertanyaan, jangan ragu. Saya akan berada di sini setelah. Hanya datang bicara padaku. Dengan itu, kita memiliki status HTTP. Dan Davin yang akan meniup melalui ini dalam 15 menit. Ini akan menjadi besar. [01:02:17] Davin: OK. Uh, mic Anda? Ya. Mohon Maaf. ALISON: Jalan dipersiapkan. Davin: Tidak, saya siap. Saya siap. Mari kita lakukan ini. Sudah siap. OKE. Mohon Maaf. Aku menumpahkan kopi pada diri saya sendiri. Aku tidak tahu apakah aku lebih marah bahwa saya terlihat konyol, atau bahwa saya tidak memiliki kopi lagi. Anyway, hanya pengumuman cepat tentang lembaran kalian punya. Jadi lembar ini kalian miliki tidak resmi apa yang ada di kuis. Ini adalah resmi apa yang ada di kuis. Juga, di situs, kami memberitahu Anda, OK, ini akan berada di kuis. Jadi dalam sedikit lembar contekan Anda memiliki, tidak resmi. Dan ada kesalahan di dalamnya. Jadi yang terbaik untuk tidak hanya membabi buta menggunakannya. Jadi ya, itu itu. Jadi mari kita masuk ke cepat nyata ini. [01:03:05] Jadi status HTTP. Jadi apa yang terjadi ketika website, semuanya baik-baik. OK Semuanya. Semuanya kembali ke Anda seperti yang Anda inginkan. Anda mendapatkan 200 OK. 301, di mana telah kita ketahui bahwa 301 sebelumnya? Tunggu, ada apa? Mohon Maaf. Kami melihat saya kuliah timah selama keamanan. Jadi selama keamanan, jadi jika David mengetik http dan kemudian mencoba untuk pergi ke cs50.net, Anda akan melihat 301 pindah. Mengapa? Karena itu akan mengarahkan Anda secara otomatis ke HTTPS kami. [01:03:35] Jadi 301 bergerak, hanya itu pada dasarnya redirection. Dan Anda dapat berpikir tentang hal seperti ini. Salah satu status yang dimulai dengan 2 's, mereka seperti, OK, semuanya OK. Salah satu status yang mulai dengan 3, yaitu pengalihan. Status yang dimulai dengan 4, yang berarti ada beberapa jenis kesalahan klien. Status yang dimulai dengan 5, itulah beberapa jenis kesalahan server. Jadi Anda jenis putus status seperti itu. Jadi 304 tidak tidak dimodifikasi, sehingga dalam Anda server.c p-set, jadi mari kita katakan Anda cat.html dimuat. Semuanya kembali, Anda mendapatkan 200s, OK, besar. [01:04:03] Katakanlah Anda segar itu. Nah, di dalam itu cat.html, Anda memiliki JPEG. Nah, JPEG yang tidak akan mendapatkan reloaded. Anda tidak akan posting lain GET permintaan ke server, dan kemudian mendapatkan semua informasi itu kembali. Itu akan hanya be-- gambar yang akan di-cache pada mesin Anda. Dan gambar yang akan menjadi 304. Jadi itu belum dimodifikasi. Jika Anda kemudian menutup, jelas cookie, dan kemudian refresh dan mencoba untuk memuat halaman tersebut lagi, Anda akan melihat 200s. Anda tidak akan melihat bahwa 304. [01:04:28] 400, permintaan yang buruk, yang nyata cepat, seperti jika Anda akan mengirim JSON objek ke server dan objek JSON Anda tidak benar, Anda akan melihat sesuatu seperti itu. 403, dilarang. Ketika Anda akan melihat terlarang? Mungkin Mungkin? AUDIENCE: chmod. Davin: Chmod, ya. Jadi Anda belum mengatur izin dengan benar. 404, tidak ditemukan. Hanya saja tidak ada. Jadi jika Anda mengetik URL yang salah. 500, kesalahan server internal, server mungkin tidak dikonfigurasi dengan benar. Sesuatu yang tidak pada akhir Anda, tetapi sesuatu pada sisi server. Dan 503? Banyak orang melihat 503s di babak p-set. Ketika itu akan terjadi? Aku mendengar bisikan. [01:05:05] AUDIENCE: Ketika Google memutuskan Anda robot. Davin: Ya, ketika Google memutuskan Anda robot, Anda mendapatkan 503s. Jadi itulah kelebihan beban. Jika Anda telah diminta dari server terlalu banyak, itu biasanya bersifat sementara. Dan sebagian besar dari Anda melihat itu. Jadi Anda melihat 503. Anda mungkin telah mengambil sedikit istirahat, maka 503s pergi, dan semuanya baik-baik saja. [01:05:20] GABE Real cepat, kapan kalian mendapatkan 500 di mungkin masalah terakhir ini ditetapkan? Iya Nih? [01:05:27] AUDIENCE: Biasanya jika Server memiliki file salah tempat atau [tidak terdengar] mereka Mesin [tidak terdengar]. [01:05:34] GABE: Jadi mungkin konfigurasi masalah di PHP Anda pada server Anda. Tapi mungkin hanya sesuatu seperti koma yang lupa Anda. Jika Anda mengetik PHP, beberapa sintaks yang salah mungkin mendapatkan sesuatu seperti itu. OKE? [01:05:46] Davin: Cool. Apakah Anda ingin saya untuk melakukan hal sampai AJAX? [01:05:51] GABE: [tidak terdengar]. Davin: OK. Jadi apa DOM? Apa DOM stand for? [01:05:55] AUDIENCE: model objek dokumen. Davin: Nice. Dan mengapa kita menyukainya? Mengagumkan. Benar, sehingga hanya memungkinkan kita untuk mengakses HTML, mengakses halaman sangat cepat. Mengapa? Karena kita memperlakukan kami Halaman, memperlakukan tag HTML kita, memperlakukan semua seolah-olah mereka objek. Jika kita memperlakukan mereka seperti mereka benda, maka apa yang bisa kita lakukan? Nah, kita bisa memanggil fungsi pada mereka. Dan ini penting mengapa? Nah, karena kita akan menggunakan JavaScript untuk memperbarui HTML kita, memperbarui benda tersebut. Jadi jika kita memperlakukan mereka seperti benda, kita kemudian dapat memanggil fungsi-fungsi pada mereka. Aku akan masuk ke dalam ini sedikit lebih ketika saya pergi ke JavaScript, tetapi Anda semua pernah melihat seperti document.getElementById. Jadi dokumen yang Anda elemen, dapatkan elemen dengan ID, sehingga Anda akan melihat untuk beberapa ID di tag HTML. Dan kemudian, Anda dapat melakukan sesuatu yang lain untuk itu. Misalnya, seperti document.body, maka Anda dapat menambahkan anak. Jadi Anda akan menemukan dokumen. Anda memiliki dokumen. Anda akan menemukan tubuh. Anda menemukan tubuh. Dan kemudian, Anda akan memanggil beberapa fungsi di atasnya. Jadi menambahkan anak, dan Anda dapat menambahkan beberapa HTML ke akhir dalam tubuh Anda. Jadi pada dasarnya, Anda hanya memperlakukannya seperti sebuah objek. Anda memperlakukan HTML tag seperti sebuah objek. Dan itu membuatnya sangat mudah dan cepat untuk pergi melalui mereka. Tetapi juga memungkinkan Anda untuk memanggil fungsi-fungsi mereka sehingga Anda dapat memanipulasi dan mengubah elemen. [01:07:04] GABE: Mengingat hal ini, mengapa JavaScript tersebut bahasa yang bagus untuk berinteraksi dengan HTML? Kemungkinannya, ketika orang-orang memilih bahasa untuk browser, untuk sisi client, JavaScript benar-benar baik, itu benar-benar baik dalam menangani benda. Dan objek yang jenis seperti benda yang muncul dalam HTML, sehingga sangat mudah untuk JavaScript untuk melakukan semacam penanganan. Davin: Nice. Jadi di sini hanya contoh. Jadi saya pikir pada kuis tahun lalu, atau mungkin dua tahun yang lalu, kami meminta Anda untuk membuat sebuah pohon. Jadi ini adalah apa yang akan Anda lakukan. Jadi Anda mulai dengan dokumen. Dan kemudian Anda pada dasarnya hanya melihat tag. Jadi jika Anda melihat, kita mulai dengan tag HTML. Dan kemudian, Anda mendapatkan petunjuk tentang cara melakukan hal ini didasarkan pada lekukan. Jadi kepala jenis bercabang. Di dalam kepala, kita memiliki tag lain untuk judul. Karena itu, kami memiliki tag judul. Dan di dalam itu, kami memiliki beberapa tali. Dan kami mewakili string dalam lingkaran. Dan semua tag dalam kotak. [01:07:54] Dan jika Anda melihat, jika kita menganggap ini sebagai sebuah pohon, dan katakanlah HTML yang orang tua, maka kepala dan tubuh akan menjadi saudara. Mereka berdua akan menjadi anak-anak orang tua itu. Jadi karena mereka kedua saudara, mereka akan menjadi semacam sebelah sama lain dalam model pohon kita. Dan kemudian, pada dasarnya anda melakukan hal yang sama persis. Jadi tidak sulit, tapi kami telah meminta pertanyaan seperti ini sebelumnya di kuis. GABE: Apakah ada memiliki pertanyaan sejauh ini? Apakah itu baik? Davin: Cool. JavaScript, OK, hal-hal yang baik. Jadi JavaScript, apa JavaScript? Nah, JavaScript is-- itu rumit, tetapi ini adalah beberapa highlights Anda harus diingat. Pertama, itu longgar diketik. Maksudnya itu apa? Jadi PHP was-- ya, ada apa? [01:08:35] AUDIENCE: Anda tidak perlu secara eksplisit negara apa jenis variabel itu. Davin: Sempurna. Jadi dia bilang kau tidak perlu eksplisit menyatakan jenis variabel. Itu tepat. Jadi di C, jika aku punya int i sama dengan 50, maka dalam PHP, itu hanya seperti ini, $ i, sama dengan 50. Kemudian pada JavaScript, apa yang akan panggilan itu? Var, kan? Ini akan seperti var i sama dengan 50. Tapi Anda tidak perlu menjadi seperti, OK, ini adalah int. OK, ini adalah sebuah string. Tidak perlu melakukan itu. Ini adalah bahasa ditafsirkan. Jadi apa artinya? [01:09:04] AUDIENCE: Tidak dikompilasi. [01:09:06] Davin: Apa yang tidak dikompilasi berarti? Ya? [01:09:11] AUDIENCE: Anda tidak memiliki untuk merestrukturisasi kode untuk mendapatkannya siap komputer untuk menjalankannya. Hanya saja diambil pada saat pelaksanaan dan komputer [tidak terdengar]. Davin: Ya, jadi itu akan melewati seorang penerjemah. Tapi kau tepat. Jadi Anda tidak akan melakukan kompilasi, kan? Ketika Anda melakukan Anda PHP dan kode JavaScript, Anda tidak pernah disebut kompilasi. Anda tidak pernah disebut sesuatu seperti membuat atau sesuatu seperti itu. Itu karena itu ditafsirkan. Jadi setiap kali ia pergi melalui browser, ia pergi melalui seorang penerjemah. Dan itu akan menafsirkannya hanya secara real time segera untuk Anda. Jadi apa yang beberapa positif dan negatif untuk memiliki bahasa ditafsirkan dan memiliki bahasa yang dikompilasi? Jadi compiling-- ya, ada apa? [01:09:50] AUDIENCE: Ditafsirkan lebih lambat. Davin: Dalam arti? [01:09:57] AUDIENCE: Setelah Anda kompilasi, Anda tidak memiliki untuk melakukan langkah-langkah tambahan untuk mengeksekusi itu, sedangkan ini [tidak terdengar]. [01:10:04] Davin: Benar, sempurna. Jadi apa yang Anda katakan adalah pada dasarnya kompilasi itu, ketika Anda mengkompilasi, Anda memiliki banyak biaya dimuka, kan? Kau akan melakukan kompilasi. Tapi setelah Anda compile, yang compiler akan mengoptimalkan itu. Ini akan menjadi cepat. Itu akan pada dasarnya secepat mungkin. Dengan menafsirkan, Anda tidak pernah memiliki biaya dimuka. Sebaliknya, itu akan menjadi sedikit lebih lambat setiap kali Anda menafsirkannya. Dan Anda akan harus menafsirkannya setiap saat. Jadi alih-alih memiliki ini satu biaya waktu, sekarang kau akan harus menafsirkannya setiap kali halaman merender. [01:10:29] Jadi juru baik karena Anda tidak perlu melakukan kompilasi, tapi mereka buruk dalam setiap mengatur waktu beban halaman, itu akan harus menafsirkan JavaScript ini. Dan itu akan berjalan sedikit lebih lambat daripada jika Anda melakukan kompilasi. Memungkinkan Anda untuk communicate-- oh, tunggu. Digunakan untuk memanipulasi konten dan penampilan. Kami hanya berbicara tentang hal itu. Menggunakan DOM. AJAX, kita akan masuk ke AJAX dalam sedikit. Dan kemudian, itu sisi klien. Jadi PHP adalah sisi server. JavaScript adalah sisi klien. Apa positif itu? Ia mengatakan itu. Ini lebih cepat, kan? Karena Anda tidak memiliki to-- itu lebih cepat. Anda tidak harus berkomunikasi dengan beberapa perangkat lain. Jika Anda hanya pada Anda klien, Anda tidak pernah akan harus pergi dan lihat apa yang ada di server dan kemudian melaporkan kembali atau sesuatu seperti itu. Jadi sisi klien cenderung menjadi sedikit lebih cepat. [01:11:15] GABE: Ya, tapi ini bukan berarti PHP adalah lebih cepat dari JavaScript atau apapun dari sejenisnya. Mereka menjalankan jenis di sama kecepatan karena mereka berdua bahasa ditafsirkan. Hal yang lambat di sini adalah permintaan. Jadi Anda benar-benar akan semua jalan ke Brasil untuk mendapatkan informasi yang tinggal di sana. Tapi PHP dan JavaScript, mereka jenis berjalan dalam kecepatan yang sama. Ini bukan salah satu yang lebih cepat dari yang lain. Ini, juga, trik pertanyaan di sini. Jadi JavaScript pernah menjadi kode mesin, benar atau salah? [01:11:47] AUDIENCE: Salah. GABE: Salah. Ini harus menjadi mesin kode karena kode mesin adalah satu-satunya hal mesin mengerti. Meskipun tidak dikompilasi, masih menjadi kode mesin karena penafsir hanya sebuah program yang berjalan baris demi baris dan mengubah baris yang menjadi sesuatu yang komputer mengerti. OKE? Keren. [01:12:08] Davin: Berikut ini hanya sangat dasar halo program JavaScript dunia. Jadi saya tidak tahu if-- Anda pernah melihat ini. Tapi Anda hanya memiliki HTML di sini. Dan bukan benar-benar menempatkan JavaScript di tag script, sehingga Anda akan biasanya menaruhnya di kepala. Anda memiliki tag script. Anda drop di sana. Semua yang kami lakukan di sini adalah kita sudah dihubungkan in-- jadi kami telah terhubung dalam sebuah file JavaScript seperti ini. Dan Anda semua telah melakukan ini, kan? Jadi, ketika Anda menggunakan jQuery dan underscore.js di babak p-set, Anda tidak memiliki ton kode di tag script Anda, di kepala Anda. Anda bisa melakukan itu, tetapi Anda hanya menghubungkan dalam. Dan Anda menghubungkan dalam hanya suka Anda lakukan dengan CSS. Jadi itu hanya membuat lebih mudah untuk membaca begitu kode Anda tidak seperti 1.000 baris panjang dengan ton fungsi yang Anda mungkin tidak akan menggunakan. [01:12:52] Sebaliknya, Anda hanya link dalam. Ini compartmentalizes itu. Ini seperti menulis beberapa file header, dan kemudian termasuk file header di C. Anggap saja seperti ini. Jadi, apa ini lakukan? Nah, ini akan dijalankan. Ini akan mengingatkan. Jadi Anda akan mendapatkan sedikit pop up disebut halo dunia. Pertanyaan singkat, hanya kewarasan cek, sehingga Anda lihat di sini di dalam tubuh, mengatakan tubuh, HTML sini. Apa yang lebih dulu? Apakah saya melihat tubuh, HTML sini, atau apakah saya melihat peringatan yang pertama? [01:13:19] AUDIENCE: Pemberitahuan. [01:13:20] Davin: Benar. Dia mengatakan waspada. Mengapa? [01:13:22] AUDIENCE: Karena Anda pergi dari atas ke bawah. [01:13:24] Davin: Ya. Sempurna. Jadi katanya, Anda pergi dari atas ke bawah, yang benar-benar benar. Anda akan pergi dari atas ke bawah. Dan dalam JavaScript, jQuery, Anda memiliki fungsi yang seperti onload, atau siap, dan mengatakan, OK, tunggu sampai semua HTML ini telah dimuat. Dan kemudian, panggilan JavaScript. Karena kita tidak memiliki itu di sini, Hal pertama yang akan terjadi adalah itu akan pergi dari atas ke bawah. Ini akan memukul bahwa JS sebut, itu akan mengingatkan. Setelah itu Anda klik OK, peringatan yang hilang. Maka itu akan menunjukkan Anda HTML tubuh di sini. Nice. [01:13:54] OK, jadi hanya nyata cepat, menulis dalam JavaScript super cepat. Dalam rangka untuk menyatakan variabel, nama var. Jadi di C, Anda memiliki int i, Anda harus untuk menyatakan apa jenis itu. PHP, $. JavaScript, var. Kami berbicara tentang hal ini. Baiklah, mari kita pergi. [01:14:11] Loops, hal yang sama. Hal yang sama. Deklarasi fungsi, sehingga seperti Anda lihat di C. Satu-satunya hal yang berbeda begitu ketika Anda bisa bahasa pemrograman lain, seperti ketika Anda mengambil 51 semester berikutnya dan Anda lakukan dengan OCAML, Anda dapat menangani fungsi anonim. Jadi itulah yang Anda miliki di sini. Jadi Anda ingin dimasukkan ke dalam sum, beberapa jenis nilai sum. Tapi Anda mungkin hanya melakukannya sekali. Jadi Anda tidak ingin menyebutnya fungsi sum, memberikan deklarasi fungsi. Sebaliknya, Anda hanya menggunakannya sebagai fungsi anonim. Dan Anda telah melihat ini banyak. Anda akan melihat contoh ini dalam beberapa slide. Ya, kita lihat saja nanti. GABE: Pertanyaan yang bagus. Kapan Anda ingin menggunakan fungsi anonim di sini? Pada dasarnya, ketika Anda menginginkan sesuatu, seperti acara, terjadi. Jadi ketika mouse diklik, misalnya, Anda ingin beberapa fungsi yang akan dipanggil. Jadi Anda lulus ke acara tersebut handler, Anda lolos ke acara tersebut, jenis, fungsi yang Anda ingin disebut. Dan apa yang Anda lewat seperti, di akhir hari, hanya pointer ke bahwa instruksi, ke fungsi. Jadi tidak seperti Anda lewat seluruh kode, seperti pointer ke fungsi. Dan kemudian, ketika seseorang mengklik mouse, maka fungsi yang dipanggil. [01:15:17] Davin: Array, sehingga Anda memiliki deklarasi array yang. Kemudian, sebuah array untuk meletakkan segala sesuatu dalam. Nyata cepat, apa yang akan mencetak ini? Apa yang akan menjadi elemen ketiga? [01:15:31] AUDIENCE: "JS". [01:15:32] Davin: Benar, itu akan menjadi "JS." Tunggu, kembali. Apa panjang? [01:15:37] AUDIENCE: Tiga. Davin: Tiga, kan? Apa yang Anda pikirkan. OK, sekarang pergi. Array, Anda dapat menambahkan hal-hal kepada mereka. Jadi Anda bisa melampaui batas awal mereka. Hanya sesuatu yang perlu diingat. PHP, JavaScript, mereka sedikit Sedikit lebih pemaaf dalam hal hal seperti itu. Benda, sangat mirip struct di C, sangat banyak seperti array asosiatif di PHP. Anda semua punya pengalaman dengan ini. Jadi JSON, ketika Anda melewati JSON bolak-balik dalam p-set delapan, itu objek. [01:16:03] Jadi ya, contoh, contoh cepat nyata. Berikut adalah obyek. Cara Anda referensi ini objek, jadi hanya nyata cepat, katakanlah saya ingin menemukan keluar, OK, apa saja? Dan nama objek di sini adalah CS50. Dan kemudian jika saya memiliki asosiatif array, bagaimana aku akan melakukannya? Saya akan menggunakan kunci, kan? Jadi saya memiliki nama array. Saya memiliki braket, kutipan, kunci, kutipan end, akhir braket, dan yang akan referensi yang elemen di dalam array asosiatif saya. Bagaimana cara direferensikan Tentu saja dalam objek saya? Ada yang tahu? [01:16:39] AUDIENCE: [tidak terdengar]. [01:16:40] Davin: Ada apa? AUDIENCE: CS50.course. Davin: Benar, ya. Jadi CS50.course. Jadi cara Anda referensi hal-hal dalam objek JSON adalah dengan sebuah titik. [01:16:48] AUDIENCE: Anda juga dapat menggunakan sintaks array. [01:16:53] Davin: OK, baik. [01:16:54] GABE: Anda juga dapat menggunakan CS50 braket, string, seperti tanda kutip. AUDIENCE: Saya pikir itu identik dengan PHP. GABE: Ini hal yang sama. Davin: Baik! Tapi Anda akan melihat tempat-tempat lain ini. Ya, begitu terus. Ini adalah apa yang saya katakan. Jadi dalam contoh JavaScript jQuery. Jadi ini adalah DOM saya, kan? Nyata cepat, jadi saya memiliki kepala, hello world, tubuh. Saya memiliki tombol. Ia mengatakan "mendorong saya," jadi saya ingin mendorongnya. Dan saya ingin melakukan sesuatu ketika itu diklik. Benar, berikutnya. [01:17:31] Benar, jadi ini saya JavaScript. Jadi jQuery hanya lebih mudah cara untuk menulis JavaScript. Jadi ini, dan apa yang saya akan menunjukkan Anda selanjutnya, akan menjadi jQuery, adalah identik. Jadi mereka akan melakukan hal yang sama. Hanya jQuery cenderung menjadi sedikit lebih mudah. Orang cenderung menyukai lebih. Ini memiliki banyak fungsi. Jadi orang cenderung menggunakan jQuery. Kamu semua digunakan jQuery di babak p-set. Jadi apa yang akan melakukan ini? Apa yang akan JavaScript-- ini jadi ini sekadar JavaScript. Apa yang akan melakukan hal ini? Apa yang akan ia lakukan? [01:18:03] Jadi pertama, Anda melihat jendela onload. Yang Tepat? Jadi kita tidak melihat itu sebelumnya. Jadi ini akan menunggu sampai seluruh beban jendela. Jadi itu akan menunggu sampai HTML, semua gambar beban sebelum melakukan sesuatu. Jadi katakanlah DOM kami telah dimuat. Semuanya ada di sana. Lalu apa yang akan terjadi? Ya? [01:18:19] AUDIENCE: Tombol muncul. [01:18:22] Davin: Tombol sudah ada. Ya, jadi tombol yang sudah ada. Tapi ini akan berkata, OK, jika saya klik tombol, sehingga tombol sudah ada, seperti itu tag HTML. Tunggu, kembali cepat. Tag ini tepat di sini adalah akan menjadi tombol sudah. Sudah ada tombol. Tapi kemudian, JavaScript tag, di sini, ia mengatakan, OK, saya ingin untuk mendapatkan elemen dengan ID, sehingga tombol pencarian hanya mengatakan, OK, saya ingin untuk memetakan variabel ini untuk tombol itu. Jadi variabel yang hanya sebuah cara yang lebih mudah untuk mengakses tombol itu. Dan saya katakan, OK, jika saya klik itu tombol, jadi jika saya klik elemen itu, dan elemen ini mengacu tombol, jika saya klik, maka saya ingin memanggil fungsi. Berikut adalah salah satu anonim fungsi kami bicarakan. [01:19:03] Panggil saja beberapa fungsi. Di dalam fungsi tersebut, pada dasarnya sesuatu yang kita telah melihat banyak, waspada. Anda klik tombol pencarian. Itu akan pada dasarnya memiliki tombol. Anda klik. Anda mendapatkan peringatan itu. X keluar. Itu dia. Ya? [01:19:16] AUDIENCE: Jadi, jika Anda menempatkan script [Tak terdengar], tag script dalam HTML Anda? [01:19:21] Davin: Anda dapat menempatkan script tag lurus di kepala karena Anda memiliki onload ini. Ini juga bahwa Anda memiliki klik. Jadi itu akan menunggu sampai Anda klik sesuatu. Tapi onload hanya untuk menjadi aman, untuk membuat yakin semuanya beban ke dalam HTML sebelumnya. Ya? Anda ingin mengatakan sesuatu? [01:19:40] GABE: [tidak terdengar]. Davin: Ya. [01:19:42] AUDIENCE: hindari Jadi onload mendefinisikan tombol pencarian variabel dengan hanya mengatakan document.getElementById tombol pencarian dot [tidak terdengar]. [01:19:49] Davin: Pasti, tapi kemudian string Anda hanya akan besar. Tepat, jadi ini hanya untuk membuatnya lebih mudah bagi Anda, ya. Iya Nih? [01:19:56] AUDIENCE: Mana kami membuat window.onload? Atau document.ready? [01:19:58] Davin: Ya, ada. Ya, ada, saya diperiksa. [01:20:02] GABE: Tidak bagi mereka untuk peduli. [01:20:03] Davin: OK, jadi aku akan untuk memberitahu Anda tetap. Jadi pada dasarnya, hanya secara umum, sehingga window.onload menunggu sampai DOM Anda, semua HTML Anda, beban. Ini menunggu sampai beban gambar Anda. Ini menunggu sampai semuanya beban. document.ready, itu hanya menunggu sampai beban DOM Anda. Setelah HTML adalah semua ada, sekali DOM Anda di sana, mulai berjalan. Itulah satu-satunya perbedaan. [01:20:23] GABE: kewarasan Cepat cek di sini. Jadi ini dapat dilihat jenis seperti baris kode, kan? Karena itu window.onload sama banyak hal. Ketika JavaScript membaca ini, benar atau palsu, fungsi dijalankan. Salah. OKE? Apa yang terjadi di sini, Anda hanya lewat fungsi ini sebagai fungsi anonim untuk window.onload. Dan kemudian ketika apakah akan untuk benar-benar dijalankan? Ketika beban jendela. Itu acara. Jadi itulah jus t hal kami bicarakan sebelumnya, kan? Jadi, ketika peristiwa terjadi, fungsi terjadi. Hal yang sama dengan onclick. [01:20:59] Davin: OK, jadi seseorang mengambil pergi document.ready tersebut. Tapi ini akan menjadi same-- tepat AUDIENCE: Tanda dollar, yang document.ready a. Itu jalan pintas. [01:21:07] Davin: Oh, itu? OK, jadi ini berarti document.ready, shortcut. Tapi ini adalah sama dengan window.onload kecuali untuk itu sedikit perbedaan Aku bercerita tentang. Dan ini adalah jQuery. Jadi ini adalah sama persis thing-- ini JavaScript. Hal ini hanya-- beberapa orang berpikir itu sebagai berat badan lebih ringan, versi ramping yang memiliki banyak fungsi Anda mungkin akan menggunakan. Jadi ini melakukan hal yang sama persis. [01:21:34] Jadi hal-hal yang semacam menunjukkan. Jadi, dalam contoh lain, kita memiliki document.getElementById, jadi kami punya selama ini string yang akan mendapatkan elemen dengan ID apa itu. Itu digantikan oleh panggilan ini di sini. Jadi Anda melihat tanda dolar, kemudian Anda melihat kutipan, hashtag. Hashtag selalu pemilih. Ia mengatakan, OK, ini ada hubungannya dengan ID. Apa pemilih untuk kelas? [01:21:56] AUDIENCE: Dot. [01:21:57] Davin: Dot, benar. Jika Anda hanya akan pilih tag, apa itu? Hanya saja tag, tepatnya. Dan Anda bisa menggunakan itu di sini, juga. [01:22:05] GABE: Dan dengan tag, yang kita maksud seperti div, misalnya, atau kepala. [01:22:08] Davin: Atau badan atau p atau hal seperti itu, ya. Jadi di sini, OK, bukannya mengatakan document.getElementById, ini adalah hal yang sama persis. Hanya dalam jQuery, itu lebih pendek. Jadi itu sederhana. Karena itu, tidak ada lagi onclick, klik. Fungsi jQuery, memanggil fungsi ini. Alert adalah sama persis. Jadi itu sedikit lebih kecil, atau sedikit pendek, orang bit-- sedikit berpikir itu sedikit lebih mudah untuk menulis, sedikit lebih mudah untuk dipahami. Tapi ini adalah jQuery. Banyak orang mendapatkan sedikit bit bingung dan khawatir dan mereka berpikir, OK, jQuery berbeda dengan JavaScript. Aku harus ingat ini dua hal yang berbeda. Ini bukan. Maksudku, itu sintaks yang berbeda. Tapi jQuery adalah JavaScript. Ini hanya tampaknya versi yang lebih baik yang mungkin lebih mudah untuk memahami bahwa orang menggunakan. GABE: Ya, untuk menjadi jujur, itu tanda dolar yang Anda lihat di jQuery, itu hanya nama dari fungsi yang mendefinisikan jQuery. Tidak memiliki sesuatu yang istimewa. Apakah Hanya saja nama dari suatu fungsi, seperti Anda bisa menentukan tanda dolar. [01:23:03] Davin: Ya, jadi membicarakan hal ini. Beberapa hal yang berguna. Saya melihat kembali pada kuis tua. Dalam beberapa kuis terakhir, mereka telah harus menggunakan hal-hal seperti ini. Jadi document.ready, sehingga pastikan semuanya dimuat sebelum Anda mulai melakukan hal-hal. Pilih ID, atau pilih kelas, itu baru saja menjadi kutipan dot beberapa kelas, akhir kutipan. Kirim, jadi jika Anda menyerahkan formulir dan panggilan fungsi ini setelah formulir mengajukan. Nilai, jadi katakanlah saya punya formulir penyerahan, seperti nama pengguna, email, masa bodo. Aku punya kotak teks. Jadi aku mengetik ke dalam kotak teks. Nah, jika Anda ingin mendapatkan nilai keluar dari kotak teks, Anda menggunakan dot val. Dan kemudian, di sini, dot HTML adalah sama seperti dokumen dot getElementById dot innerHTML. Sehingga akan kembali Anda HTML dari ID itu. Di sini, Anda hanya menggunakan beberapa ID atau titik apapun HTML. Itu akan mendapatkan HTML dari elemen. Jika Anda ingin kemudian mengubahnya HTML, Anda dapat melewati sesuatu. Jadi, Anda akan seperti dot HTML, dan kemudian dalam, kutipan, HTML baru atau sesuatu. [01:24:05] GABE: OK, jadi AJAX. Aku benar-benar ingin memahami AJAX sangat baik. Jadi saya ingin kalian memahami AJAX sangat baik. Karena jika Anda melakukannya, Anda cukup banyak akan untuk memahami segala sesuatu yang harus dilakukan dengan HTTP, PHP, JavaScript karena semua datang bersama-sama di AJAX. AJAX bukanlah bahasa. AJAX adalah teknik. Dan menggunakan banyak alat yang berbeda. AJAX singkatan asynchronous JavaScript XML. Jadi metode, bahasa, data. [01:24:36] Jadi bahasa utama yang kita gunakan di AJAX untuk memicu segalanya dan menangani segala sesuatu nanti adalah JavaScript. Itu sebabnya berkaitan sangat dekat dengan JavaScript. Dan kemudian asynchronous adalah karena kita tidak melakukannya sekaligus ketika kita sedang loading halaman. Ini adalah hal yang kita bisa melakukan hal-hal semacam secara paralel. Ide utama di balik AJAX adalah bahwa Anda ingin untuk mendapatkan beberapa informasi tertentu. Sebagai contoh, ketika Anda mengetik baru Nama pengguna ketika Anda mendaftarkan nama pengguna, Nama pengguna saya abc123. Dan kemudian, pada akhir bentuk, Anda harus klik Submit. Dan itu harus pergi ke server, dan kemudian memeriksa apakah dalam database, abc123 sudah ada. Dan jika sudah ada, ia mengatakan, Nama pengguna sudah dalam database. Dan mereka, Anda harus mengisi seluruh formulir lagi. Dan itu benar-benar, benar-benar buruk. [01:25:23] Dan kemudian orang mengatakan, OK, mengapa tidak bisa kita hanya melakukan permintaan HTTP kecil untuk hanya memeriksa untuk melihat apakah pengguna ini dalam database sebelum pengguna harus menyerahkan seluruh formulir? Jadi misalnya, ketika pengguna selesai mengetik abc123, mari kita pergi ke server sedikit bit dan hanya mendapatkan benar atau salah dari server untuk melihat apakah itu adalah nama pengguna yang valid atau tidak. OK, jadi itu salah satu utama menggunakan AJAX saat ini masih. [01:25:49] Davin: Jadi nyata cepat, dalam panggilan Ajax di jQuery, Anda bisa menunjukkan bahwa Anda ingin menjadi sinkron. Anda tidak harus melakukan ini. Tapi Anda bisa melakukan itu. Dan jika Anda melakukan itu, apa yang akan terjadi? Nah, misalnya, ketika Anda mendapatkan berita atau apa pun, browser Anda hanya akan menunggu sampai yang seluruh panggilan selesai bukannya membiarkan Anda melakukan lain hal yang benar setelah Anda klik. [01:26:14] GABE: Ini tidak lulus lagi. Astaga. Mohon Maaf! Yup. "Di masa lalu, klien diperlukan untuk permintaan seluruh isi website. " Itulah yang saya katakan. Hal ini memungkinkan kita untuk mengirim GET tambahan atau POST permintaan tanpa untuk reload browser kita. Jadi pada akhir hari, kami benar-benar membuat sebuah permintaan HTTP di sini menggunakan JavaScript. Karena sebelumnya, kami hanya menggunakan JavaScript untuk mengubah HTML yang sudah datang. Dan sekarang, kita dapat menggunakannya untuk antarmuka dengan server web juga. Cara ini terjadi adalah kita memiliki klien. Davin adalah klien. Dan dia memiliki semua JavaScript berjalan karena HTML adalah bodoh. JavaScript cerdas. Jadi Davin Davin memiliki pintar nya bagian dan bagian bodoh nya. Dia akan menggunakan bagian pintar nya sekarang. Dia akan menggunakan JavaScript permintaan, misalnya, apakah abc123 dalam database atau tidak. [01:27:04] Jadi Davin, silakan, Anda hanya kirimi saya permintaan HTTP. Terima kasih. Jadi ia hanya mengirim permintaan HTTP. Anda lihat itu? Dan itu hanya dengan cara yang sama bahwa setiap permintaan HTTP dikirim. Browser, Google Chrome atau sesuatu, adalah akan melihat bahwa Davin itu mencoba untuk mengirim permintaan HTTP, akan membantu hm sedikit. Dan itu akan pergi semua jalan ke server. Sekarang, server akan memiliki PHP di sini, atau bahasa lainnya. Sama seperti dalam permintaan HTTP normal. Hal ini cukup banyak permintaan HTTP normal. [01:27:31] Dan kemudian, server akan mengatakan, OK, Davin ingin saya untuk memeriksa apakah abc123 ini dalam database. Pergi berbicara dengan model. Model mengatakan tidak. abc123 adalah nama pengguna yang baik. Dan kemudian, server web akan menggunakan PHP untuk membuat beberapa bentuk file. Bisa jadi benar-benar hanya file yang berisi "ya" di dalamnya, atau "tidak, atau sesuatu seperti itu. Bisa jadi file apapun. [01:27:54] Bisa jadi seperti aku akan mengirim Davin gambar bebek kalau ada di database dan mengirim gambar dari hamster jika tidak dalam database. Itu akan menjadi semacam bodoh, tetapi akan bekerja. OK, jadi saya mengirim bebek ke Davin. Davin mendapat bebek. Dan sekarang, siapa yang akan untuk menangani bebek? Bagian pintar Davin lagi, jadi JavaScript, kan? JavaScript mengirim permintaan, dan JavaScript akan menerima permintaan dan menafsirkannya dalam beberapa bentuk. [01:28:22] Dan dalam hal ini, itu akan mengatakan, OK, jika bebek maka aku baik. Jika hamster, maka aku akan mengatakan, tidak, nama pengguna yang sudah ada dalam database. Tapi biasanya, Anda tidak akan mengirim bebek. Anda akan mengirim sesuatu yang sedikit lebih pintar. Dan apa yang kita gunakan adalah XML. Dan baru-baru ini, kita menggunakan JSON. JSON hanya JavaScript Object Notation, yang pada dasarnya Anda mendapatkan seluruh objek JavaScript. Dan Anda memasukkannya ke dalam sebuah file, sama seperti bahwa objek CS50 yang melihat kalian. Anda memasukkannya ke dalam sebuah file, dan Anda kirimkan ke Davin. [01:28:53] Jadi dalam hal ini, saya akan membuat objek JavaScript dan hanya mengatakan, pengguna ada, ya. Atau pengguna ada, tidak ada. Dan mengirimkannya kembali kepadanya. Dan mengapa JSON? Karena orang siapa yang menerima ini akan menggunakan JavaScript untuk menangani respon. Dan JavaScript bekerja dengan baik karena itu disebut JavaScript Object Notation. Yang Tepat? Jadi dia hanya bisa memanggil fungsi dan mendapatkan objek ini baik dari respon. Dan kemudian, dia akan mengetahui apakah pengguna yang ada di database atau tidak. [01:29:22] Jadi Anda lihat, semua itu datang bersama-sama di server web, dan kemudian ada satu permintaan HTTP dan satu respon HTTP dan segala sesuatu. Jadi, pastikan kalian memahami panggilan AJAX ini karena membantu Anda memahami semua konsep yang kita bicarakan. [01:29:37] Jadi, inilah contoh AJAX dengan jQuery. Dan di sini, kita lakukan dengan mendapatkan JSON. Jadi kita tidak mencoba untuk mendapatkan gambar kucing di sini, atau bebek. Kami sedang berusaha untuk mendapatkan file JSON. Dan kemudian kita menunggu sampai hal itu dilakukan, dot dilakukan. Itu berarti saya sedang menunggu respon. Mungkin butuh sedikit waktu. Kemudian, Anda melihat loading sedikit. Jika Anda ingin melakukan itu di website Anda. Jadi dot dilakukan, dan kemudian apa terjadi bila dilakukan? Anda lulus dalam anonim fungsi, sama seperti yang kita lihat sebelumnya. Karena dilakukan merupakan acara, hanya seperti mengklik mouse atau apa pun, untuk jQuery. Jadi Anda lulus dalam fungsi ini dengan data, teks, status, dan jqXHR. Dan pada dasarnya, itu hanya beberapa variabel Anda dapat menggunakan di kemudian hari memiliki status permintaan HTTP, data yang akan mengirimkan kembali kepada Anda. Jadi Anda bisa nanti menafsirkannya dan melakukan sesuatu yang berarti dengan itu. Dan jika gagal, ketika mungkin gagal? Nah, ketika permintaan HTTP memberikan Anda 500 atau sesuatu seperti itu. Kemudian, itu akan memberitahu Anda status, jenis kegagalan yang, dan segala macam hal. Anda harus memastikan untuk menangani kedua kasus, jika tidak program pergi gila. [01:30:42] Davin: Jadi ya, ini adalah persis apa yang Anda lihat pada terakhir p-set Anda. Panggilan AJAX sebenarnya dalam mendapatkan JSON. Itulah panggilan. Dan kemudian, dot dilakukan adalah seperti memeriksa apakah itu berhasil. Jika berhasil, Anda ingin untuk melakukan sesuatu dengan data. Anda kembali dari itu Data permintaan JSON. Itulah apa yang Anda dapatkan kembali. Jadi, jika Anda ingat dari p-set Anda, banyak Anda seperti Data braket i atau apa pun, titik link atau judul. Apapun datang kembali itu JSON, apa pun bidang dalam bahwa objek JSON, itulah apa yang Anda dapatkan kembali. Data apa yang Anda mendapatkan kembali. Status teks, hanya sesuatu yang memungkinkan Anda tahu apa yang terjadi. Dan kemudian, jqXHR, itu hanya permintaan XML HTTP jQuery. Itu seperti sebuah objek. Dan kemudian gagal, seperti Gabe mengatakan. GABE: Dalam contoh kecil kami abc123 hanya untuk memeriksa apakah itu dalam database atau tidak, data akan menjadi sesuatu yang Anda akan dilakukan, jika data yang dot nama pengguna ada, yang adalah apa yang Anda PHP dihasilkan untuk Anda, jika data nama dot pengguna ada, maka Aku akan waspada, pengguna Nama sudah ada. Lain, aku hanya akan membiarkan pengguna lanjutkan mengisi formulir. OK, keamanan, keren. [01:31:50] Davin: Mau? [01:31:52] GABE: Aku seperti ini. Jadi sesuatu yang tampak akrab. Kita hampir selesai. Jadi ini hanya contoh kalian lihat di kelas. Anda menggunakan argv1 sini. Itu seperti argumen baris perintah. Dan kita mem menyalin yang menjadi penyangga ukuran 12. Apa masalahnya di sini? Buffer overflow! Karena kita memiliki buffer ukuran 12. argv1 mungkin memiliki ukuran dua miliar. Kami tidak melakukan pengecekan batas. Jadi kita bisa menyalin banyak memori. Dan kita akan menjadi sangat buruk tentang ini. Apa yang bisa kita lakukan itu sangat, sangat berarti dalam kasus ini? Iya Nih? AUDIENCE: Bagian dari dua miliar hal berisi kode executable yang mengembalikan [Tak terdengar]. GABE: Tepat. Jadi itulah jenis hal yang menggunakan orang untuk jailbreak iPhone, misalnya. Jadi hal semacam itu. Karena Anda hanya dapat membuat perangkat mengeksekusi kode apapun yang Anda sukai. Cara mengatasinya, sehingga memperbaiki mudah. Hanya memeriksa batas. Anda memeriksa null karena kami selalu memeriksa null ketika kita sedang berhadapan dengan string. Dan kemudian, Anda mengambil panjang string sebelumnya. Dan jika string panjang adalah string yang valid panjang, yang berjarak 0 dan 12, kemudian kita baik. [01:33:03] Davin: Jika Anda tidak memeriksa null, nyata cepat, apa yang akan terjadi? Ini akan seg kesalahan. Mengapa ia akan seg kesalahan? Karena Anda menelepon strlen pada nol. GABE: Ya. Benar atau salah, menggunakan salah satu sandi adalah ide yang baik. [01:33:19] AUDIENCE: Salah. [01:33:20] GABE: Salah. Gunakan banyak password, dan besar, yang panjang. Ikon gembok memastikan keamanan. [01:33:26] AUDIENCE: Salah. [01:33:27] GABE: Salah. Tidak ada maksud apa apa. Ini hanya sebuah ikon. SSL melindungi terhadap Pria dalam serangan tengah. AUDIENCE: Salah. GABE: Salah. OK, jadi semua orang adalah palsu. Nice. [Tidak terdengar] Ingin berbicara tentang ini? Giliran Anda. Davin: Jenis serangan, man in the middle. Apa seorang pria di tengah serangan? AUDIENCE: [tidak terdengar]. Davin: Jika Anda mengirim HTTP permintaan, mereka bisa melakukan ini, kan? Tetapi jika Anda mengirim HTTPS, mereka mungkin tidak akan mampu melakukan hal ini. Ada banyak poin sepanjang koneksi Anda. Anda memiliki router. Anda memiliki server DNS. Jika seseorang mampu secara fisik melihat apa yang Anda mengirim, sehingga seseorang mampu benar-benar mendapatkan antara Anda, klien, dan server, dan dapat melihat apa yang Anda mengirim, ini adalah orang dalam serangan tengah. Jadi untuk melihat apa yang Anda mencoba untuk mendapatkan dari server, atau dapat see-- buruk, Anda mungkin bisa melihat cookie atau sesuatu seperti itu. [01:34:16] Jadi misalnya, jika Anda tidak menggunakan SSL, dia mungkin bisa melihat sesi ID cookie. Dan ini disebut pembajakan karena ia melihat cookie ID Anda, dan kemudian dia mampu untuk pergi ke situs dan berpura-pura menjadi Anda. Karena sama seperti di PHP, ingatlah ketika kita masuk, apa yang kita lakukan? Kami menetapkan ID sesi yang sama dengan ID. Jadi yang mengidentifikasi Anda. Itu sebabnya Anda dapat melihat portofolio Anda dan portofolio tidak semua orang lain. [01:34:38] Nah, kalau aku bisa mendapatkan kue itu, maka saya bisa masuk ke halaman tersebut. Dan kemudian, saya hanya bisa melihat barang-barang Anda dan mulai membeli dan menjual barang-barang. Jadi itulah pembajakan. Tapi Anda tidak harus dapat to-- sehingga Anda dapat menggunakan pria dalam serangan tengah bahkan jika mereka menggunakan SSL. Tapi Anda tidak harus bisa. Jika mereka menggunakan SSL, Anda tidak bisa membajak sesi. Mengapa? Karena itu semua dienkripsi, yang tepat? jika itu dienkripsi, dan aku masih seorang pria di tengah, aku masih mendapatkan data Anda. Tidak apa-apa. Tapi itu dienkripsi. Jadi saya tidak bisa benar-benar menggunakannya. Jadi itu dua. [01:35:09] Nyata cepat, lintas situs pemalsuan permintaan. Itu hanya jika ada link dan link yang melakukan sesuatu bahwa Anda tidak berpikir itu harus dilakukan. Jadi misalnya, jika link itu akan membeli saham atau menjual saham, dan Anda tidak tahu itu. Anda mengklik pada link, mengirimkan permintaan, membeli atau dijual sesuatu yang Anda tidak bermaksud melakukannya. Itulah itu. [01:35:25] Scripting lintas situs, jadi di sini, Anda melintas di via q variabel, bukan lewat dalam beberapa jenis nilai, mungkin q seperti nama. Jadi bukan lewat equals q Davin atau sesuatu seperti itu, jika Anda tidak menggunakan HTML karakter khusus, jika Anda tidak melarikan diri ini untuk memastikan itu OK, maka saya bisa lulus dalam gantinya, katakanlah di sini saya katakan cetak atau sesuatu seperti itu, maka saya bisa lulus dalam sini panggilan skrip. [01:35:51] Jadi, alih-alih hanya mendapatkan variabel, Saya kemudian akan mengeksekusi panggilan script ini. Jadi dalam script yang panggilan, apa fungsinya? Dokumen dot lokasi, yang akan mengubah lokasi dokumen. Jadi aku akan mengarahkan ke tempat lain. Ini disebut orang jahat di contoh ini, sangat baik. Tidak bisa memikirkan kata. Dan kemudian, apa yang bahkan lebih buruk adalah bahwa aku akan untuk kemudian mengatur cookie, yang beberapa variabel yang saya miliki dalam website ini. Aku akan mengaturnya sama ke dokumen dot kue. Oleh karena itu, aku akan untuk mencuri cookie Anda. Dan aku akan mengarahkan beberapa informasi ke situs web bahwa Anda tidak harus mengakses. Dan ini semua terjadi karena kau tidak melarikan diri apa yang telah Anda lihat. Ya? [01:36:29] AUDIENCE: Jadi hanya untuk membuat yang jelas, itu vulnerable.com bahwa rentan terhadap hal ini. Jadi link yang dapat muncul pada halaman tertentu. Seseorang mengklik di atasnya, pergi ke vulnerable.com. Anda memiliki cookie untuk vulnerable.com. Katakanlah Facebook adalah rentan, sehingga facebook.com. Anda memiliki kue Facebook Anda. Apa ini lakukan, Anda akan facebook.com, itu segera mengarahkan Anda badguy.com, namun termasuk informasi cookie Anda. Jadi itu adalah redirect cepat, tapi kue Facebook Anda disertakan dengan redirect itu, dan itulah bagaimana mereka [tidak terdengar]. GABE: Ya, ada beberapa hal yang sangat berarti bahwa orang dapat lakukan jika ada ini. Sebagai contoh, jika diperbolehkan Facebook semua orang untuk mengubah nama pengguna Anda, dan mereka tidak melakukan apapun pemeriksaan, sehingga Anda bisa memasukkan hal JavaScript yang mengubah gambar Anda ke hamster. Dan yang menyisipkan sama JavaScript ke semua orang yang melihat halaman Anda. Jadi semua orang yang melihat halaman Anda memiliki hal yang sama dalam nama pengguna. Dan karena itu virus, menyebar secara eksponensial. Davin: Kami akan melewatkan terakhir satu, dan kemudian kami sudah selesai. Jadi ini hanyalah contoh lain. Jadi ini adalah mereka tidak melarikan diri tabel SQL mereka. Jadi Anda bisa menjatuhkannya. Jadi, Anda ingin menghindari hal-hal. Itu adalah contoh sebelumnya dengan site scripting lintas. Maaf kami berlari sedikit terlambat. Besok, maaf! Besok, kita memiliki jam kantor. Jadi jam kantor di Cabbot 8:00-11:00. Jam kantor yang ketat untuk pertanyaan kuis.