1 00:00:00,000 --> 00:00:02,270 >> [Review: Kuiz 1] 2 00:00:02,270 --> 00:00:04,620 [Ali nahm, Oreoluwa Barbarinsa, Lucas Freitas, Rob Bowden] [Universiti Harvard] 3 00:00:04,620 --> 00:00:07,660 [Ini adalah CS50.] [CS50.TV] 4 00:00:07,660 --> 00:00:11,610 [Lucas Freitas] Selamat datang semua orang. Ini adalah kajian untuk kuiz 1. 5 00:00:11,610 --> 00:00:15,040 Sama seperti penafian, ini - Maksud saya, kita akan cuba untuk menutup 6 00:00:15,040 --> 00:00:17,770 sebanyak bahan yang mungkin, tetapi itu tidak bermakna bahawa 7 00:00:17,770 --> 00:00:20,780 kita akan meliputi semua perkara-perkara yang boleh dalam kuiz 1. 8 00:00:20,780 --> 00:00:25,270 Jadi pastikan anda juga lihat kuliah, bahagian, semua yang anda boleh. 9 00:00:25,270 --> 00:00:28,240 Kuiz 1 akan menjadi pada hari Rabu, Rabu depan. 10 00:00:28,240 --> 00:00:33,800 Jadi pastikan untuk belajar. Ia akan menjadi, cukup banyak, seperti kuiz yang pertama 11 00:00:33,800 --> 00:00:36,390 mengenai format, tetapi ia mungkin akan menjadi lebih sukar. 12 00:00:36,390 --> 00:00:39,600 Sekurang-kurangnya, tahun lepas apabila saya mengambil 50, saya fikir ia adalah jauh lebih sukar. 13 00:00:39,600 --> 00:00:42,410 Jadi belajar banyak. 14 00:00:42,410 --> 00:00:45,190 >> Saya akan meliputi struktur data dan pengekodan Huffman. 15 00:00:45,190 --> 00:00:47,910 Ini adalah sesuatu yang ramai orang berfikir adalah rumit, 16 00:00:47,910 --> 00:00:51,930 tetapi saya akan cuba untuk membuat ia semudah mungkin. 17 00:00:51,930 --> 00:00:56,330 Pertama sekali, apa yang kita mahu anda semua tahu untuk kuiz 1 adalah untuk 18 00:00:56,330 --> 00:01:00,970 memahami penerangan konsep setiap satu daripada struktur data yang saya akan hadir. 19 00:01:00,970 --> 00:01:03,960 Ini bermakna bahawa anda tidak perlu untuk benar-benar 20 00:01:03,960 --> 00:01:07,020 melaksanakan jadual hash dalam kuiz anda 1. 21 00:01:07,020 --> 00:01:10,250 Kami tidak mahu anda untuk melaksanakan jadual hash keseluruhan, mungkin kami akan cuba 22 00:01:10,250 --> 00:01:13,090 untuk membuat anda melaksanakan beberapa fungsi, 23 00:01:13,090 --> 00:01:16,940 operasi yang paling biasa, tetapi kami tidak akan membuat anda melaksanakan segala-galanya. 24 00:01:16,940 --> 00:01:21,010 Jadi ia adalah penting bahawa anda memahami konsep di sebalik setiap struktur data 25 00:01:21,010 --> 00:01:23,510 dan juga bahawa anda mampu untuk kod di C, 26 00:01:23,510 --> 00:01:27,880 hanya operasi yang paling biasa mereka mempunyai untuk setiap struktur data. 27 00:01:27,880 --> 00:01:30,090 Dan juga dapat mengkaji petunjuk dan structs, 28 00:01:30,090 --> 00:01:33,470 kerana mereka muncul banyak dalam struktur data. 29 00:01:33,470 --> 00:01:37,380 >> Pertama, yang dikaitkan senarai. Senarai Berkaitan sebenarnya hampir sama dengan tatasusunan, 30 00:01:37,380 --> 00:01:39,930 tetapi perbezaan antara senarai berpaut dan array, 31 00:01:39,930 --> 00:01:45,160 pertama sekali, adalah bahawa senarai yang dikaitkan mempunyai saiz yang sangat fleksibel, 32 00:01:45,160 --> 00:01:50,060 manakala dalam barisan anda perlu sama ada memilih saiz yang sangat besar untuk pelbagai, 33 00:01:50,060 --> 00:01:53,710 jadi anda tahu bahawa anda akan dapat untuk menyimpan semua data anda dalam array yang, 34 00:01:53,710 --> 00:01:59,370 atau anda perlu menggunakan malloc untuk mempunyai panjang fleksibel array. 35 00:01:59,370 --> 00:02:03,680 Dalam senarai dikaitkan ia sangat mudah untuk hanya mendapatkan lebih banyak elemen, 36 00:02:03,680 --> 00:02:07,210 meletakkan lebih banyak unsur dalam senarai dikaitkan atau mengeluarkan unsur-unsur. 37 00:02:07,210 --> 00:02:09,370 Dan sebenarnya, jika anda tidak mahu senarai dikaitkan dengan disusun, 38 00:02:09,370 --> 00:02:13,950 anda boleh mencari dan membuang unsur-unsur dalam masa yang tetap, 39 00:02:13,950 --> 00:02:16,800 jadi O (1) kali, jadi ia sangat mudah. 40 00:02:16,800 --> 00:02:20,660 Anda hanya perlu berhati-hati untuk sentiasa ingat untuk malloc dan bebas nod, 41 00:02:20,660 --> 00:02:25,510 hanya kerana jika tidak, anda akan mempunyai kebocoran memori. 42 00:02:25,510 --> 00:02:31,480 Senarai Jadi dikaitkan - definisi nod adalah sama seperti apa yang kita ada di sana. 43 00:02:31,480 --> 00:02:35,110 Saya meletakkan int n, tetapi anda boleh menyimpan apa-apa data yang anda mahu. 44 00:02:35,110 --> 00:02:37,280 Jadi jika anda ingin menyimpan tali, ia adalah baik. 45 00:02:37,280 --> 00:02:41,690 Jika anda ingin menyimpan struct, ia halus, double, apa sahaja yang anda mahu. 46 00:02:41,690 --> 00:02:44,630 Saya hanya meletakkan int n bagi contoh di sini. 47 00:02:44,630 --> 00:02:46,800 Dan anda mempunyai penunjuk kepada nod yang seterusnya. 48 00:02:46,800 --> 00:02:51,940 Jadi, pada dasarnya, senarai berpaut mempunyai beberapa data, dan kemudian ia menjurus kepada nod yang seterusnya. 49 00:02:51,940 --> 00:02:56,710 Jika ia elemen terakhir dalam senarai yang dihubungkan, ia akan menunjukkan null. 50 00:02:56,710 --> 00:02:59,060 Jadi ini adalah satu contoh senarai berpaut. 51 00:02:59,250 --> 00:03:05,960 >> Okay, jadi sekarang mari kita lihat apa yang patut kita buat jika saya ingin memasukkan satu elemen dalam senarai berpaut. 52 00:03:05,960 --> 00:03:08,810 Pertama, memasukkan fungsi akan jenis tidak sah 53 00:03:08,810 --> 00:03:11,350 kerana saya tidak mahu kembali apa-apa. 54 00:03:11,350 --> 00:03:14,200 Dan saya akan mengambil int an sebagai hujah, 55 00:03:14,200 --> 00:03:17,090 kerana saya ingin tahu apa yang saya mahu masukkan. 56 00:03:17,090 --> 00:03:21,840 Jadi apa yang perkara pertama yang perlu saya lakukan? Well, saya perlu malloc pada newnode, 57 00:03:21,840 --> 00:03:24,240 supaya adalah baris pertama. 58 00:03:24,240 --> 00:03:27,580 Saya hanya mewujudkan nod baru untuk dimasukkan ke dalam senarai berpaut. 59 00:03:27,580 --> 00:03:32,360 Jadi apa yang boleh saya lakukan? Nah, kita tahu bahawa dalam pelaksanaan kami senarai dikaitkan 60 00:03:32,360 --> 00:03:38,180 dalam kelas, kita sentiasa meletakkan kepala sebagai pembolehubah global. 61 00:03:38,180 --> 00:03:41,800 Jadi apa yang kita boleh lakukan ialah menukar kepala. 62 00:03:41,800 --> 00:03:44,300 Saya boleh membuat nod baru ini menjadi ketua baru, 63 00:03:44,300 --> 00:03:46,670 dan ia akan menunjukkan ketua sebelumnya. 64 00:03:46,670 --> 00:03:50,390 Bagaimana kita boleh berbuat demikian? Perkara pertama yang saya perlu lakukan 65 00:03:50,390 --> 00:03:54,770 adalah menukar 'n' di nod baru dengan nilai, 66 00:03:54,770 --> 00:03:57,530 yang telah diluluskan untuk majlis itu. 67 00:03:57,530 --> 00:04:01,050 Kemudian newnode bersebelahan akan menjadi kepala. 68 00:04:01,050 --> 00:04:05,800 Kepala akan newnode. Jadi ia agak mudah. 69 00:04:05,800 --> 00:04:10,090 Untuk memotong nod, kita boleh melakukannya seperti - 70 00:04:10,090 --> 00:04:14,790 Salah satu cara yang boleh kita lakukan iaitu, 71 00:04:14,790 --> 00:04:18,160 okay, jika saya mahu padam, sebagai contoh, 3, 72 00:04:18,160 --> 00:04:24,850 apa yang saya boleh lakukan adalah hanya menunjukkan nod sebelumnya 73 00:04:24,850 --> 00:04:27,580 ke nod seterusnya 3. 74 00:04:27,580 --> 00:04:29,400 Jadi saya hanya akan melakukan sesuatu seperti itu. 75 00:04:29,400 --> 00:04:33,400 Tetapi apa yang masalah dengan melakukan itu? 76 00:04:33,400 --> 00:04:37,400 Saya mempunyai kebocoran memori, jadi saya tidak mempunyai akses kepada nombor 3 lagi. 77 00:04:37,400 --> 00:04:42,480 Masalah dengan itu adalah bahawa saya tidak akan dapat membebaskan nod itu. 78 00:04:42,480 --> 00:04:45,360 Saya akan mempunyai kebocoran memori dan (difahami) akan membenci saya. 79 00:04:45,360 --> 00:04:49,370 Jadi, daripada melakukan itu, saya mungkin perlu mempunyai penunjuk sementara. 80 00:04:49,370 --> 00:04:53,210 Jadi saya meletakkan temp. Ia akan menunjukkan kepada nod yang saya mahu padam. 81 00:04:53,210 --> 00:04:58,170 Dan kemudian saya boleh bergerak nod sebelumnya kepada mata kepada nod seterusnya 82 00:04:58,170 --> 00:05:00,390 nod yang saya mahu padam. 83 00:05:00,390 --> 00:05:02,730 Dan akhirnya, saya akan dapat membebaskan penunjuk. 84 00:05:02,730 --> 00:05:07,480 Adakah saya perlu untuk membebaskan penunjuk yang saya dicipta di sana? 85 00:05:07,480 --> 00:05:09,560 Saya tidak perlu, hanya kerana - 86 00:05:09,560 --> 00:05:13,430 perbezaan adalah bahawa buku ini telah dicipta menggunakan malloc, 87 00:05:13,430 --> 00:05:17,280 jadi ia dalam timbunan itu, manakala yang satu ini hanya diisytiharkan sebagai suis NULL dalam tindanan. 88 00:05:17,280 --> 00:05:20,000 Jadi, saya tidak perlu membebaskannya. 89 00:05:20,000 --> 00:05:22,030 >> Okay. Jadi sekarang mari kita bercakap tentang susunan. 90 00:05:22,030 --> 00:05:24,680 Susunan cukup mudah. 91 00:05:24,680 --> 00:05:29,540 Kami telah susunan dan antrian di dalam kelas hanya menggunakan tatasusunan, 92 00:05:29,540 --> 00:05:32,820 tetapi anda perlu membiasakan diri - anda perlu ingat 93 00:05:32,820 --> 00:05:40,740 bahawa anda juga boleh melakukan susunan beratur menggunakan senarai dikaitkan juga. 94 00:05:40,740 --> 00:05:44,460 Jadi jika anda mempunyai array, apa yang akan menjadi timbunan? 95 00:05:44,460 --> 00:05:46,810 Timbunan A, pertama, perlu mempunyai saiz yang. 96 00:05:46,810 --> 00:05:49,950 Anda perlu menyimpan apa yang saiz timbunan yang telah anda sekarang. 97 00:05:49,950 --> 00:05:52,980 Dan juga anda akan mempunyai array, dalam kes ini nombor, 98 00:05:52,980 --> 00:05:55,120 tetapi jika anda mahu, ia boleh menjadi satu pameran 99 00:05:55,120 --> 00:06:00,380 tali, pelbagai struct, apa-apa yang anda mahu simpan. 100 00:06:00,380 --> 00:06:03,240 Mengenai tindanan: Perbezaan antara timbunan dan senarai berpaut 101 00:06:03,240 --> 00:06:08,590 ialah dalam tindanan anda hanya mempunyai akses kepada elemen terakhir yang telah dimasukkan ke dalam tindanan. 102 00:06:08,590 --> 00:06:11,770 Ia dipanggil terakhir dalam, mula-mula keluar. 103 00:06:11,770 --> 00:06:15,090 Sama seperti anda mempunyai timbunan dulang, 104 00:06:15,090 --> 00:06:17,670 jika anda meletakkan dulang di atas tepi, 105 00:06:17,670 --> 00:06:22,670 anda perlu membuang dulang yang pertama untuk mempunyai akses kepada dulang lain. 106 00:06:22,670 --> 00:06:26,310 Ia adalah perkara yang sama dengan susunan. 107 00:06:26,310 --> 00:06:31,220 Jadi jika saya mahu, sebagai contoh, menambah satu elemen untuk timbunan, apa yang perlu saya lakukan? 108 00:06:31,220 --> 00:06:34,070 Ia dipanggil push, dan ia cukup mudah. 109 00:06:34,070 --> 00:06:37,130 Perkara pertama yang anda perlu lakukan adalah cek jika saiz tindanan 110 00:06:37,130 --> 00:06:40,150 tidak lebih besar atau sama dengan kapasiti tindanan. 111 00:06:40,150 --> 00:06:45,810 Kerana jika anda sudah berada pada kapasiti penuh, anda tidak boleh menambah apa-apa lagi. 112 00:06:45,810 --> 00:06:51,140 Dan kemudian jika tidak, anda hanya perlu menambah elemen untuk tindanan. 113 00:06:51,140 --> 00:06:54,530 Dan akhirnya, kenaikan saiz. Jadi ia agak mudah. 114 00:06:54,530 --> 00:06:57,140 Jadi saya hanya menambah nombor 2. 115 00:06:57,140 --> 00:07:00,350 Dan jika saya mahu pop, yang bermaksud bahawa saya mahu mengeluarkan 116 00:07:00,350 --> 00:07:03,870 elemen terakhir yang telah ditambah dan mengembalikan nilai unsur, 117 00:07:03,870 --> 00:07:09,180 perkara pertama yang saya perlu menyemak ialah tindanan tidak kosong. 118 00:07:09,180 --> 00:07:11,510 Kerana jika ia kosong, saya tidak boleh kembali apa-apa. 119 00:07:11,510 --> 00:07:14,820 Dalam kes itu, saya kembali -1. 120 00:07:14,820 --> 00:07:18,960 Jika tidak, saya akan SUSUTAN saiz spec, 121 00:07:18,960 --> 00:07:22,510 dan kembali nombor (s.size). 122 00:07:22,510 --> 00:07:27,230 Mengapa saya SUSUTAN saiz dan kemudian kembali s.size? 123 00:07:27,230 --> 00:07:30,930 Ini kerana, dalam hal ini, spec mempunyai saiz 4, 124 00:07:30,930 --> 00:07:33,810 dan saya mahu kembali unsur keempat, bukan? 125 00:07:33,810 --> 00:07:36,030 Tetapi apa yang indeks unsur keempat? Tiga. 126 00:07:36,030 --> 00:07:44,510 Oleh kerana saya saiz - akan menjadi 3, saya hanya boleh kembali s.numbers (s.size) 127 00:07:44,510 --> 00:07:48,410 kerana ia 3. Jadi ia hanya indeks. 128 00:07:48,410 --> 00:07:50,380 >> Sekarang beratur. Baris gilir yang cukup banyak perkara yang sama. 129 00:07:50,380 --> 00:07:54,950 Satu-satunya perbezaan adalah bahawa bukan yang kali terakhir dalam, mula-mula keluar, 130 00:07:54,950 --> 00:07:57,480 anda mempunyai asas masuk dahulu, keluar. 131 00:07:57,480 --> 00:07:59,460 Mungkin jika anda menunggu untuk pergi ke konsert, 132 00:07:59,460 --> 00:08:04,260 anda tidak akan gembira jika anda mempunyai timbunan bukan barisan. 133 00:08:04,260 --> 00:08:07,730 Sebagai orang terakhir yang datang akan menjadi orang pertama yang memasuki konsert itu. 134 00:08:07,730 --> 00:08:09,760 Anda mungkin tidak akan gembira. 135 00:08:09,760 --> 00:08:15,020 Dalam giliran, orang pertama yang masuk juga orang pertama yang keluar. 136 00:08:15,020 --> 00:08:18,720 Jadi dalam takrif barisan, di samping mempunyai saiz dalam array, 137 00:08:18,720 --> 00:08:23,360 anda juga perlu mempunyai kepala, yang merupakan indeks kepada ketua tindanan. 138 00:08:23,360 --> 00:08:29,000 Jadi elemen pertama sekarang. 139 00:08:29,000 --> 00:08:32,710 Enqueue adalah perkara yang sama seperti menolak untuk susunan. 140 00:08:32,710 --> 00:08:34,980 Jika anda sangat naif, anda hanya akan berkata, 141 00:08:34,980 --> 00:08:39,289 baik, saya hanya boleh melakukan perkara yang sama seperti yang saya lakukan untuk menolak. 142 00:08:39,289 --> 00:08:44,030 Saya hanya boleh memeriksa jika ia bukan di luar kemampuan itu. 143 00:08:44,030 --> 00:08:48,760 Jika ia, saya kembali palsu, jika tidak, saya hanya boleh mengeksport nilai baru 144 00:08:48,760 --> 00:08:50,630 dan kemudian kenaikan saiz. 145 00:08:50,630 --> 00:08:52,750 Tetapi mengapa ini salah? 146 00:08:52,750 --> 00:08:55,010 Mari kita lihat contoh ini. 147 00:08:55,010 --> 00:08:57,020 Saya cuba untuk enqueue sekumpulan barangan, 148 00:08:57,020 --> 00:08:58,390 dan kemudian saya akan dequeue dan enqueue. 149 00:08:58,390 --> 00:09:00,550 Ada banyak arahan, tetapi ia sangat mudah. 150 00:09:00,550 --> 00:09:04,790 Saya akan enqueue 5, jadi tambah 5, dan kemudian 7, 151 00:09:04,790 --> 00:09:09,310 1, 4, 6, dan kemudian saya mahu dequeue sesuatu, 152 00:09:09,310 --> 00:09:12,000 yang bermaksud bahawa saya akan mengeluarkan elemen pertama. 153 00:09:12,000 --> 00:09:14,640 Jadi saya akan mengeluarkan nombor 3, bukan? 154 00:09:14,640 --> 00:09:17,320 Elemen pertama. Okay. 155 00:09:17,320 --> 00:09:21,450 Sekarang, jika saya cuba untuk enqueue sesuatu yang lain, apa yang akan berlaku? 156 00:09:21,450 --> 00:09:24,290 Menurut pelaksanaan saya, 157 00:09:24,290 --> 00:09:31,040 Saya akan meletakkan nombor seterusnya dalam q.size indeks. 158 00:09:31,040 --> 00:09:35,140 Dalam kes ini, saiz adalah 8, 159 00:09:35,140 --> 00:09:38,640 supaya indeks 8 akan menjadi di sini di kedudukan terakhir. 160 00:09:38,640 --> 00:09:43,900 Jika saya cuba untuk enqueue 1 di sini, saya akan menulis ganti jawatan terakhir 161 00:09:43,900 --> 00:09:45,870 bilangan 1, yang benar-benar salah. 162 00:09:45,870 --> 00:09:49,870 Apa yang saya mahu lakukan adalah membalut sekitar dan pergi ke kedudukan pertama. 163 00:09:49,870 --> 00:09:52,870 Mungkin anda hanya akan berkata, baik, saya hanya perlu untuk memeriksa 164 00:09:52,870 --> 00:09:55,600 jika saya benar-benar boleh meletakkan sesuatu di sana. 165 00:09:55,600 --> 00:09:58,560 Jika tidak, saya hanya berkata, oh, kapasiti penuh baru 166 00:09:58,560 --> 00:10:02,010 sebenarnya kapasiti - 1, dan anda tidak boleh meletakkan elemen di sana. 167 00:10:02,010 --> 00:10:06,150 Tetapi apa yang menjadi masalah? Masalahnya ialah bahawa jika saya hanya dequeue semua di sini 168 00:10:06,150 --> 00:10:08,240 dan kemudian saya cuba untuk menambah sesuatu yang lain, ia hanya akan berkata, 169 00:10:08,240 --> 00:10:11,210 dengan baik, anda pada kapasiti penuh, yang 0. 170 00:10:11,210 --> 00:10:13,620 Jadi baris gilir anda hilang. 171 00:10:13,620 --> 00:10:16,990 Anda mempunyai untuk membalut di sekitar, dan satu cara melingkari 172 00:10:16,990 --> 00:10:22,040 bahawa kalian belajar di psets berwawasan dan lain-lain telah menggunakan arena. 173 00:10:22,040 --> 00:10:29,090 Anda boleh cuba di rumah untuk memahami kenapa anda akan berbuat q.size + q.head 174 00:10:29,090 --> 00:10:31,080 kapasiti arena, tetapi jika anda lihat di sini, 175 00:10:31,080 --> 00:10:34,760 kita dapat melihat bahawa ia berfungsi. 176 00:10:34,760 --> 00:10:37,760 Jadi dalam contoh yang lepas, q.size adalah 8 177 00:10:37,760 --> 00:10:47,590 dan kepala adalah 1, kerana ia adalah kedudukan ini di sini array. 178 00:10:47,590 --> 00:10:51,970 Jadi ia akan menjadi 8 + 1, 9. Mod kapasiti 9 akan menjadi 0. 179 00:10:51,970 --> 00:10:56,640 Ia akan pergi kepada indeks 0. Kami akan berada dalam kedudukan yang betul. 180 00:10:56,640 --> 00:10:59,750 Dan kemudian cuba giliran di rumah. 181 00:10:59,750 --> 00:11:04,950 Beberapa perkara yang penting: cuba untuk memahami perbezaan antara timbunan dan barisan. 182 00:11:04,950 --> 00:11:11,620 Di rumah, cuba untuk mendapatkan sangat biasa dengan melaksanakan enqueue, dequeue, tolak dan pop. 183 00:11:11,620 --> 00:11:16,560 Dan juga memahami apabila anda perlu menggunakan setiap daripada mereka. 184 00:11:16,560 --> 00:11:22,830 >> Jadi mari kita berehat selama 10 saat dengan sekumpulan Pokemons. 185 00:11:22,830 --> 00:11:26,080 Dan sekarang mari kita kembali kepada struktur data. 186 00:11:26,080 --> 00:11:29,770 Hash jadual. Ramai orang takut jadual hash. 187 00:11:29,770 --> 00:11:33,650 dalam masalah menetapkan 6, Eja Checker. 188 00:11:33,650 --> 00:11:35,980 Jadual hash dan cuba, ramai orang mula takut daripada mereka. 189 00:11:35,980 --> 00:11:38,540 Mereka berfikir mereka begitu sukar untuk difahami. Yeah? 190 00:11:38,540 --> 00:11:41,490 [Rob Bowden] Masalah menetapkan 5. >> Masalah menetapkan 5, yeah. Terima kasih Rob. 191 00:11:41,490 --> 00:11:43,370 Yeah. Enam adalah Huff n 'Puff, yeah. 192 00:11:43,370 --> 00:11:49,340 Masalah menetapkan 5 telah Eja Checker, dan anda terpaksa menggunakan sama ada jadual hash atau cuba. 193 00:11:49,340 --> 00:11:55,360 Ramai orang berfikir bahawa mereka super sukar untuk memahami, tetapi ia sebenarnya agak mudah. 194 00:11:55,360 --> 00:12:01,290 Apa adalah jadual hash, pada dasarnya? Satu jadual hash adalah pelbagai senarai berkaitan. 195 00:12:01,290 --> 00:12:06,730 Satu-satunya perbezaan antara pelbagai dan meja hash 196 00:12:06,730 --> 00:12:09,730 ialah di jadual hash anda mempunyai sesuatu yang dipanggil fungsi hash. 197 00:12:09,730 --> 00:12:12,080 Apakah fungsi hash? 198 00:12:12,080 --> 00:12:13,970 Saya tidak tahu jika anda semua boleh membaca di sini. 199 00:12:13,970 --> 00:12:16,090 Ini adalah satu contoh jadual hash. 200 00:12:16,090 --> 00:12:19,220 Jadi, anda boleh melihat bahawa anda mempunyai pelbagai dengan 31 elemen. 201 00:12:19,220 --> 00:12:22,440 Dan apa yang kita lakukan dalam jadual hash adalah mempunyai fungsi hash 202 00:12:22,440 --> 00:12:26,660 yang akan menterjemahkan kunci, setiap int kepada indeks. 203 00:12:26,660 --> 00:12:31,740 Jika, sebagai contoh, jika saya mahu memilih untuk B. Harrison, 204 00:12:31,740 --> 00:12:34,190 Saya akan meletakkan B. Harrison dalam fungsi hash saya, 205 00:12:34,190 --> 00:12:36,960 dan fungsi hash akan kembali 24. 206 00:12:36,960 --> 00:12:40,930 Jadi saya tahu bahawa saya mahu untuk menyimpan B. Harrison di 24. 207 00:12:40,930 --> 00:12:46,580 Supaya perbezaan di antara hanya mempunyai satu pameran dan mempunyai jadual hash. 208 00:12:46,580 --> 00:12:48,740 Dalam jadual hash anda akan mempunyai fungsi yang akan memberitahu anda 209 00:12:48,740 --> 00:12:54,740 di mana untuk menyimpan data yang anda mahu menyimpan. 210 00:12:54,740 --> 00:12:57,040 Bagi fungsi hash, anda mahu mencari fungsi hash 211 00:12:57,040 --> 00:13:00,600 yang berketentuan dan baik diedarkan. 212 00:13:00,600 --> 00:13:07,810 Seperti yang anda boleh lihat di sini, anda lihat bahawa banyak data yang saya mahu ke kedai sebenarnya 19 213 00:13:07,810 --> 00:13:12,470 bukannya menggunakan 31 dan 30 dan 29, yang semuanya percuma. 214 00:13:12,470 --> 00:13:16,920 Jadi fungsi hash yang saya digunakan tidak dengan baik-diedarkan. 215 00:13:16,920 --> 00:13:20,710 Apabila kita katakan yang diedarkan, ia bermakna bahawa kita mahu, 216 00:13:20,710 --> 00:13:26,520 kasar, sekurang-kurangnya 1 atau 2 untuk setiap satu daripada - 217 00:13:26,520 --> 00:13:32,190 seperti, perbezaan sebanyak 1 atau 2 untuk setiap satu daripada indeks dalam tatasusunan. 218 00:13:32,190 --> 00:13:43,950 Anda ingin mempunyai, secara kasar, jumlah yang sama unsur-unsur dalam setiap senarai dikaitkan dalam array. 219 00:13:43,950 --> 00:13:48,600 Dan ia mudah untuk memeriksa jika ia sah dalam jadual hash, melihat sebagai jadual hash. 220 00:13:48,600 --> 00:13:51,770 Kemudian >> pokok. Ini adalah pokok. 221 00:13:51,770 --> 00:13:56,400 Pokok dalam bidang sains komputer adalah terbalik untuk sebab-sebab tertentu. 222 00:13:56,400 --> 00:14:00,150 Jadi di sini anda mempunyai akar pohon dan kemudian daun. 223 00:14:00,150 --> 00:14:05,630 Anda hanya perlu tahu tatanama untuk ibu bapa dan kanak-kanak. 224 00:14:05,630 --> 00:14:12,880 Setiap nod mempunyai anak-anak, yang adalah nod yang di bawah induk. 225 00:14:12,880 --> 00:14:19,660 Jadi, sebagai contoh, 2 akan menjadi induk untuk 3 dan bagi kanak-kanak yang lain di sana, 226 00:14:19,660 --> 00:14:25,290 manakala 3 akan menjadi ibu bapa untuk 1 dan kanak-kanak lain yang ada. 227 00:14:25,290 --> 00:14:29,990 Dan 1 akan menjadi kanak-kanak 3, dan sebagainya. 228 00:14:29,990 --> 00:14:34,610 Kami mempunyai sesuatu yang lebih menarik, yang dipanggil pokok carian binari, 229 00:14:34,610 --> 00:14:39,040 di mana semua nilai-nilai di sebelah kanan nod 230 00:14:39,040 --> 00:14:41,660 akan berada di sebelah kanan, di sini - di sebelah kanan, 231 00:14:41,660 --> 00:14:46,780 akan menjadi lebih besar daripada unsur di dalam akar. 232 00:14:46,780 --> 00:14:49,780 Jadi jika saya mempunyai nombor 5 di sini, semua unsur-unsur di sebelah kanan 233 00:14:49,780 --> 00:14:51,940 akan menjadi lebih besar daripada 5, dan di sebelah kiri 234 00:14:51,940 --> 00:14:56,770 semua elemen-elemen akan menjadi kurang daripada 5. 235 00:14:56,770 --> 00:14:58,780 Mengapa ini berguna? 236 00:14:58,780 --> 00:15:01,660 Nah, jika saya mahu untuk memeriksa jika nombor 7 di sini, sebagai contoh, 237 00:15:01,660 --> 00:15:05,960 Saya hanya pergi ke 5 pertama dan saya akan lihat, adalah 7 yang lebih besar atau kurang daripada 5? 238 00:15:05,960 --> 00:15:09,540 Ia lebih besar, jadi saya tahu ia akan perlu di sebelah kanan pokok itu. 239 00:15:09,540 --> 00:15:13,980 Jadi saya mempunyai barangan apatah lagi untuk melihat. 240 00:15:13,980 --> 00:15:19,520 Dalam pelaksanaan pokok carian binari, nod, saya hanya akan perlu mempunyai data, 241 00:15:19,520 --> 00:15:21,750 jadi int n; anda juga boleh mempunyai rentetan 242 00:15:21,750 --> 00:15:23,630 atau apa sahaja yang anda mahu. 243 00:15:23,630 --> 00:15:28,100 Anda hanya perlu berhati-hati kepada menentukan apa yang lebih besar, apa yang kurang. 244 00:15:28,100 --> 00:15:30,390 Jadi jika anda mempunyai tali, sebagai contoh, anda boleh menentukan 245 00:15:30,390 --> 00:15:34,690 bahawa semua perkara-perkara di sebelah kanan akan mempunyai panjang yang lebih besar, 246 00:15:34,690 --> 00:15:40,940 kiri akan mempunyai panjang yang lebih rendah, jadi ia benar-benar terpulang kepada anda. 247 00:15:40,940 --> 00:15:44,930 >> Bagaimana saya boleh melaksanakan mencari untuk BST? 248 00:15:44,930 --> 00:15:47,840 Perkara pertama yang kita perlu lakukan adalah memeriksa jika akar adalah NULL. 249 00:15:47,840 --> 00:15:50,920 Jika ia NULL, ia bermakna bahawa perkara yang tidak ada 250 00:15:50,920 --> 00:15:53,330 kerana anda tidak mempunyai pokok, bukan? 251 00:15:53,330 --> 00:15:55,790 Jadi saya kembali palsu. 252 00:15:55,790 --> 00:15:58,740 Jika tidak, saya akan memeriksa jika nombor adalah lebih besar 253 00:15:58,740 --> 00:16:01,720 daripada nilai dalam akar. 254 00:16:01,720 --> 00:16:04,250 Saya akan cuba untuk mencari unsur di sebelah kanan 255 00:16:04,250 --> 00:16:08,590 pokok itu. 256 00:16:08,590 --> 00:16:11,310 Anda melihat bahawa saya menggunakan rekursi sini. 257 00:16:11,310 --> 00:16:14,150 Dan kemudian jika ia kurang, saya akan melihat kiri. 258 00:16:14,150 --> 00:16:18,330 Dan akhirnya, jika tidak, jika ia tidak kurang atau tidak lebih besar, 259 00:16:18,330 --> 00:16:20,660 ia bermakna bahawa itu nilai itu sendiri. 260 00:16:20,660 --> 00:16:23,010 Jadi saya hanya kembali benar. 261 00:16:23,010 --> 00:16:26,360 Anda boleh lihat di sini bahawa saya digunakan jika, jika, jika. 262 00:16:26,360 --> 00:16:30,820 Dan ingat, dalam kuiz 0, kita mempunyai masalah yang mempunyai jika, jika, jika, 263 00:16:30,820 --> 00:16:32,780 dan anda sepatutnya mencari ketidakcekapan, 264 00:16:32,780 --> 00:16:35,180 dan ketidakcekapan itu yang anda gunakan jika. 265 00:16:35,180 --> 00:16:39,060 Anda sepatutnya menggunakan jika, lain jika, lain jika, dan lain. 266 00:16:39,060 --> 00:16:44,240 Jadi, yang harus saya gunakan lagi jika dan lain jika dan lagi di sini? 267 00:16:44,240 --> 00:16:46,200 Adakah sesiapa sahaja - yeah? 268 00:16:46,200 --> 00:16:51,140 [Pengucapan Pelajar, tidak kedengaran] 269 00:16:51,140 --> 00:16:53,480 Yang sempurna. Jadi dia mengatakan bahawa ia tidak penting, 270 00:16:53,480 --> 00:16:55,930 hanya kerana ketidakcekapan yang kita ada sebelum ini 271 00:16:55,930 --> 00:16:59,550 ialah kerana, mungkin jika beberapa keadaan telah berpuas hati, 272 00:16:59,550 --> 00:17:03,570 jadi anda telah dilakukan tindakan, tetapi kemudian anda akan menyemak semua syarat-syarat lain. 273 00:17:03,570 --> 00:17:06,319 Tetapi dalam kes ini, ia kembali dengan segera, supaya ia tidak perkara itu. 274 00:17:06,319 --> 00:17:09,220 Jadi anda tidak perlu menggunakan lagi jika. 275 00:17:09,220 --> 00:17:11,740 >> Dan akhirnya, mari kita bercakap tentang cuba, 276 00:17:11,740 --> 00:17:13,800 yang merupakan kegemaran semua orang. 277 00:17:13,800 --> 00:17:15,980 Cuba adalah pokok tatasusunan. 278 00:17:15,980 --> 00:17:20,369 Ia sangat cepat untuk mencari nilai-nilai, tetapi ia menggunakan banyak memori. 279 00:17:20,369 --> 00:17:22,530 Dan ia biasanya untuk menapis kata-kata, jadi apabila anda 280 00:17:22,530 --> 00:17:27,920 mahu melaksanakan, sebagai contoh, saya tidak tahu, seperti buku telefon di dalam telefon anda 281 00:17:27,920 --> 00:17:30,440 dan anda mahu dapat menaip B 282 00:17:30,440 --> 00:17:32,510 dan hanya mempunyai nama-nama orang yang mempunyai B. 283 00:17:32,510 --> 00:17:37,960 Ia amat mudah untuk melaksanakan yang menggunakan cuba, sebagai contoh. 284 00:17:37,960 --> 00:17:39,820 Bagaimana anda menentukan nod di cuba? 285 00:17:39,820 --> 00:17:43,910 Anda hanya perlu mempunyai bool yang akan is_word. 286 00:17:43,910 --> 00:17:48,660 Yang mewakili bahawa menggunakan semua watak-watak sebelum nod itu, 287 00:17:48,660 --> 00:17:51,920 anda mampu untuk membentuk perkataan, 288 00:17:51,920 --> 00:17:57,230 dan kemudian anda akan mempunyai pelbagai petunjuk untuk nod. 289 00:17:57,230 --> 00:18:03,120 Bolehkah anda melihat bahawa kita mempunyai pelbagai nod ibu bapa, jadi nod * pelbagai? Yeah? 290 00:18:03,120 --> 00:18:06,050 Jadi mari kita lihat bagaimana yang akan bekerja. Untuk semak ejaan ini, 291 00:18:06,050 --> 00:18:08,230 kita mempunyai pelbagai 27 unsur, 292 00:18:08,230 --> 00:18:12,150 kerana kami mempunyai semua huruf ditambah koma atas itu. 293 00:18:12,150 --> 00:18:17,800 Sebelum sini saya hanya akan menggunakan 2 kerana saya mahu dapat untuk menulis di papan. 294 00:18:17,800 --> 00:18:20,230 Okay. Jadi ini adalah satu contoh cuba. 295 00:18:20,230 --> 00:18:25,600 Jika saya hanya menentukan nod pertama, saya akan mempunyai pelbagai elemen 2 296 00:18:25,600 --> 00:18:29,290 yang 2 petunjuk untuk NULL, jadi saya hanya meletakkan 'a' dan 'b'. 297 00:18:29,290 --> 00:18:32,430 Dan saya akan mempunyai bool yang mengatakan is_word. 298 00:18:32,430 --> 00:18:34,420 Ia akan menjadi palsu untuk yang pertama, 299 00:18:34,420 --> 00:18:37,370 hanya kerana, sebelum itu anda tidak mempunyai mana-mana aksara. 300 00:18:37,370 --> 00:18:40,900 Jadi perkataan kosong bukan perkataan. Jadi ia palsu. 301 00:18:40,900 --> 00:18:46,320 Jika saya ingin menambah 'a' kepada kamus ini, apa yang saya perlu lakukan? 302 00:18:46,320 --> 00:18:49,760 Saya hanya perlu malloc nod baru untuk 'a', 303 00:18:49,760 --> 00:18:54,630 dan kemudian menambah perkataan kepada benar. 304 00:18:54,630 --> 00:19:00,180 Jadi ia hanya mewakili bahawa setelah 'a' akan menjadi benar. Masuk akal? 305 00:19:00,180 --> 00:19:04,120 Kemudian jika saya ingin menambah 'ba', saya akan perlu malloc 1 untuk 'b', 306 00:19:04,120 --> 00:19:07,550 dan kemudian saya akan menubuhkan boolean untuk palsu, 307 00:19:07,550 --> 00:19:10,160 kerana 'b' dengan sendirinya bukanlah satu perkataan. 308 00:19:10,160 --> 00:19:13,010 Kemudian saya akan malloc satu sama lain untuk 'a', jadi 'ba', 309 00:19:13,010 --> 00:19:16,290 dan kemudian saya akan menubuhkan ia adalah satu perkataan untuk benar. 310 00:19:16,290 --> 00:19:18,950 Kerana 'ba' adalah perkataan. 311 00:19:18,950 --> 00:19:21,910 Dan kemudian jika saya mahu melihat jika 'b' di dalam kamus ini, 312 00:19:21,910 --> 00:19:26,730 Saya hanya boleh pergi ke salah satu yang pertama, 'b'. Saya turun ke bawah, dan saya melihat adalah perkataan, dan ia berkata palsu. 313 00:19:26,730 --> 00:19:30,110 Jadi ia bukan satu perkataan. Jika saya mahu menyemak 'ba', 314 00:19:30,110 --> 00:19:38,010 Saya pergi ke yang pertama, 'b', dan kemudian pergi ke 'a', dan saya melihat benar, jadi ia adalah satu perkataan. Masuk akal? 315 00:19:38,010 --> 00:19:41,950 Ramai orang mendapatkan keliru dengan cuba. Tidak? 316 00:19:41,950 --> 00:19:44,740 >> Akhirnya, pengekodan Huffman. Huffman pengekodan adalah sangat berguna 317 00:19:44,740 --> 00:19:47,550 untuk menyimpan memori dan memampatkan fail teks, 318 00:19:47,550 --> 00:19:52,270 hanya kerana banyak kali anda menggunakan 'a' dan 'e', ​​sebagai contoh, 319 00:19:52,270 --> 00:19:57,710 dalam dokumen anda, tetapi saya tidak tahu sekiranya kamu menggunakan 'q' atau 'z' sebanyak. 320 00:19:57,710 --> 00:20:02,040 Mempunyai hanya 1 bait untuk setiap watak tunggal, 321 00:20:02,040 --> 00:20:08,520 setiap tunggal - 256 aksara yang kita ada dalam jadual ASCII tidak begitu optimum, 322 00:20:08,520 --> 00:20:11,410 hanya kerana terdapat beberapa watak yang anda gunakan banyak lagi, 323 00:20:11,410 --> 00:20:15,180 jadi anda mungkin perlu menggunakan memori kurang bagi mereka. 324 00:20:15,180 --> 00:20:17,560 Bagaimana saya menggunakan pengekodan Huffman? 325 00:20:17,560 --> 00:20:20,010 Kita perlu melakukan pokok Huffman. 326 00:20:20,010 --> 00:20:23,370  Satu pokok Huffman mempunyai nod 327 00:20:23,370 --> 00:20:27,760 yang mempunyai simbol yang akan menjadi seperti, 'a', 'b', 'c', surat itu, 328 00:20:27,760 --> 00:20:32,990 apa sahaja surat yang anda ada, frekuensi yang adalah kekerapan bahawa perkataan muncul dalam teks, 329 00:20:32,990 --> 00:20:36,280 bahawa anda telah mencipta pokok Huffman bagi, 330 00:20:36,280 --> 00:20:41,800 dan kemudian nod yang akan menunjukkan di sebelah kiri pokok Huffman 331 00:20:41,800 --> 00:20:47,210 dan satu lagi nod yang akan menunjukkan ke kanan. Jadi hanya suka pokok. 332 00:20:47,210 --> 00:20:49,440 Bagaimana anda membina pokok Huffman? 333 00:20:49,440 --> 00:20:54,020 Anda akan memilih 2 nod yang mempunyai frekuensi paling rendah. 334 00:20:54,020 --> 00:20:56,490 Jika anda mempunyai seri anda akan memilih 2 nod 335 00:20:56,490 --> 00:20:59,870 yang mempunyai nilai-nilai ASCII paling rendah juga. 336 00:20:59,870 --> 00:21:02,420 Kemudian anda akan mewujudkan satu pokok baru daripada orang-orang 2 nod 337 00:21:02,420 --> 00:21:08,030 yang akan mempunyai frekuensi yang digabungkan dalam nod induk. 338 00:21:08,030 --> 00:21:13,240 Dan kemudian anda akan membuang 2 kanak-kanak dari hutan 339 00:21:13,240 --> 00:21:15,570 dan menggantikannya dengan induk. 340 00:21:15,570 --> 00:21:18,930 Dan anda akan ulang lagi sehingga anda hanya mempunyai 1 pokok di hutan. 341 00:21:18,930 --> 00:21:23,840 Jadi mari kita lihat bagaimana yang akan anda lakukan pokok Huffman untuk ZAMYLA. 342 00:21:23,840 --> 00:21:29,220 Anda boleh lihat di sini bahawa semua huruf mempunyai frekuensi 1 kecuali 'A'; yang mempunyai kekerapan 2. 343 00:21:29,220 --> 00:21:34,090 Jadi saya mencipta nod untuk semua surat yang saya dimasukkan ke dalam perintah nilai ASCII dan kekerapan. 344 00:21:34,090 --> 00:21:40,090 Jadi, jika saya mahu mencipta pokok yang pertama, ia akan menjadi dengan 'L' dan 'M'. 345 00:21:40,090 --> 00:21:43,100 Jadi ia di sini. Kekerapan pasangan akan menjadi 2 346 00:21:43,100 --> 00:21:49,470 kerana ia 1 + 1, maka 2 akan datang dengan frekuensi paling rendah adalah 'Y' dan 'Z'. 347 00:21:49,470 --> 00:21:53,180 Dan kemudian saya mempunyai semua daripada mereka menjadi - mempunyai kekerapan 2. 348 00:21:53,180 --> 00:22:00,470 Jadi yang mana orang-orang yang mempunyai nilai ASCII terendah yang seterusnya? 349 00:22:00,470 --> 00:22:04,830 'A' dan 'L'. Jadi saya mencipta nod baru, 350 00:22:04,830 --> 00:22:09,930 dan akhirnya, ia 4 dan 2, jadi 2 akan berada di sebelah kiri. 351 00:22:09,930 --> 00:22:12,430 Dan ini adalah pokok Huffman. 352 00:22:12,430 --> 00:22:16,060 Kemudian jika saya ingin menulis beberapa teks, 353 00:22:16,060 --> 00:22:24,440 seperti dalam binari untuk menukar kepada teks, menggunakan pokok Huffman adalah sangat mudah. 354 00:22:24,440 --> 00:22:30,220 Sebagai contoh, jika saya mengatakan bahawa bergerak ke kiri adalah 0 dan bergerak ke kanan adalah 1, 355 00:22:30,220 --> 00:22:32,410 Apakah yang akan mewakili? 356 00:22:32,410 --> 00:22:35,530 Jadi seperti 1, 1, jadi betul, betul, 357 00:22:35,530 --> 00:22:40,370 dan kemudian 0, kiri demikian akan menjadi L, dan kemudian 1, 0, 0. 358 00:22:40,370 --> 00:22:43,950 Jadi 1, 0, jadi hanya 1, 0, 'A'. 359 00:22:43,950 --> 00:22:47,540 Dan kemudian 0, 1, jadi 'Z'. 360 00:22:47,540 --> 00:22:52,170 Dan kemudian 1, 0, 0 - tidak ada. 361 00:22:52,170 --> 00:22:56,780 0, 0 akan 'Y', jadi malas. 362 00:22:56,780 --> 00:23:06,060 Jadi, itu semua bagi saya, Rob akan mengambil alih. 363 00:23:06,060 --> 00:23:08,400 >> [Rob Bowden] Jadi, minggu 7 barangan. 364 00:23:08,400 --> 00:23:11,390 Kami mempunyai banyak untuk pergi lebih benar-benar cepat. 365 00:23:11,390 --> 00:23:13,430 Pengendali Bitwise, buffer overflow, 366 00:23:13,430 --> 00:23:16,760 Perpustakaan CS50, maka HTML, HTTP, CSS. 367 00:23:16,760 --> 00:23:20,990 Semua dalam seperti 15 hingga 20 minit. 368 00:23:20,990 --> 00:23:24,330 Pengendali Bitwise. Terdapat 6 daripada mereka yang anda perlu tahu. 369 00:23:24,330 --> 00:23:31,200 Bitwise dan, bitwise atau, XOR, peralihan kiri, anjakan betul, dan tidak. 370 00:23:31,200 --> 00:23:35,420 Beralih betul dan tidak anda hampir tidak melihat dalam ceramah di semua. 371 00:23:35,420 --> 00:23:40,480 Kami akan pergi ke atas dengan cepat di sini, tetapi ia adalah baik untuk mengetahui bahawa ini adalah 6 yang wujud. 372 00:23:40,480 --> 00:23:45,070 Ingat bahawa pengendali bitwise adalah seperti apabila anda melakukan 3 + 4. 373 00:23:45,070 --> 00:23:49,420 Anda tidak berurusan dengan binari 3 dan 4. 374 00:23:49,420 --> 00:23:56,550 Dengan pengendali bitwise anda sebenarnya berurusan dengan bit individu nombor 3 dan 4. 375 00:23:56,550 --> 00:23:59,120 >> Jadi yang pertama yang kita akan katakan adalah bitwise tidak, 376 00:23:59,120 --> 00:24:02,340 dan semua ia adalah flip semua bit. 377 00:24:02,340 --> 00:24:05,500 Jadi di sini, jika anda menulis ini dalam C, kamu tidak menulisnya 378 00:24:05,500 --> 00:24:09,380 sebagai ~ 11011 atau apa sahaja, anda akan menulisnya suka ~ 4, 379 00:24:09,380 --> 00:24:12,970 dan kemudian ia akan flip perwakilan perduaan 4. 380 00:24:12,970 --> 00:24:24,800 Jadi di sini, ~ beberapa nombor perduaan 1101101 akan betul-betul flip semua 1 untuk 0 dan semua 0 untuk 1 ini. 381 00:24:24,800 --> 00:24:27,600 Seperti yang saya katakan di sana, penggunaan yang kerap ini, 382 00:24:27,600 --> 00:24:30,830 dan kita akan melihat dalam sedikit, adalah seperti kita mahu datang dengan beberapa bilangan 383 00:24:30,830 --> 00:24:35,460 mana semua bit adalah 1, kecuali salah seorang daripada mereka. 384 00:24:35,460 --> 00:24:38,560 Jadi ia biasanya lebih mudah untuk menyatakan bilangan 385 00:24:38,560 --> 00:24:40,630 di mana hanya sedikit yang tunggal ditetapkan, 386 00:24:40,630 --> 00:24:44,650 dan kemudian mengambil ~ itu, jadi setiap bit yang lain ditetapkan kecuali satu itu. 387 00:24:44,650 --> 00:24:50,300 Jadi itulah yang kita akan menggunakan lebih dalam sedikit. 388 00:24:50,300 --> 00:24:58,220 >> Bitwise atau. Berikut adalah 2 nombor perduaan, dan ini 2 nombor 389 00:24:58,220 --> 00:25:00,780 cukup wakil, kerana mereka mewakili setiap mungkin 390 00:25:00,780 --> 00:25:07,290 gabungan bit yang anda dapat perlu untuk beroperasi pada. 391 00:25:07,290 --> 00:25:13,540 Di sini, apabila saya or'd setiap bit, kami hanya akan membandingkan lurus ke bawah. 392 00:25:13,540 --> 00:25:15,410 Jadi pada sebelah kiri kita mempunyai 1 dan 1. 393 00:25:15,410 --> 00:25:20,510 Apabila saya Bitwise | mereka, apa yang saya akan dapat? Satu. 394 00:25:20,510 --> 00:25:25,320 Kemudian Bitwise | 0 dan 1 yang akan memberi saya? Satu. 395 00:25:25,320 --> 00:25:27,840 Bitwise 1 dan 0 akan menjadi perkara yang sama, satu. 396 00:25:27,840 --> 00:25:31,880 Bitwise 0 | 0 akan memberikan saya 0. 397 00:25:31,880 --> 00:25:37,300 Jadi satu-satunya kes di mana saya mendapat 0 adalah di 0 | 0 kes. 398 00:25:37,300 --> 00:25:40,020 Dan anda boleh berfikir bahawa sama seperti ORS logik anda. 399 00:25:40,020 --> 00:25:44,830 Jadi, jika anda berfikir 1 sebagai benar dan 0 sebagai palsu, perkara yang sama berlaku di sini. 400 00:25:44,830 --> 00:25:50,040 Benar atau benar adalah benar, benar atau salah adalah benar. 401 00:25:50,040 --> 00:25:57,150 Palsu atau benar adalah benar; palsu atau palsu adalah satu-satunya yang sebenarnya palsu. 402 00:25:57,150 --> 00:26:00,100 Berikut adalah contoh yang anda perlu tahu 403 00:26:00,100 --> 00:26:05,160 sebagai contoh yang cukup baik apabila pengendali Bitwise digunakan. 404 00:26:05,160 --> 00:26:08,660 Di sini jika kita atau modal 'A' dengan Ox20, 405 00:26:08,660 --> 00:26:11,830 dan kita akan melihat ini dalam satu saat, kita akan mendapat sesuatu. 406 00:26:11,830 --> 00:26:16,020 Dan jika kita atau huruf kecil 'a' dengan Ox20, kita akan mendapat sesuatu. 407 00:26:16,020 --> 00:26:26,750 Jadi mari kita tarik sehingga jadual ASCII. 408 00:26:26,750 --> 00:26:34,000 Okay. Di sini kita melihat bahawa 'A' adalah - 409 00:26:34,000 --> 00:26:36,920 di sini kita mempunyai 'A' adalah perpuluhan 65. 410 00:26:36,920 --> 00:26:45,120 Tetapi saya akan pergi dengan perenambelasan, yang Ox41. 411 00:26:45,120 --> 00:26:48,280 Agak pasti kita melihat ia di dalam kelas. Saya fikir kita melihat ia di dalam kelas 412 00:26:48,280 --> 00:26:52,730 bahawa ia agak mudah untuk menukar daripada perenambelasan kepada perduaan. 413 00:26:52,730 --> 00:26:55,280 Jadi di sini, jika saya mahu meletakkan 4 ke dalam binari, 414 00:26:55,280 --> 00:26:59,550 yang hanya akan menjadi 0100. 415 00:26:59,550 --> 00:27:03,620 Ini adalah tempat 1, tempat 2, tempat 4, jadi ini ialah 4. 416 00:27:03,620 --> 00:27:08,550 Kemudian saya boleh berpecah 1 ke dalam binari, yang akan menjadi 0001. 417 00:27:08,550 --> 00:27:14,280 Dan hal ini akan menjadi perwakilan 'A' dalam perduaan. 418 00:27:14,280 --> 00:27:22,720 Mengambil huruf kecil 'a', ia kini akan menjadi Ox61, 419 00:27:22,720 --> 00:27:27,050 di mana, membelah ini sehingga ke dalam binari, jadi 6 - 420 00:27:27,050 --> 00:27:37,830 Mari kita benar-benar melakukannya - ada tidak pemadam? Pemadam. 421 00:27:37,830 --> 00:27:48,220 Ox61. Jadi membelah 6 ke dalam binari akan menjadi 0 + 4 + 2 + 0. 422 00:27:48,220 --> 00:27:54,610 Dan pemisahan 1 akan menjadi 0001. 423 00:27:54,610 --> 00:27:56,520 Melihat perbezaan antara ini 2, 424 00:27:56,520 --> 00:28:04,250 kita melihat bahawa satu-satunya perbezaan antara huruf kecil dan 'A' modal agak tunggal ini. 425 00:28:04,250 --> 00:28:11,810 Jadi datang kembali ke sini - okay. 426 00:28:11,810 --> 00:28:15,920 Berbalik kepada di sini, jika kita melihat apa yang sedikit Ox20 itu, 427 00:28:15,920 --> 00:28:22,210 jadi pemisahan Ox20 ke binari yang, 428 00:28:22,210 --> 00:28:27,310 adalah 0010, 0000. 429 00:28:27,310 --> 00:28:33,470 Ox20, satu-satunya sedikit yang ditetapkan agak ini yang kita bimbang dengan, 430 00:28:33,470 --> 00:28:38,210 dengan beralih antara modal dan huruf kecil 'a'. 431 00:28:38,210 --> 00:28:47,610 Jika saya atau 'A', yang satu ini, 'A', 432 00:28:47,610 --> 00:28:50,580 jika saya atau 'A' dengan Ox20, 433 00:28:50,580 --> 00:28:53,490 apa yang saya akan dapat? 434 00:28:53,490 --> 00:28:58,960 [Pelajar, didengar] >> Huruf kecil 'a', kerana ia akan flip sedikit ini kepada 1. 435 00:28:58,960 --> 00:29:04,170 Dan jika saya atau 'a' dengan Ox20, apa yang saya akan dapat? 436 00:29:04,170 --> 00:29:08,780 Huruf kecil, kerana hanya oring 'a' dengan Ox20, 437 00:29:08,780 --> 00:29:14,580 Saya hanya akan oring bit tunggal ini kepada 1, ia sudah menjadi 1, maka ia tidak mengapa. 438 00:29:14,580 --> 00:29:17,960 Oleh itu, kita mendapatkan 'a' dan 'a'. 439 00:29:17,960 --> 00:29:24,820 >> Bitwise dan. Sekali lagi, kita boleh memikirkan ini sebagai rakan logik dan kami. 440 00:29:24,820 --> 00:29:28,180 Di sebelah kiri kita ada benar & benar. 441 00:29:28,180 --> 00:29:31,160 Ia akan menjadi benar, dan untuk semua kes, 442 00:29:31,160 --> 00:29:36,270 palsu & benar atau benar & palsu, atau palsu & palsu, 443 00:29:36,270 --> 00:29:38,550 tiada perkara-perkara yang benar. 444 00:29:38,550 --> 00:29:44,170 Jadi apa yang kita akhirnya mendapat adalah 1000. 445 00:29:44,170 --> 00:29:48,830 Jadi sekarang, di sini, di sini di mana saya telah menggunakan bitwise kepercayaan tidak, 446 00:29:48,830 --> 00:29:52,230 di mana kita mempunyai Ox20. 447 00:29:52,230 --> 00:29:54,350 Jadi ini adalah Ox20. 448 00:29:54,350 --> 00:29:59,570 Sekarang apa yang saya mahu lakukan, bitwise ~ daripada Ox20. 449 00:29:59,570 --> 00:30:03,600 Yang akan flip semua bit. 450 00:30:03,600 --> 00:30:09,330 Jadi saya mempunyai 1101, 1111. 451 00:30:09,330 --> 00:30:18,940 Dan sebagainya 'A' ANDkan dengan ~ Ox20 akan memberi saya apa? 452 00:30:18,940 --> 00:30:22,430 Sedikit sahaja kita benar-benar perlu untuk berfikir tentang yang satu ini, 453 00:30:22,430 --> 00:30:26,020 kerana, jika semua bit ini ditetapkan kepada 1, 454 00:30:26,020 --> 00:30:29,000 maka kita akan mendapat apa yang 'A' adalah, 455 00:30:29,000 --> 00:30:31,260 kecuali, mungkin, apa yang sedikit ini. 456 00:30:31,260 --> 00:30:34,460 Kerana jika ia adalah 1, kini ia akan ditetapkan kepada 0, 457 00:30:34,460 --> 00:30:39,810 kerana apa ini, ANDkan dengan ini akan menjadi 0. 458 00:30:39,810 --> 00:30:43,280 Jadi apa 'A' & ~ Ox20 akan memberikan saya? 459 00:30:43,280 --> 00:30:48,200 [Pelajar menjawab, didengar] >> Dan apa yang 'a' dan - ia 'A'. 460 00:30:48,200 --> 00:30:52,170 Dan apa yang 'a' & ~ Ox20 akan memberikan saya? 461 00:30:52,170 --> 00:30:56,720 'A.' Kerana ini kini merupakan 1. 462 00:30:56,720 --> 00:30:59,570 Anding dengan 0 akan menjadikannya sebagai 0, 463 00:30:59,570 --> 00:31:02,530 dan sekarang kita akan mendapat 'A'. 464 00:31:02,530 --> 00:31:06,600 >> Kedua-duanya adalah 'A', dan akhir sekali jenis ini, 465 00:31:06,600 --> 00:31:10,830 kita mempunyai XOR. Ia amat banyak seperti atau, 466 00:31:10,830 --> 00:31:14,400 kecuali ia bermakna secara khusus atau. 467 00:31:14,400 --> 00:31:18,420 Ini adalah seperti apa yang anda biasanya berfikir sebagai atau dalam dunia sebenar. 468 00:31:18,420 --> 00:31:23,190 Jadi yang anda lakukan sama ada 'x' atau 'y', tetapi tidak kedua-duanya. 469 00:31:23,190 --> 00:31:28,700 Di sini 1 ^ 1 akan menjadi 0. 470 00:31:28,700 --> 00:31:33,650 Kerana benar, ini adalah - ia tidak berfungsi sebagai baik dengan benar logik dan palsu 471 00:31:33,650 --> 00:31:37,150 sebagai bitwise & dan atau lakukan, 472 00:31:37,150 --> 00:31:40,100 tetapi benar ^ benar adalah palsu. 473 00:31:40,100 --> 00:31:44,810 Kerana kami hanya mahu kembali benar jika hanya seorang daripada mereka adalah benar. 474 00:31:44,810 --> 00:31:50,950 Jadi 1 ^ 1 adalah 0. Apa kira-kira 0 ^ 1? 475 00:31:50,950 --> 00:31:56,010 Ialah 1. 1 ^ 0 adalah 1, 0 ^ 0 adalah 0. 476 00:31:56,010 --> 00:32:03,890 Jadi dalam segala keadaan, 0 bitwise sesuatu 0 akan menjadi 0. 477 00:32:03,890 --> 00:32:10,270 1 bitwise sesuatu 0 atau 0 bitwise 1, 478 00:32:10,270 --> 00:32:14,660 jika ia | atau ^, ia akan menjadi 1, dan jika ia & ia akan menjadi 0. 479 00:32:14,660 --> 00:32:20,850 Dan satu-satunya kes di mana 1 bitwise 1 bukan 1 adalah dengan eksklusif atau. 480 00:32:20,850 --> 00:32:24,580 Itu 0110. 481 00:32:24,580 --> 00:32:36,520 Jadi di sini sekarang, menggunakan XOR - jadi kami kembali pada 20. 482 00:32:36,520 --> 00:32:43,480 'A' ^ Ox20 adalah ini 2 bit kita membandingkan. 483 00:32:43,480 --> 00:32:50,020 Jadi 1 ^ 0 akan memberi saya apa? A satu. 484 00:32:50,020 --> 00:32:58,430 'A' ^ Ox20 akan berikan saya? Huruf kecil a. 485 00:32:58,430 --> 00:33:04,010 'A' ^ Ox20 akan berikan saya? Modal A. 486 00:33:04,010 --> 00:33:09,310 Kerana apa ini lakukan, XORing ini dengan Ox20 487 00:33:09,310 --> 00:33:15,380 berkesan Melibas apa sahaja sedikit ini. 488 00:33:15,380 --> 00:33:21,240 Jika ini adalah 0, ia kini akan menjadi 1. 489 00:33:21,240 --> 00:33:26,160 Oleh kerana ini adalah 1, 1 ^ 1 adalah 0. 490 00:33:26,160 --> 00:33:33,280 Jadi kami 'a' telah menjadi 'A' dan 'A' kita telah menjadi 'a'. 491 00:33:33,280 --> 00:33:36,910 Jadi XOR adalah cara yang benar-benar mudah hanya Melibas kes itu. 492 00:33:36,910 --> 00:33:39,960 Anda hanya mahu melelar lebih satu barisan huruf 493 00:33:39,960 --> 00:33:44,330 dan ganti kes setiap watak tunggal, 494 00:33:44,330 --> 00:33:50,680 anda hanya XOR segala-galanya dengan Ox20. 495 00:33:50,680 --> 00:33:55,220 >> Sekarang kita telah meninggalkan syif. Anjakan kiri hanya akan, pada dasarnya, 496 00:33:55,220 --> 00:34:01,250 menolak semua nombor ke dalam, atau ke kiri, dan masukkan 0 di belakang mereka. 497 00:34:01,250 --> 00:34:05,550 Jadi di sini kita mempunyai 00001101. 498 00:34:05,550 --> 00:34:08,560 Kita akan menolak 3 0 dalam dari kanan, 499 00:34:08,560 --> 00:34:13,580 dan kita mendapat 01.101.000. 500 00:34:13,580 --> 00:34:16,380 Dari segi nonbinary, 501 00:34:16,380 --> 00:34:24,699 kita melihat bahawa yang benar-benar menangani 13 kiri beralih dengan 3, yang memberikan kita 104. 502 00:34:24,699 --> 00:34:32,530 Peralihan Jadi kiri, kita lihat di sini, x << y pada dasarnya x * 2 ^ y. 503 00:34:32,530 --> 00:34:40,139 13 * 2 ^ 3, 2 ^ 3 adalah 8, jadi 13 * 8 adalah 104. 504 00:34:40,139 --> 00:34:45,679 Jika anda hanya berfikir tentang binari secara umum, bagaimana setiap angka, 505 00:34:45,679 --> 00:34:49,530 jika kita bermula dari kanan, ia adalah tempat yang 1 ini, maka tempat 2, maka tempat 4 ini. 506 00:34:49,530 --> 00:34:51,330 Jadi dengan menolak dalam 0 ini dari kanan, 507 00:34:51,330 --> 00:34:55,080 kami hanya menolak perkara-perkara yang berada di tempat yang 4 itu ke tempat yang 8 itu, 508 00:34:55,080 --> 00:34:57,920 dan perkara-perkara yang berada di tempat yang 8 itu ke tempat yang 16 itu. 509 00:34:57,920 --> 00:35:01,280 Setiap peralihan hanya mendarab dengan 2. Yeah? 510 00:35:01,280 --> 00:35:05,210 [Pelajar] Apa yang berlaku jika anda beralih dengan 5? 511 00:35:05,210 --> 00:35:10,790 [Bowden] Jika anda beralih sebanyak 5 anda hanya akan kehilangan angka. 512 00:35:10,790 --> 00:35:15,410 Tidak dapat tidak, ia adalah perkara yang sama. Seperti, integer hanya 32 bit, 513 00:35:15,410 --> 00:35:20,750 jadi jika anda menambah 2 integer benar-benar besar, ia hanya tidak sesuai dalam integer. 514 00:35:20,750 --> 00:35:23,660 Jadi ia adalah perkara yang sama di sini. Jika anda beralih dengan 5, 515 00:35:23,660 --> 00:35:25,650 kita hanya akan kehilangan satu itu. 516 00:35:25,650 --> 00:35:28,820 Dan itulah jenis apa yang saya maksudkan dengan "secara kasar," 517 00:35:28,820 --> 00:35:37,470 di mana jika anda beralih terlalu jauh, anda kehilangan bit. 518 00:35:37,470 --> 00:35:39,830 >> Peralihan Hak akan menjadi sebaliknya, 519 00:35:39,830 --> 00:35:43,090 di mana kita akan mendorong 0 ini kira akhirnya, 520 00:35:43,090 --> 00:35:48,400 dan untuk tujuan kami, isikan 0 daripada sebelah kiri. 521 00:35:48,400 --> 00:35:52,910 Jadi melakukan ini, kita pada dasarnya menterbalikkan apa yang kita telah sudah selesai. 522 00:35:52,910 --> 00:35:57,780 Dan kita melihat bahawa tiga 0 mengenai hak baru sahaja jatuh di luar, 523 00:35:57,780 --> 00:36:02,020 dan kami telah menolak 1101 sepanjang jalan ke kanan. 524 00:36:02,020 --> 00:36:08,380 Ini melakukan 104 >> 3, yang, berkesan, x / 2 ^ y. 525 00:36:08,380 --> 00:36:11,200 Jadi sekarang, di sini, ia adalah idea yang sama. 526 00:36:11,200 --> 00:36:18,720 Mengapa ia hanya kira-kira x / 2 ^ y, dan tidak benar-benar x / 2 ^ y? 527 00:36:18,720 --> 00:36:22,240 Kerana jika saya telah beralih dengan 4, saya akan kehilangan 1. 528 00:36:22,240 --> 00:36:25,950 Pada asasnya, apa yang anda fikirkan, hanya memikirkan bahagian integer amnya. 529 00:36:25,950 --> 00:36:31,070 Jadi, seperti 5/2 adalah 2. Ia bukan 2.5. 530 00:36:31,070 --> 00:36:35,000 Ia adalah idea yang sama di sini. Apabila kita bagi dengan 2, 531 00:36:35,000 --> 00:36:39,910 kita boleh kehilangan bit ganjil di sepanjang jalan. 532 00:36:39,910 --> 00:36:43,870 Jadi sekarang - itu sahaja untuk bitwise. Itu sahaja yang anda perlu tahu. 533 00:36:43,870 --> 00:36:46,340 Ingat kes guna yang kita lihat di dalam kelas, 534 00:36:46,340 --> 00:36:49,340 seperti topeng sedikit berguna untuk pengusaha bitwise, 535 00:36:49,340 --> 00:36:53,220 atau anda menggunakan mereka untuk sedikit topeng. 536 00:36:53,220 --> 00:36:58,620 Huruf besar dan huruf kecil, penukaran adalah contoh yang cukup prototypical. 537 00:36:58,620 --> 00:37:01,640 >> Okay, jadi penampan serangan limpahan. 538 00:37:01,640 --> 00:37:05,110 Sesiapa ingat apa yang salah dengan fungsi ini? 539 00:37:05,110 --> 00:37:10,140 Notis kita diisytiharkan pelbagai 12 bait, 12 aksara, 540 00:37:10,140 --> 00:37:18,510 dan kemudian kita menyalin ke dalam buffer kami 12 aksara bar rentetan keseluruhan. 541 00:37:18,510 --> 00:37:25,080 Jadi apa masalahnya di sini? 542 00:37:25,080 --> 00:37:32,270 Keajaiban nombor 12 harus cukup banyak dengan segera pop keluar sebagai - mengapa 12? 543 00:37:32,270 --> 00:37:35,050 Bagaimana jika bar yang berlaku kepada lebih daripada 12 aksara? 544 00:37:35,050 --> 00:37:41,200 Bagaimana jika bar adalah berjuta-juta aksara? 545 00:37:41,200 --> 00:37:46,010 Di sini isu ini memcpy. Jika bar adalah cukup lama, 546 00:37:46,010 --> 00:37:50,330 ia akan hanya sepenuhnya - 'c', 'c' tidak peduli bahawa ia hanya 12 aksara; 547 00:37:50,330 --> 00:37:53,280 'C' tidak peduli bahawa ia tidak boleh memasukkan bahawa banyak bait. 548 00:37:53,280 --> 00:37:58,250 Ia hanya benar-benar akan menulis ganti char, 12 bytes kami diperuntukkan untuk itu, 549 00:37:58,250 --> 00:38:01,830 dan segala-galanya yang lalu dalam ingatan yang sebenarnya tidak tergolong dalam penimbal yang 550 00:38:01,830 --> 00:38:06,520 dengan apa sahaja bar tali itu. 551 00:38:06,520 --> 00:38:09,780 Jadi ini adalah gambar yang kita lihat di dalam kelas 552 00:38:09,780 --> 00:38:12,220 di mana kita mempunyai timbunan kami membesar. 553 00:38:12,220 --> 00:38:16,040 Anda perlu digunakan untuk gambar-gambar ini atau membiasakan diri dengan mereka sekali lagi. 554 00:38:16,040 --> 00:38:21,260 Kami telah timbunan kami membesar, alamat-alamat ingatan bermula 0 di atas 555 00:38:21,260 --> 00:38:26,270 dan berkembang ke suka 4 bilion di bawah. 556 00:38:26,270 --> 00:38:28,820 Kami mempunyai 'c' pelbagai kami di suatu tempat di ingatan, 557 00:38:28,820 --> 00:38:32,260 maka kita mempunyai penunjuk kami untuk menghalang hak di bawahnya, 558 00:38:32,260 --> 00:38:38,720 dan kemudian kita mempunyai rangka penunjuk yang disimpan di dalam alamat kembali dan timbunan rutin ibu bapa kita. 559 00:38:38,720 --> 00:38:40,800 Ingat apa yang alamat kembali itu? 560 00:38:40,800 --> 00:38:45,360 Ia apabila utama panggilan fungsi foo, panggilan bar fungsi, 561 00:38:45,360 --> 00:38:48,100 tidak dapat tidak, bar pulangan. 562 00:38:48,100 --> 00:38:52,610 Oleh itu, apabila pulangan bar, mereka perlu tahu bahawa ia akan kembali ke foo yang memanggilnya. 563 00:38:52,610 --> 00:39:01,360 Jadi alamat kembali adalah alamat fungsi bahawa ia mempunyai untuk kembali ke apabila fungsi pulangan. 564 00:39:01,360 --> 00:39:05,830 Sebab yang penting untuk serangan buffer overflow adalah kerana, dengan mudah, 565 00:39:05,830 --> 00:39:09,580 penggodam suka untuk menukar alamat kembali. 566 00:39:09,580 --> 00:39:14,950 Daripada pergi kembali ke foo, saya akan kembali ke mana sahaja penggodam mahu saya untuk kembali ke. 567 00:39:14,950 --> 00:39:17,760 Dan, dengan mudah, di mana penggodam yang sering mahu kembali ke 568 00:39:17,760 --> 00:39:22,400 adalah permulaan penampan yang kita asalnya mempunyai. 569 00:39:22,400 --> 00:39:26,170 Jadi notis, sekali lagi, Little India. 570 00:39:26,170 --> 00:39:28,490 Perkakas adalah contoh sistem India Little, 571 00:39:28,490 --> 00:39:34,140 jadi integer atau penunjuk disimpan dengan bait diterbalikkan. 572 00:39:34,140 --> 00:39:38,980 Jadi di sini kita lihat - adalah ini? Yeah. 573 00:39:38,980 --> 00:39:45,660 Kita melihat Ox80, OxC0, Ox35, OxO8. 574 00:39:45,660 --> 00:39:48,250 Ingat digit perenambelasan? 575 00:39:48,250 --> 00:39:50,640 Kami tidak membalikkan digit perenambelasan di Little India, 576 00:39:50,640 --> 00:39:56,110 kerana 2 digit perenambelasan membentuk satu bait, dan kami membalikkan bait. 577 00:39:56,110 --> 00:40:00,300 Itulah sebabnya kita tidak menyimpan, seperti, 80530CO8. 578 00:40:00,300 --> 00:40:07,520 Kami menyimpan, sebaliknya, setiap pasang 2 digit, bermula dari kanan. 579 00:40:07,520 --> 00:40:10,880 Alamat itu merujuk kepada alamat permulaan 580 00:40:10,880 --> 00:40:15,190 penimbal kita yang kita sebenarnya mahu salinan ke dalam di tempat pertama. 581 00:40:15,190 --> 00:40:19,230 Sebab itu berguna kerana, bagaimana jika penyerang 582 00:40:19,230 --> 00:40:24,100 kebetulan, bukannya mempunyai rentetan yang hanya 583 00:40:24,100 --> 00:40:27,060 rentetan tidak berbahaya seperti, nama mereka atau sesuatu, 584 00:40:27,060 --> 00:40:33,900 bagaimana jika, sebaliknya, tali yang hanya beberapa kod sewenang-wenangnya 585 00:40:33,900 --> 00:40:38,610 yang melakukan apa sahaja yang mereka mahu ia lakukan? 586 00:40:38,610 --> 00:40:45,630 Jadi mereka boleh - Saya tidak boleh berfikir apa-apa kod sejuk. 587 00:40:45,630 --> 00:40:47,780 Ia boleh jadi apa sahaja, walaupun. Apa-apa kod bencana. 588 00:40:47,780 --> 00:40:51,440 Jika mereka mahu, mereka hanya boleh melakukan sesuatu pada dosa seg, tetapi itu akan menjadi sia-sia. 589 00:40:51,440 --> 00:40:54,950 Mereka biasanya melakukannya untuk menggodam sistem anda. 590 00:40:54,950 --> 00:40:59,930 >> Okay. Perpustakaan CS50. 591 00:40:59,930 --> 00:41:04,800 Ini, pada dasarnya, getInt, getString, semua fungsi-fungsi yang kami berikan kepada anda. 592 00:41:04,800 --> 00:41:10,630 Jadi kita mempunyai * tali char, dan itu abstraksi yang kita meniup jauh 593 00:41:10,630 --> 00:41:12,450 pada satu ketika dalam sesuatu semester. 594 00:41:12,450 --> 00:41:18,220 Ingat bahawa rentetan hanya pelbagai aksara. 595 00:41:18,220 --> 00:41:23,240 Jadi di sini kita lihat versi ringkas getString. 596 00:41:23,240 --> 00:41:25,920 Anda harus melihat kembali ia untuk ingat bagaimana ia sebenarnya dilaksanakan. 597 00:41:25,920 --> 00:41:30,950 Maklumat utama adalah, notis kita terlibat dalam satu aksara pada satu masa 598 00:41:30,950 --> 00:41:34,570 dari standard in, yang seperti kita menaip pada papan kekunci. 599 00:41:34,570 --> 00:41:37,890 Jadi satu aksara pada satu masa, dan jika kita terlalu banyak watak-watak, 600 00:41:37,890 --> 00:41:40,580 jadi jika n + 1 adalah lebih besar daripada kapasiti, 601 00:41:40,580 --> 00:41:44,140 maka kita perlu meningkatkan kapasiti penampan kami. 602 00:41:44,140 --> 00:41:47,780 Jadi di sini kita dua kali ganda saiz penimbal kami. 603 00:41:47,780 --> 00:41:51,840 Dan yang sentiasa berterusan; kita memasukkan watak ke dalam buffer kami 604 00:41:51,840 --> 00:41:56,220 sehingga kita menerima baris baru atau akhir fail atau apa sahaja, 605 00:41:56,220 --> 00:41:59,380 di mana, kita sudah selesai dengan tali dan kemudian getString sebenar 606 00:41:59,380 --> 00:42:05,120 mengecut memori, seperti jika kita memperuntukkan memori yang terlalu banyak ia akan kembali dan mengecut sedikit. 607 00:42:05,120 --> 00:42:08,830 Maka itu kita tidak menunjukkan bahawa, tetapi idea utama adalah 608 00:42:08,830 --> 00:42:11,960 ia perlu dibaca satu aksara pada satu masa. 609 00:42:11,960 --> 00:42:17,140 Ia tidak boleh hanya membaca dalam perkara keseluruhan sekaligus, 610 00:42:17,140 --> 00:42:19,550 kerana penampan mereka hanya saiz yang tertentu. 611 00:42:19,550 --> 00:42:26,590 Jadi, jika rentetan yang ia cuba untuk memasukkan ke dalam buffer adalah terlalu besar, maka ia akan melimpah. 612 00:42:26,590 --> 00:42:28,940 Jadi di sini kita mengelakkan bahawa dengan hanya membaca di satu aksara 613 00:42:28,940 --> 00:42:33,750 pada satu masa dan berkembang setiap kali kita perlu. 614 00:42:33,750 --> 00:42:40,270 Jadi getInt dan lain fungsi perpustakaan CS50 cenderung untuk menggunakan getString 615 00:42:40,270 --> 00:42:42,310 dalam penerapannya. 616 00:42:42,310 --> 00:42:45,370 Jadi saya menekankan perkara-perkara penting di sini. 617 00:42:45,370 --> 00:42:49,460 Ia memerlukan getString untuk mendapatkan rentetan. 618 00:42:49,460 --> 00:42:51,710 Jika getString gagal untuk kembali ingatan, 619 00:42:51,710 --> 00:42:54,270 ingat bahawa getString mallocs sesuatu, jadi setiap kali anda memanggil getString 620 00:42:54,270 --> 00:42:57,820 anda tidak perlu (yang tidak bijaksana) membebaskan yang rentetan yang anda mendapat. 621 00:42:57,820 --> 00:43:02,870 Jadi di sini, jika ia gagal malloc sesuatu, kita kembali INT_MAX sebagai hanya bendera itu, 622 00:43:02,870 --> 00:43:05,650 hey, kami tidak sebenarnya mendapat integer. 623 00:43:05,650 --> 00:43:10,830 Anda harus mengabaikan apa yang saya kembali kepada anda, atau 624 00:43:10,830 --> 00:43:15,540 anda tidak perlu melayan ini sebagai input yang sah. 625 00:43:15,540 --> 00:43:21,360 Akhir sekali, dengan anggapan bahawa tidak berjaya, kita menggunakan sscanf dengan bendera yang istimewa, 626 00:43:21,360 --> 00:43:23,820 yang bermaksud, pertama sepadan dengan integer, 627 00:43:23,820 --> 00:43:26,770 kemudian mana-mana perlawanan aksara selepas integer itu. 628 00:43:26,770 --> 00:43:29,070 Jadi notis kita mahu ia sama dengan 1. 629 00:43:29,070 --> 00:43:32,940 Pulangan Jadi sscanf berapa banyak perlawanan jika berjaya dibuat? 630 00:43:32,940 --> 00:43:37,010 Ia akan kembali 1 jika ia berjaya dipadankan integer, 631 00:43:37,010 --> 00:43:40,890 ia akan kembali 0 jika ia tidak sepadan dengan integer, dan ia akan kembali 2 632 00:43:40,890 --> 00:43:45,920 jika ia dipadankan integer diikuti oleh beberapa watak. 633 00:43:45,920 --> 00:43:49,780 Jadi notis kita cuba lagi jika kita sepadan dengan apa-apa tetapi 1. 634 00:43:49,780 --> 00:43:55,230 Jadi, jika kita memasuki 1, 2, 3, C, atau 1, 2, 3, X, 635 00:43:55,230 --> 00:43:57,400 maka 1, 2, 3 akan mendapatkan disimpan di dalam integer, 636 00:43:57,400 --> 00:43:59,620 X akan mendapatkan disimpan pada watak, 637 00:43:59,620 --> 00:44:06,410 sscanf akan kembali 2, dan kami akan cuba lagi, kerana kami hanya mahu integer. 638 00:44:06,410 --> 00:44:09,810 >> Segera bertiup melalui HTML, HTTP, CSS. 639 00:44:09,810 --> 00:44:15,340 Hiperteks Markup Language adalah struktur dan semantik web. 640 00:44:15,340 --> 00:44:19,960 Berikut adalah contoh dari kuliah di mana kita mempunyai tag HTML. 641 00:44:19,960 --> 00:44:22,110 Kami mempunyai tag kepala, tag badan, 642 00:44:22,110 --> 00:44:27,770 kita mempunyai contoh-contoh tag kosong di mana kita sebenarnya tidak mempunyai permulaan dan tag penutup, 643 00:44:27,770 --> 00:44:30,820 kita hanya perlu link dan imej. 644 00:44:30,820 --> 00:44:38,480 Tidak ada tutup tag imej; ada hanya tag tunggal yang Kuasa melakukan segala-galanya tag perlu lakukan. 645 00:44:38,480 --> 00:44:41,950 Pautan adalah contoh; kita akan melihat bagaimana anda link ke CSS, 646 00:44:41,950 --> 00:44:45,910 skrip adalah satu contoh bagaimana anda pautan ke JavaScript luar. 647 00:44:45,910 --> 00:44:53,100 Ia agak mudah, dan ingat, HTML bukan bahasa pengaturcaraan. 648 00:44:53,100 --> 00:44:58,250 Di sini, ingat bagaimana anda akan menentukan bentuk atau sekurang-kurangnya apa ini akan lakukan? 649 00:44:58,250 --> 00:45:01,740 Apa-apa bentuk yang mempunyai tindakan dan kaedah. 650 00:45:01,740 --> 00:45:06,210 Kaedah yang anda hanya pernah akan lihat ialah GET dan POST. 651 00:45:06,210 --> 00:45:09,040 Jadi DAPATKAN adalah versi di mana perkara yang mendapat dimasukkan ke dalam URL. 652 00:45:09,040 --> 00:45:11,680 POST adalah di mana ia tidak dimasukkan ke dalam URL. 653 00:45:11,680 --> 00:45:18,520 Sebaliknya, apa-apa data dari bentuk dimasukkan tersembunyi dalam permintaan HTTP. 654 00:45:18,520 --> 00:45:22,390 Jadi di sini, tindakan mentakrifkan di mana permintaan HTTP pergi. 655 00:45:22,390 --> 00:45:27,490 Di mana ia akan adalah google.com / carian. 656 00:45:27,490 --> 00:45:32,890 Kaedah. Ingat perbezaan antara GET dan POST, 657 00:45:32,890 --> 00:45:37,200 dan, hanya berkata sebagai contoh, jika anda mahu untuk bookmark sesuatu. 658 00:45:37,200 --> 00:45:40,660 Anda tidak akan dapat bookmark URL POST 659 00:45:40,660 --> 00:45:44,970 kerana data tidak termasuk dalam URL. 660 00:45:44,970 --> 00:45:49,790 >> HTTP, sekarang, adalah Hiperteks Protokol Pindahan. 661 00:45:49,790 --> 00:45:54,080 Yang Hiperteks Transfer Protocol, yang anda inginkan untuk memindahkan 662 00:45:54,080 --> 00:45:57,710 Hiperteks Markup Language, dan ia. 663 00:45:57,710 --> 00:46:00,170 Tetapi ia juga memindahkan apa-apa imej yang anda mencari di Web, 664 00:46:00,170 --> 00:46:05,400 sebarang muat turun anda membuat bermula sebagai permintaan HTTP. 665 00:46:05,400 --> 00:46:10,350 Jadi HTTP hanya bahasa World Wide Web. 666 00:46:10,350 --> 00:46:15,610 Dan di sini anda perlu mengenali jenis ini permintaan HTTP. 667 00:46:15,610 --> 00:46:19,300 Di sini HTTP/1.1 pada sebelah hanya mengatakan bahawa adalah versi 668 00:46:19,300 --> 00:46:21,570 protokol saya menggunakan. 669 00:46:21,570 --> 00:46:25,770 Ia cukup banyak sentiasa akan menjadi HTTP/1.1, kerana anda akan melihatnya. 670 00:46:25,770 --> 00:46:30,110 Kemudian kita lihat bahawa ini adalah GET, alternatif yang sedang POST, bahawa anda mungkin melihat. 671 00:46:30,110 --> 00:46:40,790 Dan URL yang saya cuba untuk melawat adalah www.google.com/search?q = blah, blah, blah. 672 00:46:40,790 --> 00:46:44,240 Jadi ingat bahawa ini, tanda tanya q = blah blah blah, 673 00:46:44,240 --> 00:46:49,040 adalah jenis barangan yang dikemukakan oleh borang. 674 00:46:49,040 --> 00:46:51,830 Sambutan ia mungkin kembali kepada saya akan kelihatan seperti ini. 675 00:46:51,830 --> 00:46:54,050 Sekali lagi, bermula dengan protokol, yang akan menjadi itu, 676 00:46:54,050 --> 00:46:59,190 diikuti dengan kod status. Di sini ia 200 OK. 677 00:46:59,190 --> 00:47:05,060 Dan akhirnya, laman web yang saya benar-benar meminta akan diikuti. 678 00:47:05,060 --> 00:47:08,210 Kod status mungkin anda mungkin melihat, dan anda perlu tahu beberapa daripada mereka. 679 00:47:08,210 --> 00:47:12,770 200 OK anda mungkin telah dilihat sebelum ini. 680 00:47:12,770 --> 00:47:17,830 403 Larangan, 404 Not Found, Error 500 Server Dalaman 681 00:47:17,830 --> 00:47:22,140 biasanya jika anda pergi ke laman web dan ada sesuatu yang pecah atau kemalangan kod PHP mereka, 682 00:47:22,140 --> 00:47:24,930 manakala dalam perkakas yang kita ada bahawa kotak oren besar 683 00:47:24,930 --> 00:47:27,830 yang datang dan berkata, seperti, sesuatu yang tidak kena, kod ini tidak berfungsi 684 00:47:27,830 --> 00:47:30,380 atau ini fungsi ini tidak baik. 685 00:47:30,380 --> 00:47:33,230 Biasanya laman web tidak mahu anda mengetahui apa fungsi sebenarnya tidak baik, 686 00:47:33,230 --> 00:47:37,880 jadi sebaliknya mereka hanya akan memberi anda 500 Kesilapan Server Dalaman. 687 00:47:37,880 --> 00:47:43,050 >> TCP / IP adalah 1 lapisan bawah HTTP. 688 00:47:43,050 --> 00:47:47,550 Ingat bahawa terdapat Internet di luar Internet. 689 00:47:47,550 --> 00:47:52,270 Seperti jika anda bermain permainan dalam talian yang tidak melalui HTTP, 690 00:47:52,270 --> 00:47:55,740 ia akan melalui yang berbeza - ia masih menggunakan Internet, 691 00:47:55,740 --> 00:47:58,900 tetapi ia tidak menggunakan HTTP. 692 00:47:58,900 --> 00:48:02,470 HTTP adalah hanya satu contoh protokol dibina pada TCP / IP. 693 00:48:02,470 --> 00:48:07,820 IP bermaksud Internet Protocol. 694 00:48:07,820 --> 00:48:11,500 Setiap komputer mempunyai alamat IP, mereka adalah perkara-perkara 4 angka 695 00:48:11,500 --> 00:48:16,510 seperti 192.168.2.1, atau apa sahaja; yang cenderung untuk menjadi satu tempatan. 696 00:48:16,510 --> 00:48:23,390 Tetapi itu adalah corak alamat IP. 697 00:48:23,390 --> 00:48:29,060 Jadi DNS, Domain Perkhidmatan Nama, 698 00:48:29,060 --> 00:48:33,410 itulah yang diterjemahkan perkara seperti google.com ke alamat IP sebenar. 699 00:48:33,410 --> 00:48:37,700 Jadi, jika anda menaip alamat IP ke dalam URL, 700 00:48:37,700 --> 00:48:40,850 yang akan membawa anda kepada Google, tetapi anda cenderung untuk tidak ingat perkara-perkara. 701 00:48:40,850 --> 00:48:45,470 Anda cenderung untuk mengingati google.com sebaliknya. 702 00:48:45,470 --> 00:48:51,560 Perkara terakhir yang kita ada adalah pelabuhan, di mana ini adalah sebahagian TCP IP. 703 00:48:51,560 --> 00:48:54,880 TCP tidak lebih. Fikirkan tentang, seperti, anda mempunyai pelayar web anda berjalan. 704 00:48:54,880 --> 00:48:58,670 Mungkin anda mempunyai beberapa aplikasi e-mel berjalan; 705 00:48:58,670 --> 00:49:02,150 mungkin anda mempunyai beberapa program lain yang menggunakan berjalan Internet. 706 00:49:02,150 --> 00:49:05,090 Mereka semua memerlukan akses ke Internet, 707 00:49:05,090 --> 00:49:08,100 tetapi komputer anda hanya mempunyai 1 kad WiFi atau apa sahaja. 708 00:49:08,100 --> 00:49:10,780 Jadi pelabuhan adalah cara yang kami mampu berpecah 709 00:49:10,780 --> 00:49:13,550 bagaimana aplikasi ini dapat menggunakan Internet. 710 00:49:13,550 --> 00:49:17,230 Setiap permohonan mendapat 1 port tertentu bahawa ia boleh mendengar pada, 711 00:49:17,230 --> 00:49:19,670 dan secara lalai, HTTP menggunakan port 80. 712 00:49:19,670 --> 00:49:22,410 Sesetengah perkhidmatan e-mel menggunakan 25. 713 00:49:22,410 --> 00:49:24,490 Orang-orang yang rendah bernombor cenderung untuk ditempah. 714 00:49:24,490 --> 00:49:29,270 Anda biasanya boleh mendapatkan yang lebih tinggi bernombor untuk diri sendiri. 715 00:49:29,270 --> 00:49:32,010 >> CSS, Cascading Style Sheets. 716 00:49:32,010 --> 00:49:36,030 Laman web kami dengan gaya CSS, bukan dengan HTML. 717 00:49:36,030 --> 00:49:38,440 Terdapat 3 tempat yang anda boleh meletakkan CSS anda. 718 00:49:38,440 --> 00:49:46,300 Ia boleh menjadi sebaris, antara tag gaya, atau dalam fail yang berasingan dan kemudian dikaitkan masuk 719 00:49:46,300 --> 00:49:48,470 Dan di sini adalah hanya satu contoh CSS. 720 00:49:48,470 --> 00:49:50,450 Anda harus mengakui corak ini, 721 00:49:50,450 --> 00:49:54,310 di mana contoh pertama kami hampir sama tag badan, 722 00:49:54,310 --> 00:49:56,680 dan di sini kita memusatkan tag badan. 723 00:49:56,680 --> 00:50:00,420 Contoh kedua, kami hampir sama perkara yang 724 00:50:00,420 --> 00:50:04,740 dengan ID kaki, dan kami memohon beberapa gaya untuk itu. 725 00:50:04,740 --> 00:50:07,310 Perhatikan bahawa ID footer teks menjajarkan ke kiri, 726 00:50:07,310 --> 00:50:09,840 manakala pusat badan teks-menjajarkan. 727 00:50:09,840 --> 00:50:13,180 Footer adalah di dalam badan. 728 00:50:13,180 --> 00:50:16,470 Ia akan, sebaliknya, text-align kiri, walaupun badan berkata pusat text-align. 729 00:50:16,470 --> 00:50:18,880 Ini adalah sebahagian melata semuanya itu. 730 00:50:18,880 --> 00:50:22,110 Anda boleh mempunyai - anda boleh menentukan gaya untuk badan, 731 00:50:22,110 --> 00:50:25,320 dan kemudian perkara dalam badan anda boleh menentukan gaya yang lebih khusus, 732 00:50:25,320 --> 00:50:28,160 dan gerak kerja seperti yang anda harapkan. 733 00:50:28,160 --> 00:50:34,420 Specifiers CSS yang lebih khusus diberi keutamaan. 734 00:50:34,420 --> 00:50:46,140 Saya rasa itu sahaja. 735 00:50:46,140 --> 00:50:49,260 >> [Ali nahm] Hi semua orang. Jika saya hanya boleh mendapatkan perhatian anda. 736 00:50:49,260 --> 00:50:53,990 Saya Ali dan saya akan melalui PHP dan SQL benar-benar cepat. 737 00:50:53,990 --> 00:51:00,310 Oleh itu, kita boleh bermula. PHP adalah singkatan bagi PHP: Hypertext Preprocessor. 738 00:51:00,310 --> 00:51:03,730 Dan seperti yang anda semua perlu tahu, ia adalah satu bahasa skrip pelayan, 739 00:51:03,730 --> 00:51:06,800 dan kita menggunakannya untuk hujung belakang laman web, 740 00:51:06,800 --> 00:51:12,540 dan bagaimana ia banyak pengiraan, bahagian belakang tabir. 741 00:51:12,540 --> 00:51:17,510 Sintaksis. Ia tidak seperti C, kejutan, kejutan. 742 00:51:17,510 --> 00:51:22,060 Ia sentiasa mempunyai untuk memulakan dengan, jika anda lihat, - saya tidak boleh bergerak ke hadapan. 743 00:51:22,060 --> 00:51:31,340 Anda boleh melihat anda memerlukan jenis baru penyokong dan maka anda juga memerlukan? Php. 744 00:51:31,340 --> 00:51:35,780 Yang sentiasa bagaimana anda perlu bingkai teks PHP anda, kod PHP anda. 745 00:51:35,780 --> 00:51:39,180 Jadi ia tidak boleh hanya menjadi seperti C, di mana anda jenis meletakkannya di pertama. 746 00:51:39,180 --> 00:51:42,290 Anda perlu sentiasa mengelilinginya. 747 00:51:42,290 --> 00:51:47,610 Dan kini, sintaks utama ialah semua pembolehubah perlu bermula dengan $ watak. 748 00:51:47,610 --> 00:51:49,490 Anda perlu melakukannya apabila anda menentukan mereka, anda perlu melakukannya 749 00:51:49,490 --> 00:51:51,860 apabila anda merujuk kepada kepada mereka di kemudian hari. 750 00:51:51,860 --> 00:51:56,510 Anda sentiasa perlu $ itu. Ia rakan baru anda yang terbaik, cukup banyak. 751 00:51:56,510 --> 00:52:01,690 Anda tidak - tidak seperti C, anda tidak perlu meletakkan apa jenis jenis pembolehubah itu. 752 00:52:01,690 --> 00:52:04,940 Jadi semasa anda melakukan perlu $, anda tidak perlu meletakkan, seperti, 753 00:52:04,940 --> 00:52:09,470 int x atau tali y, dan sebagainya, dan sebagainya. 754 00:52:09,470 --> 00:52:11,490 Jadi sedikit perbezaan. 755 00:52:11,490 --> 00:52:15,590 Hasil daripada ini, ia bermakna bahawa PHP adalah sejenis lemah. 756 00:52:15,590 --> 00:52:19,310 PHP adalah bahasa jenis lemah, dan ia telah lemah ditaip pembolehubah. 757 00:52:19,310 --> 00:52:24,020 Dalam erti kata lain, ini bermakna bahawa anda boleh menukar antara pelbagai jenis jenis berubah-ubah. 758 00:52:24,020 --> 00:52:27,230 Anda boleh menyimpan nombor anda 1 sebagai int satu, 759 00:52:27,230 --> 00:52:29,650 anda boleh menyimpannya sebagai rentetan, dan anda boleh menyimpan sebagai apungan, 760 00:52:29,650 --> 00:52:33,550 dan semuanya akan menjadi yang nombor 1. 761 00:52:33,550 --> 00:52:36,080 Walaupun anda menyimpannya dalam bentuk yang berbeza, 762 00:52:36,080 --> 00:52:39,120 ia masih - jenis pembolehubah masih memegang pada akhirnya. 763 00:52:39,120 --> 00:52:41,540 Jadi, jika anda lihat di sini, jika anda ingat dari Serangga 7, 764 00:52:41,540 --> 00:52:43,500 ramai daripada anda mungkin mempunyai isu-isu dengan ini. 765 00:52:43,500 --> 00:52:47,280 Dua papan tanda yang sama, 3 tanda-tanda yang sama, 4 tanda-tanda yang sama. 766 00:52:47,280 --> 00:52:49,990 Okay, tiada 4 tanda sama, tetapi ada 2 dan 3. 767 00:52:49,990 --> 00:52:53,320 Anda menggunakan 2 tanda-tanda yang sama untuk memeriksa nilai-nilai. 768 00:52:53,320 --> 00:52:55,830 Ia boleh menyemak seluruh jenis. 769 00:52:55,830 --> 00:52:58,770 Jadi jika anda boleh lihat pada contoh pertama, 770 00:52:58,770 --> 00:53:02,210 Saya mempunyai num_int == num_string. 771 00:53:02,210 --> 00:53:06,710 Jadi int anda dan tali anda adalah kedua-duanya, dari segi teknikal, 1, 772 00:53:06,710 --> 00:53:10,790 tetapi ia jenis yang berbeza. Tetapi bagi sama setaraf dua kali, ia masih akan lulus. 773 00:53:10,790 --> 00:53:15,510 Walau bagaimanapun, bagi sama setaraf tiga, ia memeriksa nilai serta jenis yang berbeza. 774 00:53:15,510 --> 00:53:18,760 Ini bermakna bahawa ia tidak akan lulus dalam kes kedua di sini, 775 00:53:18,760 --> 00:53:22,350 di mana anda menggunakan 3 tanda-tanda yang sama sebaliknya. 776 00:53:22,350 --> 00:53:26,590 Jadi, itu perbezaan utama yang anda perlu semua telah menunjukkan sekarang. 777 00:53:26,590 --> 00:53:31,570 >> String dinamika adalah satu lagi perkara yang berkuasa anda boleh gunakan dalam PHP. 778 00:53:31,570 --> 00:53:34,080 Ia pada dasarnya hanya notasi dot berguna, 779 00:53:34,080 --> 00:53:36,230 dan bagaimana anda boleh mengikat tali bersama-sama. 780 00:53:36,230 --> 00:53:40,800 Jadi jika anda mempunyai kucing dan anda mempunyai anjing, dan anda ingin meletakkan 2 tali bersama-sama, 781 00:53:40,800 --> 00:53:44,080 anda boleh menggunakan tempoh itu, dan itu jenis bagaimana ia berfungsi. 782 00:53:44,080 --> 00:53:46,660 Anda juga boleh hanya meletakkan mereka bersebelahan antara satu sama lain, 783 00:53:46,660 --> 00:53:49,030 seperti yang anda lihat di sini dalam contoh di bawah, 784 00:53:49,030 --> 00:53:51,610 di mana saya telah echo tali 1, tali ruang 2. 785 00:53:51,610 --> 00:53:56,930 PHP akan tahu untuk menggantikan mereka seperti itu. 786 00:53:56,930 --> 00:53:59,780 Tatasusunan. Sekarang, dalam PHP, terdapat 2 jenis tatasusunan. 787 00:53:59,780 --> 00:54:03,180 Anda boleh mempunyai array biasa, dan anda juga boleh mempunyai array bersekutu, 788 00:54:03,180 --> 00:54:06,040 dan kita akan pergi melalui mereka sekarang. 789 00:54:06,040 --> 00:54:08,280 Array biasa hanya ini dalam C, 790 00:54:08,280 --> 00:54:11,240 dan supaya anda mempunyai indeks yang bernombor. 791 00:54:11,240 --> 00:54:13,160 Sekarang kita hanya akan mewujudkan satu dan meletakkan - 792 00:54:13,160 --> 00:54:15,500 jadi ini adalah bagaimana kita mewujudkan pelbagai kosong, maka kita akan 793 00:54:15,500 --> 00:54:17,310 dimasukkan ke dalam nombor indeks 0. 794 00:54:17,310 --> 00:54:19,200 Kami akan meletakkan nombor 6, nilai 6. 795 00:54:19,200 --> 00:54:21,500 Anda boleh melihatnya di bahagian bawah di sini. 796 00:54:21,500 --> 00:54:24,240 Where's - di nombor indeks 1 kita akan meletakkan beberapa nilai 4, 797 00:54:24,240 --> 00:54:26,720 dan supaya anda boleh melihat ada 6, ada 4, 798 00:54:26,720 --> 00:54:29,160 dan kemudian seperti yang kita sedang mencetak sesuatu, 799 00:54:29,160 --> 00:54:33,550 apabila kita cuba dan mencetak nilai yang disimpan di indeks bilangan 0, 800 00:54:33,550 --> 00:54:36,900 maka kita akan melihat nilai 6 yang dicetak. Sejuk? 801 00:54:36,900 --> 00:54:40,160 Jadi, itu array biasa untuk anda. 802 00:54:40,160 --> 00:54:42,750 Satu lagi cara anda juga boleh menambah perkara-perkara kepada barisan biasa kini 803 00:54:42,750 --> 00:54:44,780 anda hanya boleh menambah mereka pada akhir. 804 00:54:44,780 --> 00:54:47,240 Ini bermakna bahawa anda tidak perlu menentukan indeks tertentu. 805 00:54:47,240 --> 00:54:51,000 Anda boleh melihat nombor, dan kemudian di dalam kurungan persegi tidak ada indeks yang ditetapkan. 806 00:54:51,000 --> 00:54:56,270 Dan ia akan tahu - PHP akan tahu hanya menambah kepada akhir senarai, tempat percuma depan. 807 00:54:56,270 --> 00:54:59,190 Jadi, anda boleh melihat 1 di sana pada itu 0 spot, 808 00:54:59,190 --> 00:55:02,690 2 pergi di sana di tempat pertama. 809 00:55:02,690 --> 00:55:04,690 3 pergi - ditambah di sana. 810 00:55:04,690 --> 00:55:06,720 Jadi yang jenis masuk akal. Anda hanya sentiasa menambah ia, 811 00:55:06,720 --> 00:55:09,360 dan kemudian apabila kita mengulangi indeks nombor 1, 812 00:55:09,360 --> 00:55:13,080 ia akan mencetak nilai 2. 813 00:55:13,080 --> 00:55:16,800 >> Kemudian kami mempunyai array yang array bersekutu. 814 00:55:16,800 --> 00:55:19,370 Array bersekutu, bukannya mempunyai indeks berangka, 815 00:55:19,370 --> 00:55:23,630 apa yang mereka lakukan, mereka mempunyai indeks yang oleh tali. 816 00:55:23,630 --> 00:55:25,670 Anda lihat, bukan - Saya tidak perlu lagi ambil semua indeks nombor, 817 00:55:25,670 --> 00:55:32,140 dan kini ia key1, key2, key3, dan mereka dalam tanda petik untuk menandakan bahawa mereka semua tali. 818 00:55:32,140 --> 00:55:34,470 Oleh itu, kita boleh mempunyai satu contoh ini. 819 00:55:34,470 --> 00:55:38,790 Contoh ini adalah bahawa kita mempunyai tf, dan bahawa nama indeks. 820 00:55:38,790 --> 00:55:42,030 Kami akan meletakkan "Ali" sebagai nama, pada indeks, kalori yang dimakan, 821 00:55:42,030 --> 00:55:47,640 kita boleh meletakkan int satu masa ini dan bukan tali, 822 00:55:47,640 --> 00:55:52,240 dan kemudian pada indeks suka, kita boleh meletakkan keseluruhan pelbagai di dalamnya. 823 00:55:52,240 --> 00:55:55,490 Jadi ini adalah jenis - ia adalah satu konsep yang serupa dengan bagaimana kami 824 00:55:55,490 --> 00:55:58,930 indeks dengan nombor, tetapi kini kita boleh mengubah indeks sekitar 825 00:55:58,930 --> 00:56:03,890 untuk mereka sebagai tali sebaliknya. 826 00:56:03,890 --> 00:56:06,070 Anda juga boleh melakukan ini, selain hanya melakukannya secara individu, 827 00:56:06,070 --> 00:56:09,400 anda boleh melakukan semuanya dalam satu sebahagian. Jadi, anda boleh melihat bahawa tf array itu, 828 00:56:09,400 --> 00:56:13,350 dan kemudian kita menetapkan mereka semua dalam satu gergasi set kurungan persegi. 829 00:56:13,350 --> 00:56:15,220 Jadi yang boleh mempercepatkan perkara. 830 00:56:15,220 --> 00:56:19,730 Ia lebih daripada pilihan gaya daripada tidak. 831 00:56:19,730 --> 00:56:21,550 Kami juga mempunyai gelung. 832 00:56:21,550 --> 00:56:26,020 Dalam C kita mempunyai gelung yang bekerja seperti ini. 833 00:56:26,020 --> 00:56:29,690 Kami mempunyai pelbagai kami, dan kami pergi dari indeks 0 hingga akhir senarai, 834 00:56:29,690 --> 00:56:31,740 dan kami mencetak semua, bukan? 835 00:56:31,740 --> 00:56:33,880 Kecuali masalah ini adalah, untuk tatasusunan bersekutu, 836 00:56:33,880 --> 00:56:36,610 kita tidak semestinya tahu mereka indeks berangka 837 00:56:36,610 --> 00:56:39,610 kerana sekarang kita mempunyai indeks tali. 838 00:56:39,610 --> 00:56:44,800 Sekarang kita menggunakan gelung foreach, yang, sekali lagi, anda diharapkan digunakan dalam Serangga 7. 839 00:56:44,800 --> 00:56:48,930 Gelung foreach hanya akan tahu setiap bahagian senarai. 840 00:56:48,930 --> 00:56:52,450 Dan ia tidak perlu tahu indeks berangka yang anda ada. 841 00:56:52,450 --> 00:56:56,490 Jadi, anda mempunyai sintaks foreach, jadi ia foreach, anda meletakkan array. 842 00:56:56,490 --> 00:57:00,430 Jadi pelbagai saya dipanggil Serangga, dan kemudian sebagai, perkataan seperti, 843 00:57:00,430 --> 00:57:04,530 dan kemudian anda meletakkan ini berubah-ubah sementara tempatan yang anda akan menggunakan 844 00:57:04,530 --> 00:57:10,690 hanya untuk perkara yang tertentu yang akan memegang tertentu - 845 00:57:10,690 --> 00:57:14,770 satu contoh atau satu bahagian array. 846 00:57:14,770 --> 00:57:18,350 Serangga num akan tahan 1, dan kemudian mungkin ia akan mengadakan bilangan 6, 847 00:57:18,350 --> 00:57:20,410 dan kemudian ia akan mengadakan nombor 2. 848 00:57:20,410 --> 00:57:26,630 Tetapi ia dijamin untuk melalui setiap nilai tunggal yang dalam array. 849 00:57:26,630 --> 00:57:30,530 Fungsi yang berguna yang perlu anda tahu dalam PHP adalah memerlukan, 850 00:57:30,530 --> 00:57:35,880 supaya memastikan bahawa anda termasuk fail-fail tertentu, echo, keluar, kosong. 851 00:57:35,880 --> 00:57:40,490 Saya sangat mengesyorkan anda melihat Serangga 7 dan melihat orang-orang fungsi. 852 00:57:40,490 --> 00:57:42,810 Anda mungkin perlu mengetahui orang-orang, 853 00:57:42,810 --> 00:57:47,060 jadi saya pasti akan tahu apa, sebenarnya, mereka semua lakukan. 854 00:57:47,060 --> 00:57:50,080 >> Dan sekarang kita akan pergi melalui skop benar-benar cepat. 855 00:57:50,080 --> 00:57:53,490 Dalam skop, PHP adalah jenis satu perkara yang 'funky', tidak seperti C, 856 00:57:53,490 --> 00:57:56,170 dan kami hanya akan melaluinya dengan cepat. 857 00:57:56,170 --> 00:57:58,930 Jadi katakan kita mula pada itu anak panah yang kita ada di sana. 858 00:57:58,930 --> 00:58:02,900 Dan kita akan bermula dengan $ i. Jadi pembolehubah 'i' akan menjadi 0, 859 00:58:02,900 --> 00:58:06,730 dan kami hanya akan menyimpan percetakan dalam kotak putih besar di sana. 860 00:58:06,730 --> 00:58:09,220 Kami akan bermula dengan i0, dan kemudian kita akan echo ia. 861 00:58:09,220 --> 00:58:12,670 Jadi ada yang 0. 862 00:58:12,670 --> 00:58:15,210 Dan kemudian kita akan kenaikan itu dengan gelung, 863 00:58:15,210 --> 00:58:17,810 dan kemudian ia akan menjadi nilai 1. 864 00:58:17,810 --> 00:58:20,070 Satu adalah kurang daripada 3, jadi ia akan melalui bahawa untuk gelung, 865 00:58:20,070 --> 00:58:23,230 dan kemudian kita akan melihat ia dicetak semula. 866 00:58:23,230 --> 00:58:25,520 Kami akan kenaikan sekali lagi kepada 2, 867 00:58:25,520 --> 00:58:29,860 dan 2 adalah kurang daripada 3, jadi ia akan lulus untuk gelung, dan ia akan mencetak 2. 868 00:58:29,860 --> 00:58:35,100 Kemudian anda akan ambil perhatian bahawa 3 tidak kurang dari 3, jadi kita akan keluar daripada untuk gelung. 869 00:58:35,100 --> 00:58:40,050 Jadi, kami kini keluar, dan kemudian kita akan pergi ke dalam aFunction. 870 00:58:40,050 --> 00:58:45,010 Okay. Jadi, anda perlu ambil perhatian bahawa pemboleh ubah ini bahawa kita telah mencipta, 871 00:58:45,010 --> 00:58:48,270 'i' berubah-ubah, tidak scoped dalam negara. 872 00:58:48,270 --> 00:58:50,280 Ini bermakna bahawa ia bukan tempatan untuk gelung, 873 00:58:50,280 --> 00:58:58,060 dan berubah bahawa kita masih boleh mengakses dan menukar selepas itu, dan ia masih akan berkesan. 874 00:58:58,060 --> 00:59:02,160 Jadi, jika anda pergi ke majlis itu sekarang, anda akan melihat bahawa kita juga menggunakan 'i' berubah-ubah, 875 00:59:02,160 --> 00:59:05,320 dan kita akan kenaikan 'i' + +. 876 00:59:05,320 --> 00:59:09,410 Anda akan berfikir, pada mulanya, berdasarkan C, bahawa itu adalah satu salinan 'i' berubah-ubah. 877 00:59:09,410 --> 00:59:12,830 Ia satu perkara yang sama sekali berbeza, yang adalah betul. 878 00:59:12,830 --> 00:59:16,560 Oleh itu, apabila kita mencetak, kita akan mencetak 'i' + +, yang akan mencetak yang 4, 879 00:59:16,560 --> 00:59:19,640 dan kemudian kita akan - maaf. 880 00:59:19,640 --> 00:59:22,030 Kemudian kita akan berakhir daripada fungsi itu, 881 00:59:22,030 --> 00:59:24,820 dan kami akan menjadi di mana anak panah yang sekarang. 882 00:59:24,820 --> 00:59:29,190 Ini bermakna bahawa kemudian, bagaimanapun, walaupun majlis itu mengubah nilai 'i', 883 00:59:29,190 --> 00:59:32,620 ia tidak berubah di luar majlis itu, 884 00:59:32,620 --> 00:59:35,060 kerana fungsi mempunyai skop yang berasingan. 885 00:59:35,060 --> 00:59:38,960 Ini bermakna bahawa apabila kita echo 'i', ia tidak berubah dalam skop fungsi, 886 00:59:38,960 --> 00:59:43,660 dan sebagainya maka kita akan mencetak 3 lagi. 887 00:59:43,660 --> 00:59:47,520 Perkara yang berbeza mengenai skop dalam PHP berbanding C. 888 00:59:47,520 --> 00:59:51,130 >> Sekarang dalam PHP dan HTML. 889 00:59:51,130 --> 00:59:53,510 PHP digunakan untuk membuat laman web dinamik. 890 00:59:53,510 --> 00:59:58,660 Ia jenis membuat perkara yang berbeza. 891 00:59:58,660 --> 01:00:02,090 Kita ada berbeza daripada HTML. 892 01:00:02,090 --> 01:00:05,230 Dengan HTML, kita sentiasa hanya mempunyai perkara statik yang sama, seperti bagaimana Rob menunjukkan, 893 01:00:05,230 --> 01:00:09,370 manakala PHP, anda boleh mengubah keadaan berdasarkan siapa pengguna adalah. 894 01:00:09,370 --> 01:00:11,830 Jadi jika saya mempunyai ini, saya telah, "Anda dilog masuk sebagai -" dan kemudian nama, 895 01:00:11,830 --> 01:00:14,420 dan saya boleh menukar nama. Jadi sekarang nama itu adalah Yusuf, 896 01:00:14,420 --> 01:00:18,880 dan ia mempunyai "tentang saya," tetapi kemudian saya juga boleh menukar nama untuk mempunyai Tommy. 897 01:00:18,880 --> 01:00:21,700 Dan yang akan menjadi perkara yang berbeza. 898 01:00:21,700 --> 01:00:23,840 Demikian maka kita juga boleh mengubah perkara yang berbeza mengenai beliau, 899 01:00:23,840 --> 01:00:27,070 dan ia akan menunjukkan kandungan yang berbeza berdasarkan nama. 900 01:00:27,070 --> 01:00:31,430 Jadi PHP jenis boleh mengubah apa yang berlaku di laman web anda. 901 01:00:31,430 --> 01:00:33,540 Sama di sini. Namun, ambil perhatian bahawa mereka mempunyai kandungan yang berbeza, 902 01:00:33,540 --> 01:00:38,870 walaupun anda secara teknikal masih mengakses yang sama laman web di permukaan. 903 01:00:38,870 --> 01:00:43,450 Menjana HTML. Terdapat 2 cara yang berbeza yang boleh anda lakukan ini. 904 01:00:43,450 --> 01:00:48,980 Oleh itu, kita akan melalui hak yang sekarang. Cara pertama ialah, anda perlu - yeah, maaf. 905 01:00:48,980 --> 01:00:51,150 Jadi anda hanya perlu biasa anda untuk gelung dalam PHP, 906 01:00:51,150 --> 01:00:56,270 dan kemudian anda echo dalam PHP dan anda echo keluar HTML. 907 01:00:56,270 --> 01:00:58,720 Menggunakan apa Rob menunjukkan anda skrip HTML 908 01:00:58,720 --> 01:01:04,030 dan kemudian menggunakan cetak PHP kepada hanya mencetak ke laman web. 909 01:01:04,030 --> 01:01:09,520 Cara alternatif adalah untuk melakukannya seolah-olah anda mengasingkan PHP dan HTML. 910 01:01:09,520 --> 01:01:11,940 Jadi, anda boleh mempunyai garis PHP yang bermula untuk gelung, 911 01:01:11,940 --> 01:01:16,020 maka anda boleh mempunyai garis HTML dalam satu perkara yang berasingan, 912 01:01:16,020 --> 01:01:19,700 dan kemudian anda menamatkan gelung, sekali lagi, dengan PHP a. 913 01:01:19,700 --> 01:01:21,800 Jadi ia jenis memisahkan keluar. 914 01:01:21,800 --> 01:01:24,020 Di sebelah kiri, anda boleh bahawa anda mempunyai semua - 915 01:01:24,020 --> 01:01:26,360 ia hanya 1 sebahagian daripada PHP. 916 01:01:26,360 --> 01:01:28,510 Di sebelah kanan anda dapat melihat bahawa anda mempunyai garis PHP, 917 01:01:28,510 --> 01:01:32,540 anda mempunyai garis HTML, dan anda mempunyai garis PHP lagi. 918 01:01:32,540 --> 01:01:36,870 Jadi memisahkan ia keluar ke apa yang mereka lakukan. 919 01:01:36,870 --> 01:01:39,330 Dan anda akan ambil perhatian bahawa cara sama ada, untuk sama ada daripada mereka, 920 01:01:39,330 --> 01:01:41,980 mereka masih mencetak imej, imej, imej, 921 01:01:41,980 --> 01:01:44,540 jadi HTML yang masih dicetak dengan cara yang sama. 922 01:01:44,540 --> 01:01:49,870 Dan kemudian anda masih akan melihat 3 imej muncul di laman web anda. 923 01:01:49,870 --> 01:01:52,820 Jadi ia 2 cara berbeza dalam melakukan perkara yang sama. 924 01:01:52,820 --> 01:01:55,060 >> Sekarang kami mempunyai bentuk dan permintaan. Sebagai Rob menunjukkan anda, 925 01:01:55,060 --> 01:01:59,400 terdapat bentuk HTML, dan kita hanya akan angin melalui ini. 926 01:01:59,400 --> 01:02:02,040 Anda mempunyai tindakan dan anda mempunyai kaedah, dan tindakan anda 927 01:02:02,040 --> 01:02:04,350 jenis menunjukkan anda di mana anda akan menghantarnya, dan kaedah ini sama ada 928 01:02:04,350 --> 01:02:06,960 ia akan menjadi GET atau POST. 929 01:02:06,960 --> 01:02:11,220 Dan permintaan GET, sebagai Rob berkata, bermakna bahawa anda akan memasukkannya ke dalam bentuk yang 930 01:02:11,220 --> 01:02:15,760 dan anda akan melihat ia sebagai URL, manakala permintaan POST anda tidak akan melihat dalam URL. 931 01:02:15,760 --> 01:02:17,840 Jadi sedikit perbezaan. 932 01:02:17,840 --> 01:02:19,950 Walau bagaimanapun, satu perkara itu perkara yang sama 933 01:02:19,950 --> 01:02:22,560 ialah POST dan GET sama-sama tidak selamat. 934 01:02:22,560 --> 01:02:26,430 Jadi, anda mungkin berfikir bahawa hanya kerana anda tidak melihat ia dalam URL, 935 01:02:26,430 --> 01:02:28,790 ini bermakna POST adalah lebih selamat, 936 01:02:28,790 --> 01:02:34,420 tetapi anda masih boleh melihat ia dalam cookies anda di maklumat yang anda menghantar. 937 01:02:34,420 --> 01:02:38,260 Jadi jangan berfikir bahawa kira-kira satu atau yang lain. 938 01:02:38,260 --> 01:02:42,160 Satu lagi perkara yang perlu diperhatikan adalah bahawa anda juga mempunyai seksyen pembolehubah. 939 01:02:42,160 --> 01:02:45,850 Anda lelaki yang digunakan ini dalam Serangga 7 untuk mendapatkan maklumat ID pengguna anda. 940 01:02:45,850 --> 01:02:48,550 Apa yang berlaku adalah bahawa anda boleh menggunakan pelbagai bersekutu ini, 941 01:02:48,550 --> 01:02:53,310 yang $ _SESSION, dan kemudian anda boleh mengakses perkara yang berbeza 942 01:02:53,310 --> 01:02:57,720 dan menyimpan perkara-perkara yang berbeza di seluruh halaman. 943 01:02:57,720 --> 01:03:00,750 >> Perkara terakhir adalah bahawa kita mempunyai SQL, Structured Query Language, 944 01:03:00,750 --> 01:03:04,360 dan ini adalah bahasa pengaturcaraan untuk menguruskan pangkalan data. 945 01:03:04,360 --> 01:03:08,220 Apa, sebenarnya, adalah pangkalan data? Mereka koleksi jadual, 946 01:03:08,220 --> 01:03:10,630 dan setiap meja boleh mempunyai jenis yang sama objek. 947 01:03:10,630 --> 01:03:14,990 Oleh itu, kita mempunyai jadual dari pengguna di Serangga kewangan anda. 948 01:03:14,990 --> 01:03:20,610 Dan mengapa mereka berguna? Kerana ia adalah satu cara kekal menyimpan maklumat. 949 01:03:20,610 --> 01:03:22,840 Ini cara yang mengesan perkara dan menguruskan perkara-perkara 950 01:03:22,840 --> 01:03:25,890 dan benar-benar melihat ia di muka surat yang berbeza dan trek penyimpanan. 951 01:03:25,890 --> 01:03:29,930 Manakala jika anda hanya menyimpan ia pada satu ketika itu serta-merta 952 01:03:29,930 --> 01:03:33,720 dan kemudian menggunakannya kemudian, anda tidak akan dapat untuk mengakses apa-apa yang telah anda simpan. 953 01:03:33,720 --> 01:03:37,660 Kami mempunyai 4 perkara utama yang kita gunakan untuk arahan SQL. 954 01:03:37,660 --> 01:03:40,190 Kami mempunyai pilih, memasukkan, memadam, dan kemas kini. 955 01:03:40,190 --> 01:03:42,880 Mereka benar-benar penting untuk anda semua tahu untuk kuiz anda. 956 01:03:42,880 --> 01:03:45,990 >> Kami cepat akan pergi ke pilih sekarang. 957 01:03:45,990 --> 01:03:48,540 Pada asasnya, anda memilih baris daripada pangkalan data. 958 01:03:48,540 --> 01:03:52,400 Jadi jika anda mempunyai, di sini - 959 01:03:52,400 --> 01:03:56,740 kita mempunyai ini 2 perkara yang berbeza, dan kami mahu untuk memilih dari jadual kelas yang 960 01:03:56,740 --> 01:04:01,480 mana hebat - di mana dalam ruang hebat nilai ialah 1. 961 01:04:01,480 --> 01:04:04,460 Jadi, anda boleh lihat di sini, kita mempunyai ini 2 perkara nama kelas, 962 01:04:04,460 --> 01:04:08,490 CS50 dan Stat110, dan kami mempunyai ID kelas dan slogan. 963 01:04:08,490 --> 01:04:13,150 Oleh itu, kita mahu untuk memilih semua maklumat tersebut. 964 01:04:13,150 --> 01:04:17,480 Kemudian anda boleh lihat di sini bahawa ia jenis memilih daripada yang ruangan hebat, 965 01:04:17,480 --> 01:04:25,170 di mana semua perkara adalah 1, dan kemudian ia mempunyai ID kelas, nama kelas dan slogan yang ia boleh memilih. 966 01:04:25,170 --> 01:04:28,100 Bagaimana sebenarnya yang anda lakukan ini dalam kod? Anda perlu menggunakan PHP. 967 01:04:28,100 --> 01:04:33,830 Jadi itu jenis bagaimana PHP dan SQL adalah berkaitan dengan satu sama lain. 968 01:04:33,830 --> 01:04:38,130 Sekarang kita mempunyai kod kita, dan kita akan menggunakan fungsi pertanyaan kami 969 01:04:38,130 --> 01:04:41,370 seperti yang kita lakukan dalam Serangga 7, dan kita akan menjalankan query SQL. 970 01:04:41,370 --> 01:04:43,870 Kemudian kita akan mempunyai - 971 01:04:43,870 --> 01:04:46,280 kita sentiasa perlu untuk memeriksa jika tiga sama berturut-turut jika palsu. 972 01:04:46,280 --> 01:04:49,010 Jadi sekali lagi, anda mahu untuk memeriksa jenis dan nilai, 973 01:04:49,010 --> 01:04:53,880 dan kemudian jika ia tidak berfungsi, maka anda mahu meminta maaf, seperti biasa, seperti yang kita lakukan pada Serangga 7. 974 01:04:53,880 --> 01:04:55,870 Jika tidak, anda mahu gelung melalui segala-galanya dengan mereka berguna 975 01:04:55,870 --> 01:04:59,410 foreach gelung yang kita hanya pergi ke atas. 976 01:04:59,410 --> 01:05:01,280 Sekarang kita sedang menggelung melalui dan kita telah membuat ia lepas, 977 01:05:01,280 --> 01:05:05,080 mari kita andaikan bahawa pertanyaan kami berlalu, kini kita mempunyai gelung foreach kami. 978 01:05:05,080 --> 01:05:11,050 Jajar yang pertama ia telah, jadi inilah barisan, di sini; ia berkotak. 979 01:05:11,050 --> 01:05:14,010 Ia akan mencetak semua maklumat yang ia mendapat. 980 01:05:14,010 --> 01:05:18,070 Jadi ia akan mencetak di bahagian bawah "Wanna Belajar HTML?" 981 01:05:18,070 --> 01:05:23,370 Kemudian ia akan pergi ke baris seterusnya, kerana ia siap yang pertama untuk gelung, 982 01:05:23,370 --> 01:05:26,510 dan sebagainya maka ia akan mencetak baris kedua itu, 983 01:05:26,510 --> 01:05:32,120 yang akan menjadi STAT110, Cari semua Moments. 984 01:05:32,120 --> 01:05:34,290 >> Satu perkara yang lepas adalah pada SQL kelemahan. 985 01:05:34,290 --> 01:05:37,300 Saya tahu David menyentuh mengenai ini sedikit dalam kuliah. 986 01:05:37,300 --> 01:05:40,730 Anda boleh membaca ini kemudian. Ia benar-benar lucu. 987 01:05:40,730 --> 01:05:45,320 SQL Injection adalah sejenis perkara rumit. 988 01:05:45,320 --> 01:05:49,890 Mari kita mengatakan bahawa anda hanya melekat pembolehubah terus ke dalam pertanyaan anda, 989 01:05:49,890 --> 01:05:52,290 seperti yang anda lihat dalam barisan pertama. 990 01:05:52,290 --> 01:05:54,520 Jadi ia kelihatan halus, bukan? Anda hanya meletakkan nama pengguna 991 01:05:54,520 --> 01:05:58,820 dan kata laluan kepada pertanyaan SQL anda, dan anda mahu kapal itu kira dan mendapatkan apa sahaja adalah dalam jadual data anda. 992 01:05:58,820 --> 01:06:01,450 Itu seolah-olah agak mudah. Jadi katakanlah seseorang meletakkan dalam, 993 01:06:01,450 --> 01:06:04,910 untuk kata laluan, ini ATAU teks di sini - 994 01:06:04,910 --> 01:06:06,780 sebenarnya seharusnya berada di dalam kotak merah. 995 01:06:06,780 --> 01:06:11,920 Jadi mari kita mengatakan bahawa mereka meletakkan kata laluan yang ke - itulah apa yang mereka masuk. 996 01:06:11,920 --> 01:06:16,520 Jadi mereka meletakkan ATAU "1" = 1. 997 01:06:16,520 --> 01:06:20,880 Jenis kata laluan bodoh untuk mempunyai. 998 01:06:20,880 --> 01:06:25,070 Sekarang mari kita hanya menggantikannya dalam, dan anda akan ambil perhatian bahawa dalam bahawa SQL pertanyaan sekarang, 999 01:06:25,070 --> 01:06:29,090 ia menilai untuk sentiasa benar, kerana anda akan ambil perhatian bahawa 1000 01:06:29,090 --> 01:06:32,240 anda boleh SQL pertanyaan pilih semua maklumat ini 1001 01:06:32,240 --> 01:06:35,420 atau anda hanya boleh mempunyai 1 = 1. 1002 01:06:35,420 --> 01:06:41,030 Supaya sentiasa akan menilai true. 1003 01:06:41,030 --> 01:06:46,610 Itu tidak akan benar-benar bekerja, kerana itu bermakna bahawa penggodam boleh memecah masuk ke dalam sistem anda. 1004 01:06:46,610 --> 01:06:49,300 Penyelesaian untuk ini adalah bahawa anda perlu menggunakan sistem PDO yang, 1005 01:06:49,300 --> 01:06:51,360 yang bermakna anda perlu menggunakan tanda tanya, 1006 01:06:51,360 --> 01:06:53,350 yang adalah apa yang anda guys digunakan dalam Serangga 7, 1007 01:06:53,350 --> 01:06:57,620 di mana anda akan menggunakan tanda tanya di tempat di mana anda mahu meletakkan sesuatu, 1008 01:06:57,620 --> 01:07:01,430 dan kemudian anda akan mempunyai koma, dan kemudian anda akan mempunyai selepas itu, 1009 01:07:01,430 --> 01:07:07,610 selepas tali anda, pembolehubah yang berbeza yang anda mahu menggantikan ke dalam tanda tanya anda. 1010 01:07:07,610 --> 01:07:10,330 Jadi, anda akan ambil perhatian di sini bahawa sekarang saya mempunyai ini tanda tanya merah. 1011 01:07:10,330 --> 01:07:15,420 Kemudian saya meletakkan pembolehubah selepas rentetan saya jadi saya tahu untuk menggantikan mereka supaya selepas itu. 1012 01:07:15,420 --> 01:07:18,470 Yang akan memastikan bahawa jika seseorang melakukan seperti ini, 1013 01:07:18,470 --> 01:07:24,050 dan mereka mempunyai keadaan atau 1 = 1, yang akan memastikan, 1014 01:07:24,050 --> 01:07:30,490 di akhir kembali, pastikan bahawa ia tidak akan benar-benar memecahkan pertanyaan SQL. 1015 01:07:30,490 --> 01:07:33,660 Okay, jadi yang cukup banyak itu, puting beliung PHP dan SQL. 1016 01:07:33,660 --> 01:07:41,520 Best nasib kepada anda semua, dan sekarang untuk Ore 1017 01:07:41,520 --> 01:07:44,270 >> [Oreoluwatomiwa Babarinsa] semua orang Okay. Masa untuk pergi ke beberapa JavaScript 1018 01:07:44,270 --> 01:07:48,840 dan beberapa perkara yang lain dengan cepat jadi kami tidak memegang anda sehingga malam ini. 1019 01:07:48,840 --> 01:07:56,930 JavaScript. Ya. JavaScript adalah jenis perkara yang sejuk, kononnya. 1020 01:07:56,930 --> 01:07:59,090 Perkara yang anda benar-benar perlu tahu tentang JavaScript, ia jenis seperti 1021 01:07:59,090 --> 01:08:03,810 akhir pelanggan-sampingan apa aplikasi web anda akan lakukan. 1022 01:08:03,810 --> 01:08:08,280 Ada beberapa perkara yang anda hanya tidak mahu untuk menjaga sepanjang masa di sebelah pelayan. 1023 01:08:08,280 --> 01:08:12,880 Semua interaksi sedikit, menonjolkan satu perkara, membuat sesuatu yang hilang. 1024 01:08:12,880 --> 01:08:15,340 Anda benar-benar tidak mahu perlu bercakap dengan pelayan anda sepanjang masa untuk itu. 1025 01:08:15,340 --> 01:08:18,069 Dan beberapa yang tidak mustahil untuk melakukan di sebelah pelayan. 1026 01:08:18,069 --> 01:08:21,899 Inilah sebabnya mengapa kita memerlukan sesuatu seperti JavaScript. 1027 01:08:21,899 --> 01:08:24,359 Perkara yang sejuk kira-kira JavaScript: Ia secara dinamik ditaip. 1028 01:08:24,359 --> 01:08:27,149 Ini bermakna bahawa program anda tidak perlu tahu 1029 01:08:27,149 --> 01:08:30,970 apa, sebenarnya, pembolehubah adalah apabila anda menulis ia keluar. 1030 01:08:30,970 --> 01:08:34,510 Ia akan hanya jenis mencari penyelesaiannya kerana ia berjalan. 1031 01:08:34,510 --> 01:08:37,520 Perkara-perkara lain yang sejuk kira-kira ia: Ini bahasa pendakap kerinting, 1032 01:08:37,520 --> 01:08:41,359 yang bermaksud sintaks adalah sama dengan C dan PHP. 1033 01:08:41,359 --> 01:08:47,050 Anda tidak perlu berbuat banyak kerja semula apabila anda JavaScript pembelajaran. 1034 01:08:47,050 --> 01:08:49,180 Di sini kita mempunyai sedikit JavaScript. 1035 01:08:49,180 --> 01:08:52,560 Perkara yang menarik di sini ialah, jika anda melihat ia, 1036 01:08:52,560 --> 01:08:56,330 kita mempunyai sedikit JavaScript di sana dalam tag kepala. 1037 01:08:56,330 --> 01:08:59,479 Apakah tidak pada dasarnya hanya termasuk fail JavaScript. 1038 01:08:59,479 --> 01:09:02,260 Ini adalah salah satu cara anda boleh termasuk JavaScript ke dalam program anda. 1039 01:09:02,260 --> 01:09:06,910 Kemudian sedikit kedua sedikit sebenarnya beberapa JavaScript sebaris, 1040 01:09:06,910 --> 01:09:10,790 hampir sama dengan gaya sebaris dengan CSS, 1041 01:09:10,790 --> 01:09:16,180 dan anda hanya menulis beberapa kod dengan cepat di sana. 1042 01:09:16,180 --> 01:09:18,120 JavaScript mempunyai tatasusunan. 1043 01:09:18,120 --> 01:09:20,850 Hanya satu lagi cara untuk menyimpan data di sekeliling, sangat berguna. 1044 01:09:20,850 --> 01:09:25,180 Sintaks sangat baik dan mudah. 1045 01:09:25,180 --> 01:09:29,870 Anda menggunakan kurungan persegi untuk mengakses segala-galanya dan menyimpan semua bersama-sama. 1046 01:09:29,870 --> 01:09:35,020 Tiada apa-apa terlalu kompleks. 1047 01:09:35,020 --> 01:09:38,630 Perkara yang sejuk kira-kira JavaScript dan bahasa skrip secara umum 1048 01:09:38,630 --> 01:09:40,920 adalah bahawa anda tidak perlu bimbang tentang saiz pelbagai. 1049 01:09:40,920 --> 01:09:43,880 Anda hanya boleh menggunakan array.length dan menjejaki ia, 1050 01:09:43,880 --> 01:09:46,960 dan juga pelbagai boleh berkembang atau mengecut kerana anda memerlukannya untuk. 1051 01:09:46,960 --> 01:09:49,279 Jadi anda tidak perlu bimbang tentang apa-apa jenis, 1052 01:09:49,279 --> 01:09:57,050 oh tidak, saya perlu memperuntukkan lebih banyak perkara, atau apa-apa seperti itu. 1053 01:09:57,050 --> 01:10:00,090 >> Perkara yang sejuk di sini ialah JavaScript mempunyai sesuatu yang dinamakan objek. 1054 01:10:00,090 --> 01:10:04,800 Ia merupakan satu bahasa berorientasikan objek, jadi apa yang telah adalah, pada dasarnya, 1055 01:10:04,800 --> 01:10:10,100 satu cara untuk anda untuk data kumpulan bersama-sama, agak serupa dengan struct yang, 1056 01:10:10,100 --> 01:10:17,280 tetapi anda boleh mengaksesnya seperti struct atau dalam pelbagai sintaks bersekutu. 1057 01:10:17,280 --> 01:10:22,520 Ia agak mudah dan apa yang anda boleh lakukan dengan ini adalah data kumpulan bersama-sama 1058 01:10:22,520 --> 01:10:24,810 jika anda mempunyai sekumpulan data yang yang berkaitan. 1059 01:10:24,810 --> 01:10:26,850 Kerana itu semua perkara yang perlu untuk menggambarkan kereta, 1060 01:10:26,850 --> 01:10:29,050 anda tidak perlu mempunyai dalam sekumpulan tempat yang berbeza. 1061 01:10:29,050 --> 01:10:35,300 Anda hanya boleh melekat ke dalam 1 objek dalam JavaScript. 1062 01:10:35,300 --> 01:10:39,090 Seperti yang anda mungkin tahu, iterating adalah salah satu tugas yang membosankan. 1063 01:10:39,090 --> 01:10:43,810 Anda hanya melakukannya lebih ke atas lagi. Anda perlu bercakap dengan setiap objek di dalam kereta, 1064 01:10:43,810 --> 01:10:47,340 atau anda perlu pergi melalui setiap item dalam senarai atau sesuatu seperti itu. 1065 01:10:47,340 --> 01:10:51,770 Jadi JavaScript telah, sama dengan PHP, sintaks foreach. 1066 01:10:51,770 --> 01:10:54,590 Dalam kes ini, ia adalah di dalam gelung. 1067 01:10:54,590 --> 01:10:57,300 Anda mahu menggunakan ini hanya pada objek. 1068 01:10:57,300 --> 01:11:01,030 Terdapat beberapa masalah yang berlaku jika anda menggunakan ini pada tatasusunan. 1069 01:11:01,030 --> 01:11:03,750 Ia biasanya adalah salah satu perkara-perkara, walaupun, yang sangat berguna, 1070 01:11:03,750 --> 01:11:06,590 kerana anda menghapuskan banyak overhed 1071 01:11:06,590 --> 01:11:10,270 kerana anda tidak perlu untuk menarik segala-galanya dalam objek anda sendiri. 1072 01:11:10,270 --> 01:11:12,300 Anda tidak perlu ingat semua nama-nama penting. 1073 01:11:12,300 --> 01:11:18,270 Anda hanya jenis mendapatkan mereka kembali dalam sintaks ini. 1074 01:11:18,270 --> 01:11:21,500 Dalam hal ini, dengan, anda hanya mahu ingat 1075 01:11:21,500 --> 01:11:27,180 bahawa anda mendapat kembali semua kunci, dengan cara yang hampir sama dengan hash meja. 1076 01:11:27,180 --> 01:11:30,880 Jika anda ingat dari itu, apabila anda akan dimasukkan ke dalam rentetan anda boleh mendapatkan sesuatu 1077 01:11:30,880 --> 01:11:33,840 yang akan mempunyai nilai yang berkaitan dengannya. 1078 01:11:33,840 --> 01:11:36,360 Apa yang anda boleh lakukan dengan ini adalah anda boleh berkata, baiklah, 1079 01:11:36,360 --> 01:11:42,120 Saya dimasukkan ke dalam kereta, dan saya memanggilnya Ferrari. 1080 01:11:42,120 --> 01:11:45,290 Jadi, anda boleh dimasukkan ke dalam tali Ferrari lagi kemudian, dan anda boleh mendapatkan yang keluar. 1081 01:11:45,290 --> 01:11:50,000 Dan anda boleh melakukannya dalam gelung, dengan untuk dalam gelung. 1082 01:11:50,000 --> 01:11:53,320 Jadi lebih lanjut mengenai objek. Perkara utama daripada ini, anda perlu ingat 1083 01:11:53,320 --> 01:12:00,340 adalah bahawa anda boleh menggunakan struct objek seperti sintaks apabila anda mahu dengan ini, 1084 01:12:00,340 --> 01:12:04,590 kecuali jika apa yang anda akan menggunakan sebagai rentetan bukan nama pembolehubah yang sah. 1085 01:12:04,590 --> 01:12:07,650 Jadi jika anda melihat bahawa di sana, kami mempunyai kunci dengan ruang. 1086 01:12:07,650 --> 01:12:12,500 Nah, jika anda adalah untuk meletakkan object.key, ruang, dengan, ruang, ruang, 1087 01:12:12,500 --> 01:12:15,320 yang hanya tidak akan masuk akal sintaksis. 1088 01:12:15,320 --> 01:12:22,730 Jadi, anda hanya boleh berbuat demikian dengan seperti ini pendakap sintaksis. 1089 01:12:22,730 --> 01:12:26,520 >> Juga, JavaScript adalah sangat skop-bijak untuk PHP. 1090 01:12:26,520 --> 01:12:29,050 Anda mempunyai 2 cara untuk menangani skop. 1091 01:12:29,050 --> 01:12:31,960 Anda tidak boleh mempunyai var di hadapan pembolehubah, 1092 01:12:31,960 --> 01:12:34,060 dan yang hanya bermakna ini adalah global. 1093 01:12:34,060 --> 01:12:37,050 Anda boleh melihat dari mana-mana. Malah jika anda adalah untuk meletakkan ini dalam jika pernyataan, 1094 01:12:37,050 --> 01:12:42,430 mana-mana sahaja dalam kod anda selepas titik yang anda boleh lihat ubah itu. 1095 01:12:42,430 --> 01:12:46,730 Satu lagi perkara, walaupun, adalah dengan var, ia terhad kepada apa sahaja fungsi anda masuk 1096 01:12:46,730 --> 01:12:48,870 Jika anda tidak berada di dalam satu majlis, dengan baik, ia global. 1097 01:12:48,870 --> 01:12:53,900 Tetapi jika anda berada dalam satu majlis itu hanya boleh dilihat dalam fungsi itu. 1098 01:12:53,900 --> 01:12:56,420 Saya tidak mempunyai contoh, tetapi, yeah. Ia adalah salah satu daripada perkara-perkara di mana 1099 01:12:56,420 --> 01:12:59,900 anda boleh menguruskan apa pembolehubah anda mahu menjadi global, 1100 01:12:59,900 --> 01:13:03,810 apa pembolehubah anda mahu menjadi tempatan, tetapi anda perlu berhati-hati tentang perkara ini, 1101 01:13:03,810 --> 01:13:06,890 kerana anda tidak mempunyai jenis kawalan berbutir halus yang anda lakukan dalam C, 1102 01:13:06,890 --> 01:13:15,820 di mana jika sesuatu yang diisytiharkan dalam satu untuk gelung, ia akan tinggal di yang untuk gelung. 1103 01:13:15,820 --> 01:13:18,790 Perkara yang kita sebenarnya mengambil berat tentang menggunakan JavaScript untuk adalah memanipulasi laman web, bukan? 1104 01:13:18,790 --> 01:13:21,800 Maksud saya, itu sebabnya kita lakukan ini. 1105 01:13:21,800 --> 01:13:23,840 >> Untuk melakukan itu, kita menggunakan sesuatu yang dinamakan DOM. 1106 01:13:23,840 --> 01:13:25,850 Dokumen Objek Model. 1107 01:13:25,850 --> 01:13:29,430 Pada asasnya, apa yang ia adalah ia mengambil semua HTML anda 1108 01:13:29,430 --> 01:13:34,110 dan model ia keluar ke sekumpulan objek yang bersarang dalam satu sama lain. 1109 01:13:34,110 --> 01:13:37,080 Anda bermula dengan sesuatu seperti ini. 1110 01:13:37,080 --> 01:13:44,770 Anda mempunyai, di sebelah kanan bagi saya, sekumpulan kod di luar sana itulah jenis - 1111 01:13:44,770 --> 01:13:46,640 Anda akan berfikir bahawa akan menjadi sangat sukar untuk memanipulasi, 1112 01:13:46,640 --> 01:13:48,700 kerana anda akan menghuraikan melalui sekumpulan teks 1113 01:13:48,700 --> 01:13:52,080 dan perlu sekeping selain perkara. Dan bagaimana jika ia tidak diformat dengan betul? 1114 01:13:52,080 --> 01:13:54,880 Perkara-perkara buruk akan berlaku. 1115 01:13:54,880 --> 01:13:58,140 Jadi JavaScript menjaga ini untuk anda, dan anda mendapatkan struktur data yang bagus, 1116 01:13:58,140 --> 01:14:01,390 seperti satu di kiri saya, di mana anda hanya perlu dokumen, 1117 01:14:01,390 --> 01:14:03,530 dan dalam bahawa anda mempunyai sesuatu yang dinamakan HTML, 1118 01:14:03,530 --> 01:14:05,600 dan dalam bahawa anda mempunyai kepala dan badan, 1119 01:14:05,600 --> 01:14:08,420 dan di dalam kepala bahawa anda mempunyai tajuk, dan sebagainya, dan sebagainya, dan sebagainya. 1120 01:14:08,420 --> 01:14:11,810 Ini memudahkan memanipulasi laman web supaya ia hanya, 1121 01:14:11,810 --> 01:14:14,190 oh, saya hanya mahu bercakap dengan objek ini. 1122 01:14:14,190 --> 01:14:21,340 Jenis cara yang hampir sama anda akan bercakap dengan objek lain yang anda buat sendiri. 1123 01:14:21,340 --> 01:14:25,980 Seperti saya katakan, semua DOM adalah objek dokumen itu. 1124 01:14:25,980 --> 01:14:29,290 Sama ada ia hanya satu tempat dan kemudian anda boleh pergi di dalamnya untuk mencari sesuatu, 1125 01:14:29,290 --> 01:14:33,880 dan anda boleh melakukannya - ini adalah gaya lama melakukannya, di sana, 1126 01:14:33,880 --> 01:14:38,130 di mana anda melakukan document.getElementById, dan kemudian nama, 1127 01:14:38,130 --> 01:14:42,420 dan seperti yang anda mungkin boleh beritahu, ini mendapat sangat dikawal selepas beberapa ketika. 1128 01:14:42,420 --> 01:14:44,480 Jadi, anda mungkin tidak mahu untuk melakukannya. Itulah sebabnya kita mempunyai 1129 01:14:44,480 --> 01:14:48,760 perkara yang akan datang kita akan bercakap tentang selepas ini. 1130 01:14:48,760 --> 01:14:52,510 Perkara utama di sini ialah, semua betul, anda mempunyai semua elemen-elemen, bukan? 1131 01:14:52,510 --> 01:14:56,400 Jadi mungkin saya boleh menukar warna sesuatu apabila beban halaman. 1132 01:14:56,400 --> 01:14:58,380 Jadi apa? Bagaimana jika pengguna saya klik sesuatu? 1133 01:14:58,380 --> 01:15:00,540 Saya mahu melakukan sesuatu yang menarik apabila mereka klik sesuatu. 1134 01:15:00,540 --> 01:15:02,600 Itulah sebabnya kita mempunyai acara. 1135 01:15:02,600 --> 01:15:05,330 Anda boleh, pada dasarnya, mencari mana-mana elemen dalam DOM anda, 1136 01:15:05,330 --> 01:15:08,560 dan kemudian berkata, hey. Apabila ini memuatkan atau seseorang klik ia, 1137 01:15:08,560 --> 01:15:11,410 atau apabila mereka tetikus ke atasnya, melakukan sesuatu dengannya. 1138 01:15:11,410 --> 01:15:15,330 Dan apa yang anda ada, anda mempunyai fungsi-fungsi yang mengendalikan ini untuk anda. 1139 01:15:15,330 --> 01:15:17,980 Fungsi-fungsi ini pengendali acara. 1140 01:15:17,980 --> 01:15:20,440 Apa they're - ia hanya satu cara mewah untuk mengatakan, 1141 01:15:20,440 --> 01:15:23,500 fungsi ini hanya dilaksanakan apabila acara ini berlaku. 1142 01:15:23,500 --> 01:15:28,070 Jadi ia mengendalikan acara yang berlaku. 1143 01:15:28,070 --> 01:15:30,810 Ini adalah bagaimana anda akan meletakkan seorang pengendali peristiwa. 1144 01:15:30,810 --> 01:15:34,750 Saya mempunyai beberapa butang, dan apabila anda klik, ia meletup. 1145 01:15:34,750 --> 01:15:40,560 Jadi jangan klik butang. 1146 01:15:40,560 --> 01:15:42,910 Ini adalah salah satu cara untuk menghampiri ia, bukan? 1147 01:15:42,910 --> 01:15:46,430 Anda mempunyai butang tag, dan klik anda mempunyai rentetan yang mengatakan, 1148 01:15:46,430 --> 01:15:50,460 oh, dengan cara itu, saya melakukan perkara ini meletup bagi saya. 1149 01:15:50,460 --> 01:15:53,990 Jika tidak, ia hanya seperti butang biasa anda hanya dibuat. 1150 01:15:53,990 --> 01:15:56,550 Anda juga boleh melakukan ini dengan cara yang lain, 1151 01:15:56,550 --> 01:16:02,770 dengan memegang elemen DOM, tetapi kami akan menyimpan bahawa selepas kita bercakap mengenai jQuery. 1152 01:16:02,770 --> 01:16:07,580 >> JQuery: Ia adalah perpustakaan yang pelayar. 1153 01:16:07,580 --> 01:16:09,580 Anda boleh menggunakannya dalam apa-apa cukup banyak. 1154 01:16:09,580 --> 01:16:12,090 Dan ia hanya memberi anda banyak alat untuk bekerja dengan. 1155 01:16:12,090 --> 01:16:15,850 Kerana JavaScript, manakala yang kuat, tidak mempunyai semua alat yang anda perlukan 1156 01:16:15,850 --> 01:16:20,550 keluar dari kotak untuk benar-benar menangani aplikasi web yang anda mungkin mahu lakukan. 1157 01:16:20,550 --> 01:16:24,650 Jadi ia memudahkan banyak perkara, memberikan anda banyak fungsi 1158 01:16:24,650 --> 01:16:28,760 keluar dari kotak yang biasanya anda perlu menulis sendiri, berulang-ulang kali. 1159 01:16:28,760 --> 01:16:31,600 Dan hanya membuat perkara yang sangat mudah. 1160 01:16:31,600 --> 01:16:35,780 Anda juga mempunyai selectors, yang membolehkan anda mengambil semua unsur-unsur 1161 01:16:35,780 --> 01:16:42,800 daripada DOM anda lebih mudah, daripada harus menggunakan panggilan fungsi yang sangat panjang. 1162 01:16:42,800 --> 01:16:46,630 Lanjut mengenai selectors ini. Yang ada, di sana anda, katakan 1163 01:16:46,630 --> 01:16:49,800 Saya ingin mendapatkan unsur dengan ID "batu." 1164 01:16:49,800 --> 01:16:56,450 Nah, dalam jQuery, ia hanya $ dan kemudian rentetan yang mempunyai satu paun, dan kemudian "batu." 1165 01:16:56,450 --> 01:17:01,960 Ia amat mudah dan jauh lebih cepat daripada JavaScript cara tradisional menangani masalah ini. 1166 01:17:01,960 --> 01:17:06,120 Dan anda mempunyai perkara yang sama untuk kelas dan jenis unsur. 1167 01:17:06,120 --> 01:17:08,140 jQuery adalah - salah satu daripada ciri-ciri sejuk ialah anda boleh bentuk memampatkan 1168 01:17:08,140 --> 01:17:14,350 turun pertanyaan anda pada DOM anda sangat, sangat cepat. 1169 01:17:14,350 --> 01:17:18,980 Sekarang kita kembali kepada pengendalian acara dan ini adalah bagaimana anda akan mengendalikan satu acara dalam jQuery. 1170 01:17:18,980 --> 01:17:23,090 Jadi apa yang kita akan di sini ialah kita katakan, baiklah. Saya mempunyai tag skrip, bukan? 1171 01:17:23,090 --> 01:17:25,400 Jadi saya mempunyai sebaris ini JavaScript. 1172 01:17:25,400 --> 01:17:27,750 Apa yang kita akan lakukan ialah kita akan mengatakan, baiklah. 1173 01:17:27,750 --> 01:17:30,860 Apabila dokumen itu siap, yang bermaksud dokumen yang telah dimuatkan, 1174 01:17:30,860 --> 01:17:34,660 kita akan pergi ke fungsi itu, dan kita akan mengatakan, baiklah, 1175 01:17:34,660 --> 01:17:37,060 fungsi ini sebenarnya melakukan sesuatu yang lain. 1176 01:17:37,060 --> 01:17:42,320 Ia pada dasarnya mengatakan, baiklah, saya mendapatkan unsur dengan ID "MyID." 1177 01:17:42,320 --> 01:17:47,960 Dan kemudian memberikan ini pengendali fungsi yang melaksanakan apabila anda klik padanya. 1178 01:17:47,960 --> 01:17:49,820 Pada asasnya apa yang ini tidak adalah, ia mengatakan, baiklah. 1179 01:17:49,820 --> 01:17:52,630 Laman ini dimuatkan, jadi saya akan dalam, cari elemen ini, 1180 01:17:52,630 --> 01:17:56,420 memberikan pengendali peristiwa ini, dan ia pada dasarnya menetapkan sehingga halaman anda untuk anda. 1181 01:17:56,420 --> 01:18:00,520 Dan ini adalah bagaimana anda mahu berfikir tentang pengendalian acara. 1182 01:18:00,520 --> 01:18:06,310 Anda hanya mahu berfikir tentang, baiklah, apabila sesuatu yang berlaku, apa yang saya mahu berlaku? 1183 01:18:06,310 --> 01:18:10,520 Anda tidak mahu untuk berfikir tentang, okay, saya perlu memastikan perbincangan perkara ini kepada perkara ini, 1184 01:18:10,520 --> 01:18:14,660 perkara ini blah blah blah, kerana anda hanya mahu perkara bercakap dari segi acara. 1185 01:18:14,660 --> 01:18:17,650 Apabila ini berlaku, ini berlaku. Apabila ini berlaku, yang berlaku. 1186 01:18:17,650 --> 01:18:20,240 Dan jika perkara mencetuskan perkara-perkara lain, yang hebat. 1187 01:18:20,240 --> 01:18:22,150 Tetapi anda tidak mahu mencuba dan melakukan kod rumit 1188 01:18:22,150 --> 01:18:24,130 mana anda hendak pergi mencetuskan pelbagai perkara pada masa yang sama, 1189 01:18:24,130 --> 01:18:28,860 kerana anda hanya akan memberi diri anda sakit kepala. 1190 01:18:28,860 --> 01:18:32,340 >> Baiklah. Sekarang kita boleh mendapatkan halaman kami untuk mengendalikan acara, 1191 01:18:32,340 --> 01:18:35,640 tetapi katakan pengguna saya klik butang. 1192 01:18:35,640 --> 01:18:38,040 Bagaimana sekiranya saya ingin menghantar permintaan yang kembali ke pelayan, 1193 01:18:38,040 --> 01:18:41,100 tetapi saya tidak mahu untuk memuat semula halaman, kerana mempunyai untuk memuat semula halaman baru 1194 01:18:41,100 --> 01:18:44,390 setiap kali mendapat jenis membosankan, dan mengapa saya perlu 1195 01:18:44,390 --> 01:18:47,430 untuk merobohkan pengepala sekali lagi, dan nota kaki lagi, 1196 01:18:47,430 --> 01:18:49,670 dan semua unsur-unsur halaman itu semula 1197 01:18:49,670 --> 01:18:53,180 hanya untuk memuat semula ucapan atau masa? 1198 01:18:53,180 --> 01:18:55,290 Jadi itulah sebabnya kita mempunyai sesuatu seperti Ajax. 1199 01:18:55,290 --> 01:18:59,150 Apa yang kita boleh lakukan di sini dengan Ajax adalah kita boleh berkata, baiklah, 1200 01:18:59,150 --> 01:19:01,290 Saya mahu menghantar beberapa data kepada pelayan, 1201 01:19:01,290 --> 01:19:04,010 dan saya ingin mendapat jawapan kembali jadi saya boleh mengemas kini halaman saya, 1202 01:19:04,010 --> 01:19:12,120 atau mungkin hanya melakukan beberapa pengiraan algoritma yang tidak semestinya menunjukkan apa-apa untuk pengguna. 1203 01:19:12,120 --> 01:19:15,500 Apa yang anda perlukan untuk melakukan ini? Nah, anda memerlukan URL yang anda perlu bercakap dengan. 1204 01:19:15,500 --> 01:19:18,650 Pelayan anda tidak boleh hanya mendengar ajaib dari mana-mana. 1205 01:19:18,650 --> 01:19:21,960 Anda perlu mempunyai tempat yang khusus anda menghantar data ini kepada. 1206 01:19:21,960 --> 01:19:26,240 Dan anda juga memerlukan data untuk menghantar, atau mungkin ia adalah satu pertanyaan dataless. 1207 01:19:26,240 --> 01:19:31,380 Anda hanya mahu ping kembali ke pelayan dan berkata, hey, saya masih hidup, atau sesuatu seperti itu. 1208 01:19:31,380 --> 01:19:35,150 Dan kemudian anda mahu fungsi yang pada dasarnya mengendalikan dengan kejayaan. 1209 01:19:35,150 --> 01:19:38,250 Katakan anda kembali beberapa maklumat dari pelayan anda, 1210 01:19:38,250 --> 01:19:42,960 dan anda mahu menukar tajuk pengguna pada halaman mereka. 1211 01:19:42,960 --> 01:19:44,930 Jadi, anda akan mendapatkan maklumat tersebut, 1212 01:19:44,930 --> 01:19:48,860 dan anda akan menolak yang ke skrin. 1213 01:19:48,860 --> 01:19:51,170 Apa yang berlaku ialah, apabila laman itu siap, 1214 01:19:51,170 --> 01:19:56,500 anda membuat fungsi klik untuk butang ini dipanggil penyambut. 1215 01:19:56,500 --> 01:19:58,810 Apa ini maka tidak adalah, apabila butang yang ditolak, 1216 01:19:58,810 --> 01:20:03,700 anda bercakap dengan greetings.php, anda membuat permintaan POST, 1217 01:20:03,700 --> 01:20:07,290 dan anda berkata, hey, dapatkan saya sesuatu dari laman anda. 1218 01:20:07,290 --> 01:20:09,890 Kami tidak benar-benar perlu untuk menerangkan itu, tetapi greetings.php, 1219 01:20:09,890 --> 01:20:12,480 mari kita hanya mengatakan, memberikan kembali "hello dunia." 1220 01:20:12,480 --> 01:20:15,650 Oleh itu, kita kembali ini "hello dunia," dan kepada kejayaan ini, 1221 01:20:15,650 --> 01:20:20,730 menganggap apa-apa masalah, maka kita hanya pergi ke tempat sasaran ini 1222 01:20:20,730 --> 01:20:25,720 yang kita ditetapkan dan kita hanya berpegang sambutan di sana. 1223 01:20:25,720 --> 01:20:31,560 Dan ini adalah cara yang sangat mudah untuk menubuhkan sebuah pertanyaan Ajax. 1224 01:20:31,560 --> 01:20:34,340 >> Sangat cepat, Rob jenis yang disebut ini sudah, 1225 01:20:34,340 --> 01:20:37,170 kesilapan boleh berlaku, perkara-perkara buruk boleh berlaku, 1226 01:20:37,170 --> 01:20:42,660 jadi anda mahu membiasakan diri dengan kod respons HTTP. 1227 01:20:42,660 --> 01:20:46,030 Apa ini hanya, seperti, 200, semuanya berjalan baik-baik saja. 1228 01:20:46,030 --> 01:20:48,670 Sesuatu yang lain, perkara-perkara buruk berlaku. 1229 01:20:48,670 --> 01:20:50,790 Ia biasanya perkara yang anda mahu ingat. 1230 01:20:50,790 --> 01:20:53,440 Tetapi ia adalah baik untuk mengetahui semua ini. 1231 01:20:53,440 --> 01:20:55,970 Dan akhirnya, sebaik sahaja kami telah melalui semua itu, 1232 01:20:55,970 --> 01:20:58,680 kita perlu bercakap dengan cepat tentang reka bentuk, 1233 01:20:58,680 --> 01:21:00,620 dan kemudian kita boleh memberitahu anda semua cuti. 1234 01:21:00,620 --> 01:21:03,410 Design. Perkara yang anda mahu ingat. 1235 01:21:03,410 --> 01:21:06,950 Tanya diri anda soalan-soalan ini: Siapakah yang akan menggunakan ini? 1236 01:21:06,950 --> 01:21:09,580 Apakah yang akan mereka menggunakannya untuk? Apa yang pengguna saya mengambil berat tentang? 1237 01:21:09,580 --> 01:21:11,750 Apa yang tidak mereka mengambil berat tentang? 1238 01:21:11,750 --> 01:21:14,500 Anda hanya tidak mahu membuat aplikasi dan biarkan ia hanya berkembang 1239 01:21:14,500 --> 01:21:18,270 dan menjadi gergasi ini, semua memakan perkara yang anda tidak dapat menyelesaikan. 1240 01:21:18,270 --> 01:21:23,900 Anda ingin mempunyai matlamat diskret dan pelan dan perkara yang anda mahu untuk menangani. 1241 01:21:23,900 --> 01:21:29,000 Jadikan ia tanpa tenaga. Semua ini berkata, pada dasarnya, 1242 01:21:29,000 --> 01:21:34,950 memudahkan pengguna untuk menggunakannya, jangan menjadikannya sebagai tompok gergasi teks seperti slaid ini adalah, sebenarnya. 1243 01:21:34,950 --> 01:21:38,020 Anda hanya mahu ia menjadi sesuatu yang mana ia sangat mudah bagi seseorang untuk pergi 1244 01:21:38,020 --> 01:21:40,800 dan melakukan apa yang mereka mahu lakukan. 1245 01:21:40,800 --> 01:21:42,920 Anda tidak mahu mereka perlu mengemudi 5 halaman 1246 01:21:42,920 --> 01:21:45,460 untuk mendapatkan fungsi utama anda laman web anda. 1247 01:21:45,460 --> 01:21:49,290 Jika Google mempunyai 5 halaman sebelum anda boleh mencari sesuatu, 1248 01:21:49,290 --> 01:21:53,080 tidak ada yang akan menggunakannya. 1249 01:21:53,080 --> 01:21:55,890 Dan akhir sekali, prototaip kertas, kumpulan fokus. 1250 01:21:55,890 --> 01:21:59,220 Mempunyai reka bentuk yang baik dan amalan ujian. 1251 01:21:59,220 --> 01:22:00,730 Hanya kerana anda fikir ia berfungsi untuk anda, 1252 01:22:00,730 --> 01:22:04,860 tidak bermakna sesiapa sahaja yang difikirkan ia berfungsi. 1253 01:22:04,860 --> 01:22:14,490 Tetapi yeah, itu sahaja. 1254 01:22:14,490 --> 01:22:17,490 [CS50.TV]