[00:00:02] [Muzik bermain] Hannah: Hi, semua orang. Terima kasih guys begitu banyak untuk keluar dalam cuaca yang menjijikkan untuk kuiz satu sesi mengkaji. Seperti yang anda semua tahu, kuiz satu adalah Rabu ini. Jadi, kita akan pergi melalui sekumpulan topik. DAVIN: Hey, boleh saya katakan sesuatu yang cepat sebenar? Hannah: Yeah, ini akan Davin untuk mengatakan sesuatu yang cepat. DAVIN: Maaf. Hanya cepat sebenar, jika anda mempunyai soalan mengenai kuiz ini, anda boleh pergi ke dalam talian. Pergi ke 2014 kuiz satu, kira-kira kuiz. Ia mempunyai kira-kira logistik di mana untuk pergi, apabila pergi. Jika anda mendaftar pada masa yang sama, kami akan mempunyai kuiz solek pada 5:30. Atau jika anda menghantar saya satu isu, anda mempunyai beberapa isu lain. Tetapi 05:30 adalah solekan masa pada hari Rabu. Tetapi jika anda mempunyai soalan, soalan umum, talian mempunyai semua logistik. Jadi semak sana dahulu. [00:00:47] Hannah: Awesome. Jadi di sini adalah senarai besar topik bahawa kita akan melalui hari ini. Saya akan menutup semua C barangan, iaitu bahawa Lajur pertama. Jadi bahan C yang kita dilindungi selepas kuiz sifar. Bermula dengan senarai yang berkaitan, termasuk petunjuk. [00:01:05] Baiklah, jadi kami melihat ini dalam sesi kajian semula yang terakhir, jadi saya akan pergi melalui ini adalah sedikit lebih cepat. Hanya mengangkat tangan anda jika anda mahu saya memperlahankan atau menangani sesuatu lanjut. Tetapi kita menggunakan dikaitkan senarai kerana kami bermula pada C dengan pameran. Dan tatasusunan yang besar, tetapi masalah ialah mereka mempunyai saiz yang tetap. Senarai Berkaitan membolehkan kita untuk mewujudkan dinamik bersaiz struktur data. [00:01:28] Dan kita mempunyai asas operasi kami, memasukkan, memadam, dan mencari. Dan yang boleh kita lakukan dalam sisipan kes paling teruk masa tetap jika kita hanya meletakkan ia di peringkat awal lagi. Padam dan mencari, paling teruk kes besar oh n masa. Jadi sekali lagi, hanya untuk flip melalui gambar-gambar ini, Saya tahu bahawa kita melihat ini masa lalu, tetapi kita mahu menjejaki senarai dikaitkan kami dengan mengesan yang ketua senarai dikaitkan kami. Kerana kita tahu bahawa setiap satu daripada nod kami hanya pergi untuk menunjukkan kepada nod seterusnya dalam senarai berkaitan kami. [00:01:58] Jadi itulah bagaimana kita menjejaki. Walaupun ini tidak keping berterusan ingatan, kita boleh menemui mereka dengan hanya berikut anak panah yang berbeza. Berikut adalah struktur kami untuk nod senarai berkaitan. Kami melihat masa lalu ini. Kami mempunyai nod struct kami. Dan ia mempunyai dua sifat. Nombor satu, sebenar nilai yang kita mahu untuk menyimpan. Dalam kes ini, ia adalah integer. Ia boleh menjadi rentetan, ia boleh menjadi arang, apa sahaja yang anda mahu. Dan kemudian, kita perlu menjejaki nod seterusnya dalam senarai berkaitan kami. Jadi yang akan menjadi satu penunjuk kepada nod yang seterusnya. Jika anda hanya melakukan carian, seperti yang saya katakan sebelum ini, anda akan mempunyai untuk mengikuti anak panah anda ke bawah. Pemasukan, anda akan menjejaki di mana seluruh senarai anda. Dan anda mahu mengubah hala kepala untuk menunjuk kepada elemen baru kami, yang dalam kes ini adalah satu, dan kemudian satu akan menunjukkan untuk baki senarai yang dipautkan. Jadi sekali lagi, saya tahu ini adalah sedikit sedikit berulang dari kuiz sifar. Oleh itu, kita perlu berhati-hati mengenai perintah itu di mana kita melakukan pointings ini supaya kita tidak kehilangan jejak belakang senarai. OK, apa-apa soalan dengan hanya secara tunggal dikaitkan senarai? Awesome, OK, sejuk. [00:03:06] Oleh sebab itu, kita akan pergi ke sesuatu hanya sedikit lebih rumit, duanya adalah terpakai dikaitkan senarai. Jadi di samping menjaga trek nod seterusnya, kami juga ingin menjejaki nod sebelumnya. Dan ini membolehkan kita, jika kita pada satu ketika dalam senarai dikaitkan kami, bukan sahaja berjalan lurus, tetapi juga melelar ke belakang. Kerana seperti yang kita lihat dalam senarai secara tunggal berkaitan, jika kami di beberapa nod, dan tiba-tiba, kami mengambil keputusan, sebenarnya, saya mahu pergi ke hak nod di hadapan-Ku, anda akan mempunyai untuk pergi semua perjalanan pulang ke kepala dan melelar melalui sehingga anda dapati nod yang anda cari. [00:03:35] Jadi ini menjadikan perkara-perkara sedikit mudah kerana kami cuba untuk melelar senarai dikaitkan kami. Tetapi ia memerlukan kita untuk mengesan satu pointer lebih, jadi satu lebih nod bintang. Baiklah, jadi di sini datang bahagian yang menyeronokkan. Kami akan mengamalkan melaksanakan keluarkan untuk senarai duanya adalah terpakai dikaitkan. Jadi ini adalah sesuatu yang permainan adil sama sekali untuk kuiz. Ia muncul pada masa lalu kuiz. Jadi pasti bersedia untuk memberi kod sedikit dalam C. Jangan lupa bahawa dengan semua PHP menyeronokkan dan JavaScript, kita masih perlu ingat untuk melakukan C. Jadi memoles yang jika anda berasa berkarat. [00:04:12] Baiklah, mari kita lihat jika kita boleh melakukan ini. OK, sejuk. Jadi kita akan cuba untuk mengedit betul-betul di sini, dan mudah-mudahan ini berjalan seperti yang dirancang. Baiklah, adakah sesiapa yang mahu memberikan saya cadangan tentang bagaimana saya harus bermula? Itu hanya andaian saya membuat adalah bahawa saya telah telah struktur tertentu, yang satu saya menunjukkan di muka surat terakhir, pada slaid terakhir. Dan saya menyimpan kepala saya dikaitkan Senarai di beberapa penunjuk dipanggil senarai. Adakah sesiapa yang ingin mendapatkan saya bermula? [00:04:42] PENONTON: Bolehkah anda mewujudkan baru nod untuk memanggil melalui senarai? [00:04:45] Hannah: Awesome, jadi kita akan membuat nod baru merangkak melalui senarai. Saya suka bahawa. Saya hanya akan memanggilnya penunjuk jika itu OK. Dan di mana ia harus pada asalnya bermula? [00:04:57] PENONTON: Mungkin di ketua senarai. Hannah: Beautiful. Kami ingin memulakan di kepala, yang Saya berkata akan disimpan di dalam senarai. Awesome. Setakat ini, begitu baik. Dan sekarang, matlamat kami adalah untuk melelar melalui senarai sehingga kita dapati nod dengan nilai n yang kita mahu memadam. OK? [00:05:13] Jadi sekarang adalah bahagian di mana kami mahu melelar melalui. Bolehkah sesiapa mencadangkan cara untuk melelar melalui? [00:05:19] PENONTON: gelung A. [00:05:20] Hannah: gelung A. Saya suka ia. Secara khusus, kita boleh cuba gelung sementara. OK, dan kita tahu bahawa kita telah mencapai akhir senarai kami apabila apa? PENONTON: Apabila penunjuk adalah batal. Hannah: Apabila penunjuk adalah batal. Beautiful, saya menyukainya. OK, sejuk. Jadi maaf jika pendakap bounding saya jenis terjatuh dari skrin. Kami membawanya kembali. OK, sejuk. Apa seterusnya? [00:05:48] Oleh itu, kita tahu kita mahu memadam nod yang mempunyai nilai n. Jadi mari kita mencari kes di mana kita sebenarnya mencari nod kami. Jadi bagaimana saya akan pastikan bahawa? Saya katakan jika penunjuk, dan kemudian jika saya ingin mendapatkan nilai daripada penunjuk, Saya hanya arrow n, sama dengan n, parameter yang kita berikan kepada fungsi ini, nod yang kita mahu untuk benar-benar padam. Sebarang soalan sehingga di sini? Baiklah. OK, jadi sekarang mari kita melukis gambar yang cepat di papan untuk menggambarkan ini. [00:06:24] Jadi katakan ada nod yang indah kami. Dan ia mempunyai nilai, saya hanya akan mengatakan empat. Dan ia menunjuk ke depan nod dalam senarai berkaitan kami. Dan tiada apa-apa di hadapannya. Oleh itu, kita mempunyai sebelumnya kami menunjuk kepada apa-apa. Dalam kes ini, kami tunjukkan ke belakang. OK, hanya menubuhkan saya senarai dikaitkan di sini. Dan kita mempunyai senarai yang menunjukkan untuk struktur ini untuk memulakan. Saya akan membuat satu lagi untuk demi kesempurnaan. OK. Saya akan menunjukkan ke hadapan ini. Dan saya akan menunjukkan satu belakang itu. Oops, maaf. Yeah, ini mendapat ke belakang. Adakah ia sekali lagi. OK, ada kita pergi. Baiklah, faham. OK, di sini adalah gambar kami. [00:07:21] OK, jadi kami ingin mempertimbangkan dua kes. Kes pertama adalah jika nod kita mahu memadam adalah pada permulaan sangat dalam senarai kami. Dan kemudian, kes kedua yang kita mahu yang perlu dipertimbangkan ialah jika itu di tempat lain. Saya faham bahawa ini yang sama sekali kemas melukis dengan semua memadam saya, tetapi mudah-mudahan kami akan cuba membuat ini jelas dengan beberapa kod. [00:07:40] OK, jadi mari kita menutup kes ini di mana kami mendapati nod kami, dan itu sekurang- memulakan senarai dikaitkan kami. Sesiapa pun memberi saya cadangan di sini tentang apa yang Yang perlu saya lakukan untuk benar-benar membuang nod kami? Ia sedikit rumit. OK? [00:07:56] PENONTON: Anda perlu mengambil nod yang akan sebelum ia dan membuat ia menunjuk kepada keputusan yang boleh selepas itu, dan mengambil nod yang akan selepas ia dan membuat ia menunjuk kepada nod sebelumnya. Hannah: Tepat. OK, jadi ini adalah kes jika- kita mempunyai dua kes. Kami mempunyai kes di mana nod yang kami cari adalah bahagian depan senarai. OK, dan kemudian kes yang anda yang dinyatakan adalah sebaliknya, bukan? Itu di tempat lain di dalam senarai. Jadi, anda berkata, kita perlu melihat nod sebelumnya, dan membuat nod sebelumnya menunjuk kepada nod yang seterusnya. Jadi katakan kami cuba untuk mengambil lima dalam lukisan sangat kemas saya di sini. Kami ingin memastikan bahawa empat masa kini menyebabkan enam. Four mata sebelah enam. Dan enam itu titik sebelumnya kepada empat. Itulah matlamat kami di sini, bukan? Ini adalah apa yang saya fikir anda hanya berkata di sana. [00:08:56] OK, jadi mari kita mendapatkan yang sekeping pertama. Mari kita buat yang mempunyai penunjuk sebelumnya sebelumnya. Jadi harus menunjukkan empat di sebelah apa? Tepat, dalam kes ini, enam. Oleh itu, kita tidak mengatakan penunjuk, akan datang. OK? Baiklah. Jadi mari kita menghilangkan gambar hodoh ini dan cuba untuk menarik satu yang lebih bagus sedikit. Kami mempunyai kepala senarai kami di sini. Dan yang menunjuk kepada nod yang pertama di Senarai berkaitan kami, yang kita kata adalah empat. Berikut adalah nod kedua kami, lima. Dan nod ketiga kami, enam. Hanya cuba untuk menarik yang sama tepat gambar, hanya sedikit lebih bersih. OK, jadi empat ini seterusnya asalnya menunjuk ke lima. Lima ini mata sebelah enam. Titik sebelumnya enam untuk lima. Dan lima tempat itu sebelumnya kepada empat. Begitu banyak lebih bagus! OK, sejuk. [00:10:04] Oleh sebab itu, apa yang kita lakukan hanya di sini, talian ini kod, yang mengatakan penunjuk sebelumnya akan datang, jadi apa maksudnya? Ini bermakna jika kita melihat lima, pergi ke nod sebelumnya, dan ia akan datang perlu sekarang titik hingga lima itu akan datang. Jadi pada dasarnya, apa itu melakukan adalah yang yang memadamkan anak panah ini dan menjadikannya melangkau hak ke atas lima. Adakah itu jelas? Saya tahu yang boleh menjadi sedikit tidak lengkap. Saya melihat beberapa mengangguk kepala. Itu baik. OK, sejuk. Sekarang, apa langkah seterusnya? [00:10:39] Saya telah menetapkan semula seterusnya. Sekarang, anak panah yang lain saya perlu berubah? Yang ini di sini. Enam sebelum ini. Kita tidak mahu enam ini sebelumnya untuk menghala ke lima lagi. Kami mahu ia menunjuk kepada empat. Adakah gambar yang masuk akal? Oleh sebab itu kita benar-benar dapat mengambil lima daripada. Jadi mari kita mendapatkan sekeping itu. Apakah yang perlu saya lakukan sebelum saya menetapkan semula enam ini sebelumnya kepada empat? Mana-mana idea-idea di sana? [00:11:14] PENONTON: Membebaskan nod antara mereka dengan mengesetnya kepada nol? Hannah: Cool. Yang pasti, matlamat akhir kita adalah akan menjadi untuk membebaskan nod. Oleh itu, kita boleh berbuat demikian di sini. Penunjuk percuma. Sama sekali. Tetapi sebelum itu, mari kita just-- hak matlamat kami di sini adalah untuk menetapkan penunjuk seterusnya sebelumnya sama dengan penunjuk sebelumnya. Saya tahu ini semakin ditutupi. OK, mari kita take-- sejuk. Semua orang boleh melihat keuntungan ini? Atau adakah ia super kecil? [00:11:50] Jadi sebelum kita melaksanakan baris ini di sini, kita mahu memastikan bahawa penunjuk akan datang tidak adalah batal. Kerana jika penunjuk seterusnya adalah batal, jenis apa ralat saya akan dapat apabila saya cuba rujukan penunjuk batal? PENONTON: Seg bersalah. Hannah: A bersalah seg, cantik. OK, jadi jika itu bukan batal, maka kita boleh menetapkan semula. Dan kita mempunyai enam mata sekali lagi untuk empat. Soalan sehingga titik ini? Ya? [00:12:17] PENONTON: Pada anda yang pertama jika pernyataan, yang anda lakukan ertinya mempunyai anak panah akan datang, atau [didengar]? Hannah: Saya bermaksud penunjuk anak panah n. Jadi, pada asasnya, apa yang saya cuba lakukan yang mengatakan, nod semasa yang saya iterating berakhir, nod semasa yang Saya melihat, saya menyimpan penuding. Dan saya ingin tahu penunjuk ini nilai, yang dalam kes ini adalah n. Dan saya mahu melihat, adalah nod Saya cari untuk nod Saya menyasarkan untuk memadamkan? Jadi itulah sebabnya kami ada di sini penunjuk n. [00:12:47] PENONTON: Jadi anak panah pergi untuk n, anda menetapkan nilai dan menyimpannya dalam nod yang dipanggil n? [00:12:55] Hannah: Jadi ia seperti jika saya melalui senarai ini dikaitkan dan menunjuk ke lima. Jika saya ingin mendapatkan nilai yang, jika Saya ingin mendapatkan jumlah itu, 5, Saya lakukan penunjuk anak panah n. Cool? Yeah. [00:13:07] PENONTON: Apakah n nama pembolehubah? Hannah: Ya. Jadi, jika kita menyelak kembali satu slaid, n adalah nama dari nilai bahagian dalam nod dalam senarai berkaitan kami. Dan saya tahu ia boleh mendapatkan sedikit sedikit mengelirukan kerana kita juga memanggil perkara yang yang kita mahu memadam n. Supaya di mana yang satu talian datang dari. Yeah? [00:13:27] PENONTON: Apa yang anda mempunyai [Didengar] bagaimana ia berfungsi? Penunjuk A [didengar]? [00:13:35] Hannah: Pasti. Adakah anda bercakap about-- yang sejajar? PENONTON: Garis lepas [didengar]. [00:13:44] Hannah: Pasti, OK. Jadi mari kita lihat gambar di untuk cuba menjelaskan ini. Saya minta maaf, untuk kamera, soalan itu kita dapat menjelaskan penunjuk arrow penunjuk Sebelum Seterusnya. OK, jadi mari kita mengatakan bahawa kita berada di lima dan matlamat kami adalah untuk memadam lima. Jadi penunjuk akan datang, yang ini tiga nod adakah itu memberi kita? Yang membawa kita kepada nod yang keenam, bukan? [00:14:10] OK, jadi sekarang kami meminta untuk lepas enam ini. OK? Dan kami menetapkan semula ini menjadi sama dengan empat, yang kebetulan berada lima sebelum ini. Saya tahu, ia super sukar untuk mengesan. Saya benar-benar mengesyorkan anda melukis gambar jika anda mendapatkan soalan seperti ini. Ya? [00:14:30] PENONTON: Apakah sebab yang kita tidak mempunyai [didengar]? [00:14:37] Hannah: Tepat. Jadi persoalannya ialah, mengapa kita tidak perlu mendaftar di sini? Apa kata kita perlu menyemak bahawa penunjuk sebelumnya tidak sama dengan nol? Dan ia adalah kerana kita telah sudah dipisahkan daripada kes jika penunjuk ini yang terdahulu. Soalan yang sangat baik. Apa-apa lagi mengenai perkara ini? OK, sejuk. Jadi mari kita menyelesaikannya sehingga. Kami hampir di sana. [00:14:59] Jadi apa jika ia adalah di kepala? Bagaimana jika bukan cuba untuk memadam lima, kita sebenarnya mahu memadam empat? Apa yang perlu saya lakukan? Well, saya mahu menetapkan semula kepala saya untuk apa? Menjerit itu? PENONTON: Yang selepasnya. Hannah: Beautiful. OK, jadi kita mahu senaraikan yang akan menunjuk untuk apa sahaja nod seterusnya penunjuk kita. Baik. Dan hanya untuk kesempurnaan ini demi, kita akan mahu menyemak bahawa selagi senarai kami adalah tidak sah, selagi senarai kami tidak kosong, maka kita mahu menetapkan sama sebelumnya kami untuk batal. Soalan setakat ini? Satu langkah lagi from--? [00:15:53] PENONTON: Adakah ia jika senarai tidak sama dengan nol? [00:15:55] Hannah: Ya, anda betul-betul tepat. Aku meminta maaf. Adalah senarai tidak sama dengan nol. Awesome. Cuba untuk membawa semua ini pada skrin. Ia sejenis jatuh. Maaf, guys. Dan akhir sekali, semua kita hanya perlu kembali. OK. Itu adalah lebih penuh dalam benar-benar cepat. Luangkan sedikit masa untuk melihat lebih ini. Beritahu saya jika anda mempunyai sebarang soalan. Yeah? [00:16:20] PENONTON: Jika senarai adalah di kepala, then-- menunggu, takpa. [00:16:26] Hannah: OK, baik. Jadi ini adalah jika senarai adalah di kepala, kita mengeluarkannya untuk apa saja yang kita dimasukkan. Yeah? [00:16:31] PENONTON: Bolehkah anda menerangkan pertama jika kenyataan sekali lagi? Jika penunjuk kepada n adalah sama dengan n? Hannah: Pasti. Jadi matlamat kita untuk fungsi ini keseluruhannya adalah memadam nod yang mempunyai nilai n. Jadi, jika kita dapati, seperti kami iterating melalui senarai kami, nod dengan nilai n, itu yang kita mahu memadam. Jadi semua yang berlaku penghapusan bahagian dalam yang besar jika kenyataan. Adakah ini masuk akal? Cool. Yeah? [00:16:59] PENONTON: Mungkin anda tidak boleh melihat itu, tetapi tidak anda juga perlu garis untuk menatal melalui senarai? Hannah: Awesome. Marilah kita ini sehingga sedikit, dan kami akan membuang yang betul-betul di bahagian bawah. Mungkin lembaga akan tunggu menjadi idea yang lebih baik sedikit. Jadi bagaimana saya akan gerakkan penuding ke hadapan? [00:17:17] PENONTON: pointer sama penunjuk tambah satu. [00:17:20] Hannah: Beautiful. Jadi yang membolehkan kita untuk terus iterating melalui. OK. PENONTON: Tidak akan ada sesuatu yang berlainan? Hannah: Satu masa lebih? PENONTON: Tidak akan ada yang lain selepas lama besar jika kenyataan [didengar]? Hannah: Bahagian manakah? Saya minta maaf. [00:17:38] PENONTON: penyusuran ini, tidak ada lagi satu? Hannah: Anda benar-benar boleh mempunyai satu lagi. Kerana saya mempunyai hak pulangan di sana, anda tidak perlu lagi satu. Tetapi yeah, soalan yang baik. OK, ya? PENONTON: Bolehkah kita berfikir penunjuk yang bergerak melalui senarai sebagai mengambil nilai setiap nod dalam senarai? Atau kita perlu menganggapnya sebagai semacam luar ke dalam senarai? [00:18:00] Hannah: Sama ada satu adalah baik, saya fikir. Cara yang saya bayangkan ia adalah Aku berkata, OK, saya penunjuk. Dan ini adalah saya. Ini adalah tangan-Ku. Saya akan menunjukkan kepada yang berbeza perkara yang saya mahu untuk melelar melalui. Pertama, saya akan menunjukkan kepada ketua senarai. Dan yang memberitahu saya saya akan menunjukkan empat. Dan jadi saya, yang luar ke dalam senarai, Saya boleh menunjukkan kepada setiap elemen-elemen ini. Jadi saya rasa diri saya sebagai penunjuk. PENONTON: Oleh itu, apabila anda menghapuskan salah satu daripada unsur-unsur, anda memadam diri sendiri, jadi untuk bercakap. Hannah: Tepat. Jadi anda menghapuskan perkara yang anda menunjuk ke. Jadi dalam contoh yang kita melihat di mana kita berada cuba untuk memadam lima, apabila saya menunjuk ke lima, Saya mahu memadam Perkara yang saya menunjuk ke. Tepat betul. Ya? PENONTON: Adakah kita dijaga daripada kes di mana n tiada dalam senarai ini? Hannah: Jika n tiada dalam senarai itu? Semua yang akan berlaku adalah anda akan melelar melalui dan Itekadar melalui, dan kemudian, anda akan untuk sampai ke penunjuk menjadi batal, dan kemudian anda akan dilakukan. [00:18:48] PENONTON: Jadi adakah kita perlu untuk kembali apa-apa? Hannah: Kami boleh. Cara yang jika ditakrifkan ini fungsi, saya hanya mengatakan bahawa ia mengembalikan tidak sah tanpa mengira. Tetapi, anda boleh mempunyai sesuatu seperti kembali integer, dan ia telah kembali 1 negatif jika ia gagal. Sesuatu seperti itu. Soalan with-- ya? PENONTON: [didengar]? Hannah: Maaf? PENONTON: [didengar]? Hannah: Pasti. Jadi itulah actual-- sekali kita kena dilakukan semua ini kerja bergerak semua anak panah ini sekitar, keseluruhan kami matlamat adalah untuk menghilangkan nod yang kami cari. Jadi dalam kes ini, membebaskan penunjuk, jika saya menunjuk ke lima, ia seperti memadam nod pertengahan ini. Itu sebahagian penunjuk percuma. Yang masuk akal? [00:19:29] PENONTON: Jadi memikirkan yang anda lakukan tidak [didengar]? [00:19:31] Hannah: Jadi kita diambil alih pada mulanya kami mempunyai beberapa senarai yang already-- mereka telah meletakkan ini bersama-sama. Jadi, untuk membina ini senarai, mereka must've [didengar]. Cool. Apa-apa lagi dengan ini? Ya? [00:19:46] PENONTON: Bagaimana jika senarai tidak sama dengan garis batal? [Didengar]? Hannah: Berikut? PENONTON: Yeah. Hannah: OK, semua yang saya lakukan adalah saya hanya memastikan bahawa sebelum saya cuba untuk senarai dereference, sebelum saya cuba untuk mengakses sebelumnya, Saya ingin memastikan bahawa ia tidak null jadi saya tidak mendapat satu kesalahan seg. Cool. [00:20:08] OK, saya tahu ini adalah agak banyak untuk mendapatkan melalui. Jadi slaid ini akan yang disediakan untuk anda. Jadi, anda boleh melaluinya dengan lebih terperinci. Ya? [00:20:17] PENONTON: Mengapakah senarai [didengar]? Hannah: Pasti. Jadi senarai benar-benar menunjukkan kepada elemen ini di sini, elemen yang pertama dalam senarai. Jadi ia tidak boleh mempunyai sebelumnya. Ya? [00:20:31] PENONTON: Adakah titik penunjuk ke alamat yang sama dalam ingatan? Adakah ia menunjukkan yang sama alamat dalam ingatan sebagai nod bahawa ia menunjuk ke? [00:20:40] Hannah: Ya, ia menunjuk untuk nod ini dalam ingatan. [00:20:43] PENONTON: Betul, jadi apabila anda [didengar]? [00:20:47] Hannah: Dari satu segi, ya. OK. Baiklah, mari kita bergerak bersama-sama dengan ini. Dan jika anda mempunyai soalan, melekat di sekeliling pada akhirnya, dan kita boleh melaluinya sekali lagi. OK, sejuk. Sekarang, kita dapat bergerak untuk hash jadual, try, dan pokok-pokok, yang anda mendapat super mengetahui dalam p-set lima, buku ejaan. [00:21:04] Jadi jadual hash hanyalah pelbagai dengan senarai secara tunggal berkaitan atau duanya adalah terpakai dikaitkan senarai datang kira ia. Oleh itu, kita mempunyai beberapa jenis array bersekutu. Dan bagaimana kita tahu yang mana satu ini tatasusunan baldi untuk masuk ke dalam, kita menggunakan fungsi hash. Jadi dalam kes ini, boleh sesiapa meneka apa fungsi hash akan hanya berdasarkan beberapa daripada input dan output? [00:21:31] PENONTON: Nombor Surat abjad. Hannah: Tepat. Ia hanya meletakkan mereka dalam susunan abjad. Semua yang bermula dengan A dimasukkan ke dalam baldi yang pertama. Semua dengan B dimasukkan ke dalam baldi kedua, sebagainya, dan sebagainya. Awesome, OK. Dan fungsi hash adalah apa-apa fungsi yang mengambil dalam perkataan dan akan memberitahu anda apa Bucket ia tergolong dalam. Jadi yang masuk dalam kami array ia tergolong dalam. [00:21:55] Jadi setiap kali saya memberikan saya hash berfungsi perkataan, ia perlu beritahu saya yang sama meletakkan setiap kali. Jadi, jika kita menggunakan fungsi hash daripada slaid yang lalu di mana kami sorting oleh surat pertama dalam abjad, setiap kali saya memberikan saya fungsi hash "epal," ia perlu sentiasa memberikan saya kembali 0. Jadi, jika saya mempunyai sebiji epal untuk dimasukkan ke dalam jadual hash saya, jika saya memberikan "epal" untuk fungsi hash saya, ada yang berkata, pergi memasukkannya ke dalam baldi 0. Jika saya mencari seorang epal dalam jadual hash saya dan aku berkata, di mana kekuatan epal secara langsung, anda bertanya fungsi hash anda. Dan ia berkata, pergi ke baldi 0. Baiklah? Soalan dengan fungsi hash? Awesome. [00:22:34] Di sini adalah yang lebih sedikit penjelasan terperinci apa fungsi hash mungkin kelihatan seperti. Baiklah. Sekarang, masalah dengan hash fungsi adalah dalam dunia yang ideal, kita hanya akan mempunyai satu perkara dalam setiap baldi. Tetapi pada hakikatnya, ada bukan sahaja satu perkataan yang bermula dengan A. Terdapat bukan hanya satu perkataan yang bermula dengan B. Jadi dalam kes ini, jika kita tiba-tiba mendapat "berry," dan kita mahu meletakkan ia ke dalam jadual hash kami, dan kita lihat, oh, tidak, pisang adalah sudah ada, apa yang kita nak buat? [00:23:03] Nah, kita mempunyai dua pilihan. Pilihan pertama adalah linear menyelesaikan sesuatu, yang hanya bermakna pergi mencari baldi yang kosong akan datang. Pergi mencari kemasukan array kosong akan datang. Dan hanya meletakkan "berry" di sana. Jadi saya tahu ia sepatutnya pergi dengan pisang dalam baldi satu. Tetapi hanya memasukkannya ke dalam baldi tiga, kerana tiga baldi kosong. Pilihan lain adalah mungkin apa yang anda melaksanakan dalam p-set anda, di mana anda mempunyai rantaian berasingan. Jadi setiap baldi anda, setiap unsur dan anda, bukan sahaja memegang satu perkataan, tetapi sebenarnya memegang satu penuding kepada satu senarai perkataan. Jadi jika anda mempunyai pisang dalam jadual hash anda dan anda tiba-tiba mahu menambah berry, tidak ada masalah. Hanya menambah berry ke akhirnya, atau untuk permulaan, senarai yang terkait dengannya. OK, hebat. Soalan dengan hash meja sebelum kita teruskan? [00:23:58] Baiklah. Pokok dan cuba. OK, jadi ini adalah satu lagi pilihan untuk melaksanakan kamus. Anda boleh membuat cuba. Jadi ini adalah sejenis khas pokok yang berkelakuan seperti jadual hash pelbagai peringkat. Jadi, anda akan melihat gambar di mana anda mempunyai array yang menunjuk kepada sekumpulan tatasusunan ketika itu kepada sekumpulan tatasusunan ketika itu kepada sekumpulan tatasusunan. Dan kita akan melihat apa yang akan kelihatan seperti pada slaid masa depan. Dan lebih amnya, pokok hanya struktur data mana-mana di mana data tersebut dianjurkan di beberapa hierarki. Jadi di mana kita melihat kita mempunyai semacam pemahaman pada tahap yang tinggi, tahap yang seterusnya, tahap yang seterusnya, tahap yang seterusnya. Jadi ini mungkin yang paling jelas dengan beberapa contoh khusus. Jadi, inilah pokok kita. Anda boleh melihat bahawa ia mempunyai tahap tertentu kita mulakan dengan yang nod akar, satu. Dan kita boleh turun melalui pokok kami. [00:24:50] Pokok binari adalah sejenis pokok. Dan satu-satunya spesifikasi untuk pokok binari adalah bahawa setiap nod mempunyai paling banyak dua daun. Jadi anda tidak akan melihat apa-apa nod ini mempunyai tiga atau empat atau beberapa nombor lain daun. Dan kemudian yang lebih spesifik adalah pokok carian binari di mana setiap nod di sebelah kiri yang nod akan mempunyai nilai yang lebih kecil. Dan setiap nilai kepada betul akan menjadi lebih besar. Jadi, jika anda melihat 44 adalah pada akar kita, ke kiri, 11, 22, dan 33 adalah kurang dari akar kami. Dan di sebelah kanan adalah semua nombor bigger-- 66, 55, dan 77. Dan harta ini berlaku di setiap peringkat pokok itu. [00:25:37] Oleh itu, apabila kita turun ke 22, 11, dan 33, masih 11 adalah lebih kecil daripada 22 dan 33 adalah lebih besar daripada 22. Dan ini menjadikan ia lebih mudah untuk mencari kerana jika kita cari nombor, kita tahu yang cawangan untuk mengikuti ke bawah. Jadi ini perlu mengingatkan anda yang sedikit sedikit carian binari. Yeah? [00:25:56] PENONTON: Oleh itu, apabila anda menggambarkan binari, anda berkata ia mempunyai paling banyak dua daun? Hannah: Mm-hm. PENONTON: Bolehkah ia mempunyai kurang? Hannah: Yeah. Jadi mari kita berkata, sebagai contoh, anda tidak mempunyai nombor genap perkara dan anda tidak boleh mengisi semua anda daun, ia adalah baik jika seseorang itu mempunyai satu. OK? Awesome. Lain-lain soalan di atas pokok? OK. [00:26:16] Kembali ke cuba kita seperti yang saya telah bercakap kira-kira sedikit lebih awal, bagaimana kita mempunyai tatasusunan pelbagai peringkat. Jadi dalam kes ini, kita mula di bahagian atas. Dan kita boleh mengikut mana-mana perkataan yang diberikan ke bawah. Jadi mari kita mengatakan bahawa kita mahu mencari Turing. Kami bermula pada T, mengikutinya turun kepada satu tatasusunan yang mengandungi U, dan mengikutinya ke bawah sehingga kita mencapai delta kecil ini yang memberitahu kita, ya, anda mendapati perkataan. Jelas mengenai try? Apa-apa sahaja untuk pergi ke sana? Ya? PENONTON: Adakah simbol delta perlu menduduki ruang dalam yang cuba? Hannah: Yeah, jadi ia tidak semestinya perlu untuk menjadi delta. Tetapi kita perlu beberapa cara untuk memberitahu kami computer-- maaf, supaya kita tahu bahawa TUR tidak adalah perkataan. Kerana mari kita mengatakan bahawa kita tidak mempunyai konsep delta, konsep ini tahniah, anda mendapati perkataan, ia akan melalui dan melelar T-U-R, dan kemudian berkata, hebat, saya mendapati ia! Ia mestilah satu perkataan. Tetapi ia adalah benar-benar tidak. Kita mahu seluruh Turing untuk menjadi satu perkataan. Oleh itu, kita mesti mempunyai sesuatu di akhir yang kata, tahniah, anda telah menemui perkataan yang sah. PENONTON: Oleh itu, jika anda mempunyai seperti 26 huruf dalam abjad, akan anda benar-benar mempunyai 27 kunci dalam cuba anda? [00:27:24] Hannah: Awesome, yeah. Jadi sebenarnya, saya berfikir bahawa akan diberikan kepada slaid seterusnya. Ta-da! Di mana jika anda mempunyai nod dalam cuba anda, anda akan mempunyai 27 kanak-kanak dan bukannya 26. Sebarang soalan dengan itu? Yeah? PENONTON: Mengapa cuba mengambil jadi ruang yang lebih [didengar] seperti anda pergi? Mengapa ia dianggap sebagai [didengar]? Hannah: Pasti. Mari kita kembali. Persoalannya, mengapa adalah cuba jadi lebih besar daripada sesuatu seperti jadual hash. Jadi untuk setiap peringkat itu, walaupun mereka tidak akan disediakan di sini, anda perlu mempunyai semua 26 aksara. Dan sebab yang anda tidak boleh berkata, oh, tetapi seperti untuk Turing, saya tidak perlu mempunyai apa-apa dari orang-orang perkara yang sama pada tahap U. Nah, jika tiba-tiba anda mahu menambah sesuatu yang seperti T-H, anda akan perlu mempunyai keupayaan menambah perkataan itu. Jadi untuk setiap huruf, anda akan mempunyai mempunyai sekumpulan tatasusunan datang kira ia. Jadi, anda boleh melihat bagaimana ia akan mendapat benar-benar besar, benar-benar cepat. Apa-apa soalan lain? Baiklah. Yeah? [00:28:29] PENONTON: Bilakah kali percubaan lebih cepat daripada jadual hash? [00:28:33] Hannah: Bilakah kali percubaan lebih cepat daripada jadual hash? Jadi, jika anda benar-benar mempunyai fungsi hash buruk. Jadi mari kita mengatakan saya adalah seperti, inilah fungsi hash anda. Tidak kira apa perkataan anda memberi saya, saya sentiasa akan memasukkannya ke dalam kemasukan pelbagai 0. Demikianlah kita berakhir dengan hanya meletakkan segala-galanya dalam satu senarai panjang dikaitkan besar. Dan supaya masa yang lookup akan mengambil paling teruk n jika itu bagi mereka yang dalam senarai kami. Dengan cuba ini, kita hanya perlu untuk melelar melalui huruf dalam perkataan. Jadi, walaupun Kami tambahi lagi sekumpulan banyak kata-kata untuk cuba kami, ia tidak akan membawa kita lebih lama untuk mencari perkataan tertentu. [00:29:09] Apa yang perlu kita lakukan ialah, untuk Sebagai contoh, dalam kes ini, katakan yang kami cari zoom, kita hanya perlu melelar lebih Z-O-O-M, empat huruf. Jadi itulah sahaja panjang zoom perkataan. Tidak kira berapa banyak banyak kata-kata kita masukkan ke dalam cuba ini. Kami sentiasa boleh mendapatkannya dalam empat langkah mereka. Awesome. Ya? [00:29:32] PENONTON: Jadi [didengar] adalah array, bukan? [00:29:34] Hannah: Mm-hm. PENONTON: Jika anda mencari [didengar], anda akan perlu melalui pelbagai anda untuk mencari [didengar]? Hannah: Pasti. PENONTON: Tidak yang mengambil lebih banyak masa? Hannah: Jika saya akan mengatakan bahawa pelbagai saya sentiasa akan menjadi A, B, C, D, E, F, G, blah blah blah, jadi jika saya sentiasa tahu ia dalam perintah itu tepat sama, jika saya sentiasa tahu ia mengikut abjad, Saya hanya boleh mengatakan O adalah jumlah fulan dalam abjad. Hanya melompat ke tempat itu. Kerana ingat, dengan tatasusunan, kita boleh mengakses apa-apa unsur yang pelbagai dalam berterusan masa jika kita tahu di mana kita cari. Yeah? [00:30:09] PENONTON: Pada yang lalu slaid [didengar] 27, tetapi untuk 26 yang pertama. [00:30:14] Hannah: Maaf? [00:30:15] PENONTON: Bukankah pertama satu 0, supaya ia tidak akan menjadi 26? [00:30:18] Hannah: Pasti, jadi apabila kita katakan 27, itu akan memberikan kita indeks 0 melalui 26. Tetapi jika anda benar-benar mengira mereka keluar, ia akan menjadi 27. Soalan yang baik. Apa-apa lagi? Yeah? [00:30:31] PENONTON: Begitu juga cuba perlahan daripada jadual hash? [00:30:34] Hannah: cuba akan menjadi, dalam teori, lebih cepat daripada jadual hash tetapi mengambil lebih banyak memori. Yeah? PENONTON: [didengar]? [00:30:45] Hannah: Saya minta maaf, saya tidak mendengar anda. PENONTON: [didengar]. 0-25 memberikan anda 26. [00:30:54] Hannah: 0-25 akan memberikan anda 26, betul. [00:30:56] PENONTON: Dan kemudian [didengar]. Hannah: Betul. Oleh itu jumlah kami adalah menyatakan beberapa perkara yang sedang kita. Jadi, jika kita mempunyai 27, itu akan memberikan kita 0 melalui 26, yang akan memberi bilik kami untuk, dalam kes ini, Saya tidak termasuk apostrofe. Jadi kita sudah melalui 25 0 adalah 26 huruf pertama abjad, atau semua 26 huruf abjad. Dan kemudian yang lalu perkara, di entri 26, adalah akan menjadi cek tanda, atau delta. Apa-apa lagi? Awesome. Hilang ruang saya. OK, sejuk. [00:31:31] Oleh itu, kita sudah menyentuh ini. Tetapi perdagangan yang besar di luar antara percubaan dan jadual hash ialah cuba memberi, dalam teori, tetap mencari kali tetapi menggunakan banyak keseluruhan memori. Baiklah, sekarang kita mempunyai sedikit struktur kurang rumit, dan kami akan dilakukan dengan C, dan kami akan bergerak ke kanan bersama-sama. [00:31:49] Jadi susunan, kita lihat ini dalam kuliah di mana anda mempunyai sesuatu seperti susunan dulang di mana perkara terakhir yang anda meletakkan pada timbunan akan menjadi perkara pertama yang anda bermula. Jadi itulah yang benar-benar mentakrifkan timbunan adalah yang perkara terakhir yang anda memakai akan menjadi yang pertama perkara yang anda bermula. Dan istilah yang kita gunakan jika kita akan meletakkan sesuatu, jika kita akan menambah sesuatu untuk timbunan kita, kita panggil yang menolak. Dan jika kita mengambil sesuatu off, kita panggil ia pop. Dan jika kita akan melaksanakan tindanan, kita perlu pastikan anda menjejaki kedua-dua saiz dan keupayaan. Jadi jumlah bilangan elemen yang kita boleh memegang dan nombor semasa elemen yang kami memegang. [00:32:27] Dan sangat begitu juga kami mempunyai barisan. Dan satu-satunya perbezaan adalah bukan dengan susunan, kita berkata sesuatu yang kita tidak memakai adalah perkara pertama yang kami bermula. Jadi dengan beratur, yang Perkara pertama yang kita masukkan ke dalam akan menjadi Perkara pertama yang kita keluarkan. Jadi ini adalah seperti jika anda sebenarnya beratur di kedai dan anda yang membantu, maka orang yang pertama dalam talian harus menjadi orang yang pertama yang telah membantu. Jadi yang akan beratur. [00:32:52] Oleh itu, kita perlu menjejaki saiz, kapasiti, dan kepala sejak kami akan mengambil setiap orang di bagian depan daripada senarai dan bukannya belakang. Soalan pada itu? Sebarang pertanyaan C yang mengganggu anda? Struktur data, mana-mana barangan yang menyeronokkan? Baiklah, sejuk. Jadi saya akan menyerahkannya ke dalam tangan Alison untuk melompat ke dalam pengaturcaraan beberapa. [00:33:14] Alison: Oh, kita akan melihat. Kita akan melihat bagaimana saya lakukan di sini. OK, saya akan cuba terbang melalui hal-hal ini, guys. Hannah pergi sangat dalam mendalam tentang segala hal yang beliau. Saya akan cuba untuk memberikan anda gambaran letupan cepat supaya kita boleh mendapatkan untuk Davin dengan semua keseronokan dan keselamatan JavaScript perkara yang mungkin anda sebenarnya mahu mendengar lebih lanjut mengenai. [00:33:33] OK, sebagai Hannah berkata, jika anda mempunyai apa-apa soalan, Saya akan terlalu cepat, sila, beritahu saya. Saya akan menjawab soalan-soalan yang perlu. Jadi untuk memulakan, kita akan bermula dengan mungkin salah satu perkara pertama anda belajar dengan web pengaturcaraan, kebenaran. Jadi chmod, anda semua harus sudah pakar dalam semua ini dengan web pengaturcaraan yang anda mempunyai telah melakukan akhir-akhir ini. Ia pada dasarnya hanya arahan yang mengubah keizinan atau kebenaran akses objek sistem fail kami. Sudah tentu, untuk benar-benar lihat ini, jika anda mempunyai apa-apa masalah dengan ini dalam set masalah anda, anda mungkin telah menggunakan ls l, yang panjang, untuk mendapatkan jenis pandangan daripada seperti ini, di mana anda benar-benar melihat semua keizinan untuk fail. [00:34:16] Dan benar-benar, kita hanya akan pergi melalui cukup cepat hanya cantik banyak apa yang masing-masing bermakna. Oleh itu, kita telah d di sini, yang hanya bermaksud direktori. Jelas di sini, kita lihat rwx, yang boleh baca, tulis, dan boleh dilaksanakan. Ini juga boleh diwakili sebagai bit, yang kita akan masuk ke dalam pada halaman seterusnya. Jadi setiap kumpulan kongsi gelap yang kita lihat di sini, jadi ia tiga kongsi gelap. Kami telah rwx, r dan apa-apa x r apa-apa x untuk fail pertama ini. Ia ini struktur umum. [00:34:49] Oleh itu, kita mempunyai beberapa direktori. Kami mempunyai beberapa kumpulan pengguna dengan kebenaran ini. Beberapa kumpulan yang tidak mempunyai kebenaran ini, dan dunia yang mempunyai kebenaran yang. Anda boleh memikirkan ini sebagai kongsi gelap yang. Anda boleh memikirkan ini sebagai tiga bit. Sehingga mereka dapat memegang nilai-nilai mana-mana sahaja dari 0 sehingga hingga 7, itulah sebabnya kadang-kadang kami mempunyai anda melakukan chmod 600 bukan chmod rw apa sahaja. Kami akan masuk ke dalam contoh di sana. Tetapi pada dasarnya, anda boleh berfikir ini sama ada sebagai hanya rwx, atau anda boleh memikirkan mereka kerana beberapa jumlah di mana yang pertama ini di sini mewakili satu nombor di antara 0 dan 7, satu saat ini mewakili satu nombor di antara 0 dan 7, dan yang ketiga mewakili satu nombor di antara 0 dan 7, OK? [00:35:38] r mempunyai nilai 4. w mempunyai nilai 2, dan x mempunyai nilai 1, itulah sebabnya ini kebenaran di sini akan chmod 700. Kerana dalam kes ini di sini, ia mengatakan kita telah sedikit yang pertama ada dibalik pada. Oleh itu, kita mempunyai 4 untuk dibaca. Bit kedua dibalik selama w, 2, jadi sekarang kita mempunyai 6. Dan sedikit yang ketiga dibalik pada untuk x, yang adalah 1, sehingga kita mendapatkan tujuh. Dan sudah tentu, kumpulan kami dan dunia kita masing-masing 0. Jadi ini juga bersamaan chmod 700. Dan saya pasti akan cuba memahami pemetaan di antara mereka. Saya tidak pasti jika ia mempunyai datang di dalam kuiz sebelum, tetapi ia akan menjadi satu soalan yang saya mungkin bertanya. [00:36:18] Hanya sedikit pergi walaupun lanjut ke chmod sini, sini adalah sangat umum struktur panggilan chmod. Jadi, sudah tentu, kita telah chmod sini. Rujukan, apa ini adalah merujuk kepada yang kita memberi kebenaran ini untuk atau yang kita mengambil ini kebenaran dari. Oleh itu, kita mempunyai di sini dalam kebenaran, seperti yang kita telah diberikan anda chmod tambah x, seperti yang kita akan lihat tidak lama lagi. yang hanya bermakna memberikan ini khusus kebenaran kepada semua orang. Beri mereka kepada semua. Oleh itu, anda dengan baik boleh mempunyai u plus x atau g plus x atau o campur x atau berbilang daripadanya. Supaya Bahagian pertama adalah sentiasa akan menjadi rujukan. Siapakah kita memberi kebenaran ini untuk, atau yang kita mengambil mereka dari? [00:37:03] Yang kedua adalah pengendali. Jadi anda semua telah kebanyakannya diuruskan ditambah. Ini memberi kebenaran kepada siapa anda memberikan mereka, manakala tolak, secara logik, menghilangkan mereka. Jadi apa-apa terlalu dahsyat di sana. Dan kemudian Mod adalah apa yang kita bercakap tentang dengan membaca, menulis, atau melaksanakan. Jadi tambah x bermakna memberikan laku kebenaran kepada semua orang. Dan kemudian, sudah tentu, di mana fail tertentu atau direktori. OK? Semua orang baik dengan chmod? Tidak terlalu buruk? [00:37:37] OK, jadi HTML, mana-mana anda berada sudah cukup supaya- MySpace umur? Saya menghantar ini kepada seksyen saya, dan literal separuh rakyat memandang saya seperti saya gila. Dan saya adalah seperti, lelaki, kita bukan orang tua. Ayuh. Jadi Hiperteks Markup Language, itu jujur ​​hanya satu cara untuk anda untuk memaparkan perkara-perkara tertentu di web. Jadi ia adalah bahasa markup. Ia bukan satu bahasa skrip. Tidak ada logik di dalamnya. Ia adalah semata-mata untuk mengubah cara sesuatu dipaparkan. OK, jadi itulah yang penting perbezaan untuk membuat. Ia dianggap sebagai bahasa markup, tidak bahasa skrip. [00:38:12] Jadi di sini kita mempunyai tag HTML kami. Pada slaid ini mungkin sebahagian besar orang-orang yang anda perlu membiasakan diri dengan dan menjadi benar-benar selesa dengan. Jadi jelas, kita mempunyai HTML tag kami, yang menandakan bahawa segala-galanya dalam antara kedua-dua akan HTML. Kami mempunyai beberapa pautan yang jelas akan memberikan anda pautan ke laman web luar. Beberapa tajuk, dalam kepala kita di sini. Dan kita mempunyai badan kita dengan h1, yang boleh menanduk, jadi ia akan membuat ia bagus dan berani dan lebih besar. Dan kemudian, kita mempunyai beberapa p, iaitu perenggan. Anda mungkin perlu tahu dan membiasakan diri dengan perkara-perkara seperti bagaimana anda memasukkan imej, adalah ada apa-apa kelas header lain? Saya pasti akan menjadi selesa dengan div. Jadi ini mempunyai majoriti tag bahawa anda perlu membiasakan diri dengan. Tetapi sudah tentu, seperti segala-galanya dalam CS 50, senarai ini tidak lengkap. Jadi pastikan anda memoles itu. [00:39:08] CSS, jadi CSS, sesiapa di antara kamu menonton seminar saya dari dua minggu lepas, adalah benar-benar hanya satu cara yang untuk gaya laman web anda? OK, jadi kami mempunyai beberapa bahasa markup. HTML, yang menjaga hanya teks yang dan di mana ia mungkin berada di laman ini. Tetapi CSS adalah benar-benar apa yang membuat ia cantik. Anda boleh mempunyai ini dalam HTML anda fail, tetapi seperti yang kita akan bercakap mengenai kemudian, Saya agak pasti ia mungkin menjadi slaid seterusnya, ia adalah amalan biasa, dan benar-benar amalan yang kita benar-benar menggalakkan, bagi anda untuk memastikan mereka dipisahkan apabila kita bercakap tentang MVC dan bahawa keseluruhan paradigma. Itu benar-benar apa ini suapan ke dalam. [00:39:42] Jadi CSS adalah hanya satu cara untuk membuat perkara yang kelihatan cantik. Perkara-perkara di sini, seperti badan dan #title dan .info, ini dipanggil pemilih dan apa yang mereka lakukan ialah mereka memilih perkara tertentu dalam fail HTML anda dan memohon apa sahaja gaya, apa jenis perkara yang anda mahu, dengan elemen tertentu web anda halaman. Jadi di sini, kita mempunyai warna latar belakang dan warna dan keluarga font yang yang menjadi digunakan untuk apa yang ada di dalam badan. Jadi, jika kita menoleh ke belakang di sini, ia tidak akan memohon kepada tajuk. Ia hanya akan terpakai bagi apa yang dalam badan pemilih, OK? [00:40:22] Dengan tajuk di sini, ini adalah akan menjadi perkara yang sama, warna teks yang menjadi biru hanya akan menjejaskan apa yang ada dalam yang pemilih tajuk. Serta info di sini, teks yang akan menjadi merah jambu, apa itu maklumat, yang di sini. Jadi satu-satunya perkara yang akan menjadi merah jambu di halaman ini adalah tarikh, ISNIN, 17 November, 2014. OK, jadi CSS adalah hanya satu cara untuk mempunyai lebih kawalan over-- ya? [00:40:48] PENONTON: Kenapa anda mempunyai menggunakan hash dengan tajuk? [00:40:51] Hannah: Slaid berikutnya, janji! Kami akan ke sana. Jadi ini adalah mengapa kita perlu menggunakan hash. Jadi pemilih mengambil tiga utama bentuk-bentuk yang kita bercakap dengan anda semua tentang. Saya fyou ingin mengetahui lebih lanjut, terdapat banyak di luar sana. Ada dokumentasi CSS besar. Ada tanda nama yang mempunyai kaitan dengan hanya tag biasa anda dalam HTML. Jadi h1, p, div, h2, orang macam perkara. Dan kita hanya boleh menamakan mereka sebagai adalah. Jadi seperti yang kita lihat di sini dengan badan, ia adalah satu tanda biasa. Oleh itu, kita hanya boleh meletakkan badan apabila kita berbicara dalam fail CSS kami. [00:41:26] Dengan tajuk, keseluruhan sebab kita mempunyai hash ini adalah kita mempunyai apa yang dianggap ID. Jadi ID perlu sentiasa unik dalam halaman HTML anda supaya apabila anda merujuk kepadanya, anda tahu bahawa anda hanya merujuk kepada satu perkara tertentu. Jadi dalam kes ini di sini, dengan kami h1 sini, sesi kajian CS 50, kita mempunyai id hakmilik. Jadi, untuk hanya merujuk kepada yang sekeping HTML kami, kami melakukan tajuk hash. Hanya dengan konvensyen, ID ditetapkan dengan hash di hadapan mereka. Dengan cara yang sama, kita lihat Maklumat di sini adalah sebuah kelas. Dan sebagainya kelas dengan CSS adalah ditetapkan sebagai kelas dot atau dot apa kelas yang. Jadi dalam kes ini di sini, itu info. [00:42:10] Jadi saya mengambil kembali. Kedua-dua ini akan menjadi merah jambu untuk CSS kami di sini kerana kedua-duanya mempunyai kelas info. Dan dalam fail CSS kami, kami telah ditetapkan apa-apa yang dengan kelas info hendaklah menjadi merah jambu. Adakah ini masuk akal? Ya? [00:42:27] PENONTON: Sekiranya anda membuat segala-galanya dalam putih badan, dan kemudian anda cuba untuk membuat sesuatu yang di dalamnya biru, yang akan menyebabkan masalah? [00:42:34] Hannah: Jadi CSS adalah lembaran gaya melata. Jadi apa yang ada ke arah bahagian bawah akan diberi keutamaan. Jadi, jika anda melakukan sesuatu dengan badan, dan anda membuat semua putih, dan kemudian kemudian anda menukar tajuk atau anda menukar teks di dalam badan, ia akan menulis ganti itu. Jadi apa-apa ke arah bahagian bawah akan diberi keutamaan. Ya? [00:42:56] PENONTON: Dan ID unik, tetapi kelas yang lebih? Hannah: Betul. Jadi ID perlu menjadi unik, dan kelas boleh merujuk kepada sebagai banyak perkara yang anda suka. Apa-apa soalan lain? Ya. [00:43:09] PENONTON: [didengar]. Saya tertanya-tanya sama ada yang membuat perbezaan. Hannah: Saya minta maaf, apa soalan? PENONTON: Ada kecil "F" dan modal "F." Hannah: Jadi perbezaan antara kecil "f" dan modal "F" tidak boleh membuat perbezaan. Jadi "f" akan menjadi 15 cara sama ada. Sejuk, apa-apa lagi? Semua orang baik, CSS? Ya? [00:43:30] PENONTON: Maaf. Bolehkah anda mempunyai kelas dan ID? [00:43:35] Hannah: Ya, anda boleh. Perkara yang boleh mempunyai kedua-dua kelas dan ID. Dan saya sangat mengesyorkan ujian ini pada anda sendiri. CSS anda akan belajar terbaik dengan hanya membuat sesuatu, halaman web yang sangat mudah, merangka beberapa CSS, dan hanya melihat bagaimana mereka berinteraksi. Dan anda akan mendapat yang sangat baik, rasa intuitif untuk bagaimana ia berfungsi. [00:43:56] OK, semua orang baik dengan CSS? Anda semua akan membuat laman indah dengan CSS kini. OK, amalan terbaik, hanya perkara yang perlu diingat, perkara bahawa- ini adalah mengapa kita berlabuh anda untuk pereka dan barang kecil. Jadi menutup semua tag HTML anda. Jadi jika anda mempunyai sebuah badan yang terbuka, perlu ada badan dekat. Jika anda mempunyai perenggan terbuka, perlu ada perenggan dekat. Semak untuk melihat halaman anda mengesahkan. Anda semua harus sangat akrab dengan ini dari p-set tujuh dengan CS 50 kewangan dengan validator W3 itu. Dan seperti yang saya katakan sebelum ini, salah satu paradigma besar kami adalah memisahkan gaya anda dengan CSS dari markup anda, iaitu HTML. Dan kemudian, sudah tentu, kita mempunyai XKCD besar ini turun di sini. Yay, pelepasan komik! [00:44:38] OK, TCP / IP. Antara ini dan HTTP, pada dasarnya mereka kedua-dua protokol. Jadi anda hanya boleh berfikir daripada mereka sebagai satu set peraturan yang mengawal bagaimana perkara bergerak seluruh internet. Jadi kawalan penghantaran protokol, atau protokol internet, adalah hanya satu cara untuk memastikan data yang mendapat di mana ia akan dan kita tahu jika kami pernah hilang data. Jadi, jika anda semua berfikir kembali ke kuliah beberapa minggu lalu dengan Daud di mana kita mempunyai empat sampul surat, mereka telah dihitung semuanya seperti salah satu daripada empat, dua daripada empat, tiga daripada empat, empat daripada empat, ini hanyalah satu set peraturan. Kami berkata, OK, apabila kami menghantar lebih daripada satu paket, kita akan berjumlah dengan apa jumlah itu adalah dan berapa banyak jumlah yang pengguna perlu mendapatkan. [00:45:19] Dan ini adalah hanya memberitahu sesiapa menerima data sama ada mereka telah mendapat segala-galanya atau jika sesuatu yang tenggelam di sepanjang jalan. Dan mereka perlu meminta sekali lagi. Ini adalah benar-benar hanya satu set peraturan. Itulah bagaimana anda boleh berfikir, OK? Dan juga, ia menyatakan pelabuhan itu, yang anda semua can-- saya tahu semasa kuliah, mereka mempunyai senarai keseluruhan pelabuhan. Tetapi kita tidak mempunyai mereka di sini sekarang. [00:45:41] Protokol pemindahan hiperteks Jadi adalah, sekali lagi, adalah protokol lain. Jadi, satu lagi set peraturan yang mengawal, dalam kes ini, bagaimana hiperteks dipindahkan. Jadi ia hanya membenarkan pelayar untuk bercakap dengan pelayan web. Dan seperti yang kita katakan di sini, ia seperti berjabat tangan manusia. Ia hanya satu cara untuk mentadbir bagaimana pelayan web adalah akan berinteraksi dengan penyemak imbas anda. Dan kita mempunyai hanya beberapa contoh. Kami mempunyai beberapa pertanyaan di sini mana GET adalah kaedah. Kami mempunyai HTTP 1.1, iaitu versi protokol untuk kita. Dan kemudian, tuan rumah, yang adalah apa yang kita sebenarnya cuba untuk mengakses. Dan kemudian, seperti yang anda lihat di sini, kita mendapatkan beberapa respons dengan ini 200 OK sebagai kod sambutan HTTP kami. Kami mempunyai senarai besar saya akan untuk menarik dalam satu saat yang anda semua perlu membiasakan diri dengan. Dan kita mempunyai jenis kandungan teks / HTML, yang hanya berkata jenis data apa kita menerima dari pelayan, OK? Ini tuan rumah dan jenis kandungan ini adalah sebahagian daripada header HTTP. Anda boleh mempunyai sedikit atau sesedikit yang perlu bagi konteks apa anda berurusan dengan. Kadang-kadang anda akan mempunyai banyak maklumat yang datang dari pelayan anda. Mungkin mereka meminta banyak maklumat daripada pengguna. Ia berbeza bergantung kepada konteks. Jika anda melihat CS 50 Kajian, ada banyak lagi pada yang. Tetapi kita mempunyai banyak untuk mendapatkan melalui, jadi saya akan untuk pergi ke kanan di hadapan jika tidak apa-apa dengan kalian? Cool. Berpegang. Saya pasti mempunyai yang seluruh senarai daripada- huh! Saya tidak tahu mengapa ini adalah sepanjang jalan di sini. Saya fikir saya benar-benar berpindah ia ketika Aku sitting-- [00:47:15] DAVIN: Adakah anda ingin untuk mengajar ia? Atau adakah anda mahu saya untuk mengajar ia? [00:47:17] PENONTON: Saya fikir kita boleh hanya menunjukkan kepada mereka untuk memulakan dengan. Maksud saya, anda boleh pergi ke mereka lagi, tetapi saya fikir ia masuk akal yang lebih kerana saya hanya bercakap mengenai status HTTP. Jadi di sini adalah seluruh senarai. Saya rasa apa yang akan berlaku adalah Davin akan pergi kepada mereka kemudian. Tetapi ada senarai keseluruhan, yang preview rasa yang akan datang. OK, kita akan blow-- ini akan menjadi kursus kemalangan PHP seperti yang lain. [00:47:41] Jadi PHP, hiperteks prapemproses, ia adalah backronym rekursi, yang bermaksud ia dinamakan sesuatu yang lain. Dan kemudian mereka seperti, ini tidak benar-benar masuk akal. Oleh itu mereka hanya dinamakan it-- dan ia adalah akronim, jadi mereka hanya berjaya PHP prapemproses hiperteks, yang hanya tidak masuk akal. Cerita Fun. Ia adalah satu bahasa pengaturcaraan. Jadi sebanyak saya menekankan bahawa HTML tidak adalah bahasa pengaturcaraan, ia adalah bahasa markup, PHP adalah bahasa pengaturcaraan. Bagaimana anda tahu ini adalah kerana tidak logik. Terdapat Syarat yang. Kami mempunyai pembolehubah, sedangkan kita ada sesiapa pun daripada perkara-perkara dalam HTML. [00:48:12] Baiklah, kita mempunyai ini sedikit sedikit di sini bahawa seperti rasa PHP. Jadi asas, nama-nama pembolehubah bermula dengan tanda dolar. Banyak orang-orang seperti itu. Mengingatkan kita wang. Itu semua hebat. Kita semua mahu PHP. Oleh itu, kita tidak menentukan Jenis pembolehubah ini lagi. Ia ditentukan pada masa larian. Jurubahasa itu akan menjadi seperti, oh, kami hanya akan berjalan melalui, dan mengikut konteks, kita akan melihat apa jenis jenis pemboleh ubah ini perlu mempunyai. Tiada fungsi utama. Perkara yang hanya akan berjalan. Anda lelaki dengan import anda dalam anda p-set terakhir, anda akan melihat ini. Tidak ada benar-benar satu fungsi utama. Anda hanya menulis apa yang anda mahu berlaku. Dan ia hanya jenis yang berlaku. Jadi itulah PHP untuk anda. [00:48:56] Tatasusunan yang hampir sama. Kami masih mempunyai pendakap ini. Di sini, kami mempunyai beberapa pembolehubah dipanggil arr, dan ia sama supaya- kita biasa kami notasi kurungan. Dan kita mempunyai beberapa nilai utama. Dan perbezaan besar antara C dan PHP array adalah bahawa kita boleh mempunyai associate-- ini kita boleh mengaitkan nilai untuk kunci. Jadi, daripada hanya mempunyai pelbagai yang diindeks dengan nombor atau kedudukan daripada elemen dalam array, kita sebenarnya boleh mengaitkannya dengan kunci. Di mana kita boleh mengatakan, OK, saya mahu apa sahaja nilai dikaitkan dengan buah-buahan. Dan mungkin kita perlu pergi ke buah pisang. Jadi ia akan kembali pisang kepada kami. [00:49:41] Tetapi pada dasarnya, yang paling perkara yang kuat tentang ini adalah bahawa jika anda semua masih ingat yang demo dari kuliah di mana kita pada dasarnya menulis semula buku ejaan dalam PHP, dan ia lookup was-- adalah benar-benar hanya suka, adakah utama ini wujud? Itulah jenis benar-benar kuasa itu. Anda tidak perlu untuk melelar melalui pelbagai anda. Anda tidak perlu tahu apa itu ruang dalam. Ia boleh berada di akhir atau permulaan. Selama anda tahu kunci yang yang berkaitan dengan nilai, PHP hanya boleh meludah nilai yang hak kembali keluar pada anda, OK? [00:50:09] Dan kemudian, kita juga hanya mempunyai hanya kerana kita boleh mempunyai pasangan nilai utama tidak bermakna anda perlu. Anda juga boleh hanya membuat pelbagai seperti biasa di sini, di bawah, di mana ia hanya satu, dua, tiga, empat. Mereka adalah nilai-nilai kita. Dan sebenarnya, kunci mereka adalah indeks. Jadi yang utama untuk seseorang itu menjadi sifar. Kunci untuk dua akan menjadi satu. Sebagainya dan sebagainya, melainkan jika Anda dengan jelas menetapkan kekunci, anda boleh mengandaikan bahawa nilai hanya indeks mereka. Adakah ini masuk akal untuk semua orang? Tiada soalan? Awesome. [00:50:38] OK, foreach adalah satu cara untuk melelar melalui array anda. Oleh itu, kita mempunyai sesuatu di sini, hanya struktur umum. Jadi foreach, nama pelbagai kami, sebagai apa sahaja anda mahu untuk memanggil setiap elemen dalam array anda, dan kita boleh melakukan sesuatu dengan unsur atau dengan nilai itu. Oleh itu, kita mempunyai contoh di sini. Kami mempunyai satu bersekutu pelbagai dengan kedua-dua penyertaan dengan bar dikaitkan dengan foo dan qux dikaitkan dengan Baz. Jadi kunci adalah foo dan Baz. Nilai adalah bar dan qux. Jadi foreach, kami mempunyai pelbagai kami di sini, sebagai pasangan nilai utama. Ini membolehkan kami untuk akses kedua-dua utama dan nilai. Mungkin anda hanya mahu nilai, di mana anda hanya boleh melakukan seperti arr sebagai $ nilai, dan kemudian anda hanya mengakses nilai kerana anda melelar melalui. Tetapi mungkin, bagi sesetengah sebab, anda mahu kunci, itulah sebabnya saya memilih contoh ini bukan. Oleh itu, anda sebenarnya boleh memanipulasi utama dan nilai dalam kes ini. OK? Soalan? [00:51:41] PENONTON: Jika anda mahu hanya memanipulasi kunci, akan anda perlu lakukan foreach-- [00:51:45] Alison: Betul. Jadi jika anda mahu memanipulasi hanya kunci, anda masih perlu ini sintaks kerana jika anda hanya mempunyai arr sebagai sesuatu, sebagai satu perkara, itu akan menganggap anda mahu nilai, tidak kunci. Jadi, jika anda pernah mempunyai hanya seperti arr sebagai, mungkin ini adalah seperti elemen $, ia akan menganggap bahawa anda bertanya hanya nilai pada setiap titik. Jika anda jelas mahu melakukan sesuatu dengan kunci, walaupun anda tidak akan berbuat apa-apa dengan nilai, anda perlu struktur ini yang kami ada di sini di mana anda dengan jelas meminta untuk kedua-dua utama dan nilai. Soalan yang besar. Apa-apa lagi? Cool. [00:52:27] Baiklah, PHP dan HTML. Oh, kami kembali untuk p-set tujuh lagi. Jadi ini harus melihat sedikit biasa. Jadi ini adalah beberapa bentuk HTML sederhana yang mempunyai beberapa nama input hello. Dan kita melihat kita mempunyai kaedah kami GET. Dan jika kita ingat dari kami p-set, apabila borang ini dikemukakan, ia menghantar pelbagai dipanggil $ _GET yang mempunyai semua ini input atau pembolehubah daripada borang yang perlu dimanipulasi dalam PHP kami. Jadi dalam kes ini, pengguna akan dimasukkan ke dalam nama mereka. Mereka menyerahkannya. Dan kita melihat bahawa kita akan mendapat beberapa pelbagai di sini. Kami mempunyai pelbagai GET kami. Dan kita mengakses nama. [00:53:11] Jadi yang kata, OK, berikanlah kepadaku nilai yang dikaitkan dengan nama, menamakan menjadi kunci di sini. Dan yang maps secara langsung dengan apa yang kita berkata nama input kita. Jadi ini telah memberi anda kunci kepada apa akan menjadi yang sedang anda di sini. Adakah ini masuk akal untuk semua orang? Ya? [00:53:32] PENONTON: Adakah nama dalam GET merujuk ke garisan ungu di [didengar]? [00:53:36] Alison: Ia merujuk kepada ini di sini. Jadi bidang ini di sini, ia merujuk kepada nama ini di sini. Jadi ini boleh dinamakan seperti nombor telefon, atau apa sahaja. Nama ini sebenarnya berkata, apa yang yang anda memanggil bidang ini? Bagaimana anda akan merujuk kepada bidang ini? Dan nama ini adalah benar-benar suka, kami berkata bidang ini dipanggil nama. Itulah bagaimana kita akan mengaksesnya. [00:53:59] PENONTON: Jadi rasanya, Nama input sama dengan Bob, dan- [00:54:02] Alison: kanan, maka anda akan mendapatkan Bob di bawah sana. Tepat. Semua orang sejuk? Baiklah, jadi DAPATKAN berbanding POST, ini adalah dua cara utama bahawa kita lulus data dalam permintaan HTTP. Anda semua perlu lihat kedua-dua diharapkan. Jadi dengan GET, maklumat dialirkan melalui URL. Jadi, jika anda pernah melakukan Google carian, YouTube, anda akan mungkin melihat beberapa tanda tanya. Dan kemudian, semua perkataan bahawa anda hanya meletakkan di sana. Dan POST pas data dalam badan mesej HTTP. Jadi tidak seperti GET, anda jenis mempertimbangkan bahawa data yang tersembunyi kepada pengguna. Tetapi apa yang benar-benar penting untuk memahami adalah bahawa ini adalah masih hanya sebagai tidak selamat kerana GET. Analogi Saya suka menggunakan adalah jika anda mempunyai nombor akaun bank anda dan anda menulisnya di luar sampul surat, yang agak tidak selamat. Jika anda hendak menulis di atas sekeping kertas dan memasukkannya ke dalam sampul surat, ia masih benar-benar tidak selamat kerana semua yang anda perlu lakukan adalah membuka bahawa sehingga dan melihat kandungan sebenar mesej untuk melihat bahawa. Jadi ini adalah "tersembunyi", dan orang-orang seperti untuk fikir ia adalah selamat, tetapi ia benar-benar tidak. Dan saya pasti akan Davin masuk ke dalam yang lebih, mungkin. Tetapi itu yang penting perbezaan untuk membuat dan sesuatu yang benar-benar baik untuk memahami. [00:55:15] OK, SQL, Structured Query Language. Semua barangan yang kita telah melihat begitu baru-baru ini! Jadi ia pada dasarnya hanya direka, jelas, untuk menguruskan data. Anda semua mempunyai banyak pengalaman dengan ini di meja anda dengan PHP MyAdmin. Dan terdapat empat pertanyaan biasa kami mahu anda semua tahu. Jadi ada update, sisipan, pilih, dan memadam. Jadi, pastikan anda tahu mereka benar-benar baik. Kami akan pergi melalui mereka benar-benar cepat. [00:55:40] Jadi kini, benar-benar, kerana apa yang anda mungkin berfikir ia, ia hanya mengemas kini data dalam pangkalan data anda. Oleh itu, kita mempunyai beberapa contoh di sini. Ini adalah umum struktur sebuah pertanyaan kemas kini. Oleh itu, kita mengemas kini jadual bahawa kita berbicara tentang. Dan kita mahu menetapkan tertentu nilai, ruangan tertentu sama dengan nilai-nilai tertentu. Jadi ini hanya mengemas kini jadual, mengubah nilai-nilai dalam semua baris dalam kes ini. Jadi, dalam satu ini ke sini, sebenar Sebagai contoh, kita mempunyai insert-- maaf. Slaid yang didahulukan tanpa saya sedari. [00:56:17] Jadi jadual kemas kini ini ditetapkan col1 sama untuk VAL1 mana rumah sama dengan "Currier." Apa satu ini tidak adalah ia hanya perubahan, ia hanya mengemas kini nilai-nilai ini di tempat-tempat tertentu. Jadi, dalam satu pertama ini, ia berubah ini Nilai untuk segala-galanya dalam jadual anda, OK? Ia akan mengubah ini ruangan untuk setiap penyertaan tunggal, untuk setiap baris tunggal. Tetapi di mana ini, anda boleh menganggapnya sebagai penerang. Jadi ia hanya akan mengubah ia di tempat-tempat yang sangat khusus. Jadi dalam p-set tujuh, apabila anda mungkin dikemaskini jumlah tunai pengguna yang anda mempunyai, anda mungkin mempunyai beberapa di mana ID ID sesi sama, bukan? [00:56:53] Kerana anda tidak mahu menukar jumlah tunai bagi tiap-tiap orang yang telah menggunakan laman web anda. Anda mahu mengubahnya untuk satu orang tertentu, orang itu menjadi sesiapa yang menggunakannya pada masa itu. Betul? OK, jadi memasukkan, sisipan nilai-nilai tertentu ke dalam jadual. Ini seperti apabila anda mewujudkan pengguna baru. Struktur umum di sini yang memasukkan ke dalam apa sahaja jadual kita berbicara tentang. Nilai-nilai, yang merupakan nilai-nilai yang kita sebenarnya mahu masukkan. OK, jadi seperti yang kita lihat di sini, kita telah memasukkan ke dalam jadual. Ini adalah ruangan khusus dengan nilai berutus mereka. Jadi ini berkata, sisipan berturut-turut baru yang mengandungi nilai VAL1 dan VAL2 bawah ruangan ini khusus. [00:57:33] Jadi mungkin anda hanya mahu mengisi daripada separuh yang ada di baris ini. Itulah yang bahagian ini di sini membolehkan anda melakukan. Ia membolehkan anda sebenarnya menentukan bahagian. Ya? [00:57:44] PENONTON: Bolehkah anda hanya [didengar] sel-sel di barisan [didengar]? [00:57:52] Alison: Jika anda hanya masukkan bahagian-bahagian tertentu barisan anda, seluruh sel-sel hanya kosong. Selama anda membenarkan mereka untuk kosong, ia bukan masalah. Jika anda cuba untuk mengakses mereka, itu akan kembali beberapa elemen kosong. Tetapi ia adalah penting untuk mengetahui bahawa dalam jadual tertentu, mereka telah dibenarkan untuk batal. Anda mungkin menghadapi satu masalah semasa p-set anda kerana kita tidak membenarkan mana-mana daripada nilai-nilai anda adalah batal. Tetapi anda boleh menentukan satu nilai pilihan dalam jadual anda. [00:58:26] OK, pilih, jadi ini adalah hanya satu cara untuk mendapatkan data khusus dari meja di beberapa pengecam yang anda mahu. Jadi pilih bintang dari meja di mana col sama dengan sesuatu yang hanya bermaksud, memberikan aku semua data yang berkaitan di mana ruangan ini khusus adalah benar. Jadi bintang dalam kes ini akan kembali keseluruhan barisan untuk anda, OK? [00:58:49] Dan kemudian, dalam kes ini, memilih bintang daripada meja hanya memberikan anda keseluruhan meja. Dan kemudian, memadam jelas, ia hanya memadam baris dari meja. Jadi memotong daripada jadual, apa pun jadual kami rujukan, di mana beberapa tertentu pengecam atau beberapa keadaan benar. Ya? [00:59:07] PENONTON: Soalan. Mengapa kamu menggunakan dua sebut harga, dan sama ada anda melakukan tanda petik tunggal atau sebut harga, adakah ia membuat perbezaan? [00:59:13] Alison: sebut harga Double atau petikan tunggal tidak membuat perbezaan dalam SQL. Saya fikir saya melihat satu lagi soalan. Ya? [00:59:20] PENONTON: Adakah ia tidak memberi kesan kepada apa yang mendapat selamat dari pertanyaan? [00:59:25] Alison: Rob? [00:59:27] ROB: Apa yang dimaksudkan dengan melarikan diri dari pertanyaan? [00:59:31] PENONTON: Jika seseorang mempunyai pertanyaan tunggal dalam bentuk yang daripada- [00:59:36] ROB: Jika seseorang adalah untuk meletakkan quote tunggal dalam, maka selagi anda sanitasi input anda, maka ia tidak mengapa. Tetapi jika anda menggunakan satu quote dan anda adalah salah melarikan diri input anda, maka ya, mereka perlu untuk meletakkan quote tunggal untuk memecahkan kod anda. jika anda menggunakan tanda petik, mereka perlu meletakkan dua memetik untuk memecahkan kod anda. Tetapi selagi anda melarikan diri perkara dengan betul, ia tidak mengapa. Ia hanya akan diterjemahkan kepada simbol yang betul juga. [00:59:59] PENONTON: Apakah yang melarikan diri bermakna? Alison: Well, seperti pembersihan dan melarikan diri. Peperiksaan yang kita ada, yang XKCD besar komik yang mereka menarik di mana anda mempunyai, oh-- ROB: Ia slaid terakhir. Alison: Ia slaid terakhir, benar-benar? Oh my god. Di sana kami pergi, sempurna. OK, jadi pada dasarnya, anda boleh menyuntik sesuatu ke dalam SQL query ini di mana ia pecah anda kod, atau seperti Daud menunjukkan dalam kelas, jika kita mempunyai beberapa tunggal quote 1 sama dengan 1 dan jika dalam kod kami, kita hanya terus menyalin yang dalam, dan kita mempunyai petikan tunggal berakhir, apa yang berlaku ialah kita mendapatkan ungkapan beberapa yang menilai dengan benar akan membiarkan orang memasuki pangkalan data kami dan mendapatkan data yang kita tidak mahu mereka untuk mendapatkan. Jadi sanitasi input hanya bermakna memastikan bahawa kita melepaskan diri ini watak dan menamakannya sebagai aksara dan bukan yang yang harus dibenarkan untuk diambil secara literal sebagai pernyataan SQL kami. [01:01:04] Jadi perkara yang besar yang kita kata yang anda semua perlu menggunakan adalah HTML aksara khas, yang merupakan sesuatu yang anda mungkin mahu mengambil lihat. OK, memadam. Jenis data, ini semua akan berada dalam talian. Oleh kerana kita telah 15 minit, saya hanya akan pergi kanan melalui ini. PHP dan SQL, pada dasarnya ini adalah hanya kami mempunyai fungsi pertanyaan yang telah membantu melindungi daripada ini serangan berniat jahat. Jadi, setiap kali anda menggunakan pertanyaan, kami telah memastikan bahawa perkara yang telah dibersihkan dan barang kecil. [01:01:36] MVC hanya paradigma reka bentuk, jadi model, pandangan, pengawal. Ia hanya satu cara untuk menjaga perkara-perkara bagus dan berpecah dengan cara yang sama bahawa kita cenderung untuk faktor kod ke dalam fungsi. Ini hanya satu rangka kerja reka bentuk web yang membolehkan anda untuk melakukan perkara yang sama. Saya akan skip ini. [01:01:54] Ini adalah sesuatu yang saya akan menjadi super selesa dengan. Ia satu meja kecil yang hebat di sana. Ia memberikan anda fungsi contoh model. Saya hanya pergi melalui ini kerana saya benar-benar mahu Davin dapat bercakap. Jika anda mempunyai sebarang soalan, sila. Saya akan berada di sini selepas. Hanya datang bercakap dengan saya. Dengan itu, kami mempunyai status HTTP. Dan ini Davin akan meniup melalui ini dalam masa 15 minit. Ini akan menjadi besar. [01:02:17] DAVIN: OK. Uh, mikrofon anda? Yeah. Maaf. Alison: Way disediakan. DAVIN: Tidak, saya sudah bersedia. Saya sudah bersedia. Mari kita buat ini. Ia bersedia. OK. Maaf. Saya tertumpah kopi pada diri saya. Saya tidak tahu jika saya lebih kecewa bahawa saya kelihatan bodoh, atau bahawa saya tidak minum kopi lagi. Bagaimanapun, hanya satu pengumuman cepat mengenai kunci yang anda lelaki itu mempunyai. Jadi kunci ini anda lelaki itu mempunyai tidak rasmi apa yang kuiz. Ini adalah apa yang rasmi pada kuiz. Juga, di laman web, kita memberitahu anda, OK, ini akan menjadi kuiz. Jadi dalam kunci cheat kecil anda mempunyai, tidak rasmi. Dan terdapat kesilapan di atasnya. Jadi yang terbaik untuk tidak hanya membuta tuli menggunakannya. Jadi yeah, itu yang. Jadi mari kita masuk ke dalam ini cepat sebenar. [01:03:05] Jadi status HTTP. Jadi apa yang berlaku apabila laman web, segala-galanya adalah hak semua. OK segala-galanya. Semua kembali kepada anda dengan cara yang anda mahu ia. Anda mendapat 200 OK. 301, di mana kita melihat bahawa 301 sebelum ini? Tunggu, ada apa? Maaf. Kami melihat i timah kuliah semasa keselamatan. Jadi semasa keselamatan, jadi jika Daud ditaip dalam http dan kemudian cuba untuk pergi ke cs50.net, anda akan melihat 301 berpindah. Mengapa? Kerana ia akan redirect anda secara automatik untuk HTTPS kami. [01:03:35] Jadi 301 dipindahkan, hanya itu pada dasarnya penghantaran semula. Dan anda boleh berfikir tentang hal seperti ini. Mana-mana status yang bermula dengan 2, mereka adalah seperti, OK, OK segala-galanya. Mana-mana status yang bermula dengan 3, mereka adalah penghalaan semula. Status yang bermula dengan 4, yang cara ada beberapa jenis kesilapan klien. Status yang bermula dengan 5, itulah beberapa jenis ralat pelayan. Jadi anda jenis memecahkan yang status seperti itu. Jadi 304 tidak tidak diubah suai, jadi dalam anda server.c p-set, jadi mari kita mengatakan anda cat.html dimuatkan. Semua datang kembali, anda mendapatkan 200S, OK, hebat. [01:04:03] Katakan anda segar itu. Nah, dalam yang cat.html, anda mempunyai JPEG. Nah, JPEG yang tidak pergi untuk kembali. Anda tidak akan menyiarkan lagi DAPATKAN permintaan kepada pelayan, dan kemudian mendapatkan semua maklumat yang kembali. Ia akan hanya adalah-- imej yang akan cache pada mesin anda. Dan supaya imej yang akan menjadi 304. Jadi ia tidak diubah suai. Jika anda kemudian menutup, jelas cookies, dan kemudian muat semula dan cuba untuk memuatkan halaman yang sekali lagi, anda akan melihat 200S. Anda tidak akan melihat bahawa 304. [01:04:28] 400, permintaan buruk, benar cepat, seperti jika anda telah hendak menghantarkan Objek JSON ke pelayan dan objek JSON anda tidak betul, anda akan melihat sesuatu seperti itu. 403, dilarang. Apabila anda akan menyaksikan terlarang? Mungkin Mungkin? PENONTON: chmod. DAVIN: chmod, yeah. Jadi, anda telah tidak ditetapkan kebenaran dengan betul. 404, tidak dijumpai. Ia hanya tidak ada. Jadi jika anda menaip URL yang salah. 500, ralat pelayan dalaman, pelayan mungkin tidak dikonfigurasikan dengan betul. Sesuatu yang tidak pada akhir anda, tetapi sesuatu yang di sebelah pelayan. Dan 503? Banyak orang melihat 503s dalam lepas p-set. Apabila yang akan terjadi? Saya mendengar bisikan. [01:05:05] PENONTON: Apabila Google memutuskan anda robot. DAVIN: Ya, apabila Google memutuskan anda robot, anda mendapatkan 503s. Jadi itulah melebihi keupayaan. Jika anda telah diminta dari pelayan terlalu banyak, ia biasanya sementara. Dan kebanyakan di antara kamu perasan ia. Jadi, anda melihat 503. Anda mungkin telah sedikit rehat, maka 503s pergi, dan segala-galanya adalah hak semua. [01:05:20] Gabe: Real cepat, apabila yang anda semua mendapatkan 500 dalam masalah mungkin lepas ini ditetapkan? Ya? [01:05:27] PENONTON: Biasanya jika server mempunyai fail tidak kena pada tempatnya atau [didengar] mereka mesin [didengar]. [01:05:34] Gabe: Jadi ia mungkin konfigurasi yang isu dalam PHP anda pada pelayan anda. Tetapi ia mungkin hanya sesuatu seperti koma bertitik yang terlupa anda. Jika anda menaip PHP, beberapa sintaks tidak betul mungkin anda mendapatkan sesuatu seperti itu. OK? [01:05:46] DAVIN: Cool. Adakah anda mahu saya untuk berbuat sehingga AJAX? [01:05:51] Gabe: [didengar]. DAVIN: OK. Jadi apa yang DOM? Apakah DOM berdiri untuk? [01:05:55] PENONTON: Dokumen model objek. DAVIN: Nice. Mengapa kita suka? Awesome. Betul, jadi ia hanya membolehkan kita untuk akses HTML, mengakses halaman kami dengan cepat. Mengapa? Kerana kita merawat kami halaman, merawat tag HTML kami, merawat segala-galanya seolah-olah mereka objek. Jika kita merawat mereka seperti mereka objek, maka apa yang kita boleh lakukan? Nah, kita boleh memanggil fungsi pada mereka. Dan ini adalah penting mengapa? Nah, kerana kita akan menggunakan JavaScript untuk mengemaskini HTML kami, mengemaskini objek-objek ini. Jadi, jika kita melayan mereka seperti objek, kita boleh memanggil fungsi pada mereka. Saya akan masuk ke dalam ini sedikit lebih apabila saya pergi ke dalam JavaScript, tetapi anda semua telah melihat seperti document.getElementByID. Jadi adalah dokumen anda elemen, dapatkan unsur oleh ID, jadi anda akan melihat untuk beberapa ID dalam tag HTML. Kemudian, anda boleh melakukan sesuatu yang lain itu. Sebagai contoh, seperti document.body, maka anda boleh menambah kanak-kanak. Jadi anda akan mendapati dokumen itu. Anda mempunyai dokumen itu. Anda akan mendapati badan. Anda mendapati badan. Dan kemudian, anda akan memanggil beberapa fungsi di atasnya. Jadi menambah kanak-kanak, dan anda boleh menambah beberapa HTML ke akhir dalam badan anda. Jadi, pada asasnya, anda hanya merawat ia seperti objek. Anda merawat HTML tag seperti objek. Dan ia menjadikan ia sangat mudah dan cepat untuk pergi melalui mereka. Tetapi ia juga membolehkan anda untuk memanggil fungsi pada mereka supaya anda boleh memanipulasi dan menukar unsur-unsur. [01:07:04] Gabe: Memandangkan ini, mengapa JavaScript seperti bahasa yang baik untuk berinteraksi dengan HTML? Kemungkinan besar, apabila orang telah memilih bahasa untuk penyemak imbas, bagi pihak pelanggan, JavaScript adalah benar-benar bagus, ia benar-benar baik di mengendalikan objek. Dan benda-benda yang jenis suka objek yang muncul dalam HTML, sehingga sangat mudah untuk JavaScript untuk berbuat seperti itu pengendalian. DAVIN: Nice. Jadi di sini hanya satu contoh. Jadi saya fikir pada kuiz tahun lepas, atau mungkin dua tahun yang lalu, kita meminta anda untuk membuat pokok. Jadi ini adalah apa yang anda akan lakukan. Jadi, anda bermula dengan dokumen. Dan kemudian anda pada dasarnya hanya melihat tag. Jadi, jika anda melihat, kita bermula dengan tag HTML. Dan kemudian, anda akan mendapat petunjuk mengenai cara untuk melakukan ini berdasarkan lekukan itu. Jadi jenis ketua cawangan luar. Di dalam kepala, kita mempunyai lain untuk tag tajuk. Sebab itu, kita mempunyai tag tajuk. Dan di dalam itu, kami mempunyai beberapa rentetan. Dan jadi kami mewakili rentetan dalam bulatan. Dan semua tag adalah dalam kuasa dua. [01:07:54] Dan jika anda melihat, jika kita memikirkan ini sebagai pokok, dan katakanlah HTML yang seorang ibu atau bapa, maka kepala dan badan akan menjadi adik-beradik. Mereka kedua-duanya akan menjadi kanak-kanak daripada ibu bapa yang. Jadi kerana mereka kedua-dua adik-beradik, mereka akan menjadi jenis sebelah satu sama lain dalam model pokok kami. Dan kemudian, anda pada dasarnya melakukan perkara yang sama. Jadi tidak sukar, tetapi kami telah meminta soalan seperti ini sebelum kuiz. Gabe: Adakah sesiapa mempunyai soalan setakat ini? Adakah ia baik? DAVIN: Cool. JavaScript, OK, bahan yang baik. Jadi JavaScript, apakah JavaScript? Nah, JavaScript is-- itu rumit, tetapi ini adalah beberapa sorotan bahawa anda harus ingat. Pertama, ia longgar ditaip. Apa maksudnya? Jadi PHP was-- yeah, ada apa? [01:08:35] PENONTON: Anda tidak perlu jelas negeri jenis pembolehubah ia. DAVIN: Perfect. Sebab itu ia berkata anda tidak perlu jelas menyatakan jenis pembolehubah. Itulah hak. Jadi, dalam C, jika saya mempunyai int i sama dengan 50, maka dalam PHP, ia seperti ini, $ i, sama dengan 50. Kemudian pada JavaScript, apa yang akan menjadi panggilan? Var, bukan? Ia akan menjadi seperti var i sama dengan 50. Tetapi anda tidak perlu seperti, OK, ini adalah int. OK, ini adalah rentetan. Tidak perlu untuk berbuat demikian. Ia adalah bahasa yang diterjemahkan. Jadi apa maksudnya? [01:09:04] PENONTON: Tidak disusun. [01:09:06] DAVIN: Apa yang tidak disusun bermakna? Yeah? [01:09:11] PENONTON: Anda tidak perlu untuk menyusun semula kod untuk mendapatkan bersedia untuk komputer untuk menjalankan ia. Ia hanya diambil pada masa pelaksanaan dan komputer [didengar]. DAVIN: Yeah, jadi ia akan melalui seorang jurubahasa. Tetapi anda betul-betul tepat. Jadi anda tidak akan untuk menyusun ia, bukan? Apabila anda telah melakukan anda PHP dan kod JavaScript, anda tidak pernah dipanggil menyusun. Anda tidak pernah dipanggil sesuatu seperti membuat atau apa-apa seperti itu. Ini kerana ia ditafsirkan. Jadi setiap kali ia melalui pelayar, ia pergi melalui jurubahasa. Dan itu akan menafsirkannya hanya dalam masa sebenar segera untuk anda. Jadi apakah beberapa positif dan negatif untuk mempunyai bahasa yang diterjemahkan dan mempunyai bahasa yang disusun? Jadi compiling-- yeah, ada apa? [01:09:50] PENONTON: Ditafsirkan adalah lebih perlahan. DAVIN: Dalam apa rasa? [01:09:57] PENONTON: Selepas anda menyusun, anda tidak perlu melakukan apa-apa langkah-langkah tambahan untuk melaksanakan itu, sedangkan ini [didengar]. [01:10:04] DAVIN: Betul, sempurna. Jadi apa yang anda berkata adalah pada dasarnya Mengkompilasi bahawa, ketika anda mengumpul, anda mempunyai banyak kos pendahuluan, bukan? Anda akan menyusun ia. Tetapi selepas anda menyusun ia, yang pengkompil yang akan mengoptimumkan ia. Ia akan menjadi cepat. Ia akan pada dasarnya secepat yang boleh. Dengan mentafsir, anda tidak mempunyai bahawa kos pendahuluan. Sebaliknya, ia akan menjadi lebih perlahan sedikit setiap kali anda menafsirkannya. Dan anda akan perlu mentafsir setiap kali tunggal. Jadi, daripada mempunyai ini satu kos masa, kini anda akan perlu menafsirkannya setiap kali halaman yang menjadikan. [01:10:29] Jadi penterjemah adalah baik kerana anda tidak perlu untuk menyusun ia, tetapi ia tidak baik dalam setiap masa beban halaman, itu akan perlu mentafsir JavaScript ini. Dan ia akan berjalan dengan lebih perlahan sedikit daripada jika anda untuk menyusun ia. Membolehkan anda communicate-- oh, tunggu. Digunakan untuk memanipulasi kandungan dan penampilan. Kami hanya bercakap tentang itu. Ia menggunakan DOM itu. AJAX, kami akan masuk ke dalam AJAX dalam sedikit. Dan kemudian, ia adalah bahagian pelanggan. Jadi PHP adalah sebelah pelayan. JavaScript adalah bahagian pelanggan. Apakah positif untuk itu? Ia mengatakan ia. Ia lebih cepat, bukan? Kerana anda tidak mempunyai supaya- itu lebih cepat. Anda tidak perlu untuk berkomunikasi dengan beberapa peranti lain. Jika anda hanya pada anda pelanggan, anda tidak pernah akan harus pergi dan melihat apa yang pada pelayan dan kemudian melaporkan kembali atau sesuatu seperti itu. Jadi sebelah pelanggan cenderung untuk menjadi sedikit lebih cepat. [01:11:15] Gabe: Ya, tetapi ini tidak bermakna PHP adalah lebih cepat daripada JavaScript atau apa-apa yang seumpamanya. Mereka berjalan dalam jenis yang sama kelajuan kerana mereka berdua bahasa ditafsirkan. Perkara itu lambat di sini adalah permintaan itu. Jadi anda sebenarnya akan sepanjang jalan ke Brazil untuk mendapatkan maklumat yang hidup di sana. Tetapi PHP dan JavaScript, mereka jenis berjalan dalam kelajuan yang sama. Ia bukan satu yang lebih cepat daripada yang lain. Ini, juga, soalan trik di sini. Jadi JavaScript pernah menjadi kod mesin, benar atau salah? [01:11:47] PENONTON: Palsu. Gabe: Palsu. Ia mempunyai untuk menjadi mesin kod kod mesin kerana adalah satu-satunya mesin memahami. Walaupun ia tidak disusun, ia masih menjadi kod mesin kerana jurubahasa hanya program yang masuk baris demi baris dan mengubah baris yang ke sesuatu komputer yang memahami. OK? Cool. [01:12:08] DAVIN: Di sini adalah hanya yang sangat asas hello dunia program JavaScript. Jadi, saya tidak tahu jika- anda lihat ini. Tetapi anda hanya perlu HTML di sini. Dan bukannya benar-benar meletakkan JavaScript dalam tag skrip, jadi biasa anda boleh memasukkannya ke dalam kepala. Anda mempunyai tag skrip. Anda jatuh di sana. Semua yang telah kami lakukan di sini adalah kami telah dikaitkan dalam- jadi kami telah dikaitkan dalam fail JavaScript seperti ini. Dan anda semua dilakukan ini, bukan? Oleh itu, apabila anda menggunakan jQuery dan underscore.js dalam lepas p-set, anda tidak mempunyai banyak lagi kod di tag skrip anda, dalam kepala anda. Anda boleh berbuat demikian, tetapi sebaliknya anda baru menghubungkan ia dalam. Dan anda mengaitkannya dalam hanya suka anda lakukan dengan CSS. Jadi ia hanya menjadikannya lebih mudah untuk membaca supaya kod anda tidak suka 1,000 barisan panjang dengan tan fungsi yang anda mungkin tidak akan menggunakan. [01:12:52] Sebaliknya, anda hanya pautan dalam. Ia compartmentalizes ia. Ia seperti menulis beberapa fail header, dan kemudian termasuk yang fail tandukan pada C. Fikirkan ia seperti ini. Jadi apakah ini lakukan? Nah, ini akan berjalan. Ia akan memberi amaran. Jadi anda akan mendapat sedikit pop up dipanggil hello dunia. Soalan cepat, hanya cek kewarasan, jadi anda lihat di sini di dalam badan, berkata badan, HTML di sini. Apa yang berlaku dahulu? Adakah saya melihat badan, HTML di sini, atau saya melihat amaran pertama? [01:13:19] PENONTON: Pemberitahuan. [01:13:20] DAVIN: Betul. Beliau berkata amaran. Mengapa? [01:13:22] PENONTON: Kerana anda pergi dari atas ke bawah. [01:13:24] DAVIN: Ya. Perfect. Maka dia berkata, anda pergi dari atas ke bahagian bawah, yang sememangnya betul. Anda akan pergi dari atas ke bawah. Dan dalam JavaScript, jQuery, anda mempunyai fungsi itulah onload seperti, atau bersedia, dan mengatakan, OK, tunggu sehingga semua HTML ini telah dimuatkan. Kemudian, hubungi JavaScript. Kerana kita tidak mempunyai bahawa di sini, yang Perkara pertama yang akan berlaku adalah ia akan pergi dari atas ke bawah. Ia akan memukul bahawa JS memanggil, ia akan memberi isyarat. Selepas itu anda klik OK, amaran yang hilang. Kemudian ia akan menunjukkan anda HTML badan itu di sini. Nice. [01:13:54] OK, jadi sebenar cepat, bertulis dalam JavaScript adalah super cepat. Dalam usaha untuk mengisytiharkan pembolehubah, nama var. Jadi, dalam C, anda mempunyai int i, anda mempunyai mengisytiharkan jenis jenis ia. PHP, $. JavaScript, var. Kami berbual-bual tentang perkara ini. Baiklah, mari kita pergi. [01:14:11] Gelung, perkara yang sama. Perkara yang sama. Pengisytiharan fungsi, jadi seperti yang anda lihat dalam C. Satu-satunya perkara yang berbeza begitu apabila anda mendapatkan untuk bahasa pengaturcaraan yang lain, seperti apabila anda mengambil 51 semester seterusnya dan yang anda lakukan dengan OCaml, anda boleh berurusan dengan fungsi tanpa nama. Jadi itulah apa yang anda ada di sini. Jadi, anda mahu untuk dimasukkan ke dalam jumlah, beberapa jenis nilai wang. Tetapi anda mungkin hanya boleh melakukannya dalam satu masa. Jadi, anda tidak mahu untuk memanggil ia berfungsi Kesimpulannya, memberikan akuan fungsi. Sebaliknya, anda hanya menggunakannya sebagai fungsi tanpa nama. Dan anda telah melihat ini banyak. Anda akan melihat contoh ini dalam beberapa slaid. Ya, kita akan melihat. Gabe: Soalan yang baik. Apabila anda mungkin mahu menggunakan fungsi tanpa nama di sini? Pada asasnya, apabila anda mahukan sesuatu, seperti peristiwa, berlaku. Oleh itu, apabila tetikus adalah klik, sebagai contoh, anda mahu beberapa fungsi untuk dipanggil. Jadi anda lulus untuk acara pengendali, anda lulus untuk majlis itu, jenis, fungsi yang anda mahu untuk dipanggil. Dan apa yang anda lulus adalah seperti, pada akhir hari, hanya penunjuk untuk bahawa arahan, untuk majlis itu. Jadi ia tidak seperti yang anda lulus keseluruhan kod, seperti penunjuk kepada majlis itu. Dan kemudian, apabila seseorang klik yang tetikus, kemudian fungsi yang mendapat dipanggil. [01:15:17] DAVIN: Tatasusunan, jadi anda mempunyai pengisytiharan tatasusunan. Kemudian, array bagi memperbetulkan keadaan. Real cepat, apa ini akan mencetak? Apa yang akan elemen yang ketiga menjadi? [01:15:31] PENONTON: "JS". [01:15:32] DAVIN: Betul, ia akan menjadi "JS." Tunggu, kembali. Apakah yang panjang? [01:15:37] PENONTON: Tiga. DAVIN: Tiga, bukan? Apa yang anda berfikir. OK, sekarang pergi. Tatasusunan, anda boleh menambah sesuatu kepada mereka. Jadi, anda boleh pergi di luar batas awal mereka. Hanya sesuatu yang perlu diingat. PHP, JavaScript, mereka sedikit sedikit lebih pemaaf dari segi perkara seperti itu. Objek, sama seperti structs dalam C, sangat banyak seperti array bersekutu dalam PHP. Anda semua telah mempunyai pengalaman dengan ini. Jadi JSON, apabila anda lulus JSON depan dan ke belakang di p-set lapan, itulah objek anda. [01:16:03] Jadi yeah, contoh, contoh cepat. Di sini adalah objek. Cara anda rujukan ini objek, jadi sebenar cepat, katakan saya mahu mencari keluar, OK, apakah kursus? Dan supaya nama objek di sini adalah CS50. Dan kemudian jika saya mempunyai sebuah bersekutu pelbagai, bagaimana saya akan berbuat demikian? Saya akan menggunakan kekunci, bukan? Jadi saya mempunyai nama array. Saya mempunyai pendakap, sebut harga, utama, sebut harga akhir, kurungan akhir, dan yang akan rujukan yang elemen dalam array bersekutu saya. Bagaimana saya dirujuk kursus dalam objek saya? Musuh? [01:16:39] PENONTON: [didengar]. [01:16:40] DAVIN: Ada apa? PENONTON: CS50.course. DAVIN: Betul, yeah. Jadi CS50.course. Jadi cara yang anda merujuk perkara dalam objek JSON adalah dengan titik. [01:16:48] PENONTON: Anda juga boleh menggunakan pelbagai sintaks. [01:16:53] DAVIN: OK, denda. [01:16:54] Gabe: Anda juga boleh menggunakan CS50 kurungan, string, seperti tanda petikan. PENONTON: Saya fikir ia adalah sama dengan PHP. Gabe: Ia adalah perkara yang sama. DAVIN: Fine! Tetapi anda akan melihat ini tempat-tempat lain. Yeah, jadi menyimpan berterusan. Ini adalah apa yang saya hanya berkata. Jadi menjadi contoh JavaScript jQuery. Jadi ini adalah DOM saya, bukan? Real cepat, jadi saya mempunyai kepala, hello dunia, badan. Saya mempunyai butang. Ia berkata "menolak saya," jadi saya mahu menolak ia. Dan saya mahu melakukan sesuatu apabila ia diklik. Betul, akan datang. [01:17:31] Betul, jadi ini adalah JavaScript saya. Jadi jQuery hanya yang lebih mudah cara untuk menulis JavaScript. Jadi ini, dan apa yang saya akan menunjukkan anda akan datang, akan menjadi jQuery, adalah sama. Jadi mereka akan melakukan perkara yang sama. Hanya jQuery cenderung untuk menjadi sedikit lebih mudah. Orang cenderung untuk suka lebih. Ia mempunyai banyak fungsi. Jadi orang cenderung untuk menggunakan jQuery. Anda semua digunakan jQuery dalam lepas p-set. Jadi apa yang akan dilakukan? Apa yang akan JavaScript-- ini supaya ini adalah sekadar JavaScript. Apa yang akan dilakukan? Apa yang akan berlaku? [01:18:03] Jadi pertama, anda melihat onload tetingkap. Betul? Oleh itu, kita tidak melihat bahawa sebelum. Jadi ini akan menunggu sehingga beban tetingkap keseluruhan. Jadi ia akan menunggu sehingga beban HTML, semua imej sebelum ia apa-apa. Jadi katakan DOM kami telah dimuatkan. Semua yang ada di sana. Kemudian apa yang akan berlaku? Yeah? [01:18:19] PENONTON: Button muncul. [01:18:22] DAVIN: butang ini sudah ada. Yeah, jadi butang ini sudah ada. Tetapi ini akan mengatakan, OK, jika saya klik butang, jadi butang sudah di sana, seperti yang tag HTML. Tunggu, kembali cepat. Tag ini hak di sini adalah akan menjadi butang yang sudah. Sudah terdapat butang. Tetapi kemudian, yang JavaScript tag, di sini, ia berkata, OK, saya ingin untuk mendapatkan unsur oleh ID, jadi butang carian hanya berkata, OK, saya ingin peta pembolehubah ini pada butang itu. Boleh berubah sehingga hanya satu cara yang lebih mudah untuk mengakses butang itu. Aku berkata, OK, jika saya klik yang butang, jadi jika saya klik elemen itu, dan elemen ini merujuk kepada butang, jika saya klik ia, maka saya mahu memanggil fungsi. Berikut adalah salah satu daripada orang-orang tanpa nama fungsi kita bercakap tentang. [01:19:03] Hanya hubungi beberapa fungsi. Di dalam majlis itu, pada dasarnya sesuatu yang kita telah melihat banyak, amaran. Anda klik butang carian. Ia akan pada dasarnya mempunyai butang. Anda klik. Anda mendapatkan amaran itu. X keluar. Itu sahaja. Yeah? [01:19:16] PENONTON: jika anda meletakkan skrip Jadi [Didengar], skrip tag dalam HTML anda? [01:19:21] DAVIN: Anda boleh meletakkan skrip tag lurus di kepala kerana anda mempunyai onload ini. Ia juga bahawa anda mempunyai satu klik. Jadi ia akan menunggu sehingga anda klik untuk sesuatu. Tetapi onload adalah untuk tujuan keselamatan, untuk membuat beban semua pasti ke dalam HTML anda terlebih dahulu. Yeah? Anda ingin berkata sesuatu? [01:19:40] Gabe: [didengar]. DAVIN: Yeah. [01:19:42] PENONTON: Elakkan daripada Jadi onload mentakrifkan butang carian pembolehubah dengan hanya mengatakan document.getElementByID carian butang dot [didengar]. [01:19:49] DAVIN: Yang pasti, tetapi kemudian rentetan anda hanya mendapat besar. Tepat, jadi ini adalah hanya untuk membuat lebih mudah bagi anda, yeah. Ya? [01:19:56] PENONTON: Di mana yang kami lakukan mewujudkan window.onload? Atau document.ready? [01:19:58] DAVIN: Ya, ada. Ya, ada, saya diperiksa. [01:20:02] Gabe: Tidak bagi mereka untuk mengambil berat tentang. [01:20:03] DAVIN: OK, jadi saya akan untuk memberitahu anda juga. Jadi, pada asasnya, hanya secara umum, jadi window.onload menunggu sehingga DOM anda, semua HTML anda, beban. Ia menunggu sehingga beban imej anda. Ia menunggu sehingga beban segala-galanya. document.ready, ia hanya menunggu sehingga beban DOM anda. Setelah HTML adalah semua di sana, sekali DOM anda di sana, mula berjalan. Itulah satu-satunya perbezaan. [01:20:23] Gabe: kewarasan Cepat daftar di sini. Jadi ini dapat dilihat jenis seperti garis kod, bukan? Oleh kerana itu window.onload sama dengan sekumpulan barangan. Apabila JavaScript membaca ini, benar atau palsu, majlis itu mendapat dilaksanakan. Palsu. OK? Apa yang berlaku di sini, anda hanya lulus fungsi ini sebagai fungsi tanpa nama untuk window.onload. Dan kemudian apabila ia sedang pergi untuk benar-benar dilaksanakan? Apabila beban tetingkap. Itulah peristiwa. Jadi itulah jus t perkara kami bercakap tentang awal, bukan? Oleh itu, apabila acara itu berlaku, fungsi yang berlaku. Perkara yang sama dengan onclick itu. [01:20:59] DAVIN: OK, jadi seseorang mengambil jauh document.ready itu. Tetapi ini akan menjadi same-- yang tepat PENONTON: Tanda dolar, yang document.ready a. Itulah jalan pintas. [01:21:07] DAVIN: Oh, iaitu? OK, jadi cara ini document.ready, jalan pintas. Tetapi ini adalah sama seperti window.onload kecuali untuk perbezaan yang sedikit Saya memberitahu anda tentang. Dan ini adalah jQuery. Jadi ini adalah sama tepat thing-- ini adalah JavaScript. Ini just-- beberapa orang berfikir ia sebagai berat badan yang lebih ringan, versi anggun yang mempunyai banyak fungsi bahawa anda mungkin menggunakan. Jadi ini melakukan perkara yang sama. [01:21:34] Jadi perkara yang sejenis menunjukkan. Jadi dalam contoh yang lain, kita mempunyai document.getElementByID, jadi kami ini panjang rentetan perkara yang berlaku untuk mendapatkan unsur dengan apa jua ID ia mempunyai. Itu digantikan dengan panggilan ini di sini. Jadi anda lihat tanda dolar, kemudian anda lihat petikan, hashtag. Hashtag sentiasa pemilih yang. Ia berkata, OK, ini ada kaitan dengan ID. Apa pemilih untuk kelas? [01:21:56] PENONTON: Dot. [01:21:57] DAVIN: Dot, betul. Jika anda hanya mahu pilih tag, apakah ia? Ia hanya tag, betul-betul. Dan anda boleh menggunakan bahawa di sini, juga. [01:22:05] Gabe: Dan mengikut label, kita maksudkan seperti div, sebagai contoh, atau kepala. [01:22:08] DAVIN: Atau badan atau p atau apa-apa seperti itu, yeah. Jadi di sini, OK, daripada berkata document.getElementByID, ini adalah hanya perkara yang sama. Hanya dalam jQuery, itu lebih pendek. Jadi ia lebih mudah. Sebab itu, tidak lebih onclick, hanya klik. fungsi jQuery, memanggil fungsi ini. Alert adalah yang sama. Jadi ia sedikit lebih kecil, atau sedikit lebih pendek, sedikit orang bit-- berfikir ia sedikit lebih mudah untuk menulis, sedikit lebih mudah untuk difahami. Tetapi ini adalah jQuery. Banyak orang mendapatkan sedikit agak keliru dan bimbang dan mereka fikir, OK, jQuery adalah berbeza daripada JavaScript. Saya perlu ingat ini dua perkara yang berbeza. Ia bukan. Maksud saya, ia sintaks yang berbeza. Tetapi jQuery adalah JavaScript. Ia hanya seolah-olah versi yang lebih baik yang mungkin lebih mudah untuk memahami bahawa orang menggunakan. Gabe: Ya, untuk menjadi jujur, bahawa tanda dolar yang anda lihat dalam jQuery, itu sahaja nama daripada satu fungsi yang jQuery mentakrifkan. Ia tidak mempunyai apa-apa yang istimewa. Adakah Ia hanya nama suatu fungsi, seperti anda boleh menentukan tanda dolar. [01:23:03] DAVIN: Yeah, jadi bercakap tentang ini. Beberapa perkara yang berguna. Saya cari kembali pada kuiz lama. Dalam beberapa kuiz yang lalu, mereka telah terpaksa menggunakan perkara-perkara seperti ini. Jadi document.ready, jadi memastikan segala-galanya dimuatkan sebelum anda mula melakukan sesuatu. Pilih ID, atau pilih kelas, ia akan hanya menjadi quote dot beberapa kelas, quote akhir. Hantar, jadi jika anda meminta penghantaran borang dan panggilan fungsi ini selepas mengemukakan borang. Nilai, jadi mari kita mengatakan saya mempunyai bentuk yang penyerahan, seperti nama pengguna, e-mel, apa sahaja. Saya mempunyai kotak teks. Jadi, saya menaip ke dalam kotak teks. Nah, jika anda ingin mendapatkan nilai daripada kotak teks, anda menggunakan Val titik. Dan kemudian, turun di sini, dot HTML adalah sama adalah seperti dokumen dot getElementByID dot innerHTML. Jadi perkara yang berlaku untuk kembali anda HTML daripada ID itu. Di sini, anda hanya menggunakan beberapa ID atau apa sahaja dot HTML. Yang akan mendapat HTML daripada elemen itu. Jika anda mahu kemudian mengubahnya HTML, anda boleh lulus ia sesuatu. Jadi, anda akan menjadi seperti HTML dot, dan kemudian dalam, sebut harga, HTML baru atau sesuatu. [01:24:05] Gabe: OK, jadi AJAX. Saya benar-benar suka untuk memahami AJAX benar-benar baik. Jadi saya mahu anda semua untuk AJAX memahami benar-benar baik. Kerana jika anda lakukan, anda cukup banyak akan untuk memahami segala sesuatu yang mempunyai kaitan dengan HTTP, PHP, JavaScript kerana semua datang bersama-sama dalam AJAX. AJAX bukan bahasa. AJAX adalah teknik yang. Dan ia menggunakan banyak alat yang berbeza. AJAX bermaksud tak segerak JavaScript XML. Jadi kaedah, bahasa, data. [01:24:36] Jadi bahasa utama yang kita gunakan dalam AJAX untuk mencetuskan segala-galanya dan untuk mengendalikan segala-galanya kemudian adalah JavaScript. Itulah sebabnya ia berkaitan sangat dekat dengan JavaScript. Dan kemudian tak segerak adalah kerana kita tidak melakukannya sekaligus apabila kami memuatkan halaman. Ini adalah perkara yang kita boleh melakukan perkara-perkara semacam selari. Idea utama di sebalik AJAX adalah yang anda mahu ia untuk mendapatkan beberapa maklumat khusus. Sebagai contoh, apabila anda menaip baru Nama pengguna apabila anda mendaftar nama pengguna, Nama pengguna saya adalah abc123. Dan kemudian, di akhir bentuk, anda perlu klik Hantar. Dan ia terpaksa pergi ke pelayan, dan kemudian memeriksa jika dalam pangkalan data, abc123 sudah ada. Dan jika ia sudah ada, ia berkata, Nama pengguna sudah dalam pangkalan data. Dan mereka, anda perlu mengisi daripada keseluruhan bentuk lagi. Dan ia adalah benar-benar, benar-benar buruk. [01:25:23] Dan kemudian orang berkata, OK, mengapa tidak kita hanya melakukan permintaan HTTP kecil untuk hanya memeriksa untuk melihat jika pengguna ini adalah dalam pangkalan data sebelum pengguna terpaksa mengemukakan keseluruhan borang ini? Jadi, sebagai contoh, apabila pengguna kemasan menaip abc123, mari kita pergi ke pelayan sedikit sedikit dan hanya mendapatkan yang benar atau palsu dari pelayan untuk melihat jika itulah nama pengguna yang sah atau tidak. OK, jadi itulah salah satu utama menggunakan AJAX daripada masa kini masih. [01:25:49] DAVIN: Jadi sebenar cepat, dalam panggilan Ajax dalam jQuery, anda boleh menandakan bahawa anda mahu ia menjadi segerak. Anda tidak perlu melakukan ini. Tetapi, anda boleh berbuat demikian. Dan jika anda melakukannya, apa yang akan berlaku? Well, sebagai contoh, apabila anda mendapatkan berita atau apa sahaja, penyemak imbas anda hanya akan menunggu sehingga bahawa seluruh panggilan selesai bukannya membiarkan anda melakukan lain perkara yang betul selepas anda klik. [01:26:14] Gabe: Ia tidak lulus lagi. Oh my god. Maaf! Yup. "Pada masa lalu, yang pelanggan yang diperlukan untuk permintaan kandungan keseluruhan laman web. " Itulah apa yang saya katakan. Ia membolehkan kita menghantar GET tambahan atau POST permintaan tanpa untuk memuat semula pelayar kami. Jadi pada akhir hari, kami sebenarnya yang membuat permintaan HTTP di sini menggunakan JavaScript. Kerana sebelum ini, kami hanya digunakan JavaScript untuk menukar HTML yang sudah datang. Dan sekarang, kita boleh menggunakannya untuk berhubung dengan pelayan web juga. Cara ini berlaku adalah kita mempunyai pelanggan. Davin adalah pelanggan. Dan dia mempunyai semua JavaScript berjalan kerana HTML adalah dalam keadaan sihat. JavaScript adalah bijak. Jadi davin Davin mempunyai pintar sebahagian dan sebahagian bisu beliau. Dia akan menggunakan sebahagian pintar kini. Dia akan menggunakan JavaScript kepada permintaan, sebagai contoh, sama ada abc123 adalah dalam pangkalan data atau tidak. [01:27:04] Jadi Davin, sila, anda hanya hantarkan permintaan HTTP. Terima kasih. Jadi dia hanya menghantar permintaan HTTP. Anda melihat bahawa? Dan itu hanya cara yang sama bahawa apa-apa permintaan HTTP dihantar. Pelayar, Google Chrome atau sesuatu, adalah akan melihat bahawa ini Davin cuba untuk menghantar permintaan HTTP, akan membantu HM sedikit. Dan itu akan pergi sepanjang jalan ke pelayan. Sekarang, pelayan akan mempunyai PHP di sini, atau apa-apa bahasa lain. Sama seperti dalam permintaan HTTP biasa. Ia cukup banyak permintaan HTTP biasa. [01:27:31] Dan kemudian, pelayan akan mengatakan, OK, Davin mahu saya untuk memeriksa sama ada abc123 ini adalah di dalam pangkalan data. Pergi bercakap dengan model. Model ini mengatakan tidak. abc123 adalah nama pengguna yang baik. Dan kemudian, pelayan web yang akan menggunakan PHP untuk menyebabkan beberapa bentuk fail. Ia boleh menjadi benar-benar hanya fail yang mengandungi "ya" di dalamnya, atau "tidak, atau sesuatu seperti itu. Ia boleh menjadi apa-apa fail. [01:27:54] Ia boleh menjadi seperti saya akan menghantar Davin gambar itik jika ia dalam pangkalan data dan menghantar gambar hamster yang jika ia bukan dalam pangkalan data. Itu akan menjadi jenis bisu, tetapi ia akan bekerja. OK, jadi saya menghantar itik untuk Davin. Davin mendapat itik. Dan sekarang, siapa yang akan untuk mengendalikan itik? Sebahagian pintar Davin sekali lagi, jadi JavaScript, bukan? JavaScript menghantar permintaan, dan JavaScript akan menerima permintaan itu dan mentafsirkannya dalam bentuk tertentu. [01:28:22] Dan dalam hal ini, ia akan berkata, OK, jika itik maka saya baik. Jika hamster, maka saya akan untuk mengatakan, tidak, nama pengguna sudah wujud dalam pangkalan data. Tetapi biasanya, anda tidak akan menghantar itik. Anda akan menghantar sesuatu yang lebih bijak sedikit. Dan apa yang kita gunakan adalah XML. Dan baru-baru ini, kami menggunakan JSON. JSON hanya JavaScript Objek Notasi, yang pada dasarnya anda mendapat keseluruhan JavaScript objek. Dan memasukkannya ke dalam fail, hanya suka bahawa objek CS50 yang anda semua nampak. Memasukkannya ke dalam fail, dan anda hantar kepada Davin. [01:28:53] Jadi dalam kes ini, saya akan membuat objek JavaScript dan hanya berkata, pengguna wujud, ya. Atau manual wujud, tidak. Dan menghantar kembali kepadanya. Dan mengapa JSON? Kerana orang siapa yang menerima ini adalah akan menggunakan JavaScript untuk mengendalikan tindak balas yang. Dan JavaScript berfungsi dengan baik kerana ia dipanggil JavaScript Objek notasi. Betul? Jadi dia hanya boleh memanggil fungsi dan mendapatkan objek ini bagus dari sambutan. Dan kemudian, dia akan tahu sama ada pengguna yang ada di pangkalan data atau tidak. [01:29:22] Jadi anda lihat, semua itu datang bersama-sama dalam pelayan web, dan kemudian ada satu HTTP permintaan dan satu sambutan HTTP dan segala-galanya. Jadi pastikan anda semua memahami panggilan AJAX ini kerana ia membantu anda memahami semua konsep kita berbicara tentang. [01:29:37] Jadi di sini adalah contoh daripada AJAX dengan jQuery. Dan di sini, kita lakukan dengan get JSON. Oleh itu, kita tidak cuba untuk mendapatkan gambar kucing di sini, atau itik. Kami cuba untuk mendapatkan fail JSON. Dan kemudian kita menunggu sehingga ia dilakukan, dot dilakukan. Ini bermakna saya menunggu jawapan. Ia mungkin mengambil sedikit masa. Kemudian, anda lihat beban sedikit. Jika anda ingin berbuat demikian dalam laman web anda. Jadi dot dilakukan, dan kemudian apa yang berlaku apabila ia dilakukan? Anda lulus tanpa nama fungsi, hanya suka kita lihat sebelum ini. Kerana dilakukan adalah acara, hanya seperti mengklik tetikus atau apa sahaja, untuk jQuery. Jadi, anda lulus dalam fungsi ini dengan data, teks, status, dan jqXHR. Dan pada dasarnya, itu hanya beberapa pembolehubah yang boleh anda gunakan di kemudian hari untuk mempunyai status HTTP permintaan, data yang ia akan untuk menghantar kembali kepada anda. Sebab itu anda kemudian boleh menafsirkannya dan melakukan sesuatu yang bermakna dengan ia. Dan jika ia gagal, apabila ia mungkin gagal? Nah, apabila permintaan HTTP memberikan anda 500 atau sesuatu seperti itu. Kemudian, ia akan memberitahu anda status, jenis kegagalan yang, dan segala macam perkara. Anda perlu memastikan untuk mengendalikan kedua-dua kes, jika tidak program yang pergi gila. [01:30:42] DAVIN: Jadi yeah, ini betul-betul apa yang anda nampak pada lepas p-set anda. Panggilan AJAX sebenar adalah dalam get JSON. Itulah panggilan. Dan kemudian, bintik dilakukan adalah seperti ia memeriksa jika ia berjaya. Jika ia berjaya, anda mahu melakukan sesuatu dengan data. Anda kembali itu Permintaan data JSON. Itulah apa yang anda kembali. Jadi, jika anda ingat daripada p-set anda, banyak anda adalah seperti pendakap data i atau apa sahaja, pautan dot atau tajuk. Apa sahaja yang akan kembali itu JSON, apa sahaja ladang-ladang yang dalam bahawa objek JSON, itulah apa yang anda kembali. Data adalah apa yang anda kembali. Status teks, hanya sesuatu yang membolehkan anda tahu apa yang berlaku. Dan kemudian, yang jqXHR, itu hanya yang jQuery permintaan HTTP XML. Itu hanya seperti objek. Dan kemudian gagal, sama seperti Gabe berkata. Gabe: Dalam contoh kecil kami abc123 hanya untuk memeriksa jika itu dalam pangkalan data atau tidak, data akan menjadi sesuatu yang anda akan lakukan, jika nama pengguna data dot wujud, iaitu apa PHP anda dihasilkan untuk anda, jika nama pengguna data dot wujud, maka Saya akan memberi amaran, pengguna nama sudah wujud. Yang lain, saya hanya akan membiarkan pengguna meneruskan mengisi borang. OK, keselamatan, sejuk. [01:31:50] DAVIN: Ingin saya? [01:31:52] Gabe: Saya suka yang satu ini. Jadi sesuatu yang kelihatan biasa. Kami hampir selesai. Jadi ini merupakan contoh kamu melihat di dalam kelas. Anda telah menggunakan argv1 sini. Itulah seperti hujah baris arahan. Dan kami Mem penyalinan yang menjadi penampan daripada saiz 12. Ada apa di sini? Penimbal melimpah! Kerana kita mempunyai penimbal saiz 12. argv1 mungkin mempunyai saiz dua bilion. Kami tidak melakukan apa-apa pemeriksaan sempadan. Oleh itu, kita mungkin menyalin banyak memori. Dan kami akan menjadi terutamanya buruk tentang ini. Apa yang kita boleh lakukan itu sangat, sangat bermakna dalam kes ini? Ya? PENONTON: Sebahagian daripada dua bilion perkara mengandungi kod boleh laku yang mengembalikan [Didengar]. Gabe: Tepat. Jadi itulah jenis perkara yang digunakan orang untuk jailbreak iPhone, contohnya. Jadi begitulah keadaannya. Kerana anda hanya boleh membuat peranti melaksanakan apa-apa kod yang anda suka. Menetapkan, jadi tetap yang mudah. Hanya menyemak untuk batas. Anda memeriksa batal kerana kita selalu memeriksa batal apabila kita sedang berhadapan dengan tali. Dan kemudian, anda mengambil panjang tali sebelum. Dan jika tali panjang adalah rentetan yang sah panjang, iaitu dalam lingkungan 0 dan 12, maka kami baik. [01:33:03] DAVIN: Jika anda tidak menyemak batal, cepat sebenar, apa yang akan berlaku? Ia akan seg bersalah. Mengapa ia akan seg kesalahan? Kerana anda memanggil strlen di null. Gabe: Yeah. Benar atau palsu, menggunakan satu kata laluan adalah idea yang baik. [01:33:19] PENONTON: Palsu. [01:33:20] Gabe: Palsu. Menggunakan banyak kata laluan, dan besar, yang panjang. Ikon mangga memastikan keselamatan. [01:33:26] PENONTON: Palsu. [01:33:27] Gabe: Palsu. Ia tidak bermakna apa-apa. Ia hanya satu ikon. SSL melindungi daripada satu serangan orang tengah. PENONTON: Palsu. Gabe: Palsu. OK, jadi semua mereka adalah palsu. Nice. [Didengar] Mahu bercakap tentang perkara ini? Giliran anda. DAVIN: Jenis-jenis serangan, lelaki di tengah-tengah. Apakah yang dimaksudkan dengan serangan orang tengah? PENONTON: [didengar]. DAVIN: Jika anda menghantar HTTP permintaan, mereka boleh melakukan ini, bukan? Tetapi jika anda menghantar HTTPS, mereka mungkin tidak akan dapat melakukan ini. Ada banyak tempat di sepanjang sambungan anda. Anda mempunyai router. Anda mempunyai pelayan DNS. Jika seseorang itu mampu dari segi fizikal melihat apa yang anda menghantar, jadi seseorang mampu benar-benar mendapatkan antara anda, pelanggan, dan pelayan, dan adalah dapat melihat apa yang anda menghantar, ini adalah seorang lelaki dalam serangan tengah. Jadi untuk melihat apa yang anda cuba untuk mendapatkan daripada pelayan, atau dapat see-- lebih teruk, anda mungkin dapat melihat cookies atau sesuatu seperti itu. [01:34:16] Sebagai contoh, jika anda tidak menggunakan SSL, beliau mungkin dapat melihat ID kuki sesi anda. Dan ini dipanggil sesi rampasan kerana dia melihat cookies ID anda, dan kemudian dia dapat pergi ke bahawa laman web dan berpura-pura menjadi anda. Oleh kerana hanya suka dalam PHP, ingat apabila kita log masuk, apa yang kita lakukan? Kami menetapkan ID sesi sama dengan ID. Jadi yang mengenal pasti anda. Itulah sebabnya anda boleh melihat portfolio anda dan portfolio tidak semua orang lain. [01:34:38] Nah, jika saya mampu untuk mendapatkan cookie yang, maka saya boleh layari laman tersebut. Dan kemudian, saya hanya boleh melihat bahan anda dan mula membeli dan menjual barangan. Jadi itulah sesi rampasan. Tetapi anda tidak perlu bagi- dapat jadi anda boleh menggunakan orang dalam serangan tengah walaupun mereka menggunakan SSL. Tetapi anda tidak akan dapat. Jika mereka menggunakan SSL, anda tidak boleh sesi rampasan. Mengapa? Oleh kerana itu semua disulitkan, hak? jika ia disulitkan, dan saya masih seorang lelaki dalam pertengahan, saya masih mendapat data anda. Itu baik. Tetapi ia disulitkan. Jadi saya tidak boleh benar-benar menggunakannya. Jadi itulah dua. [01:35:09] Real cepat, permintaan tapak silang pemalsuan. Itu hanya jika ada pautan dan pautan yang melakukan sesuatu bahawa anda tidak fikir ia perlu dilakukan. Sebagai contoh, jika pautan itu akan membeli saham atau menjual saham, dan anda tidak tahu itu. Anda klik pada pautan, menghantar permintaan, membeli atau sesuatu yang dijual anda tidak bermaksud untuk melakukan. Itulah yang. [01:35:25] Tapak skrip Cross, jadi di sini, anda lulus dalam melalui q berubah-ubah, bukannya lulus dalam beberapa jenis nilai, mungkin q adalah seperti nama. Jadi, daripada lulus q setaraf Davin atau sesuatu seperti itu, jika anda tidak menggunakan HTML aksara khas, jika anda tidak melarikan diri ini untuk memastikan ia OK, maka saya boleh lulus dalam sebaliknya, katakan di sini saya cakapkan cetak atau sesuatu seperti itu, kemudian saya boleh lulus di sini panggilan skrip. [01:35:51] Sebab itu, bukan hanya mendapat pembolehubah, Saya kemudian akan melaksanakan panggilan skrip ini. Jadi di dalam skrip yang memanggil, apa yang ia buat? Dokumen lokasi dot, perkara yang berlaku untuk ubah lokasi dokumen itu. Jadi saya akan mengarahkan ke tempat lain. Ia dipanggil lelaki yang buruk dalam contoh ini, sangat baik. Tidak dapat memikirkan perkataan. Dan kemudian, apa yang lebih lebih buruk adalah bahawa saya akan untuk kemudian menetapkan kuki, iaitu beberapa pembolehubah saya di laman web ini. Saya akan menetapkan sama kepada cookie dokumen titik. Oleh itu, saya akan untuk mencuri cookies anda. Dan saya akan mengarahkan beberapa maklumat untuk laman web bahawa anda tidak boleh mengakses. Dan ini semua berlaku kerana anda tidak melarikan diri apa yang anda lihat. Yeah? [01:36:29] PENONTON: Jadi, untuk membuat yang jelas, ia vulnerable.com yang adalah terdedah kepada ini. Jadi link yang boleh muncul pada halaman tertentu. Seseorang klik di atasnya, pergi ke vulnerable.com. Anda mempunyai cookie untuk vulnerable.com. Katakan Facebook adalah terdedah, jadi facebook.com. Anda mempunyai cookie Facebook anda. Apa ini lakukan, anda akan facebook.com, ia segera mengarahkan anda badguy.com, tetapi termasuk cookie anda. Jadi ia merupakan halaman peralihan cepat, tetapi cookie Facebook anda dimasukkan dengan peralihan itu, dan itulah bagaimana mereka [didengar]. Gabe: Yeah, ada beberapa perkara yang sangat bermakna yang orang boleh lakukan jika ada ini. Sebagai contoh, jika dibenarkan Facebook semua orang untuk menukar nama pengguna anda, dan mereka tidak melakukan apa-apa semakan waras, jadi anda boleh memasukkan perkara JavaScript yang mengubah imej anda ke hamster yang. Dan yang memasukkan JavaScript sama ke semua orang yang melihat halaman anda. Jadi semua orang yang melihat halaman anda mempunyai perkara yang sama dalam nama pengguna. Dan kerana ia adalah virus, ia merebak dengan pesat. DAVIN: Kami akan skip terakhir satu, dan kemudian kami sudah selesai. Jadi ini adalah hanya satu lagi contoh. Jadi ini adalah mereka tidak melarikan diri jadual SQL mereka. Jadi, anda boleh menjatuhkannya. Jadi, anda mahu untuk melarikan diri sesuatu. Itu adalah contoh sebelumnya dengan tapak skrip salib. Maaf, kami berlari sedikit lewat. Esok, maaf! Esok, kita mempunyai waktu pejabat. Jadi waktu pejabat di Cabbot 8:00-11:00. Waktu pejabat adalah hanya untuk soalan kuiz.