1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. MALAN: Baiklah. 3 00:00:12,900 --> 00:00:16,790 Jadi selamat datang ke pertama Bedah siasat CS50 untuk kuiz. 4 00:00:16,790 --> 00:00:18,340 Kami terfikir merasmikan tradisi ini tahun ini. 5 00:00:18,340 --> 00:00:20,960 Dan ini akan menjadi peluang untuk berjalan melalui 6 00:00:20,960 --> 00:00:22,220 penyelesaian kepada kuiz. 7 00:00:22,220 --> 00:00:26,160 Dan kami akan mempercepatkan atau melambatkan berasaskan ke atas faedah dari orang-orang di sini. 8 00:00:26,160 --> 00:00:29,730 >> Jadi anda mungkin di sini kerana anda berminat bagaimana anda boleh mempunyai atau 9 00:00:29,730 --> 00:00:31,170 mungkin menjawab beberapa masalah-masalah ini. 10 00:00:31,170 --> 00:00:33,300 Jadi mengapa tidak kita lihat bahagian ini pertama? 11 00:00:33,300 --> 00:00:34,450 Jadi mendapatkan tali. 12 00:00:34,450 --> 00:00:37,600 Ini memberi anda tiga versi yang berbeza daripada program yang, akhirnya, 13 00:00:37,600 --> 00:00:39,650 bertujuan untuk mendapatkan rentetan daripada pengguna. 14 00:00:39,650 --> 00:00:42,530 Sama ada atau tidak ia lakukan itu adalah meninggalkan kepada anda untuk menentukan. 15 00:00:42,530 --> 00:00:45,150 >> Dan kita ditanya dalam Soalan 0, andaikan bahawa versi 1 adalah 16 00:00:45,150 --> 00:00:46,400 disusun dan dilaksanakan. 17 00:00:46,400 --> 00:00:48,860 Mengapa mungkin program ini segfault? 18 00:00:48,860 --> 00:00:51,150 Pada pandangan pertama, apa-apa cadangan mengapa? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Yeah. 21 00:00:54,489 --> 00:00:59,260 >> PENONTON: Jadi saya ingat melihat ini dalam contoh yang sebelum ini melihat 22 00:00:59,260 --> 00:01:05,506 char * s dan melihat imbasan satu s dan melihat kerana ia penunjuk, bagaimana 23 00:01:05,506 --> 00:01:07,971 adakah ia memberi kesan kepada apa yang anda diimbas dalam? 24 00:01:07,971 --> 00:01:10,940 Adakah ia s atau alamat s? 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. MALAN: OK. 26 00:01:11,180 --> 00:01:11,480 Baik. 27 00:01:11,480 --> 00:01:14,830 Jadi akhirnya, sumber bagi sebarang masalah adalah mungkin akan mengurangkan 28 00:01:14,830 --> 00:01:16,210 dengan pembolehubah s. 29 00:01:16,210 --> 00:01:17,280 Dan ia sememangnya pembolehubah. 30 00:01:17,280 --> 00:01:19,900 Jenis data pembolehubah yang char *, yang bermakna ia akan 31 00:01:19,900 --> 00:01:22,570 mengandungi alamat bersifat. 32 00:01:22,570 --> 00:01:23,850 Dan di dalamnya terletak wawasan. 33 00:01:23,850 --> 00:01:28,330 Ia akan mengandungi alamat watak atau, lebih umum, 34 00:01:28,330 --> 00:01:32,110 alamat aksara pertama dalam blok keseluruhan aksara. 35 00:01:32,110 --> 00:01:36,680 >> Tetapi tangkapan adalah bahawa imbasan s, tujuan dalam kehidupan, diberikan alamat dan diberikan 36 00:01:36,680 --> 00:01:40,960 kod format, seperti% s, membaca rentetan ke dalam sebahagian daripada 37 00:01:40,960 --> 00:01:42,330 memori di alamat itu. 38 00:01:42,330 --> 00:01:46,040 Tetapi kerana tidak ada tanda yang sama sebelum yang koma bertitik ke atas yang pertama 39 00:01:46,040 --> 00:01:49,310 baris kod, kerana kita tidak benar-benar memperuntukkan apa-apa memori dengan 40 00:01:49,310 --> 00:01:53,020 malloc, kerana ia tidak benar-benar memperuntukkan pelbagai saiz beberapa, semua 41 00:01:53,020 --> 00:01:57,620 yang anda lakukan adalah membaca pengguna ini input papan kekunci ke dalam beberapa lengkap 42 00:01:57,620 --> 00:02:00,490 nilai sampah, yang adalah dalam s secara lalai. 43 00:02:00,490 --> 00:02:04,480 Jadi kemungkinan yang anda akan segfault jika Alamat yang tidak hanya begitu berlaku 44 00:02:04,480 --> 00:02:08,009 sebagai nilai yang anda boleh, sebenarnya, menulis kepada. 45 00:02:08,009 --> 00:02:10,889 Begitu buruk tidak memperuntukkan memori anda di sana. 46 00:02:10,889 --> 00:02:13,150 >> Jadi dalam soalan 1, kita bertanya, andaikan bahawa versi 2 adalah 47 00:02:13,150 --> 00:02:14,230 disusun dan dilaksanakan. 48 00:02:14,230 --> 00:02:15,900 Mengapa mungkin program ini segfault? 49 00:02:15,900 --> 00:02:17,990 Jadi satu ini kurang kereta. 50 00:02:17,990 --> 00:02:21,470 Dan ada benar-benar hanya satu cara yang jelas di mana anda boleh 51 00:02:21,470 --> 00:02:22,810 mencetuskan segfault di sini. 52 00:02:22,810 --> 00:02:23,730 Dan ini adalah bertema. 53 00:02:23,730 --> 00:02:28,180 Bila-bila masa kita menggunakan c dalam ingatan, apa yang anda boleh lakukan untuk mendorong segfault yang 54 00:02:28,180 --> 00:02:30,718 dengan versi 2? 55 00:02:30,718 --> 00:02:35,560 >> PENONTON: Jika anda menggunakan input yang di rentetan itu lebih lama daripada 49 56 00:02:35,560 --> 00:02:35,975 aksara. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. MALAN: Tepat sekali. 58 00:02:37,260 --> 00:02:41,420 Setiap kali anda melihat sesuatu yang tetap panjang ketika datang ke array, anda 59 00:02:41,420 --> 00:02:44,650 radar perlu pergi bahawa ini boleh menjadi bermasalah jika anda tidak memeriksa 60 00:02:44,650 --> 00:02:45,810 sempadan array. 61 00:02:45,810 --> 00:02:46,650 Dan itulah masalah di sini. 62 00:02:46,650 --> 00:02:47,910 Kami masih menggunakan scanf. 63 00:02:47,910 --> 00:02:52,200 Kami masih menggunakan% s, yang bermaksud cuba untuk membaca rentetan daripada pengguna. 64 00:02:52,200 --> 00:02:56,300 Itu akan dibaca ke dalam s, yang, pada ketika ini, adalah berkesan 65 00:02:56,300 --> 00:02:58,570 alamat sebahagian memori atau ia setara. 66 00:02:58,570 --> 00:03:02,080 Ia adalah nama array watak ingatan. 67 00:03:02,080 --> 00:03:07,610 >> Tetapi tepat bahawa, jika anda membaca rentetan itulah yang lebih panjang daripada 49 aksara, 49 68 00:03:07,610 --> 00:03:10,440 kerana anda perlu ruang untuk garis sendeng terbalik di 0, anda akan melimpah 69 00:03:10,440 --> 00:03:11,390 penampan itu. 70 00:03:11,390 --> 00:03:16,410 Dan anda mungkin akan bernasib baik dan dapat menulis watak ke-51, ke-52, ke-53. 71 00:03:16,410 --> 00:03:18,560 Tetapi pada satu ketika, OS akan mengatakan, tidak. 72 00:03:18,560 --> 00:03:21,270 Ini pasti memori tidak anda dibenarkan untuk menyentuh. 73 00:03:21,270 --> 00:03:23,380 Dan program ini akan segfault. 74 00:03:23,380 --> 00:03:26,650 >> Jadi di sana, heuristik perlu apa-apa masa anda mempunyai panjang tetap, anda mempunyai 75 00:03:26,650 --> 00:03:30,150 memastikan anda memeriksa panjang daripada apa sahaja yang anda cuba 76 00:03:30,150 --> 00:03:31,090 untuk membaca ke dalamnya. 77 00:03:31,090 --> 00:03:35,110 >> PENONTON: Jadi untuk menyelesaikan itu, anda boleh mempunyai satu kenyataan memeriksa sebenarnya 78 00:03:35,110 --> 00:03:37,140 lebih besar panjang daripada atau kurang daripada? 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. MALAN: Sudah tentu. 80 00:03:37,730 --> 00:03:41,706 Anda hanya perlu satu keadaan yang mengatakan, jika - 81 00:03:41,706 --> 00:03:46,080 atau sebaliknya anda tidak semestinya tahu terlebih dahulu berapa banyak aksara yang 82 00:03:46,080 --> 00:03:49,060 pengguna akan menaip, kerana anda mempunyai ayam dan telur. 83 00:03:49,060 --> 00:03:51,860 Tidak sehingga anda membacanya dengan scanf anda boleh mengetahui berapa lama ia adalah. 84 00:03:51,860 --> 00:03:54,500 Tetapi pada ketika itu, ia terlalu lewat, kerana anda telah membaca ke dalam 85 00:03:54,500 --> 00:03:55,710 beberapa blok ingatan. 86 00:03:55,710 --> 00:03:59,590 Supaya mengetepikan, bertindak tidak perpustakaan CS50 isu ini sama sekali, ingat 87 00:03:59,590 --> 00:04:01,060 dengan menggunakan fgetc. 88 00:04:01,060 --> 00:04:05,390 Dan ia membaca satu aksara pada satu masa, tip-kepatuhan kepada dasar bersama, mengetahui bahawa anda 89 00:04:05,390 --> 00:04:08,060 tidak boleh melimpah watak jika anda membaca satu demi satu. 90 00:04:08,060 --> 00:04:11,580 >> Menangkap ialah dengan ingat getstring adalah bahawa kita perlu sentiasa saiz semula 91 00:04:11,580 --> 00:04:13,590 bahawa sebahagian daripada ingatan, yang hanya sakit. 92 00:04:13,590 --> 00:04:15,310 Ia banyak baris kod untuk melakukannya. 93 00:04:15,310 --> 00:04:18,779 Jadi satu lagi pendekatan adalah untuk sebenarnya menggunakan sepupu, jadi 94 00:04:18,779 --> 00:04:19,790 untuk bercakap, daripada scanf. 95 00:04:19,790 --> 00:04:22,820 Terdapat varian banyak ini fungsi yang benar-benar memeriksa 96 00:04:22,820 --> 00:04:25,870 panjang berapa banyak aksara anda mungkin membaca maksima. 97 00:04:25,870 --> 00:04:29,430 Dan anda boleh menentukan, tidak membaca lebih daripada 50 aksara. 98 00:04:29,430 --> 00:04:34,110 Jadi yang akan menjadi pendekatan yang lain tetapi akomodatif kurang input yang lebih besar. 99 00:04:34,110 --> 00:04:37,040 >> Jadi soalan 2 meminta, andaikan versi yang 3 disusun dan dilaksanakan. 100 00:04:37,040 --> 00:04:39,960 Mengapa mungkin program yang segfault? 101 00:04:39,960 --> 00:04:42,650 Jadi satu ini sebenarnya yang sama menjawab, walaupun ia 102 00:04:42,650 --> 00:04:43,590 kelihatan sedikit pelamun. 103 00:04:43,590 --> 00:04:46,440 Kami menggunakan malloc, yang berasa seperti kami memberikan diri kita lebih banyak pilihan. 104 00:04:46,440 --> 00:04:48,030 Dan maka kita membebaskan yang ingatan pada akhir. 105 00:04:48,030 --> 00:04:49,580 Ia masih hanya 50 bait ingatan. 106 00:04:49,580 --> 00:04:53,620 Oleh itu, kita mungkin masih cuba untuk membaca di 51, 52, 1000 bait. 107 00:04:53,620 --> 00:04:55,830 Ia akan segfault untuk betul-betul sebab sama. 108 00:04:55,830 --> 00:04:57,530 >> Tetapi ada satu lagi sebab juga. 109 00:04:57,530 --> 00:05:03,890 Apa lagi yang boleh malloc pulangan selain alamat sebahagian memori? 110 00:05:03,890 --> 00:05:04,920 Ia dapat kembali null. 111 00:05:04,920 --> 00:05:07,560 Dan kerana kita tidak memeriksa itu, kami mungkin melakukan sesuatu 112 00:05:07,560 --> 00:05:11,350 bodoh untuk satu lagi sebab, iaitu bahawa kita boleh memberitahu scanf, membaca 113 00:05:11,350 --> 00:05:16,050 input pengguna daripada papan kekunci ke 0 lokasi, AKA null. 114 00:05:16,050 --> 00:05:18,890 Dan itu, juga, pasti akan mencetuskan segfault a. 115 00:05:18,890 --> 00:05:21,590 Jadi untuk tujuan kuiz, kami akan telah diterima sama ada dari orang-orang sebagai 116 00:05:21,590 --> 00:05:22,740 sebab yang sah. 117 00:05:22,740 --> 00:05:23,420 Satu adalah serupa. 118 00:05:23,420 --> 00:05:25,720 Satu adalah sedikit lebih nuanced. 119 00:05:25,720 --> 00:05:28,975 >> Akhir sekali, berkenaan dengan program ini penggunaan memori, bagaimana versi 2 dan 120 00:05:28,975 --> 00:05:30,350 versi 3 berbeza? 121 00:05:30,350 --> 00:05:35,070 Jadi untuk apa yang bernilai, kami melihat bekalan yang seolah-olah tidak berkesudahan mungkin 122 00:05:35,070 --> 00:05:35,770 jawapan untuk ini. 123 00:05:35,770 --> 00:05:39,300 Dan di antara jawapan rakyat, apa yang kami berharap untuk, tetapi kita diterima lain 124 00:05:39,300 --> 00:05:42,250 perkara, adalah menyebut beberapa hakikat bahawa versi 2 menggunakan 125 00:05:42,250 --> 00:05:44,560 tindanan kononnya. 126 00:05:44,560 --> 00:05:46,710 Versi 3 menggunakan timbunan itu. 127 00:05:46,710 --> 00:05:50,060 Dan fungsi, ini tidak benar-benar membuat semua yang banyak perbezaan. 128 00:05:50,060 --> 00:05:54,040 Pada akhir hari, kita masih hanya mendapat 50 bait ingatan. 129 00:05:54,040 --> 00:05:56,640 >> Tetapi itu adalah salah satu jawapan mungkin yang kami cari di. 130 00:05:56,640 --> 00:05:59,730 Tetapi anda akan melihat, sebagai anda mendapatkan kuiz anda kembali dari TFS, yang kita lakukan 131 00:05:59,730 --> 00:06:04,330 menerima perbincangan lain mereka kegunaan berbeza memori juga. 132 00:06:04,330 --> 00:06:08,600 Tetapi stack dan timbunan akan menjadi jawapan yang mudah untuk pergi dengan. 133 00:06:08,600 --> 00:06:11,150 Apa-apa soalan? 134 00:06:11,150 --> 00:06:12,400 Saya memberi anda Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB Bowden: Jadi masalah 4. 137 00:06:20,210 --> 00:06:21,985 Ini adalah salah satu di mana anda perlu mengisi dalam bilangan bait daripada semua 138 00:06:21,985 --> 00:06:23,460 jenis yang berbeza digunakan. 139 00:06:23,460 --> 00:06:24,830 Perkara itu kita lihat. 140 00:06:24,830 --> 00:06:27,930 Andaikan seni bina 32-bit, seperti perkakas CS50 ini. 141 00:06:27,930 --> 00:06:33,530 Jadi salah satu perkara asas tentang 32-bit seni bina, yang memberitahu kita 142 00:06:33,530 --> 00:06:37,490 bagaimana besar penunjuk akan berada dalam seni bina. 143 00:06:37,490 --> 00:06:43,020 >> Dengan segera, kita tahu bahawa apa-apa penunjuk jenis adalah 32-bit atau 4 bait. 144 00:06:43,020 --> 00:06:46,010 Jadi mencari di meja ini, nod * adalah sejenis penunjuk. 145 00:06:46,010 --> 00:06:47,250 Itu akan menjadi 4 bait. 146 00:06:47,250 --> 00:06:51,640 Nod struct *, itu betul-betul sama dengan nod bintang. 147 00:06:51,640 --> 00:06:53,590 Dan supaya akan menjadi 4 bait. 148 00:06:53,590 --> 00:06:58,270 String, supaya ia tidak kelihatan seperti Penunjuk lagi, tetapi typedef, yang 149 00:06:58,270 --> 00:07:01,590 rentetan hanya * char, yang adalah sejenis penunjuk. 150 00:07:01,590 --> 00:07:03,550 Supaya akan menjadi 4 bait. 151 00:07:03,550 --> 00:07:06,150 >> Jadi ketiga-tiga semua 4 bait. 152 00:07:06,150 --> 00:07:09,350 Sekarang, nod dan pelajar adalah sedikit lebih rumit. 153 00:07:09,350 --> 00:07:15,160 Jadi mencari pada nod dan pelajar, kita lihat nod sebagai integer dan penunjuk. 154 00:07:15,160 --> 00:07:18,050 Dan pelajar adalah dua petunjuk di dalamnya. 155 00:07:18,050 --> 00:07:23,340 Jadi sekurang-kurangnya untuk kes kami di sini, cara bahawa kita berakhir mengira saiz 156 00:07:23,340 --> 00:07:27,020 struct ini hanya menambah sehingga semua itulah di dalam struct itu. 157 00:07:27,020 --> 00:07:30,690 >> Jadi untuk nod, kita mempunyai integer, yang 4 bait. 158 00:07:30,690 --> 00:07:32,830 Kami mempunyai penunjuk, yang 4 bait. 159 00:07:32,830 --> 00:07:35,820 Dan sebagainya satu nod akan untuk mengambil 8 bait. 160 00:07:35,820 --> 00:07:39,490 Begitu juga bagi pelajar, kita mempunyai penunjuk itulah 4 bait dan satu lagi 161 00:07:39,490 --> 00:07:40,770 penunjuk itulah 4 bait. 162 00:07:40,770 --> 00:07:43,180 Jadi itu akan berakhir sehingga menjadi 8 bait. 163 00:07:43,180 --> 00:07:45,480 Jadi nod dan pelajar adalah 8 bait. 164 00:07:45,480 --> 00:07:48,950 Dan ketiga-tiga ini semua 4 bait. 165 00:07:48,950 --> 00:07:50,240 Soalan pada itu? 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Ya. 168 00:07:54,990 --> 00:07:58,413 >> PENONTON: Adakah ia adalah 64-bit seni bina, kalau 169 00:07:58,413 --> 00:07:59,880 dua kali ganda mereka semua? 170 00:07:59,880 --> 00:08:01,790 >> ROB Bowden: Ia tidak akan dua kali ganda mereka semua. 171 00:08:01,790 --> 00:08:05,830 Jadi 64-bit seni bina, ia, sekali lagi, perubahan yang perkara asas yang satu 172 00:08:05,830 --> 00:08:08,910 penunjuk kini 64 bit. 173 00:08:08,910 --> 00:08:09,290 Yeah. 174 00:08:09,290 --> 00:08:10,930 Jadi penunjuk adalah 8 bait. 175 00:08:10,930 --> 00:08:15,420 Jadi ini yang berada 4 bait akan menjadi 8 bait. 176 00:08:15,420 --> 00:08:18,617 Seorang pelajar, yang merupakan dua petunjuk, dengan baik, kini ia akan 177 00:08:18,617 --> 00:08:19,800 menjadi 8 bait, 8 bait. 178 00:08:19,800 --> 00:08:21,980 Ia akan membuat 16 bait. 179 00:08:21,980 --> 00:08:25,710 >> Tetapi nod masih 4 bait. 180 00:08:25,710 --> 00:08:27,800 Jadi penunjuk ini akan menjadi 8 bait. 181 00:08:27,800 --> 00:08:28,930 Ini adalah 4 bait. 182 00:08:28,930 --> 00:08:30,870 Jadi nod hanya akan menjadi 12 bait. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Lain-lain soalan pada satu itu? 185 00:08:39,280 --> 00:08:44,500 Jadi yang akan datang, ini adalah kod status HTTP. 186 00:08:44,500 --> 00:08:48,000 Dan anda mempunyai untuk menggambarkan keadaan di mana kekuatan ini 187 00:08:48,000 --> 00:08:49,810 dikembalikan kepada anda. 188 00:08:49,810 --> 00:08:56,730 satu masalah yang saya dengar ada pelajar ada adalah bahawa mereka cuba untuk membuat 189 00:08:56,730 --> 00:08:58,950 ralat berada di akhir pelanggan. 190 00:08:58,950 --> 00:09:02,320 Oleh itu, apabila kita cuba untuk membuat permintaan itu kepada pelayan, sesuatu yang tidak 191 00:09:02,320 --> 00:09:03,820 salah di pihak kami. 192 00:09:03,820 --> 00:09:07,660 Tetapi secara amnya, Kod ini adalah dipulangkan oleh pelayan. 193 00:09:07,660 --> 00:09:11,720 Oleh itu, kita mahu memikirkan apa yang berlaku salah atau betul pada pelayan yang 194 00:09:11,720 --> 00:09:14,280 menyebabkan perkara-perkara ini untuk dikembalikan. 195 00:09:14,280 --> 00:09:18,670 Jadi mengapa mungkin pulangan server kod status 200? 196 00:09:18,670 --> 00:09:19,920 Mana-mana pemikiran? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Yeah. 199 00:09:23,730 --> 00:09:27,850 Jadi sesuatu tentang berjaya permintaan itu telah melalui. 200 00:09:27,850 --> 00:09:30,260 Dan mereka dapat kembali apa sahaja yang anda meminta. 201 00:09:30,260 --> 00:09:32,240 Jadi semuanya baik. 202 00:09:32,240 --> 00:09:35,662 Apa kira-kira 302 ditemui? 203 00:09:35,662 --> 00:09:36,618 Yeah. 204 00:09:36,618 --> 00:09:39,008 >> PENONTON: Pelayan sedang untuk apa yang anda minta. 205 00:09:39,008 --> 00:09:40,442 Tetapi ia tidak dapat menemuinya. 206 00:09:40,442 --> 00:09:42,850 Jadi ada ralat. 207 00:09:42,850 --> 00:09:47,720 >> ROB Bowden: Jadi pelayan itu mencari apa yang anda mahu. 208 00:09:47,720 --> 00:09:51,682 Jadi hanya mencari di sini, 302 ditemui, ia dapat menemuinya. 209 00:09:51,682 --> 00:09:53,035 >> PENONTON: Saya minta maaf. 210 00:09:53,035 --> 00:09:54,388 Found bermakna mereka lakukan menemuinya. 211 00:09:54,388 --> 00:09:55,638 Maaf. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB Bowden: Jadi 302 dijumpai. 214 00:10:00,160 --> 00:10:02,350 Pelayan adalah dapat mencari apa yang anda mahu. 215 00:10:02,350 --> 00:10:04,640 >> PENONTON: Tetapi ia tidak memaparkan ia? 216 00:10:04,640 --> 00:10:08,180 >> ROB Bowden: Perbezaan antara ini 302 dan 200 ialah ia 217 00:10:08,180 --> 00:10:09,280 mengetahui apa yang kamu mahu. 218 00:10:09,280 --> 00:10:12,000 Tetapi ia tidak betul-betul di mana anda mahu bertanya. 219 00:10:12,000 --> 00:10:14,580 Jadi 302 adalah redirect biasa. 220 00:10:14,580 --> 00:10:16,510 Jadi, anda diminta halaman. 221 00:10:16,510 --> 00:10:19,590 Ia tahu, oh, saya mahu untuk kembali anda ini. 222 00:10:19,590 --> 00:10:21,070 Tetapi ini di URL yang berbeza. 223 00:10:21,070 --> 00:10:23,534 Jadi hey, anda benar-benar mahu ini. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. MALAN: Ini sekeping yang berkata bahawa kami memberikan anda semua ubah hala yang 225 00:10:26,950 --> 00:10:30,830 fungsi yang menggunakan fungsi header yang seterusnya, dicetak lokasi, 226 00:10:30,830 --> 00:10:34,110 kolon, dan kemudian URL yang anda mahu menolak pengguna. 227 00:10:34,110 --> 00:10:37,480 Walaupun anda tidak melihat 302 dengan jelas di sana, itulah yang PHP 228 00:10:37,480 --> 00:10:41,550 ajaib akan memasukkan sebagai pengepala berkata apa yang Rob berkata - 229 00:10:41,550 --> 00:10:41,930 dijumpai. 230 00:10:41,930 --> 00:10:43,180 Tetapi pergi sini sebaliknya. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB Bowden: OK. 233 00:10:46,160 --> 00:10:47,630 Jadi apa yang kira-kira 403 dilarang? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> PENONTON: Saya rasa ia adalah bahawa pelayan pada dasarnya mengatakan bahawa pelanggan 236 00:10:57,120 --> 00:10:59,970 tidak boleh mengakses halaman rumah. 237 00:10:59,970 --> 00:11:03,260 >> ROB Bowden: Jadi ya. 238 00:11:03,260 --> 00:11:07,670 Nah, jawapannya biasa kami mengharapkan sesuatu seperti, fail-fail 239 00:11:07,670 --> 00:11:08,920 tidak chmodded sewajarnya. 240 00:11:08,920 --> 00:11:11,590 Itu mungkin dalam keadaan tertentu anda melihat mereka. 241 00:11:11,590 --> 00:11:18,920 Tetapi ada sebab yang pelanggan boleh bersalah di sini. 242 00:11:18,920 --> 00:11:20,440 Ada sebenarnya kod status lain - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Jadi ini adalah sama. 245 00:11:22,820 --> 00:11:24,590 >> 401 adalah tidak dibenarkan. 246 00:11:24,590 --> 00:11:26,130 Dan 403 adalah dilarang. 247 00:11:26,130 --> 00:11:31,890 Dan sebagainya yang tidak dibenarkan anda semata-mata mendapatkan jika anda tidak log masuk 248 00:11:31,890 --> 00:11:34,520 Tetapi log masuk mungkin bermakna yang anda dibenarkan. 249 00:11:34,520 --> 00:11:37,930 Tetapi jika anda sudah login dan anda masih tidak mempunyai kebenaran, maka 250 00:11:37,930 --> 00:11:40,140 anda juga boleh mendapatkan dilarang. 251 00:11:40,140 --> 00:11:45,320 Jadi, jika anda log masuk dan tidak mempunyai kebenaran, dilarang juga 252 00:11:45,320 --> 00:11:47,164 sesuatu yang anda boleh mendapatkan. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. MALAN: Dan mekanisme dengan yang masalah-masalah ini biasanya 254 00:11:48,900 --> 00:11:53,100 diselesaikan pada pelayan adalah melalui apa arahan? 255 00:11:53,100 --> 00:11:57,700 Chmod, jika ia, sesungguhnya, yang kebenaran mengeluarkan kepada fail atau direktori. 256 00:11:57,700 --> 00:11:59,220 >> ROB Bowden: Kemudian 404 tidak dijumpai. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Yeah. 259 00:12:03,470 --> 00:12:10,150 Jadi tidak seperti 302 di mana ia tidak betul-betul di mana anda meminta tetapi ia tahu apa yang 260 00:12:10,150 --> 00:12:12,710 anda mahu, ini, ia hanya mempunyai tidak tahu apa yang anda mahu. 261 00:12:12,710 --> 00:12:15,648 Dan anda tidak meminta sesuatu yang sah. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Saya teko dan kemudian 500 pelayan dalaman. 264 00:12:22,310 --> 00:12:24,870 Jadi mengapa anda mungkin mendapatkan itu? 265 00:12:24,870 --> 00:12:26,120 >> Jadi segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Saya sebenarnya tidak tahu penggredan standard untuk ini. 268 00:12:30,640 --> 00:12:34,850 Tetapi jika kod PHP anda mempunyai sesuatu salah ke dalamnya, dalam teori, ia boleh 269 00:12:34,850 --> 00:12:39,650 sebenarnya segfault, di mana, ini 500 Ralat pelayan dalaman, sesuatu 270 00:12:39,650 --> 00:12:41,400 yang salah dengan pelayan anda tatarajah. 271 00:12:41,400 --> 00:12:44,320 Atau ada ralat sintaks dalam kod PHP anda. 272 00:12:44,320 --> 00:12:46,095 Atau sesuatu yang buruk sedang berlaku. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. MALAN: Kami tidak melihat segfault antara jawapan beberapa orang itu. 274 00:12:48,320 --> 00:12:49,490 Dan dari segi teknikal, ia boleh berlaku. 275 00:12:49,490 --> 00:12:53,820 Tetapi itu akan menjadi PHP, program ini yang ditulis oleh orang lain, sebenarnya 276 00:12:53,820 --> 00:12:57,790 segfaulted, yang hanya jika orang-orang diskru dan menulis kod buggy di 277 00:12:57,790 --> 00:13:00,680 jurubahasa mereka akan PHP sendiri segfault. 278 00:13:00,680 --> 00:13:06,460 Jadi, walaupun 500 adalah seperti yang segfault dalam roh, ia selalunya 279 00:13:06,460 --> 00:13:10,490 hasil daripada isu fail konfigurasi dengan pelayan web anda atau, Rob berkata, 280 00:13:10,490 --> 00:13:13,200 ralat sintaks, seperti anda tidak menutup sebut harga. 281 00:13:13,200 --> 00:13:16,180 Atau anda hilang dengan koma bernoktah di suatu tempat. 282 00:13:16,180 --> 00:13:23,677 >> PENONTON: Jadi bagi Serangga Shuttle, saya berfikir apabila saya sekali saya klik yang 283 00:13:23,677 --> 00:13:26,300 penyemak imbas, tetapi tiada apa yang datang, apa yang mereka namakan halaman putih. 284 00:13:26,300 --> 00:13:28,056 Tetapi ia adalah kerana kod. 285 00:13:28,056 --> 00:13:29,440 Saya berfikir bahawa adalah JavaScript, bukan? 286 00:13:29,440 --> 00:13:29,770 >> ROB Bowden: Yeah. 287 00:13:29,770 --> 00:13:31,180 >> PENONTON: Adakah ralat yang masih naik? 288 00:13:31,180 --> 00:13:34,290 >> ROB Bowden: Jadi anda tidak akan mendapat kesilapan ini kerana segala-galanya 289 00:13:34,290 --> 00:13:36,930 dari perspektif pelayan web benar-benar halus. 290 00:13:36,930 --> 00:13:39,090 Tetapi anda diminta index.html. 291 00:13:39,090 --> 00:13:42,000 Anda diminta shuttle.js dan service.js. 292 00:13:42,000 --> 00:13:44,580 Dan ia mampu berjaya kembali kepada anda semua perkara-perkara - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Ia hanya apabila penyemak imbas anda cuba mentafsir kod JavaScript yang 296 00:13:49,330 --> 00:13:51,370 ia seperti, tunggu, ini tidak ralat JavaScript sah. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Apa-apa soalan lain? 299 00:13:58,210 --> 00:14:00,750 Baiklah. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. MALAN: Jadi seterusnya up adalah nombor 11. 301 00:14:04,120 --> 00:14:07,610 Dan 11 adalah yang paling menakutkan untuk ramai orang. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Jadi perkara yang paling penting untuk diperhatikan di sini adalah ini, sesungguhnya, kira-kira 304 00:14:18,570 --> 00:14:19,840 senarai duanya adalah terpakai dikaitkan. 305 00:14:19,840 --> 00:14:23,160 Tetapi ini tidak sama seperti tahun lepas masalah senarai duanya adalah terpakai dikaitkan, 306 00:14:23,160 --> 00:14:27,170 yang tidak memberi anda kaveat bahawa senarai itu boleh, sebenarnya, menjadi Unsorted. 307 00:14:27,170 --> 00:14:29,640 >> Jadi hakikat bahawa senarai itu Unsorted dan hakikat bahawa perkataan yang 308 00:14:29,640 --> 00:14:32,930 digariskan ada bertujuan untuk menyampaikan bahawa ini adalah sebenarnya satu pemudahan 309 00:14:32,930 --> 00:14:35,430 apa yang jika tidak, akan masalah yang lebih mencabar 310 00:14:35,430 --> 00:14:36,600 dan yang lebih panjang satu. 311 00:14:36,600 --> 00:14:40,760 Jadi satu kesilapan yang sama di sini adalah untuk telah meletakkan penyelesaian tahun lepas pada salah satu anda 312 00:14:40,760 --> 00:14:45,580 alat kelui dan kemudian hanya membuta tuli salinan yang turun sebagai jawapan, yang merupakan hak 313 00:14:45,580 --> 00:14:48,520 menjawab kepada soalan yang berbeza sama dalam semangat. 314 00:14:48,520 --> 00:14:51,340 Tetapi perihal tersirat di sini adalah seperti berikut. 315 00:14:51,340 --> 00:14:55,200 >> Jadi, satu, kami telah nod diisytiharkan dan ditakrifkan dalam cara yang biasa di sini. 316 00:14:55,200 --> 00:14:59,230 Maka kita ditakrifkan senarai menjadi global penunjuk dimulakan untuk nol. 317 00:14:59,230 --> 00:15:02,150 Kemudian nampaknya, ada dua fungsi kita mempunyai prototaip untuk di sini, masukkan 318 00:15:02,150 --> 00:15:03,240 dan keluarkan. 319 00:15:03,240 --> 00:15:06,600 Dan kemudian kita mempunyai beberapa contoh kod di sini menjalankan sekumpulan sisipan. 320 00:15:06,600 --> 00:15:09,930 Dan kemudian kami meminta anda untuk melengkapkan pelaksanaan insert bawah dalam apa-apa 321 00:15:09,930 --> 00:15:14,380 cara yang ia memasukkan n ke dalam senarai dalam masa yang tetap, juga menggariskan, 322 00:15:14,380 --> 00:15:15,730 walaupun sudah ada. 323 00:15:15,730 --> 00:15:20,600 >> Jadi keindahan dapat memasukkan dalam masa yang tetap ialah ia membayangkan 324 00:15:20,600 --> 00:15:23,060 bahawa anda perlu memasukkan nod baru di mana? 325 00:15:23,060 --> 00:15:23,690 Ke hadapan. 326 00:15:23,690 --> 00:15:27,760 Jadi ia menghapuskan, bersyukur, sekurang-kurangnya salah satu kes yang digunakan untuk memerlukan 327 00:15:27,760 --> 00:15:30,520 lebih baris kod, seperti yang berlaku tahun lepas dan juga di dalam kelas apabila kita 328 00:15:30,520 --> 00:15:34,040 bercakap melalui perkara seperti ini dengan manusia dan dengan beberapa 329 00:15:34,040 --> 00:15:35,250 kod pseudo lisan. 330 00:15:35,250 --> 00:15:39,190 Jadi dalam penyelesaian di sini, mari kita melangkau lebih itu hanya untuk mempunyai pada visual 331 00:15:39,190 --> 00:15:40,480 skrin. 332 00:15:40,480 --> 00:15:42,230 >> Perhatikan bahawa yang kami lakukan yang berikut. 333 00:15:42,230 --> 00:15:45,140 Dan juga notis pemudahan yang lain adalah bahawa walaupun ia 334 00:15:45,140 --> 00:15:48,280 sudah ada, jadi ini bermakna walaupun bilangan sudah ada, anda boleh 335 00:15:48,280 --> 00:15:50,280 hanya membuta tuli memasukkan satu lagi salinan pernyataan itu. 336 00:15:50,280 --> 00:15:52,560 Dan itu juga bertujuan untuk menjadi pemudahan, supaya anda boleh 337 00:15:52,560 --> 00:15:54,940 memberi tumpuan kepada, benar-benar, ada satu yang lebih sebahagian intelektual yang menarik dan 338 00:15:54,940 --> 00:15:58,090 bukan hanya beberapa ralat tambahan memeriksa diberi masa yang terhad. 339 00:15:58,090 --> 00:16:02,880 >> Jadi dalam larutan sampel ini, kita memperuntukkan penunjuk di tangan meninggalkan 340 00:16:02,880 --> 00:16:04,510 sisi di sini untuk nod. 341 00:16:04,510 --> 00:16:07,190 Sekarang, menyedari penunjuk bahawa, sebagai Rob berkata, hanya 32 bit. 342 00:16:07,190 --> 00:16:09,060 Dan ia tidak benar-benar mengandungi alamat sehingga anda 343 00:16:09,060 --> 00:16:09,970 sediakan alamat. 344 00:16:09,970 --> 00:16:13,220 Dan kita melakukan itu di tangan kanan sebelah melalui malloc. 345 00:16:13,220 --> 00:16:16,550 Seperti golongan yang baik, kita pastikan malloc tidak, sebenarnya, batal, supaya 346 00:16:16,550 --> 00:16:18,690 kita tidak sengaja membuat segfault di sini. 347 00:16:18,690 --> 00:16:22,840 Dan bila-bila masa anda menggunakan malloc dalam kehidupan, anda perlu memeriksa null, supaya 348 00:16:22,840 --> 00:16:24,090 anda mempunyai pepijat halus. 349 00:16:24,090 --> 00:16:28,460 >> Kemudian kami memulakan null bahawa dengan memberikan n dan sebelumnya dan seterusnya. 350 00:16:28,460 --> 00:16:32,450 Dan dalam kes ini di sini, saya dimulakan sebelumnya kepada batal, kerana ini baru 351 00:16:32,450 --> 00:16:34,780 nod yang akan menjadi baru permulaan senarai saya. 352 00:16:34,780 --> 00:16:37,050 Jadi ada akan menjadi apa-apa di hadapannya. 353 00:16:37,050 --> 00:16:42,010 Dan saya ingin menambah dasarnya yang senarai yang sedia ada untuk nod baru dengan 354 00:16:42,010 --> 00:16:44,700 menetapkan seterusnya sama dengan menyenaraikan sendiri. 355 00:16:44,700 --> 00:16:47,120 Tetapi saya tidak dilakukan hanya lagi. 356 00:16:47,120 --> 00:16:51,780 Jadi, jika senarai itu sendiri sudah wujud, dan terdapat sekurang-kurangnya satu nod 357 00:16:51,780 --> 00:16:57,070 sedia ada, jika ini adalah senarai di sini dan saya memasukkan nod baru di sini, saya 358 00:16:57,070 --> 00:17:01,840 perlu memastikan bahawa bekas nod saya mata ke belakang untuk nod baru saya, 359 00:17:01,840 --> 00:17:04,260 kerana ini adalah, sekali lagi, senarai duanya adalah terpakai dikaitkan. 360 00:17:04,260 --> 00:17:05,460 >> Oleh itu, kita melakukan pemeriksaan kewarasan. 361 00:17:05,460 --> 00:17:10,109 Jika senarai tidak batal, jika ada sudah satu atau lebih nod di sana, maka 362 00:17:10,109 --> 00:17:12,470 menambah bahawa kembali rujukan jadi untuk bercakap. 363 00:17:12,470 --> 00:17:15,420 Dan maka perkara yang terakhir yang kita perlukan lakukan adalah sebenarnya mengemaskini global 364 00:17:15,420 --> 00:17:20,329 senarai pembolehubah sendiri untuk menunjukkan untuk nod baru. 365 00:17:20,329 --> 00:17:21,790 Yeah. 366 00:17:21,790 --> 00:17:26,579 >> PENONTON: Dalam penunjuk anak panah [Didengar] sama batal, tidak yang 367 00:17:26,579 --> 00:17:30,420 menangani senarai kerana senarai itu adalah batal? 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. MALAN: Nope. 369 00:17:30,596 --> 00:17:34,500 Yang semata-mata saya menjadi proaktif berhati-hati, kerana jika ini adalah saya 370 00:17:34,500 --> 00:17:38,730 Senarai asal dengan mungkin beberapa lebih nod di sini dan saya memasukkan saya 371 00:17:38,730 --> 00:17:42,380 nod baru di sini, ada akan untuk menjadi apa-apa di sini. 372 00:17:42,380 --> 00:17:44,720 Dan saya mahu menangkap idea yang dengan menetapkan sebelumnya kepada 373 00:17:44,720 --> 00:17:47,740 null pada nod baru. 374 00:17:47,740 --> 00:17:51,410 Dan mungkin, jika kod saya adalah betul dan tidak ada cara lain untuk memasukkan 375 00:17:51,410 --> 00:17:54,970 nod selain daripada fungsi ini, mungkin, walaupun senarai sudah mempunyai 376 00:17:54,970 --> 00:18:00,090 satu atau lebih nod di dalamnya, mungkin senarai, nod yang pertama, akan mempunyai 377 00:18:00,090 --> 00:18:02,750 penunjuk sebelumnya null sendiri. 378 00:18:02,750 --> 00:18:03,550 >> PENONTON: Dan hanya susulan. 379 00:18:03,550 --> 00:18:08,139 Sebab anda meletakkan penunjuk setaraf seterusnya senarai adalah anda membuat penunjuk 380 00:18:08,139 --> 00:18:13,579 sebelum senarai di bahawa ia menunjuk ke depan, saya rasa - 381 00:18:13,579 --> 00:18:14,980 Saya tidakkah ibu - 382 00:18:14,980 --> 00:18:15,450 hanya menyenaraikan? 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. MALAN: Tepat sekali. 384 00:18:16,400 --> 00:18:19,400 Dan jadi mari kita sebenarnya mengambil kira dua kes di sini benar-benar, walaupun 385 00:18:19,400 --> 00:18:22,070 perintah kami akan menganggap mereka tidak agak yang sama seperti kod. 386 00:18:22,070 --> 00:18:26,250 Tetapi pada tahap yang tinggi, jika ini mewakili senarai dan ini adalah 32-bit 387 00:18:26,250 --> 00:18:29,560 penunjuk, senario yang paling mudah adalah bahawa ini adalah batal secara lalai. 388 00:18:29,560 --> 00:18:33,010 Dan rasa saya mahu untuk memasukkan bilangan 50 adalah nombor yang pertama. 389 00:18:33,010 --> 00:18:37,640 Jadi saya akan teruskan dan memperuntukkan nod, yang akan mengandungi 390 00:18:37,640 --> 00:18:38,770 tiga bidang - 391 00:18:38,770 --> 00:18:42,070 n, sebelum ini, dan seterusnya. 392 00:18:42,070 --> 00:18:44,580 >> Saya akan meletakkan jumlah 50 di sini, kerana ini akan menjadi n. 393 00:18:44,580 --> 00:18:46,130 Ini akan datang. 394 00:18:46,130 --> 00:18:48,530 Dan ini akan menjadi sebelumnya. 395 00:18:48,530 --> 00:18:50,910 Dan jadi apa yang saya lakukan dalam kes ini? 396 00:18:50,910 --> 00:18:53,900 Nah, saya baru sahaja dilakukan baris 1 di sini. 397 00:18:53,900 --> 00:18:55,400 Pointer n mendapat n. 398 00:18:55,400 --> 00:18:57,740 Saya kemudian berkata, sebelum ini perlu mendapatkan null. 399 00:18:57,740 --> 00:18:59,470 Jadi ini akan menjadi batal. 400 00:18:59,470 --> 00:19:01,365 Kemudian saya akan berkata seterusnya akan mendapatkan senarai. 401 00:19:01,365 --> 00:19:05,150 >> Dan ini hanya berfungsi dengan baik. 402 00:19:05,150 --> 00:19:06,500 Ini adalah batal. 403 00:19:06,500 --> 00:19:10,620 Dan jadi saya berkata, nod baru seterusnya bidang harus mendapatkan apa sahaja ini. 404 00:19:10,620 --> 00:19:12,570 Jadi yang meletakkan null lain di sana. 405 00:19:12,570 --> 00:19:14,510 Dan kemudian perkara terakhir Saya adalah memeriksa di sini. 406 00:19:14,510 --> 00:19:17,870 Jika senarai tidak sama dengan nol, tetapi ia adalah sama dengan nol, jadi kita skip yang 407 00:19:17,870 --> 00:19:18,470 sama sekali. 408 00:19:18,470 --> 00:19:23,520 Dan sebagainya semua saya lakukan seterusnya adalah senarai mendapat penunjuk, yang bergambar menyebabkan 409 00:19:23,520 --> 00:19:25,570 gambar seperti itu. 410 00:19:25,570 --> 00:19:26,620 Jadi itu satu senario. 411 00:19:26,620 --> 00:19:30,490 >> Dan satu yang anda telah bertanya tentang khusus adalah keadaan seperti ini, 412 00:19:30,490 --> 00:19:33,190 di mana kita sudah mempunyai senarai satu nod. 413 00:19:33,190 --> 00:19:36,240 Dan jika saya naik semula dalam asal pernyataan masalah, seterusnya kita akan 414 00:19:36,240 --> 00:19:39,320 memasukkan katakan adalah 34, hanya untuk demi perbincangan. 415 00:19:39,320 --> 00:19:46,210 Jadi saya akan hanya mudah menarik bahawa di sini. 416 00:19:46,210 --> 00:19:47,540 Saya baru sahaja malloced. 417 00:19:47,540 --> 00:19:49,310 Mari kita andaikan saya memeriksa null. 418 00:19:49,310 --> 00:19:51,870 >> Sekarang, saya akan memulakan n menjadi 34. 419 00:19:51,870 --> 00:19:53,040 Dan ini akan menjadi n. 420 00:19:53,040 --> 00:19:54,670 Ini akan datang. 421 00:19:54,670 --> 00:19:57,100 Dan ini akan menjadi sebelumnya. 422 00:19:57,100 --> 00:19:59,370 Mari kita pastikan saya tidak mendapatkan ini ke belakang. 423 00:19:59,370 --> 00:20:01,110 Previous diutamakan dalam takrif. 424 00:20:01,110 --> 00:20:03,070 Biar saya menetapkan ini. 425 00:20:03,070 --> 00:20:04,410 Ini adalah sebelum ini. 426 00:20:04,410 --> 00:20:05,780 Ini seterusnya. 427 00:20:05,780 --> 00:20:08,620 Walaupun mereka adalah sama, mari kita menyimpannya konsisten. 428 00:20:08,620 --> 00:20:09,450 >> Sebelumnya. 429 00:20:09,450 --> 00:20:11,030 Ini seterusnya. 430 00:20:11,030 --> 00:20:16,310 Jadi saya baru sahaja malloced nota saya, diperiksa for null, diberikan 34 ke nod. 431 00:20:16,310 --> 00:20:17,570 Sebelum mendapat null. 432 00:20:17,570 --> 00:20:19,480 Jadi yang memberikan saya itu. 433 00:20:19,480 --> 00:20:21,010 Seterusnya mendapat senarai. 434 00:20:21,010 --> 00:20:22,370 Jadi senarai adalah ini. 435 00:20:22,370 --> 00:20:26,520 Jadi ini adalah sekarang sama seperti melukis ini arrow, supaya mereka menunjuk kepada satu 436 00:20:26,520 --> 00:20:27,940 dalam yang sama. 437 00:20:27,940 --> 00:20:30,400 Dan kemudian saya memeriksa jika senarai tidak sama dengan nol. 438 00:20:30,400 --> 00:20:31,740 Dan ia bukan masa ini. 439 00:20:31,740 --> 00:20:35,580 Kemudian saya akan berbuat senarai sebelum mendapat pointer. 440 00:20:35,580 --> 00:20:39,700 >> Jadi senaraikan sebelumnya mendapat PTR. 441 00:20:39,700 --> 00:20:44,300 Jadi ini mempunyai kesan meletakkan arrow grafik di sini. 442 00:20:44,300 --> 00:20:46,930 Dan itu semakin sedikit yang ikal, garis. 443 00:20:46,930 --> 00:20:50,780 Dan kemudian, akhir sekali, saya mengemas kini menyenaraikan untuk menunjukkan penunjuk. 444 00:20:50,780 --> 00:20:55,560 Jadi sekarang ini mata kepada lelaki ini. 445 00:20:55,560 --> 00:20:57,170 Dan kini, mari kita buat yang cepat cek kewarasan. 446 00:20:57,170 --> 00:20:59,470 >> Berikut adalah senarai, yang merupakan pembolehubah global. 447 00:20:59,470 --> 00:21:02,850 Nod pertama adalah, sememangnya, 34, kerana Saya mengikuti anak panah yang. 448 00:21:02,850 --> 00:21:05,210 Dan itu betul kerana saya ingin memasukkan pada awal senarai 449 00:21:05,210 --> 00:21:06,070 semua nod baru. 450 00:21:06,070 --> 00:21:08,860 Bidang seterusnya beliau membawa saya kepada lelaki ini. 451 00:21:08,860 --> 00:21:10,710 Jika aku berterusan, saya melanda seterusnya adalah null. 452 00:21:10,710 --> 00:21:11,760 Jadi tidak ada senarai lagi. 453 00:21:11,760 --> 00:21:14,460 Jika saya melanda sebelum ini, saya mendapatkan menyokong di mana saya harapkan. 454 00:21:14,460 --> 00:21:16,435 >> Jadi masih terdapat beberapa petunjuk, jelas, untuk memanipulasi. 455 00:21:16,435 --> 00:21:19,870 Tetapi hakikat bahawa anda diberitahu untuk melakukan ini dalam masa yang tetap bermakna anda hanya 456 00:21:19,870 --> 00:21:22,910 mempunyai beberapa terhingga perkara anda dibenarkan untuk dilakukan. 457 00:21:22,910 --> 00:21:24,290 Dan apa yang jumlah itu? 458 00:21:24,290 --> 00:21:25,185 Ia mungkin menjadi salah satu langkah. 459 00:21:25,185 --> 00:21:25,700 Ia mungkin dua. 460 00:21:25,700 --> 00:21:26,820 Ia mungkin 1,000 langkah. 461 00:21:26,820 --> 00:21:30,500 Tetapi ia terbatas, yang bermakna anda tidak boleh telah apa-apa jenis gelung berlaku 462 00:21:30,500 --> 00:21:32,010 di sini, tidak rekursi, tiada gelung. 463 00:21:32,010 --> 00:21:37,390 Ia hanya mendapat menjadi garis berkod keras kod yang kita ada dalam sampel ini. 464 00:21:37,390 --> 00:21:42,330 >> Jadi masalah yang akan datang 12 meminta kami menyiapkan pelaksanaan mengeluarkan 465 00:21:42,330 --> 00:21:46,740 bawah dalam apa-apa cara yang ia membuang n dari senarai dalam masa linear. 466 00:21:46,740 --> 00:21:48,740 Jadi anda mempunyai lebih sedikit bilik hal bergoyang sekarang. 467 00:21:48,740 --> 00:21:52,380 Anda mungkin menganggap bahawa n, jika ada dalam senarai, akan hadir 468 00:21:52,380 --> 00:21:53,340 tidak lebih daripada sekali. 469 00:21:53,340 --> 00:21:56,770 Dan itu juga bertujuan untuk menjadi berasaskan kuiz memudahkan andaian, jadi 470 00:21:56,770 --> 00:21:59,780 bahawa jika anda mendapati nombor 50 tempat dalam senarai, anda tidak juga 471 00:21:59,780 --> 00:22:02,890 perlu bimbang tentang yang berterusan untuk melelar, mencari setiap mungkin 472 00:22:02,890 --> 00:22:06,990 salinan 50, yang hanya akan diserahkan ke beberapa minutia dalam masa yang terhad. 473 00:22:06,990 --> 00:22:10,460 >> Jadi dengan mengeluarkan, yang satu ini pasti lebih mencabar dan lebih 474 00:22:10,460 --> 00:22:11,640 kod untuk menulis. 475 00:22:11,640 --> 00:22:14,990 Tetapi pada pandangan pertama, terus-terang, ia mungkin kelihatan hangat dan seperti 476 00:22:14,990 --> 00:22:17,060 tidak ada cara anda boleh mempunyai datang dengan pada kuiz. 477 00:22:17,060 --> 00:22:22,450 Tetapi jika kita memberi tumpuan kepada langkah-langkah individu, mudah-mudahan, ia akan tiba-tiba 478 00:22:22,450 --> 00:22:26,060 menyerang anda bahawa setiap individu ini langkah-langkah yang jelas masuk akal 479 00:22:26,060 --> 00:22:27,080 ditinjau kembali. 480 00:22:27,080 --> 00:22:28,200 Jadi mari kita membaca. 481 00:22:28,200 --> 00:22:32,570 >> Jadi pertama, kami memulakan penunjuk menjadi senaraikan sendiri. 482 00:22:32,570 --> 00:22:36,040 Kerana saya mahu masa linear, yang cara Saya akan mempunyai beberapa gelung. 483 00:22:36,040 --> 00:22:39,730 Dan cara yang biasa untuk melelar atas nod dalam struktur senarai atau apa-apa jenis 484 00:22:39,730 --> 00:22:43,860 struktur iterative adalah untuk mengambil penunjuk ke hadapan data 485 00:22:43,860 --> 00:22:46,990 struktur dan kemudian hanya mula mengemas kini dan berjalan jalan 486 00:22:46,990 --> 00:22:48,650 melalui struktur data. 487 00:22:48,650 --> 00:22:50,040 Jadi saya akan melakukan perkara tersebut. 488 00:22:50,040 --> 00:22:54,260 >> Walaupun penunjuk, pembolehubah sementara saya, tidak sama dengan nol, mari kita 489 00:22:54,260 --> 00:22:55,660 teruskan dan cek. 490 00:22:55,660 --> 00:22:56,910 Adakah saya mendapatkan bertuah? 491 00:22:56,910 --> 00:23:01,740 Adalah bidang n dalam nod saya kini melihat sama dengan 492 00:23:01,740 --> 00:23:03,380 bilangan saya cari? 493 00:23:03,380 --> 00:23:05,410 Dan jika demikian, mari kita buat sesuatu. 494 00:23:05,410 --> 00:23:10,020 Sekarang, notis ini jika keadaan mengelilingi keseluruhan 495 00:23:10,020 --> 00:23:11,520 baris berikut kod. 496 00:23:11,520 --> 00:23:14,610 Ini adalah satu-satunya perkara yang saya mengambil berat tentang - mencari nombor dalam soalan. 497 00:23:14,610 --> 00:23:18,010 Jadi tidak ada lagi, yang memudahkan perkara konsep sedikit. 498 00:23:18,010 --> 00:23:22,040 >> Tetapi sekarang, saya sedar, dan anda mungkin mempunyai hanya menyedari ini selepas berfikir 499 00:23:22,040 --> 00:23:24,720 melalui sedikit, ada sebenarnya dua kes di sini. 500 00:23:24,720 --> 00:23:28,060 Satu adalah di mana nod adalah di permulaan senarai, yang merupakan 501 00:23:28,060 --> 00:23:31,040 sedikit menjengkelkan, kerana itulah yang kes khas, kerana anda perlu berurusan 502 00:23:31,040 --> 00:23:33,340 dengan perkara ini, yang adalah satu-satunya anomali. 503 00:23:33,340 --> 00:23:35,720 Mana-mana sahaja dalam senarai, ia adalah perkara yang sama. 504 00:23:35,720 --> 00:23:38,050 Ada nod sebelumnya dan seterusnya nod, nod sebelumnya, nod akan datang. 505 00:23:38,050 --> 00:23:40,940 Tetapi lelaki ini adalah khas sedikit jika dia pada permulaan. 506 00:23:40,940 --> 00:23:48,710 >> Jadi, jika penunjuk sama senarai sendiri, jadi jika saya pada awal 507 00:23:48,710 --> 00:23:53,960 senarai dan saya telah mendapati n, saya perlu untuk melakukan beberapa perkara. 508 00:23:53,960 --> 00:23:59,230 Satu, saya perlu menukar senarai menunjukkan ke medan seterusnya, 50. 509 00:23:59,230 --> 00:24:01,270 Jadi andaikan yang saya cuba untuk menghapuskan 34. 510 00:24:01,270 --> 00:24:03,560 Jadi lelaki ini ini mendapat untuk pergi jauh dalam seketika. 511 00:24:03,560 --> 00:24:07,210 >> Jadi, saya akan berkata, senarai mendapat penunjuk akan datang. 512 00:24:07,210 --> 00:24:08,570 Nah, ini adalah penunjuk. 513 00:24:08,570 --> 00:24:10,360 Seterusnya menghala di sini. 514 00:24:10,360 --> 00:24:17,470 Jadi ini berubah ini anak panah kanan sekarang untuk menunjuk kepada lelaki ini di sini. 515 00:24:17,470 --> 00:24:19,580 Sekarang, ingat, kita ada pembolehubah sementara. 516 00:24:19,580 --> 00:24:23,520 Oleh itu, kita tidak yatim sebarang nod, kerana saya juga mempunyai lelaki ini dalam saya 517 00:24:23,520 --> 00:24:25,010 pelaksanaan keluarkan. 518 00:24:25,010 --> 00:24:29,600 Jadi sekarang, jika senarai itu sendiri tidak batal, Saya perlu menetapkan sesuatu yang kecil. 519 00:24:29,600 --> 00:24:32,690 >> Saya perlu kini memastikan bahawa anak panah ini, yang sebelum ini menunjuk 520 00:24:32,690 --> 00:24:36,830 50-34, ini telah mendapat untuk pergi jauh, kerana jika saya cuba untuk menghapuskan 521 00:24:36,830 --> 00:24:41,910 34, 50 mempunyai yang lebih baik tidak mengambil apa-apa jenis kembali merujuk kepada ia sebagai 522 00:24:41,910 --> 00:24:42,820 arrow yang disyorkan. 523 00:24:42,820 --> 00:24:44,820 Jadi saya hanya melakukan baris ini. 524 00:24:44,820 --> 00:24:46,520 Demikian maka aku selesai. 525 00:24:46,520 --> 00:24:48,040 Kes yang sebenarnya cukup mudah. 526 00:24:48,040 --> 00:24:51,010 Mencincang off ketua senarai adalah agak mudah. 527 00:24:51,010 --> 00:24:52,980 >> Malangnya, ada ini blok menjengkelkan yang lain. 528 00:24:52,980 --> 00:24:56,170 Jadi sekarang, saya perlu mengambil kira kes di mana ada sesuatu di tengah-tengah. 529 00:24:56,170 --> 00:24:59,880 Tetapi ia tidak terlalu teruk, kecuali untuk sintaks seperti ini. 530 00:24:59,880 --> 00:25:03,080 Jadi, jika saya tiada di permulaan senarai, saya di suatu tempat di tengah-tengah. 531 00:25:03,080 --> 00:25:08,160 Dan garis ini di sini mengatakan, permulaan pada apa jua nod anda berada di. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Pergi ke bidang seterusnya nod sebelumnya dan menunjukkan bahawa pada penunjuk. 534 00:25:18,550 --> 00:25:20,390 >> Mari kita buat ini bergambar. 535 00:25:20,390 --> 00:25:21,640 Yang semakin rumit. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Jadi, jika saya mempunyai bidang sebelumnya di sini - mari kita buat ini - bidang seterusnya di sini. 538 00:25:37,990 --> 00:25:41,200 Saya akan memudahkan petunjuk saya agak daripada menarik sejumlah besar 539 00:25:41,200 --> 00:25:45,710 perkara berulang-alik crisscrossing antara satu sama lain. 540 00:25:45,710 --> 00:25:50,870 Dan kini, mari kita hanya mengatakan ini adalah 1, 2, 3 demi perbincangan, walaupun 541 00:25:50,870 --> 00:25:53,410 walaupun yang tidak beratur dengan masalah yang berkenaan. 542 00:25:53,410 --> 00:25:55,900 >> Jadi di sini adalah senarai dikaitkan saya. 543 00:25:55,900 --> 00:25:59,300 Saya cuba untuk mengeluarkan dua di ini versi tertentu cerita. 544 00:25:59,300 --> 00:26:01,960 Jadi saya telah dikemaskini penunjuk kepada akan menunjuk ke lelaki ini. 545 00:26:01,960 --> 00:26:03,315 Jadi ini adalah PTR. 546 00:26:03,315 --> 00:26:04,530 Dia menunjuk sini. 547 00:26:04,530 --> 00:26:07,170 Ini adalah senarai, yang wujud di peringkat global seperti sebelum ini. 548 00:26:07,170 --> 00:26:09,200 Dan dia menunjuk sini tidak kira apa. 549 00:26:09,200 --> 00:26:10,800 Dan sekarang, saya cuba untuk membuang dua. 550 00:26:10,800 --> 00:26:13,850 >> Jadi, jika penunjuk menghala sini, saya akan mengikuti, nampaknya, 551 00:26:13,850 --> 00:26:17,110 penunjuk sebelumnya, yang meletakkan saya di 1. 552 00:26:17,110 --> 00:26:22,290 Saya kemudian akan mengatakan bahawa yang akan datang bidang, yang membawa saya ke ini 553 00:26:22,290 --> 00:26:25,410 kotak di sini, akan penunjuk sama akan datang. 554 00:26:25,410 --> 00:26:28,400 Jadi, jika penunjuk ini, ini adalah yang akan datang. 555 00:26:28,400 --> 00:26:31,840 Ini bermakna bahawa ini arrow keperluan untuk menunjuk kepada lelaki ini. 556 00:26:31,840 --> 00:26:35,140 >> Jadi apa yang baris kod mempunyai hanya dilakukan adalah sedikit ini. 557 00:26:35,140 --> 00:26:37,500 Dan sekarang, ini kelihatan seperti langkah ke arah yang betul. 558 00:26:37,500 --> 00:26:41,390 Kami pada dasarnya mahu Guntingan 2 daripada daripada tengah-tengah 1 dan 3. 559 00:26:41,390 --> 00:26:44,400 Jadi masuk akal bahawa kita mahu laluan penunjuk ini di sekelilingnya. 560 00:26:44,400 --> 00:26:50,400 Jadi baris ini akan datang memeriksa jika penunjuk seterusnya tidak batal, ada 561 00:26:50,400 --> 00:26:54,200 sesungguhnya seseorang di sebelah kanan 2, ini bermakna kita juga perlu lakukan 562 00:26:54,200 --> 00:26:55,850 sedikit Guntingan di sini. 563 00:26:55,850 --> 00:27:00,590 >> Jadi saya kini perlu mengikuti penunjuk ini dan mengemaskini penunjuk sebelumnya pada 564 00:27:00,590 --> 00:27:05,410 lelaki ini untuk melakukan sedikit daripada Workaround sini titik di sini. 565 00:27:05,410 --> 00:27:07,100 Dan kini, visual ini adalah baik. 566 00:27:07,100 --> 00:27:11,930 Ia sedikit tidak kemas dalam bahawa ada tidak ada menunjuk pada 2 lagi. 567 00:27:11,930 --> 00:27:13,600 2 menghala ke kiri. 568 00:27:13,600 --> 00:27:14,980 Dan 2 menghala ke kanan. 569 00:27:14,980 --> 00:27:17,480 Tetapi dia boleh buat apa yang dia mahu, kerana dia kira-kira untuk mendapatkan dibebaskan. 570 00:27:17,480 --> 00:27:19,480 Dan ia tidak kira apa nilai-nilai adalah lagi. 571 00:27:19,480 --> 00:27:23,040 >> Apa yang penting ialah bahawa baki lelaki adalah laluan di atas 572 00:27:23,040 --> 00:27:24,280 dan di bawah beliau sekarang. 573 00:27:24,280 --> 00:27:25,810 Dan sesungguhnya, itulah yang kita lakukan seterusnya. 574 00:27:25,810 --> 00:27:29,360 Kami penunjuk percuma, yang bererti kita memberitahu sistem operasi, anda adalah dialu-alukan 575 00:27:29,360 --> 00:27:30,906 untuk menuntut semula ini. 576 00:27:30,906 --> 00:27:34,900 Dan kemudian akhir sekali, kita kembali. 577 00:27:34,900 --> 00:27:37,220 Yang lain secara tersirat, jika kita tidak kembali lagi, 578 00:27:37,220 --> 00:27:38,290 kami ada untuk terus mencari. 579 00:27:38,290 --> 00:27:41,485 Jadi penunjuk sama penunjuk seterusnya hanya bermakna bergerak lelaki ini di sini. 580 00:27:41,485 --> 00:27:42,600 Pindah lelaki ini di sini. 581 00:27:42,600 --> 00:27:45,400 Pindah lelaki ini di sini jika, sebenarnya, kami tidak menjumpai bilangan 582 00:27:45,400 --> 00:27:46,960 kita cari yet. 583 00:27:46,960 --> 00:27:49,630 >> Jadi terus-terang, ia kelihatan benar-benar menggalakkan, saya fikir, pada mulanya 584 00:27:49,630 --> 00:27:52,180 pandangan, terutamanya jika anda berjuang dengan ini semasa kuiz kemudian melihat 585 00:27:52,180 --> 00:27:52,850 sesuatu seperti ini. 586 00:27:52,850 --> 00:27:55,050 Dan anda tepuk diri anda di belakang. 587 00:27:55,050 --> 00:27:57,080 Well, tidak ada cara saya boleh datang dengan kuiz. 588 00:27:57,080 --> 00:28:00,470 Tetapi saya akan berhujah, anda boleh jika anda memecahkan ke bawah ke dalam individu 589 00:28:00,470 --> 00:28:04,400 kes dan hanya berjalan melaluinya berhati-hati, walaupun, diakui, di bawah 590 00:28:04,400 --> 00:28:06,300 keadaan tekanan. 591 00:28:06,300 --> 00:28:09,470 >> Syukurlah, gambar yang dibuat semua bahagia. 592 00:28:09,470 --> 00:28:11,050 Anda boleh menarik ini dalam apa-apa cara. 593 00:28:11,050 --> 00:28:12,760 Anda tidak perlu melakukan crisscrossing yang perkara di sini. 594 00:28:12,760 --> 00:28:14,520 Anda boleh melakukannya dengan lurus ungkapan seperti ini. 595 00:28:14,520 --> 00:28:18,790 Tetapi intipati masalah ini, di umum, adalah untuk menyedari bahawa 596 00:28:18,790 --> 00:28:22,060 gambar pada akhirnya harus melihat sedikit sesuatu seperti ini, kerana 597 00:28:22,060 --> 00:28:25,030 pemalar masa tersirat bahawa anda menyimpan jamming dan jamming dan jamming yang 598 00:28:25,030 --> 00:28:29,900 nod baru pada awal senarai. 599 00:28:29,900 --> 00:28:31,960 Apa-apa soalan? 600 00:28:31,960 --> 00:28:34,565 Mungkin yang paling mencabar pasti soalan-soalan pengkodan. 601 00:28:34,565 --> 00:28:37,690 >> PENONTON: Jadi adalah senarai sama dengan mengetuai dalam contoh-contoh sebelumnya. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. MALAN: Tepat sekali, betul-betul. 603 00:28:39,640 --> 00:28:43,130 Hanya nama yang berlainan bagi pembolehubah global. 604 00:28:43,130 --> 00:28:44,380 Di seluruh dunia apa? 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB Bowden: OK. 607 00:28:49,730 --> 00:28:52,020 Jadi ini adalah satu di mana anda terpaksa menulis perenggan. 608 00:28:52,020 --> 00:28:56,060 Sesetengah orang menulis esei untuk soalan ini. 609 00:28:56,060 --> 00:29:00,230 Tetapi anda hanya perlu menggunakan enam penggal untuk menggambarkan apa yang berlaku apabila 610 00:29:00,230 --> 00:29:02,440 anda cuba untuk menghubungi facebook.com. 611 00:29:02,440 --> 00:29:07,930 Jadi saya hanya akan bercakap melalui proses menggunakan semua syarat-syarat ini. 612 00:29:07,930 --> 00:29:11,290 Jadi dalam pelayar kita, kita menaip facebook.com dan tekan Enter. 613 00:29:11,290 --> 00:29:17,280 Jadi pelayar kami akan membina sebuah HTTP meminta ia akan menghantar 614 00:29:17,280 --> 00:29:22,220 melalui beberapa proses ke Facebook untuk Facebook untuk bertindak balas kepada kita dengan 615 00:29:22,220 --> 00:29:24,450 HTML halaman itu. 616 00:29:24,450 --> 00:29:28,800 >> Jadi apa adalah proses di yang permintaan HTTP 617 00:29:28,800 --> 00:29:30,730 sebenarnya mendapat untuk Facebook? 618 00:29:30,730 --> 00:29:32,790 Oleh itu, kita perlu untuk menterjemahkan Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Jadi hanya diberi nama Facebook.com itu, di mana sebenarnya tidak permintaan HTTP 620 00:29:38,780 --> 00:29:39,940 perlu pergi? 621 00:29:39,940 --> 00:29:44,120 Oleh itu, kita perlu menterjemah Facebook.com ke alamat IP, yang unik 622 00:29:44,120 --> 00:29:47,620 mengenal pasti apa yang mesin kita sebenarnya ingin menghantar permintaan ini kepada. 623 00:29:47,620 --> 00:29:49,310 Komputer riba anda mempunyai alamat IP. 624 00:29:49,310 --> 00:29:52,240 Apa-apa yang berkaitan dengan internet mempunyai alamat IP. 625 00:29:52,240 --> 00:29:59,030 >> Jadi DNS, Sistem Nama Domain, iaitu apa yang akan mengendalikan terjemahan 626 00:29:59,030 --> 00:30:03,750 dari facebook.com kepada alamat IP yang anda benar-benar ingin hubungi. 627 00:30:03,750 --> 00:30:08,075 Oleh itu, kita menghubungi pelayan DNS dan katakan, apa yang facebook.com? 628 00:30:08,075 --> 00:30:16,560 Ia berkata, oh, itu alamat IP 190,212 sesuatu, sesuatu, sesuatu. 629 00:30:16,560 --> 00:30:16,900 Baiklah. 630 00:30:16,900 --> 00:30:18,850 Sekarang, saya tahu apa yang mesin Saya mahu kenalan. 631 00:30:18,850 --> 00:30:22,360 >> Jadi maka anda menghantar permintaan HTTP anda kepada mesin itu. 632 00:30:22,360 --> 00:30:24,140 Jadi bagaimana ia mendapatkan ke mesin itu? 633 00:30:24,140 --> 00:30:27,200 Nah, permintaan itu pergi dari router untuk melantun router. 634 00:30:27,200 --> 00:30:32,630 Ingat contoh di dalam kelas, di mana tersebut sebenarnya laluan bahawa 635 00:30:32,630 --> 00:30:35,340 paket mengambil apabila kami cuba untuk berkomunikasi. 636 00:30:35,340 --> 00:30:38,460 Kami melihat ia melompat lebih Atlantik Ocean pada satu titik atau apa sahaja. 637 00:30:38,460 --> 00:30:42,820 >> Jadi pelabuhan jangka lepas. 638 00:30:42,820 --> 00:30:46,520 Jadi ini kini pada komputer anda. 639 00:30:46,520 --> 00:30:49,970 Anda boleh mempunyai pelbagai perkara yang sedang berkomunikasi dengan internet. 640 00:30:49,970 --> 00:30:53,730 Jadi saya boleh berjalan, berkata, Skype. 641 00:30:53,730 --> 00:30:55,670 Saya mungkin pelayar web terbuka. 642 00:30:55,670 --> 00:30:59,010 Saya mungkin mempunyai sesuatu yang torrenting fail. 643 00:30:59,010 --> 00:31:00,880 Jadi semua perkara ini adalah berkomunikasi dengan 644 00:31:00,880 --> 00:31:02,600 internet dalam beberapa cara. 645 00:31:02,600 --> 00:31:08,070 >> Oleh itu, apabila komputer anda menerima beberapa data dari internet, bagaimana ia 646 00:31:08,070 --> 00:31:10,130 tahu apa yang sebenarnya permohonan mahu data? 647 00:31:10,130 --> 00:31:12,610 Bagaimana ia tahu sama ada ini tertentu data yang dimaksudkan untuk 648 00:31:12,610 --> 00:31:16,070 torrenting permohonan berbanding untuk pelayar web? 649 00:31:16,070 --> 00:31:20,980 Jadi ini adalah tujuan pelabuhan di yang semua aplikasi ini mempunyai 650 00:31:20,980 --> 00:31:22,720 mendakwa port pada komputer anda. 651 00:31:22,720 --> 00:31:27,580 Jadi pelayar web anda berkata, hey, Saya mendengar pada port 1000. 652 00:31:27,580 --> 00:31:32,240 Dan program torrenting anda mengatakan, Saya mendengar pada port 3000. 653 00:31:32,240 --> 00:31:34,770 Dan Skype berkata, saya menggunakan port 4000. 654 00:31:34,770 --> 00:31:41,950 >> Oleh itu, apabila anda mendapat beberapa data yang dimiliki kepada salah satu daripada aplikasi ini, data yang 655 00:31:41,950 --> 00:31:45,510 ditandakan dengan yang pelabuhan ia sebenarnya hendaklah dihantar bersama-sama dengan. 656 00:31:45,510 --> 00:31:47,950 Jadi ini berkata, oh, I kepunyaan ke pelabuhan 1000. 657 00:31:47,950 --> 00:31:50,950 Saya tahu maka saya perlu hantar bersama-sama dengan pelayar web saya. 658 00:31:50,950 --> 00:31:56,440 Jadi sebab itu berkaitan di sini adalah bahawa pelayan web cenderung untuk 659 00:31:56,440 --> 00:31:58,240 mendengar pada port 80. 660 00:31:58,240 --> 00:32:02,420 Oleh itu, apabila saya hubungi Facebook.com, saya berkomunikasi dengan beberapa mesin. 661 00:32:02,420 --> 00:32:06,390 Tetapi saya perlu mengatakan yang mana pelabuhan yang mesin saya mahu berkomunikasi dengan. 662 00:32:06,390 --> 00:32:09,160 Dan pelayan web cenderung untuk menjadi mendengar pada port 80. 663 00:32:09,160 --> 00:32:14,010 >> Jika mereka mahu, mereka boleh menetapkan sehingga jadi ia menyenaraikan sebagai pada port 7000. 664 00:32:14,010 --> 00:32:19,090 Dan kemudian dalam pelayar web, saya boleh secara manual menaip Facebook.com: 7000 untuk 665 00:32:19,090 --> 00:32:24,600 menghantar permintaan ke port 7000 web server Facebook. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. MALAN: Dan dalam kes ini, walaupun walaupun kami tidak memerlukan orang 667 00:32:26,820 --> 00:32:30,000 sebut ini, dalam kes ini, apa pelabuhan akan permintaan itu sebenarnya pergi ke? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Cuba lagi. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Tepat sekali. 672 00:32:44,300 --> 00:32:47,960 Tidak mencari, tetapi kehalusan yang yang terdapat di sana tidak ada yang lepas. 673 00:32:47,960 --> 00:32:51,770 >> ROB Bowden: Jadi HTTPS, kerana ia mendengar khusus untuk 674 00:32:51,770 --> 00:32:55,180 disulitkan, ia pada port 4430. 675 00:32:55,180 --> 00:32:57,680 >> PENONTON: Dan e-mel adalah 25, bukan? 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. MALAN: Outbound e-mel, 25, yep. 677 00:33:00,670 --> 00:33:03,760 >> ROB Bowden: Saya tidak tahu kebanyakan - semua orang-orang yang lebih rendah cenderung untuk menjadi 678 00:33:03,760 --> 00:33:06,310 dikhaskan untuk sesuatu. 679 00:33:06,310 --> 00:33:09,260 Saya fikir segala-galanya di bawah 1024 dikhaskan. 680 00:33:09,260 --> 00:33:13,450 >> PENONTON: Mengapa kamu katakan 3 adalah nombor yang salah? 681 00:33:13,450 --> 00:33:18,820 >> ROB Bowden: Kerana dalam alamat IP, ada empat kumpulan digit. 682 00:33:18,820 --> 00:33:21,090 Dan mereka 0-255. 683 00:33:21,090 --> 00:33:28,060 Jadi 192.168.2.1 adalah biasa rangkaian tempatan alamat IP. 684 00:33:28,060 --> 00:33:30,840 Notis semua daripada mereka adalah kurang daripada 255. 685 00:33:30,840 --> 00:33:33,570 Oleh itu, apabila saya bermula dengan 300, yang tidak mungkin mempunyai 686 00:33:33,570 --> 00:33:35,210 menjadi salah satu nombor. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. MALAN: Tetapi itu klip bodoh dari - adalah ia CSI, di mana mereka mempunyai 688 00:33:38,170 --> 00:33:39,970 nombor yang terlalu besar untuk alamat IP. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB Bowden: Sebarang pertanyaan mengenai perkara ini? 691 00:33:46,110 --> 00:33:51,710 Yang akan datang, perubahan begitu lengkap dalam topik, tetapi kita mempunyai pelbagai PHP untuk 692 00:33:51,710 --> 00:33:53,270 rumah-rumah di quad. 693 00:33:53,270 --> 00:33:56,360 Dan kita mempunyai senarai tidak tertib. 694 00:33:56,360 --> 00:33:59,550 Dan kita mahu mencetak setiap item senarai hanya mengandungi nama rumah. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Oleh itu, kita mempunyai gelung foreach. 697 00:34:11,870 --> 00:34:17,540 Jadi ingat, sintaksis adalah foreach pelbagai item dalam array. 698 00:34:17,540 --> 00:34:22,360 Jadi melalui setiap lelaran gelung, rumah akan mengambil salah satu daripada 699 00:34:22,360 --> 00:34:24,060 nilai-nilai di dalam array. 700 00:34:24,060 --> 00:34:26,530 >> Pada yang pertama lelaran, rumah akan Cabot House. 701 00:34:26,530 --> 00:34:30,370 Pada lelaran, rumah kedua akan menjadi Kurier House dan sebagainya. 702 00:34:30,370 --> 00:34:34,370 Jadi bagi setiap quad sebagai rumah, kami hanya akan mencetak - 703 00:34:34,370 --> 00:34:37,250 anda juga boleh bergema - 704 00:34:37,250 --> 00:34:42,199 item senarai dan nama rumah itu dan kemudian tutup item senarai. 705 00:34:42,199 --> 00:34:45,210 Pendakap kerinting adalah pilihan di sini. 706 00:34:45,210 --> 00:34:49,480 >> Dan kemudian kita berkata dalam soalan sendiri, ingat untuk menutup 707 00:34:49,480 --> 00:34:50,770 senarai tidak tertib tag. 708 00:34:50,770 --> 00:34:53,949 Oleh itu, kita perlu untuk keluar daripada mod PHP untuk melakukan ini. 709 00:34:53,949 --> 00:35:00,280 Atau kita boleh bergema menutup senarai tidak tertib tag. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. MALAN: Juga denda di sini akan telah menggunakan sekolah lama untuk 711 00:35:02,380 --> 00:35:07,340 gelung dengan $ i = 0 0 dan menggunakan tuduhan kepada memikirkan panjang sinar. 712 00:35:07,340 --> 00:35:09,240 Totally halus juga, hanya yang wordier sedikit. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> PENONTON: Jadi jika anda telah akan [Didengar], yang akan anda lakukan - 715 00:35:14,742 --> 00:35:16,734 Saya terlupa apa gelung [didengar] adalah. 716 00:35:16,734 --> 00:35:21,380 Anda akan $ quad kurungan i? 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. MALAN: Tepat sekali. 718 00:35:21,850 --> 00:35:23,100 Ya, betul-betul. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB Bowden: Apa-apa lagi? 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. MALAN: Baiklah. 723 00:35:32,010 --> 00:35:32,300 Keseimbangan. 724 00:35:32,300 --> 00:35:38,290 Jadi terdapat tandan jawapan mungkin bagi setiap satu. 725 00:35:38,290 --> 00:35:40,510 Kami benar-benar hanya mencari sesuatu yang mendesak kepada satu terbalik dan 726 00:35:40,510 --> 00:35:41,100 satu kekurangan. 727 00:35:41,100 --> 00:35:44,830 Dan nombor 16 bertanya, mengesahkan pengguna input pelanggan-sampingan, seperti JavaScript, 728 00:35:44,830 --> 00:35:47,280 bukan pelayan, seperti dengan PHP. 729 00:35:47,280 --> 00:35:49,450 Jadi apa yang merupakan satu peningkatan sebanyak melakukan pelanggan-sampingan? 730 00:35:49,450 --> 00:35:53,780 >> Nah, salah satu perkara yang kita dicadangkan adalah yang anda mengurangkan kependaman, kerana anda 731 00:35:53,780 --> 00:35:56,750 tidak perlu bersusah payah menghubungi pelayan, yang mungkin mengambil masa beberapa 732 00:35:56,750 --> 00:36:00,390 milisaat atau beberapa saat dengan mengelakkan itu dan hanya 733 00:36:00,390 --> 00:36:04,670 mengesahkan pengguna input pelanggan-sebelah mencetuskan satu pengendali di submit dan 734 00:36:04,670 --> 00:36:06,650 hanya menyemak, adakah mereka jenis sesuatu dalam nama? 735 00:36:06,650 --> 00:36:08,080 Adakah mereka menaip sesuatu di alamat e-mel? 736 00:36:08,080 --> 00:36:10,950 Adakah mereka memilih asrama dari menu drop-down? 737 00:36:10,950 --> 00:36:14,360 >> Anda boleh memberi mereka maklum balas serta-merta menggunakan komputer gigahertz yang 738 00:36:14,360 --> 00:36:16,770 atau apa sahaja yang mereka mempunyai itulah sebenarnya di atas meja mereka. 739 00:36:16,770 --> 00:36:19,310 Jadi ia hanya pengguna yang lebih baik mengalami biasanya. 740 00:36:19,310 --> 00:36:24,460 Tetapi satu kekurangan yang menjalankan pelanggan-sampingan pengesahan, jika anda melakukannya tanpa juga 741 00:36:24,460 --> 00:36:29,860 melakukan pengesahan pelayan-sampingan ialah sesiapa yang paling keluar dari CS50 tahu 742 00:36:29,860 --> 00:36:33,980 bahawa anda hanya boleh menghantar sebarang data yang ingin kepada pelayan apa-apa cara. 743 00:36:33,980 --> 00:36:37,030 Terus terang, dalam kebanyakan pelayar apa-apa, anda boleh klik di dalam tetapan dan hanya 744 00:36:37,030 --> 00:36:40,110 mematikan JavaScript, yang akan, oleh itu, melumpuhkan sebarang bentuk 745 00:36:40,110 --> 00:36:41,080 pengesahan. 746 00:36:41,080 --> 00:36:44,460 >> Tetapi anda juga mungkin ingat bahawa walaupun saya lakukan beberapa perkara batin dalam kelas menggunakan 747 00:36:44,460 --> 00:36:47,790 telnet dan sebenarnya berpura-pura menjadi pelayar dengan menghantar mendapatkan 748 00:36:47,790 --> 00:36:49,240 permintaan kepada pelayan. 749 00:36:49,240 --> 00:36:51,030 Dan itu pasti tidak menggunakan mana-mana JavaScript. 750 00:36:51,030 --> 00:36:53,290 Itu hanya saya menaip arahan pada keyboard. 751 00:36:53,290 --> 00:36:57,410 Jadi benar-benar, mana-mana pengaturcara dalam cukup keselesaan dengan web dan HTTP 752 00:36:57,410 --> 00:37:01,690 boleh menghantar apa sahaja data dia mahu ke pelayan tanpa pengesahan. 753 00:37:01,690 --> 00:37:05,470 Dan jika pelayan anda tidak juga memeriksa, Adakah mereka yang memberi saya nama, adalah 754 00:37:05,470 --> 00:37:08,930 sebenarnya alamat e-mel yang sah yang ini, adakah mereka memilih asrama, anda mungkin berakhir 755 00:37:08,930 --> 00:37:12,800 sehingga memasukkan palsu atau hanya data kosong ke dalam pangkalan data anda, yang mungkin 756 00:37:12,800 --> 00:37:15,450 tidak akan menjadi satu perkara yang baik jika anda menganggap ia adalah di sana. 757 00:37:15,450 --> 00:37:16,770 >> Jadi ini adalah satu realiti yang menyakitkan hati. 758 00:37:16,770 --> 00:37:19,890 Tetapi secara umum, pelanggan-sampingan pengesahan adalah besar. 759 00:37:19,890 --> 00:37:21,810 Tetapi ia bermakna dua kali ganda kerja. 760 00:37:21,810 --> 00:37:25,970 Walaupun terdapat memang wujud pelbagai perpustakaan, JavaScript perpustakaan untuk 761 00:37:25,970 --> 00:37:28,830 contoh, yang membuat sebanyak ini, lebih kurang sakit kepala. 762 00:37:28,830 --> 00:37:31,940 Dan anda boleh menggunakan semula beberapa kod pelayan, klien-sampingan. 763 00:37:31,940 --> 00:37:35,980 Tetapi menyedari bahawa ia biasanya kerja-kerja tambahan. 764 00:37:35,980 --> 00:37:36,415 Yeah. 765 00:37:36,415 --> 00:37:37,792 >> PENONTON: Jadi, jika kita hanya kata kurang selamat - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. MALAN: [KETAWA] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Mereka sentiasa lebih keras orang-orang yang mengadili. 769 00:37:43,105 --> 00:37:44,480 >> ROB Bowden: Itu akan telah diterima. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. MALAN: Apa? 771 00:37:44,810 --> 00:37:45,810 >> ROB Bowden: Saya telah mencipta masalah ini. 772 00:37:45,810 --> 00:37:46,735 Yang akan diterima. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. MALAN: Yeah. 774 00:37:47,220 --> 00:37:47,830 >> PENONTON: Percuma. 775 00:37:47,830 --> 00:37:51,770 >> ROB Bowden: Tetapi kita tidak menerima untuk yang pertama - 776 00:37:51,770 --> 00:37:53,630 baik, apa yang kami cari adalah sesuatu seperti anda tidak perlu 777 00:37:53,630 --> 00:37:55,270 berkomunikasi dengan pelayan. 778 00:37:55,270 --> 00:37:58,355 Kami tidak menerima hanya lebih cepat. 779 00:37:58,355 --> 00:38:00,080 >> PENONTON: Bagaimana tidak memuat semula halaman? 780 00:38:00,080 --> 00:38:00,430 >> ROB Bowden: Ya. 781 00:38:00,430 --> 00:38:03,000 Itu adalah jawapan yang diterima. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. MALAN: Apa-apa di mana kami merasakan ia adalah lebih mungkin daripada tidak mungkin 783 00:38:06,300 --> 00:38:09,780 bahawa anda tahu apa yang anda berkata, yang merupakan yang sukar 784 00:38:09,780 --> 00:38:13,500 talian untuk menarik kadang-kadang. 785 00:38:13,500 --> 00:38:16,000 Dengan menggunakan senarai berpaut dan bukan daripada pelbagai untuk mengekalkan 786 00:38:16,000 --> 00:38:17,590 senarai integer disusun. 787 00:38:17,590 --> 00:38:21,000 Jadi terbalik satu kita sering memetik dengan dikaitkan senarai yang bermotivasi keseluruhan mereka 788 00:38:21,000 --> 00:38:22,370 pengenalan adalah anda mendapatkan dinamisme. 789 00:38:22,370 --> 00:38:23,030 Mereka boleh berkembang. 790 00:38:23,030 --> 00:38:23,950 Mereka boleh mengecut. 791 00:38:23,950 --> 00:38:27,370 Jadi anda tidak perlu melompat melalui gelung untuk benar-benar mencipta memori lebih 792 00:38:27,370 --> 00:38:28,140 dengan array. 793 00:38:28,140 --> 00:38:30,310 Atau anda tidak perlu hanya mengatakan, maaf, pengguna. 794 00:38:30,310 --> 00:38:31,410 Array itu diisi. 795 00:38:31,410 --> 00:38:35,850 Pertumbuhan begitu dinamik senarai. 796 00:38:35,850 --> 00:38:37,210 Satu keburukan walaupun senarai dikaitkan? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> PENONTON: Ia linear. 799 00:38:43,356 --> 00:38:45,800 Mencari di senarai bersambung adalah linear bukan apa yang anda log masuk 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. MALAN: Tepat sekali. 801 00:38:46,360 --> 00:38:50,160 Mencari di senarai berpaut linear, walaupun ia disusun, kerana anda boleh 802 00:38:50,160 --> 00:38:53,170 hanya ikuti serbuk roti, ini petunjuk, dari permulaan senarai 803 00:38:53,170 --> 00:38:53,570 ke akhir. 804 00:38:53,570 --> 00:38:57,970 Anda tidak boleh memanfaatkan akses rawak dan, dengan itu, carian binari, walaupun ia 805 00:38:57,970 --> 00:39:00,740 disusun, yang anda boleh lakukan dengan array. 806 00:39:00,740 --> 00:39:02,390 Dan juga ada kos lain. 807 00:39:02,390 --> 00:39:02,966 Yeah. 808 00:39:02,966 --> 00:39:03,800 >> PENONTON: Memori yang tidak cekap? 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. MALAN: Yeah. 810 00:39:04,130 --> 00:39:06,940 Well, saya tidak akan semestinya mengatakan tidak cekap. 811 00:39:06,940 --> 00:39:10,110 Tetapi ia menelan belanja lebih banyak memori, kerana anda memerlukan 32 bit untuk setiap 812 00:39:10,110 --> 00:39:13,400 nod bagi penunjuk tambahan pada kurangnya untuk senarai secara tunggal dikaitkan. 813 00:39:13,400 --> 00:39:16,660 Sekarang, jika anda hanya menyimpan integer dan anda menambah penunjuk, itu 814 00:39:16,660 --> 00:39:17,830 sebenarnya jenis bukan remeh. 815 00:39:17,830 --> 00:39:19,340 Ia dua kali ganda jumlah memori. 816 00:39:19,340 --> 00:39:22,330 Tetapi dalam realiti, jika anda menyimpan satu Senarai berkait structs yang mungkin 817 00:39:22,330 --> 00:39:25,540 8 bait, 16 bait, lebih-lebih daripada itu, mungkin ia kurang 818 00:39:25,540 --> 00:39:26,500 kos marginal. 819 00:39:26,500 --> 00:39:28,320 Tetapi ia kos yang tetap. 820 00:39:28,320 --> 00:39:31,880 Jadi, sama ada dari orang-orang akan tunggu menjadi halus sebagai kelemahan. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Menggunakan PHP dan bukannya C untuk menulis program baris arahan. 823 00:39:36,100 --> 00:39:41,890 Jadi di sini, ia sering lebih cepat untuk menggunakan bahasa seperti PHP atau Ruby atau Python. 824 00:39:41,890 --> 00:39:43,700 Anda hanya cepat membuka sebuah editor teks. 825 00:39:43,700 --> 00:39:45,900 Anda mempunyai banyak lagi fungsi-fungsi disediakan untuk anda. 826 00:39:45,900 --> 00:39:49,325 PHP mempunyai sinki dapur fungsi, manakala dalam C, anda 827 00:39:49,325 --> 00:39:50,420 mempunyai sangat, sangat sedikit. 828 00:39:50,420 --> 00:39:53,820 Malah, lelaki yang tahu dengan cara yang sukar bahawa anda tidak mempunyai jadual hash. 829 00:39:53,820 --> 00:39:55,000 Anda tidak mempunyai dikaitkan senarai. 830 00:39:55,000 --> 00:39:57,470 Jika anda mahu mereka, anda perlu melaksanakannya sendiri. 831 00:39:57,470 --> 00:40:00,950 >> Jadi, satu terbalik PHP atau benar-benar apa-apa bahasa ditafsirkan adalah kepantasan 832 00:40:00,950 --> 00:40:02,920 yang anda boleh menulis kod. 833 00:40:02,920 --> 00:40:06,660 Tetapi keburukan, kita melihat ini apabila saya cepat disebat sehingga misspeller yang 834 00:40:06,660 --> 00:40:11,780 pelaksanaan dalam berceramah dengan menggunakan PHP, adalah yang menggunakan bahasa yang ditafsirkan 835 00:40:11,780 --> 00:40:13,570 biasanya lebih perlahan. 836 00:40:13,570 --> 00:40:18,420 Dan kita melihat bahawa boleh ditunjukkan dengan meningkat dalam masa daripada 0.3 saat untuk 3 837 00:40:18,420 --> 00:40:24,440 saat, kerana tafsiran yang benar-benar berlaku. 838 00:40:24,440 --> 00:40:27,060 >> Satu lagi terbalik adalah bahawa anda tidak perlu menyusun. 839 00:40:27,060 --> 00:40:30,130 Jadi ia juga mempercepatkan pembangunan secara kebetulan, kerana anda tidak perlu 840 00:40:30,130 --> 00:40:31,360 dua langkah untuk menjalankan program. 841 00:40:31,360 --> 00:40:32,140 Anda hanya perlu satu. 842 00:40:32,140 --> 00:40:35,260 Dan supaya cukup menarik juga. 843 00:40:35,260 --> 00:40:38,450 Menggunakan pangkalan data SQL dan bukannya fail CSV untuk menyimpan data. 844 00:40:38,450 --> 00:40:40,230 Pangkalan data SQL Jadi digunakan untuk pset7. 845 00:40:40,230 --> 00:40:42,060 Fail CSV anda tidak menggunakan banyak. 846 00:40:42,060 --> 00:40:45,960 Tetapi anda digunakan ia secara tidak langsung dalam pset7 sebagai baik dengan bercakap dengan Yahoo Kewangan. 847 00:40:45,960 --> 00:40:49,330 >> Tetapi CSV adalah seperti fail Excel tetapi super mudah, di mana ruangan adalah 848 00:40:49,330 --> 00:40:54,010 hanya demarked dengan koma dalam daripada fail sebaliknya teks. 849 00:40:54,010 --> 00:40:56,740 Dan menggunakan pangkalan data SQL adalah yang lebih menarik. 850 00:40:56,740 --> 00:41:00,060 Ia terbalik, kerana anda mendapat perkara yang seperti memilih dan memasukkan dan memadam. 851 00:41:00,060 --> 00:41:03,790 Dan anda mendapat, mungkin, indeks yang MySQL dan pangkalan data yang lain, seperti 852 00:41:03,790 --> 00:41:07,510 Oracle, membina untuk anda dalam ingatan, yang bermakna pilih anda mungkin tidak 853 00:41:07,510 --> 00:41:09,000 akan menjadi atas linear ke bawah. 854 00:41:09,000 --> 00:41:11,300 Ini sebenarnya akan menjadi sesuatu seperti carian binari atau sesuatu 855 00:41:11,300 --> 00:41:12,520 sama dalam semangat. 856 00:41:12,520 --> 00:41:13,930 Jadi mereka biasanya lebih cepat. 857 00:41:13,930 --> 00:41:16,040 >> Tetapi keburukan adalah bahawa ia hanya lebih banyak kerja. 858 00:41:16,040 --> 00:41:16,730 Ia usaha yang lebih. 859 00:41:16,730 --> 00:41:18,140 Anda perlu memahami pangkalan data. 860 00:41:18,140 --> 00:41:18,940 Anda perlu membinanya. 861 00:41:18,940 --> 00:41:20,840 Anda memerlukan pelayan untuk menjalankan pangkalan data atas. 862 00:41:20,840 --> 00:41:22,750 Anda perlu memahami bagaimana untuk menatarajah. 863 00:41:22,750 --> 00:41:24,930 Jadi ini hanya ini jenis keseimbangan. 864 00:41:24,930 --> 00:41:27,860 Satu fail CSV, anda boleh menciptakannya dengan gedit. 865 00:41:27,860 --> 00:41:28,770 Dan anda baik untuk pergi. 866 00:41:28,770 --> 00:41:31,550 Tidak ada kerumitan lebih dari itu. 867 00:41:31,550 --> 00:41:34,870 >> Menggunakan indone bukannya jadual hash dengan chaining berasingan untuk menyimpan 868 00:41:34,870 --> 00:41:37,490 kamus perkataan mengingatkan daripada pset5. 869 00:41:37,490 --> 00:41:42,480 Jadi cuba terbalik, dalam teori sekurang-kurangnya, adalah apa? 870 00:41:42,480 --> 00:41:46,380 Masa tetap, sekurang-kurangnya jika anda sambil berbincang pada setiap individu 871 00:41:46,380 --> 00:41:48,990 surat dalam perkataan, seperti anda mungkin ada untuk pset5. 872 00:41:48,990 --> 00:41:52,720 Yang mungkin menjadi lima Hash, enam Hash jika ada lima atau enam 873 00:41:52,720 --> 00:41:53,900 huruf dalam perkataan. 874 00:41:53,900 --> 00:41:54,580 Dan itu cukup baik. 875 00:41:54,580 --> 00:41:56,910 Dan jika ada had atas bagaimana panjang kata-kata anda mungkin, itu 876 00:41:56,910 --> 00:41:59,320 masa memang berasimptot berterusan. 877 00:41:59,320 --> 00:42:05,180 >> Manakala jadual hash dengan berasingan chaining, masalah di sana dengan yang 878 00:42:05,180 --> 00:42:09,070 jenis struktur data ialah Prestasi algoritma anda biasanya 879 00:42:09,070 --> 00:42:12,700 bergantung kepada beberapa perkara sudah dalam struktur data. 880 00:42:12,700 --> 00:42:15,660 Dan yang pasti kes dengan rantai, di mana barangan lebih banyak anda meletakkan 881 00:42:15,660 --> 00:42:18,800 ke dalam jadual hash, lebih lama mereka rantaian pergi, yang bermaksud dalam yang paling teruk 882 00:42:18,800 --> 00:42:21,960 kes, perkara yang anda mungkin mencari adalah semua jalan di hujung satu 883 00:42:21,960 --> 00:42:26,000 dari orang-orang rantai, yang berkesan anaknya itu adalah turun ke dalam sesuatu yang linear. 884 00:42:26,000 --> 00:42:29,450 >> Sekarang, dalam amalan, ia boleh benar-benar kes yang jadual hash dengan 885 00:42:29,450 --> 00:42:32,820 rantai adalah lebih cepat daripada yang sepadan pelaksanaan indone. 886 00:42:32,820 --> 00:42:35,570 Tetapi itu atas pelbagai sebab, antara yang cuba menggunakan banyak keseluruhan 887 00:42:35,570 --> 00:42:39,240 memori yang boleh, sebenarnya, perkara yang perlahan ke bawah, kerana anda tidak mendapatkan yang bagus 888 00:42:39,240 --> 00:42:42,410 manfaat sesuatu yang dinamakan caching, mana perkara-perkara yang dekat bersama-sama 889 00:42:42,410 --> 00:42:45,420 dalam ingatan boleh diakses sering lebih cepat. 890 00:42:45,420 --> 00:42:48,180 Dan kadang-kadang anda boleh datang dengan fungsi hash benar-benar baik. 891 00:42:48,180 --> 00:42:51,060 Walaupun anda perlu membuang sedikit memori, anda mungkin, sesungguhnya, dapat 892 00:42:51,060 --> 00:42:54,430 mencari sesuatu yang cepat dan tidak seburuk linear. 893 00:42:54,430 --> 00:42:58,410 >> Jadi ringkasnya, tidak semestinya dengan mana-mana satu atau dua 894 00:42:58,410 --> 00:43:00,050 perkara-perkara tertentu yang kita cari. 895 00:43:00,050 --> 00:43:03,080 Benar-benar apa-apa meyakinkan sebagai terbalik dan Kelemahan 896 00:43:03,080 --> 00:43:04,800 biasanya menarik perhatian kami. 897 00:43:04,800 --> 00:43:11,840 >> ROB Bowden: Jadi bagi yang terbalik, kita lakukan tidak menerima dengan sendiri "lebih pantas." Anda 898 00:43:11,840 --> 00:43:14,540 terpaksa mengatakan sesuatu mengenainya. 899 00:43:14,540 --> 00:43:17,910 Walaupun anda berkata secara teori lebih cepat, kami tahu yang anda jenis difahami 900 00:43:17,910 --> 00:43:19,470 bahawa itu 0 of 1. 901 00:43:19,470 --> 00:43:22,820 Dan jadual hash, dalam teori, bukan 0 daripada 1. 902 00:43:22,820 --> 00:43:26,550 Menyebut apa-apa mengenai runtime secara amnya mendapat anda mata. 903 00:43:26,550 --> 00:43:32,640 Tetapi "lebih cepat," kebanyakan penyelesaian yang pada lembaga besar yang telah cuba adalah 904 00:43:32,640 --> 00:43:34,990 objektif perlahan daripada penyelesaian yang berada jadual hash. 905 00:43:34,990 --> 00:43:37,250 Jadi lebih cepat dalam dan dengan sendirinya tidak benar-benar benar. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> DAVID J. MALAN: Dom de dom dom. 908 00:43:44,380 --> 00:43:46,686 Saya mungkin saya satu-satunya yang menyedari itu bagaimana yang sepatutnya 909 00:43:46,686 --> 00:43:47,500 dilafazkan, bukan? 910 00:43:47,500 --> 00:43:50,400 >> ROB Bowden: Saya sebenarnya tidak tahu. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. MALAN: Ia dibuat rasa dalam kepala saya. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB Bowden: Saya melakukan satu ini. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Jadi ini adalah salah satu di mana anda terpaksa menarik gambar rajah yang sama dengan anda mungkin 916 00:44:04,243 --> 00:44:06,040 telah melihat dalam peperiksaan yang lepas. 917 00:44:06,040 --> 00:44:12,200 Jadi mari kita hanya melihat ini. 918 00:44:12,200 --> 00:44:18,170 Jadi dari nod HTML, kita mempunyai dua kanak-kanak, kepala dan badan. 919 00:44:18,170 --> 00:44:20,570 Oleh itu, kita cawangan - kepala dan badan. 920 00:44:20,570 --> 00:44:22,280 Kepala mempunyai tag tajuk. 921 00:44:22,280 --> 00:44:23,710 Jadi kita mempunyai tajuk. 922 00:44:23,710 --> 00:44:28,450 >> Sekarang, satu perkara yang ramai orang terlupa adalah bahawa nod teks adalah 923 00:44:28,450 --> 00:44:30,430 elemen dalam pokok ini. 924 00:44:30,430 --> 00:44:36,260 Jadi di sini kita berlaku untuk menarik mereka sebagai oval untuk membezakan mereka daripada semua 925 00:44:36,260 --> 00:44:37,380 jenis nod. 926 00:44:37,380 --> 00:44:41,450 Tetapi notis juga di sini kami mempunyai, tengah dan bawah akan berakhir menjadi 927 00:44:41,450 --> 00:44:42,560 nod teks. 928 00:44:42,560 --> 00:44:46,250 Jadi melupakan mereka adalah agak daripada satu kesilapan yang sama. 929 00:44:46,250 --> 00:44:48,770 >> Badan itu mempunyai tiga orang anak - ketiga-tiga divs. 930 00:44:48,770 --> 00:44:53,340 Jadi div, div, div dan kemudian teks yang kanak-kanak nod dari orang-orang divs. 931 00:44:53,340 --> 00:44:55,900 Yang cukup banyak ia bagi soalan. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. MALAN: Dan ia diperhatikan, walaupun kita tidak kekal di atas ini 933 00:44:57,860 --> 00:45:01,040 maklumat di dalam masa yang kita belanjakan JavaScript, bahawa perintah itu tidak, dalam 934 00:45:01,040 --> 00:45:02,290 Malah, perkara dari segi teknikal. 935 00:45:02,290 --> 00:45:06,330 Jadi, jika kepala datang sebelum badan dalam HTML, maka ia akan muncul kepada 936 00:45:06,330 --> 00:45:08,860 meninggalkan badan dalam DOM sebenar. 937 00:45:08,860 --> 00:45:12,265 Bahawa beliau adalah, secara umum, hanya FYI, sesuatu yang dinamakan perintah dokumen, di mana 938 00:45:12,265 --> 00:45:13,260 ia perkara. 939 00:45:13,260 --> 00:45:17,470 Dan jika anda telah melaksanakan penghurai yang, satu program yang membaca HTML dalam bangunan 940 00:45:17,470 --> 00:45:20,960 naik ke atas pokok dalam ingatan, untuk menjadi jujur, itulah gerak hati mungkin apa yang anda 941 00:45:20,960 --> 00:45:24,720 melakukan anyway - atas ke bawah, kiri ke kanan. 942 00:45:24,720 --> 00:45:26,116 >> ROB Bowden: Soalan pada itu? 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Yang perlu saya lakukan yang akan datang? 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. MALAN: Pasti. 946 00:45:32,380 --> 00:45:33,810 >> ROB Bowden: OK. 947 00:45:33,810 --> 00:45:39,320 Jadi ini adalah penampan ditakluki soalan serangan. 948 00:45:39,320 --> 00:45:43,740 Perkara utama untuk mengenali di sini adalah, dengan baik, bagaimana mungkin helah musuh 949 00:45:43,740 --> 00:45:46,170 program ini dalam melaksanakan kod sewenang-wenangnya? 950 00:45:46,170 --> 00:45:51,860 Jadi argv1, baris arahan pertama hujah untuk program ini, yang boleh 951 00:45:51,860 --> 00:45:53,920 sewenang-wenangnya panjang. 952 00:45:53,920 --> 00:45:59,160 Tetapi di sini kita menggunakan memcpy untuk menyalin argv1, yang di sini adalah bar. 953 00:45:59,160 --> 00:46:00,165 Kami lulus ia sebagai hujah. 954 00:46:00,165 --> 00:46:02,050 Dan jadi ia mengambil bar nama. 955 00:46:02,050 --> 00:46:08,040 >> Jadi kita memcpying bar ke dalam buffer ini c. 956 00:46:08,040 --> 00:46:09,400 Berapa banyak bait kita menyalin? 957 00:46:09,400 --> 00:46:14,040 Nah bytes bar bagaimanapun banyak berlaku kepada menggunakan, panjang hujah itu. 958 00:46:14,040 --> 00:46:17,930 Tetapi c hanya 12 bytes luas. 959 00:46:17,930 --> 00:46:22,280 Jadi, jika kita menaip hujah baris arahan itulah lebih lama daripada 12 bait, kami 960 00:46:22,280 --> 00:46:25,470 akan melimpah ini penampan tertentu. 961 00:46:25,470 --> 00:46:31,000 Sekarang, bagaimana musuh mungkin menipu program ke dalam melaksanakan kod sewenang-wenangnya? 962 00:46:31,000 --> 00:46:34,910 >> Jadi ingat bahawa di sini utama memanggil foo. 963 00:46:34,910 --> 00:46:37,340 Dan demikian maka panggilan utama foo. 964 00:46:37,340 --> 00:46:40,408 Mari kita menarik ini. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Jadi kita mempunyai timbunan kami. 967 00:46:46,990 --> 00:46:49,090 Dan utama mempunyai bingkai tindanan di bahagian bawah. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Pada satu ketika, panggilan utama foo. 970 00:46:53,250 --> 00:46:55,390 Nah, dengan serta-merta, panggilan utama foo. 971 00:46:55,390 --> 00:46:57,130 Dan sebagainya foo mendapat bingkai tindanan sendiri. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Sekarang, pada satu ketika, foo akan kembali. 974 00:47:02,220 --> 00:47:06,810 Dan pergi pulangan foo, kita perlu tahu sekurang- apa baris kod dalam kita utama 975 00:47:06,810 --> 00:47:10,610 adalah untuk tahu di mana kita harus menyambung semula di utama. 976 00:47:10,610 --> 00:47:13,100 Kita boleh memanggil foo dari keseluruhan sekumpulan tempat yang berbeza. 977 00:47:13,100 --> 00:47:14,620 Bagaimana kita tahu di mana untuk kembali? 978 00:47:14,620 --> 00:47:16,460 Nah, kita perlu menyimpan di tempat itu. 979 00:47:16,460 --> 00:47:23,010 >> Jadi tempat yang betul di sini, kami menyimpan di mana kita harus kembali untuk sekali 980 00:47:23,010 --> 00:47:24,070 pulangan foo. 981 00:47:24,070 --> 00:47:26,350 Dan ini adalah alamat kembali. 982 00:47:26,350 --> 00:47:30,490 Jadi bagaimana musuh mungkin mengambil kesempatan ini adalah hakikat bahawa 983 00:47:30,490 --> 00:47:37,550 penampan ini c disimpan, mari kita berkata, di sini adalah c. 984 00:47:37,550 --> 00:47:39,690 Oleh itu, kita mempunyai 12 bait untuk c. 985 00:47:39,690 --> 00:47:40,540 Ini adalah c. 986 00:47:40,540 --> 00:47:43,030 Dan ini adalah cincin timbunan foo ini. 987 00:47:43,030 --> 00:47:49,970 Jadi jika pengguna berniat jahat memasuki lebih bait daripada 12 atau mereka memasukkan arahan yang 988 00:47:49,970 --> 00:47:54,570 hujah baris itu melebihi 12 watak-watak, maka kita akan 989 00:47:54,570 --> 00:47:57,540 melimpah penampan ini. 990 00:47:57,540 --> 00:47:59,910 >> Kita boleh terus berterusan. 991 00:47:59,910 --> 00:48:02,220 Dan pada satu ketika, kita pergi jauh cukup bahawa kita mula 992 00:48:02,220 --> 00:48:05,120 penggantian alamat kembali ini. 993 00:48:05,120 --> 00:48:08,310 Jadi sebaik sahaja kami menulis ganti alamat kembali, ini bermakna bahawa apabila foo 994 00:48:08,310 --> 00:48:14,220 pulangan, kami kembali ke mana sahaja yang pengguna berniat jahat memberitahu kepada oleh 995 00:48:14,220 --> 00:48:19,490 apa nilai ia memasuki, dengan apa jua watak-watak pengguna yang dimasukkan. 996 00:48:19,490 --> 00:48:24,320 Dan jadi jika pengguna berniat jahat sedang terutamanya bijak, dia boleh mempunyai ini 997 00:48:24,320 --> 00:48:29,255 kembali ke suatu tempat di printDef fungsi atau di suatu tempat di malloc yang 998 00:48:29,255 --> 00:48:31,830 fungsi, hanya di mana sahaja sewenang-wenangnya. 999 00:48:31,830 --> 00:48:38,420 >> Tetapi lebih bijak adalah apa yang jika dia mempunyai pengguna kembali ke sini. 1000 00:48:38,420 --> 00:48:41,920 Dan kemudian anda mula melaksanakan ini sebagai baris kod. 1001 00:48:41,920 --> 00:48:46,610 Jadi pada ketika itu, pengguna boleh memasukkan apa yang dia mahu ke rantau ini. 1002 00:48:46,610 --> 00:48:52,210 Dan dia mempunyai kawalan sepenuhnya program anda. 1003 00:48:52,210 --> 00:48:53,460 Soalan pada itu? 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Jadi soalan berikutnya adalah lengkap reimplementation daripada foo dalam apa-apa cara yang 1006 00:49:00,970 --> 00:49:02,620 bahawa ia tidak lagi terdedah. 1007 00:49:02,620 --> 00:49:03,870 >> Jadi ada beberapa cara anda boleh melakukan ini. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Kami masih mempunyai c hanya menjadi panjang 12. 1010 00:49:13,330 --> 00:49:16,480 Anda boleh menukar ini sebagai sebahagian daripada penyelesaian anda. 1011 00:49:16,480 --> 00:49:18,930 Kami juga menambah cek untuk membuat bar pasti tidak null. 1012 00:49:18,930 --> 00:49:24,460 Walaupun anda tidak perlu yang bagi kredit penuh. 1013 00:49:24,460 --> 00:49:27,690 Oleh itu, kita sedang menyemak yang pertama di panjang rentetan bar. 1014 00:49:27,690 --> 00:49:31,650 Jika ia lebih besar daripada 12, maka sebenarnya tidak melakukan salinan. 1015 00:49:31,650 --> 00:49:33,010 Jadi, itu salah satu cara untuk memperbaikinya. 1016 00:49:33,010 --> 00:49:36,750 >> Satu lagi cara menetapkan ia bukan mempunyai c hanya menjadi panjang 12, mempunyai ia 1017 00:49:36,750 --> 00:49:39,310 menjadi panjang strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Satu lagi cara menetapkan ia adalah untuk benar-benar hanya kembali. 1019 00:49:43,370 --> 00:49:46,690 Jadi, jika anda baru sahaja mendapat menghapuskan semua ini, jika anda baru sahaja dipadam semua 1020 00:49:46,690 --> 00:49:51,830 baris kod, anda akan mendapat kredit penuh, kerana fungsi ini 1021 00:49:51,830 --> 00:49:54,150 tidak adakah sebenarnya mencapai apa-apa. 1022 00:49:54,150 --> 00:49:57,650 Ia menyalin baris arahan hujah ke dalam beberapa pelbagai dalam 1023 00:49:57,650 --> 00:49:59,960 bingkai tindanan tempatan. 1024 00:49:59,960 --> 00:50:01,310 Dan maka perkara itu kembali. 1025 00:50:01,310 --> 00:50:04,020 Dan apa sahaja yang berjaya hilang. 1026 00:50:04,020 --> 00:50:09,740 Jadi pulangan juga yang mencukupi cara untuk mendapatkan kredit penuh. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. MALAN: Tidak cukup semangat daripada soalan tetapi boleh diterima satu 1028 00:50:13,425 --> 00:50:15,580 spec tetap. 1029 00:50:15,580 --> 00:50:18,260 >> ROB Bowden: Soalan di mana-mana itu? 1030 00:50:18,260 --> 00:50:22,270 Satu perkara yang anda sekurang-kurangnya diperlukan telah menyusun kod. 1031 00:50:22,270 --> 00:50:24,810 Jadi, walaupun secara teknikal anda tidak terdedah jika kod anda tidak 1032 00:50:24,810 --> 00:50:29,130 menyusun, kita tidak menerima bahawa. 1033 00:50:29,130 --> 00:50:31,350 Ada soalan? 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. MALAN: Adakah anda mahu untuk mengatakan gelaran ini? 1036 00:50:34,580 --> 00:50:37,230 >> ROB Bowden: No 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. MALAN: Jadi dalam satu ini, ini adalah sama ada berita baik atau berita buruk. 1038 00:50:40,470 --> 00:50:43,870 Ini betul-betul masalah yang sama sebagai kuiz yang pertama. 1039 00:50:43,870 --> 00:50:46,140 Dan ia hampir sama masalah kerana pset1. 1040 00:50:46,140 --> 00:50:49,980 Tetapi ia telah sengaja dipermudahkan menjadi piramid yang lebih mudah, yang dapat menjadi 1041 00:50:49,980 --> 00:50:52,330 diselesaikan dengan sedikit lelaran mudah. 1042 00:50:52,330 --> 00:50:55,680 Dan benar-benar, apa yang kita telah mendapat sekurang- di sini tidak begitu banyak logik, 1043 00:50:55,680 --> 00:50:58,100 kerana mungkin, pada tahap ini, anda lebih selesa daripada anda 1044 00:50:58,100 --> 00:51:01,850 pada minggu satu dengan untuk gelung atau mengapa gelung, tetapi benar-benar untuk mengusik selain yang 1045 00:51:01,850 --> 00:51:04,790 anda sedikit selesa dengan tanggapan bahawa PHP bukan sahaja tentang apa yang 1046 00:51:04,790 --> 00:51:05,290 pengaturcaraan. 1047 00:51:05,290 --> 00:51:07,820 Ia sebenarnya boleh digunakan sebagai bahasa untuk menulis program baris arahan. 1048 00:51:07,820 --> 00:51:10,060 >> Dan sesungguhnya, itulah yang kita cuba untuk menarik perhatian anda kepada. 1049 00:51:10,060 --> 00:51:12,060 Ini adalah program PHP baris arahan. 1050 00:51:12,060 --> 00:51:16,690 Jadi kod C di sini, manakala betul dalam C, tidak betul untuk PHP. 1051 00:51:16,690 --> 00:51:17,940 Tetapi kod benar-benar adalah yang sama. 1052 00:51:17,940 --> 00:51:21,720 Jika anda membandingkan penyelesaian untuk Kuiz 0 terhadap Kuiz 1, anda akan mendapati bahawa 1053 00:51:21,720 --> 00:51:25,630 ia hampir serupa, kecuali beberapa tanda-tanda dolar dan bagi 1054 00:51:25,630 --> 00:51:27,250 ketiadaan sejenis data. 1055 00:51:27,250 --> 00:51:31,720 Khususnya, jika kita lihat di sini, anda akan melihat bahawa kita melelar, dalam ini 1056 00:51:31,720 --> 00:51:33,730 kes, dari 1 hingga 7. 1057 00:51:33,730 --> 00:51:34,910 >> Kami boleh melakukannya 0 indeks. 1058 00:51:34,910 --> 00:51:37,320 Tetapi kadang-kadang, saya fikir ia hanya mental lebih mudah untuk berfikir tentang perkara-perkara 1059 00:51:37,320 --> 00:51:38,200 1-7. 1060 00:51:38,200 --> 00:51:40,300 Jika anda mahu satu blok, kemudian dua blok, kemudian tiga, maka 1061 00:51:40,300 --> 00:51:41,770 dot, dot, dot tujuh. 1062 00:51:41,770 --> 00:51:45,960 Kami telah j yang dimulakan 1 dan kemudian mengharapkan sehingga i. 1063 00:51:45,960 --> 00:51:48,150 Dan segala-galanya di sini ialah jika tidak sama. 1064 00:51:48,150 --> 00:51:49,790 Tetapi wajar diperhatikan ialah beberapa perkara. 1065 00:51:49,790 --> 00:51:53,230 Kami memberi anda kedua-dua baris, ini pertama satu, goofily dinamakan sebagai shebang yang 1066 00:51:53,230 --> 00:51:54,560 untuk bang tajam. 1067 00:51:54,560 --> 00:51:58,770 Dan yang hanya menyatakan jalan yang benar, yang folder, di mana program yang boleh 1068 00:51:58,770 --> 00:52:02,160 mendapati bahawa anda mahu menggunakan untuk mentafsir fail ini. 1069 00:52:02,160 --> 00:52:04,710 >> Dan kemudian baris selepas itu, satu Sudah tentu, bermakna memasuki mod PHP. 1070 00:52:04,710 --> 00:52:07,740 Dan garis di bahagian paling bawah bermakna keluar mod PHP. 1071 00:52:07,740 --> 00:52:09,740 Dan ini kerja-kerja, secara amnya, dengan ditafsirkan bahasa. 1072 00:52:09,740 --> 00:52:14,370 Ia adalah jenis menjengkelkan jika anda menulis program dalam satu fail dipanggil foo.php. 1073 00:52:14,370 --> 00:52:17,320 Dan kemudian pengguna anda hanya perlu ingat, OK, untuk menjalankan program ini, saya 1074 00:52:17,320 --> 00:52:22,320 perlu menaip "ruang php foo.php." Jenis menjengkelkan jika apa-apa lagi. 1075 00:52:22,320 --> 00:52:25,270 Dan ia juga mendedahkan bahawa program anda ditulis dalam PHP, yang tidak semua 1076 00:52:25,270 --> 00:52:27,060 yang jelas bagi para pengguna. 1077 00:52:27,060 --> 00:52:30,100 >> Jadi, anda boleh keluarkan. Php sama sekali ingat dari kuliah. 1078 00:52:30,100 --> 00:52:35,690 Dan anda sebenarnya boleh lakukan. / Foo jika anda chmodded ia dengan menjadikannya 1079 00:52:35,690 --> 00:52:36,500 boleh laku. 1080 00:52:36,500 --> 00:52:39,630 Jadi chmod a + x foo akan berbuat begitu. 1081 00:52:39,630 --> 00:52:41,460 Dan jika anda juga menambah shebang di sini. 1082 00:52:41,460 --> 00:52:45,320 Tetapi benar-benar, masalah itu telah mendapat sekurang- mencetak sesuatu seperti ini. 1083 00:52:45,320 --> 00:52:51,100 Tiada HTML, tiada C-kod pasti, hanya beberapa PHP. 1084 00:52:51,100 --> 00:52:54,100 Jadi Milo kemudian kembali dalam masalah 25. 1085 00:52:54,100 --> 00:52:58,050 Dan dalam 25, anda telah diberi berikut kod rangka, yang merupakan satu 1086 00:52:58,050 --> 00:52:59,730 Laman web agak mudah. 1087 00:52:59,730 --> 00:53:04,230 Dan yang berair HTML-bijak turun di sini, di mana kita mempunyai dalam badan 1088 00:53:04,230 --> 00:53:09,160 bentuk yang mempunyai ID yang unik input dalam yang merupakan dua input, satu 1089 00:53:09,160 --> 00:53:11,950 dengan idea nama, satu dengan idea butang. 1090 00:53:11,950 --> 00:53:14,240 >> Yang pertama adalah jenis teks, kedua jenis hantar. 1091 00:53:14,240 --> 00:53:16,930 Dan jadi kami memberikan anda, sebenarnya, lebih bahan-bahan daripada yang anda diperlukan, hanya supaya 1092 00:53:16,930 --> 00:53:19,230 anda semua mempunyai pilihan dengan yang untuk menyelesaikan masalah ini. 1093 00:53:19,230 --> 00:53:21,130 Anda tidak tegas perlu semua ID ini. 1094 00:53:21,130 --> 00:53:23,580 Tetapi ia membolehkan anda untuk menyelesaikan dalam cara yang berbeza. 1095 00:53:23,580 --> 00:53:27,050 Dan sehingga di bahagian atas, notis yang Objektif ini adalah untuk mencetuskan 1096 00:53:27,050 --> 00:53:27,960 Windows seperti ini - 1097 00:53:27,960 --> 00:53:28,780 Hello, Milo! - 1098 00:53:28,780 --> 00:53:31,270 muncul dalam pelayar menggunakan super mudah, jika 1099 00:53:31,270 --> 00:53:33,190 tidak hodoh, fungsi amaran. 1100 00:53:33,190 --> 00:53:37,480 Dan sebagainya, akhirnya, ini bisul konsep entah bagaimana mendengar untuk 1101 00:53:37,480 --> 00:53:41,290 penghujahan bentuk pelanggan-sampingan , Bukan pelayan, entah bagaimana 1102 00:53:41,290 --> 00:53:45,640 bertindak balas kepada penyerahan bahawa dengan meraih nilai pengguna yang ditaip 1103 00:53:45,640 --> 00:53:50,120 masuk ke bidang nama, dan kemudian memaparkan ia dalam badan amaran. 1104 00:53:50,120 --> 00:53:53,460 >> Jadi salah satu cara anda boleh melakukan ini adalah dengan jQuery, yang kelihatan sedikit 1105 00:53:53,460 --> 00:53:56,880 sintaksis membingungkan pada mulanya. 1106 00:53:56,880 --> 00:54:00,760 Anda boleh melakukan ini dengan kod DOM tulen - document.getelement oleh ID. 1107 00:54:00,760 --> 00:54:02,530 Tetapi mari kita lihat versi ini. 1108 00:54:02,530 --> 00:54:05,110 Saya mempunyai beberapa penting baris pertama. 1109 00:54:05,110 --> 00:54:09,460 Jadi satu, kita mempunyai barisan ini, yang sama dengan apa yang anda mungkin telah melihat 1110 00:54:09,460 --> 00:54:13,830 dalam, saya percaya, form2.html dari kelas pada minggu 9. 1111 00:54:13,830 --> 00:54:16,960 Dan ini adalah hanya mengatakan, melaksanakan kod berikut apabila 1112 00:54:16,960 --> 00:54:18,430 dokumen itu bersedia. 1113 00:54:18,430 --> 00:54:21,770 Ini menjadi penting hanya kerana Laman HTML dibaca atas ke 1114 00:54:21,770 --> 00:54:23,280 bawah, kiri ke kanan. 1115 00:54:23,280 --> 00:54:27,910 >> Oleh itu, jika anda cuba untuk melakukannya sesuatu dalam kod di sini untuk beberapa DOM 1116 00:54:27,910 --> 00:54:31,560 unsur, beberapa tag HTML, itu turun di sini, anda melakukannya terlalu lama lagi, 1117 00:54:31,560 --> 00:54:34,220 kerana ini telah tidak dibacakan ke dalam ingatan. 1118 00:54:34,220 --> 00:54:37,740 Jadi dengan mengatakan document.ready ini line, kita katakan, 1119 00:54:37,740 --> 00:54:39,040 inilah beberapa kod, pelayar. 1120 00:54:39,040 --> 00:54:42,440 Tetapi tidak melaksanakan ini sehingga keseluruhan dokumen bersedia, iaitu DOM yang 1121 00:54:42,440 --> 00:54:44,320 pokok wujud dalam ingatan. 1122 00:54:44,320 --> 00:54:47,110 Yang ini adalah sedikit lebih terus-terang, jika sintaksis yang 1123 00:54:47,110 --> 00:54:51,890 sedikit berbeza, di mana yang saya katakan, merebut elemen HTML yang unik 1124 00:54:51,890 --> 00:54:53,560 pengecam adalah input. 1125 00:54:53,560 --> 00:54:56,220 Itulah yang tag hash menandakan, ID yang unik. 1126 00:54:56,220 --> 00:54:58,070 Dan kemudian saya memanggil. Hantar. 1127 00:54:58,070 --> 00:55:01,660 >> Jadi. Mengemukakan di sini adalah fungsi yang, jika tidak, dikenali sebagai kaedah, itu 1128 00:55:01,660 --> 00:55:05,850 bahagian dalam objek itu di tangan meninggalkan sebelah sana yang saya tidak menyerlahkan. 1129 00:55:05,850 --> 00:55:08,990 Jadi, jika anda berfikir input sebagai objek dalam ingatan - dan sememangnya ia. 1130 00:55:08,990 --> 00:55:10,440 Ia adalah satu nod dalam pokok - 1131 00:55:10,440 --> 00:55:16,580 . Mengemukakan cara apabila borang ini dengan ID ini dikemukakan, melaksanakan 1132 00:55:16,580 --> 00:55:17,700 kod berikut. 1133 00:55:17,700 --> 00:55:20,290 Saya tidak peduli apa nama fungsi adalah saya melaksanakan. 1134 00:55:20,290 --> 00:55:23,760 Jadi di sini saya menggunakan, seperti sebelum ini, apa yang dipanggil fungsi lambda itu atau seorang 1135 00:55:23,760 --> 00:55:24,720 fungsi tanpa nama. 1136 00:55:24,720 --> 00:55:27,640 Ia tidak di semua intelektual lain yang menarik daripada yang tidak mempunyai nama, 1137 00:55:27,640 --> 00:55:30,220 yang adalah baik jika anda hanya pernah akan memanggil sekali. 1138 00:55:30,220 --> 00:55:34,490 Dan di dalam sana saya sebenarnya mengendalikan pengemukaan borang. 1139 00:55:34,490 --> 00:55:36,810 Saya mula-mula mengisytiharkan pembolehubah dipanggil nilai. 1140 00:55:36,810 --> 00:55:40,610 Dan kemudian apa yang kesan ini menekankan bahagian di sini sekarang? 1141 00:55:40,610 --> 00:55:44,755 Apakah yang dilakukan di sebuah yang tinggi untuk saya? 1142 00:55:44,755 --> 00:55:48,539 >> PENONTON: Ia mendapat nilai bahawa pengguna tidak dalam HTML di bawah. 1143 00:55:48,539 --> 00:55:50,920 Ia mendapat ID itu dan kemudian mendapati nilai itu. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. MALAN: Tepat sekali. 1145 00:55:51,590 --> 00:55:54,300 Ia dimenangi nod, yang unik pengecam adalah nama. 1146 00:55:54,300 --> 00:55:56,900 Ia mendapat nilai di dalamnya, yang adalah, mungkin, apa yang pengguna 1147 00:55:56,900 --> 00:55:58,190 ditaip dirinya sendiri. 1148 00:55:58,190 --> 00:56:01,020 Dan kemudian ia menyimpan bahawa dalam ubah dipanggil nilai. 1149 00:56:01,020 --> 00:56:03,720 Sebagai mengetepikan, anda boleh mempunyai juga melakukan ini sedikit berbeza. 1150 00:56:03,720 --> 00:56:09,250 Totally diterima dengan melakukan sesuatu yang nilai dusta var mendapat 1151 00:56:09,250 --> 00:56:10,500 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 Dan ini adalah mengapa ia sedikit membosankan untuk tidak menggunakan jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Nama". Nilai. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Jadi benar-benar boleh diterima. 1157 00:56:19,620 --> 00:56:22,770 Cara yang berbeza untuk melakukan ini. jQuery hanya cenderung untuk menjadi sedikit lebih ringkas dan 1158 00:56:22,770 --> 00:56:25,230 pasti lebih popular kalangan pengaturcara. 1159 00:56:25,230 --> 00:56:27,590 >> Sekarang, saya melakukan sedikit kewarasan yang cek, kerana dalam masalah ini 1160 00:56:27,590 --> 00:56:30,820 Penyataan kita dengan jelas berkata, jika pengguna belum lagi ditaip beliau 1161 00:56:30,820 --> 00:56:32,580 menamakan, tidak menunjukkan isyarat satu. 1162 00:56:32,580 --> 00:56:35,390 Tetapi anda boleh menyemak untuk itu, dengan hanya memeriksa string kosong untuk 1163 00:56:35,390 --> 00:56:37,850 quote-unquote jika ada apa-apa sebenarnya di sana. 1164 00:56:37,850 --> 00:56:40,880 Tetapi jika ia tidak sama dengan quote-unquote, Saya mahu panggil amaran. 1165 00:56:40,880 --> 00:56:45,610 Dan yang menarik di sini ialah kita menggunakan operator campur, yang 1166 00:56:45,610 --> 00:56:48,130 melakukan apa yang di hidupkan? 1167 00:56:48,130 --> 00:56:48,740 Concatenate. 1168 00:56:48,740 --> 00:56:50,690 Jadi rasanya PHPs operator dot. 1169 00:56:50,690 --> 00:56:52,820 Idea yang sama, sintaksis yang sedikit berbeza. 1170 00:56:52,820 --> 00:56:55,280 Dan saya hanya mewujudkan rentetan yang anda melihat pada pukulan skrin - 1171 00:56:55,280 --> 00:56:57,750 Hello, jadi dan sebagainya. 1172 00:56:57,750 --> 00:56:59,200 >> Dan kemudian butiran yang terakhir adalah ini. 1173 00:56:59,200 --> 00:57:04,970 Mengapa saya kembali di dalam palsu fungsi tanpa nama ini? 1174 00:57:04,970 --> 00:57:07,420 >> PENONTON: Tidak ada nilai. 1175 00:57:07,420 --> 00:57:09,380 Memasukkannya ke dalam bentuk. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Ia hanya berkata, jika nilai tidak sama dengan kosong, maka melakukannya. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Terdapat kosong di dalam penyerahan itu. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. MALAN: OK. 1181 00:57:21,170 --> 00:57:21,640 Berhati-hati walaupun. 1182 00:57:21,640 --> 00:57:22,830 Tidak ada seorang pun di sini. 1183 00:57:22,830 --> 00:57:25,510 Dan bahawa penyata palsu di luar daripada jika keadaan. 1184 00:57:25,510 --> 00:57:29,470 Jadi baris ini diserlahkan, pulangan palsu, melaksanakan tidak kira apa apabila 1185 00:57:29,470 --> 00:57:32,310 borang yang dikemukakan. 1186 00:57:32,310 --> 00:57:36,810 Apa yang kembali di dalam palsu ini acara pengendali, kerana ia dipanggil, 1187 00:57:36,810 --> 00:57:38,450 acara yang berkenaan menjadi penyerahan? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> PENONTON: Kerana ia hanya berlaku sekali. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. MALAN: Hanya berlaku sekali. 1191 00:57:45,320 --> 00:57:46,821 Tidak cukup. 1192 00:57:46,821 --> 00:57:47,292 Yeah? 1193 00:57:47,292 --> 00:57:50,589 >> PENONTON: Ia menghalang borang daripada mengemukakan kepada kelakuan lalai, 1194 00:57:50,589 --> 00:57:52,480 yang akan menjadikan reload halaman. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. MALAN: Tepat sekali. 1196 00:57:53,110 --> 00:57:56,490 Jadi saya lebih muatan jangka mengemukakan di sini, kerana saya cakapkan, bentuk adalah 1197 00:57:56,490 --> 00:57:57,670 dikemukakan. 1198 00:57:57,670 --> 00:58:02,240 Tetapi seperti yang anda cadangkan, ia sebenarnya tidak telah dikemukakan dengan cara HTTP sebenar. 1199 00:58:02,240 --> 00:58:06,870 Apabila anda klik Hantar, kerana kita Pengendali onSubmit, kami memintas 1200 00:58:06,870 --> 00:58:09,040 bahawa penghantaran borang jadi untuk bercakap. 1201 00:58:09,040 --> 00:58:11,290 Kami kemudian melakukan perkara kami dengan kod JavaScript. 1202 00:58:11,290 --> 00:58:14,070 Tetapi saya sengaja pulang palsu, kerana apa yang saya tidak mahu berlaku yang 1203 00:58:14,070 --> 00:58:18,430 sesaat kemudian adalah untuk keseluruhan borang yang sendiri yang perlu dikemukakan ke web 1204 00:58:18,430 --> 00:58:22,800 pelayan dengan pasangan nilai utama dengan menukar URL untuk sesuatu seperti 1205 00:58:22,800 --> 00:58:26,180 q = kucing atau apa sahaja yang kita lakukan, misalnya, di dalam kelas. 1206 00:58:26,180 --> 00:58:29,640 Saya tidak mahu itu berlaku, kerana tidak ada mendengar pelayan untuk ini 1207 00:58:29,640 --> 00:58:30,690 membentuk penyerahan. 1208 00:58:30,690 --> 00:58:32,320 Ia semata-mata dilakukan dalam kod JavaScript. 1209 00:58:32,320 --> 00:58:35,760 Dan sebab itu saya tidak pun mempunyai tindakan menyifatkan borang saya, kerana saya 1210 00:58:35,760 --> 00:58:38,870 tidak berniat untuk ini pernah pergi ke pelayan. 1211 00:58:38,870 --> 00:58:40,780 >> Jadi ia dikemukakan. 1212 00:58:40,780 --> 00:58:44,340 Tetapi kita memintas bentuk yang penyerahan dan mencegah lalai 1213 00:58:44,340 --> 00:58:47,477 tingkah laku, yang sebenarnya adalah untuk pergi semua perjalanan ke pelayan. 1214 00:58:47,477 --> 00:58:48,730 >> PENONTON: Jadi memeliharanya pelanggan-sampingan. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. MALAN: Penyimpanan ia pelanggan-sampingan. 1216 00:58:49,780 --> 00:58:51,030 Tepat betul. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Sehingga seterusnya ialah saya oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB Bowden: OK. 1221 00:59:00,430 --> 00:59:04,990 Jadi soalan pertama ini pada umumnya kasar bagi orang-orang. 1222 00:59:04,990 --> 00:59:07,270 Walaupun orang-orang yang kemudian pergi lebih baik. 1223 00:59:07,270 --> 00:59:12,260 Jadi, anda mempunyai untuk memilih data yang betul jenis bagi kedua-dua ruangan ini. 1224 00:59:12,260 --> 00:59:17,750 Dan kedua-dua ini mempunyai beberapa perkara tentang mereka yang 1225 00:59:17,750 --> 00:59:20,620 membuat pilihan yang sukar. 1226 00:59:20,620 --> 00:59:24,430 Jadi int tidak yang sah menaip untuk nombor. 1227 00:59:24,430 --> 00:59:29,410 Ini kerana akaun 12 digit nombor, int yang tidak cukup besar untuk 1228 00:59:29,410 --> 00:59:31,070 menyimpan jumlah digit. 1229 00:59:31,070 --> 00:59:36,570 Jadi pilihan yang sah akan menjadi besar int jika anda berlaku untuk mengetahui bahawa. 1230 00:59:36,570 --> 00:59:42,090 Satu lagi pilihan boleh menjadi medan char yang panjangnya 12. 1231 00:59:42,090 --> 00:59:44,560 Jadi, sama ada dari orang-orang akan bekerja. 1232 00:59:44,560 --> 00:59:46,100 Int tidak. 1233 00:59:46,100 --> 00:59:50,170 >> Kini, kira-kira, berfikir kembali ke pset7. 1234 00:59:50,170 --> 00:59:59,540 Jadi kita khusus digunakan perpuluhan untuk menyimpan nilai saham atau - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID J. MALAN: Tunai. 1236 01:00:00,550 --> 01:00:01,060 >> ROB Bowden: Tunai. 1237 01:00:01,060 --> 01:00:05,710 Kami menggunakan perpuluhan untuk menyimpan jumlah tunai yang pengguna masa ini mempunyai. 1238 01:00:05,710 --> 01:00:10,950 Jadi sebab kita melakukan yang kerana, ingat, terapung. 1239 01:00:10,950 --> 01:00:12,480 Ada titik terapung di tepat. 1240 01:00:12,480 --> 01:00:18,200 Ia tidak boleh tepat menyimpan tunai nilai-nilai seperti kita mahu di sini. 1241 01:00:18,200 --> 01:00:23,630 Jadi perpuluhan mampu tepat kedai sesuatu untuk, katakan, dua tempat perpuluhan. 1242 01:00:23,630 --> 01:00:27,630 Itulah sebabnya kira-kira, kita mahu ia sebagai perpuluhan dan tidak terapung. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. MALAN: Dan juga, juga, walaupun ia mungkin telah pandai dalam lain 1244 01:00:30,230 --> 01:00:32,760 konteks untuk berfikir, mungkin ini adalah peluang untuk int an. 1245 01:00:32,760 --> 01:00:34,420 Saya hanya akan mengesan perkara dalam beberapa sen. 1246 01:00:34,420 --> 01:00:38,670 Kerana kita jelas menunjukkan lalai nilai menjadi 100.00, yang 1247 01:00:38,670 --> 01:00:40,380 bermakna ia hanya boleh menjadi satu int. 1248 01:00:40,380 --> 01:00:45,310 Dan kehalusan lain juga dengan bilangan ialah ia tidak bermaksud 1249 01:00:45,310 --> 01:00:46,180 menjadi soalan helah. 1250 01:00:46,180 --> 01:00:49,860 Tetapi ingat bahawa int dalam MySQL, seperti dalam C, sekurang-kurangnya dalam 1251 01:00:49,860 --> 01:00:51,440 perkakas, adalah 32-bit. 1252 01:00:51,440 --> 01:00:53,960 Dan walaupun kita tidak mengharapkan anda untuk tahu berapa banyak angka yang 1253 01:00:53,960 --> 01:00:56,910 cara, jangan ingat bahawa bilangan terbesar anda boleh mewakili berpotensi 1254 01:00:56,910 --> 01:01:00,710 dengan beberapa 32-bit adalah lebih kurang apa? 1255 01:01:00,710 --> 01:01:02,760 >> Apakah nombor yang kita selalu berkata? 1256 01:01:02,760 --> 01:01:04,530 2 kepada 32, iaitu apa yang kurang? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Anda tidak perlu tahu dengan tepat. 1259 01:01:08,780 --> 01:01:10,580 Tetapi secara kasar adalah membantu dalam kehidupan. 1260 01:01:10,580 --> 01:01:12,200 Ia kira-kira 4 bilion. 1261 01:01:12,200 --> 01:01:14,430 Oleh itu, kita berkata bahawa beberapa kali. 1262 01:01:14,430 --> 01:01:16,360 Saya tahu saya telah berkata beberapa kali. 1263 01:01:16,360 --> 01:01:17,670 Dan ia adalah lebih kurang 4 bilion. 1264 01:01:17,670 --> 01:01:19,710 Dan itu satu peraturan yang baik ibu jari tahu. 1265 01:01:19,710 --> 01:01:21,880 Jika anda mempunyai 8 bit, 256 adalah nombor ajaib. 1266 01:01:21,880 --> 01:01:24,160 Jika anda mempunyai 32 bit, 4 bilion memberi atau mengambil. 1267 01:01:24,160 --> 01:01:27,140 Jadi jika anda hanya menulis 4 bilion, anda akan melihat bahawa itu lebih sedikit daripada angka 1268 01:01:27,140 --> 01:01:30,970 12, yang bermaksud bahawa adalah jelas tidak ekspresi cukup untuk menguasai 1269 01:01:30,970 --> 01:01:34,220 Nombor akaun 12 digit. 1270 01:01:34,220 --> 01:01:34,940 >> ROB Bowden: OK. 1271 01:01:34,940 --> 01:01:38,520 Jadi orang-orang yang lain pergi lebih baik. 1272 01:01:38,520 --> 01:01:40,900 Jadi andaikan bahawa bank mengenakan bulanan $ 20 1273 01:01:40,900 --> 01:01:42,400 yuran penyelenggaraan ke atas semua akaun. 1274 01:01:42,400 --> 01:01:45,506 Dengan apa pertanyaan SQL boleh bank memotong $ 20 dari setiap kiraan, walaupun 1275 01:01:45,506 --> 01:01:47,520 ia menyebabkan beberapa baki negatif? 1276 01:01:47,520 --> 01:01:50,380 Jadi, pada asasnya, terdapat empat jenis utama pertanyaan - 1277 01:01:50,380 --> 01:01:52,840 memasukkan, pilih, mengemaskini, dan memadam. 1278 01:01:52,840 --> 01:01:56,080 Jadi apa yang kita fikir kita akan menggunakan di sini? 1279 01:01:56,080 --> 01:01:57,000 Kemaskini. 1280 01:01:57,000 --> 01:01:58,260 >> Jadi mari kita membaca. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Jadi di sini kita sedang mengemaskini. 1283 01:02:05,870 --> 01:02:09,900 Apa jadual kita mengemaskini akaun? 1284 01:02:09,900 --> 01:02:11,670 Jadi mengemaskini akaun. 1285 01:02:11,670 --> 01:02:15,390 Dan kemudian sintaks berkata, apa yang dalam akaun kita mengemas kini? 1286 01:02:15,390 --> 01:02:19,520 Nah, kita menetapkan keseimbangan yang sama kepada nilai semasa imbangan tolak 20. 1287 01:02:19,520 --> 01:02:22,860 Jadi ini akan mengemas kini semua baris akaun, menolak 1288 01:02:22,860 --> 01:02:26,250 $ 20 daripada kira-kira. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. MALAN: Satu kesilapan biasa di sini, walaupun kita kadang-kadang ia memaafkan, 1290 01:02:29,260 --> 01:02:32,990 adalah untuk benar-benar mempunyai kod PHP di sini memanggil fungsi pertanyaan atau meletakkan 1291 01:02:32,990 --> 01:02:35,460 sebut harga sekitar semua yang tidak perlu berada di sana. 1292 01:02:35,460 --> 01:02:39,780 >> ROB Bowden: Ingat bahawa MySQL adalah bahasa yang berasingan daripada PHP. 1293 01:02:39,780 --> 01:02:42,410 Kami berada menulis MySQL dalam PHP. 1294 01:02:42,410 --> 01:02:46,180 Dan PHP kemudiannya menghantarnya kepada pelayan MySQL. 1295 01:02:46,180 --> 01:02:51,120 Tetapi anda tidak perlu PHP untuk berkomunikasi dengan pelayan MySQL. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. MALAN: Tepat sekali. 1297 01:02:51,730 --> 01:02:54,240 Jadi tidak pembolehubah dengan tanda-tanda dolar seharusnya berada di dalam konteks ini. 1298 01:02:54,240 --> 01:02:59,550 Ia hanya boleh melakukan semua matematik dalam pangkalan data itu sendiri. 1299 01:02:59,550 --> 01:03:00,080 >> ROB Bowden: OK. 1300 01:03:00,080 --> 01:03:01,300 Jadi yang akan datang. 1301 01:03:01,300 --> 01:03:02,731 Adakah ini yang akan datang? 1302 01:03:02,731 --> 01:03:03,210 Yeah. 1303 01:03:03,210 --> 01:03:06,570 Jadi dengan apa pertanyaan SQL boleh bank mendapatkan nombor akaun yang 1304 01:03:06,570 --> 01:03:09,300 pelanggan kaya, mereka yang baki yang lebih daripada 1,000? 1305 01:03:09,300 --> 01:03:13,280 Jadi yang mana satu di empat jenis utama kita akan mahu di sini? 1306 01:03:13,280 --> 01:03:14,430 Pilih. 1307 01:03:14,430 --> 01:03:16,650 Oleh itu, kita mahu untuk memilih. 1308 01:03:16,650 --> 01:03:17,610 Apa yang kita mahu pilih? 1309 01:03:17,610 --> 01:03:19,380 Apa ruangan yang kita mahu untuk memilih? 1310 01:03:19,380 --> 01:03:20,970 Kami secara khusus akan mahu untuk memilih nombor. 1311 01:03:20,970 --> 01:03:23,910 Tetapi jika anda berkata bintang, kita juga diterima itu. 1312 01:03:23,910 --> 01:03:25,820 >> Jadi pilih nombor dari apa jadual? 1313 01:03:25,820 --> 01:03:26,640 Akaun. 1314 01:03:26,640 --> 01:03:28,370 Dan maka keadaan yang kita mahu? 1315 01:03:28,370 --> 01:03:30,140 Di mana keseimbangan yang lebih besar daripada 1,000. 1316 01:03:30,140 --> 01:03:31,720 Kami juga diterima lebih besar daripada atau sama. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Terkini. 1319 01:03:36,190 --> 01:03:42,940 Dengan apa pertanyaan SQL boleh bank rapat, iaitu, memotong setiap akaun yang 1320 01:03:42,940 --> 01:03:44,480 mempunyai baki sebanyak $ 0? 1321 01:03:44,480 --> 01:03:47,620 Jadi yang mana satu di empat kita akan mahu untuk digunakan? 1322 01:03:47,620 --> 01:03:48,320 Padam. 1323 01:03:48,320 --> 01:03:50,180 Jadi sintaks untuk itu? 1324 01:03:50,180 --> 01:03:51,890 Memotong daripada apa jadual? 1325 01:03:51,890 --> 01:03:53,550 Akaun. 1326 01:03:53,550 --> 01:03:55,790 Dan maka keadaan di mana kami mahu memadam - 1327 01:03:55,790 --> 01:03:57,280 di mana kira-kira sama dengan sifar. 1328 01:03:57,280 --> 01:04:03,050 Jadi memadam semua baris dari akaun mana baki adalah sifar. 1329 01:04:03,050 --> 01:04:04,300 Soalan pada mana-mana? 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Ingin beratur? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. MALAN: Panduan Queue. 1333 01:04:11,200 --> 01:04:17,110 Jadi dalam satu ini, kami memberikan anda yang agak struktur biasa yang kita sedang mengkaji 1334 01:04:17,110 --> 01:04:20,450 sedikit di dalam kelas bersama daripada structs, iaitu data yang 1335 01:04:20,450 --> 01:04:21,910 struktur yang berkaitan dalam roh. 1336 01:04:21,910 --> 01:04:24,670 Perbezaan walaupun dengan barisan adalah yang kami terpaksa entah bagaimana ingat yang 1337 01:04:24,670 --> 01:04:27,900 berada di hadapan barisan, dalam besar sebahagian supaya kita boleh membuat lebih banyak 1338 01:04:27,900 --> 01:04:30,530 kecekapan penggunaan memori, sekurang-kurangnya jika kita menggunakan array. 1339 01:04:30,530 --> 01:04:35,460 >> Kerana ingat, jika kita mempunyai satu pameran, jika, misalnya, ini adalah hadapan 1340 01:04:35,460 --> 01:04:38,470 giliran, jika saya mendapat ke dalam barisan itu di sini, dan kemudian seseorang mendapat selaras 1341 01:04:38,470 --> 01:04:42,710 di belakang saya, belakang saya, belakang saya, dan seorang langkah keluar dari barisan, anda 1342 01:04:42,710 --> 01:04:45,930 boleh, seperti yang kita lihat beberapa manusia sukarelawan di dalam kelas, semua orang mempunyai 1343 01:04:45,930 --> 01:04:47,100 beralih cara ini. 1344 01:04:47,100 --> 01:04:50,880 Tetapi secara umum, setelah semua orang melakukan sesuatu yang tidak penggunaan terbaik masa 1345 01:04:50,880 --> 01:04:54,600 dalam program, kerana ia bermakna anda algoritma sedang berjalan dalam apa 1346 01:04:54,600 --> 01:04:56,520 masa berjalan asimptot? 1347 01:04:56,520 --> 01:04:57,420 Ia linear. 1348 01:04:57,420 --> 01:04:59,600 >> Dan saya rasa seperti itu jenis bodoh. 1349 01:04:59,600 --> 01:05:02,890 Jika orang yang seterusnya dalam talian adalah seterusnya orang yang sepatutnya pergi ke dalam 1350 01:05:02,890 --> 01:05:04,660 kedai, mereka tidak semua mempunyai untuk bergerak bersama-sama. 1351 01:05:04,660 --> 01:05:08,200 Hanya membiarkan orang itu dipetik off apabila tiba masanya, misalnya. 1352 01:05:08,200 --> 01:05:09,870 Oleh itu, kita boleh menjimatkan sedikit masa di sana. 1353 01:05:09,870 --> 01:05:14,840 Dan untuk berbuat demikian walaupun, cara yang bahawa kepala barisan atau 1354 01:05:14,840 --> 01:05:18,060 hadapan giliran akan secara beransur-ansur bergerak lebih mendalam dan lebih mendalam 1355 01:05:18,060 --> 01:05:23,340 ke dalam array dan akhirnya mungkin sebenarnya membalut di sekitar jika kita menggunakan 1356 01:05:23,340 --> 01:05:25,790 pelbagai untuk menyimpan orang dalam barisan ini. 1357 01:05:25,790 --> 01:05:28,390 Jadi, anda hampir boleh memikirkan pelbagai sebagai data pekeliling 1358 01:05:28,390 --> 01:05:29,880 struktur dalam erti kata itu. 1359 01:05:29,880 --> 01:05:33,970 >> Jadi, anda entah bagaimana perlu mengesan Saiz atau benar-benar akhir itu 1360 01:05:33,970 --> 01:05:36,250 dan kemudian di mana permulaan ia. 1361 01:05:36,250 --> 01:05:39,490 Oleh itu, kita mencadangkan supaya anda mengisytiharkan satu giliran itu, panggilan 1362 01:05:39,490 --> 01:05:41,330 ia q, hanya satu huruf. 1363 01:05:41,330 --> 01:05:44,570 Kemudian kami mencadangkan hadapan menjadi dimulakan dengan sifar dan bahawa saiz 1364 01:05:44,570 --> 01:05:45,470 akan dimulakan dengan sifar. 1365 01:05:45,470 --> 01:05:47,770 >> Jadi sekarang, tiada apa-apa dalam barisan itu. 1366 01:05:47,770 --> 01:05:50,910 Dan kami meminta anda untuk melengkapkan pelaksanaan enqueue di bawah dalam 1367 01:05:50,910 --> 01:05:55,250 apa-apa cara bahawa fungsi menambah n untuk akhir q dan kemudian kembali benar. 1368 01:05:55,250 --> 01:05:58,690 Tetapi jika q penuh atau negatif, fungsi dan bukannya perlu kembali palsu. 1369 01:05:58,690 --> 01:06:01,060 Dan kami memberikan anda pasangan andaian. 1370 01:06:01,060 --> 01:06:04,320 Tetapi mereka tidak benar-benar berfungsi relevan, hanya bool yang wujud, 1371 01:06:04,320 --> 01:06:06,690 kerana, dari segi teknikal, bool tidak wujud dalam C melainkan jika anda termasuk 1372 01:06:06,690 --> 01:06:07,310 file header tertentu. 1373 01:06:07,310 --> 01:06:09,350 Supaya hanya pastikan ada telah tidak adalah ini helah 1374 01:06:09,350 --> 01:06:10,940 jenis soalan benda. 1375 01:06:10,940 --> 01:06:16,280 >> Jadi enqueue, kita dicadangkan dalam sampel penyelesaian untuk melaksanakan seperti berikut. 1376 01:06:16,280 --> 01:06:20,420 Satu, kita periksa memudahkan, buah-buahan rendah gantung. 1377 01:06:20,420 --> 01:06:23,820 Jika barisan penuh atau nombor yang anda cuba untuk memasukkan kurang 1378 01:06:23,820 --> 01:06:26,380 daripada sifar, yang kita kata dalam spesifikasi masalah ini perlu 1379 01:06:26,380 --> 01:06:30,320 tidak dibenarkan, kerana kami hanya mahu nilai-nilai bukan negatif, maka anda perlu 1380 01:06:30,320 --> 01:06:31,640 hanya pulangan palsu serta-merta. 1381 01:06:31,640 --> 01:06:33,820 Jadi beberapa agak mudah kesilapan memeriksa. 1382 01:06:33,820 --> 01:06:38,720 Jika walaupun anda ingin menambah bahawa sebenar nombor, anda terpaksa melakukan sedikit 1383 01:06:38,720 --> 01:06:39,440 berfikir di sini. 1384 01:06:39,440 --> 01:06:41,330 Dan ini adalah di mana ia sedikit menjengkelkan mental, kerana anda perlu 1385 01:06:41,330 --> 01:06:43,000 memikirkan bagaimana untuk mengendalikan Sampul. 1386 01:06:43,000 --> 01:06:46,870 >> Tetapi kuman idea di sini itu daripada kepentingan kepada kita adalah Sampul yang 1387 01:06:46,870 --> 01:06:51,480 sering membayangkan aritmetik modular dan pengendali arena, bahagian peratus, 1388 01:06:51,480 --> 01:06:55,140 di mana anda boleh pergi dari nilai yang lebih besar kembali ke sifar dan kemudian satu dan dua dan 1389 01:06:55,140 --> 01:06:58,650 tiga dan kemudian kembali sekitar kepada sifar, satu dan dua dan tiga dan sebagainya 1390 01:06:58,650 --> 01:06:59,380 lagi dan lagi. 1391 01:06:59,380 --> 01:07:02,880 Jadi cara kita mencadangkan berbuat demikian adalah bahawa kita mahu index ke dalam 1392 01:07:02,880 --> 01:07:05,850 pelbagai nombor yang mana integer kami berdusta. 1393 01:07:05,850 --> 01:07:10,740 Tetapi untuk sampai ke sana, kita mahu melakukan apa sahaja saiz baris gilir ini hanyalah 1394 01:07:10,740 --> 01:07:14,080 kemudian menambah bahawa apa sahaja yang hadapan senarai adalah. 1395 01:07:14,080 --> 01:07:17,880 Dan kesan iaitu untuk meletakkan kami di kedudukan yang betul dalam barisan dan 1396 01:07:17,880 --> 01:07:20,970 tidak menganggap bahawa orang yang pertama dalam baris adalah pada permulaan, yang dia atau 1397 01:07:20,970 --> 01:07:24,130 dia benar-benar boleh jika kita juga beralih semua orang. 1398 01:07:24,130 --> 01:07:26,710 Tetapi kami hanya mewujudkan kerja untuk diri kita sendiri jika kita mengambil 1399 01:07:26,710 --> 01:07:27,800 jalan yang tertentu. 1400 01:07:27,800 --> 01:07:29,330 >> Oleh itu, kita boleh menyimpannya agak mudah. 1401 01:07:29,330 --> 01:07:32,180 Kami perlu ingat bahawa kita hanya ditambah int untuk barisan. 1402 01:07:32,180 --> 01:07:35,850 Dan kemudian kita kembali benar. 1403 01:07:35,850 --> 01:07:38,560 Sementara itu, dalam dequeue, kami bertanya anda untuk melakukan yang berikut. 1404 01:07:38,560 --> 01:07:42,260 Melaksanakannya dalam apa-apa cara yang dequeues, iaitu kali jauhnya dan pulangan, 1405 01:07:42,260 --> 01:07:44,190 int di hadapan baris gilir. 1406 01:07:44,190 --> 01:07:46,410 Untuk mengeluarkan int, ia mencukupi untuk melupakannya. 1407 01:07:46,410 --> 01:07:47,650 Anda tidak perlu untuk mengatasi sedikit itu. 1408 01:07:47,650 --> 01:07:48,820 Jadi ia masih sebenarnya di sana. 1409 01:07:48,820 --> 01:07:51,930 Sama seperti data pada cakera keras, kami hanya mengabaikan hakikat 1410 01:07:51,930 --> 01:07:52,970 yang kini ia di sana. 1411 01:07:52,970 --> 01:07:55,520 Dan jika q kosong, kita harus sebaliknya kembali negatif 1. 1412 01:07:55,520 --> 01:07:56,750 Jadi ini berasa sewenang-wenangnya. 1413 01:07:56,750 --> 01:08:01,640 Mengapa kembali negatif 1 bukan palsu? 1414 01:08:01,640 --> 01:08:02,620 Yeah. 1415 01:08:02,620 --> 01:08:05,070 >> PENONTON: Q menyimpan nilai-nilai positif. 1416 01:08:05,070 --> 01:08:10,950 Kerana anda hanya menyimpan nilai-nilai positif dalam q, negatif adalah ralat. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. MALAN: OK, benar. 1418 01:08:11,510 --> 01:08:14,850 Jadi kerana kita hanya menyimpan positif nilai-nilai atau sifar, maka ia adalah baik untuk 1419 01:08:14,850 --> 01:08:18,050 kembali nilai negatif sebagai sentinel yang nilai, simbol khas. 1420 01:08:18,050 --> 01:08:21,630 Tetapi anda menulis semula sejarah di sana, kerana sebab kami hanya 1421 01:08:21,630 --> 01:08:25,890 kembali nilai-nilai bukan negatif adalah kerana kita mahu 1422 01:08:25,890 --> 01:08:27,670 mempunyai nilai sentinel. 1423 01:08:27,670 --> 01:08:32,617 Jadi lebih khusus, mengapa tidak hanya pulangan palsu dalam kes-kes kesilapan? 1424 01:08:32,617 --> 01:08:33,099 Yeah. 1425 01:08:33,099 --> 01:08:35,510 >> PENONTON: Anda telah gagal untuk kembali integer. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. MALAN: Tepat sekali. 1427 01:08:36,630 --> 01:08:38,569 Dan ini adalah di mana C mendapat mengekang cantik. 1428 01:08:38,569 --> 01:08:40,590 Jika anda mengatakan anda akan untuk kembali int, anda mempunyai 1429 01:08:40,590 --> 01:08:41,279 untuk kembali int satu. 1430 01:08:41,279 --> 01:08:43,689 Anda tidak boleh mendapatkan mewah dan mula kembali yang bool atau apungan atau 1431 01:08:43,689 --> 01:08:45,040 tali atau sesuatu seperti itu. 1432 01:08:45,040 --> 01:08:49,370 Sekarang, sementara itu, JavaScript dan PHP dan beberapa bahasa lain boleh, pada hakikatnya, 1433 01:08:49,370 --> 01:08:51,310 telah anda kembali yang berbeza jenis nilai-nilai. 1434 01:08:51,310 --> 01:08:54,819 Dan yang benar-benar boleh menjadi berguna, di mana anda dapat kembali Ints positif, sifar, 1435 01:08:54,819 --> 01:08:59,439 Ints negatif, atau palsu atau batal walaupun untuk menandakan kesilapan. 1436 01:08:59,439 --> 01:09:01,890 Tetapi kita tidak mempunyai serba boleh dalam C. 1437 01:09:01,890 --> 01:09:04,569 >> Jadi dengan dequeue, apa yang kita sarankan untuk dilakukan adalah - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB Bowden: Anda boleh kembali palsu. 1440 01:09:09,830 --> 01:09:13,189 Ia hanya yang palsu adalah hash menentukan palsu kepada sifar. 1441 01:09:13,189 --> 01:09:16,000 Jadi, jika anda pulangan palsu, anda kembali sifar. 1442 01:09:16,000 --> 01:09:25,470 Dan sifar adalah satu perkara yang sah di dalam giliran kita, manakala negatif 1 tidak jika 1443 01:09:25,470 --> 01:09:27,000 palsu kebetulan berada negatif 1. 1444 01:09:27,000 --> 01:09:29,972 Tetapi anda tidak perlu juga perlu tahu bahawa. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. MALAN: Itu mengapa saya tidak mengatakan ia. 1446 01:09:32,399 --> 01:09:36,450 >> ROB Bowden: Tetapi ia adalah tidak benar bahawa anda tidak boleh kembali palsu. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. MALAN: Pasti. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Jadi dequeue, notis kita menerima tidak sah sebagai hujahnya. 1450 01:09:44,240 --> 01:09:45,479 Dan itu kerana kita tidak lulus apa-apa masuk 1451 01:09:45,479 --> 01:09:48,359 Kami hanya mahu mengeluarkan elemen di hadapan barisan. 1452 01:09:48,359 --> 01:09:49,819 Jadi bagaimana kita boleh tidak melakukan ini? 1453 01:09:49,819 --> 01:09:51,290 Well, pertama, mari kita buat ini cek kewarasan cepat. 1454 01:09:51,290 --> 01:09:53,350 Jika saiz baris gilir adalah 0, ada tiada kerja yang perlu dilakukan. 1455 01:09:53,350 --> 01:09:54,210 Kembali negatif 1. 1456 01:09:54,210 --> 01:09:54,800 Selesai. 1457 01:09:54,800 --> 01:09:56,340 Jadi itulah beberapa baris program saya. 1458 01:09:56,340 --> 01:09:58,180 Jadi hanya empat baris kekal. 1459 01:09:58,180 --> 01:10:01,310 >> Jadi di sini saya membuat keputusan untuk SUSUTAN saiz. 1460 01:10:01,310 --> 01:10:04,620 Dan decrementing saiz berkesan bermakna saya melupakan 1461 01:10:04,620 --> 01:10:06,010 sesuatu yang di sana. 1462 01:10:06,010 --> 01:10:09,910 Tetapi saya juga perlu mengemaskini di mana hadapan nombor-nombor. 1463 01:10:09,910 --> 01:10:11,620 Jadi untuk berbuat demikian, saya perlu untuk melakukan dua perkara. 1464 01:10:11,620 --> 01:10:16,390 Saya mula-mula perlu ingat apa bilangan adalah di hadapan giliran, 1465 01:10:16,390 --> 01:10:17,860 kerana saya perlu kembali perkara itu. 1466 01:10:17,860 --> 01:10:20,910 Jadi, saya tidak mahu sengaja lupa mengenainya dan kemudian menulis ganti ia. 1467 01:10:20,910 --> 01:10:22,840 Saya hanya akan ingat dalam int satu. 1468 01:10:22,840 --> 01:10:27,310 >> Dan sekarang, saya ingin mengemaskini q.front untuk q.front +1. 1469 01:10:27,310 --> 01:10:30,070 Jadi, jika ini adalah orang yang pertama di line, sekarang, saya mahu lakukan ditambah 1 untuk 1470 01:10:30,070 --> 01:10:31,930 menunjukkan pada orang yang datang dalam talian. 1471 01:10:31,930 --> 01:10:33,420 Tetapi saya perlu mengendalikan Sampul itu. 1472 01:10:33,420 --> 01:10:37,270 Dan jika kapasiti adalah pemalar global, yang akan membolehkan saya untuk memastikan 1473 01:10:37,270 --> 01:10:41,140 kerana saya menunjukkan kepada orang yang terakhir dalam talian, operasi modulo akan membawa 1474 01:10:41,140 --> 01:10:43,840 saya kembali ke sifar pada hadapan barisan. 1475 01:10:43,840 --> 01:10:46,050 Dan yang mengendalikan Sampul di sini. 1476 01:10:46,050 --> 01:10:48,950 Dan kemudian saya meneruskan untuk kembali n. 1477 01:10:48,950 --> 01:10:51,530 >> Sekarang, tegasnya, saya tidak perlu mengisytiharkan n. 1478 01:10:51,530 --> 01:10:53,880 Saya tidak perlu merebutnya dan menyimpannya buat sementara waktu, kerana nilai adalah 1479 01:10:53,880 --> 01:10:54,740 masih ada. 1480 01:10:54,740 --> 01:10:57,490 Jadi saya hanya boleh melakukan aritmetik yang betul untuk kembali bekas ketua 1481 01:10:57,490 --> 01:10:58,450 barisan. 1482 01:10:58,450 --> 01:11:01,850 Tetapi saya hanya merasakan bahawa ini adalah lebih jelas untuk benar-benar merebut int, meletakkannya 1483 01:11:01,850 --> 01:11:04,320 dalam n, dan kemudian kembali yang demi kejelasan tetapi 1484 01:11:04,320 --> 01:11:05,735 tidak ketat perlu. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Psst. 1487 01:11:12,130 --> 01:11:13,410 Mereka semua dpt diucapkan dalam kepala saya. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB Bowden: Soalan Jadi pertama adalah masalah pokok binari. 1490 01:11:19,110 --> 01:11:22,140 Soalan oleh itu adalah, kita diberi nombor-nombor ini. 1491 01:11:22,140 --> 01:11:27,160 Dan kita mahu entah bagaimana memasukkan mereka ke dalam nod ini seperti bahawa ia adalah satu 1492 01:11:27,160 --> 01:11:30,110 sah pokok carian binari. 1493 01:11:30,110 --> 01:11:36,260 Jadi perkara yang perlu diingat tentang pokok carian binari adalah bahawa ia bukan 1494 01:11:36,260 --> 01:11:39,800 Cuma perkara yang ke kiri adalah kurang dan perkara yang 1495 01:11:39,800 --> 01:11:41,120 hak adalah lebih besar. 1496 01:11:41,120 --> 01:11:44,580 Ia perlu bahawa seluruh pokok itu untuk sebelah kiri adalah kurang, dan keseluruhan pokok itu 1497 01:11:44,580 --> 01:11:45,740 ke kanan adalah lebih besar. 1498 01:11:45,740 --> 01:11:55,260 >> Jadi, jika saya meletakkan 34 di sini di bahagian atas, dan kemudian Saya meletakkan 20 di sini, jadi itu sah jadi 1499 01:11:55,260 --> 01:11:56,970 ini, kerana 34 di sini. 1500 01:11:56,970 --> 01:11:57,920 20 akan ke kiri. 1501 01:11:57,920 --> 01:11:58,950 Jadi, itu kurang. 1502 01:11:58,950 --> 01:12:03,640 Tetapi saya tidak boleh kemudian meletakkan 59 di sini, kerana walaupun 59 adalah di sebelah kanan 20, 1503 01:12:03,640 --> 01:12:06,140 ia masih di sebelah kiri 34. 1504 01:12:06,140 --> 01:12:10,760 Maka dengan itu kekangan dalam fikiran, cara paling mudah mungkin menyelesaikan ini 1505 01:12:10,760 --> 01:12:14,330 masalah adalah untuk hanya jenis daripada nombor-nombor - 1506 01:12:14,330 --> 01:12:18,720 jadi 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Dan kemudian memasukkan mereka dari kiri ke kanan. 1508 01:12:21,640 --> 01:12:23,390 >> Jadi 20 pergi di sini. 1509 01:12:23,390 --> 01:12:24,630 34 pergi di sini. 1510 01:12:24,630 --> 01:12:25,830 36 pergi di sini. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 Dan anda juga boleh digambarkan dengan beberapa memasang di dalam dan menyedari, 1513 01:12:34,730 --> 01:12:38,830 oh, tunggu, saya tidak mempunyai nombor yang cukup untuk mengisi ini di sini. 1514 01:12:38,830 --> 01:12:42,170 Jadi saya perlu reshift apa saya nota laluan akan menjadi. 1515 01:12:42,170 --> 01:12:47,490 Tetapi melihat bahawa dalam tiga perlawanan akhir, jika anda membaca dari kiri ke kanan, ia adalah di 1516 01:12:47,490 --> 01:12:48,740 tertib menaik. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Jadi sekarang, kita mahu mengaku apa yang struct akan menjadi bagi 1519 01:12:56,540 --> 01:12:58,300 nod dalam pokok ini. 1520 01:12:58,300 --> 01:13:02,720 Jadi apa yang kita perlukan dalam pokok binari? 1521 01:13:02,720 --> 01:13:05,830 Oleh itu, kita mempunyai nilai jenis int, jadi beberapa nilai int. 1522 01:13:05,830 --> 01:13:07,220 Saya tidak tahu apa yang kita dipanggil dalam penyelesaian - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Kita memerlukan penunjuk kepada anak kiri dan penunjuk kepada anak yang betul. 1525 01:13:13,570 --> 01:13:17,540 Jadi ia akan kelihatan seperti ini. 1526 01:13:17,540 --> 01:13:20,510 Dan ia benar-benar akan melihat sebelum bilakah yang berkaitan duanya adalah terpakai 1527 01:13:20,510 --> 01:13:25,090 barangan senarai, jadi notis - 1528 01:13:25,090 --> 01:13:27,860 Saya akan perlu untuk skrol semua perjalanan pulang ke masalah 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Jadi menyedarinya kelihatan sama dengan ini, kecuali kita hanya berlaku untuk memanggil ini 1531 01:13:36,390 --> 01:13:38,590 nama yang berbeza. 1532 01:13:38,590 --> 01:13:41,440 Kami masih mempunyai integer nilai dan dua petunjuk. 1533 01:13:41,440 --> 01:13:44,850 Cuma bukan merawat petunjuk sebagai menunjuk kepada perkara yang akan datang 1534 01:13:44,850 --> 01:13:47,955 dan perkara yang lepas, kita melayan petunjuk untuk menunjuk kepada seorang kanak-kanak kiri 1535 01:13:47,955 --> 01:13:49,205 dan kanak-kanak yang betul. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 Jadi, itu nod struct kami. 1539 01:13:59,650 --> 01:14:03,920 Dan kini, satu-satunya fungsi kita perlu melaksanakan untuk ini adalah traverse, yang 1540 01:14:03,920 --> 01:14:08,320 kami mahu pergi ke atas pokok, percetakan keluar nilai-nilai pokok yang teratur. 1541 01:14:08,320 --> 01:14:15,241 >> Jadi mencari di sini, kita mahu untuk mencetak keluar 20, 34, 36, 52, 59, dan 106. 1542 01:14:15,241 --> 01:14:17,970 Bagaimana kita mencapai itu? 1543 01:14:17,970 --> 01:14:18,890 Jadi ia agak sama. 1544 01:14:18,890 --> 01:14:22,910 Jika anda melihat dalam peperiksaan yang lalu masalah ini yang anda mahu untuk mencetak 1545 01:14:22,910 --> 01:14:25,940 keseluruhan pokok dengan koma di antara segala-galanya, ia sebenarnya juga 1546 01:14:25,940 --> 01:14:27,320 lebih mudah daripada itu. 1547 01:14:27,320 --> 01:14:30,950 Jadi di sini adalah penyelesaian. 1548 01:14:30,950 --> 01:14:33,110 Ini adalah jauh lebih mudah jika anda melakukannya secara rekursif. 1549 01:14:33,110 --> 01:14:36,650 Saya tidak tahu sesiapa yang cuba untuk melakukannya secara berulang. 1550 01:14:36,650 --> 01:14:38,340 >> Tetapi pertama, kami mempunyai kes asas kami. 1551 01:14:38,340 --> 01:14:39,660 Bagaimana jika akar itu adalah batal? 1552 01:14:39,660 --> 01:14:40,610 Maka kita hanya akan kembali. 1553 01:14:40,610 --> 01:14:42,300 Kita tidak mahu untuk mencetak apa-apa. 1554 01:14:42,300 --> 01:14:45,940 Yang lain kita akan merentasi secara rekursif ke bawah. 1555 01:14:45,940 --> 01:14:48,140 Cetak anak pohon yang kiri keseluruhan. 1556 01:14:48,140 --> 01:14:51,440 Jadi mencetak semua kurang daripada nilai semasa saya. 1557 01:14:51,440 --> 01:14:53,930 Dan kemudian saya akan mencetak sendiri. 1558 01:14:53,930 --> 01:14:57,310 Dan kemudian saya akan recurse turun saya keseluruhan anak pohon betul, jadi segala-galanya 1559 01:14:57,310 --> 01:14:58,810 lebih besar daripada nilai saya. 1560 01:14:58,810 --> 01:15:03,870 Dan ini akan mencetak segala-galanya teratur. 1561 01:15:03,870 --> 01:15:05,860 Soalan tentang bagaimana ini sebenarnya Kuasa melakukan itu? 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> PENONTON: Saya mempunyai satu soalan pada [didengar]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB Bowden: Jadi salah satu cara untuk mendekati sebarang masalah rekursi adalah untuk hanya berfikir 1566 01:15:23,550 --> 01:15:26,275 mengenainya suka anda perlu berfikir tentang semua kes sudut. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Jadi menganggap bahawa kita mahu mencetak keseluruhan pokok ini. 1569 01:15:38,110 --> 01:15:42,030 Jadi kita semua akan memberi tumpuan kepada adalah nod tertentu ini - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Panggilan rekursif, kita berpura-pura mereka yang baru bekerja. 1572 01:15:47,420 --> 01:15:54,000 Jadi di sini, panggilan ini rekursif untuk traverse, kita tanpa berfikir 1573 01:15:54,000 --> 01:15:58,640 mengenainya, hanya menyeberangi kiri tiga, bayangkan yang sudah mencetak 20 1574 01:15:58,640 --> 01:16:00,730 dan 34 untuk kita. 1575 01:16:00,730 --> 01:16:03,350 Dan kemudian apabila kita akhirnya secara rekursif memanggil traverse di 1576 01:16:03,350 --> 01:16:07,890 betul, yang betul akan mencetak 52, 59, dan 106 untuk kita. 1577 01:16:07,890 --> 01:16:13,620 >> Jadi memandangkan ini boleh mencetak 20, 34, dan yang lain boleh mencetak 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 semua kita perlu berupaya lakukan adalah cetak diri kita di tengah-tengah itu. 1579 01:16:17,180 --> 01:16:21,250 Jadi mencetak semua di hadapan kita. 1580 01:16:21,250 --> 01:16:27,710 Cetak diri kita, maka cetak nod semasa 36, printf biasa, dan kemudian 1581 01:16:27,710 --> 01:16:31,170 mencetak semua selepas kita. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. MALAN: Ini adalah di mana rekursi akan benar-benar cantik. 1583 01:16:32,730 --> 01:16:36,270 Ia lompat ini hebat iman di mana anda melakukan sedikit sedikit saja dalam kerja. 1584 01:16:36,270 --> 01:16:38,460 Dan kemudian anda membiarkan seseorang lagi yang lain. 1585 01:16:38,460 --> 01:16:40,180 Dan sesiapa yang adalah, ironinya, anda. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Jadi bagi mata brownies yang serius, jika anda tatal ke atas kepada soalan-soalan - 1588 01:16:48,360 --> 01:16:50,530 >> ROB Bowden: Pada soalan? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. MALAN: Dan ke bawah sedikit untuk nombor, adakah sesiapa yang tahu di mana 1590 01:16:53,490 --> 01:16:55,190 nombor-nombor ini datang? 1591 01:16:55,190 --> 01:16:56,610 >> ROB Bowden: Saya betul-betul tidak tahu. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. MALAN: Mereka muncul sepanjang kuiz. 1593 01:16:59,794 --> 01:17:01,150 >> PENONTON: Adakah mereka nombor yang sama? 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. MALAN: Nombor-nombor tersebut. 1595 01:17:01,910 --> 01:17:03,260 Satu telur Paskah sedikit. 1596 01:17:03,260 --> 01:17:08,100 Jadi bagi anda menonton talian di rumah, jika anda boleh memberitahu kami melalui e-mel kepada 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net implikasinya ini berulang enam nombor-nombor 1598 01:17:12,680 --> 01:17:18,560 sepanjang Kuiz 1, kita akan mandi anda dengan perhatian yang luar biasa di akhir 1599 01:17:18,560 --> 01:17:21,610 kuliah dan bola tekanan. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Nice, halus. 1602 01:17:27,790 --> 01:17:29,570 >> ROB Bowden: Mana-mana soalan terakhir apa sahaja kuiz? 1603 01:17:29,570 --> 01:17:32,608