>> JASON Hirschhorn: Selamat datang, semua orang, untuk minggu 10.
Ini adalah minggu yang menarik karena besok adalah Quiz 1, yang kita akan mendapatkan
dalam satu detik.
Hari ini di bagian, kita akan pergi atas beberapa sumber daya untuk kuis, dan
maka saya akan menjawab setiap dan semua pertanyaan kalian punya.
Dan kita akhirnya akan berakhir dengan beberapa masalah praktek.
>> Kita bisa menghabiskan seluruh bagian menjawab pertanyaan.
Kita bisa menghabiskan seluruh bagian akan lebih dari masalah praktek.
Kami hanya akan memperluas untuk mengisi ruang dan waktu yang kita miliki.
>> Jadi saya menaruh daftar ini setiap minggu, tapi itu sangat penting minggu ini.
Untuk belajar, jika Anda belum mulai sudah, oh boy.
Tapi mudah-mudahan Anda sudah mulai sudah.
Dan Anda akan melalui bahan dan sumber daya yang tercantum di sini.
Saya akan sangat menyarankan sejumlah ini.
>> Secara khusus, catatan kuliah yang sangat penting dan membantu.
Study.cs50.net menyediakan primer besar pada banyak
topik yang kita bahas.
Ini juga memiliki beberapa besar berlatih masalah.
Dan kemudian, Google terlalu besar.
Saya tidak tahu apa yang akan Anda gunakan untuk.
Tapi menggunakan Google, juga.
>> Menjangkau saya jika Anda memiliki pertanyaan, komentar, atau kritik.
Lihat selama sesi tinjauan slide dari tadi malam.
Atau, jika Anda memiliki beberapa waktu, menonton video.
Mereka menyediakan banyak membantu material dan informasi.
Dan mencoba dan menutup jika tidak semua, banyak topik yang kita sudah dibahas dan bahwa Anda
mungkin melihat pada kuis.
>> Berbicara tentang kuis, yang akan besok.
Ini 75 menit.
Banyak dari Anda mengambil itu pada 1 pukul, dan beberapa dari Anda
mengambil jam 5:30.
Untuk saat ini Anda mengambil itu dan lokasi Anda mengambil itu, pastikan
Anda memeriksa dokumen pada homepage CS50.net.
>> Ingat bahwa Anda bisa mendapatkan satu 8 1/2 dengan 11 lembar untuk mengambil dengan Anda.
Sering kali, orang tidak menggunakan ini lembar sama sekali selama kuis.
Tapi benar-benar, itu adalah sangat membantu studi alat.
Jadi menyusun lembaran yang apa Aku menghabiskan mungkin tiga atau empat jam
lakukan ketika saya sedang belajar untuk CS50, dan itu mudah yang paling bermanfaat
cara aku bisa belajar untuk kuis.
Jadi bahkan jika Anda memiliki beberapa orang lain panduan belajar untuk melihat dan
digunakan sebagai referensi, saya sangat menyarankan membuat panduan studi Anda sendiri, menempatkan
bahwa hal bersama-sama.
Itu benar-benar membantu Anda belajar semua materi.
>> Terakhir but not least dalam bagian ini, setelah besok kuis ada satu
lebih kuliah -
Senin depan.
Ada satu bagian yang lebih, tidak berikutnya Selasa sebelum Thanksgiving, tetapi
Selasa setelah itu.
Kami akan bertemu bersama-sama untuk akhir selamat tinggal partai dan juga melakukan beberapa keren
hal untuk mendapatkan kalian bersemangat tentang penelitian lebih lanjut dalam ilmu komputer.
>> Ada satu proyek lagi, satu lagi adil, satu lagi Hackathon.
Kami mendekati akhir CS50, yang menarik -
tetapi juga, jika Anda seperti saya, agak sedih.
Sebelum saya melanjutkan, apakah ada yang punya pertanyaan tentang apa yang
kita sudah dibahas sejauh ini?
>> OK, baik mari kita membahas beberapa pertanyaan yang Anda miliki untuk kuis dan topik
kita mungkin menutupi.
Jadi ini adalah daftar yang saya mengumpulkan.
Hal ini tidak berarti lengkap, tapi mudah-mudahan akan joging memori Anda jika Anda
punya beberapa pertanyaan tentang semua ini topik, atau jika Anda memiliki pertanyaan tentang
latihan soal dari kuis dalam beberapa tahun terakhir.
>> Aku punya beberapa pertanyaan yang diemail ke saya, tapi saya ingin menunda
pada mereka untuk kedua.
Apakah Ada yang punya pertanyaan, masalah yang mereka tidak mengerti,
jawaban mereka tidak mengerti untuk mendapatkan kita mulai?
Avi.
>> AUDIENCE: Dapatkah Anda hanya pergi ke DOM dan Ajax benar-benar cepat?
Seperti, apa yang kita perlu tahu atau seharusnya mengerti tentang mereka?
>> JASON Hirschhorn: Aku akan menjawab umumnya pertanyaan ini, apa yang harus saya
perlu tahu tentang topik yang diberikan x?
Karena aku punya perasaan banyak dari Anda akan menanyakan hal itu, atau
ingin tahu tentang itu.
Jadi sejauh bahwa topik itu dicakup dalam perkuliahan, atau bagian, atau
study.cs50.net, masalah diatur, Anda harus akrab dengan itu.
>> Jadi Anda tidak perlu tahu setiap jenis tag yang tersedia dalam HTML atau
setiap jenis atribut atau properti Anda dapat memberikan sesuatu dalam CSS.
Tetapi jika Anda melihatnya dalam contoh kuliah, jika Anda melihatnya dalam masalah
set, Anda mungkin harus akrab dengan itu, terutama hal-hal yang Anda lihat
dalam kuliah.
Jadi kita bahas dokumen model objek sedikit di
bagian, lebih lagi dalam kuliah.
Anda harus akrab dengan yang banyak.
>> Dan Anda harus terbiasa dengan Ajax pada tingkat yang sama.
Kita tidak pernah melihat sangat maju atau contoh rumit Ajax, sehingga
Anda tidak akan diminta melakukan sesuatu yang sangat rumit.
Tapi Anda mungkin bertanya, bagaimana cara membuat panggilan Ajax menggunakan jQuery?
Yang merupakan sesuatu yang Anda telah melihat nomor kali sebelumnya, baik dalam
meninjau sesi dan kuliah, dan itu hanya dua baris-ish kode.
>> Jadi itu adalah sesuatu yang Anda harus akrab dengan.
Tapi sekali lagi, untuk semua topik ini, jika Anda pernah melihat itu
sebelumnya, itu adalah permainan yang adil.
Dan kami mungkin meminta Anda - jelas, kami akan menanyakan hal-hal yang Anda
belum pernah melihat sebelumnya.
Coding sesuatu yang Anda belum terlihat sebelumnya.
Yang tidak mengatakan Anda belum melihat alat untuk memecahkan
masalah itu sebelumnya.
Anda telah melihat alat tersebut.
>> Sebagai contoh, pada Quiz 1, jika Anda perlu kode strlen.
Kami belum dikodekan strlen sebelumnya.
Tapi Anda tahu bagaimana menggunakan untuk loop, Anda tahu bagaimana menggunakan jika kondisi.
Anda tahu bagaimana menulis variabel dalam C. Ini akan menjadi hal yang sama di sini.
Anda tidak akan diminta untuk melakukan apa pun yang Anda belum lihat sebelumnya, namun
Anda mungkin akan diminta untuk, seperti, menempatkan sesuatu bersama-sama dengan cara baru, atau
memecahkan berbagai jenis masalah.
>> Maaf, itu tidak spesifik untuk Anda pertanyaan, tapi aku tidak bisa menjawab tentang
setiap topik tunggal apa yang Anda melakukan atau tidak perlu tahu.
Tapi juga, maaf, hal terakhir itu.
Kami telah menghabiskan lebih banyak waktu untuk pada daftar tautan daripada yang kita miliki di Ajax.
Anda tidak menggunakan Ajax dalam satu set masalah.
Salah satu fitur utama yang Masalahnya mengatur itu daftar link.
Dan kami menghabiskan banyak waktu di kuliah dan bagian menggunakannya.
>> Jadi, kemungkinan besar daftar link akan muncul lebih sering pada kuis dari Ajax akan.
Atau pertanyaan-pertanyaan yang berkaitan dengan link Daftar akan bernilai lebih banyak poin.
Jadi, Anda pasti bisa fokus dan sempit dalam pada hal-hal yang lebih
kemungkinan untuk datang karena kita memiliki menghabiskan lebih banyak waktu pada mereka.
>> OK pertanyaan lain?
Ya.
>> AUDIENCE: Bisakah kita pergi atas penggunaan fungsi anonim di JavaScript?
Aku yang sedikit bingung tentang hal itu.
>> JASON Hirschhorn: Jadi dalam JavaScript -
Saya mencoba untuk berpikir bagaimana saya bisa menulis ini pada -
jadi mari kita benar-benar membuka kode ini.
Jadi ini adalah kode yang kami lakukan minggu lalu.
Dan Anda pernah melihat ini sebelumnya jika Anda berada di sini di bagian pekan lalu.
Atau Anda pernah melihat sesuatu mirip dengan ini sebelumnya.
>> Tapi Anda bisa melihat pada baris pertama ini.
Ini adalah bagaimana Anda mulai -
semua orang melihat ini sebelumnya.
Jika Anda ingin menaruh beberapa kode JavaScript, Anda memasukkannya ke dalam ini, dengan asumsi
Anda menggunakan JQuery.
Ini mengatakan, tidak melakukan apa-apa sampai dokumen dimuat.
>> Dan kemudian, Curt, Anda lihat di sini kita melakukan sesuatu seperti ini -
fungsi paren terbuka, tertutup paren.
Jadi kita tidak memberikan ini fungsi nama.
Kami tidak akan mendefinisikan fungsi ini seharusnya dijalankan dan kemudian
menyebutnya beberapa kali.
Kami hanya mengatakan dokumen ini sudah mengambil fungsi.
Beberapa hal yang harus dilakukan.
>> Dan kita tidak ingin menghabiskan waktu memberikan nama atau menyimpannya untuk
lamanya.
Kami hanya ingin menjalankan beberapa hal.
Jadi fungsi semacam anonim dari melayani tujuan itu.
Bila Anda tidak akan menggunakan sesuatu berulang-ulang, sehingga Anda tidak perlu
untuk memberikan nama - Anda hanya ingin menggunakannya sekali -
Anda hanya akan mengatakan fungsi, untuk Misalnya, dalam kasus ini, dan Anda hanya
mendefinisikan sesuatu yang Anda bisa memberi nama.
>> Seperti, kita bisa menarik fungsi ini keluar dan memberikan nama dan kemudian memanggil
berfungsi di sini.
Tapi kita tidak perlu karena kita tidak ingin membuang-buang waktu memberikan nama atau
membuang sesuatu di ruang nama kami.
Dan Anda akan melihat bahwa banyak.
Sebagai contoh, kita melihat bahwa banyak dalam hal ini kode, tapi Anda pernah melihat ini sebelumnya ketika
Anda mengklik sesuatu -
menjalankan jenis kode.
>> Kita bisa menentukan kode yang kita inginkan untuk menjalankan ketika kita klik, dalam hal ini,
ID ini, sebagai fungsi yang terpisah dan kemudian menjalankan fungsi tersebut.
Tapi dalam kasus ini, kita hanya melewatkan langkah dan bergerak ke sini dan
hanya untuk mendefinisikan segala sesuatu yang kita inginkan terjadi dan
tidak memberikan nama.
Itu masih mungkin tidak memiliki menjawab pertanyaan Anda.
>> AUDIENCE: Tidak, itu tidak.
Maksudku, saya kira saya hanya tidak benar-benar mengerti mengapa itu akan menjadi
berfungsi sama sekali, meskipun.
Karena itu tidak benar-benar dipanggil.
Ini tidak benar-benar memiliki nama.
>> JASON Hirschhorn: Ini adalah fungsi dalam arti bahwa itu adalah serangkaian langkah,
seperti Anda akan dimasukkan ke dalam fungsi.
Dan itulah sebabnya kita sebut itu fungsi anonim.
Kami tidak akan memberikan nama.
Kami tidak akan menyia-nyiakan mencoba untuk nama itu, tapi kita bisa.
>> Fungsi anonim, Anda selalu dapat memberi nama.
Jadi misalnya, kode ini di sini, kita bisa menempatkan kode ini di dalam
fungsi dan kemudian memanggil fungsi ini di sini.
Sebaliknya, kita katakan, kita tidak akan repot-repot dengan itu.
Kami hanya akan menulis semuanya di sini.
>> Ini seperti kadang-kadang ketika Anda sedang menulis empat loop dalam C - kalian
telah melihat ini sebelumnya - mungkin kau iterasi melalui forloop a
ke i sama dengan 0.
Saya kurang dari strlen.
Atau Anda akan melalui beberapa array, Anda dapat menyimpan berbagai
indeks i di beberapa variabel.
Dan Anda menggunakan variabel tersebut.
Jadi Anda tidak perlu menulis ulang susunan braket saya berulang-ulang.
>> Dan itu semacam seperti variabel dummy.
Ini tidak melayani banyak tujuan lain selain untuk membuat kode Anda sedikit lebih bersih
dan lebih mudah dibaca.
Fungsi yang sama di sini.
Hanya membuat sedikit lebih mudah, tetapi fungsional tidak ada perbedaan.
Apakah itu menjawab pertanyaan Anda?
>> AUDIENCE: Ya.
>> JASON Hirschhorn: OK ..
Mario?
>> AUDIENCE: Kemarin mereka sering menempatkan Fungsi kurung acara.
Apakah itu berarti sesuatu?
Atau untuk hal-hal seperti bahwa mereka akan melakukan
document.ready fungsi event.
>> JASON Hirschhorn: Kami telah melihat ini, dan lagi, ini adalah hal-hal kecil yang
mungkin saya tidak ingin menghabiskan terlalu banyak waktu.
Karena kadang-kadang saya tidak ingin orang mendapatkan panik bahwa mereka tidak memiliki
mendengar tentang hal-hal yang banyak.
Tapi kita berbicara sedikit tentang event handler.
Jadi sesuatu terjadi, dan kemudian fungsi ini dijalankan.
Dan kemudian kami juga ingin tahu beberapa rincian tentang apa yang
terjadi dalam acara ini.
>> Jadi pikirkan kembali masalah set 4.
Itu mungkin adalah cara termudah untuk memahami bahwa dalam istirahat keluar.
Ada beberapa kode -
seperti event yang akan terjadi, tapi acara dapat berarti banyak hal.
Jika bisa berarti mouse diklik, maka bisa berarti anda menekan tombol panah, et
sebagainya, dan sebagainya.
>> Tapi itu semua disimpan dalam generik hal yang disebut peristiwa.
Dan kemudian kita dapat mengatakan, adalah acara ini hal ini?
Atau ini event hal ini?
Atau, seperti apa yang terjadi dengan acara itu?
Jadi itulah mengapa Anda membuat variabel yang ada untuk menyimpan informasi tambahan
tentang apa yang sebenarnya terjadi bahwa Anda akan ingin
memanfaatkan dalam fungsi.
Tapi sekali lagi, itu mungkin salah satu hal yang kurang penting untuk menjadi super
akrab dengan.
>> OK, apa pertanyaan lain memiliki orang-orang memiliki, atau batu sandungan mereka telah
ditemui saat meninjau?
Kami akan kembali ke daftar itu.
Bagaimana selama latihan kuis, jika orang telah mengambil mereka yang sudah?
Apa beberapa masalah yang tersandung kalian up?
Aku tahu pasti bahwa tahun lalu kuis benar-benar keras.
>> AUDIENCE: Bisakah Anda menjelaskan apa serangan injeksi SQL?
>> JASON Hirschhorn: OK, bagus.
Jadi kita berbicara tentang hal ini sedikit.
Ada kuliah tentang keamanan.
Dan lagi, seperti yang saya sebutkan sebelumnya, ini samping.
Tapi Anda akan frustrasi pada kuis ketika Anda membaca beberapa dua titik kecil
pertanyaan, dan Anda seperti, ketika aku pernah belajar bahwa?
>> Semua hal-hal pada mereka kuliah bahwa Anda tidak berpikir Anda perlu
tahu, atau Anda bisa mengabaikan karena mereka tidak harus melakukan dengan
masalah set, mereka kemungkinan akan datang lagi pada kuis.
Jadi, keren, hal menyenangkan yang baru saja Anda pikir Daud mengatakan bagi Anda untuk
menikmati, ia memberitahu Anda untuk Anda menikmati dan membuat Anda hanya menjadi super
bersemangat belajar segala sesuatu ada untuk belajar
tentang ilmu komputer.
Hal-hal ini juga muncul di kuis.
Jadi, bahkan hal-hal kecil yang tidak langsung berhubungan dengan masalah Anda
ditetapkan, karena kalian sudah familiar dengan dari Kuis 0, mungkin akan muncul.
Dan ini adalah contoh yang baik sesuatu.
>> Jadi injeksi SQL serangan adalah ketika Anda mendapatkan beberapa informasi dari pengguna dan
Anda ingin memasukkannya ke dalam tabel menggunakan SQL insert pernyataan, tetapi Anda
tidak membersihkan input sebelumnya.
Jadi, jelas kita telah melihat Pernyataan SQL.
Aku hanya akan membuka -
mari kita pergi -
kita akan pergi ke review -
Saya pikir, yang menutupinya?
Saya pikir Samala lakukan.
Jadi kita bisa mendapatkan -
>> AUDIENCE: Di mana kau menemukan ini?
>> JASON Hirschhorn: Jadi, jika Anda pergi ke CS50.net, kuis, dan kemudian Anda dapat
gulir atas dan mendapatkan slide dari sesi review.
Tapi Anda bisa melihat ini adalah contoh yang baik dari serangan injeksi SQL.
Kami mengambil beberapa informasi dari pengguna dan mereka memberi kami sebuah string, dan kemudian kita
ingin memasukkan string yang ke dalam database.
Umumnya kita akan membersihkan bahwa masukan, yang berarti ada beberapa
karakter yang berbahaya.
>> Misalnya, dalam string SQL, kutipan ini -
tanda kutip tunggal atau tanda kutip ganda -
berarti sesuatu.
Mereka berarti mengakhiri string ini di sini.
Dan jadi jika pengguna memberikan Anda satu atau kutipan ganda, mereka bisa
mencoba untuk perjalanan query SQL dan menyisipkan beberapa hal-hal buruk ke dalamnya.
Dan jika mereka melakukan itu, mereka bisa mendapatkan kontrol database Anda atau melakukan
hal-hal yang Anda tidak ingin mereka lakukan.
>> Jadi itu sebabnya setiap kali kita mengambil SQL query, kita membersihkan masukan sebelum
memasukkannya ke dalam database, yang berarti kita melarikan diri karakter-karakter.
Kita akan berbicara tentang bahwa dalam satu detik.
Tapi cerita panjang pendek, injeksi SQL serangan adalah jika Anda tidak melakukan itu -
jika Anda tidak merawat input mereka memberi Anda sebelum meletakkan Anda
Database, mereka bisa, seperti yang Anda lihat ke bawah di sini, menjalankan query yang, pada kenyataannya -
mereka dimasukkan ke dalam kode mereka di sini dan baris ini pilih di sini akan pilih
segala sesuatu dari meja tanpa apa password yang diberikan.
Karena Anda memiliki atau 1 sama dengan 1.
>> Jadi pada dasarnya, cerita panjang pendek, cara untuk mengambil alih database.
Pertanyaannya, kemudian, untuk kalian, adalah dimana dalam p set 7 kau membersihkan semua
masukan untuk query SQL Anda?
Dimana langkah itu terjadi?
Di mana Anda mencegah injeksi SQL Serangan terjadi di p set 7?
Ya.
>> AUDIENCE: Crypt?
>> JASON Hirschhorn: Jadi itu tidak crypt.
Kami tidak membuat Anda melakukan ini untuk ini masalah khusus yang ditetapkan, tapi itu terjadi
dalam fungsi query.
Kami benar-benar menulis untuk Anda, dan kami merawat
sanitasi input untuk Anda.
Tapi dalam beberapa tahun terakhir, para siswa memiliki untuk mengetik input sendiri.
Dalam p set 7, banyak dari Anda -
biarkan aku membuka satu file lainnya.
>> Jadi, Anda akan melihat di sini banyak orang, dalam masalah set 7, tidak menelepon
fungsi ini pada string.
Fungsi ini, htmlspecialchars, lagi -
string ini mungkin memiliki beberapa hal bahwa dalam HTML berarti sesuatu yang lain.
Seperti penjepit, persegi, atau sudut braket berarti sesuatu dalam HTML.
>> Dan jadi jika Anda mencetak yang keluar ke layar atau jika Anda hanya mengambil itu dan
mencetak yang ke HTML Anda, kekuatan yang melakukan sesuatu yang tidak Anda harapkan.
Jadi htmlspecialchars berjalan di atas semua orang karakter khusus yang memiliki
pertemuan dan lolos mereka.
Jadi itu akan dicetak sebagai teks Anda ingin melihat, bukan
mengacaukan HTML Anda.
Kami disebut fungsi yang di header.
Dan banyak orang lupa memanggil fungsi dalam
kode Anda sedang menulis.
>> Jadi, misalnya, jika nama saham memiliki sudut braket di dalamnya dan Anda lupa
untuk memanggil fungsi ini, sudut yang bracket bisa terlempar apa
HTML Anda tampak seperti.
Tapi memanggil fungsi ini akan melarikan diri yang jadi itu benar-benar mencetak sebagai
sudut braket dan tidak membuang off kode HTML Anda.
>> Alasan yang sama kita lihat, kadang-kadang, garis miring sebelum tanda kutip ganda dalam
baris printf karena kita tidak ingin tanda kutip ganda kebawah string.
Kami ingin mencetaknya ke layar.
Jadi semua ini adalah ide yang sama.
Apakah itu menjawab pertanyaan Anda?
>> AUDIENCE: Jenis.
>> JASON Hirschhorn: Apakah Anda memiliki tindak lanjut?
>> AUDIENCE: Saya kira injeksi SQL Serangan harus dilakukan dengan itu?
Saya tidak mengerti bagaimana keduanya terkait.
Mengapa Anda melakukan specialchars?
>> JASON Hirschhorn: OK, jadi SQL serangan injeksi adalah ketika Anda menyuntikkan
beberapa string berbahaya ke seseorang Program, dan mereka hanya mengambil dan menjalankan
query SQL dengan string Anda memberi mereka.
Seperti yang Anda lihat di sini, bahwa bisa menjadi masalah.
Jadi cara Anda mencegah terhadap yang Anda mengambil tali mereka yang mereka berikan
Anda - jadi string ini di sini -
dan Anda membersihkan itu.
Anda melarikan diri semua hal yang berpotensi bermasalah.
Jadi Anda tidak menafsirkannya sebagai sesuatu itu berarti sesuatu.
>> Dan contoh bahwa dengan HTML adalah fungsi ini.
Jadi itu ide yang sama di sini.
Dan aku hanya menunjukkan kepada Anda lainnya contoh ketika Anda sudah
melihat ide ini sebelumnya.
Melarikan diri input pengguna sebelum mencetak keluar ke layar atau meletakkan
dalam sebuah pernyataan SQL.
>> AUDIENCE: Jadi dalam hal ini, pengguna adalah bermain-main dengan programmer.
>> JASON Hirschhorn: Ya.
Dengan semua ini serangan keamanan, itu selalu umumnya pengguna, atau
seseorang, sedang mencoba untuk mess dengan Anda, programmer.
Dan ini adalah cara Anda dapat mencegah terhadap mereka.
>> AUDIENCE: Jadi saya punya pertanyaan tentang fungsi hash.
Dalam Quiz 1 dari 2011, ada dua pertanyaan tentang hash satu sisi.
Dan aku hanya ingin tahu apa artinya.
>> JASON Hirschhorn: OK, yang kuis?
2011?
>> AUDIENCE: Ya.
>> AUDIENCE: Kuis 1?
>> AUDIENCE: [Tak terdengar].
Itu seperti hashing password.
Itu tidak menempatkan hal-hal -
>> JASON Hirschhorn: Apa halaman itu?
>> AUDIENCE: Saya pikir itu 9 atau 10, atau keduanya.
>> JASON Hirschhorn: Baiklah, pergi ke depan, Curt.
Anda dapat menjawab sekaligus kita melihat.
>> AUDIENCE: Saya pikir itu berbicara tentang hashing password.
Seperti, ketika seseorang memasuki password, Anda mengubahnya menjadi suatu hal yang terenkripsi.
Itulah hash password, yang berbeda dari fungsi hash yang
menempatkan sesuatu ke dalam tabel hash.
>> JASON Hirschhorn: Mari kita lihat.
Biarkan aku menarik apa yang mereka berikan sebagai jawaban.
Dan kemudian kita akan berjalan melalui itu.
>> Jadi Curt memberi contoh yang bagus dari hash satu arah.
Ketika kita telah melihat ini sebelumnya, kita mengambil password dan mengubah -
ingat, di p set 7, seseorang mungkin memiliki password yang hanya password,
tapi kemudian itu akan dienkripsi menjadi beberapa hal yang sangat panjang.
The hash satu arah berarti sangat mudah untuk pergi dari satu cara untuk yang lain, tetapi
itu sangat sulit untuk pergi dari cara lain kembali.
>> Dan Anda tahu, ketika Anda memeriksa password masyarakat dalam masalah
set 7, Anda akan mengambil mereka -
jadi, misalnya, mengatakan bahwa mereka ingin mengubah password mereka, Anda meminta mereka
untuk password lama mereka.
Anda mengambil password lama mereka.
Anda dienkripsi itu.
Dan kemudian membandingkan dua enkripsi daripada unencrypting asli
satu, karena itu benar-benar sulit untuk pergi ke arah sana.
Ya.
>> AUDIENCE: Bagaimana secara mendalam tidak kami pemahaman Telnet harus?
>> JASON Hirschhorn: Jika itu disebutkan sebentar di kuliah, hanya singkat
pemahaman.
Sekali lagi, kembali ke jawaban pertanyaan Avi -
semakin banyak hal muncul, semakin besar kemungkinan itu Anda harus super
akrab dengan mereka.
Jika mereka hanya datang dalam kuliah, itu hanya satu tempat.
Tetapi jika mereka muncul dalam kuliah, bagian, dan masalah ditetapkan, maka Anda
mungkin harus super akrab dengan mereka.
>> Jadi saya punya pertanyaan dari sebelumnya tentang -
adalah adalah musim gugur 2010 -
Quiz 1, mari kita menarik -
pertanyaan ini pada tumpukan dan antrian, yang kami menghabiskan sedikit adil waktu
bicarakan dalam kuliah, bahkan meskipun kami tidak benar-benar
pernah memukulnya di bagian.
Jadi pertanyaan ini memberikan Anda seri perintah dan meminta Anda apa yang
akan dicetak dalam kasus ini.
Jadi ini adalah pertanyaan yang benar-benar masuk akal yang dapat diminta dari Anda
guys, dan kemudian kalian harus bisa menjawabnya.
>> Jadi kenapa tidak Anda melihat selama 30 detik, dan kemudian jika ada yang ingin
mengusulkan jawaban kepada saya, dan maka kita akan berjalan melalui itu.
Baiklah, yang memiliki jawaban untuk pertanyaan 27?
Ya.
>> AUDIENCE: Apakah 1, 2, 3, 3?
>> JASON Hirschhorn: Itu benar.
27 adalah 1, 2, 3, 3.
Jadi mari kita lihat bagaimana kita punya itu.
>> Pertama, kita katakan, jika s adalah antrian, apa yang akan dicetak?
Jadi q adalah pertama, keluar pertama.
Kita telah melihat itu sebelumnya.
Kami melihat gambar dari orang-orang menunggu di Apple
Menyimpan untuk membeli beberapa produk.
Orang-orang pertama di yang orang pertama keluar.
Hal pertama dalam antrian adalah hal pertama keluar.
>> Jadi jika kita mendorong sesuatu ke dalam antrian, Anda menekan 1, maka kita pop 1.
Pop hanya berarti mengambil.
Dalam hal ini, hanya mengambil sesuatu.
Kami mengambil yang pertama hal, itu adalah 1.
Jadi kita akan meletakkan segala sesuatu yang kita mencetak turun di sini.
Ini tidak lagi dalam antrian kami.
>> Kemudian kita dorong pada 2 dan 3, dan kita pop dari hal pertama.
Sekali lagi, karena antrian.
Jadi kita mendapatkan 2, maka kita pasang di lain 3 dan memanggil pop lagi.
3 kami pertama.
>> Dan kemudian kami memiliki sejumlah besar hal-hal lain dan panggilan pop.
Tapi sekali lagi, karena ini adalah antrian, pertama, keluar pertama.
Kami mengambil hal pertama yang pernah menaruh masuk
Itu 3 kami.
Dan, dalam hal ini, kita tidak khawatir tentang semua hal-hal lain.
Jadi itu jika ini adalah antrian.
Setiap pertanyaan tentang antrian?
>> Sebuah tumpukan yang berbeda.
Apa singkatan yang kita miliki untuk memahami stack?
>> AUDIENCE: Terakhir, keluar pertama.
>> JASON Hirschhorn: LIFO, saya pikir.
Terakhir, keluar pertama.
Jadi kita melihat contoh stack dari nampan di ruang makan.
Apapun tray di atas digendong.
Dan kemudian jika nampan baru datang dalam, mereka bisa diletakkan di atas.
Dan kemudian apa yang ada di top digendong.
Jadi mereka nampan di bawah kekuatan tinggal di sana untuk sementara.
>> Dalam hal ini, sekali lagi, kita akan menarik ini.
Kami mendorong pada satu, jadi satu adalah di baris pertama.
Dan kami pop sesuatu dari.
Dan hanya ada satu hal yang ada di sana, jadi kami bergerak 1 di sini.
Kemudian kami memakai 2 dan 3 dan kita pop sesuatu dari.
>> Tapi sekali lagi, karena ini adalah antrian -
atau ini adalah stack, agak -
kita mengambil apa pun yang ada di terakhir.
Apapun yang di terakhir keluar pertama.
Dan 3 adalah di terakhir.
Jadi kita menempatkan 3 di sana, kemudian kami memakai 3 lain dan kami
pop sesuatu lagi.
Akhirnya, kita pasang di 4, 5, 6, dan 7, dan di sini kita pop.
Dan karena itu setumpuk, kita mengambil apa pun yang dimasukkan ke dalam lalu dan menulis
yang turun di sini.
Jadi kita berakhir dengan 1, 3, 3, 7.
Apakah ada yang memiliki pertanyaan tentang tumpukan atau antrian, atau contoh ini?
>> OK.
Mari kita kembali ke daftar topik.
Bukan seperti itu, cara ini.
Apa pertanyaan lain yang orang miliki?
>> AUDIENCE: Saya tidak tahu betapa pentingnya ini, tapi aku bingung oleh
perbedaan antara berbagai jenis bahasa seperti markup, disusun,
diinterpretasikan.
>> JASON Hirschhorn: Itu pertanyaan yang bagus.
Saya pikir itu agak penting, jadi mari kita pergi dengan cepat.
Bahasa besar yang telah kita lihat sejauh ini C, PHP, dan JavaScript, dalam hal
dari bahasa pemrograman.
HTML, seperti yang Anda sebutkan, tidak bahasa pemrograman.
Ini adalah bahasa markup.
Dan kemudian kita memiliki CSS, yang juga bukan bahasa pemrograman.
>> Kami juga telah melihat SQL, yang tidak bahasa pemrograman baik.
Jadi SQL memungkinkan Anda untuk menulis query untuk database.
HTML adalah bahasa markup.
Ini mendefinisikan bagaimana hal-hal yang terstruktur.
Dan CSS memungkinkan Anda untuk gaya hal.
Itu mungkin sejauh untuk apa yang Anda perlu tahu tentang ketiga.
Tapi lebih menarik untuk angka keluar perbedaan antara C, PHP,
dan JavaScript.
>> Jadi salah satu perbedaan terbesar, seperti yang Anda sebutkan, adalah bagaimana mereka
dikompilasi, atau apa pun setara adalah.
Jadi C dikompilasi.
Kami akan selalu menjalankan kompiler.
Dan kemudian di mana kesalahan Anda ketika Anda menjalankan kompiler C?
Di mana itu menunjukkan Dalam kode kesalahan Anda?
Bagaimana Anda tahu ada sebuah kesalahan dalam kode Anda di C?
>> AUDIENCE: Ini menunjukkan bahwa Anda di terminal.
>> JASON Hirschhorn: Ini menunjukkan bahwa Anda dalam terminal sebagai Anda kompilasi.
Dan jika ada kesalahan, itu tidak akan benar-benar compile.
Jadi, Anda tahu bahwa ada kesalahan yang tepat pergi, depan waktu, sebelum Anda
bahkan menjalankan kode Anda.
>> Tentu saja, Anda mungkin menjalankan kode Anda dan mendapatkan kesalahan segmentasi, tapi itu
mungkin karena yang Anda lakukan beberapa logika konyol hal.
Tapi kode Anda dengan teknis semua benar dan bisa berlari.
Jadi mendapat kode C disusun sebelumnya.
Bagaimana dengan kode PHP?
Dimana kesalahan dalam kode PHP Anda?
Bagaimana Anda tahu bahwa Anda memiliki kesalahan dalam kode PHP Anda?
>> AUDIENCE: Jalankan waktu?
>> JASON Hirschhorn: Ya, ketika Anda akan menjalankannya, Anda akan menjalankan
Kode PHP di belakang.
Dan kemudian Anda akan menampilkan layar.
Anda mungkin melihat beberapa hal di atas, tapi kemudian Anda akan melihat, seperti, beberapa
oranye, meja jelek.
Dan itu akan memberi Anda nomor baris dan katakanlah, bla, bla, bla, hal ini
tidak bekerja.
>> Jadi PHP ditafsirkan baris demi baris dan dieksekusi di server.
Dan kemudian hasilnya adalah dikirim ke Anda.
Besar.
Dieksekusi di garis server dengan baris dan kemudian dikirim ke Anda.
Dan jika ada kesalahan, itu akan mengirim Anda kesalahan, tetapi Anda mungkin memiliki
mendapatkan beberapa hal dari waktu ke depan.
Jadi sebagian mungkin telah bekerja, tapi kemudian, beberapa hal mungkin tidak memiliki
tidak bekerja.
>> Bagaimana dengan JavaScript?
Di mana Anda melihat kesalahan JavaScript?
Dalam p set 8, ketika Anda mendapat kesalahan, bagaimana kau tahu?
Di mana ia akan muncul?
>> AUDIENCE: Pada konsol, di bagian bawah.
>> JASON Hirschhorn: Dalam konsol, di bagian bawah.
Ini juga akan memberi Anda nomor baris, dan itu akan
muncul di bagian bawah.
Dan JavaScript tidak dieksekusi pada server.
JavaScript dikirim ke komputer Anda, dan kemudian ketika sudah waktunya untuk menjalankan
JavaScript, JavaScript adalah menjalankan baris demi baris pada
client, di sisi Anda.
Bukan server, sisi client.
>> Dan juga, itu menjalankan baris demi baris.
Dan kemudian ketika Anda akan mendapatkan error, itu akan muncul di bagian bawah.
Demikian pula untuk PHP, beberapa di antaranya mungkin mengeksekusi, dan kemudian Anda mungkin mendapatkan
kesalahan di kemudian hari.
>> Juga, tidak seperti PHP sedikit, jika Anda punya kesalahan JavaScript -
mengatakan Anda tidak melakukan yang benar kode untuk kotak peringatan -
Anda bisa tetap menjalankan program Anda.
Kotak peringatan tidak akan bekerja, tetapi Program Anda akan baik-baik saja.
Mungkin saja fungsi yang akan gagal.
>> Jadi ada beberapa yang terbesar perbedaan dalam hal bagaimana
bahasa, atau bagaimana kode pemrograman Anda menulis benar-benar dievaluasi.
Ada juga perbedaan lain dalam hal - perbedaan terbesar
yang kami lihat dalam hal variabel dalam bahasa yang berbeda.
Jadi siapa pun bisa memberi saya perbedaan antara variabel
dalam tiga bahasa?
Ya.
>> AUDIENCE: Dalam C, mereka ketat diketik.
Dalam dua lainnya, mereka longgar diketik.
>> JASON Hirschhorn: Dan apa artinya?
>> AUDIENCE: Bahwa di C, Anda harus menyatakan jenis variabel ketika
Anda mendeklarasikan variabel, seperti interbool atau arang.
>> JASON Hirschhorn: Excellent.
Dalam C, kita selalu harus meletakkan jenis variabel.
Dan kita tidak bisa benar-benar mencampur jenis.
Anda tidak bisa melakukan integer ditambah string.
Tapi seperti yang kita lihat dalam ini lain bahasa, Anda benar-benar dapat mencampur jenis,
dan Anda tidak pernah benar-benar harus memberikan sesuatu tipe, pernah.
>> Jadi bagaimana kita tahu hal-hal yang variabel di PHP dan JavaScript?
>> AUDIENCE: Dalam PHP, mereka mulai dengan tanda dolar.
Dalam JavaScript, ketika Anda menyatakan mereka, Anda harus memiliki sebuah bar.
>> JASON Hirschhorn: Benar.
Jadi di PHP, mereka mulai dengan tanda dolar.
Dalam JavaScript, mereka harus memiliki bar, meskipun kadang-kadang mereka tidak benar-benar
harus memiliki bar.
Tapi itu benar.
>> Jadi itulah perbedaan besar antara variabel.
Saya pikir mereka mungkin, dari atas kepalaku, kedua terbesar
perbedaan antara tiga bahasa.
Tapi, yeah.
>> AUDIENCE: Dan ruang lingkup variabel C terbatas pada kurung kurawal,
di mana yang lain, itu hanya seperti, mati jika dalam fungsi saja,
tetapi jika tidak, ini kan -
>> JASON Hirschhorn: Benar.
Jadi lingkup sedikit berbeda dalam C. Sebagai Anda ingat, kurung kurawal mendefinisikan
ruang lingkup variabel.
Jadi jika didefinisikan dalam sebuah jika kondisi, yang ada di dalam untuk loop,
variabel hanya ada di sana.
>> Dalam JavaScript, jika variabel didefinisikan dalam sebuah jika kondisi -
dalam untuk loop - itu akan ada untuk fungsi itu, tapi tidak akan ada
di luar fungsi tersebut.
Jadi lingkup adalah sedikit lebih fleksibel dalam JavaScript dan PHP.
Itu menjawab pertanyaan?
OK, pertanyaan lain?
Kita bisa melakukan empat menit lagi pertanyaan, kemudian
kita akan melompat ke coding.
>> AUDIENCE: Bisakah kita pergi ke Ajax dan berbicara tentang apa itu?
>> JASON Hirschhorn: Bicaralah dengan Avi setelah.
Dia menanyakan pertanyaan itu sebelumnya.
>> AUDIENCE: Saya buruk.
>> JASON Hirschhorn: Jangan khawatir.
>> AUDIENCE: Apa sebenarnya JSON?
>> JASON Hirschhorn: Apa itu JSON?
Apa pertanyaanmu?
>> AUDIENCE: Hanya benar-benar cepat, perbedaan antara
cetak dan gema di PHP.
>> JASON Hirschhorn: Mengapa kau tidak google perbedaan antara cetak dan gema?
Sedikit perbedaan.
Tidak begitu besar dari kesepakatan.
Tapi Anda pasti harus google it, dan yang akan memberi Anda jawaban yang baik.
>> JSON, mungkin lebih besar dari kesepakatan.
Singkatan JavaScript Object Notation.
Dan ketika telah kita lihat JSON yang digunakan?
Bila Anda telah melihat -
kenapa kau bahkan tahu kata JSON?
Bila Anda telah melihatnya?
>> AUDIENCE: Ketika kami sedang bersiap harga saham untuk keuangan.
>> JASON Hirschhorn: Jadi Anda melihat ketika Anda mendapatkan
harga saham untuk keuangan.
Dan kenapa kau melihatnya?
>> AUDIENCE: Ketika kami mengambil semua informasi yang
datang dalam format tersebut.
>> JASON Hirschhorn: Jadi, Anda akan mendapatkan -
ya.
Silakan.
>> AUDIENCE: [Tak terdengar] Informasi dari sebuah objek?
>> JASON Hirschhorn: Kedua orang mengumpulkan adalah jawabannya
kita cari.
Anda ingin informasi dari webpage lain ini.
Dan Anda akan berharap bahwa ketika Anda mendapatkan informasi itu, akan
disajikan kepada Anda dalam beberapa jenis format standar.
>> Semua orang mungkin akrab dengan nilai-nilai dipisahkan koma.
Anda dapat mengekspor spreadsheet Excel atau jenis spreadsheet sebagai daftar
comma-separated.
Dan koma membagi semua bidang yang berbeda.
JavaScript Object Notation -
JSON -
adalah jenis lain dari standar tata letak hal.
Dan itu sering bagaimana kita mengambil informasi dari permintaan Ajax kami.
>> Jadi dalam hal ini, kami mendapatkannya dari situs Yahoo.
Mereka kembali hal yang kita dalam sebuah objek JSON.
Dan kemudian kita tahu, karena itu standar, apa itu
akan terlihat seperti.
Jadi kita bisa iterate melalui array yang dikembalikan kepada kami, array
benda-benda yang dikembalikan kepada kami.
>> Kita mungkin perlu tahu kunci, tetapi mereka umumnya memberikan
dokumentasi di website ketika Anda mengambil beberapa JSON
notasi untuk mereka.
Demikian juga, Anda dapat JSON mengkodekan suatu objek.
Jadi ada fungsi JSON menggarisbawahi encode.
Dan sehingga Anda dapat mengambil sebuah benda yang Anda buat, JSON encode, dan
menyebarkannya ke sesuatu lain, jika Anda ingin.
Dan JSON decode juga ada untuk tujuan yang sama, atau untuk
tujuan yang berlawanan.
>> AUDIENCE: Apakah kita perlu tahu coding untuk tabel hash dan mencoba?
Atau apakah kita hanya perlu memahami bagaimana mereka digunakan, secara konseptual?
>> JASON Hirschhorn: Jadi, angkat tangan jika Anda melakukan tabel hash untuk p set 4
dengan daftar link.
Atau p set 5.
Jadi itu sebagian besar orang.
P set 5, 6, siapa tahu.
Sebuah waktu yang lama.
>> Jadi sebagian besar yang Anda lakukan hash tabel dengan daftar link.
Dan karena itu mungkin lebih pendekatan umum, dan karena kita menghabiskan
banyak waktu melakukan daftar link dan hash tabel, Anda mungkin harus
cukup akrab dengan bagaimana kode tabel hash dan daftar link.
>> Dan jika Anda berpikir kembali untuk masalah tersebut mengatur, itu tidak benar-benar
sekeras yang Anda harapkan.
Dan ada banyak kurang kode dari yang Anda harapkan.
Aku akan mengatakan Anda harus tahu bagaimana kode tabel hash atau daftar link.
Bukan berarti Anda akan meminta agar, tentu, tapi Anda harus
tentu tahu bahwa.
>> Juga, jika Anda melihat melalui kuis masa lalu, ada banyak
pertanyaan tentang menulis fungsi pada daftar link atau daftar doubly-linked.
Yang tampaknya datang setiap tahun.
Masukkan kanan pada daftar link, kanan menghapus dari daftar link, kanan menyisipkan
untuk doubly-linked, dan sebagainya.
Sehingga, saya merasa cukup nyaman mengatakan Anda harus tahu itu.
>> Untuk mencoba, saya akan mengatakan Anda harus pasti tahu cara kerjanya, dan mungkin
memberikan beberapa pseudocode untuk bagaimana kode itu dan memasangnya.
Tapi itu tidak akan menjadi hal terburuk dalam dunia jika Anda tidak tahu bagaimana
kode itu di C. Ini akan menjadi besar jika Anda tahu bagaimana kode dalam C, tapi saya pikir
mungkin pseudocode untuk mencoba akan menjadi yang paling Anda butuhkan
tahu untuk mencoba.
>> AUDIENCE: Extra kredit?
>> JASON Hirschhorn: Dan sama dengan, jika kita masuk ke pohon pencarian biner, Anda mungkin
perlu - dan Anda telah melihat di masa lalu, kami telah melakukan banyak - Anda tahu bagaimana
pohon pencarian biner bekerja.
Anda mungkin harus dapat menetapkannya dalam kode semu.
Namun karena sebagian besar orang tidak melakukan itu pada masalah
set, saya akan mengatakan itu mungkin kurang penting bahwa Anda tahu bagaimana kode
dan mendirikan sebuah pohon seperti itu.
>> Ada pertanyaan lain?
Juga, kita dapat meminta mereka sepanjang seperti yang kita pergi melalui beberapa masalah.
OK, kita akan melanjutkan.
Loncat slide yang untuk saat ini.
>> Berbicara tentang pohon, yang adalah yang pertama pertanyaan yang saya miliki untuk kalian.
Karena ini adalah masalah.
Aku akan mengatakan itu sangat mungkin Anda akan mendapatkan masalah seperti ini di kuis
meminta Anda untuk kode beberapa jenis insert, menghapus, mencari, untuk satu jenis
struktur data yang telah kita lihat.
>> Yang muncul setiap tahun dan kami menghabiskan banyak waktu paruh kedua ini
semester akan lebih dari tipe data ini.
Jadi sekarang, saya telah menetapkan node dalam pohon pencarian biner.
Dan apa yang saya ingin Anda lakukan adalah diberikan pohon pencarian biner yang dimulai
di akar bintang node, menyelesaikan pelaksanaan fungsi di bawah ini,
yang terjadi menjadi fungsi find.
Dan melakukannya dengan dan tanpa recursions.
>> Jadi saya ingin Anda untuk menulis dua fungsi.
Satu melakukan ini dengan rekursi, satu melakukan hal ini tanpa rekursi.
Dan jangan menganggap bahwa root akan menjadi non-null.
Jadi kita mencari integer i di pohon mulai dari akar, dan kita perlu
untuk menulis ini secara rekursif dan iteratif.
Ya.
>> AUDIENCE: Jadi Anda ingin kami untuk kembali benar jika kita menemukan itu, dan false jika kita
tidak menemukannya.
>> JASON Hirschhorn: Bagaimana kau tahu?
Bagaimana kau tahu itu?
>> AUDIENCE: Aku bertanya pertama, tapi aku dengan asumsi, karena mengatakan bool di
awal fungsi.
>> JASON Hirschhorn: Benar.
Ia mengatakan bool, jadi saya bahkan tidak perlu memberitahu Anda apa yang saya harapkan Anda untuk kembali
karena ia berkata di sana.
Tapi itu benar.
Kembali, benar atau salah.
>> Jadi sebelum Anda mulai, saya akan merekomendasikan, jika Anda tidak terbiasa dengan
pohon pencarian biner, cepat menggambar gambar itu untuk mendapatkan Anda
pemahaman, benar.
Itu juga akan membantu Anda saat menulis kode Anda dan memeriksa itu.
Sekali lagi, Anda juga tidak memiliki banyak waktu pada kuis untuk melakukan semua hal yang
bahwa kami meminta Anda untuk melakukan.
Jadi menulis pseudo code sangat membantu.
>> Dan kami biasanya memberikan sekitar -
jika pseudocode adalah sempurna benar, itu
umumnya 50% pada pertanyaan.
Jadi bukan aturan keras dan cepat, tetapi jika Anda hanya menulis pseudocode dan itu
benar, itu umumnya 50%.
Jadi saya akan selalu merekomendasikan -
jika Anda sedang diburu waktu, atau bahkan jika Anda hanya mencoba untuk mencari tahu -
dimulai dengan pseudocode tersebut.
Dan akhirnya, jika Anda bisa menulis ini semua di C, yang akan fantastis.
>> Jadi mari kita mengambil tiga menit untuk bekerja pada program ini.
Dan kemudian kita akan menulis pseudocode untuk sekali saja, dan kemudian
kita akan kode itu secara rekursif dan kemudian iteratif.
>> Jika Anda memiliki pertanyaan, merasa gratis angkat tangan.
Senang untuk berjalan-jalan dan menjawabnya sebelum kita mulai sebagai sebuah kelompok.
>> Mari kita melanjutkan, dan kita akan Pseudocode versi rekursif
ini, dan kemudian kami akan kode itu.
Jadi fungsi rekursif membutuhkan dua hal.
Ini mungkin pertanyaan yang Anda bisa diminta.
Kebutuhan dua hal.
Siapa yang bisa mengangkat tangan mereka dan ceritakan apa dua hal rekursif
Fungsi kebutuhan?
Dengan definisi itu memiliki dua hal.
Apa kedua hal itu?
Tangan baru.
Ya, Alden.
>> AUDIENCE: Jadi saya tidak benar-benar yakin apakah ini adalah terminologi, tapi -
>> JASON Hirschhorn: Aku senang Anda mengangkat tangan Anda.
>> AUDIENCE: Perlu kasus dasar, dan perlu langkah rekursif.
>> JASON Hirschhorn: Sempurna.
Perlu kasus dasar dan langkah rekursif.
Jadi apa kasus kami dasar di sini?
>> AUDIENCE: F akar sama sama null.
Maaf, hanya dalam pseudocode, jika itu null.
Jika akar adalah null.
>> JASON Hirschhorn: Jika akar adalah null.
Itu sangat baik.
Itu kasus dasar kami.
Itulah yang akan kita untuk memeriksa setiap kali.
Dan kasus dasar adalah Hal pertama yang Anda lakukan.
Jika Anda menekan kasus dasar, Anda sudah selesai.
>> Sekarang kita perlu panggilan rekursif kami, dan aku akan berani bertaruh kita perlu beberapa
rekursif panggilan di sini.
Karena itu pohon, dan kami bisa pergi beberapa cara.
Jadi, jika akar adalah null, kita baik.
>> Apa yang Anda usulkan?
Dan sekarang aku akan mulai memanggil pada kalian, karena aku tahu kalian
semua tahu ini.
Tapi Annie, apa yang harus baris berikutnya akan?
Bagaimana jika kami menemukan itu?
Apa yang kita lakukan?
>> AUDIENCE: Jika kami menemukan itu?
>> JASON Hirschhorn: Atau apa harus itu -
beri saya pseudocode untuk baris di mana kami menemukan itu.
>> AUDIENCE: Jika saya sama dengan akar i?
>> JASON Hirschhorn: Dan maka apa yang kita lakukan?
>> AUDIENCE: Kembali benar.
>> JASON Hirschhorn: Great.
Jadi jika saya adalah i -
oh, mereka berdua disebut i.
Itu akan membingungkan.
Tetapi jika saya adalah saya kembali benar.
Itu mungkin berikutnya hal yang harus kita lakukan.
Masuk akal.
>> OK, sekarang kita tidak melakukan rekursif kami panggilan belum, meskipun, karena rekursif suatu
panggilan akan memanggil fungsi ini lagi.
Jadi apa yang harus berikutnya baris pseudocode menjadi?
Anna.
>> AUDIENCE: Sisi kiri.
>> JASON Hirschhorn: Jadilah spesifik, meskipun.
Ini adalah pohon pencarian biner, jadi apa tidak memeriksa sisi kiri memerlukan?
>> AUDIENCE: Jadi node -
Maafkan aku, akar.
Dan kemudian panah kiri.
Node, simpul, maaf.
Saya tidak membaca dengan benar.
Ini disebut node, kan?
>> JASON Hirschhorn: Ini akan disebut akar dalam fungsi itu, tapi cara baik.
Sisi kiri - ya?
>> AUDIENCE: Jika tidak sama i, maka kita akan memanggil
fungsi lagi?
>> JASON Hirschhorn: Itu benar.
Jika tidak sama i, kita akan untuk memanggil fungsi lagi.
Tapi apa sisi pohon yang akan kita untuk memanggil fungsi lagi?
>> AUDIENCE: Di sisi kiri.
>> JASON Hirschhorn: Kami tidak selalu akan menyebutnya kiri, jika
tidak sama itu.
>> AUDIENCE: Oh, maaf.
Panggilan di sebelah kanan.
>> JASON Hirschhorn: Kami ingin tahu khusus, meskipun - ingat, dalam
pohon pencarian biner, segalanya untuk sisi kiri lebih kecil.
Semuanya ke kanan sisi yang lebih besar.
Jadi itu hanya tidak - ya, silakan.
>> AUDIENCE: Jika kurang dari i, kemudian -
jika itu di sebelah kiri -
>> JASON Hirschhorn: Jadi jika ri kurang dari -
jadi jika jumlah kami kurang dari i, sisi apa yang kita ingin pergi ke?
>> AUDIENCE: Kami ingin pergi ke sisi kanan.
>> JASON Hirschhorn: Kami ingin pergi -
biarkan aku menggambar pohon cepat.
Jika ini adalah 5, ini akan menjadi 3.
Jadi jika ri adalah kurang dari lima, apa sisi kita ingin pergi ke?
>> AUDIENCE: Maaf, apa?
>> JASON Hirschhorn: Nomor kami adalah kurang dari jumlah kita
melihat sekarang.
>> AUDIENCE: Oh, maka kita ingin untuk pergi ke sisi kiri.
Ya.
Maaf.
>> JASON Hirschhorn: Tepat.
Jangan khawatir.
Dalam biner pohon pencarian, segala sesuatu lebih rendah ke kiri,
lebih besar adalah ke kanan.
Jadi, jika jumlah kami kurang dari i kami memeriksa -
karena yang Anda lihat dalam node, ia memiliki i -
maka Anda ingin pergi ke kiri.
>> Dan ini adalah mudah.
Apa itu jalur lain dari pseudocode kita perlu menulis?
Carlos?
>> AUDIENCE: Hal yang sama, Anda hanya beralih untuk lebih besar dari tanda
dan pergi ke kanan.
>> JASON Hirschhorn: Dapatkah Anda mengatakan sekali lagi?
>> AUDIENCE: Jika nomor kami lebih besar dari saya, pergi ke kanan.
>> JASON Hirschhorn: Excellent job pada pseudocode tersebut.
Mari kita melakukan ini dalam kode nyata.
Dan lagi, pseudocode ini akan mungkin membuat Anda, karena itu
benar, 50% untuk pertanyaan ini.
Tapi pseudocode ini juga menerjemahkan salah satu satu, pada dasarnya, ke dalam kode.
>> Jadi mari kita melakukan ini di C. Siapa yang bisa memberikan saya baris pertama dari kode?
Sebenarnya, pertama, sebelum saya lakukan itu, biarkan aku menepi -
>> AUDIENCE: Saya punya pertanyaan.
Mengapa Anda indent baris yang kuberikan padamu?
>> JASON Hirschhorn: Karena Aku tidak bisa menulis.
Saya tidak tahu.
Kau benar.
Kalimat itu harus di sana.
>> OK, di sini adalah fungsi kita.
Dan biarkan aku menepi, juga, definisi kita tentang node.
Apa yang terjadi jika kita tidak menulis typedef?
Apakah ada yang tahu?
>> AUDIENCE: Itu tidak akan dikompilasi.
>> JASON Hirschhorn: Ini akan kompilasi, yeah.
>> AUDIENCE: Apakah itu hanya menyatakan satu Misalnya bukannya membuatnya menjadi baru
ketik Anda bisa menyatakan beberapa contoh?
>> JASON Hirschhorn: Jadi itu tidak akan tahu - itu tidak akan
hanya menyatakan satu jenis.
Anda masih bisa membuat banyak node.
>> AUDIENCE: Tapi bukankah kita harus menulis struct simpul setiap kali?
>> JASON Hirschhorn: Itu benar.
Anda harus menulis struct simpul setiap kali, bukan hanya simpul.
Tapi dengan typedef, Anda hanya dapat menulis node setiap saat.
OK, yang belum memberikan - yeah, Avica.
>> AUDIENCE: Jika akar sama dengan equals null, kembali palsu.
>> JASON Hirschhorn: besar, dan itu kasus dasar kami.
Baris berikutnya kode.
Seseorang yang belum memberikan saya baris kode belum?
Ya.
>> AUDIENCE: Akar panah i sama sama dengan i.
Kemudian kembali benar.
>> JASON Hirschhorn: Great.
Baris berikutnya?
Ya.
Orang lain?
Dan kemudian Anda bisa pergi berikutnya.
>> AUDIENCE: Lain jika akar panah i kurang dari aku kembali
fungsi yang disebut menemukan akar -
>> JASON Hirschhorn: Maaf.
>> AUDIENCE: Kembali find akar menunjuk ke kiri koma i.
>> JASON Hirschhorn: Jadi jika ri lebih besar dari hal di pohon, kita ingin
pergi ke kiri?
>> AUDIENCE: Tidak, saya punya beralih.
>> JASON Hirschhorn: Yang mana?
>> AUDIENCE: Tidak, ya.
Saya memiliki kurang dari tanda di sana.
>> JASON Hirschhorn: Benar, jika ri kurang dari apa yang ada di akar -
akar kami saat ini - maka kita ingin pergi ke kiri.
Dan apa baris terakhir, Anda?
>> AUDIENCE: Pada dasarnya hal yang sama, kecuali beralih lebih besar dari atau
sama dengan kurang dari dan kiri ke kanan.
>> JASON Hirschhorn: Excellent.
Apakah Ada yang punya pertanyaan tentang hal ini?
Jadi beberapa hal lain yang akan telah benar adalah bahwa
bisa menjadi-ltiff.
Guess, secara teknis, tidak ada yang benar-benar juga harus-ltiff.
>> Juga, mungkin ada hanya satu kasus di sini.
Jadi itu mungkin kasus terakhir Anda.
Anda bahkan tidak perlu itu-ltiff.
Tapi mungkin baik untuk menulis itu, harus jelas.
Ya.
>> AUDIENCE: Jadi Anda tidak berpikir kuis - jika kita membuat kesalahan, misalnya,
dalam sintaks -
kesalahan sintaks sedikit -
bagaimana yang bisa diambil dalam kuis?
>> JASON Hirschhorn: Umumnya pada kuis, kecil kesalahan sintaks atau kecil
kesalahan gaya tidak kehilangan Anda poin.
Jadi jika Anda lupa titik koma di sini, itu akan OK.
Jika Anda lupa untuk menutup kurung ini, yang akan OK.
>> Kesalahan sintaks besar yang mengubah makna fungsional dari kode Anda
secara dramatis, Anda mungkin mendapatkan diambil dari poin untuk.
Atau secara umum, hanya kadar Anda pada apakah atau tidak Anda
fungsi kode, bahkan -
bukan desain yang begitu banyak, dan tidak gaya.
>> Mari kita sekarang kode yang berulang-ulang versi find.
Jadi itu akan menjadi sangat mirip, tetapi ada tentu akan menjadi
beberapa perbedaan penting.
Namun, pseudocode kami mungkin bisa pergi -
kita masih dapat mengambil satu baris dari pseudocode dan mencari tahu apa yang
baris dalam hal ini.
>> Jadi dalam versi berulang, apa Menurut Anda, Julia, harus
menjadi baris pertama?
>> AUDIENCE: Sekali lagi, dalam boolean berulang, Anda perlu mengatur untuk loop, kan?
>> JASON Hirschhorn: OK.
>> AUDIENCE: Jadi untuk seperti, k, untuk x sama dengan 0, x kurang dari i.
Atau tidak, x kurang dari ukuran pohon.
>> JASON Hirschhorn: Pohon.
Jadi kami tidak benar-benar tahu ukuran pohon, dan kita tidak benar-benar tahu
berapa kali kita bisa pergi, jadi apa yang berbagai jenis loop yang mungkin
baik dalam hal ini?
>> AUDIENCE: Jika yang lain?
>> JASON Hirschhorn: Jika lain tidak bisa menjadi satu lingkaran.
Jadi apa jenis loop kita hanya bisa pergi sampai beberapa kasus terpenuhi?
Apa saja jenis lain dari lingkaran di C selain untuk loop?
>> AUDIENCE: Sementara.
>> JASON Hirschhorn: Sementara, tepatnya.
Dalam beberapa saat loop, jangan perlu tahu bagaimana -
loop sementara dan untuk loop dapat melakukan hal yang sama persis, tetapi hal yang menyenangkan
sekitar loop sementara adalah kita tidak perlu untuk mengetahui seberapa besar pohon kita.
Jadi kita akan pergi sampai apa?
>> AUDIENCE: Sampai sama ukuran -
>> JASON Hirschhorn: Yah, itu sangat mirip dengan kasus rekursif kami.
Jadi -
>> AUDIENCE: Sementara akar i tidak sama i.
>> JASON Hirschhorn: Itu benar-benar dekat.
Sementara akar i -
mari kita coba.
Saya tidak berpikir [Tak terdengar]
dimana akar i tidak sama dengan i.
Kita mungkin perlu mengubahnya dalam sedikit bit, tapi yang terdengar seperti itu cukup
baik, untuk saat ini.
Jadi kita akan melakukan itu.
>> Juga, ingat, kita tidak bisa berasumsi per pertanyaan.
Anda tidak menganggap bahwa root akan menjadi non-null.
Jadi apa yang Anda pikir sangat Hal pertama yang harus kita lakukan adalah?
>> AUDIENCE: Hanya melakukan hal yang sama hal seperti sebelumnya.
Jika akar sama dengan equals null, kembali palsu.
>> JASON Hirschhorn: Great.
Sehingga bisa null.
Jadi kita ingin menyingkirkan itu segera.
Dan kemudian kita akan memeriksa apakah akar i tidak i tidak sama.
Jadi, katakanlah kita sedang mencari di pohon ini 3, akar i tidak sama i, sekarang
kita berada di loop sementara kami.
Apa yang ingin kita lakukan?
Dan lagi, itu akan menjadi cukup mirip dengan versi rekursif kami.
Ya.
>> AUDIENCE: Jadi Anda ingin iterate, atau terus turun pohon selama
root tidak sama dengan nol.
>> JASON Hirschhorn: Selama akar tidak sama dengan nol?
>> AUDIENCE: Akar dasbor i tidak sama dengan nol.
Hanya root, yeah.
Sebagai Selama akar adalah tidak sama dengan nol.
>> JASON Hirschhorn: Jadi, Anda ingin untuk mengubah ini menjadi akar
tidak nol tidak sama?
>> AUDIENCE: Ya.
>> AUDIENCE: Kita bisa menggabungkan ini, kan?
Kita tidak perlu jika, pada awalnya.
>> JASON Hirschhorn: OK, jadi jika kita tidak -
jika kita menggabungkan mereka, jadi kita akan melakukan sedangkan akar tidak nol tidak sama, dan
jika akar terjadi menjadi nol pada awal, apa yang kita lakukan di sini?
>> AUDIENCE: Kembali palsu.
>> JASON Hirschhorn: Great.
Jadi kedua-duanya mungkin akan bekerja.
Ini adalah cara yang berbeda, dan ini menggabungkan itu.
Tetapi sekali lagi, jika Anda melakukan cara baik, kami tidak akan lepas landas desain
menunjuk pada kuis.
Tapi ini terlihat baik.
>> Jadi sementara akar tidak sama dengan null, apa yang pertama
hal yang kita ingin memeriksa?
Orang lain?
Null, apa hal pertama?
>> AUDIENCE: Jika ri kurang dari -
oh, saya kira, jika kita sudah menemukannya di root.
Jadi, jika akar panah i adalah sama dengan i -
>> JASON Hirschhorn: Maaf?
>> AUDIENCE: Jika akar panah i sama sama i -
>> JASON Hirschhorn: Apa yang kita lakukan?
>> AUDIENCE: Kembali benar.
>> JASON Hirschhorn: Great.
Dan apa yang berikutnya?
Jeff, apa baris berikutnya kode?
>> AUDIENCE: Jika saya kurang dari akar panah i, maka akar sama dengan akar panah kiri.
>> JASON Hirschhorn: Akar equals akar panah kiri.
Jadi itu mungkin yang terbesar perbedaan di sini dalam hal ini berulang-ulang
versi menentang versi rekursif.
Versi rekursif, kita memanggil fungsi lagi.
Kami akan memperbarui root ketika kita sebut fungsi baru.
Di sini kita tidak memanggil fungsi baru.
Kami hanya hanya memperbarui akar dalam fungsi ini.
Itu sangat baik.
Dan apa baris terakhir kode?
Ya, Mario?
>> AUDIENCE: equals akar Lain akar panah kanan.
>> JASON Hirschhorn: Maaf?
>> Equals Akar: AUDIENCE akar panah kanan.
>> JASON Hirschhorn: Bisakah Anda juga menulis sesuatu seperti ini?
>> AUDIENCE: Saya tidak tahu.
>> JASON Hirschhorn: Anda tidak bisa.
Anda tidak dapat melakukan sama dengan plus.
OK, jadi ini terlihat baik.
Mengapa kita tidak hanya melakukan itu untuk membersihkannya.
Hal ini tampak hebat, dan ini akan bekerja.
Dan kita akan pecah.
>> Jika kiri akar adalah nol atau akar yang tepat adalah nol, kita akan datang ke sini.
Akar akan sama dengan nol.
Kami akan keluar dari lingkaran kami, dan kami akan kembali palsu.
Jadi ketika kita keluar dari lingkaran, kita kembali palsu.
>> Dan lagi, sementara loop yang sempurna di sini karena kita tidak tahu bagaimana
besar pohon kami.
Kami mencoba untuk menulis untuk loop, tapi kami menyadari bahwa Anda harus mencari tahu bagaimana
besar itu sebelumnya.
Ya.
>> AUDIENCE: Jika hal ini tidak biner pohon pencarian, itu akan menjadi nyata matematika-y
untuk menulis iteratif, kan?
Seperti, apakah itu pohon, tetapi tidak harus -
jadi itu tidak semua kecil di sebelah kiri, dan semua yang lebih besar di sebelah kanan.
Ini akan sangat sulit untuk beralih di atas, kan?
Kita harus menyelamatkan apa yang sebelumnya di dalam pohon dan kembali,
dan hal-hal seperti itu.
>> JASON Hirschhorn: Kalau bukan biner pohon pencarian, jika itu hanya
pohon dan hal-hal yang tidak diurutkan seperti ini -
dan kami menyadari sebelumnya ketika Anna membantu kami yang membuat
disortir membantu kita banyak -
kita perlu, ya, selalu menyimpan di mana kami sebelumnya.
Tapi mungkin ada banyak di mana kita berada previouslys.
Mungkin ada banyak node induk.
>> Mungkin cara terbaik untuk melakukannya akan adalah untuk terus mendorong hal-hal ke beberapa
jenis tumpukan atau antrian.
Anda tidak akan pernah perlu kode ini karena itu adalah masalah yang sulit.
Tapi Anda mendorong beberapa hal ke dalam stack atau antrian dan kemudian pop mereka pergi, dan
kemudian mengevaluasi mereka.
>> Dan kemudian memiliki beberapa hal lain di mana Anda benar-benar menempatkan node, dan
kemudian membuat itu, dan kemudian mencari melalui itu.
Itu mungkin cara terbaik untuk melakukannya.
OK, pertanyaan tentang masalah ini?
>> AUDIENCE: Ini adalah pada catatan terkait.
Apakah kita harus membandingkan run kali untuk tabel hash, biner
pohon pencarian, dan sebagainya?
>> JASON Hirschhorn: Mungkin.
Jadi mari kita lakukan yang benar-benar cepat.
Jalankan waktu untuk tabel hash -
apa yang lainnya?
Pohon biner?
>> AUDIENCE: daftar Link.
>> JASON Hirschhorn: OK, mari kita lakukan insert.
Apa O besar insert pada tabel hash?
Apa asumsi Anda membuat?
>> AUDIENCE: Anda memasukkan di mulai dari daftar link.
>> JASON Hirschhorn: Mungkin yang pertama Asumsi ini tidak ada tabrakan.
Jika tidak ada tabrakan, maka waktu penyisipan adalah satu.
Jika ada tabrakan, dan Anda melakukan chaining terpisah dan memasukkan
pada awal daftar link, maka penyisipan juga konstan.
>> Jika Anda melakukan sebuah tabel hash tetapi Anda memiliki metode yang berbeda untuk menangani
dengan tabrakan, apa metode yang berbeda?
Apa adalah metode yang berbeda berurusan dengan
tabrakan dalam tabel hash?
>> AUDIENCE: pemrograman Linear.
>> JASON Hirschhorn: pemrograman Linear.
Jadi kita akan terus mencari untuk tempat terbuka berikutnya.
Itu bukan waktu penyisipan konstan.
Anda bisa harus melalui seluruh tabel, sehingga
bisa jadi O besar n.
Ya.
>> AUDIENCE: Jika tidak hanya chaining?
>> JASON Hirschhorn: Kami melakukan chaining terpisah.
Itu yang pertama.
Itulah yang daftar link.
Nama mewah adalah chaining terpisah.
Bisa jadi jenis struktur daftar kita kebetulan dilakukan di daftar link.
>> Jadi sekali lagi, penyisipan pada tabel hash bisa menjadi waktu yang konstan.
Bagaimana dengan penyisipan pada antrian stacker?
>> AUDIENCE: Bukankah itu konstan?
>> JASON Hirschhorn: Ini waktu yang konstan.
Kau hanya mendorong pada.
OK.
Penyisipan, apa yang lain?
Pada try?
Apa O besar penyisipan pada mencoba?
>> AUDIENCE: Panjang konstan.
Panjang terpanjang -
panjang kata Anda memasukkan.
>> JASON Hirschhorn: Maaf?
Tunggu, jadi apa yang saya dengar?
Kau bilang - apa yang kau katakan?
Apa jawaban Anda, Marcus?
>> AUDIENCE: Panjang kata Anda memasukkan dalam karakter,
asumsi itu mencoba karakter.
>> JASON Hirschhorn: OK, jadi panjang kata.
Kami akan membuat asumsi bahwa itu adalah string karakter.
Anda mengatakan sesuatu yang berbeda, meskipun.
Kau bilang panjang kata terpanjang.
>> AUDIENCE: Itu hanya konstan, kan?
>> JASON Hirschhorn: Mengapa itu konstan?
>> AUDIENCE: Seperti, jika Anda menggunakan O besar notasi, maka tidak bervariasi berdasarkan
pada beberapa hal yang sudah di coba.
>> JASON Hirschhorn: Jadi kita akan mengatakan itu waktu yang konstan.
Ini adalah penyisipan konstan, dan itu karena ide ini -
mengatakan bahwa kita memiliki kata yang 45, atau kata yang 60, yang
memiliki sejumlah konstan.
Dan itu hanya akan dimasukkan dalam waktu yang konstan.
>> Dalam prakteknya meskipun, itu tidak akan, jelas, terjadi dalam satu milidetik,
misalnya.
Tapi kita akan mengatakan O besar adalah konstan untuk mencoba.
Dan itulah salah satu yang keuntungan terbesar.
>> Bagaimana dengan penyisipan ke dalam link list?
Hanya generik, link list diurutkan?
Ya.
>> AUDIENCE: aku punya pertanyaan.
Pada tes, apakah mereka pernah meminta kita waktu penyisipan itu empat langkah,
atau sesuatu?
Atau itu hanya -
ketika Anda mengatakan waktu penyisipan adalah satu, itu hanya berarti waktu yang konstan?
>> JASON Hirschhorn: Ya, mereka akan selalu bertanya, apakah O besar n?
O Big log n?
N kuadrat konstan.
Mereka benar-benar satu-satunya yang perlu Anda ketahui.
Bagaimana dengan penyisipan ke diurutkan link list?
>> AUDIENCE: aku punya pertanyaan -
pertanyaan -
>> JASON Hirschhorn: Apa jawabannya untuk pertanyaan itu, meskipun?
>> AUDIENCE: Tunggu, apa kau bertanya?
>> JASON Hirschhorn: Apa O besar dimasukkan ke dalam daftar tautan diurutkan?
>> AUDIENCE: One?
Tidak menunggu, ada menunggu, n.
>> JASON Hirschhorn: N. Selain daftar link.
Dan apa pertanyaan Anda?
>> AUDIENCE: Jadi akan Anda menulis o k atau o dari 1 untuk -
>> JASON Hirschhorn: Oh.
Saya akan menulis o dari 1, mungkin.
Ada satu struktur data lainnya yang akan menjadi baik.
Pohon, pohon pencarian biner.
Terdekat penyisipan pada pohon pencarian biner?
>> AUDIENCE: Login.
>> JASON Hirschhorn: Jadi, apa yang terburuk kasus dalam pohon pencarian biner?
Jadi jika kita kebetulan mulai dari 5, dan setiap jumlah lebih besar dari 5, maka
kita punya 5, 7, 9, 11, dan sebagainya.
Dalam hal ini, itu pada dasarnya hanya link daftar, dan kita harus memasukkan semua
jalan di akhir.
Jadi O besar n.
>> Itu bisa menjadi kasus terburuk kami pada pohon pencarian biner.
Jelas, Anda tidak akan pernah membangun pohon pencarian biner dengan 5 dalam
tengah, mengetahui 5 akan menjadi angka terendah.
Tapi bisa, jika Anda mulai dari awal.
Setiap pertanyaan ini sebelum saya beralih ke pertanyaan lain?
Itu pertanyaan yang bagus.
Aku akan tahu O besar -
>> AUDIENCE: Bagaimana mencari untuk keempat?
>> JASON Hirschhorn: Jelas kita melakukan pencarian dan penyortiran.
Kami melakukan semua algoritma tersebut, benar.
Tunggu, adalah bahwa untuk Kuis 1?
Apakah yang menutupi -
apakah Anda sudah memiliki pertanyaan di Quiz 1?
The big O runtime pencarian biner, insertion sort, bubble sort?
>> AUDIENCE: Ya.
>> JASON Hirschhorn: Jika Anda punya pertanyaan pada Quiz 0, kemungkinan besar Anda tidak akan
mendapatkan pertanyaan yang sama persis pada Quiz 1.
Mungkin masih baik untuk mengetahui mereka.
Mudah-mudahan Anda harus tahu gh sudah.
>> Tapi runtimes logaritmik lainnya mungkin baik untuk mengetahui.
Hal-hal yang tidak tercakup pada Quiz 0.
Seperti semua operator ini pada ini tipe data abstrak.
>> OK, mari kita lanjutkan.
Yang satu ini harus cukup cepat.
Dan ini adalah bahasa baru yang kita belum benar-benar dikodekan dalam sebelumnya.
Ini adalah pertanyaan yang diminta untuk kode dalam PHP.
Jadi pertimbangkan array PHP di bawah ini.
Menulis PHP dan / atau kode HTML sedemikian rupa sehingga output tabel dua kolom dengan TF
nama dan rumah-rumah.
>> Anda belum pernah melakukan ini sebelumnya, masalah khusus ini.
Tapi ini harus sangat akrab bagi apa yang Anda lakukan dalam masalah set 7.
Jadi aku akan berani bertaruh Anda akan diminta untuk kode sesuatu di PHP yang
sangat mirip dengan apa yang Anda lakukan dalam masalah set 7.
>> Pertama, array tidak spesifik.
Jenis array apa ini?
>> AUDIENCE: asosiatif.
>> JASON Hirschhorn: Ini array asosiatif.
Dan apa perbedaan antara array asosiatif dan obyek?
>> AUDIENCE: Sebuah objek array memiliki indeks bilangan bulat, dan array asosiatif
merupakan indeks dari string, atau sesuatu seperti itu.
>> JASON Hirschhorn: Jadi array benda akan memiliki indeks
bilangan bulat, tapi sebuah objek memiliki bidang.
Ini memiliki nama-nama bidang-bidang seperti nama, rumah, mahasiswa.
Apakah Anda punya ide?
>> AUDIENCE: Nah, asosiatif array di PHP, kan?
Dan benda di JavaScript?
>> JASON Hirschhorn: Jujur, tidak ada perbedaan nyata antara keduanya.
Keduanya memiliki string sebagai kunci, dan dapat pada dasarnya apa-apa sebagai nilai.
Bahasa yang berbeda memanggil salah satu Hal array asosiatif,
satu hal obyek.
Jadi jujur, tidak ada yang nyata perbedaan, tapi tentu ada beberapa
perbedaan sintaksis antara keduanya.
Ya.
>> AUDIENCE: Jadi, apakah objek juga kode di bawah kap sebagai tabel hash, kemudian?
>> JASON Hirschhorn: Apa yang Anda Maksudku, kode di bawah tenda?
>> AUDIENCE: Kami diberitahu bahwa asosiatif Array secara teknis
hash table.
Begitu juga objek juga teknis tabel hash?
>> JASON Hirschhorn: Aku tidak akan untuk menjawab pertanyaan itu.
Aku akan kembali kepada Anda pada itu.
Tapi aku tidak akan berpikir baik dari orang-orang seperti itu.
Tapi, dengan cara apapun, array asosiatif dan objek, umumnya, orang menggunakan mereka
istilah secara bergantian.
Dalam hal ini, bagian dingin adalah Anda dapat menggunakan tombol.
String sebagai kunci, bukan hanya angka sederhana.
>> Jadi saya telah berbicara tentang ini untuk sementara.
Mudah-mudahan, beberapa orang memiliki mendapatkan dimulai pada ini.
Kita akan menulis beberapa PHP dan HTML kode, sehingga kita mendapatkan dua kolom
meja dengan TF nama dan rumah-rumah.
>> OK, saya juga ingin header baris di atas meja ini.
Jadi aku akan mendapatkan langsung ke dalam ini.
Kita akan mengajukan, baru, dan kita akan -
>> OK.
Bagaimana cara memulai sebuah tabel?
Apa tag, Michael, untuk memulai sebuah tabel?
>> AUDIENCE: Tabel.
>> JASON Hirschhorn: Tabel.
Dan jika saya membuka tag, apa lagi yang saya butuhkan?
>> AUDIENCE: Sebuah kepala?
Atau, saya kira, kelas.
>> JASON Hirschhorn: Jadi, maaf.
Asumsikan bahwa kita sudah menulis doctab, HTML, semua hal itu.
Tapi kalau aku membuka tag tabel ini, apa lagi yang saya harus menulis?
untuk memvalidasi HTML?
>> AUDIENCE: Tutup itu.
>> JASON Hirschhorn: Tutup tag.
Bagaimana cara menulis tag close-table?
>> AUDIENCE: Dot slash meja.
>> JASON Hirschhorn: Slash meja, besar.
Mungkin masuk akal untuk menulis baik dari mereka bersama-sama karena
Anda harus melakukannya.
OK, jika saya ingin baris header, bagaimana Saya menulis baris header dengan judul?
>> AUDIENCE: Apakah kurang dari 10 jam dekat -
TR, yeah.
>> JASON Hirschhorn: TR?
>> AUDIENCE: Kemudian hal yang sama, slash, yeah.
>> JASON Hirschhorn: OK, dan memberi saya dua kolom.
>> AUDIENCE: T D?
>> JASON Hirschhorn: OK.
Saya ingin dua kolom.
Apakah ini memberi saya dua kolom?
Berapa banyak kolom ini?
One.
Jadi mari kita copy dan paste.
>> Jadi sebenarnya, pada kuis, semua kode ini bahwa kita telah menulis sejauh ini
benar-benar diberikan kepada Anda.
Tapi Anda harus mungkin masih tahu bagaimana menulis itu.
Ya.
>> AUDIENCE: Rumah Anda adalah antara dua.
>> JASON Hirschhorn: Boom.
Ia harus pergi di sana, kan?
Baik panggilan.
Jadi sekali lagi, semua kode ini sebenarnya diberikan kepada Anda di kuis yang sebenarnya.
Tapi itu menyenangkan untuk menulis, dan Anda harus tahu bagaimana menulis itu.
Jadi ini adalah di mana Anda perlu untuk memulai kode Anda.
Apa yang kita perlu menulis di sini?
>> Maaf, saya harus berubah nama file ini.
Jadi kami menyimpannya dalam sebuah file HTML., tidak dalam sebuah file PHP..
Hal-hal ini akan berarti apa-apa dalam sebuah file PHP..
Jadi kita dalam sebuah file HTML..
Apa hal pertama Saya harus menulis?
Saya ingin menaruh beberapa PHP kode dalam HTML.
>> AUDIENCE: PHP, seperti wortel lain dan tanda tanya PHP, kan?
>> JASON Hirschhorn: Great.
Dan bagaimana saya mengakhiri itu?
>> AUDIENCE: Dengan tanda tanya.
>> JASON Hirschhorn: Itu bagus.
Itulah hal pertama yang saya butuhkan jika saya ingin untuk menempatkan beberapa kode PHP di sini.
>> AUDIENCE: saya pikir PHP. File bisa mengambil HTML.
>> JASON Hirschhorn: Ya.
Sebuah file PHP. Dapat mengambil beberapa HTML dan ditampilkan.
Itu buruk saya.
Aku hanya mencoba untuk meniru apa itu pada kuis.
>> OK, maaf untuk membingungkan Anda.
Ya, practice.HTML.
Sekarang kita akan menempatkan beberapa kode PHP masuk
Apa baris pertama Kode PHP saya harus menulis?
Aku akan pergi melalui array ini dan membuatnya menjadi meja.
Ya.
>> AUDIENCE: Anda bisa menggunakan untuk H lingkaran atau untuk loop.
>> JASON Hirschhorn: OK, apa yang Anda inginkan untuk digunakan?
>> AUDIENCE: Saya akan menggunakan untuk loop.
Untuk, dan kemudian Anda melakukan tanda dolar i sama dengan 0 koma dollar
menandatangani i kurang dari 2.
Dan kemudian koma i dollar menandatangani i plus plus.
>> JASON Hirschhorn: Bagaimana Anda tahu untuk menggunakan 2?
>> AUDIENCE: Karena ada dua array asosiatif dalam lebih besar
array asosiatif.
>> JASON Hirschhorn: Jadi hal besar itu bukan array asosiasi.
Hal besar hanya array normal.
Tapi kau benar, ada dua array asosiatif
dalam array kita lebih besar.
Itulah mengapa Anda menggunakan dua.
Saya merasa tidak nyaman dengan asumsi bahwa mereka 2, jadi apa cara untuk menulis
ini tanpa asumsi bahwa mereka 2?
>> AUDIENCE: [Tak terdengar]?
>> JASON Hirschhorn: OK, bagaimana Anda menulis itu?
>> AUDIENCE: tanda dolar Foreach tfs atau seperti dollar tanda tf.
>> JASON Hirschhorn: OK, jadi untuk masing-masing tfs sebagai tfs, saya ingin, sekarang
lagi, memiliki meja saya.
Jadi, siapa yang bisa memberi saya baris berikutnya kode?
>> AUDIENCE: Print, dan kemudian di kutipan, braket tr akhir
braket, akhir kutipan.
Kurung End, titik koma.
>> JASON Hirschhorn: OK, dan apa yang akan dilakukan?
>> AUDIENCE: Ini akan mengatakan, baris baru.
Ini akan menempatkan tag untuk baris baru.
>> JASON Hirschhorn: Benar, PHP ini, seperti kita bicarakan sebelumnya - ini
PHP akan dievaluasi, dan kemudian itu akan mencetak ke file ini
meja belakangnya, dan kemudian yang HTML akan dievaluasi.
Kami hanya menyalin ini HTML kami punya di sini.
Ya.
>> AUDIENCE: [Tak terdengar]?
>> JASON Hirschhorn: Maaf?
Ada di sini.
Jatuh 2012.
Jangan melihat jawaban, mari kita bersama-sama mengatasinya.
Jadi kita mencetak baris tabel.
Jadi Anda mungkin dalam ayunan hal.
Apa baris berikutnya kode kita perlu menulis?
Assam, beri saya baris berikutnya kode.
>> AUDIENCE: Anda perlu nama tf itu.
Tf terbuka kurung tanda kutip nama kurung tertutup.
>> JASON Hirschhorn: Beri aku nama mereka.
>> AUDIENCE: Anda perlu untuk mencetak itu.
>> [Interposing SUARA]
>> JASON Hirschhorn: OK, bagaimana cara mencetaknya?
>> [Interposing SUARA]
>> JASON Hirschhorn: saya hilang sesuatu sekarang.
Apa yang saya hilang?
>> AUDIENCE: Anda membutuhkan tanda dolar.
>> JASON Hirschhorn: Apa lain saya hilang?
Semua kita telah dicetak sejauh ini adalah tr tersebut.
>> AUDIENCE: Tutup tr setelah itu.
>> JASON Hirschhorn: Jadi kita perlu untuk menutup tr setelah.
Siapakah yang melihat apa yang kita hilang on line 16?
Ya, Anna.
>> AUDIENCE: Anda perlu membuka a td dan kurung kurawal.
>> JASON Hirschhorn: Dan di mana kita menempatkan kurung kurawal?
>> AUDIENCE: Sekitar nama tf.
>> JASON Hirschhorn: Seperti ini?
>> AUDIENCE: Ya.
Dan kemudian tutup td.
>> JASON Hirschhorn: Seperti itu?
>> AUDIENCE: Apakah Anda perlu kutip ganda tanda di sebelah kurung kurawal?
>> JASON Hirschhorn: Di sini?
Tidak, Anda tidak.
Jadi itulah yang benar.
Ya.
>> AUDIENCE: Jadi perbedaan antara yang dan encatenating dengan titik-titik ini, jika
Anda menggunakan titik, Anda harus memiliki tanda kutip ganda, maka titik,
maka titik -
>> JASON Hirschhorn: Benar.
Jadi kau mengatakan ada sebuah akhir cara menulis ini seperti itu.
Apa operator Rangkaian di JavaScript?
>> AUDIENCE: Sebuah tanda plus.
Anda lupa untuk menempatkan keriting penjepit kembali.
>> JASON Hirschhorn: Great.
Dan ada satu garis yang lebih kode yang hilang.
Siapa yang bisa memberi saya baris terakhir kode kita hilang?
>> AUDIENCE: Hanya hal yang sama persis, hanya dengan rumah bukan nama.
Besar
>> JASON Hirschhorn: Great.
Dan sintaks Anda tepat untuk mendapatkan hal-hal dalam array asosiasi.
Jadi dalam kuis yang sebenarnya, Anda benar-benar menyerah sampai di sini.
Jadi kode ini diberikan kepada Anda.
Yang Anda harus menulis yang ini empat baris dan ingat untuk
menutup tag table.
Kalian benar-benar melakukan semua itu dan lebih.
Ya.
>> AUDIENCE: Jadi akan fungsional sama jika Anda hanya memiliki bahwa semua di
satu panggilan cetak besar, kan?
Dan kemudian hanya concatenated pada, dan sebagainya?
>> JASON Hirschhorn: Seperti itu?
>> AUDIENCE: Ya.
Ini tidak akan terlihat baik jika Anda melihat itu ketika Anda memeriksa
elemen pada website Anda, kan?
>> JASON Hirschhorn: Saya setuju.
Jika saya dimuat halaman web ini, akan saya dapat melihat kode PHP ini, pernah?
>> AUDIENCE: No
>> JASON Hirschhorn: No
Dan sebenarnya, aku tidak akan.
>> AUDIENCE: Ini bukan HTML, kan?
Jadi, Anda mungkin bisa -
>> JASON Hirschhorn: Jadi PHP ini akan dievaluasi sisi server.
PHP selalu dievaluasi sisi server, sehingga Anda tidak pernah bisa melihat kode PHP.
>> AUDIENCE: Tapi kau akan bisa melihat hasil cetakan.
>> JASON Hirschhorn: Benar.
Dan itu benar-benar tidak mungkin menempatkan semuanya di telepon.
Mungkin format itu baik untuk Anda, atau mungkin meletakkannya di satu baris.
Jelas.
Tapi ya, bagus.
>> AUDIENCE: Bagaimana bisa ada yang tidak ada penyorotan teks untuk
semua perintah PHP?
Karena saya ingat melihat itu.
>> JASON Hirschhorn: Karena itu . HTML mengajukan di sini di bagian atas.
Di sana Anda pergi.
>> AUDIENCE: Jika kita melakukan metode awal dengan untuk loop, benar, jika kita
ingin mengakses TFS itu, bukan kita melakukan tfs braket braket 0, maka
[Tak terdengar]?
>> JASON Hirschhorn: Anda akan -
sehingga Anda katakan untuk untuk loop, Anda akan dilakukan di dollar tanda tfs bracket 1
atau i, benar.
Atau tanda dolar i menutup braket dan kemudian braket persegi
tanda kutip ganda, ya.
>> OK, baik.
Kami memiliki satu lagi satu cepat.
Tujuh menit, jadi saya ingin untuk pergi ke satu ini.
Ini adalah contoh lain.
Kita sekarang bahasa yang sama sekali lain.
>> Kami memiliki beberapa kode HTML.
Ini semacam kecil di layar, tapi Aku ingin kau melihat melalui itu benar-benar
cepat, dan seseorang dapat memberitahu saya, jika saya harus memuat halaman web ini,
apa yang akan saya lihat?
Jelaskan segala sesuatu tentang halaman web ini.
Noah?
Apa yang akan saya lihat?
>> AUDIENCE: Kode di ujung depan Google dengan merasakan teks dan
tombol submit.
>> JASON Hirschhorn: Dan apa akan tombol katakan?
>> AUDIENCE: Kirim.
Oh, cari.
Maafkan aku.
>> JASON Hirschhorn: Ini akan mengatakan pencarian.
Ingat, nama.
Apa yang digunakan untuk nama?
Nama atribut ini, apa yang digunakan untuk?
>> [Interposing SUARA]
>> AUDIENCE: Itu namanya ketika itu diklik?
>> JASON Hirschhorn: Itu bisa menjadi.
Tapi apa yang kita umumnya melihat - mengapa kita memberikan nama antrian ini?
Mengapa kita melihat itu?
Ya.
>> AUDIENCE: Bukankah itu menjadi indeks variabel global super?
>> JASON Hirschhorn: Ya, biasanya ketika formulir ini akan menyerahkan, dan kemudian di mana
akan ini tunduk?
Apa halaman?
Noah, apa halaman akan ini tunduk?
>> AUDIENCE: Saya tidak yakin.
>> JASON Hirschhorn: Dimana bisa kita dapat menemukannya?
Di mana Anda menemukan apa yang Halaman itu tunduk kepada?
Apa baris kode?
>> AUDIENCE: Form tindakan.
>> JASON Hirschhorn: Tepat.
Aksi.
Jadi itu menyerahkan ke halaman pencarian.
Pencarian backslash.
Jadi itulah yang benar.
Metode apa?
>> AUDIENCE: Dapatkan.
>> JASON Hirschhorn: Dapatkan.
Tepat.
Jadi kita membaca ini.
Ini akan menjadi formulir.
Kau tepat.
Dua hal pada formulir, judul halaman dan bagian atas akan menjadi Google.
>> Jadi di sini adalah dua pertanyaan yang harus bisa menjawab tentang halaman ini.
Jika HTML ini hidup di website ini dan pengguna input bug ke dalam teks ini
lapangan di sini, apa URL akan pengguna menemukan dirinya pada
mengirimkan formulir?
>> Jadi kita memiliki ini di sini.
Aku akan kembali ke Halaman ini, meskipun.
Aku akan menulis bagian pertama ini.
Dapatkah orang melihat di sini?
OK, Mario, Anda pikir Anda tahu?
Apa halaman?
>> AUDIENCE: Backslash pencarian.
>> JASON Hirschhorn: Aku akan untuk pindah ke sini.
OK, backslash pertanyaan pencarian mark q sama dengan bug.
Ada yang punya saran yang berbeda?
Ya.
>> Jadi bagaimana kita mendapatkan ini?
Nah, kami telah melihat ini sebelumnya.
Dan Anda datang dengan ini sebelumnya.
Kau benar, Nuh, bahwa tindakan memberitahu kita apa
Halaman kita akan.
>> Kita juga tahu metode apa.
Kami melakukan get.
Dan perbedaan antara get dan post adalah bahwa mendapatkan menampilkan di URL
dan pasca tidak.
Jadi jika saya menulis posting di sana di metode, apa yang akan berbeda?
>> AUDIENCE: Ini hanya akan menjadi pencarian slash.
>> JASON Hirschhorn: Ini akan hanya akan memangkas pencarian.
Tidak ada di sini yang akan terjadi.
Tapi karena itu adalah mendapatkan, URL ditampilkan sebagai berikut.
Pertama kita melihat tanda tanya dan kita melihat nama dan nilai.
Katakanlah ada satu kolom teks lain dan Saya memberi nama r dan saya memasukkan
nilai, ulat.
Apa yang akan terlihat seperti ini sekarang?
Saya telah satu bidang teks lebih, saya memberikan nama dari r dan nilai ulat.
>> AUDIENCE: Setelah bar Anda akan memiliki ulat ampersand.
>> JASON Hirschhorn: Itu tidak ampersand.
>> AUDIENCE: Atau hanya apa pun dan simbol.
>> JASON Hirschhorn: Ya, ada.
Kau benar, aku salah.
Itu seperti g.
>> AUDIENCE: Caterpillar.
r sama dengan ulat, maaf.
>> JASON Hirschhorn: Apakah ada ada r di sana?
>> AUDIENCE: Tidak, tidak ada.
>> JASON Hirschhorn: Kita akan bicara tentang hal itu setelah kelas.
Itu tepat sekali.
Jadi dan benar.
Dan kemudian Anda bisa memiliki banyak dari ini, dan mereka semua akan digabungkan
bersama-sama dengan itu dan.
Jadi itulah yang benar.
>> Ada satu pertanyaan lagi.
Sketsa ini HTML DOM, mulai dengan dokumen.
Kita bisa melakukannya dalam dua menit.
Kita akan melakukannya di sini.
Aku akan kembali ke halaman web ini.
OK, kita mulai dengan dokumen.
>> Apa selanjutnya?
Jadi, ketika Anda membaca -
>> AUDIENCE: HTML.
>> JASON Hirschhorn: HTML berikutnya.
Kita akan pergi tag by tag.
Apa setelah HTML?
>> AUDIENCE: Head.
>> JASON Hirschhorn: Head.
Apa setelah kepala?
>> AUDIENCE: Judul.
>> JASON Hirschhorn: Judul.
Dan judul memiliki nilai Google, tapi aku tidak akan
menulis bahwa dalam untuk saat ini.
OK, mana tubuh pergi?
>> AUDIENCE: Juga datang dari HTML.
>> JASON Hirschhorn: Tepat.
Tubuh datang dari dari sini.
Apakah semua orang melihat mengapa itu yang terjadi?
Anda mungkin harus mampu mencari out ini, juga, bahkan jika saya tidak memiliki
lekukan yang bagus ini.
>> Lekukan semacam memberikan begitu saja, tetapi Anda dapat melihat bahwa tag kepala memiliki
telah ditutup, yang berarti kita mungkin tidak bisa turun di sini.
Kita harus pergi kembali ke apa pun adalah tepat sebelum kepala
tag, atau di bawah itu.
Kami bahkan dengan tag kepala.
>> Dan di bawah tubuh berjalan form.
Berdasarkan bentuk, ada dua input.
OK.
Itu saja yang saya punya.
Kuis 1 adalah besok.
Aku sangat bersemangat untuk kalian.
Ini akan menjadi ledakan.
>> Jika Anda memiliki -
>> AUDIENCE: [Tepuk Tangan]
>> JASON Hirschhorn: Oh hentikan, hentikan.
Tapi tidak, aku bercanda.
Jika Anda memiliki pertanyaan, tepat setelah bagian, aku akan berada di luar.
Jika Anda memiliki pertanyaan malam ini, jangan ragu untuk menghubungi, email, GChat,
pembawa merpati saya.
Good luck besok.
Memiliki Thanksgiving istirahat yang indah, jika saya tidak melihat Anda sebelum itu.
Dan aku akan melihat Anda setelah Thanksgiving pada hari Selasa untuk final kami
bagian party ever.
>> AUDIENCE: [Tak terdengar].
>> JASON Hirschhorn: Great.
OK, saya akan melihat kalian berikutnya minggu, atau dalam dua minggu.
Dan semoga sukses besok.