1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID เจลัน: ทั้งหมดขวา 3 00:00:12,900 --> 00:00:16,790 ดังนั้นยินดีที่จะเป็นครั้งแรกที่ การชันสูตรศพ CS50 การทดสอบ 4 00:00:16,790 --> 00:00:18,340 เราคิดว่าเราจะทำพิธีเปิด ประเพณีนี้ในปีนี้ 5 00:00:18,340 --> 00:00:20,960 และนี่จะเป็นโอกาส จะเดินผ่าน 6 00:00:20,960 --> 00:00:22,220 การแก้ปัญหาที่จะตอบคำถาม 7 00:00:22,220 --> 00:00:26,160 และเราจะเร็วขึ้นหรือช้าลงตาม ในความสนใจของคนเหล่านั้นที่นี่ 8 00:00:26,160 --> 00:00:29,730 >> ดังนั้นคุณอาจจะที่นี่เพราะคุณ ที่สนใจในวิธีการที่คุณอาจมีหรือ 9 00:00:29,730 --> 00:00:31,170 ควรจะมีคำตอบบางอย่าง ปัญหาเหล​​่านี้ 10 00:00:31,170 --> 00:00:33,300 ดังนั้นเราไม่ใช้เวลาดูว่าทำไม ที่ส่วนนี้เป็นอันดับแรก 11 00:00:33,300 --> 00:00:34,450 เพื่อรับสาย 12 00:00:34,450 --> 00:00:37,600 เรื่องนี้ทำให้คุณสามรุ่นที่แตกต่างกัน ของโปรแกรมที่เป็นที่สุด 13 00:00:37,600 --> 00:00:39,650 หมายถึงการได้รับสายจากผู้ใช้ 14 00:00:39,650 --> 00:00:42,530 หรือไม่ก็ไม่ว่าเป็น ที่เหลืออยู่กับคุณเพื่อตรวจสอบ 15 00:00:42,530 --> 00:00:45,150 >> และเราถามคำถาม 0 คิดว่ารุ่นที่ 1 16 00:00:45,150 --> 00:00:46,400 รวบรวมและดำเนินการ 17 00:00:46,400 --> 00:00:48,860 ทำไมอาจโปรแกรม segfault? 18 00:00:48,860 --> 00:00:51,150 ได้อย่างรวดเร็วก่อนคำแนะนำใด ๆ ว่าทำไม? 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 ใช่ 21 00:00:54,489 --> 00:00:59,260 >> ผู้ชม: ดังนั้นผมจำได้ว่าเห็นใน ตัวอย่างก่อนหน้านี้ในการมอง 22 00:00:59,260 --> 00:01:05,506 * s ถ่านและเห็นสแกน s และ เห็นเพราะมันเป็นตัวชี้ว่า 23 00:01:05,506 --> 00:01:07,971 มันส่งผลกระทบต่อสิ่งที่คุณสแกนอะไรบ้าง? 24 00:01:07,971 --> 00:01:10,940 มันหรือที่อยู่ของ s หรือไม่ 25 00:01:10,940 --> 00:01:11,180 >> DAVID เจลัน: OK 26 00:01:11,180 --> 00:01:11,480 ดี 27 00:01:11,480 --> 00:01:14,830 ดังนั้นในที่สุดแหล่งที่มาของปัญหาใด ๆ มีการสันนิษฐานว่าจะลด 28 00:01:14,830 --> 00:01:16,210 ที่ตัวแปร 29 00:01:16,210 --> 00:01:17,280 และมันก็เป็นตัวแปรที่แน่นอน 30 00:01:17,280 --> 00:01:19,900 ชนิดข้อมูลของตัวแปรที่เป็น char * ซึ่งหมายความว่ามันจะ 31 00:01:19,900 --> 00:01:22,570 มีที่อยู่ของตัวละคร 32 00:01:22,570 --> 00:01:23,850 และข้อมูลเชิงลึกที่อยู่ในนั้น 33 00:01:23,850 --> 00:01:28,330 มันจะมีที่อยู่ของ ตัวอักษรหรือมากกว่าปกติ 34 00:01:28,330 --> 00:01:32,110 ที่อยู่ของอักขระตัวแรกใน บล็อกทั้งหมดของตัวละคร 35 00:01:32,110 --> 00:01:36,680 >> แต่จับคือการสแกน s วัตถุประสงค์ใน ชีวิตจะได้รับที่อยู่และได้รับการ 36 00:01:36,680 --> 00:01:40,960 รหัสรูปแบบเช่น% s อ่าน สตริงเป็นก้อน 37 00:01:40,960 --> 00:01:42,330 หน่วยความจำที่อยู่ที่ 38 00:01:42,330 --> 00:01:46,040 แต่เพราะไม่มีเครื่องหมายเท่ากับก่อน อัฒภาคในวันแรกที่ 39 00:01:46,040 --> 00:01:49,310 บรรทัดของรหัสเพราะเราทำไม่ได้จริง จัดสรรหน่วยความจำใด ๆ กับ 40 00:01:49,310 --> 00:01:53,020 malloc เพราะมันไม่ได้จริง จัดสรรอาร์เรย์ที่มีขนาดบางทั้งหมด 41 00:01:53,020 --> 00:01:57,620 ที่คุณกำลังทำคือการอ่านของผู้ใช้ ใส่แป้นพิมพ์เป็นบางสมบูรณ์ 42 00:01:57,620 --> 00:02:00,490 ค่าขยะซึ่ง อยู่ในโดยค่าเริ่มต้น 43 00:02:00,490 --> 00:02:04,480 ดังนั้นโอกาสที่คุณกำลังจะ segfault ถ้า ที่อยู่ที่ไม่เพียงเพื่อให้เกิดขึ้น 44 00:02:04,480 --> 00:02:08,009 เป็นค่าที่คุณสามารถให้ ในความเป็นจริงเขียนถึง 45 00:02:08,009 --> 00:02:10,889 ดังนั้นไม่ดีไม่ได้ในการจัดสรร หน่วยความจำของคุณมี 46 00:02:10,889 --> 00:02:13,150 >> ดังนั้นในคำถามที่ 1 เราถามว่า คิดว่า 2 รุ่นคือ 47 00:02:13,150 --> 00:02:14,230 รวบรวมและดำเนินการ 48 00:02:14,230 --> 00:02:15,900 ทำไมโปรแกรมนี้อาจ segfault? 49 00:02:15,900 --> 00:02:17,990 ดังนั้นหนึ่งนี้เป็นรถน้อย 50 00:02:17,990 --> 00:02:21,470 และมีเพียงคนเดียวจริงๆ วิธีที่ชัดเจนที่คุณสามารถ 51 00:02:21,470 --> 00:02:22,810 เรียก segfault ที่นี่ 52 00:02:22,810 --> 00:02:23,730 และนี่คือใจ 53 00:02:23,730 --> 00:02:28,180 เวลาที่เรากำลังใช้คในความทรงจำใด ๆ สิ่งที่ คุณอาจจะก่อให้เกิดการ segfault 54 00:02:28,180 --> 00:02:30,718 กับรุ่น 2? 55 00:02:30,718 --> 00:02:35,560 >> ผู้ชม: ถ้าคุณใช้ข้อมูลที่อยู่ใน สตริงที่ยาวกว่า 49 56 00:02:35,560 --> 00:02:35,975 ตัวอักษร 57 00:02:35,975 --> 00:02:37,260 >> DAVID เจลัน: แน่นอน 58 00:02:37,260 --> 00:02:41,420 เวลาที่คุณเห็นบางสิ่งบางอย่างคงที่ยาว ๆ เมื่อมันมาถึงอาร์เรย์ของคุณ 59 00:02:41,420 --> 00:02:44,650 เรดาร์ควรจะไปปิดที่นี้อาจจะ ปัญหาหากคุณไม่ได้ตรวจสอบ 60 00:02:44,650 --> 00:02:45,810 ขอบเขตของอาร์เรย์ 61 00:02:45,810 --> 00:02:46,650 และนั่นคือปัญหาที่นี่ 62 00:02:46,650 --> 00:02:47,910 เรายังคงใช้ scanf 63 00:02:47,910 --> 00:02:52,200 เรายังคงใช้% s ซึ่งหมายความว่าพยายาม อ่านสตริงจากผู้ใช้ 64 00:02:52,200 --> 00:02:56,300 ที่จะได้รับการอ่านใน s ซึ่ง ณ จุดนี้เป็นอย่างมีประสิทธิภาพ 65 00:02:56,300 --> 00:02:58,570 ที่อยู่ของหน่วยความจำอัน หรือเทียบเท่า 66 00:02:58,570 --> 00:03:02,080 มันเป็นชื่อของอาร์เรย์ ของตัวละครของหน่วยความจำ 67 00:03:02,080 --> 00:03:07,610 >> แต่ตรงที่ถ้าคุณอ่านสตริง ที่ยาวกว่า 49 ตัวอักษร 49 68 00:03:07,610 --> 00:03:10,440 เพราะคุณจะต้องมีที่ว่างสำหรับเครื่องหมาย 0 คุณกำลังจะล้น 69 00:03:10,440 --> 00:03:11,390 บัฟเฟอร์ที่ 70 00:03:11,390 --> 00:03:16,410 และคุณอาจได้รับโชคดีและสามารถที่จะ เขียนตัวอักษรที่ 51, 52, 53 71 00:03:16,410 --> 00:03:18,560 แต่ในบางจุด, ระบบปฏิบัติการ เป็นไปที่จะบอกว่าไม่มี 72 00:03:18,560 --> 00:03:21,270 นี้แน่นอนไม่ได้เป็นหน่วยความจำ คุณได้รับอนุญาตให้สัมผัส 73 00:03:21,270 --> 00:03:23,380 และโปรแกรมจะไป segfault 74 00:03:23,380 --> 00:03:26,650 >> จึงมี, วิเคราะห์พฤติกรรมที่ควรจะใด เวลาที่คุณมีความยาวคงที่คุณมี 75 00:03:26,650 --> 00:03:30,150 ให้แน่ใจว่าคุณกำลังตรวจสอบความยาว ของสิ่งที่เป็นคุณกำลังพยายาม 76 00:03:30,150 --> 00:03:31,090 การอ่านเป็นมัน 77 00:03:31,090 --> 00:03:35,110 >> ผู้ชม: ดังนั้นการแก้ปัญหาที่คุณสามารถ มีคำสั่งการตรวจสอบจริง 78 00:03:35,110 --> 00:03:37,140 เป็นระยะเวลามากขึ้น มากกว่าหรือน้อยกว่า 79 00:03:37,140 --> 00:03:37,730 >> DAVID เจลัน: แน่นอน 80 00:03:37,730 --> 00:03:41,706 คุณเพียงแค่ต้องมีเงื่อนไข ที่บอกว่าถ้า - 81 00:03:41,706 --> 00:03:46,080 หรือมากกว่าที่คุณไม่จำเป็นต้องรู้ ล่วงหน้าจำนวนตัวอักษร 82 00:03:46,080 --> 00:03:49,060 ผู้ใช้จะพิมพ์เพราะ คุณมีไก่และไข่ 83 00:03:49,060 --> 00:03:51,860 ไม่ได้จนกว่าคุณจะได้อ่านมันด้วย scanf คุณสามารถคิดออกว่ามันยาวเป็น 84 00:03:51,860 --> 00:03:54,500 แต่ในจุดนั้นมันจะสายเกินไป เพราะคุณได้อ่านแล้วมันลงไปใน 85 00:03:54,500 --> 00:03:55,710 บล็อกของหน่วยความจำบางส่วน 86 00:03:55,710 --> 00:03:59,590 เพื่อที่จะกันหลีกเลี่ยงห้องสมุด CS50 ปัญหานี้ทั้งหมดจำ 87 00:03:59,590 --> 00:04:01,060 โดยใช้ fgetc 88 00:04:01,060 --> 00:04:05,390 และจะอ่านตัวละครตัวหนึ่งที่เวลา ปลาย toeing พร้อมรู้ว่าคุณ 89 00:04:05,390 --> 00:04:08,060 ไม่สามารถล้นตัวละครถ้า คุณอ่านในช่วงเวลาหนึ่ง 90 00:04:08,060 --> 00:04:11,580 >> จับอยู่กับการเรียกคืน GetString เป็น ที่เรามีอย่างต่อเนื่องอีกครั้งขนาด 91 00:04:11,580 --> 00:04:13,590 อันที่ของหน่วยความจำที่ เป็นเพียงความเจ็บปวด 92 00:04:13,590 --> 00:04:15,310 มันมากบรรทัดของ รหัสที่จะทำ 93 00:04:15,310 --> 00:04:18,779 ดังนั้นวิธีการอื่นที่จะ ใช้จริงญาติดังนั้น 94 00:04:18,779 --> 00:04:19,790 การพูดของ scanf 95 00:04:19,790 --> 00:04:22,820 มีสายพันธุ์จำนวนมากของเหล่านี้เป็น ฟังก์ชั่นที่ตรวจสอบจริง 96 00:04:22,820 --> 00:04:25,870 ความยาวของจำนวนตัวอักษร คุณอาจจะอ่านที่สุด 97 00:04:25,870 --> 00:04:29,430 และคุณสามารถระบุไม่ได้อ่าน กว่า 50 ตัวอักษร 98 00:04:29,430 --> 00:04:34,110 เพื่อที่จะเป็นอีกวิธีหนึ่ง แต่ รองรับน้อยของปัจจัยการผลิตขนาดใหญ่ 99 00:04:34,110 --> 00:04:37,040 >> ดังนั้นคำถามที่ 2 ถามว่าคิดว่ารุ่นที่ 3 จะรวบรวมและดำเนินการ 100 00:04:37,040 --> 00:04:39,960 ทำไมโปรแกรมที่อาจ segfault? 101 00:04:39,960 --> 00:04:42,650 ดังนั้นหนึ่งนี้เป็นจริงเดียวกัน ตอบแม้ว่ามัน 102 00:04:42,650 --> 00:04:43,590 ดูเหมือนนักเล่นน้อย 103 00:04:43,590 --> 00:04:46,440 เรากำลังใช้ malloc ซึ่งรู้สึกเหมือน เราให้ตัวเองเลือกมากขึ้น 104 00:04:46,440 --> 00:04:48,030 และจากนั้นเราจะพ้นที่ หน่วยความจำที่สิ้นสุด 105 00:04:48,030 --> 00:04:49,580 ก็ยังคงเพียง 50 ไบต์ของหน่วยความจำ 106 00:04:49,580 --> 00:04:53,620 ดังนั้นเราจึงยังคงพยายามที่จะอ่าน ใน 51, 52, 1,000 ไบต์ 107 00:04:53,620 --> 00:04:55,830 มันจะ segfault เพื่อ ว่าด้วยเหตุผลเดียวกัน 108 00:04:55,830 --> 00:04:57,530 >> แต่มีเหตุผลอื่นเกินไป 109 00:04:57,530 --> 00:05:03,890 อะไรที่สามารถ malloc ผลตอบแทนนอกเหนือจาก ที่อยู่ของหน่วยความจำอัน? 110 00:05:03,890 --> 00:05:04,920 มันอาจกลับมาเป็นโมฆะ 111 00:05:04,920 --> 00:05:07,560 และเพราะเราไม่ได้ตรวจสอบ ที่เราอาจจะทำอะไรบางอย่าง 112 00:05:07,560 --> 00:05:11,350 โง่ด้วยเหตุผลอื่นซึ่งเป็นที่ เราอาจจะบอก scanf อ่าน 113 00:05:11,350 --> 00:05:16,050 ข้อมูลของผู้ใช้จากแป้นพิมพ์ 0 เป็นสถานที่ AKA null 114 00:05:16,050 --> 00:05:18,890 และที่เกินไปอย่างแน่นอน เรียก segfault 115 00:05:18,890 --> 00:05:21,590 ดังนั้นเพื่อวัตถุประสงค์ในการทดสอบของเราจะ ได้รับการยอมรับอย่างใดอย่างหนึ่งของผู้ที่เป็น 116 00:05:21,590 --> 00:05:22,740 เหตุผลที่ถูกต้อง 117 00:05:22,740 --> 00:05:23,420 หนึ่งคือเหมือนกัน 118 00:05:23,420 --> 00:05:25,720 หนึ่งเป็นเพียงเล็กน้อยที่เหมาะสมยิ่งขึ้น 119 00:05:25,720 --> 00:05:28,975 >> สุดท้ายด้วยความเคารพในการเขียนโปรแกรมของ ใช้หน่วยความจำอย่างไร 2 รุ่นและ 120 00:05:28,975 --> 00:05:30,350 3 รุ่นที่แตกต่างกัน? 121 00:05:30,350 --> 00:05:35,070 ดังนั้นสำหรับสิ่งที่คุ้มค่าเราเห็น อุปทานดูเหมือนไม่มีที่สิ้นสุดของความเป็นไปได้ 122 00:05:35,070 --> 00:05:35,770 คำตอบนี้ 123 00:05:35,770 --> 00:05:39,300 และในหมู่คนตอบสิ่งที่เรามี หวัง แต่เราได้รับการยอมรับอื่น ๆ 124 00:05:39,300 --> 00:05:42,250 สิ่งที่เป็นที่กล่าวถึงของบางอย่าง ความจริงที่ว่ารุ่นที่ 2 คือการใช้ 125 00:05:42,250 --> 00:05:44,560 ที่เรียกว่าสแต็ค 126 00:05:44,560 --> 00:05:46,710 3 รุ่นจะใช้กอง 127 00:05:46,710 --> 00:05:50,060 และหน้าที่นี้ไม่ได้จริงๆ ทำให้สิ่งที่แตกต่างกันมาก 128 00:05:50,060 --> 00:05:54,040 ในตอนท้ายของวันที่เรายังคง แค่ 50 ไบต์ของหน่วยความจำ 129 00:05:54,040 --> 00:05:56,640 >> แต่นั่นก็เป็นหนึ่งในคำตอบที่เป็นไปได้ ที่เรากำลังหาที่ 130 00:05:56,640 --> 00:05:59,730 แต่คุณจะเห็นที่คุณได้รับแบบทดสอบของคุณ กลับมาจาก TFs ที่เราได้ 131 00:05:59,730 --> 00:06:04,330 ยอมรับการอภิปรายอื่น ๆ ของพวกเขา การใช้แตกต่างกันของหน่วยความจำได้เป็นอย่างดี 132 00:06:04,330 --> 00:06:08,600 แต่กองและกองจะได้รับ คำตอบง่ายที่จะไปกับ 133 00:06:08,600 --> 00:06:11,150 คำถามใด? 134 00:06:11,150 --> 00:06:12,400 ผมให้คุณร็อบ 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB สลิง: ดังนั้นปัญหา 4 137 00:06:20,210 --> 00:06:21,985 นี้เป็นหนึ่งในสถานที่ที่คุณต้องกรอก ในจำนวนไบต์ที่ออกจากทั้งหมด 138 00:06:21,985 --> 00:06:23,460 ชนิดที่แตกต่างกันเหล่านี้ใช้ 139 00:06:23,460 --> 00:06:24,830 ดังนั้นสิ่งแรกที่เราเห็น 140 00:06:24,830 --> 00:06:27,930 สมมติสถาปัตยกรรม 32 บิต เช่นเครื่องใช้ CS50 นี้ 141 00:06:27,930 --> 00:06:33,530 ดังนั้นหนึ่งในสิ่งพื้นฐานเกี่ยวกับ สถาปัตยกรรม 32 บิตที่บอกเรา 142 00:06:33,530 --> 00:06:37,490 ว่าวิธีการใหญ่ตัวชี้เป็นไป ที่จะอยู่ในสถาปัตยกรรม 143 00:06:37,490 --> 00:06:43,020 >> ดังนั้นทันทีที่เรารู้ว่าตัวชี้ใด ๆ ประเภทเป็น 32 บิตหรือ 4 ไบต์ 144 00:06:43,020 --> 00:06:46,010 ดังนั้นมองไปที่ตารางนี้ * โหนดเป็นประเภทตัวชี้ 145 00:06:46,010 --> 00:06:47,250 ที่จะเป็น 4 ไบต์ 146 00:06:47,250 --> 00:06:51,640 โหนด struct * ที่แท้จริง เหมือนดาวโหนด 147 00:06:51,640 --> 00:06:53,590 และเพื่อให้เป็นไปได้ 4 ไบต์ 148 00:06:53,590 --> 00:06:58,270 สตริงจึงดูไม่เหมือน ชี้ แต่ typedef, 149 00:06:58,270 --> 00:07:01,590 สตริงเป็นเพียงถ่าน * ซึ่ง เป็นประเภทตัวชี้ 150 00:07:01,590 --> 00:07:03,550 เพื่อที่จะเป็น 4 ไบต์ 151 00:07:03,550 --> 00:07:06,150 >> ดังนั้นทั้งสามมีทั้งหมด 4 ไบต์ 152 00:07:06,150 --> 00:07:09,350 ตอนนี้โหนดและนักเรียนมี บิตซับซ้อนมากขึ้น 153 00:07:09,350 --> 00:07:15,160 ดังนั้นการมองหาที่โหนดและนักเรียนที่เราเห็น โหนดเป็นจำนวนเต็มและตัวชี้ 154 00:07:15,160 --> 00:07:18,050 และนักเรียนเป็นสองตัวชี้ ภายในของมัน 155 00:07:18,050 --> 00:07:23,340 ดังนั้นอย่างน้อยสำหรับกรณีของเราที่นี่วิธี ที่เราจบลงด้วยการคำนวณขนาดของ 156 00:07:23,340 --> 00:07:27,020 struct นี้เป็นเพียงการเพิ่มขึ้นทุกอย่าง ที่อยู่ภายใน 157 00:07:27,020 --> 00:07:30,690 >> ดังนั้นสำหรับโหนดเรามีจำนวนเต็ม ซึ่งเป็น 4 ไบต์ 158 00:07:30,690 --> 00:07:32,830 เรามีตัวชี้ซึ่งเป็น 4 ไบต์ 159 00:07:32,830 --> 00:07:35,820 และดังนั้นหนึ่งโหนดเป็นไป ที่จะใช้เวลาถึง 8 ไบต​​์ 160 00:07:35,820 --> 00:07:39,490 และเช่นเดียวกันสำหรับนักเรียนเรามี ตัวชี้ที่ 4 ไบต์และอีก 161 00:07:39,490 --> 00:07:40,770 ตัวชี้ที่ 4 ไบต์ 162 00:07:40,770 --> 00:07:43,180 เพื่อที่จะจบ ขึ้นเป็น 8 ไบต​​์ 163 00:07:43,180 --> 00:07:45,480 ดังนั้นโหนดและนักเรียนมี 8 ไบต​​์ 164 00:07:45,480 --> 00:07:48,950 และทั้งสามมีทั้งหมด 4 ไบต์ 165 00:07:48,950 --> 00:07:50,240 คำถามที่ 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 ใช่ 168 00:07:54,990 --> 00:07:58,413 >> ผู้ชม: มันเป็น 64 บิต สถาปัตยกรรมจะว่า 169 00:07:58,413 --> 00:07:59,880 สองทั้งหมดของพวกเขา 170 00:07:59,880 --> 00:08:01,790 >> ROB สลิง: มันจะไม่ สองทั้งหมดของพวกเขา 171 00:08:01,790 --> 00:08:05,830 ดังนั้นสถาปัตยกรรม 64 บิตมันอีกครั้ง การเปลี่ยนแปลงที่สิ่งพื้นฐานที่ 172 00:08:05,830 --> 00:08:08,910 ชี้เป็น 64 บิต 173 00:08:08,910 --> 00:08:09,290 ใช่ 174 00:08:09,290 --> 00:08:10,930 ดังนั้นตัวชี้คือ 8 ไบต​​์ 175 00:08:10,930 --> 00:08:15,420 ดังนั้นเหล่านี้ที่มี 4 ไบต์ จะไปเป็น 8 ไบต​​์ 176 00:08:15,420 --> 00:08:18,617 นักศึกษาซึ่งเป็นสองตัวชี้ ดีตอนนี้มันจะ 177 00:08:18,617 --> 00:08:19,800 เป็น 8 ไบต​​์ 8 ไบต​​์ 178 00:08:19,800 --> 00:08:21,980 มันจะทำให้ 16 ไบต์ 179 00:08:21,980 --> 00:08:25,710 >> แต่โหนดยังคงเป็น 4 ไบต์ 180 00:08:25,710 --> 00:08:27,800 ดังนั้นตัวชี้นี้เป็นไป เป็น 8 ไบต​​์ 181 00:08:27,800 --> 00:08:28,930 นี้เป็น 4 ไบต์ 182 00:08:28,930 --> 00:08:30,870 ดังนั้นโหนดเพียงจะ จะเป็น 12 ไบต์ 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 คำถามอื่นใดที่หนึ่ง? 185 00:08:39,280 --> 00:08:44,500 ดังนั้นหนึ่งต่อไปเหล่านี้เป็น รหัสสถานะ HTTP 186 00:08:44,500 --> 00:08:48,000 และคุณจะต้องอธิบายสถานการณ์ ซึ่งอยู่ภายใต้อำนาจของเหล่านี้ 187 00:08:48,000 --> 00:08:49,810 กลับสู่คุณ 188 00:08:49,810 --> 00:08:56,730 ปัญหาหนึ่งที่ผมได้ยินนักเรียนบางคน มีอยู่ว่าพวกเขาพยายามที่จะทำให้ 189 00:08:56,730 --> 00:08:58,950 ข้อผิดพลาดจะอยู่ในช่วงปลายของลูกค้า 190 00:08:58,950 --> 00:09:02,320 ดังนั้นเมื่อเราพยายามที่จะทำตามคำขอ ไปยังเซิร์ฟเวอร์บางสิ่งบางอย่างไป 191 00:09:02,320 --> 00:09:03,820 ที่ไม่ถูกต้องในส่วนของเรา 192 00:09:03,820 --> 00:09:07,660 แต่โดยทั่วไปเหล่านี้เป็นรหัส ถูกส่งกลับโดยเซิร์ฟเวอร์ 193 00:09:07,660 --> 00:09:11,720 ดังนั้นเราจึงต้องการที่จะคิดออกว่าเกิดอะไรขึ้น ผิดหรือขวาบนเซิร์ฟเวอร์ที่ 194 00:09:11,720 --> 00:09:14,280 ทำให้เกิดสิ่งเหล่านี้จะถูกส่งกลับ 195 00:09:14,280 --> 00:09:18,670 ดังนั้นทำไมอาจผลตอบแทนที่เซิร์ฟเวอร์ รหัสสถานะ 200? 196 00:09:18,670 --> 00:09:19,920 คิดใด? 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> ใช่ 199 00:09:23,730 --> 00:09:27,850 ดังนั้นสิ่งที่เกี่ยวกับการประสบความสำเร็จ ขอเดินผ่าน 200 00:09:27,850 --> 00:09:30,260 และพวกเขาก็สามารถที่จะกลับมา สิ่งที่คุณถามหา 201 00:09:30,260 --> 00:09:32,240 ดังนั้นทุกอย่างถูกปรับ 202 00:09:32,240 --> 00:09:35,662 สิ่งที่เกี่ยวกับ 302 พบ 203 00:09:35,662 --> 00:09:36,618 ใช่ 204 00:09:36,618 --> 00:09:39,008 >> ผู้ชม: เซิร์ฟเวอร์ถูกมอง สำหรับสิ่งที่คุณได้รับการร้องขอ 205 00:09:39,008 --> 00:09:40,442 แต่ก็ไม่สามารถหามัน 206 00:09:40,442 --> 00:09:42,850 ดังนั้นจึงมีข้อผิดพลาด 207 00:09:42,850 --> 00:09:47,720 >> ROB สลิง: ดังนั้นเซิร์ฟเวอร์เป็น มองหาสิ่งที่คุณต้องการ 208 00:09:47,720 --> 00:09:51,682 ดังนั้นเพียงแค่มองหาที่นี่, 302 พบ มันก็สามารถที่จะพบว่ามัน 209 00:09:51,682 --> 00:09:53,035 >> ผู้ชม: ฉันขอโทษ 210 00:09:53,035 --> 00:09:54,388 พบหมายความว่าพวกเขาไม่พบว่ามัน 211 00:09:54,388 --> 00:09:55,638 ขอโทษ 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB สลิง: ดังนั้น 302 พบ 214 00:10:00,160 --> 00:10:02,350 เซิร์ฟเวอร์สามารถที่จะหา สิ่งที่คุณต้องการ 215 00:10:02,350 --> 00:10:04,640 >> ผู้ชม: แต่มันก็ไม่ได้แสดงมันได้หรือไม่ 216 00:10:04,640 --> 00:10:08,180 >> ROB สลิง: ความแตกต่างระหว่าง นี้ 302 และ 200 ก็คือว่ามัน 217 00:10:08,180 --> 00:10:09,280 รู้ว่าสิ่งที่คุณต้องการ 218 00:10:09,280 --> 00:10:12,000 แต่มันไม่ได้เป็นว่าที่ คุณอยากจะถาม 219 00:10:12,000 --> 00:10:14,580 ดังนั้น 302 เปลี่ยนเส้นทางปกติ 220 00:10:14,580 --> 00:10:16,510 เพื่อให้คุณได้รับการร้องขอหน้า 221 00:10:16,510 --> 00:10:19,590 มันรู้โอ้ฉันต้องการ ที่จะกลับมาให้คุณนี้ 222 00:10:19,590 --> 00:10:21,070 แต่นี้เป็นที่แตกต่างกัน URL 223 00:10:21,070 --> 00:10:23,534 ดังนั้นเดี๋ยวก่อนคุณจริงอยากให้เรื่องนี้ 224 00:10:23,534 --> 00:10:26,950 >> DAVID เจลัน: มันเป็นชิ้นส่วนที่กล่าวว่า ที่เราให้พวกคุณเปลี่ยนเส้นทาง 225 00:10:26,950 --> 00:10:30,830 ฟังก์ชั่นที่ใช้ในการทำงานของส่วนหัว ที่ในที่สุดก็จะพิมพ์ออกมาตั้ง 226 00:10:30,830 --> 00:10:34,110 ลำไส้ใหญ่แล้ว URL ที่ คุณต้องการที่จะปฏิเสธผู้ใช้ 227 00:10:34,110 --> 00:10:37,480 แม้ว่าคุณจะไม่ได้เห็น 302 มีอย่างชัดเจนว่าเป็นสิ่งที่ PHP 228 00:10:37,480 --> 00:10:41,550 อย่างน่าอัศจรรย์จะแทรกเป็นส่วนหัว บอกว่าสิ่งที่ร็อบกล่าวว่ามี - 229 00:10:41,550 --> 00:10:41,930 พบ 230 00:10:41,930 --> 00:10:43,180 แต่ไปที่นี่แทน 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB สลิง: OK 233 00:10:46,160 --> 00:10:47,630 ดังนั้นสิ่งที่เกี่ยวกับ 403 ที่ต้องห้าม? 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> ผู้ชม: ฉันคิดว่ามันว่าเซิร์ฟเวอร์ เป็นพื้นบอกว่าลูกค้า 236 00:10:57,120 --> 00:10:59,970 ไม่สามารถเข้าถึงหน้าบ้าน 237 00:10:59,970 --> 00:11:03,260 >> ROB สลิง: ดังนั้นใช่ 238 00:11:03,260 --> 00:11:07,670 ดีคำตอบที่ปกติเรา คาดหวังว่าเป็นสิ่งที่ต้องการไฟล์ 239 00:11:07,670 --> 00:11:08,920 ไม่ chmodded เหมาะสม 240 00:11:08,920 --> 00:11:11,590 นั่นอาจเป็นสิ่งที่อยู่ภายใต้สถานการณ์ คุณเห็นพวกเขา 241 00:11:11,590 --> 00:11:18,920 แต่มีเหตุผลที่ว่าลูกค้า อาจจะเป็นความผิดที่นี่ 242 00:11:18,920 --> 00:11:20,440 มีจริงรหัสสถานะอื่น - 243 00:11:20,440 --> 00:11:21,210 401 244 00:11:21,210 --> 00:11:22,820 ดังนั้นเหล่านี้เป็นลักษณะคล้ายกันมาก 245 00:11:22,820 --> 00:11:24,590 >> 401 ไม่ได้รับอนุญาต 246 00:11:24,590 --> 00:11:26,130 และ 403 เป็นที่ต้องห้าม 247 00:11:26,130 --> 00:11:31,890 และไม่ได้รับอนุญาตเพื่อให้คุณเฉพาะ ได้รับถ้าคุณไม่ได้เข้าสู่ระบบค่ะ 248 00:11:31,890 --> 00:11:34,520 แต่การเข้าสู่ระบบอาจหมายถึง ที่คุณมีสิทธิ์ 249 00:11:34,520 --> 00:11:37,930 แต่ถ้าคุณกำลังเข้าสู่ระบบอยู่แล้วและคุณ ยังคงไม่ได้รับอนุญาตแล้ว 250 00:11:37,930 --> 00:11:40,140 คุณยังสามารถได้รับการต้องห้าม 251 00:11:40,140 --> 00:11:45,320 ดังนั้นหากคุณกำลังเข้าสู่ระบบและจะได้ไม่ต้อง ได้รับอนุญาตต้องห้ามยังเป็น 252 00:11:45,320 --> 00:11:47,164 สิ่งที่คุณจะได้รับ 253 00:11:47,164 --> 00:11:48,900 >> DAVID เจลัน: และกลไก ซึ่งปัญหาเหล​​่านี้มักจะ 254 00:11:48,900 --> 00:11:53,100 แก้ไขบนเซิร์ฟเวอร์ ผ่านสิ่งที่คำสั่ง 255 00:11:53,100 --> 00:11:57,700 chmod ถ้ามันจริงสิทธิ์ ปัญหาเกี่ยวกับแฟ้มหรือไดเรกทอรี 256 00:11:57,700 --> 00:11:59,220 >> ROB สลิง: 404 แล้วไม่พบ 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 ใช่ 259 00:12:03,470 --> 00:12:10,150 ดังนั้นแตกต่างจากที่ 302 มันก็ไม่ได้ว่า ที่คุณถาม แต่ก็รู้ว่าสิ่งที่ 260 00:12:10,150 --> 00:12:12,710 คุณต้องการนี​​้มันก็มี ความคิดสิ่งที่คุณต้องการไม่มี 261 00:12:12,710 --> 00:12:15,648 และคุณไม่ได้ร้องขอ สิ่งที่ถูกต้อง 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 ฉันกาน้ำชาแล้ว 500 เซิร์ฟเวอร์ภายใน 264 00:12:22,310 --> 00:12:24,870 ดังนั้นทำไมคุณอาจได้รับหรือไม่ 265 00:12:24,870 --> 00:12:26,120 >> ดังนั้น segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 ที่จริงผมไม่ทราบว่าการจัดลำดับ มาตรฐานสำหรับการนี​​้ 268 00:12:30,640 --> 00:12:34,850 แต่ถ้าโค้ด PHP ของคุณมีบางสิ่งบางอย่าง ที่ไม่ถูกต้องในนั้นในทางทฤษฎีมันจะ 269 00:12:34,850 --> 00:12:39,650 จริง segfault ในกรณีที่นี้ 500 ข้อผิดพลาดภายในเซิร์ฟเวอร์บางสิ่งบางอย่าง 270 00:12:39,650 --> 00:12:41,400 ผิดกับเซิร์ฟเวอร์ของคุณ องค์ประกอบ 271 00:12:41,400 --> 00:12:44,320 หรือมีข้อผิดพลาดทางไวยากรณ์ ในโค้ด PHP ของคุณ 272 00:12:44,320 --> 00:12:46,095 หรือสิ่งที่ไม่ดีที่เกิดขึ้น 273 00:12:46,095 --> 00:12:48,320 >> DAVID เจลัน: เราไม่เห็น segfault คำตอบในหมู่คนไม่กี่คน 274 00:12:48,320 --> 00:12:49,490 และในทางเทคนิคก็อาจเกิดขึ้นได้ 275 00:12:49,490 --> 00:12:53,820 แต่ที่จะเป็น PHP, โปรแกรม เขียนโดยคนอื่นจริง 276 00:12:53,820 --> 00:12:57,790 segfaulted ซึ่งเฉพาะในกรณีที่คนเหล่านั้น เมาขึ้นและเขียนรหัสในรถ 277 00:12:57,790 --> 00:13:00,680 ล่ามของพวกเขาจะ PHP ตัวเอง segfault 278 00:13:00,680 --> 00:13:06,460 ดังนั้นแม้ว่า 500 เป็นเหมือน segfault ในจิตวิญญาณก็เกือบเสมอ 279 00:13:06,460 --> 00:13:10,490 ผลมาจากปัญหาการตั้งค่าไฟล์ กับเว็บเซิร์ฟเวอร์ของคุณหรือเป็นร็อบกล่าวว่า 280 00:13:10,490 --> 00:13:13,200 ไวยากรณ์ผิดพลาดเช่นคุณ ไม่ได้ปิดการเสนอราคา 281 00:13:13,200 --> 00:13:16,180 หรือคุณสูญเสียอัฒภาคอยู่ที่ไหนสักแห่ง 282 00:13:16,180 --> 00:13:23,677 >> ผู้ชม: ดังนั้นสำหรับ pset กระสวยผม คิดว่าเมื่อฉันไม่ได้เมื่อฉันคลิก 283 00:13:23,677 --> 00:13:26,300 เบราว์เซอร์ แต่ไม่มีอะไรขึ้นมา สิ่งที่พวกเขาเรียกว่าหน้าขาว 284 00:13:26,300 --> 00:13:28,056 แต่มันเป็นเพราะของรหัส 285 00:13:28,056 --> 00:13:29,440 ผมคิดว่าเป็น JavaScript ใช่ไหม 286 00:13:29,440 --> 00:13:29,770 >> ROB สลิง: ใช่ 287 00:13:29,770 --> 00:13:31,180 >> ผู้ชม: Would ข้อผิดพลาดที่ ยังคงมาได้หรือไม่ 288 00:13:31,180 --> 00:13:34,290 >> ROB สลิง: ดังนั้นคุณจะไม่ได้รับ ข้อผิดพลาดนี้เพราะทุกอย่าง 289 00:13:34,290 --> 00:13:36,930 จากมุมมองของเว็บเซิร์ฟเวอร์ ได้ดีอย่างสมบูรณ์ 290 00:13:36,930 --> 00:13:39,090 แต่คุณขอ index.html 291 00:13:39,090 --> 00:13:42,000 ที่คุณร้องขอ shuttle.js และ service.js 292 00:13:42,000 --> 00:13:44,580 และมันก็สามารถที่จะประสบความสำเร็จกลับมา ให้คุณทุกสิ่งที่ - 293 00:13:44,580 --> 00:13:44,980 200 294 00:13:44,980 --> 00:13:45,680 ตกลง 295 00:13:45,680 --> 00:13:49,330 ก็ต่อเมื่อเบราว์เซอร์ของคุณพยายามที่จะ ตีความรหัส JavaScript ที่ 296 00:13:49,330 --> 00:13:51,370 ก็เหมือนรอนี้ไม่ได้ ข้อผิดพลาดที่ถูกต้อง JavaScript 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 คำถามใด ๆ อื่น ๆ 299 00:13:58,210 --> 00:14:00,750 ขวาทั้งหมด 300 00:14:00,750 --> 00:14:04,120 >> DAVID เจลัน: ดังนั้นต่อไป ขึ้นเป็นจำนวน 11 301 00:14:04,120 --> 00:14:07,610 11 และเป็นที่น่ากลัวที่สุด สำหรับจำนวนมากของผู้คน 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 ดังนั้นสิ่งที่สำคัญที่สุดที่จะต้องทราบที่นี่ คือว่าเรื่องนี้เป็นจริงเกี่ยวกับ 304 00:14:18,570 --> 00:14:19,840 รายการที่เชื่อมโยงทวีคูณ 305 00:14:19,840 --> 00:14:23,160 แต่นี้ไม่ได้เช่นเดียวกับปีที่แล้ว ปัญหารายการที่เชื่อมโยงทวีคูณ 306 00:14:23,160 --> 00:14:27,170 ซึ่งไม่ได้ให้คุณคำเตือนว่า รายการได้ในความเป็นจริงเป็นไม่ได้คัดแยก 307 00:14:27,170 --> 00:14:29,640 >> ดังนั้นความจริงที่ว่ารายชื่อที่ถูกคัดเลือก และความจริงที่ว่าคำว่า 308 00:14:29,640 --> 00:14:32,930 ขีดเส้นใต้มีความหมายในการถ่ายทอด ว่านี้เป็นจริงทำให้เข้าใจง่าย 309 00:14:32,930 --> 00:14:35,430 ของสิ่งที่เป็นอย่างอื่นจะได้รับ ปัญหาความท้าทายมากขึ้น 310 00:14:35,430 --> 00:14:36,600 และหนึ่งอีกต่อไป 311 00:14:36,600 --> 00:14:40,760 ดังนั้นข้อผิดพลาดทั่วไปที่นี่ก็จะได้ใส่ การแก้ปัญหาของปีที่แล้วกับคนที่คุณ 312 00:14:40,760 --> 00:14:45,580 วิทยุติดตามตัวและจากนั้นเพียงสุ่มสี่สุ่มห้าคัดลอก ลงเป็นคำตอบที่ถูกต้อง 313 00:14:45,580 --> 00:14:48,520 ตอบคำถามที่แตกต่างกัน ที่คล้ายกันในจิตวิญญาณ 314 00:14:48,520 --> 00:14:51,340 แต่รายละเอียดอื่นที่นี่ สรุปได้ดังนี้ 315 00:14:51,340 --> 00:14:55,200 >> ดังนั้นหนึ่งเราได้โหนดและประกาศ ที่กำหนดไว้ในทางปกติท​​ี่นี่ 316 00:14:55,200 --> 00:14:59,230 แล้วเรากำหนดไว้เป็นรายชื่อของทั่วโลก ตัวชี้เริ่มต้นเป็นโมฆะ 317 00:14:59,230 --> 00:15:02,150 จากนั้นเห็นได้ชัดว่ามีสองฟังก์ชั่น เรามีต้นแบบที่นี่แทรก 318 00:15:02,150 --> 00:15:03,240 และลบ 319 00:15:03,240 --> 00:15:06,600 และแล้วเราก็มีรหัสตัวอย่างบางส่วนที่นี่ ในการทำพวงของการแทรก 320 00:15:06,600 --> 00:15:09,930 แล้วเราขอให้คุณให้เสร็จสมบูรณ์ การดำเนินการแทรกด้านล่างดังกล่าว 321 00:15:09,930 --> 00:15:14,380 วิธีการที่จะแทรก n ลงในรายการ ในเวลาคงยังขีดเส้นใต้ 322 00:15:14,380 --> 00:15:15,730 แม้ว่าในปัจจุบันแล้ว 323 00:15:15,730 --> 00:15:20,600 >> ดังนั้นความงามของความสามารถในการแทรก ในเวลาคงที่ก็คือว่ามันมีความหมาย 324 00:15:20,600 --> 00:15:23,060 ที่คุณต้องใส่ โหนดใหม่ที่ไหน 325 00:15:23,060 --> 00:15:23,690 ลงในหน้า 326 00:15:23,690 --> 00:15:27,760 ดังนั้นจึงช่วยลดความขอบคุณอย่างน้อย หนึ่งในกรณีที่จำเป็นต้องใช้ในการ 327 00:15:27,760 --> 00:15:30,520 สายมากยิ่งขึ้นของรหัสเช่นนั้นได้ ปีที่ผ่านมาและแม้ในชั้นเรียนเมื่อเรา 328 00:15:30,520 --> 00:15:34,040 พูดคุยกันผ่านชนิดของสิ่งนี้ กับมนุษย์และมีบางส่วน 329 00:15:34,040 --> 00:15:35,250 รหัสเทียมวาจา 330 00:15:35,250 --> 00:15:39,190 ดังนั้นในการแก้ปัญหาที่นี่ให้ของข้าม ที่เพียงแค่มีภาพที่ 331 00:15:39,190 --> 00:15:40,480 หน้าจอ 332 00:15:40,480 --> 00:15:42,230 >> ขอให้สังเกตว่าเรากำลังทำดังต่อไปนี้ 333 00:15:42,230 --> 00:15:45,140 และยังสังเกตเห็นความเรียบง่ายอื่น ๆ ก็คือการที่แม้ว่าจะเป็น 334 00:15:45,140 --> 00:15:48,280 อยู่แล้วดังนั้นนี้หมายความว่าแม้ว่า จำนวนมีอยู่แล้วคุณสามารถ 335 00:15:48,280 --> 00:15:50,280 เพียงสุ่มสี่สุ่มห้าแทรกอีก สำเนาของมัน 336 00:15:50,280 --> 00:15:52,560 และนั่นก็หมายถึงการเป็น ความเรียบง่ายเพื่อให้คุณสามารถ 337 00:15:52,560 --> 00:15:54,940 มุ่งเน้นจริงๆบางมากขึ้น ส่วนที่น่าสนใจและสติปัญญา 338 00:15:54,940 --> 00:15:58,090 ไม่ได้เป็นเพียงบางข้อผิดพลาดการตรวจสอบเพิ่มเติม กำหนดเวลาที่ จำกัด 339 00:15:58,090 --> 00:16:02,880 >> ดังนั้นในการแก้ปัญหาตัวอย่างนี้เราจัดสรร ตัวชี้ที่มือซ้าย 340 00:16:02,880 --> 00:16:04,510 อีกด้านหนึ่งที่นี่เพื่อโหนด 341 00:16:04,510 --> 00:16:07,190 ตอนนี้ตระหนักถึงตัวชี้ว่าเป็น ร็อบกล่าวว่าเป็นเพียง 32 บิต 342 00:16:07,190 --> 00:16:09,060 และมันก็ไม่ได้มีจริง ที่อยู่จนกว่าคุณจะ 343 00:16:09,060 --> 00:16:09,970 กำหนดที่อยู่ 344 00:16:09,970 --> 00:16:13,220 และเราจะทำอย่างนั้นอยู่ทางด้านขวามือ ด้านผ่าน malloc 345 00:16:13,220 --> 00:16:16,550 เช่นพลเมืองดีเราตรวจสอบว่า malloc ไม่ได้ในความเป็นจริง null เพื่อให้ 346 00:16:16,550 --> 00:16:18,690 เราไม่ได้ตั้งใจสร้าง segfault ที่นี่ 347 00:16:18,690 --> 00:16:22,840 และเวลาที่คุณใช้ malloc ในชีวิตของคุณ ควรได้รับการตรวจสอบ null เกรงว่า 348 00:16:22,840 --> 00:16:24,090 คุณมีปัญหาที่ละเอียดอ่อน 349 00:16:24,090 --> 00:16:28,460 >> จากนั้นเราก็เริ่มต้นโมฆะว่า n กำหนดและก่อนหน้านี้และต่อไป 350 00:16:28,460 --> 00:16:32,450 และในกรณีนี้ที่นี่ฉันเริ่มต้นได้ ก่อนหน้านี้เป็นโมฆะเพราะใหม่นี้ 351 00:16:32,450 --> 00:16:34,780 โหนดเป็นไปได้ใหม่ จุดเริ่มต้นของรายการของฉัน 352 00:16:34,780 --> 00:16:37,050 ดังนั้นจึงเป็นไปได้ ก่อนที่จะไม่มีอะไร 353 00:16:37,050 --> 00:16:42,010 และผมต้องการที่จะเป็นหลักผนวก รายการที่มีอยู่ไปยังโหนดใหม่โดย 354 00:16:42,010 --> 00:16:44,700 การตั้งค่าต่อไปเท่ากันในรายการตัวเอง 355 00:16:44,700 --> 00:16:47,120 แต่ฉันไม่ได้ทำเพียง แต่ 356 00:16:47,120 --> 00:16:51,780 ดังนั้นหากรายชื่อของตัวเองอยู่แล้ว และมีอย่างน้อยหนึ่งโหนด 357 00:16:51,780 --> 00:16:57,070 แล้วในสถานที่ที่ว่านี้คือรายการ ที่นี่และฉันแทรกโหนดใหม่ที่นี่ฉัน 358 00:16:57,070 --> 00:17:01,840 ต้องให้แน่ใจว่าโหนดอดีตของฉัน ชี้ไปข้างหลังไปยังโหนดใหม่ของฉัน 359 00:17:01,840 --> 00:17:04,260 เพราะเป็นอีกครั้ง รายการที่เชื่อมโยงทวีคูณ 360 00:17:04,260 --> 00:17:05,460 >> ดังนั้นเราจึงดำเนินการตรวจสอบสุขภาพจิตดี 361 00:17:05,460 --> 00:17:10,109 ถ้ารายการไม่ได้เป็นโมฆะถ้ามีอยู่แล้ว หนึ่งหรือมากกว่าหนึ่งโหนดมีแล้ว 362 00:17:10,109 --> 00:17:12,470 เพิ่มที่กลับมาอ้างอิงเพื่อที่จะพูด 363 00:17:12,470 --> 00:17:15,420 และแล้วสิ่งสุดท้ายที่เราต้องการ ทำคือการปรับปรุงจริงทั่วโลก 364 00:17:15,420 --> 00:17:20,329 รายการตัวแปรตัวเองไปยังจุดที่ ที่โหนดใหม่ 365 00:17:20,329 --> 00:17:21,790 ใช่ 366 00:17:21,790 --> 00:17:26,579 >> ผู้ชม: ในตัวชี้ลูกศร [ไม่ได้ยิน] เท่ากับโมฆะไม่ว่า 367 00:17:26,579 --> 00:17:30,420 จัดการกับรายการเพราะ รายการเป็นโมฆะ? 368 00:17:30,420 --> 00:17:30,596 >> DAVID เจลัน: Nope 369 00:17:30,596 --> 00:17:34,500 ที่เป็นเพียงฉันเป็นเชิงรุก ระวังในการที่ว่านี้เป็นของฉัน 370 00:17:34,500 --> 00:17:38,730 รายการเดิมที่มีบางทีบางโหนดเพิ่มเติม กว่าที่นี่และฉันใส่ฉัน 371 00:17:38,730 --> 00:17:42,380 โหนดใหม่กว่าที่นี่มีจะ จะไม่มีอะไรที่นี่ 372 00:17:42,380 --> 00:17:44,720 และฉันต้องการที่จะจับความคิดที่ว่า โดยการตั้งค่าก่อนหน้านี้ 373 00:17:44,720 --> 00:17:47,740 null ที่โหนดใหม่ 374 00:17:47,740 --> 00:17:51,410 และสันนิษฐานว่าถ้ารหัสของฉันถูกต้อง และไม่มีทางอื่นที่จะใส่เป็น 375 00:17:51,410 --> 00:17:54,970 โหนดอื่น ๆ กว่าฟังก์ชั่นนี้ สันนิษฐานว่าแม้ว่ารายชื่อที่มีอยู่แล้ว 376 00:17:54,970 --> 00:18:00,090 หนึ่งหรือมากกว่าหนึ่งโหนดในนั้นสันนิษฐานว่า รายการโหนดแรกจะมี 377 00:18:00,090 --> 00:18:02,750 ตัวชี้ก่อนหน้านี้ของตัวเอง null 378 00:18:02,750 --> 00:18:03,550 >> ผู้ชม: และเพียงแค่ติดตาม 379 00:18:03,550 --> 00:18:08,139 เหตุผลที่คุณย้ายตัวชี้เท่ากับต่อไป รายการที่คุณกำลังทำชี้ 380 00:18:08,139 --> 00:18:13,579 ก่อนที่รายการในการที่จะชี้ ต่อไปผมคิดว่า - 381 00:18:13,579 --> 00:18:14,980 ฉันห้าม - 382 00:18:14,980 --> 00:18:15,450 เพียงแค่แสดงรายการ? 383 00:18:15,450 --> 00:18:16,400 >> DAVID เจลัน: แน่นอน 384 00:18:16,400 --> 00:18:19,400 และเพื่อให้เป็นจริงพิจารณาสองกรณี ที่นี่จริงๆแม้ว่า 385 00:18:19,400 --> 00:18:22,070 เพื่อที่เราจะคิดว่าพวกเขาไม่ได้เป็น มากเช่นเดียวกับรหัส 386 00:18:22,070 --> 00:18:26,250 แต่ในระดับสูงถ้านี้แสดงให้เห็นถึง รายการและนี้เป็น 32 บิต 387 00:18:26,250 --> 00:18:29,560 ชี้สถานการณ์ที่ง่ายที่สุดคือ ว่านี้เป็นโมฆะโดยปริยาย 388 00:18:29,560 --> 00:18:33,010 และคิดว่าฉันต้องการแทรก หมายเลข 50 เป็นหมายเลขแรก 389 00:18:33,010 --> 00:18:37,640 ดังนั้นฉันจะไปข้างหน้าและจัดสรร โหนดซึ่งจะประกอบด้วย 390 00:18:37,640 --> 00:18:38,770 สามเขต - 391 00:18:38,770 --> 00:18:42,070 n, ก่อนหน้านี้และต่อไป 392 00:18:42,070 --> 00:18:44,580 >> ฉันจะใส่หมายเลข 50 ที่นี่เพราะนี้จะเป็น n 393 00:18:44,580 --> 00:18:46,130 นี้จะเป็นอย่างไรต่อไป 394 00:18:46,130 --> 00:18:48,530 และจะเป็นหน้าที่ 395 00:18:48,530 --> 00:18:50,910 และอื่น ๆ สิ่งที่ฉันจะทำอย่างไรในกรณีนี้ 396 00:18:50,910 --> 00:18:53,900 ดีฉันได้ทำเพียงแค่ 1 สายที่นี่ 397 00:18:53,900 --> 00:18:55,400 ตัวชี้ n รับ n 398 00:18:55,400 --> 00:18:57,740 แล้วที่ฉันพูดก่อนหน้านี้ ควรจะได้รับโมฆะ 399 00:18:57,740 --> 00:18:59,470 ดังนั้นนี้จะเป็นโมฆะ 400 00:18:59,470 --> 00:19:01,365 แล้วฉันจะกล่าวต่อไป จะได้รับรายชื่อ 401 00:19:01,365 --> 00:19:05,150 >> และนี้ก็ทำงานออกมาได้ดี 402 00:19:05,150 --> 00:19:06,500 นี้เป็นโมฆะ 403 00:19:06,500 --> 00:19:10,620 และอื่น ๆ ที่ฉันพูดโหนดใหม่ต่อไป ควรที่จะได้รับสิ่งนี้ 404 00:19:10,620 --> 00:19:12,570 ดังนั้นที่ทำให้ null อื่นมี 405 00:19:12,570 --> 00:19:14,510 และแล้วสิ่งที่ผ่านมา ฉันจะได้รับการตรวจสอบที่นี่ 406 00:19:14,510 --> 00:19:17,870 ถ้ารายการไม่เท่ากับโมฆะ แต่มัน เท่ากับโมฆะดังนั้นเราจึงข้าม 407 00:19:17,870 --> 00:19:18,470 โดยสิ้นเชิง 408 00:19:18,470 --> 00:19:23,520 และอื่น ๆ ทั้งหมดที่ฉันทำต่อไปคือรายการที่ได้รับ ตัวชี้ซึ่งจะส่งผลให้วาดรูปใน 409 00:19:23,520 --> 00:19:25,570 ภาพเช่นนั้น 410 00:19:25,570 --> 00:19:26,620 เพื่อให้สถานการณ์อย่างใดอย่างหนึ่ง 411 00:19:26,620 --> 00:19:30,490 >> และคนที่คุณถูกถามเกี่ยวกับ โดยเฉพาะเป็นสถานการณ์เช่นนี้ 412 00:19:30,490 --> 00:19:33,190 ที่เรามีอยู่แล้วรายการหนึ่งโหนด 413 00:19:33,190 --> 00:19:36,240 และถ้าเราไปกลับขึ้นไปในต้นฉบับ งบปัญหาต่อไปที่เราจะ 414 00:19:36,240 --> 00:19:39,320 พูดแทรกเป็น 34 เพียงเพื่อ เพราะการสนทนา 415 00:19:39,320 --> 00:19:46,210 ดังนั้นฉันจะเพียงแค่อำนวยความสะดวก วาดว่ากว่าที่นี่ 416 00:19:46,210 --> 00:19:47,540 ฉันได้ malloced เพียง 417 00:19:47,540 --> 00:19:49,310 สมมติว่าผมตรวจสอบโมฆะ 418 00:19:49,310 --> 00:19:51,870 >> ตอนนี้ผมกำลังจะเริ่มต้น n จะเป็น 34 419 00:19:51,870 --> 00:19:53,040 และนี้จะเป็น n 420 00:19:53,040 --> 00:19:54,670 นี้จะเป็นอย่างไรต่อไป 421 00:19:54,670 --> 00:19:57,100 และจะเป็นหน้าที่ 422 00:19:57,100 --> 00:19:59,370 ขอให้แน่ใจว่าฉันไม่ได้ ได้รับนี้ไปข้างหลัง 423 00:19:59,370 --> 00:20:01,110 แล้วมาก่อน ในความหมาย 424 00:20:01,110 --> 00:20:03,070 ให้ฉันแก้ไขปัญหานี้ 425 00:20:03,070 --> 00:20:04,410 นี่คือหน้าที่ 426 00:20:04,410 --> 00:20:05,780 ต่อไปนี้เป็น 427 00:20:05,780 --> 00:20:08,620 ถึงแม้ว่าเหล่านี้เป็นเหมือนกัน ขอให้มันสอดคล้อง 428 00:20:08,620 --> 00:20:09,450 >> ก่อน 429 00:20:09,450 --> 00:20:11,030 ต่อไปนี้เป็น 430 00:20:11,030 --> 00:20:16,310 ดังนั้นผมจึงได้ malloced เพียงบันทึกของฉันตรวจสอบ โมฆะได้รับมอบหมายให้เป็น 34 โหนด 431 00:20:16,310 --> 00:20:17,570 ที่ผ่านมาได้รับโมฆะ 432 00:20:17,570 --> 00:20:19,480 เพื่อที่จะให้ผมว่า 433 00:20:19,480 --> 00:20:21,010 ถัดไปจะได้รับรายชื่อ 434 00:20:21,010 --> 00:20:22,370 ดังนั้นรายการนี​​้ 435 00:20:22,370 --> 00:20:26,520 ดังนั้นนี้เป็นเหมือนกันตอนนี้เป็นภาพวาดนี้ ลูกศรเพื่อให้พวกเขาชี้ไปที่หนึ่ง 436 00:20:26,520 --> 00:20:27,940 ในเดียวกัน 437 00:20:27,940 --> 00:20:30,400 และแล้วฉันตรวจสอบว่ารายการ ไม่เท่ากับโมฆะ 438 00:20:30,400 --> 00:20:31,740 และยังไม่ได้เวลานี้ 439 00:20:31,740 --> 00:20:35,580 แล้วฉันจะทำรายการ ได้รับหน้าที่ตัวชี้ 440 00:20:35,580 --> 00:20:39,700 >> ดังนั้นรายการก่อนหน้านี้ได้รับ PTR 441 00:20:39,700 --> 00:20:44,300 ดังนั้นนี้มีผลกระทบของการวาง ลูกศรแบบกราฟิกที่นี่ 442 00:20:44,300 --> 00:20:46,930 และที่ได้รับเพียงเล็กน้อย หยักเส้น 443 00:20:46,930 --> 00:20:50,780 และแล้วในที่สุดผมปรับปรุง รายการที่จะชี้ไปที่ตัวชี้ 444 00:20:50,780 --> 00:20:55,560 ดังนั้นตอนนี้ชี้ไปที่ผู้ชายคนนี้ 445 00:20:55,560 --> 00:20:57,170 และตอนนี้ขอทำอย่างรวดเร็ว การตรวจสอบสุขภาพจิตดี 446 00:20:57,170 --> 00:20:59,470 >> นี่คือรายการที่ซึ่งเป็น ตัวแปรทั่วโลก 447 00:20:59,470 --> 00:21:02,850 โหนดแรกเป็นจริง 34 เพราะ ฉันต่อไปนี้ลูกศรที่ 448 00:21:02,850 --> 00:21:05,210 และที่ถูกต้องเพราะผมต้องการที่จะ แทรกที่จุดเริ่มต้นของรายการ 449 00:21:05,210 --> 00:21:06,070 โหนดใหม่ทั้งหมด 450 00:21:06,070 --> 00:21:08,860 สนามต่อไปของเขาทำให้ผมผู้ชายคนนี้ 451 00:21:08,860 --> 00:21:10,710 ถ้าผมให้ไปผมตีต่อไปเป็นโมฆะ 452 00:21:10,710 --> 00:21:11,760 จึงไม่มีรายชื่อเพิ่มเติม 453 00:21:11,760 --> 00:21:14,460 ถ้าผมตีก่อนหน้านี้ฉันได้รับ กลับที่ผมคาดว่า 454 00:21:14,460 --> 00:21:16,435 >> ดังนั้นยังคงมีตัวชี้ไม่กี่ เห็นได้ชัดว่าจะจัดการกับ 455 00:21:16,435 --> 00:21:19,870 แต่ความจริงที่คุณบอกให้ทำ ในเวลานี้คงหมายความว่าคุณจะ 456 00:21:19,870 --> 00:21:22,910 มีจำนวน จำกัด ของสิ่งที่ คุณได้รับอนุญาตให้ทำ 457 00:21:22,910 --> 00:21:24,290 และสิ่งที่เป็นจำนวนที่ 458 00:21:24,290 --> 00:21:25,185 มันอาจจะเป็นหนึ่งในขั้นตอนที่ 459 00:21:25,185 --> 00:21:25,700 มันอาจจะสอง 460 00:21:25,700 --> 00:21:26,820 มันอาจจะมีขั้นตอน 1,000 461 00:21:26,820 --> 00:21:30,500 แต่มันก็แน่นอนซึ่งหมายความว่าคุณไม่สามารถ มีชนิดของการวนลูปใด ๆ ที่เกิดขึ้น 462 00:21:30,500 --> 00:21:32,010 ที่นี่ไม่มีการเรียกซ้ำลูปไม่มี 463 00:21:32,010 --> 00:21:37,390 มันเพิ่งจะเป็นสายตายตัว ของรหัสในขณะที่เรามีในตัวอย่างนี้ 464 00:21:37,390 --> 00:21:42,330 >> ดังนั้นปัญหาที่เกิดขึ้นต่อไป 12 ขอให้เรา เสร็จสิ้นการดำเนินการลบ 465 00:21:42,330 --> 00:21:46,740 ด้านล่างในลักษณะที่จะเอา n จากรายการในเวลาเชิงเส้น 466 00:21:46,740 --> 00:21:48,740 เพื่อให้คุณมีน้อยมาก ห้องเลื้อยในขณะนี้ 467 00:21:48,740 --> 00:21:52,380 คุณอาจจะสมมติ n ว่าถ้าปัจจุบัน ในรายการจะนำเสนอ 468 00:21:52,380 --> 00:21:53,340 ไม่มีมากกว่าหนึ่งครั้ง 469 00:21:53,340 --> 00:21:56,770 และนั่นก็คือค​​วามหมายที่จะทดสอบตาม ลดความซับซ้อนของสมมติฐานดังนั้น 470 00:21:56,770 --> 00:21:59,780 ว่าถ้าคุณพบว่าจำนวน 50 อยู่ที่ไหนสักแห่ง ในรายการที่คุณทำไม่ได้ยัง 471 00:21:59,780 --> 00:22:02,890 ต้องกังวลเกี่ยวกับการดำเนินการต่อไป ย้ำกำลังมองหาทุกที่เป็นไปได้ 472 00:22:02,890 --> 00:22:06,990 สำเนาของ 50 ซึ่งก็จะตกมาอยู่กับ เป็น minutia ในเวลาที่ จำกัด บางอย่าง 473 00:22:06,990 --> 00:22:10,460 >> ดังนั้นด้วยลบหนึ่งนี้เป็นมั่นเหมาะ ท้าทายมากขึ้นและมากขึ้น 474 00:22:10,460 --> 00:22:11,640 รหัสที่จะเขียน 475 00:22:11,640 --> 00:22:14,990 แต่ได้อย่างรวดเร็วก่อนตรงไปตรงมาก็อาจจะ มีลักษณะบางอย่างครอบงำและไม่ชอบ 476 00:22:14,990 --> 00:22:17,060 มีวิธีที่คุณอาจจะมีไม่ได้ ขึ้นมาในแบบทดสอบ 477 00:22:17,060 --> 00:22:22,450 แต่ถ้าเรามุ่งเน้นไปที่แต่ละขั้นตอนที่ หวังว่ามันจะทันที 478 00:22:22,450 --> 00:22:26,060 หยุดคุณว่าแต่ละบุคคลเหล่านี้ ขั้นตอนที่จะทำให้ความรู้สึกที่เห็นได้ชัด 479 00:22:26,060 --> 00:22:27,080 มองย้อนกลับไป 480 00:22:27,080 --> 00:22:28,200 ดังนั้นลองมาดู 481 00:22:28,200 --> 00:22:32,570 >> ดังนั้นก่อนที่เราจะเริ่มต้นตัวชี้ จะแสดงตัวเอง 482 00:22:32,570 --> 00:22:36,040 เพราะฉันต้องการเวลาเชิงเส้นที่หมายถึง ฉันจะมีห่วงบางอย่างที่ 483 00:22:36,040 --> 00:22:39,730 และเป็นวิธีการทั่วไปที่จะย้ำกว่า โหนดในโครงสร้างรายการหรือชนิดใด 484 00:22:39,730 --> 00:22:43,860 โครงสร้างซ้ำคือการใช้ ตัวชี้ไปยังด้านหน้าของข้อมูล 485 00:22:43,860 --> 00:22:46,990 โครงสร้างและจากนั้นเพียงแค่เริ่มต้นการปรับปรุง มันและเดินไปทางของคุณ 486 00:22:46,990 --> 00:22:48,650 ผ่านโครงสร้างข้อมูล 487 00:22:48,650 --> 00:22:50,040 ดังนั้นฉันจะทำตรงนั้น 488 00:22:50,040 --> 00:22:54,260 >> ในขณะที่ตัวชี้ตัวแปรชั่วคราวของฉัน ไม่เท่ากับโมฆะขอ 489 00:22:54,260 --> 00:22:55,660 ไปข้างหน้าและตรวจสอบ 490 00:22:55,660 --> 00:22:56,910 ฉันได้รับโชคดี 491 00:22:56,910 --> 00:23:01,740 เป็นเขตที่ n ในโหนดฉันในปัจจุบัน กำลังมองหาที่เท่ากับ 492 00:23:01,740 --> 00:23:03,380 จำนวนฉันกำลังมองหา 493 00:23:03,380 --> 00:23:05,410 และถ้าอย่างนั้นเรามาทำอะไรบางอย่าง 494 00:23:05,410 --> 00:23:10,020 ตอนนี้แจ้งให้ทราบนี้ถ้าเงื่อนไข ล้อมรอบทั้ง 495 00:23:10,020 --> 00:23:11,520 บรรทัดต่อไปนี้ของรหัส 496 00:23:11,520 --> 00:23:14,610 นี่คือสิ่งเดียวที่ฉันดูแลเกี่ยวกับ - การหาตัวเลขที่อยู่ในคำถาม 497 00:23:14,610 --> 00:23:18,010 จึงไม่มีอะไรที่ง่าย สิ่งที่แนวคิดนิด ๆ หน่อย ๆ 498 00:23:18,010 --> 00:23:22,040 >> แต่ตอนนี้ฉันรู้และคุณอาจจะมี เพียง แต่ตระหนักในเรื่องนี้หลังจากที่คิด 499 00:23:22,040 --> 00:23:24,720 มันผ่านบิตมี จริงทั้งสองกรณีที่นี่ 500 00:23:24,720 --> 00:23:28,060 หนึ่งคือการที่โหนดที่ จุดเริ่มต้นของรายการซึ่งเป็น 501 00:23:28,060 --> 00:23:31,040 ที่น่ารำคาญเล็ก ๆ น้อย ๆ เพราะนั่นคือ กรณีพิเศษเพราะคุณต้องจัดการ 502 00:23:31,040 --> 00:23:33,340 ด้วยสิ่งนี้ซึ่ง เป็นความผิดปกติเพียง 503 00:23:33,340 --> 00:23:35,720 ทุกคนในรายการ มันเป็นสิ่งเดียวกัน 504 00:23:35,720 --> 00:23:38,050 มีโหนดก่อนหน้านี้และต่อไปเป็น โหนดโหนดก่อนหน้าโหนดถั​​ดไป 505 00:23:38,050 --> 00:23:40,940 แต่ผู้ชายคนนี้เป็นพิเศษเล็ก ๆ น้อย ๆ ถ้าเขาที่จุดเริ่มต้น 506 00:23:40,940 --> 00:23:48,710 >> ดังนั้นถ้าตัวชี้เท่ากับรายการ ตัวเองดังนั้นถ้าฉันที่จุดเริ่มต้นของ 507 00:23:48,710 --> 00:23:53,960 รายการและฉันได้พบ n ฉันต้องการ ที่จะทำสองสิ่ง 508 00:23:53,960 --> 00:23:59,230 หนึ่งผมต้องเปลี่ยนรายการ ชี้ไปที่เขตข้อมูลถัดไป 50 509 00:23:59,230 --> 00:24:01,270 ดังนั้นคิดว่าฉันกำลังพยายาม ในการลบ 34 510 00:24:01,270 --> 00:24:03,560 ดังนั้นผู้ชายคนนี้ที่ได้ไป ไปในเวลาเพียงสักครู่ 511 00:24:03,560 --> 00:24:07,210 >> ดังนั้นฉันจะบอกว่ารายการ ได้รับตัวชี้ต่อไป 512 00:24:07,210 --> 00:24:08,570 ดีนี้เป็นตัวชี้ 513 00:24:08,570 --> 00:24:10,360 ถัดไปจะชี้ไปที่นี่ 514 00:24:10,360 --> 00:24:17,470 ดังนั้นนี้มีการเปลี่ยนแปลงลูกศรขวานี้ ตอนนี้ให้ชี้ไปที่ผู้ชายคนนี้ที่นี่ 515 00:24:17,470 --> 00:24:19,580 ตอนนี้จำได้ว่าเรามี ตัวแปรชั่วคราว 516 00:24:19,580 --> 00:24:23,520 ดังนั้นเราจึงยังไม่ได้กำพร้าโหนดใด ๆ เพราะผมยังมีผู้ชายคนนี้ของฉัน 517 00:24:23,520 --> 00:24:25,010 การดำเนินการลบ 518 00:24:25,010 --> 00:24:29,600 ดังนั้นตอนนี้รายการถ้าตัวเองไม่ได้เป็นโมฆะ ฉันต้องการที่จะแก้ไขสิ่งเล็ก ๆ น้อย ๆ 519 00:24:29,600 --> 00:24:32,690 >> ฉันจำเป็นต้องตอนนี้ให้แน่ใจว่าลูกศรนี้ ซึ่งก่อนหน้านี้ชี้ 520 00:24:32,690 --> 00:24:36,830 50-34 นี้ได้มีที่จะไปออกไป เพราะถ้าฉันพยายามที่จะกำจัด 521 00:24:36,830 --> 00:24:41,910 ของ 34, 50 มีดีกว่าไม่รักษาใด ๆ ชนิดของการอ้างอิงถึงกลับเป็น 522 00:24:41,910 --> 00:24:42,820 ลูกศรชี้ให้เห็น 523 00:24:42,820 --> 00:24:44,820 ดังนั้นผมเพิ่งได้สายนี้ 524 00:24:44,820 --> 00:24:46,520 ดังนั้นแล้วฉันทำ 525 00:24:46,520 --> 00:24:48,040 กรณีที่เป็นจริงง่ายสวย 526 00:24:48,040 --> 00:24:51,010 ตัดออกจากศีรษะของรายการ ค่อนข้างตรงไปตรงมา 527 00:24:51,010 --> 00:24:52,980 >> แต่น่าเสียดายที่มีนี้ บล็อกที่น่ารำคาญอื่น 528 00:24:52,980 --> 00:24:56,170 ดังนั้นตอนนี้ฉันมีที่จะต้องพิจารณากรณีที่ ที่มีบางสิ่งบางอย่างที่อยู่ตรงกลาง 529 00:24:56,170 --> 00:24:59,880 แต่มันก็ไม่น่ากลัวเกินไปยกเว้น สำหรับรูปแบบเช่นนี้ 530 00:24:59,880 --> 00:25:03,080 ดังนั้นถ้าผมไม่ได้อยู่ที่จุดเริ่มต้นของ รายการผมบางกลาง 531 00:25:03,080 --> 00:25:08,160 และบรรทัดนี้ที่นี่บอกว่าเริ่มต้นที่ ที่ใดโหนดที่คุณอยู่ที่ 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 ไปที่เขตข้อมูลถัดไปโหนดที่ผ่านมา และชี้ว่าการที่ตัวชี้ 534 00:25:18,550 --> 00:25:20,390 >> ลองทำเช่นนี้ให้วาดรูป 535 00:25:20,390 --> 00:25:21,640 ที่ได้รับความซับซ้อน 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 ดังนั้นถ้าผมมีเขตข้อมูลก่อนหน้านี้ที่นี่ - ให้ทำเช่นนี้ - สาขาต่อไปที่นี่ 538 00:25:37,990 --> 00:25:41,200 ฉันจะลดความซับซ้อนของตัวชี้ของฉันมากกว่า กว่าวาดทั้งกลุ่ม 539 00:25:41,200 --> 00:25:45,710 สิ่งที่กลับมาครอบคลุม กันและกัน 540 00:25:45,710 --> 00:25:50,870 และตอนนี้ขอเพียงแค่บอกว่านี่คือ 1, 2, 3 เพื่อประโยชน์ในการอภิปรายแม้ 541 00:25:50,870 --> 00:25:53,410 แต่ที่ไม่สอดคล้องกับ ปัญหาในคำถาม 542 00:25:53,410 --> 00:25:55,900 >> ดังนั้นนี่คือรายการที่เชื่อมโยงของฉัน 543 00:25:55,900 --> 00:25:59,300 ฉันพยายามที่จะเอาสองในครั้งนี้ รุ่นเฉพาะของเรื่อง 544 00:25:59,300 --> 00:26:01,960 ดังนั้นผมจึงได้ปรับปรุงตัวชี้ไปยัง จะชี้ไปที่ผู้ชายคนนี้ 545 00:26:01,960 --> 00:26:03,315 ดังนั้นนี่คือ PTR 546 00:26:03,315 --> 00:26:04,530 เขาชี้ไปที่นี่ 547 00:26:04,530 --> 00:26:07,170 นี้เป็นรายการที่มีอยู่ ทั่วโลกก่อนที่จะเป็น 548 00:26:07,170 --> 00:26:09,200 และเขาก็ชี้ไปที่นี่ไม่ว่าสิ่งที่ 549 00:26:09,200 --> 00:26:10,800 และตอนนี้ฉันพยายามที่จะเอาสอง 550 00:26:10,800 --> 00:26:13,850 >> ดังนั้นถ้าตัวชี้เป็นชี้ที่นี่ฉัน จะตามเห็นได้ชัดว่า 551 00:26:13,850 --> 00:26:17,110 ตัวชี้ก่อนหน้านี้ที่ทำให้ฉันที่ 1 552 00:26:17,110 --> 00:26:22,290 แล้วฉันจะบอกว่าต่อไป สนามที่นำฉันไปนี้ 553 00:26:22,290 --> 00:26:25,410 กล่องที่นี่จะไป ชี้เท่ากันต่อไป 554 00:26:25,410 --> 00:26:28,400 ดังนั้นถ้าตัวชี้นี้เป็นต่อไป 555 00:26:28,400 --> 00:26:31,840 นั่นหมายความว่าลูกศรนี้ความต้องการ ให้ชี้ไปที่ผู้ชายคนนี้ 556 00:26:31,840 --> 00:26:35,140 >> ดังนั้นสิ่งที่บรรทัดของรหัสที่มีเพียงแค่ ทำคือนิด ๆ หน่อย ๆ ของเรื่องนี้ 557 00:26:35,140 --> 00:26:37,500 และตอนนี้กำลังมองหาเช่น ขั้นตอนในทิศทางที่ถูกต้อง 558 00:26:37,500 --> 00:26:41,390 เราต้องการที่จะเป็นหลักตัดด้วยขากรรไกร 2 ของกลาง 1 และ 3 559 00:26:41,390 --> 00:26:44,400 ดังนั้นมันทำให้รู้สึกว่าเราต้องการที่จะ เส้นทางนี้ชี้รอบ 560 00:26:44,400 --> 00:26:50,400 ดังนั้นบรรทัดถัดไปนี้จะตรวจสอบว่าตัวชี้ ต่อไปคือไม่เป็นโมฆะมี 561 00:26:50,400 --> 00:26:54,200 แน่นอนคนที่ไปทางขวาของ 2, นั่นหมายความว่าเรายังต้องทำ 562 00:26:54,200 --> 00:26:55,850 บุคคลที่ไม่สำคัญน้อยที่นี่ 563 00:26:55,850 --> 00:27:00,590 >> ดังนั้นตอนนี้ผมต้องไปตามตัวชี้นี้ และปรับปรุงตัวชี้ก่อนหน้านี้ 564 00:27:00,590 --> 00:27:05,410 คนที่แต่งตัวประหลาดที่จะทำนิด ๆ หน่อย ๆ นี้ ที่นี่แก้ปัญหาจุดที่นี่ 565 00:27:05,410 --> 00:27:07,100 และตอนนี้มองเห็นนี้เป็นสิ่งที่ดี 566 00:27:07,100 --> 00:27:11,930 มันยุ่งน​​้อยในการที่มี หนึ่งชี้ไปที่ 2 อีกต่อไป 567 00:27:11,930 --> 00:27:13,600 2 จะชี้ไปทางซ้าย 568 00:27:13,600 --> 00:27:14,980 และ 2 จะชี้ไปทางขวา 569 00:27:14,980 --> 00:27:17,480 แต่เขาสามารถทำสิ่งที่เขาต้องการเพราะ เขากำลังจะได้รับการปลดปล่อย 570 00:27:17,480 --> 00:27:19,480 และมันไม่สำคัญว่าสิ่งที่ ค่าเหล่านั้นอีกต่อไป 571 00:27:19,480 --> 00:27:23,040 >> สิ่งที่สำคัญคือว่าส่วนที่เหลืออีก ผู้ชายจะถูกกำหนดเส้นทางดังกล่าวข้างต้น 572 00:27:23,040 --> 00:27:24,280 และด้านล่างของเขาตอนนี้ 573 00:27:24,280 --> 00:27:25,810 และแน่นอนว่าเป็นสิ่งที่เราจะทำต่อไป 574 00:27:25,810 --> 00:27:29,360 เราชี้ฟรีซึ่งหมายความว่าเราบอก ระบบปฏิบัติการที่คุณจะยินดี 575 00:27:29,360 --> 00:27:30,906 การเรียกคืนนี้ 576 00:27:30,906 --> 00:27:34,900 แล้วสุดท้ายเรากลับ 577 00:27:34,900 --> 00:27:37,220 อื่นโดยปริยายถ้าเรา ยังไม่ได้ส่งกลับไปยัง 578 00:27:37,220 --> 00:27:38,290 เราได้มีการให้มอง 579 00:27:38,290 --> 00:27:41,485 ดังนั้นตัวชี้เท่ากับตัวชี้ต่อไปเพียงแค่ วิธีการย้ายผู้ชายคนนี้ที่นี่ 580 00:27:41,485 --> 00:27:42,600 ย้ายผู้ชายคนนี้ที่นี่ 581 00:27:42,600 --> 00:27:45,400 ย้ายผู้ชายคนนี้นี่ถ้าในความเป็นจริง เราไม่พบจำนวน 582 00:27:45,400 --> 00:27:46,960 เรากำลังมองหายัง 583 00:27:46,960 --> 00:27:49,630 >> ตรงไปตรงมาเพื่อให้มันดูสมบูรณ์ ครอบงำผมคิดว่าในตอนแรก 584 00:27:49,630 --> 00:27:52,180 อย่างรวดเร็วโดยเฉพาะอย่างยิ่งถ้าคุณพยายามที่ กับเรื่องนี้ในระหว่างการตอบคำถามแล้วดู 585 00:27:52,180 --> 00:27:52,850 บางอย่างเช่นนี้ 586 00:27:52,850 --> 00:27:55,050 และคุณตบตัวเองที่ด้านหลัง 587 00:27:55,050 --> 00:27:57,080 ดีมีวิธีที่ฉันสามารถมีไม่ได้ ขึ้นมาว่าในการตอบคำถาม 588 00:27:57,080 --> 00:28:00,470 แต่ผมจะเถียงคุณสามารถถ้าคุณทำลาย มันลงไปในแต่ละบุคคลเหล่านี้ 589 00:28:00,470 --> 00:28:04,400 กรณีและเพียงแค่เดินผ่านมัน ระมัดระวังแม้ว่าเป็นที่ยอมรับภายใต้ 590 00:28:04,400 --> 00:28:06,300 สถานการณ์เครียด 591 00:28:06,300 --> 00:28:09,470 >> ขอบคุณภาพที่ทำ ทุกอย่างมีความสุข 592 00:28:09,470 --> 00:28:11,050 คุณสามารถวาดใน จำนวนของรูปแบบใด ๆ 593 00:28:11,050 --> 00:28:12,760 คุณไม่จำเป็นต้องที่จะทำครอบคลุม สิ่งที่นี่ 594 00:28:12,760 --> 00:28:14,520 คุณสามารถทำมันด้วยตรง สายเช่นนี้ 595 00:28:14,520 --> 00:28:18,790 แต่ส่วนสำคัญของปัญหานี้ใน โดยทั่วไปก็คือการตระหนักว่า 596 00:28:18,790 --> 00:28:22,060 ภาพในท้ายที่สุดแล้วควรมีลักษณะเล็ก ๆ น้อย ๆ บางอย่างเช่นนี้เพราะ 597 00:28:22,060 --> 00:28:25,030 เวลาคงที่ส่อให้เห็นว่าคุณให้ ติดขัดและติดขัดและติดขัด 598 00:28:25,030 --> 00:28:29,900 โหนดใหม่ที่จุดเริ่มต้น ของรายการ 599 00:28:29,900 --> 00:28:31,960 คำถามใด? 600 00:28:31,960 --> 00:28:34,565 น่าจะเป็นที่ท้าทายที่สุดของ แน่นอนคำถามที่เข้ารหัส 601 00:28:34,565 --> 00:28:37,690 >> ผู้ชม: ดังนั้นเป็นรายการที่คล้ายกับ มุ่งหน้าไปในตัวอย่างที่แล้ว 602 00:28:37,690 --> 00:28:39,640 >> DAVID เจลัน: แน่นอนว่า 603 00:28:39,640 --> 00:28:43,130 เพียงแค่ชื่อที่แตกต่างกันสำหรับ ตัวแปรทั่วโลก 604 00:28:43,130 --> 00:28:44,380 ทั่วโลกคืออะไร 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB สลิง: OK 607 00:28:49,730 --> 00:28:52,020 ดังนั้นนี้เป็นหนึ่งในสถานที่ที่คุณ ต้องเขียนวรรค 608 00:28:52,020 --> 00:28:56,060 บางคนเขียนเรียงความ กับคำถามนี้ 609 00:28:56,060 --> 00:29:00,230 แต่คุณก็จำเป็นต้องใช้เหล่านี้หกคำ เพื่ออธิบายสิ่งที่เกิดขึ้นเมื่อ 610 00:29:00,230 --> 00:29:02,440 คุณพยายามที่จะติดต่อ facebook.com 611 00:29:02,440 --> 00:29:07,930 ดังนั้นฉันจะพูดคุยผ่านกระบวนการ การใช้คำเหล่านี้ 612 00:29:07,930 --> 00:29:11,290 ดังนั้นในเบราว์เซอร์ของเราเราพิมพ์ที่ facebook.com และกด Enter 613 00:29:11,290 --> 00:29:17,280 ดังนั้นเบราว์เซอร์ของเราจะสร้าง HTTP ขอให้มันจะส่ง 614 00:29:17,280 --> 00:29:22,220 ผ่านขั้นตอนบางอย่างที่จะ Facebook สำหรับ Facebook เพื่อตอบสนองต่อเราด้วย 615 00:29:22,220 --> 00:29:24,450 HTML ของหน้าของ 616 00:29:24,450 --> 00:29:28,800 >> ดังนั้นสิ่งที่เป็นกระบวนการโดย ซึ่งคำขอ HTTP 617 00:29:28,800 --> 00:29:30,730 จริงได้รับการ Facebook? 618 00:29:30,730 --> 00:29:32,790 ดังนั้นครั้งแรกที่เราจำเป็นต้องแปล Facebook.com 619 00:29:32,790 --> 00:29:38,780 เพื่อให้เพียงแค่ชื่อ Facebook.com, ที่จริงไม่ขอ HTTP 620 00:29:38,780 --> 00:29:39,940 จำเป็นที่จะต้องไป 621 00:29:39,940 --> 00:29:44,120 ดังนั้นเราจึงจำเป็นที่จะแปล Facebook.com ที่อยู่ IP ที่ไม่ซ้ำกัน 622 00:29:44,120 --> 00:29:47,620 ระบุว่าเครื่องเราจริง ต้องการที่จะส่งคำขอนี้ 623 00:29:47,620 --> 00:29:49,310 แล็ปท็อปของคุณมีที่อยู่ IP 624 00:29:49,310 --> 00:29:52,240 สิ่งที่เชื่อมต่อกับอินเทอร์เน็ต มีที่อยู่ IP 625 00:29:52,240 --> 00:29:59,030 >> ดังนั้น DNS ระบบชื่อโดเมนที่เป็น สิ่งที่เกิดขึ้นในการจัดการกับการแปล 626 00:29:59,030 --> 00:30:03,750 จาก facebook.com ไปยังที่อยู่ที่ ที่คุณต้องการจริงที่จะติดต่อ 627 00:30:03,750 --> 00:30:08,075 ดังนั้นเราจึงติดต่อเซิร์ฟเวอร์ DNS และ กล่าวว่าสิ่งที่เป็น facebook.com? 628 00:30:08,075 --> 00:30:16,560 มันบอกว่าโอ้ก็อยู่ IP 190.212 บางสิ่งบางอย่างบางสิ่งบางอย่างบางสิ่งบางอย่าง 629 00:30:16,560 --> 00:30:16,900 ขวาทั้งหมด 630 00:30:16,900 --> 00:30:18,850 ตอนนี้ฉันรู้ว่าเครื่อง ฉันต้องการที่จะติดต่อ 631 00:30:18,850 --> 00:30:22,360 >> ดังนั้นแล้วคุณส่งคำขอของคุณ ไปยังเครื่องที่ 632 00:30:22,360 --> 00:30:24,140 ดังนั้นวิธีการที่จะได้รับไปยังเครื่องที่ 633 00:30:24,140 --> 00:30:27,200 ดีขอไปจาก เราเตอร์กับเราเตอร์ใหญ่ 634 00:30:27,200 --> 00:30:32,630 โปรดจำไว้เช่นในชั้นเรียนที่ เราเห็นจริงเส้นทางที่ 635 00:30:32,630 --> 00:30:35,340 แพ็คเก็ตเข้ามาเมื่อเราพยายาม ในการติดต่อสื่อสาร 636 00:30:35,340 --> 00:30:38,460 เราเห็นมันกระโดดข้ามมหาสมุทรแอตแลนติก มหาสมุทรที่หนึ่งจุดหรืออะไรก็ตาม 637 00:30:38,460 --> 00:30:42,820 >> ดังนั้นพอร์ตระยะสุดท้าย 638 00:30:42,820 --> 00:30:46,520 ดังนั้นนี่คือตอนนี้ในคอมพิวเตอร์ของคุณ 639 00:30:46,520 --> 00:30:49,970 คุณสามารถมีหลายสิ่งในปัจจุบัน การติดต่อสื่อสารกับอินเทอร์เน็ต 640 00:30:49,970 --> 00:30:53,730 ดังนั้นผมจึงสามารถใช้การพูด, Skype 641 00:30:53,730 --> 00:30:55,670 ฉันอาจจะมีเว็บเบราว์เซอร์เปิด 642 00:30:55,670 --> 00:30:59,010 ฉันอาจจะมีสิ่งที่ torrenting ไฟล์ 643 00:30:59,010 --> 00:31:00,880 ดังนั้นสิ่งเหล่านี้เป็น การติดต่อสื่อสารกับ 644 00:31:00,880 --> 00:31:02,600 อินเทอร์เน็ตในทางใดทางหนึ่ง 645 00:31:02,600 --> 00:31:08,070 >> ดังนั้นเมื่อเครื่องคอมพิวเตอร์ของคุณได้รับข้อมูลบางอย่าง จากอินเทอร์เน็ตวิธีการที่ไม่ได้ 646 00:31:08,070 --> 00:31:10,130 รู้ว่าสิ่งที่การประยุกต์ใช้จริง ต้องการข้อมูลหรือไม่ 647 00:31:10,130 --> 00:31:12,610 ก็ไม่ทราบว่าวิธีการนี​​้โดยเฉพาะ ข้อมูลมีความหมายสำหรับ 648 00:31:12,610 --> 00:31:16,070 torrenting โปรแกรมเมื่อเทียบกับ ไปยังเว็บเบราว์เซอร์หรือไม่ 649 00:31:16,070 --> 00:31:20,980 ดังนั้นนี่คือจุดประสงค์ของพอร์ตที่ ทุกการใช้งานเหล่านี้มี 650 00:31:20,980 --> 00:31:22,720 อ้างพอร์ตในคอมพิวเตอร์ของคุณ 651 00:31:22,720 --> 00:31:27,580 ดังนั้นเว็บเบราว์เซอร์ของคุณบอกว่าเดี๋ยวก่อน ฉันฟังในพอร์ต 1000 652 00:31:27,580 --> 00:31:32,240 และโปรแกรมการ torrenting ของคุณจะพูดว่า ฉันฟังในพอร์ต 3000 653 00:31:32,240 --> 00:31:34,770 และ Skype กล่าวว่าฉันใช้พอร์ต 4000 654 00:31:34,770 --> 00:31:41,950 >> ดังนั้นเมื่อคุณได้รับข้อมูลบางอย่างที่เป็นของ หนึ่งในโปรแกรมเหล่านี้ข้อมูล 655 00:31:41,950 --> 00:31:45,510 มีการทำเครื่องหมายที่มีพอร์ตซึ่งก็จริง ควรจะส่งไปพร้อมกับ 656 00:31:45,510 --> 00:31:47,950 ดังนั้นนี้กล่าวว่าโอ้ฉันเป็น ไปยังพอร์ต 1000 657 00:31:47,950 --> 00:31:50,950 ฉันรู้แล้วฉันจำเป็นต้องส่งต่อนี้ ไปพร้อมกับเว็บเบราเซอร์ของฉัน 658 00:31:50,950 --> 00:31:56,440 ดังนั้นเหตุผลที่มันเป็นเรื่องที่เกี่ยวข้องที่นี่ คือเว็บเซิร์ฟเวอร์ที่มีแนวโน้มที่จะ 659 00:31:56,440 --> 00:31:58,240 ฟังในพอร์ต 80 660 00:31:58,240 --> 00:32:02,420 ดังนั้นเมื่อผมติดต่อ Facebook.com ฉัน การติดต่อสื่อสารกับเครื่องบาง 661 00:32:02,420 --> 00:32:06,390 แต่ฉันต้องการที่จะบอกว่าพอร์ตซึ่งจากการที่ เครื่องฉันต้องการที่จะสื่อสารกับ 662 00:32:06,390 --> 00:32:09,160 และเว็บเซิร์ฟเวอร์มีแนวโน้มที่จะ ฟังในพอร์ต 80 663 00:32:09,160 --> 00:32:14,010 >> หากพวกเขาต้องการที่พวกเขาสามารถตั้งค่า ขึ้นเพื่อจะแสดงเป็นพอร์ต 7000 664 00:32:14,010 --> 00:32:19,090 และจากนั้นในเว็บเบราเซอร์ที่จะทำได้ พิมพ์ด้วยตนเอง Facebook.com: 7000 665 00:32:19,090 --> 00:32:24,600 ส่งคำขอไปยังพอร์ต 7000 ของเว็บเซิร์ฟเวอร์ของ Facebook 666 00:32:24,600 --> 00:32:26,820 >> DAVID เจลัน: และในกรณีนี้แม้ แต่เราไม่ได้ต้องการให้คน 667 00:32:26,820 --> 00:32:30,000 กล่าวถึงนี้ในกรณีนี้สิ่งที่พอร์ต จะขอจริงไปหรือไม่ 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 ลองอีกครั้ง 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 อย่างแน่นอน 672 00:32:44,300 --> 00:32:47,960 ไม่ได้มองหา แต่ความละเอียดอ่อน ที่มีไม่มีใครที่ผ่านมา 673 00:32:47,960 --> 00:32:51,770 >> ROB สลิง: ดังนั้น HTTPS เนื่องจากเป็น ฟังเฉพาะสำหรับ 674 00:32:51,770 --> 00:32:55,180 การเข้ารหัสจะอยู่ในพอร์ต 4430 675 00:32:55,180 --> 00:32:57,680 >> ผู้ชม: อีเมลและ 25 ใช่มั้ย? 676 00:32:57,680 --> 00:33:00,670 >> DAVID เจลัน: ขาออก อีเมล, 25, ครับ 677 00:33:00,670 --> 00:33:03,760 >> ROB สลิง: ฉันไม่ได้รู้ว่าส่วนใหญ่ของ - ทุกคนที่ต่ำกว่ามีแนวโน้มที่จะ 678 00:33:03,760 --> 00:33:06,310 สงวนไว้สำหรับสิ่งที่ 679 00:33:06,310 --> 00:33:09,260 ผมคิดว่าทุกอย่างภายใต้ 1024 ลิขสิทธิ์ 680 00:33:09,260 --> 00:33:13,450 >> ผู้ชม: ทำไมคุณถึงบอกว่า 3 เป็นจำนวนที่ไม่ถูกต้อง 681 00:33:13,450 --> 00:33:18,820 >> ROB สลิง: เพราะในที่อยู่ IP มีสี่กลุ่มของตัวเลข 682 00:33:18,820 --> 00:33:21,090 และพวกเขากำลัง 0-255 683 00:33:21,090 --> 00:33:28,060 ดังนั้น 192.168.2.1 เป็นเรื่องธรรมดา ที่อยู่ IP เครือข่ายท้องถิ่น 684 00:33:28,060 --> 00:33:30,840 แจ้งให้ทราบทั้งหมดของผู้ที่มีน้อยกว่า 255 685 00:33:30,840 --> 00:33:33,570 ดังนั้นเมื่อผมเริ่มต้นกับ 300 ที่ ไม่อาจมี 686 00:33:33,570 --> 00:33:35,210 เป็นหนึ่งในตัวเลขที่ 687 00:33:35,210 --> 00:33:38,170 >> DAVID ลันเจ: แต่ที่คลิปโง่ จาก - มัน CSI ที่พวกเขามี 688 00:33:38,170 --> 00:33:39,970 ตัวเลขที่มีขนาดใหญ่เกินไป ที่อยู่ IP 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB สลิง: คำถามใด ๆ เกี่ยวกับเรื่องนี้? 691 00:33:46,110 --> 00:33:51,710 อย่างใดอย่างหนึ่งต่อไปการเปลี่ยนแปลงเพื่อให้สมบูรณ์ใน หัวข้อ แต่เรามีนี้อาร์เรย์ PHP เพื่อ 692 00:33:51,710 --> 00:33:53,270 บ้านในรูปสี่เหลี่ยม 693 00:33:53,270 --> 00:33:56,360 และเรามีรายชื่อเรียงลำดับ 694 00:33:56,360 --> 00:33:59,550 และเราต้องการที่จะพิมพ์ออกมาในแต่ละรายการ เพียงแค่มีชื่อบ้าน 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 ดังนั้นเราจึงมีห่วง foreach 697 00:34:11,870 --> 00:34:17,540 ดังนั้นจำไวยากรณ์คือ foreach อาร์เรย์เป็นรายการในอาร์เรย์ 698 00:34:17,540 --> 00:34:22,360 ดังนั้นผ่านการทวนของวงแต่ละ บ้านจะใช้เวลาในการอย่างใดอย่างหนึ่ง 699 00:34:22,360 --> 00:34:24,060 ค่าภายในอาร์เรย์ 700 00:34:24,060 --> 00:34:26,530 >> ในวันแรกซ้ำบ้าน จะเป็นคาบ๊อตส์ 701 00:34:26,530 --> 00:34:30,370 ที่สองย้ำบ้านจะ เป็นหนังสือบ้านและอื่น ๆ 702 00:34:30,370 --> 00:34:34,370 ดังนั้นสำหรับแต่ละรูปสี่เหลี่ยมเป็นบ้านเรา เพียงแค่จะพิมพ์ - 703 00:34:34,370 --> 00:34:37,250 คุณยังจะได้สะท้อน - 704 00:34:37,250 --> 00:34:42,199 รายการและจากนั้นชื่อของบ้าน และจากนั้นปิดรายการ 705 00:34:42,199 --> 00:34:45,210 วงเล็บปีกกาเป็นตัวเลือกที่นี่ 706 00:34:45,210 --> 00:34:49,480 >> แล้วเราก็บอกว่าในคำถาม ตัวเองอย่าลืมปิด 707 00:34:49,480 --> 00:34:50,770 แท็กรายชื่อเรียงลำดับ 708 00:34:50,770 --> 00:34:53,949 ดังนั้นเราจึงจำเป็นที่จะต้องออกจากโหมด PHP เพื่อที่จะทำเช่นนี้ 709 00:34:53,949 --> 00:35:00,280 หรือเราอาจจะสะท้อน ปิดแท็กรายการไม่เรียงลำดับ 710 00:35:00,280 --> 00:35:02,380 >> DAVID เจลัน: นอกจากนี้ยังดีที่นี่จะ ได้รับที่จะใช้โรงเรียนเก่า 711 00:35:02,380 --> 00:35:07,340 วงที่มี $ i = 0 0 และใช้ในการนับ คิดออกความยาวของเรย์ 712 00:35:07,340 --> 00:35:09,240 ทั้งหมดดีเกินไปเพียง wordier น้อย 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> ผู้ชม: ดังนั้นถ้าคุณกำลังจะ [ไม่ได้ยิน] คุณจะทำ - 715 00:35:14,742 --> 00:35:16,734 ฉันลืมสิ่งที่ห่วง [ไม่ได้ยิน] เป็น 716 00:35:16,734 --> 00:35:21,380 คุณจะ $ รูปสี่เหลี่ยมวงเล็บฉัน? 717 00:35:21,380 --> 00:35:21,850 >> DAVID เจลัน: แน่นอน 718 00:35:21,850 --> 00:35:23,100 ใช่ว่า 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB สลิง: อะไรอีกหรือไม่ 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID เจลัน: ทั้งหมดขวา 723 00:35:32,010 --> 00:35:32,300 การค้าเพลย์ออฟ 724 00:35:32,300 --> 00:35:38,290 ดังนั้นมีอัดแน่นของคำตอบ เป็นไปได้สำหรับแต่ละเหล่านี้ 725 00:35:38,290 --> 00:35:40,510 เราถูกจริงๆเพียงแค่มองหา สิ่งที่น่าสนใจสำหรับการกลับหัวกลับหางและ 726 00:35:40,510 --> 00:35:41,100 ข้อเสีย 727 00:35:41,100 --> 00:35:44,830 และจำนวน 16 ถามว่าการตรวจสอบของผู้ใช้ เข้าฝั่งไคลเอ็นต์เช่นเดียวกับจาวาสคริปต์ 728 00:35:44,830 --> 00:35:47,280 แทนด้านเซิร์ฟเวอร์เช่นเดียวกับ PHP 729 00:35:47,280 --> 00:35:49,450 ดังนั้นสิ่งที่กลับหัวกลับหางของ ทำฝั่งไคลเอ็นต์? 730 00:35:49,450 --> 00:35:53,780 >> ดีหนึ่งในสิ่งที่เรานำเสนอ ให้คุณลดความล่าช้าเพราะคุณ 731 00:35:53,780 --> 00:35:56,750 จะได้ไม่ต้องรบกวนติดต่อ เซิร์ฟเวอร์ซึ่งอาจใช้เวลาไม่กี่ 732 00:35:56,750 --> 00:36:00,390 มิลลิวินาทีหรือแม้แต่สองสามวินาที โดยหลีกเลี่ยงที่และเพียงแค่ 733 00:36:00,390 --> 00:36:04,670 การตรวจสอบการเข้าฝั่งไคลเอนต์ของผู้ใช้โดย เรียกตัวจัดการในการส่งและ 734 00:36:04,670 --> 00:36:06,650 เพียงแค่การตรวจสอบพวกเขาชนิด สิ่งที่อยู่ในชื่อ? 735 00:36:06,650 --> 00:36:08,080 ? พวกเขาบางชนิด ในสำหรับที่อยู่อีเมล 736 00:36:08,080 --> 00:36:10,950 ? พวกเขาเลือกหอพักจาก เมนูแบบเลื่อนลง 737 00:36:10,950 --> 00:36:14,360 >> คุณสามารถให้พวกเขามีความคิดเห็นทันที การใช้คอมพิวเตอร์กิกะเฮิรตซ์ 738 00:36:14,360 --> 00:36:16,770 หรือสิ่งที่พวกเขาได้ที่ จริงบนโต๊ะของพวกเขา 739 00:36:16,770 --> 00:36:19,310 จึงเป็นเพียงผู้ใช้ที่ดีกว่า มักจะได้สัมผัสกับ 740 00:36:19,310 --> 00:36:24,460 แต่ข้อเสียของการทำฝั่งไคลเอ็นต์ การตรวจสอบถ้าคุณทำมันโดยไม่ได้ 741 00:36:24,460 --> 00:36:29,860 ทำตรวจสอบด้านเซิร์ฟเวอร์ที่ ทุกคนส่วนใหญ่ออกมาจาก CS50 มารู้ 742 00:36:29,860 --> 00:36:33,980 ที่คุณก็สามารถส่งข้อมูลใด ๆ ที่คุณต้องการ ไปยังเซิร์ฟเวอร์หลายวิธีใด ๆ 743 00:36:33,980 --> 00:36:37,030 ตรงไปตรงมามากที่สุดในเบราว์เซอร์ใด ๆ ที่คุณสามารถ คลิกรอบในการตั้งค่าและเพียงแค่ 744 00:36:37,030 --> 00:36:40,110 ปิด JavaScript ซึ่งจะ, จึงปิดการใช้งานรูปแบบใด ๆ 745 00:36:40,110 --> 00:36:41,080 การตรวจสอบ 746 00:36:41,080 --> 00:36:44,460 >> แต่คุณยังอาจเรียกว่าแม้ฉัน ทำสิ่งที่เป็นความลับบางอย่างในชั้นเรียนโดยใช้ 747 00:36:44,460 --> 00:36:47,790 เทลเน็ตและที่จริงแกล้ง เป็นเบราว์เซอร์ที่ได้รับโดยการส่ง 748 00:36:47,790 --> 00:36:49,240 การร้องขอไปยังเซิร์ฟเวอร์ 749 00:36:49,240 --> 00:36:51,030 และที่ไม่แน่นอน การใช้งานจาวาสคริปต์ใด ๆ 750 00:36:51,030 --> 00:36:53,290 ที่เพียงฉันพิมพ์คำสั่ง ที่แป้นพิมพ์ 751 00:36:53,290 --> 00:36:57,410 ดังนั้นจริงๆโปรแกรมใด ๆ ภายในพอ ความสะดวกสบายกับเว็บและ HTTP 752 00:36:57,410 --> 00:37:01,690 สามารถส่งข้อมูลสิ่งที่เขาหรือเธอต้องการ ไปยังเซิร์ฟเวอร์โดยไม่ต้องตรวจสอบ 753 00:37:01,690 --> 00:37:05,470 และถ้าเซิร์ฟเวอร์ของคุณยังไม่ตรวจสอบ พวกเขาให้ฉันชื่อเป็น 754 00:37:05,470 --> 00:37:08,930 นี้จริงที่อยู่อีเมลที่ถูกต้องทำ พวกเขาเลือกที่หอพักคุณอาจท้าย 755 00:37:08,930 --> 00:37:12,800 ขึ้นใส่ปลอมหรือข้อมูลที่ว่างเปล่าเพียง ลงในฐานข้อมูลของคุณซึ่งอาจจะเป็น 756 00:37:12,800 --> 00:37:15,450 จะไม่เป็นสิ่งที่ดีถ้า คุณสมมติว่ามันอยู่ที่นั่น 757 00:37:15,450 --> 00:37:16,770 >> ดังนั้นนี่คือความเป็นจริงที่น่ารำคาญ 758 00:37:16,770 --> 00:37:19,890 แต่โดยทั่วไปแล้วฝั่งไคลเอ็นต์ การตรวจสอบเป็นอย่างมาก 759 00:37:19,890 --> 00:37:21,810 แต่มันหมายถึงการทำงานมากเป็นสองเท่า 760 00:37:21,810 --> 00:37:25,970 แม้ว่าจะมีการทำที่มีอยู่ต่างๆ ห้องสมุดห้องสมุด JavaScript เพื่อ 761 00:37:25,970 --> 00:37:28,830 เช่นที่ทำให้มากนี้ มากน้อยของอาการปวดหัว 762 00:37:28,830 --> 00:37:31,940 และคุณสามารถนำมาใช้บางส่วนของรหัส ฝั่งเซิร์ฟเวอร์ฝั่งไคลเอ็นต์ 763 00:37:31,940 --> 00:37:35,980 แต่ไม่ทราบว่าเป็นปกติ การทำงานเพิ่มเติม 764 00:37:35,980 --> 00:37:36,415 ใช่ 765 00:37:36,415 --> 00:37:37,792 >> ผู้ชม: ดังนั้นถ้าเราเพียงแค่ กล่าวว่ามีความปลอดภัยน้อย - 766 00:37:37,792 --> 00:37:39,205 >> DAVID เจลัน: [หัวเราะ] 767 00:37:39,205 --> 00:37:39,680 ฮึ 768 00:37:39,680 --> 00:37:43,105 เหล่านี้มักจะยาก คนที่จะตัดสิน 769 00:37:43,105 --> 00:37:44,480 >> ROB สลิง: นั่นจะ ได้รับการยอมรับ 770 00:37:44,480 --> 00:37:44,810 >> DAVID เจลัน: อะไรนะ? 771 00:37:44,810 --> 00:37:45,810 >> ROB สลิง: ฉันสร้างปัญหานี้ 772 00:37:45,810 --> 00:37:46,735 ที่จะได้รับการยอมรับ 773 00:37:46,735 --> 00:37:47,220 >> DAVID เจลัน: ใช่ 774 00:37:47,220 --> 00:37:47,830 >> ผู้ชม: เย็น 775 00:37:47,830 --> 00:37:51,770 >> ROB สลิง: แต่เราไม่ยอมรับ สำหรับแรกหนึ่ง - 776 00:37:51,770 --> 00:37:53,630 ดีสิ่งที่เรากำลังมองหา สิ่งที่ต้องการที่คุณจะได้ไม่ต้อง 777 00:37:53,630 --> 00:37:55,270 สื่อสารกับเซิร์ฟเวอร์ 778 00:37:55,270 --> 00:37:58,355 เราไม่ได้เพียงแค่ยอมรับได้เร็วขึ้น 779 00:37:58,355 --> 00:38:00,080 >> ผู้ชม: สิ่งที่เกี่ยวกับ ไม่โหลดหน้าเว็บ? 780 00:38:00,080 --> 00:38:00,430 >> ROB สลิง: ใช่ 781 00:38:00,430 --> 00:38:03,000 นั่นคือคำตอบที่ยอมรับ 782 00:38:03,000 --> 00:38:06,300 >> DAVID เจลัน: อะไรที่เรารู้สึกว่า มันเป็นโอกาสมากขึ้นกว่าไม่น่าจะ 783 00:38:06,300 --> 00:38:09,780 ที่คุณรู้ว่าสิ่งที่คุณเป็น กล่าวว่าซึ่งเป็นเรื่องที่ยาก 784 00:38:09,780 --> 00:38:13,500 สายการวาดบางครั้ง 785 00:38:13,500 --> 00:38:16,000 ใช้รายการการเชื่อมโยงแทน ของอาร์เรย์ที่จะรักษา 786 00:38:16,000 --> 00:38:17,590 รายการที่เรียงลำดับของจำนวนเต็ม 787 00:38:17,590 --> 00:38:21,000 ดังนั้นส่วนต่างจากที่เรามักจะอ้างกับการเชื่อมโยง รายการที่มีแรงบันดาลใจของพวกเขาทั้ง 788 00:38:21,000 --> 00:38:22,370 แนะนำคือการที่คุณได้รับชีวิตชีวา 789 00:38:22,370 --> 00:38:23,030 พวกเขาสามารถเติบโต 790 00:38:23,030 --> 00:38:23,950 พวกเขาสามารถหด 791 00:38:23,950 --> 00:38:27,370 ดังนั้นคุณจึงไม่ต้องกระโดดผ่านห่วง จริงสร้างหน่วยความจำเพิ่มเติม 792 00:38:27,370 --> 00:38:28,140 กับอาร์เรย์ 793 00:38:28,140 --> 00:38:30,310 หรือคุณไม่ได้มีเพียงแค่ กล่าวขอโทษผู้ใช้ 794 00:38:30,310 --> 00:38:31,410 อาร์เรย์ถูกเติมเต็ม 795 00:38:31,410 --> 00:38:35,850 ดังนั้นการเจริญเติบโตแบบไดนามิกของรายการ 796 00:38:35,850 --> 00:38:37,210 ข้อเสีย แต่ของรายการที่เชื่อมโยง? 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> ผู้ชม: มันเป็นเชิงเส้น 799 00:38:43,356 --> 00:38:45,800 ค้นหาในรายการที่เชื่อมโยงเป็นเส้นตรง แทนสิ่งที่คุณเข้าสู่ระบบ 800 00:38:45,800 --> 00:38:46,360 >> DAVID เจลัน: แน่นอน 801 00:38:46,360 --> 00:38:50,160 ค้นหาในรายการที่เชื่อมโยงเป็นเชิงเส้น แม้จะเรียงลำดับเพราะคุณสามารถ 802 00:38:50,160 --> 00:38:53,170 เพียงปฏิบัติตามขนมปังเหล่านี้เหล่านี้ ชี้จากจุดเริ่มต้นของรายการ 803 00:38:53,170 --> 00:38:53,570 สิ้นสุด 804 00:38:53,570 --> 00:38:57,970 คุณไม่สามารถใช้ประโยชน์จากการเข้าถึงแบบสุ่มและ จึงค้นหาแบบไบนารีถึงแม้ว่ามันจะเป็น 805 00:38:57,970 --> 00:39:00,740 เรียงลำดับที่คุณสามารถทำได้ ทำอย่างไรกับอาร์เรย์ 806 00:39:00,740 --> 00:39:02,390 และนอกจากนี้ยังมีค่าใช้จ่ายอื่น 807 00:39:02,390 --> 00:39:02,966 ใช่ 808 00:39:02,966 --> 00:39:03,800 >> ผู้ชม: หน่วยความจำไม่มีประสิทธิภาพ 809 00:39:03,800 --> 00:39:04,130 >> DAVID เจลัน: ใช่ 810 00:39:04,130 --> 00:39:06,940 ดีฉันจะไม่จำเป็นต้อง กล่าวว่าไม่มีประสิทธิภาพ 811 00:39:06,940 --> 00:39:10,110 แต่มันก็ไม่เสียค่าใช้จ่ายหน่วยความจำมากขึ้น เพราะคุณต้อง 32 บิตสำหรับทุก 812 00:39:10,110 --> 00:39:13,400 โหนดเพื่อชี้เพิ่มเติมที่ อย่างน้อยสำหรับรายการที่เชื่อมโยงโดยลำพัง 813 00:39:13,400 --> 00:39:16,660 ตอนนี้ถ้าคุณเพียงการจัดเก็บจำนวนเต็มและ คุณกำลังเพิ่มตัวชี้ว่า 814 00:39:16,660 --> 00:39:17,830 จริงชนิดที่ไม่น่ารำคาญ 815 00:39:17,830 --> 00:39:19,340 มันเป็นสองเท่าของจำนวนหน่วยความจำ 816 00:39:19,340 --> 00:39:22,330 แต่ในความเป็นจริงถ้าคุณเก็บ รายการที่เชื่อมโยงของ structs ที่อาจมี 817 00:39:22,330 --> 00:39:25,540 8 ไบต​​์ 16 ไบต์มากยิ่งขึ้น กว่าที่บางทีมันอาจจะน้อย 818 00:39:25,540 --> 00:39:26,500 ของต้นทุน 819 00:39:26,500 --> 00:39:28,320 แต่มันเป็นค่าใช้จ่ายกระนั้น 820 00:39:28,320 --> 00:39:31,880 ดังนั้นทั้งของผู้ที่จะได้ รับการปรับเป็นข้อเสีย 821 00:39:31,880 --> 00:39:32,110 >> 18 822 00:39:32,110 --> 00:39:36,100 การใช้ PHP แทน C ที่จะเขียน โปรแกรมบรรทัดคำสั่ง 823 00:39:36,100 --> 00:39:41,890 ดังนั้นที่นี่ก็มักจะเร็วกว่าการใช้ ภาษาเช่น PHP หรือทับทิมหรืองูใหญ่ 824 00:39:41,890 --> 00:39:43,700 คุณเพียงแค่ได้อย่างรวดเร็วเปิด ขึ้นโปรแกรมแก้ไขข้อความ 825 00:39:43,700 --> 00:39:45,900 คุณมีฟังก์ชั่นอื่น ๆ อีกมากมาย มีให้คุณ 826 00:39:45,900 --> 00:39:49,325 PHP มีอ่างครัวของฟังก์ชั่น ในขณะที่ใน C คุณ 827 00:39:49,325 --> 00:39:50,420 มีมากน้อยมาก 828 00:39:50,420 --> 00:39:53,820 ในความเป็นจริงคนที่รู้วิธีที่ยาก ว่าคุณไม่ได้มีตารางแฮช 829 00:39:53,820 --> 00:39:55,000 คุณไม่ได้มีการเชื่อมโยงรายชื่อ 830 00:39:55,000 --> 00:39:57,470 ถ้าคุณต้องการที่คุณต้อง ใช้พวกเขาด้วยตัวคุณเอง 831 00:39:57,470 --> 00:40:00,950 >> ดังนั้นหนึ่งกลับหัวกลับหางของ PHP หรือจริงๆใด ๆ แปลภาษาเป็นความรวดเร็ว 832 00:40:00,950 --> 00:40:02,920 ที่คุณสามารถเขียนโค้ด 833 00:40:02,920 --> 00:40:06,660 แต่ข้อเสียที่เราเห็นนี้เมื่อฉัน วิปปิ้งได้อย่างรวดเร็วขึ้น misspeller 834 00:40:06,660 --> 00:40:11,780 การดำเนินการในการบรรยายโดยใช้ PHP เป็น ว่าการใช้ภาษาตีความ 835 00:40:11,780 --> 00:40:13,570 มักจะช้าลง 836 00:40:13,570 --> 00:40:18,420 และเราเห็นว่า demonstrably ด้วย เพิ่มขึ้นในเวลา 0.3 วินาทีถึง 3 837 00:40:18,420 --> 00:40:24,440 วินาทีเพราะของการตีความ ที่เกิดขึ้นจริง 838 00:40:24,440 --> 00:40:27,060 >> คว่ำอีกอย่างคือการที่คุณ ไม่ได้มีการรวบรวม 839 00:40:27,060 --> 00:40:30,130 ดังนั้นจึงยังเพิ่มความเร็วในการพัฒนา บังเอิญเพราะคุณจะได้ไม่ต้อง 840 00:40:30,130 --> 00:40:31,360 ขั้นตอนที่สองในการเรียกใช้โปรแกรม 841 00:40:31,360 --> 00:40:32,140 คุณเพียงแค่ต้องหนึ่ง 842 00:40:32,140 --> 00:40:35,260 และอื่น ๆ ที่สวย ที่น่าสนใจเช่นกัน 843 00:40:35,260 --> 00:40:38,450 โดยใช้ฐานข้อมูล SQL แทน ไฟล์ในการจัดเก็บข้อมูล 844 00:40:38,450 --> 00:40:40,230 ดังนั้นฐานข้อมูล SQL ที่ใช้สำหรับ pset7 845 00:40:40,230 --> 00:40:42,060 CSV ไฟล์ที่คุณไม่ได้ใช้มาก 846 00:40:42,060 --> 00:40:45,960 แต่คุณใช้มันในทางอ้อม pset7 เป็น อย่างดีจากการพูดคุยกับการเงิน Yahoo 847 00:40:45,960 --> 00:40:49,330 >> แต่ CSV เป็นเช่นเดียวกับแฟ้ม Excel แต่ ง่ายสุดที่เป็นคอลัมน์ 848 00:40:49,330 --> 00:40:54,010 เพียง demarked ด้วยเครื่องหมายจุลภาคภายใน ของแฟ้มข้อความอย่างอื่น 849 00:40:54,010 --> 00:40:56,740 และการใช้ฐานข้อมูลเป็น เล็ก ๆ น้อย ๆ ที่น่าสนใจมากขึ้น 850 00:40:56,740 --> 00:41:00,060 มันกลับหัวกลับหางเพราะคุณได้รับสิ่งที่ เช่นเลือกและแทรกและลบ 851 00:41:00,060 --> 00:41:03,790 และคุณจะได้รับสมมุติว่าดัชนี MySQL และฐานข้อมูลอื่น ๆ เช่น 852 00:41:03,790 --> 00:41:07,510 Oracle, สร้างสำหรับคุณในหน่วยความจำที่ หมายถึงการเลือกของคุณอาจจะไม่ได้ 853 00:41:07,510 --> 00:41:09,000 จะเป็นเส้นด้านบนลงล่าง 854 00:41:09,000 --> 00:41:11,300 ที่จริงมันจะเป็นสิ่งที่ เช่นค้นหา binary หรือสิ่งที่ 855 00:41:11,300 --> 00:41:12,520 ที่คล้ายกันในจิตวิญญาณ 856 00:41:12,520 --> 00:41:13,930 ดังนั้นพวกเขากำลังโดยทั่วไปได้เร็วขึ้น 857 00:41:13,930 --> 00:41:16,040 >> แต่ข้อเสียก็คือ เป็นเพียงการทำงานมากขึ้น 858 00:41:16,040 --> 00:41:16,730 มันเป็นความพยายามมากขึ้น 859 00:41:16,730 --> 00:41:18,140 คุณต้องเข้าใจฐานข้อมูล 860 00:41:18,140 --> 00:41:18,940 คุณจะต้องตั้งขึ้น 861 00:41:18,940 --> 00:41:20,840 คุณต้องการที่จะเรียกใช้เซิร์ฟเวอร์ ที่ฐานข้อมูลบน 862 00:41:20,840 --> 00:41:22,750 คุณต้องเข้าใจ วิธีการกำหนดค่า 863 00:41:22,750 --> 00:41:24,930 ดังนั้นเหล่านี้เป็นเพียงเหล่านี้ ชนิดของการค้าเพลย์ออฟ 864 00:41:24,930 --> 00:41:27,860 ในขณะที่ไฟล์ที่คุณสามารถ สร้างมันขึ้นมาด้วย Gedit 865 00:41:27,860 --> 00:41:28,770 และคุณจะดีไป 866 00:41:28,770 --> 00:41:31,550 มีความซับซ้อนกว่านั้นไม่ได้ 867 00:41:31,550 --> 00:41:34,870 >> Trie ที่ใช้แทนของตารางแฮช ด้วยการผูกมัดที่แยกต่างหากในการจัดเก็บ 868 00:41:34,870 --> 00:41:37,490 พจนานุกรมของคำที่ชวนให้นึกถึง ของ pset5 869 00:41:37,490 --> 00:41:42,480 ดังนั้นพยายามที่กลับหัวกลับหางในทางทฤษฎี อย่างน้อยคืออะไร 870 00:41:42,480 --> 00:41:46,380 เวลาคงที่อย่างน้อยถ้าคุณ hashing ในแต่ละบุคคล 871 00:41:46,380 --> 00:41:48,990 ตัวอักษรในคำเช่นคุณ อาจจะมีสำหรับ pset5 872 00:41:48,990 --> 00:41:52,720 ที่อาจจะมีห้า hashes หก hashes ถ้ามีห้าหรือหก 873 00:41:52,720 --> 00:41:53,900 ตัวอักษรในคำว่า 874 00:41:53,900 --> 00:41:54,580 และนั่นคือสิ่งที่ดีงาม 875 00:41:54,580 --> 00:41:56,910 และถ้ามีขีด จำกัด ในการ ยาวคำพูดของคุณอาจจะมีที่ 876 00:41:56,910 --> 00:41:59,320 เวลาแน่นอนคง asymptotically 877 00:41:59,320 --> 00:42:05,180 >> ในขณะที่ตารางแฮชที่มีการแยก ผูกมัดปัญหาอยู่กับที่ 878 00:42:05,180 --> 00:42:09,070 ชนิดของโครงสร้างข้อมูลที่ ประสิทธิภาพการทำงานของขั้นตอนวิธีการของคุณมักจะ 879 00:42:09,070 --> 00:42:12,700 ขึ้นอยู่กับจำนวนของสิ่ง แล้วในโครงสร้างข้อมูล 880 00:42:12,700 --> 00:42:15,660 และที่แน่นอนกรณีที่มี โซ่ด้วยเหตุนี้สิ่งที่เพิ่มเติมที่คุณใส่ 881 00:42:15,660 --> 00:42:18,800 ลงในตารางแฮชอีกต่อไปที่ โซ่ไปซึ่งหมายความว่าในที่เลวร้ายที่สุด 882 00:42:18,800 --> 00:42:21,960 กรณีที่สิ่งที่คุณอาจจะมองหา เป็นวิธีการที่ส่วนท้ายของหนึ่ง 883 00:42:21,960 --> 00:42:26,000 ของเครือข่ายเหล่านั้นซึ่งได้อย่างมีประสิทธิภาพ devolves เป็นสิ่งที่เป็นเส้นตรง 884 00:42:26,000 --> 00:42:29,450 >> ขณะนี้ในทางปฏิบัติมันจะทำได้อย่างแน่นอน เป็นกรณีที่ตารางแฮชกับ 885 00:42:29,450 --> 00:42:32,820 โซ่จะเร็วกว่าการที่สอดคล้องกัน การดำเนิน Trie ที่ 886 00:42:32,820 --> 00:42:35,570 แต่นั่นด้วยเหตุผลต่างๆในหมู่ ซึ่งจะพยายามใช้จำนวนมากทั้งจาก 887 00:42:35,570 --> 00:42:39,240 หน่วยความจำที่สามารถในความเป็นจริงสิ่งที่ช้า ลงเพราะคุณไม่ได้รับที่ดี 888 00:42:39,240 --> 00:42:42,410 ประโยชน์ของสิ่งที่เรียกว่าแคช ที่สิ่งที่อยู่ใกล้กัน 889 00:42:42,410 --> 00:42:45,420 ในหน่วยความจำที่สามารถเข้าถึงได้ มักจะได้อย่างรวดเร็วมากขึ้น 890 00:42:45,420 --> 00:42:48,180 และบางครั้งคุณสามารถเกิดขึ้นกับ ฟังก์ชันแฮชที่ดีจริงๆ 891 00:42:48,180 --> 00:42:51,060 แม้ว่าคุณจะต้องเสียบิตของ หน่วยความจำที่คุณอาจจริงจะสามารถ 892 00:42:51,060 --> 00:42:54,430 ค้นหาสิ่งที่รวดเร็วและไม่ ที่เลวร้ายที่สุดเท่าที่จะเป็นเส้นตรง 893 00:42:54,430 --> 00:42:58,410 >> ดังนั้นในระยะสั้นมีไม่จำเป็นต้อง กับใด ๆ ของเหล่านี้อย่างใดอย่างหนึ่งหรือแม้กระทั่งสอง 894 00:42:58,410 --> 00:43:00,050 สิ่งที่เฉพาะเจาะจงที่เรากำลังมองหา 895 00:43:00,050 --> 00:43:03,080 อะไรจริงๆโน้มน้าวใจ ที่กลับหัวกลับหางและข้อเสีย 896 00:43:03,080 --> 00:43:04,800 จับทั่วไปตาของเรา 897 00:43:04,800 --> 00:43:11,840 >> ROB สลิง: ดังนั้นสำหรับกลับหัวกลับหางที่เราทำ ไม่ยอมรับในตัวเอง "เร็วขึ้น". คุณ 898 00:43:11,840 --> 00:43:14,540 มีการพูดอะไรบางอย่างเกี่ยวกับเรื่องนี้ 899 00:43:14,540 --> 00:43:17,910 แม้ว่าคุณจะกล่าวว่าทฤษฎีได้เร็วขึ้น เรารู้ว่าคุณเข้าใจชนิดของ 900 00:43:17,910 --> 00:43:19,470 ว่ามันเป็น 0 จาก 1 901 00:43:19,470 --> 00:43:22,820 และตารางแฮชในทางทฤษฎี ไม่ 0 จาก 1 902 00:43:22,820 --> 00:43:26,550 กล่าวถึงอะไรเกี่ยวกับรันไทม์ โดยทั่วไปมีคุณจุด 903 00:43:26,550 --> 00:43:32,640 แต่ "เร็ว" ที่สุดของการแก้ปัญหาใน กระดานขนาดใหญ่ที่ได้รับการพยายามเป็น 904 00:43:32,640 --> 00:43:34,990 วัตถุช้ากว่าการแก้ปัญหา ที่มีตารางแฮช 905 00:43:34,990 --> 00:43:37,250 ดังนั้นเร็วขึ้นในตัวของมันเอง ไม่เป็นความจริงจริงๆ 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> DAVID เจลัน: Dom เดอุดมอุดม 908 00:43:44,380 --> 00:43:46,686 ฉันอาจจะเป็นคนเดียวที่รู้ ว่าเป็นวิธีที่ควรจะ 909 00:43:46,686 --> 00:43:47,500 ได้รับการประกาศใช่ไหม 910 00:43:47,500 --> 00:43:50,400 >> ROB สลิง: ผมมีความคิดที่ไม่มีจริง 911 00:43:50,400 --> 00:43:51,650 >> DAVID เจลัน: มันทำ ความรู้สึกในหัวของฉัน 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB สลิง: ฉันทำอย่างใดอย่างหนึ่งนี้ 914 00:43:57,580 --> 00:43:58,020 ตกลง 915 00:43:58,020 --> 00:44:04,243 ดังนั้นนี้เป็นหนึ่งในสถานที่ที่คุณมีการวาด แผนภาพคล้ายกับคุณอาจ 916 00:44:04,243 --> 00:44:06,040 ได้เห็นในการสอบที่ผ่านมา 917 00:44:06,040 --> 00:44:12,200 เพื่อให้เพียงดูที่นี้ 918 00:44:12,200 --> 00:44:18,170 ดังนั้นจากโหนด HTML, เรามีสอง เด็กหัวและลำตัว 919 00:44:18,170 --> 00:44:20,570 ดังนั้นเราจึงสาขา - หัวและลำตัว 920 00:44:20,570 --> 00:44:22,280 ศีรษะมีแท็กชื่อ 921 00:44:22,280 --> 00:44:23,710 ดังนั้นเราจึงมีชื่อ 922 00:44:23,710 --> 00:44:28,450 >> ตอนนี้สิ่งหนึ่งที่ผู้คนจำนวนมาก ลืมคือโหนดข้อความเหล่านี้ 923 00:44:28,450 --> 00:44:30,430 องค์ประกอบภายในต้นไม้ต้นนี้ 924 00:44:30,430 --> 00:44:36,260 ดังนั้นที่นี่เราเกิดขึ้นที่จะดึงพวกเขาเป็นวงรี ความแตกต่างของพวกเขาจากเหล่านี้ 925 00:44:36,260 --> 00:44:37,380 ชนิดของโหนด 926 00:44:37,380 --> 00:44:41,450 แต่ยังแจ้งให้ทราบที่นี่เรามีด้านบน กลางและล่างจะจบลงด้วยการ 927 00:44:41,450 --> 00:44:42,560 โหนดข้อความ 928 00:44:42,560 --> 00:44:46,250 ดังนั้นลืมที่ค่อนข้าง ของข้อผิดพลาดทั่วไป 929 00:44:46,250 --> 00:44:48,770 >> ร่างกายมีลูกสามคน - ทั้งสาม divs 930 00:44:48,770 --> 00:44:53,340 ดังนั้น div, div div แล้วข้อความ เด็กโหนดของ divs ที่ 931 00:44:53,340 --> 00:44:55,900 ที่มันสวยมาก คำถามที่ 932 00:44:55,900 --> 00:44:57,860 >> DAVID เจลัน: และก็คุ้มค่าสังเกต แม้ว่าเราจะไม่ได้อาศัยอยู่ในเหล่านี้ 933 00:44:57,860 --> 00:45:01,040 รายละเอียดในเวลาที่เราใช้จ่ายในการ JavaScript, ว่าคำสั่งไม่ใน 934 00:45:01,040 --> 00:45:02,290 ความเป็นจริงไม่ว่าในทางเทคนิค 935 00:45:02,290 --> 00:45:06,330 ดังนั้นถ้าหัวมาก่อนที่ร่างใน HTML แล้วมันจะปรากฏ 936 00:45:06,330 --> 00:45:08,860 ด้านซ้ายของร่างกายใน DOM ที่เกิดขึ้นจริง 937 00:45:08,860 --> 00:45:12,265 ว่าเขาคือโดยทั่วไปเพียง FYI, สิ่งที่เรียกว่าการสั่งซื้อเอกสารที่ 938 00:45:12,265 --> 00:45:13,260 มันไม่สำคัญ 939 00:45:13,260 --> 00:45:17,470 และถ้าคุณได้รับการดำเนินการแยกวิเคราะห์, โปรแกรมที่อ่าน HTML ในอาคาร 940 00:45:17,470 --> 00:45:20,960 ขึ้นต้นไม้ในหน่วยความจำที่จะซื่อสัตย์ สังหรณ์ใจว่าอาจเป็นสิ่งที่คุณ 941 00:45:20,960 --> 00:45:24,720 ทำต่อไป - บนลงล่าง จากซ้ายไปขวา 942 00:45:24,720 --> 00:45:26,116 >> ROB สลิง: คำถามเกี่ยวกับการที่ 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 ฉันควรทำอย่างใดอย่างหนึ่งต่อไปหรือไม่ 945 00:45:30,000 --> 00:45:32,380 >> DAVID เจลัน: แน่นอน 946 00:45:32,380 --> 00:45:33,810 >> ROB สลิง: OK 947 00:45:33,810 --> 00:45:39,320 ดังนั้นนี่คือบัฟเฟอร์บุกรุก คำถามโจมตี 948 00:45:39,320 --> 00:45:43,740 สิ่งสำคัญที่ต้องจำที่นี่คือ ดีว่าอาจจะเคล็ดลับศัตรู 949 00:45:43,740 --> 00:45:46,170 โปรแกรมนี้ในการดำเนินงาน โค้ด? 950 00:45:46,170 --> 00:45:51,860 ดังนั้น argv1 บรรทัดคำสั่งแรก อาร์กิวเมนต์โปรแกรมนี้ที่สามารถเป็น 951 00:45:51,860 --> 00:45:53,920 ยาวโดยพล 952 00:45:53,920 --> 00:45:59,160 แต่ที่นี่เรากำลังใช้ memcpy การคัดลอก argv1 ซึ่งที่นี่เป็นแถบ 953 00:45:59,160 --> 00:46:00,165 เราผ่านมันเป็นอาร์กิวเมนต์ 954 00:46:00,165 --> 00:46:02,050 และดังนั้นจึงสละบนแถบชื่อ 955 00:46:02,050 --> 00:46:08,040 >> ดังนั้นเรา memcpying บาร์ ลงในบัฟเฟอร์นี้ค 956 00:46:08,040 --> 00:46:09,400 เรามีวิธีการมากมายที่คัดลอกไบต์? 957 00:46:09,400 --> 00:46:14,040 ดีไบต์บาร์จำนวนมาก แต่ที่เกิดขึ้นกับ จะใช้ความยาวของการโต้แย้งว่า 958 00:46:14,040 --> 00:46:17,930 แต่คเป็นเพียง 12 ไบต์กว้าง 959 00:46:17,930 --> 00:46:22,280 ดังนั้นหากเราพิมพ์อาร์กิวเมนต์บรรทัดคำสั่ง ที่ยาวกว่า 12 ไบต์เรา 960 00:46:22,280 --> 00:46:25,470 จะล้นนี้ บัฟเฟอร์โดยเฉพาะอย่างยิ่ง 961 00:46:25,470 --> 00:46:31,000 ตอนนี้วิธีที่อาจศัตรูหลอกลวง โปรแกรมในการรันโค้ดโดยพล? 962 00:46:31,000 --> 00:46:34,910 >> ดังนั้นจำไว้ว่าที่นี่ หลักจะเรียก foo 963 00:46:34,910 --> 00:46:37,340 และอื่น ๆ แล้วหลักเรียก foo 964 00:46:37,340 --> 00:46:40,408 ลองวาดนี้ 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 ดังนั้นเราจึงมีสแต็คของเรา 967 00:46:46,990 --> 00:46:49,090 และหลักมีกรอบสแต็ค ที่ด้านล่าง 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 ในบางจุดหลักเรียก foo 970 00:46:53,250 --> 00:46:55,390 ดีทันทีสายหลัก foo 971 00:46:55,390 --> 00:46:57,130 และเพื่อให้ได้รับ foo กรอบสแต็คของตัวเอง 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> ตอนนี้ในบางจุด foo จะกลับมา 974 00:47:02,220 --> 00:47:06,810 และเดินกลับ foo เราจำเป็นต้องรู้ที่ สิ่งที่บรรทัดของรหัสภายในของเราเป็นหลัก 975 00:47:06,810 --> 00:47:10,610 อยู่ในลำดับที่จะทราบว่า เราควรจะกลับมาทำงานในหลัก 976 00:47:10,610 --> 00:47:13,100 เราสามารถเรียก foo จากทั้งหมด พวงของสถ​​านที่ที่แตกต่างกัน 977 00:47:13,100 --> 00:47:14,620 เราจะรู้ได้อย่างไรว่าจะกลับมา? 978 00:47:14,620 --> 00:47:16,460 ดีเราจำเป็นต้องเก็บบางที่ 979 00:47:16,460 --> 00:47:23,010 >> ดังนั้นที่ถูกต้องรอบที่นี่เราเก็บ ที่เราควรจะกลับไปอีกครั้ง 980 00:47:23,010 --> 00:47:24,070 ผลตอบแทน foo 981 00:47:24,070 --> 00:47:26,350 และนี่คือที่อยู่ผู้ส่ง 982 00:47:26,350 --> 00:47:30,490 ดังนั้นวิธีการที่ฝ่ายตรงข้ามอาจจะใช้ประโยชน์ นี้เป็นความจริงที่ว่า 983 00:47:30,490 --> 00:47:37,550 บัฟเฟอร์นี้คจะถูกเก็บไว้ให้ บอกว่าที่นี่เป็นค 984 00:47:37,550 --> 00:47:39,690 ดังนั้นเราจึงได้มี 12 ไบต์สำหรับค 985 00:47:39,690 --> 00:47:40,540 นี้เป็นค 986 00:47:40,540 --> 00:47:43,030 และนี่คือกองแหวน foo ของ 987 00:47:43,030 --> 00:47:49,970 ดังนั้นหากผู้ใช้ที่เป็นอันตรายเข้ามามากขึ้น กว่า 12 ไบต์หรือพวกเขาป้อนคำสั่ง 988 00:47:49,970 --> 00:47:54,570 อาร์กิวเมนต์บรรทัดที่นานกว่า 12 ตัวละครแล้วเรากำลังจะ 989 00:47:54,570 --> 00:47:57,540 หน่วยความจำล้นนี้ 990 00:47:57,540 --> 00:47:59,910 >> เราสามารถเก็บไป 991 00:47:59,910 --> 00:48:02,220 และในบางจุดที่เราจะไปไกล พอที่จะทำให้เราเริ่มต้น 992 00:48:02,220 --> 00:48:05,120 เขียนทับอยู่กลับนี้ 993 00:48:05,120 --> 00:48:08,310 ดังนั้นเมื่อเราเขียนทับอยู่กลับมา นี้หมายความว่าเมื่อ foo 994 00:48:08,310 --> 00:48:14,220 ผลตอบแทนที่เรากำลังจะกลับไปที่ใดก็ตาม ใช้ที่เป็นอันตรายจะบอกให้โดย 995 00:48:14,220 --> 00:48:19,490 สิ่งที่ค่ามันเข้ามาโดยสิ่งที่ ตัวละครที่ผู้ใช้ป้อน 996 00:48:19,490 --> 00:48:24,320 ดังนั้นหากผู้ใช้ที่เป็นอันตรายจะถูก ฉลาดโดยเฉพาะอย่างยิ่งเขาสามารถมีนี้ 997 00:48:24,320 --> 00:48:29,255 กลับไปที่ไหนสักแห่งใน printDef ฟังก์ชั่นหรือที่ไหนสักแห่งใน malloc 998 00:48:29,255 --> 00:48:31,830 ฟังก์ชั่นโดยพลการเพียงใดก็ได้ 999 00:48:31,830 --> 00:48:38,420 >> แต่ถึงแม้จะฉลาดมากขึ้นเป็นสิ่งที่ถ้าเขามี ผู้ใช้กลับไปที่นี่ 1000 00:48:38,420 --> 00:48:41,920 และจากนั้นคุณเริ่มดำเนินการ เหล่านี้เป็นสายของรหัส 1001 00:48:41,920 --> 00:48:46,610 ดังนั้นที่จุดที่ผู้ใช้สามารถป้อน สิ่งที่เขาต้องการเข้ามาในภูมิภาคนี้ 1002 00:48:46,610 --> 00:48:52,210 และเขามีการควบคุมที่สมบูรณ์ กว่าโปรแกรมของคุณ 1003 00:48:52,210 --> 00:48:53,460 คำถามที่ 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 ดังนั้นคำถามต่อไปคือที่สมบูรณ์ เท่าไรของ foo ในลักษณะ 1006 00:49:00,970 --> 00:49:02,620 ว่ามันเป็นความเสี่ยงที่ไม่จำเป็น 1007 00:49:02,620 --> 00:49:03,870 >> ดังนั้นจึงมีสองวิธี คุณจะได้ทำนี้ 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 เรายังมีคเพียง เป็นความยาว 12 1010 00:49:13,330 --> 00:49:16,480 คุณอาจจะมีการเปลี่ยนแปลงนี้ เป็นส่วนหนึ่งของการแก้ปัญหาของคุณ 1011 00:49:16,480 --> 00:49:18,930 นอกจากนี้เรายังเพิ่มการตรวจสอบที่จะทำให้ แน่ใจว่าบาร์ก็ไม่เป็นโมฆะ 1012 00:49:18,930 --> 00:49:24,460 แม้ว่าคุณจะไม่จำเป็นต้อง ว่าสำหรับเครดิตเต็ม 1013 00:49:24,460 --> 00:49:27,690 ดังนั้นเรากำลังตรวจสอบครั้งแรก ความยาวสตริงของแถบ 1014 00:49:27,690 --> 00:49:31,650 ถ้ามันมากขึ้นกว่า 12 แล้ว ไม่จริงทำสำเนา 1015 00:49:31,650 --> 00:49:33,010 เพื่อให้เป็นวิธีหนึ่งในการแก้ไขมัน 1016 00:49:33,010 --> 00:49:36,750 >> วิธีการแก้ไขมันก็คือแทน มีคเพียง แต่จะมีความยาว 12, มีมัน 1017 00:49:36,750 --> 00:49:39,310 จะมีระยะเวลาใน strlen (บาร์) 1018 00:49:39,310 --> 00:49:43,370 วิธีการแก้ไขมันก็คือ ที่จริงเพิ่งกลับ 1019 00:49:43,370 --> 00:49:46,690 ดังนั้นถ้าคุณมีอากาศเพียงกำจัดทั้งหมดของ นี้ถ้าคุณได้เพียงแค่ลบออกทั้งหมด 1020 00:49:46,690 --> 00:49:51,830 บรรทัดของรหัสที่คุณจะได้รับ เครดิตเต็มรูปแบบตั้งแต่ฟังก์ชั่นนี้ 1021 00:49:51,830 --> 00:49:54,150 ไม่จริงสำเร็จอะไร 1022 00:49:54,150 --> 00:49:57,650 มันคัดลอกบรรทัดคำสั่ง อาร์กิวเมนต์เป็น array ในบาง 1023 00:49:57,650 --> 00:49:59,960 กรอบสแต็คของท้องถิ่น 1024 00:49:59,960 --> 00:50:01,310 และแล้วสิ่งที่จะกลับมา 1025 00:50:01,310 --> 00:50:04,020 และประสบความสำเร็จในสิ่งที่มันจะหายไป 1026 00:50:04,020 --> 00:50:09,740 ดังนั้นการกลับมาก็เพียงพอ วิธีการรับเครดิตเต็ม 1027 00:50:09,740 --> 00:50:13,425 >> DAVID เจลัน: ไม่เชิงจิตวิญญาณของ คำถาม แต่ยอมรับต่อ 1028 00:50:13,425 --> 00:50:15,580 spec กระนั้น 1029 00:50:15,580 --> 00:50:18,260 >> ROB สลิง: คำถามใด ๆ ของที่ 1030 00:50:18,260 --> 00:50:22,270 สิ่งหนึ่งที่คุณอย่างน้อย จำเป็นต้องมีการรวบรวมรหัส 1031 00:50:22,270 --> 00:50:24,810 ดังนั้นแม้ว่าในทางเทคนิคคุณไม่ได้ เสี่ยงถ้ารหัสของคุณไม่ได้ 1032 00:50:24,810 --> 00:50:29,130 รวบรวมเราไม่ได้ยอมรับว่า 1033 00:50:29,130 --> 00:50:31,350 ไม่มีคำถาม 1034 00:50:31,350 --> 00:50:33,320 ตกลง 1035 00:50:33,320 --> 00:50:34,580 >> DAVID เจลัน: คุณต้องการ ที่จะบอกว่าชื่อนี้ 1036 00:50:34,580 --> 00:50:37,230 >> ROB สลิง: เลขที่ 1037 00:50:37,230 --> 00:50:40,470 >> DAVID เจลัน: ดังนั้นในหนึ่งนี้นี้ เป็นทั้งข่าวดีหรือข่าวร้าย 1038 00:50:40,470 --> 00:50:43,870 นี้เป็นอย่างแท้จริงปัญหาเดียวกัน เป็นคำถามแรก 1039 00:50:43,870 --> 00:50:46,140 และก็เกือบจะเหมือนกัน ปัญหาเป็น pset1 1040 00:50:46,140 --> 00:50:49,980 แต่มันก็ง่ายจงใจจะ ปิรามิดที่เรียบง่ายอย่างใดอย่างหนึ่งที่สามารถ 1041 00:50:49,980 --> 00:50:52,330 แก้ไขได้ด้วยเล็กน้อย ย้ำง่าย 1042 00:50:52,330 --> 00:50:55,680 และจริงๆสิ่งที่เราได้รับที่ ที่นี่เป็นไม่มากตรรกะ 1043 00:50:55,680 --> 00:50:58,100 เพราะอาจจะโดยจุดนี้คุณ สะดวกสบายมากขึ้นกว่าที่คุณมี 1044 00:50:58,100 --> 00:51:01,850 ในหนึ่งสัปดาห์ด้วยการลูปหรือทำไมลูป แต่จริงๆการหยอกล้อกันว่า 1045 00:51:01,850 --> 00:51:04,790 คุณน้อยความสะดวกสบายด้วย ความคิดที่ว่า PHP ไม่ได้เป็นเพียงเกี่ยวกับสิ่งที่ 1046 00:51:04,790 --> 00:51:05,290 การเขียนโปรแกรม 1047 00:51:05,290 --> 00:51:07,820 มันสามารถจริงจะใช้เป็นภาษา การเขียนโปรแกรมบรรทัดคำสั่ง 1048 00:51:07,820 --> 00:51:10,060 >> และแน่นอนว่าเป็นสิ่งที่เรากำลังพยายาม เพื่อดึงดูดความสนใจของคุณไปยัง 1049 00:51:10,060 --> 00:51:12,060 นี้เป็นโปรแกรมบรรทัดคำสั่ง PHP 1050 00:51:12,060 --> 00:51:16,690 ดังนั้นรหัส C ที่นี่ในขณะที่ถูกต้อง ใน C ไม่ถูกต้องสำหรับ PHP 1051 00:51:16,690 --> 00:51:17,940 แต่รหัสจริงๆเหมือนกัน 1052 00:51:17,940 --> 00:51:21,720 ถ้าคุณเปรียบเทียบโซลูชั่นสำหรับการทดสอบ 0 กับแบบทดสอบ 1, คุณจะพบว่า 1053 00:51:21,720 --> 00:51:25,630 ก็เหมือนกันเกือบยกเว้น บางสัญญาณดอลลาร์และ 1054 00:51:25,630 --> 00:51:27,250 ไม่มีชนิดข้อมูล 1055 00:51:27,250 --> 00:51:31,720 โดยเฉพาะอย่างยิ่งถ้าเราใช้เวลาดูที่นี่ คุณจะเห็นว่าเราย้ำในการนี​​้ 1056 00:51:31,720 --> 00:51:33,730 กรณีที่ 1 ขึ้นถึง 7 1057 00:51:33,730 --> 00:51:34,910 >> เราจะได้ทำมัน 0 ดัชนี 1058 00:51:34,910 --> 00:51:37,320 แต่บางครั้งผมคิดว่ามันเป็นเพียง จิตใจง่ายที่จะคิดเกี่ยวกับสิ่งที่ 1059 00:51:37,320 --> 00:51:38,200 1-7 1060 00:51:38,200 --> 00:51:40,300 ถ้าคุณต้องการบล็อกหนึ่งแล้วสอง บล็อกแล้วสามแล้ว 1061 00:51:40,300 --> 00:51:41,770 จุดจุดจุดเจ็ด 1062 00:51:41,770 --> 00:51:45,960 เราได้เจถูกเริ่มต้นได้ที่ 1 แล้วนับถึงฉัน 1063 00:51:45,960 --> 00:51:48,150 และทุกอย่างที่นี่เป็น อย่างอื่นเหมือนกัน 1064 00:51:48,150 --> 00:51:49,790 แต่ค่าของโน้ตเป็น สองสิ่ง 1065 00:51:49,790 --> 00:51:53,230 เราให้คุณทั้งสองสายเป็นครั้งแรกนี้ หนึ่งชื่อ goofily เป็น shebang 1066 00:51:53,230 --> 00:51:54,560 เพื่อปังคม 1067 00:51:54,560 --> 00:51:58,770 และที่เพียงแค่ระบุเส้นทาง โฟลเดอร์ที่โปรแกรมสามารถ 1068 00:51:58,770 --> 00:52:02,160 พบว่าคุณต้องการใช้ การตีความแฟ้มนี้ 1069 00:52:02,160 --> 00:52:04,710 >> แล้วสายหลังจากนั้นของ แน่นอนหมายถึงการเข้าสู่โหมด PHP 1070 00:52:04,710 --> 00:52:07,740 และสายที่ด้านล่างสุด หมายถึงการออกจากโหมด PHP 1071 00:52:07,740 --> 00:52:09,740 และงานนี้โดยทั่วไปด้วย แปลภาษา 1072 00:52:09,740 --> 00:52:14,370 มันเป็นชนิดที่น่ารำคาญถ้าคุณเขียน โปรแกรมในไฟล์ที่เรียกว่า foo.php 1073 00:52:14,370 --> 00:52:17,320 และจากนั้นผู้ใช้ของคุณมีเพียงแค่ จำได้ตกลงที่จะใช้โปรแกรมนี้ผม 1074 00:52:17,320 --> 00:52:22,320 ต้องพิมพ์ "foo.php พื้นที่ PHP." ชนิด ที่น่ารำคาญถ้าไม่มีอะไรอื่น 1075 00:52:22,320 --> 00:52:25,270 และยังแสดงให้เห็นว่าโปรแกรมของคุณ เขียนใน PHP ซึ่งเป็นไม่ได้ทั้งหมด 1076 00:52:25,270 --> 00:52:27,060 ที่ให้แสงสว่างสำหรับผู้ใช้ 1077 00:52:27,060 --> 00:52:30,100 >> เพื่อให้คุณสามารถลบ PHP. ทั้งหมด จำจากการบรรยาย 1078 00:52:30,100 --> 00:52:35,690 และคุณสามารถทำได้จริง. / foo ถ้า คุณได้ chmodded มันด้วยการทำให้ 1079 00:52:35,690 --> 00:52:36,500 ปฏิบัติการ 1080 00:52:36,500 --> 00:52:39,630 ดังนั้น chmod + x foo จะทำที่ 1081 00:52:39,630 --> 00:52:41,460 และถ้าคุณยังเพิ่ม shebang ที่นี่ 1082 00:52:41,460 --> 00:52:45,320 แต่จริงๆปัญหาที่ได้รับ พิมพ์ออกบางอย่างเช่นนี้ 1083 00:52:45,320 --> 00:52:51,100 ไม่ใช้ HTML ไม่รหัส C-แน่นอน PHP เพียงบางส่วน 1084 00:52:51,100 --> 00:52:54,100 ดังนั้นไมโลแล้วกลับมาในปัญหา 25 1085 00:52:54,100 --> 00:52:58,050 และใน 25 คุณจะได้รับต่อไปนี้ รหัสโครงกระดูกซึ่งเป็น 1086 00:52:58,050 --> 00:52:59,730 หน้าเว็บง่ายสวย 1087 00:52:59,730 --> 00:53:04,230 และเป็นส่วนหนึ่งฉ่ำ HTML ฉลาดลดลง ที่นี่ที่เรามีอยู่ภายในของร่างกาย 1088 00:53:04,230 --> 00:53:09,160 รูปแบบที่มีรหัสเฉพาะของปัจจัยการผลิต ภายในซึ่งเป็นสองปัจจัยการผลิตอย่างใดอย่างหนึ่ง 1089 00:53:09,160 --> 00:53:11,950 กับความคิดของชื่อหนึ่ง กับความคิดของปุ่ม 1090 00:53:11,950 --> 00:53:14,240 >> อันแรกก็คือประเภทข้อความ ประเภทที่สองของการส่ง 1091 00:53:14,240 --> 00:53:16,930 และเพื่อให้เราให้คุณเป็นจริงมากขึ้น ส่วนผสมกว่าที่คุณจำเป็นต้องใช้เพียงเพื่อให้ 1092 00:53:16,930 --> 00:53:19,230 พวกคุณมีตัวเลือกที่ การแก้ปัญหานี้ 1093 00:53:19,230 --> 00:53:21,130 คุณไม่จำเป็นต้องใช้อย่างเคร่งครัด ทั้งหมดของรหัสเหล่านี้ 1094 00:53:21,130 --> 00:53:23,580 แต่มันช่วยให้คุณสามารถที่จะแก้ปัญหา มันในรูปแบบที่แตกต่างกัน 1095 00:53:23,580 --> 00:53:27,050 และขึ้นที่ด้านบนสังเกตว่า วัตถุประสงค์คือการเรียก 1096 00:53:27,050 --> 00:53:27,960 หน้าต่างเช่นนี้ - 1097 00:53:27,960 --> 00:53:28,780 สวัสดีไมโล! - 1098 00:53:28,780 --> 00:53:31,270 จะปรากฏขึ้นในเบราว์เซอร์ที่ใช้ ง่ายสุดถ้า 1099 00:53:31,270 --> 00:53:33,190 ไม่น่าเกลียดฟังก์ชั่นการแจ้งเตือน 1100 00:53:33,190 --> 00:53:37,480 ดังนั้นในท้ายที่สุดนี้เดือดลง แนวคิดอย่างใดฟัง 1101 00:53:37,480 --> 00:53:41,290 ส่งในรูปแบบที่ฝั่งไคลเอ็นต์ ไม่ด้านเซิร์ฟเวอร์อย่างใด 1102 00:53:41,290 --> 00:53:45,640 การตอบสนองต่อการส่งว่า โลภค่าที่ผู้ใช้พิมพ์ 1103 00:53:45,640 --> 00:53:50,120 ในฟิลด์ชื่อแล้ว การแสดงมันในร่างกายของการแจ้งเตือน 1104 00:53:50,120 --> 00:53:53,460 >> ดังนั้นวิธีหนึ่งที่คุณสามารถทำเช่นนี้กับ jQuery ซึ่งมีลักษณะเล็ก ๆ น้อย ๆ 1105 00:53:53,460 --> 00:53:56,880 syntactically งงในตอนแรก 1106 00:53:56,880 --> 00:54:00,760 คุณสามารถทำเช่นนี้กับรหัส DOM บริสุทธิ์ - document.getelement ตามหมายเลข 1107 00:54:00,760 --> 00:54:02,530 แต่ขอให้ดูที่รุ่นนี้ 1108 00:54:02,530 --> 00:54:05,110 ฉันมีสองสิ่งที่สำคัญ บรรทัดแรก 1109 00:54:05,110 --> 00:54:09,460 ดังนั้นหนึ่งเรามีเส้นนี้ซึ่งเป็น เหมือนกันกับสิ่งที่คุณอาจได้เห็น 1110 00:54:09,460 --> 00:54:13,830 ในผมเชื่อว่า form2.html จากการเรียนในสัปดาห์ที่ 9 1111 00:54:13,830 --> 00:54:16,960 และนี่เป็นเพียงการบอกว่าการดำเนินการ รหัสต่อไปนี้เมื่อ 1112 00:54:16,960 --> 00:54:18,430 เอกสารพร้อม 1113 00:54:18,430 --> 00:54:21,770 นี้มีความสำคัญเพียงเพราะ หน้า HTML จะอ่านบน 1114 00:54:21,770 --> 00:54:23,280 ด้านล่างจากซ้ายไปขวา 1115 00:54:23,280 --> 00:54:27,910 >> และดังนั้นถ้าคุณพยายามที่จะทำ บางสิ่งบางอย่างในรหัสขึ้นที่นี่เพื่อ DOM บาง 1116 00:54:27,910 --> 00:54:31,560 องค์ประกอบแท็กบางอย่างที่ว่าลง ที่นี่คุณกำลังทำมันเร็วเกินไป 1117 00:54:31,560 --> 00:54:34,220 เพราะมีไม่ได้ ถูกอ่านในหน่วยความจำ 1118 00:54:34,220 --> 00:54:37,740 ดังนั้นด้วยการพูดว่า document.ready นี้ สายที่เรากำลังจะบอกว่า 1119 00:54:37,740 --> 00:54:39,040 นี่คือรหัสบางเบราว์เซอร์ 1120 00:54:39,040 --> 00:54:42,440 แต่ไม่ดำเนินการนี​​้จนกว่าทั้ง พร้อมเอกสารที่เป็น DOM 1121 00:54:42,440 --> 00:54:44,320 ต้นไม้ที่มีอยู่ในหน่วยความจำ 1122 00:54:44,320 --> 00:54:47,110 หนึ่งนี้เป็นเพียงเล็กน้อยมากขึ้น ตรงไปตรงมาถ้า syntactically 1123 00:54:47,110 --> 00:54:51,890 ที่แตกต่างกันเล็กน้อยที่ฉันพูดคว้า องค์ประกอบที่ไม่ซ้ำกัน 1124 00:54:51,890 --> 00:54:53,560 ระบุเป็นปัจจัยการผลิต 1125 00:54:53,560 --> 00:54:56,220 นั่นคือสิ่งที่แท็กแฮช หมายถึง, รหัสเฉพาะ 1126 00:54:56,220 --> 00:54:58,070 แล้วฉันโทร. ส่ง 1127 00:54:58,070 --> 00:55:01,660 >> ดังนั้น. ส่งที่นี่เป็นฟังก์ชั่นอื่น ที่รู้จักกันเป็นวิธีการที่ 1128 00:55:01,660 --> 00:55:05,850 ภายในของวัตถุในมือซ้าย ด้านข้างมีที่ผมไม่ได้เน้น 1129 00:55:05,850 --> 00:55:08,990 ดังนั้นหากคุณคิดของปัจจัยการผลิตเป็นวัตถุ ในหน่วยความจำ - และแน่นอนมันเป็น 1130 00:55:08,990 --> 00:55:10,440 มันเป็นโหนดในต้นไม้ - 1131 00:55:10,440 --> 00:55:16,580 . วิธีการส่งเมื่อฟอร์มนี้กับ ID นี้จะถูกส่งมาดำเนินการ 1132 00:55:16,580 --> 00:55:17,700 รหัสต่อไปนี้ 1133 00:55:17,700 --> 00:55:20,290 ฉันไม่สนใจสิ่งที่ชื่อของ ฟังก์ชั่นที่ผมดำเนินการ 1134 00:55:20,290 --> 00:55:23,760 ดังนั้นที่นี่ฉันใช้เป็นมาก่อนว่ามีอะไร ฟังก์ชั่นที่เรียกว่าแลมบ์ดาหรือ 1135 00:55:23,760 --> 00:55:24,720 ฟังก์ชั่นที่ไม่ระบุชื่อ 1136 00:55:24,720 --> 00:55:27,640 มันไม่ได้อยู่ที่ทุกคนรู้ ที่น่าสนใจอื่น ๆ กว่าที่มีชื่อไม่มี 1137 00:55:27,640 --> 00:55:30,220 ซึ่งเป็นเรื่องปกติถ้าคุณเพียง เคยไปเรียกว่าครั้งเดียว 1138 00:55:30,220 --> 00:55:34,490 และภายในมีการจัดการที่จริงผม ส่งแบบฟอร์ม 1139 00:55:34,490 --> 00:55:36,810 ครั้งแรกที่ผมประกาศตัวแปร เรียกว่าค่า 1140 00:55:36,810 --> 00:55:40,610 และแล้วสิ่งที่เป็นผลของการนี​​้ ส่วนไฮไลต์ที่นี่ตอนนี้ 1141 00:55:40,610 --> 00:55:44,755 สิ่งที่จะทำที่ ระดับสูงสำหรับฉันหรือไม่ 1142 00:55:44,755 --> 00:55:48,539 >> ผู้ชม: จะได้รับค่าที่ ผู้ใช้ไม่ได้ใน HTML ที่ด้านล่าง 1143 00:55:48,539 --> 00:55:50,920 จะได้รับ ID ที่แล้ว พบว่าค่าของมัน 1144 00:55:50,920 --> 00:55:51,590 >> DAVID เจลัน: แน่นอน 1145 00:55:51,590 --> 00:55:54,300 มันคว้าโหนดที่มีที่ไม่ซ้ำกัน ระบุเป็นชื่อ 1146 00:55:54,300 --> 00:55:56,900 จะได้รับค่าที่อยู่ในนั้นซึ่ง คือสมมุติสิ่งที่ผู้ใช้ 1147 00:55:56,900 --> 00:55:58,190 พิมพ์เขาหรือตัวเอง 1148 00:55:58,190 --> 00:56:01,020 และจากนั้นจะเก็บที่อยู่ใน ค่าตัวแปรที่เรียกว่า 1149 00:56:01,020 --> 00:56:03,720 เช่นกันคุณอาจจะยังมี การกระทำเช่นนี้แตกต่างกันเล็กน้อย 1150 00:56:03,720 --> 00:56:09,250 ทั้งหมดได้รับการยอมรับโดยการทำบางสิ่งบางอย่าง ค่าโกหก var ได้รับ 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 และนี่คือเหตุผลที่มันเป็นเพียงเล็กน้อย น่าเบื่อที่จะไม่ใช้ jQuery 1154 00:56:15,460 --> 00:56:16,710 "ชื่อ" ค่า. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 ดังนั้นเป็นที่ยอมรับกันโดยสิ้นเชิง 1157 00:56:19,620 --> 00:56:22,770 วิธีต่างๆในการทำเช่นนี้ jQuery เพียง มีแนวโน้มที่จะเป็นเพียงเล็กน้อยสั้นมากขึ้นและ 1158 00:56:22,770 --> 00:56:25,230 แน่นอนที่นิยมมากขึ้น ในหมู่โปรแกรมเมอร์ 1159 00:56:25,230 --> 00:56:27,590 >> ตอนนี้ผมกำลังทำบิตของการมีสุขภาพจิตดี ตรวจสอบเพราะในปัญหา 1160 00:56:27,590 --> 00:56:30,820 คำสั่งเราอย่างชัดเจนกล่าวว่าถ้า ผู้ใช้ยังไม่ได้พิมพ์ แต่ของเขาหรือเธอ 1161 00:56:30,820 --> 00:56:32,580 ชื่อไม่แสดงการแจ้งเตือน 1162 00:56:32,580 --> 00:56:35,390 แต่คุณสามารถตรวจสอบว่าโดยเพียงแค่ ตรวจสอบสตริงที่ว่างเปล่าสำหรับ 1163 00:56:35,390 --> 00:56:37,850 อ้าง-นำมาอ้างว่ามี ไม่มีอะไรจริงมี 1164 00:56:37,850 --> 00:56:40,880 แต่ถ้ามันไม่เท่ากับคำพูดที่นำมาอ้าง-, ฉันต้องการที่จะเรียกการแจ้งเตือน 1165 00:56:40,880 --> 00:56:45,610 และเป็นส่วนหนึ่งที่น่าสนใจที่นี่เป็นที่ เรากำลังใช้ประกอบบวกซึ่ง 1166 00:56:45,610 --> 00:56:48,130 ไม่ว่าใน JavaScript? 1167 00:56:48,130 --> 00:56:48,740 concatenate 1168 00:56:48,740 --> 00:56:50,690 ดังนั้นมันก็เหมือน PHPs จุดประกอบ 1169 00:56:50,690 --> 00:56:52,820 ความคิดเดียวกันไวยากรณ์ที่แตกต่างกันเล็กน้อย 1170 00:56:52,820 --> 00:56:55,280 และฉันเพียงแค่การสร้างสตริงที่ คุณเห็นในการถ่ายภาพหน้าจอ - 1171 00:56:55,280 --> 00:56:57,750 สวัสดีดังนั้นจึง 1172 00:56:57,750 --> 00:56:59,200 >> แล้วรายละเอียดล่าสุดนี้ 1173 00:56:59,200 --> 00:57:04,970 ทำไมฉันกลับภายในเท็จ ของการทำงานที่ไม่ระบุชื่อนี้ 1174 00:57:04,970 --> 00:57:07,420 >> ผู้ชม: ไม่มีค่าเป็น 1175 00:57:07,420 --> 00:57:09,380 คุณใส่มันในรูปแบบ 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 มันก็บอกว่าถ้าค่าไม่ได้ เท่ากับว่างแล้วทำมัน 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 มีที่ว่างในการส่งที่เป็น 1180 00:57:20,940 --> 00:57:21,170 >> DAVID เจลัน: OK 1181 00:57:21,170 --> 00:57:21,640 ระวังว่า 1182 00:57:21,640 --> 00:57:22,830 ไม่มีใครที่นี่ 1183 00:57:22,830 --> 00:57:25,510 และเท็จผลตอบแทนที่อยู่นอก ของถ้าเงื่อนไข 1184 00:57:25,510 --> 00:57:29,470 ดังนั้นนี่เน้นสายกลับเท็จ รันไม่ว่าสิ่งที่เมื่อ 1185 00:57:29,470 --> 00:57:32,310 การส่งแบบฟอร์ม 1186 00:57:32,310 --> 00:57:36,810 สิ่งที่ไม่กลับมาภายในเท็จนี้ ตัวจัดการเหตุการณ์ที่จะเรียกว่า 1187 00:57:36,810 --> 00:57:38,450 เหตุการณ์ในคำถาม ถูกส่ง? 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> ผู้ชม: เพ​​ราะมัน เพียง แต่เกิดขึ้นครั้งเดียว 1190 00:57:44,470 --> 00:57:45,320 >> DAVID เจลันเท่านั้นที่เกิดขึ้นครั้งเดียว 1191 00:57:45,320 --> 00:57:46,821 ไม่เชิง 1192 00:57:46,821 --> 00:57:47,292 ใช่? 1193 00:57:47,292 --> 00:57:50,589 >> ผู้ชม: จะป้องกันไม่ให้รูปแบบจาก ส่งไปยังการทำงานเริ่มต้นที่ 1194 00:57:50,589 --> 00:57:52,480 ซึ่งจะทำให้การโหลดหน้า 1195 00:57:52,480 --> 00:57:53,110 >> DAVID เจลัน: แน่นอน 1196 00:57:53,110 --> 00:57:56,490 ดังนั้นฉันมากระยะการส่งที่นี่ เพราะฉันว่ารูปแบบเป็น 1197 00:57:56,490 --> 00:57:57,670 ที่ถูกส่งมา 1198 00:57:57,670 --> 00:58:02,240 แต่ในขณะที่คุณแนะนำก็จริงไม่ได้ ถูกส่งมาในทาง HTTP จริง 1199 00:58:02,240 --> 00:58:06,870 เมื่อคุณคลิกส่งเพราะของเรา จัดการ onSubmit เรา intercepting 1200 00:58:06,870 --> 00:58:09,040 ส่งแบบฟอร์มที่จึงจะพูด 1201 00:58:09,040 --> 00:58:11,290 แล้วเรากำลังทำสิ่งที่เรา ที่มีรหัส JavaScript 1202 00:58:11,290 --> 00:58:14,070 แต่ฉันกลับจงใจเท็จ เพราะสิ่งที่ฉันไม่ต้องการที่จะเกิดขึ้น 1203 00:58:14,070 --> 00:58:18,430 แยกที่สองต่อมาเป็นรูปแบบทั้ง ตัวเองที่จะถูกส่งไปยังเว็บ 1204 00:58:18,430 --> 00:58:22,800 เซิร์ฟเวอร์ที่มีคู่ค่าที่สำคัญโดยการเปลี่ยน URL ที่จะได้สิ่งที่ต้องการ 1205 00:58:22,800 --> 00:58:26,180 q = แมวหรือสิ่งที่เราได้ ตัวอย่างเช่นในชั้นเรียน 1206 00:58:26,180 --> 00:58:29,640 ฉันไม่ต้องการที่จะเกิดขึ้นเพราะ ไม่มีการฟังเซิร์ฟเวอร์สำหรับการนี​​้ 1207 00:58:29,640 --> 00:58:30,690 ส่งแบบฟอร์ม 1208 00:58:30,690 --> 00:58:32,320 ก็ทำอย่างหมดจดในรหัส JavaScript 1209 00:58:32,320 --> 00:58:35,760 และนั่นคือเหตุผลที่ผมไม่ได้มี แอตทริบิวต์การกระทำในรูปแบบของฉันเพราะฉัน 1210 00:58:35,760 --> 00:58:38,870 ไม่ได้ตั้งใจสำหรับการ เคยไปที่เซิร์ฟเวอร์ 1211 00:58:38,870 --> 00:58:40,780 >> ดังนั้นมันถูกส่งมา 1212 00:58:40,780 --> 00:58:44,340 แต่เรากำลังสกัดกั้นรูปแบบที่ การส่งและป้องกันการเริ่มต้น 1213 00:58:44,340 --> 00:58:47,477 พฤติกรรมซึ่งเป็นจริง ไปตลอดทางไปยังเซิร์ฟเวอร์ 1214 00:58:47,477 --> 00:58:48,730 >> ผู้ชม: ดังนั้นการรักษาฝั่งไคลเอ็นต์ 1215 00:58:48,730 --> 00:58:49,780 >> DAVID เจลัน: การรักษา มันฝั่งไคลเอ็นต์ 1216 00:58:49,780 --> 00:58:51,030 ขวาตรง 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 ขึ้นต่อไปคือของฉันโอ้ MySQL 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB สลิง: OK 1221 00:59:00,430 --> 00:59:04,990 ดังนั้นคำถามแรกนี้คือโดยทั่วไป สำหรับคนที่หยาบกร้าน 1222 00:59:04,990 --> 00:59:07,270 แม้ว่าคนต่อไปดีกว่า 1223 00:59:07,270 --> 00:59:12,260 ดังนั้นคุณจะต้องเลือกข้อมูลที่ถูกต้อง ประเภททั้งของคอลัมน์นี้ 1224 00:59:12,260 --> 00:59:17,750 และทั้งสองคนนี้มีบางส่วน สิ่งที่เกี่ยวกับพวกเขาว่า 1225 00:59:17,750 --> 00:59:20,620 ให้ทางเลือกที่ยากลำบาก 1226 00:59:20,620 --> 00:59:24,430 ดังนั้น int ไม่ถูกต้อง ประเภทจำนวน 1227 00:59:24,430 --> 00:59:29,410 เหตุผลการบัญชี 12 หลัก จำนวน int ไม่ใหญ่พอที่จะ 1228 00:59:29,410 --> 00:59:31,070 ร้านค้ารวมหลัก 1229 00:59:31,070 --> 00:59:36,570 ดังนั้นทางเลือกที่ถูกต้องจะได้รับใหญ่ int ถ้าคุณเกิดขึ้นที่จะรู้ว่า 1230 00:59:36,570 --> 00:59:42,090 ทางเลือกหนึ่งที่จะได้รับ เขตถ่านของความยาว 12 1231 00:59:42,090 --> 00:59:44,560 ดังนั้นทั้งของผู้ที่จะได้ทำงาน 1232 00:59:44,560 --> 00:59:46,100 int จะไม่ 1233 00:59:46,100 --> 00:59:50,170 >> ตอนนี้ความสมดุลคิดว่ากลับไป pset7 1234 00:59:50,170 --> 00:59:59,540 ดังนั้นเราจึงใช้เฉพาะทศนิยม เก็บค่าของหุ้น - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID เจลัน: เงินสด 1236 01:00:00,550 --> 01:00:01,060 >> ROB สลิง: เงินสด 1237 01:00:01,060 --> 01:00:05,710 เราใช้ทศนิยมในการจัดเก็บจำนวน เงินสดที่ผู้ใช้ในปัจจุบันมี 1238 01:00:05,710 --> 01:00:10,950 ดังนั้นเหตุผลที่เราทำว่าเป็น เพราะจำลอย 1239 01:00:10,950 --> 01:00:12,480 มีจุดที่ลอยอยู่ในความแม่นยำเป็น 1240 01:00:12,480 --> 01:00:18,200 มันไม่สามารถเก็บเงินสดได้อย่างแม่นยำ ค่าเช่นเราต้องการที่นี่ 1241 01:00:18,200 --> 01:00:23,630 ดังนั้นทศนิยมที่สามารถเก็บได้อย่างแม่นยำ สิ่งที่จะพูดทศนิยมสองตำแหน่ง 1242 01:00:23,630 --> 01:00:27,630 นั่นเป็นเหตุผลที่สมดุลที่เราต้องการมัน ให้เป็นทศนิยมและไม่ลอย 1243 01:00:27,630 --> 01:00:30,230 >> DAVID เจลัน: และยังเกินไป แต่ มันอาจจะเป็นฉลาดในที่อื่น 1244 01:00:30,230 --> 01:00:32,760 บริบทที่จะคิดว่าอาจจะนี้ เป็นโอกาสสำหรับ int 1245 01:00:32,760 --> 01:00:34,420 ฉันเพิ่งจะติดตาม สิ่งที่อยู่ในเหรียญ 1246 01:00:34,420 --> 01:00:38,670 เพราะเราได้แสดงให้เห็นอย่างชัดเจนเริ่มต้น คุณค่าของความ 100.00 ที่ 1247 01:00:38,670 --> 01:00:40,380 หมายความว่ามันก็อาจจะ int 1248 01:00:40,380 --> 01:00:45,310 และความละเอียดอ่อนเกินไปกับจำนวนอื่น ก็คือว่ามันไม่ได้หมายความว่า 1249 01:00:45,310 --> 01:00:46,180 จะเป็นคำถามเคล็ดลับ 1250 01:00:46,180 --> 01:00:49,860 แต่จำได้ว่า int ใน MySQL, เช่นใน C อย่างน้อยใน 1251 01:00:49,860 --> 01:00:51,440 เครื่องเป็น 32 บิต 1252 01:00:51,440 --> 01:00:53,960 และถึงแม้ว่าเราไม่ได้คาดหวังให้คุณ ทราบว่ากี่หลักที่ 1253 01:00:53,960 --> 01:00:56,910 หมายถึงไม่เรียกว่าใหญ่ที่สุดในจำนวน คุณสามารถแสดงที่อาจเกิดขึ้น 1254 01:00:56,910 --> 01:01:00,710 มีจำนวน 32 บิตประมาณคืออะไร 1255 01:01:00,710 --> 01:01:02,760 >> เราไม่จำนวนสิ่งที่มักจะพูดว่า 1256 01:01:02,760 --> 01:01:04,530 2 ถึง 32 ซึ่งเป็นสิ่งที่ประมาณ? 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 คุณไม่จำเป็นต้องรู้อย่างแม่นยำ 1259 01:01:08,780 --> 01:01:10,580 แต่ประมาณเป็นประโยชน์ในชีวิต 1260 01:01:10,580 --> 01:01:12,200 ก็ประมาณ 4 พันล้าน 1261 01:01:12,200 --> 01:01:14,430 ดังนั้นเราจึงได้บอกว่าไม่กี่ครั้ง 1262 01:01:14,430 --> 01:01:16,360 ฉันรู้ว่าฉันได้กล่าวว่าไม่กี่ครั้ง 1263 01:01:16,360 --> 01:01:17,670 และมันก็เป็นประมาณ 4 พันล้าน 1264 01:01:17,670 --> 01:01:19,710 และที่เป็นกฎที่ดี ของหัวแม่มือรู้ 1265 01:01:19,710 --> 01:01:21,880 หากคุณมี 8 บิต, 256 คือจำนวนมายากล 1266 01:01:21,880 --> 01:01:24,160 หากคุณมี 32 บิต, 4 พันล้านหรือจะให้ 1267 01:01:24,160 --> 01:01:27,140 ดังนั้นหากคุณเพียงแค่เขียนลง 4 พันล้าน คุณจะเห็นว่ามันเป็นตัวเลขน้อยกว่า 1268 01:01:27,140 --> 01:01:30,970 12 ซึ่งหมายความว่าไม่ชัดเจน ลึกซึ้งพอที่จะจับ 1269 01:01:30,970 --> 01:01:34,220 12 เลขที่บัญชีหลัก 1270 01:01:34,220 --> 01:01:34,940 >> ROB สลิง: OK 1271 01:01:34,940 --> 01:01:38,520 ดังนั้นคนอื่น ๆ ไปดีกว่า 1272 01:01:38,520 --> 01:01:40,900 ดังนั้นคิดว่าธนาคาร เรียกเก็บรายเดือน $ 20 1273 01:01:40,900 --> 01:01:42,400 ค่าบำรุงรักษาในบัญชีทั้งหมด 1274 01:01:42,400 --> 01:01:45,506 กับสิ่งที่แบบสอบถามได้ที่ธนาคาร หัก 20 $ จากทุกนับแม้ว่า 1275 01:01:45,506 --> 01:01:47,520 ผลในบางยอดเชิงลบได้อย่างไร 1276 01:01:47,520 --> 01:01:50,380 ดังนั้นโดยทั่วไปมีสี่ ประเภทหลักของการค้นหา - 1277 01:01:50,380 --> 01:01:52,840 แทรกเลือกปรับปรุงและลบ 1278 01:01:52,840 --> 01:01:56,080 ดังนั้นเราจึงทำในสิ่งที่คิดว่าเรา จะใช้ที่นี่ 1279 01:01:56,080 --> 01:01:57,000 ปรับปรุง 1280 01:01:57,000 --> 01:01:58,260 >> ดังนั้นลองมาดู 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 ดังนั้นที่นี่เรากำลังอัปเดต 1283 01:02:05,870 --> 01:02:09,900 สิ่งที่เรามีตารางการปรับปรุงบัญชี? 1284 01:02:09,900 --> 01:02:11,670 ดังนั้นการปรับปรุงบัญชี 1285 01:02:11,670 --> 01:02:15,390 แล้วไวยากรณ์กล่าวว่าสิ่งที่ ในบัญชีที่เราปรับปรุง? 1286 01:02:15,390 --> 01:02:19,520 ดีที่เรากำลังตั้งค่าความสมดุลเท่ากับ มูลค่าปัจจุบันของความสมดุลลบ 20 1287 01:02:19,520 --> 01:02:22,860 ดังนั้นนี่จะปรับปรุงแถวทั้งหมด บัญชีการลบ 1288 01:02:22,860 --> 01:02:26,250 $ 20 จากยอดเงินคงเหลือ 1289 01:02:26,250 --> 01:02:29,260 >> DAVID เจลัน: ข้อผิดพลาดทั่วไปที่นี่ แม้ว่าบางครั้งเรายกโทษให้มัน 1290 01:02:29,260 --> 01:02:32,990 เป็นจริงมีโค้ด PHP ที่นี่ เรียกใช้ฟังก์ชันการค้นหาหรือการวาง 1291 01:02:32,990 --> 01:02:35,460 คำพูดทุกอย่างที่อยู่รอบ ๆ ไม่จำเป็นต้องมี 1292 01:02:35,460 --> 01:02:39,780 >> ROB สลิง: โปรดจำไว้ว่า MySQL เป็น ภาษาที่แยกต่างหากจาก PHP 1293 01:02:39,780 --> 01:02:42,410 เราจะได้รับการเขียน MySQL ใน PHP 1294 01:02:42,410 --> 01:02:46,180 และ PHP จะถูกส่งไปแล้ว ไปยังเซิร์ฟเวอร์ 1295 01:02:46,180 --> 01:02:51,120 แต่คุณไม่จำเป็นต้อง PHP เพื่อที่จะ สื่อสารกับเซิร์ฟเวอร์ 1296 01:02:51,120 --> 01:02:51,730 >> DAVID เจลัน: แน่นอน 1297 01:02:51,730 --> 01:02:54,240 ดังนั้นตัวแปรที่มีสัญญาณดอลลาร์ไม่ ควรจะอยู่ในบริบทนี้ 1298 01:02:54,240 --> 01:02:59,550 มันก็สามารถทำทั้งหมดของคณิตศาสตร์ ภายในฐานข้อมูลของตัวเอง 1299 01:02:59,550 --> 01:03:00,080 >> ROB สลิง: OK 1300 01:03:00,080 --> 01:03:01,300 ดังนั้นหนึ่งต่อไป 1301 01:03:01,300 --> 01:03:02,731 นี้เป็นหนึ่งต่อไปหรือไม่ 1302 01:03:02,731 --> 01:03:03,210 ใช่ 1303 01:03:03,210 --> 01:03:06,570 ดังนั้นกับสิ่งที่แบบสอบถามได้ที่ธนาคาร ดึงหมายเลขบัญชีของ 1304 01:03:06,570 --> 01:03:09,300 ลูกค้าที่ร่ำรวยที่สุดผู้ที่มี ยอดคงเหลือมากกว่า 1,000? 1305 01:03:09,300 --> 01:03:13,280 เพื่อที่ทั้งสี่ประเภทหลัก เราจะต้องการที่นี่ 1306 01:03:13,280 --> 01:03:14,430 เลือก 1307 01:03:14,430 --> 01:03:16,650 ดังนั้นเราจึงต้องการที่จะเลือก 1308 01:03:16,650 --> 01:03:17,610 สิ่งใดที่เราต้องการที่จะเลือก? 1309 01:03:17,610 --> 01:03:19,380 เราไม่คอลัมน์สิ่งที่ต้องการเลือก? 1310 01:03:19,380 --> 01:03:20,970 โดยเฉพาะเราจะต้องการ เพื่อเลือกหมายเลข 1311 01:03:20,970 --> 01:03:23,910 แต่ถ้าคุณบอกว่าดาวเรา ได้รับการยอมรับว่า 1312 01:03:23,910 --> 01:03:25,820 >> เพื่อเลือกหมายเลขจากตารางอะไร 1313 01:03:25,820 --> 01:03:26,640 บัญชี 1314 01:03:26,640 --> 01:03:28,370 แล้วเงื่อนไขที่เราต้องการได้หรือไม่ 1315 01:03:28,370 --> 01:03:30,140 ที่สมดุลมากกว่า 1,000 1316 01:03:30,140 --> 01:03:31,720 นอกจากนี้เรายังได้รับการยอมรับมากขึ้น มากกว่าหรือเท่ากับ 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 ไฟล์ล่าสุด 1319 01:03:36,190 --> 01:03:42,940 กับสิ่งที่แบบสอบถามได้ที่ธนาคาร ใกล้ชิดนั่นคือลบทุกบัญชีที่ 1320 01:03:42,940 --> 01:03:44,480 มีความสมดุลของ $ 0? 1321 01:03:44,480 --> 01:03:47,620 เพื่อที่สี่ของเรา จะต้องการที่จะใช้งานหรือไม่ 1322 01:03:47,620 --> 01:03:48,320 ลบ 1323 01:03:48,320 --> 01:03:50,180 ดังนั้นไวยากรณ์สำหรับการที่ได้หรือไม่ 1324 01:03:50,180 --> 01:03:51,890 ลบจากตารางอะไร 1325 01:03:51,890 --> 01:03:53,550 บัญชี 1326 01:03:53,550 --> 01:03:55,790 แล้วสภาพที่ เราต้องการที่จะลบ - 1327 01:03:55,790 --> 01:03:57,280 ที่สมดุลเท่ากับศูนย์ 1328 01:03:57,280 --> 01:04:03,050 เพื่อลบแถวทั้งหมดจากบัญชี ที่สมดุลเป็นศูนย์ 1329 01:04:03,050 --> 01:04:04,300 คำถามใด ๆ ของเหล่านี้หรือไม่ 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 ต้องการที่จะคิว? 1332 01:04:10,260 --> 01:04:11,200 >> DAVID เจลัน: คู่มือคิว 1333 01:04:11,200 --> 01:04:17,110 ดังนั้นในที่นี้เราให้คุณบ้าง โครงสร้างที่คุ้นเคยที่เราสำรวจ 1334 01:04:17,110 --> 01:04:20,450 บิตในชั้นเรียนข้างของ structs, ซึ่งเป็นข้อมูลที่ 1335 01:04:20,450 --> 01:04:21,910 โครงสร้างที่เกี่ยวข้องกับจิตวิญญาณ 1336 01:04:21,910 --> 01:04:24,670 ความแตกต่างแม้ว่าจะมีคิวเป็น ที่เราต้องจำไว้อย่างใดที่ 1337 01:04:24,670 --> 01:04:27,900 เป็นที่ด้านหน้าของคิวในขนาดใหญ่ ส่วนหนึ่งเพื่อให้เราสามารถให้มากขึ้น 1338 01:04:27,900 --> 01:04:30,530 การใช้งานที่มีประสิทธิภาพของหน่วยความจำอย่างน้อย ถ้าเราใช้อาร์เรย์ 1339 01:04:30,530 --> 01:04:35,460 >> เพราะจำได้ถ้าเรามีอาร์เรย์ถ้า เช่นนี้เป็นหน้าของ 1340 01:04:35,460 --> 01:04:38,470 คิวถ้าฉันได้รับเป็นคิวที่นี่ แล้วมีคนได้รับในบรรทัดที่ 1341 01:04:38,470 --> 01:04:42,710 อยู่ข้างหลังผมอยู่ข้างหลังผมอยู่ข้างหลังผมและ คนคนหนึ่งก้าวออกมาจากแถวคุณ 1342 01:04:42,710 --> 01:04:45,930 จะทำได้อย่างที่เราเห็นบางส่วนของมนุษย์ของเรา อาสาสมัครในชั้นเรียนทุกคนมี 1343 01:04:45,930 --> 01:04:47,100 เปลี่ยนวิธีนี้ 1344 01:04:47,100 --> 01:04:50,880 แต่โดยทั่วไปแล้วทุกคนต้องทำ สิ่งที่ไม่ใช้ที่ดีที่สุดของเวลา 1345 01:04:50,880 --> 01:04:54,600 ในโปรแกรมเพราะมันหมายถึงคุณ ขั้นตอนวิธีการทำงานในสิ่งที่ 1346 01:04:54,600 --> 01:04:56,520 เวลาทำงานซีมโทติ? 1347 01:04:56,520 --> 01:04:57,420 มันเป็นเชิงเส้น 1348 01:04:57,420 --> 01:04:59,600 >> และฉันรู้สึกเหมือนว่าเป็นชนิดของโง่ 1349 01:04:59,600 --> 01:05:02,890 ถ้าคนถัดไปในบรรทัดถัดไป คนที่ควรจะไปลงใน 1350 01:05:02,890 --> 01:05:04,660 เก็บพวกเขาไม่ได้ทุกคนต้องมี ที่จะย้ายไปอยู่ด้วยกัน 1351 01:05:04,660 --> 01:05:08,200 เพียงแจ้งให้บุคคลนั้นถูกดึงออก เมื่อเวลามาถึงตัวอย่างเช่น 1352 01:05:08,200 --> 01:05:09,870 ดังนั้นเราจึงสามารถบันทึกบิตของเวลาที่มี 1353 01:05:09,870 --> 01:05:14,840 และอื่น ๆ ที่จะทำ แต่หมายความว่า ที่หัวของคิวหรือ 1354 01:05:14,840 --> 01:05:18,060 ด้านหน้าของคิวเป็นไป ความก้าวหน้าย้ายลึกและลึก 1355 01:05:18,060 --> 01:05:23,340 เข้าแถวและในที่สุดก็อาจจะ ห่อรอบจริงถ้าเราใช้ 1356 01:05:23,340 --> 01:05:25,790 อาร์เรย์ในการจัดเก็บคน ในคิวนี้ 1357 01:05:25,790 --> 01:05:28,390 เพื่อให้คุณเกือบจะคิดว่า อาร์เรย์เป็นข้อมูลที่เป็นวงกลม 1358 01:05:28,390 --> 01:05:29,880 โครงสร้างในแง่ที่ว่า 1359 01:05:29,880 --> 01:05:33,970 >> ดังนั้นคุณก็ต้องติดตาม ขนาดของมันหรือจริงๆสิ้นสุดของมัน 1360 01:05:33,970 --> 01:05:36,250 แล้วที่จุดเริ่มต้นของมันคือ 1361 01:05:36,250 --> 01:05:39,490 ดังนั้นเราจึงเสนอว่าคุณประกาศ หนึ่งคิวดังกล่าวโทร 1362 01:05:39,490 --> 01:05:41,330 มัน q เพียงหนึ่งตัวอักษร 1363 01:05:41,330 --> 01:05:44,570 จากนั้นเราก็เสนอว่าด้านหน้าเป็น เริ่มต้นได้ที่ศูนย์และว่าขนาด 1364 01:05:44,570 --> 01:05:45,470 สามารถเริ่มต้นที่จะเป็นศูนย์ 1365 01:05:45,470 --> 01:05:47,770 >> ดังนั้นตอนนี้ไม่มีอะไร ภายในของคิวที่ 1366 01:05:47,770 --> 01:05:50,910 และเราขอให้คุณให้เสร็จสมบูรณ์ การดำเนินการของ enqueue ด้านล่างใน 1367 01:05:50,910 --> 01:05:55,250 เช่นวิธีการที่ฟังก์ชั่นที่จะเพิ่ม n ในตอนท้ายของ q แล้วกลับจริง 1368 01:05:55,250 --> 01:05:58,690 แต่ถ้า q เต็มหรือเชิงลบ ฟังก์ชั่นควรกลับเท็จ 1369 01:05:58,690 --> 01:06:01,060 และเราให้คุณทั้งคู่ ของสมมติฐาน 1370 01:06:01,060 --> 01:06:04,320 แต่พวกเขาไม่ได้จริงๆทำงาน ที่เกี่ยวข้องเพียงบูลที่มีอยู่แล้ว 1371 01:06:04,320 --> 01:06:06,690 เพราะเทคนิคบูลไม่ได้ อยู่ใน C เว้นแต่คุณมี 1372 01:06:06,690 --> 01:06:07,310 ไฟล์ส่วนหัวบาง 1373 01:06:07,310 --> 01:06:09,350 เพื่อให้เป็นเพียงให้แน่ใจว่ามี นี้ไม่ได้เป็นเคล็ดลับ 1374 01:06:09,350 --> 01:06:10,940 คำถามชนิดของสิ่งที่ 1375 01:06:10,940 --> 01:06:16,280 >> ดังนั้น enqueue เรานำเสนอในตัวอย่าง การแก้ปัญหาในการดำเนินการดังต่อไปนี้ 1376 01:06:16,280 --> 01:06:20,420 หนึ่งที่เราตรวจสอบก่อนอย่างง่ายดาย ผลไม้แขวนต่ำ 1377 01:06:20,420 --> 01:06:23,820 ถ้าคิวเต็มหรือหมายเลขที่ คุณกำลังพยายามที่จะแทรกน้อย 1378 01:06:23,820 --> 01:06:26,380 กว่าศูนย์ซึ่งเรากล่าวใน สเปคของปัญหาควร 1379 01:06:26,380 --> 01:06:30,320 ไม่ได้รับอนุญาตเพราะเราเพียงต้องการ ค่าที่ไม่ใช่เชิงลบแล้วคุณควร 1380 01:06:30,320 --> 01:06:31,640 เพียงแค่กลับเท็จทันที 1381 01:06:31,640 --> 01:06:33,820 ดังนั้นบางค่อนข้างง่าย การตรวจสอบข้อผิดพลาด 1382 01:06:33,820 --> 01:06:38,720 หาก แต่คุณต้องการที่จะเพิ่มที่เกิดขึ้นจริง จำนวนที่คุณต้องทำบิตของ 1383 01:06:38,720 --> 01:06:39,440 คิดที่นี่ 1384 01:06:39,440 --> 01:06:41,330 และนี่คือที่มันน่ารำคาญเล็กน้อย จิตใจเพราะคุณจะต้อง 1385 01:06:41,330 --> 01:06:43,000 คิดออกว่าจะจัดการกับฟิล์ม 1386 01:06:43,000 --> 01:06:46,870 >> แต่เชื้อโรคของความคิดที่นี่ที่เป็นของ ที่น่าสนใจให้เราเป็นฟิล์มที่ 1387 01:06:46,870 --> 01:06:51,480 มักจะหมายถึงการคำนวณแบบแยกส่วนและ ผู้ประกอบการ mod ด้านเปอร์เซ็นต์ 1388 01:06:51,480 --> 01:06:55,140 ที่คุณสามารถไปจากค่าขนาดใหญ่ กลับไปที่ศูนย์แล้วหนึ่งและสองและ 1389 01:06:55,140 --> 01:06:58,650 สามรอบแล้วกลับไปอยู่ที่ศูนย์ หนึ่งและสองและสามและอื่น ๆ 1390 01:06:58,650 --> 01:06:59,380 ครั้งแล้วครั้งเล่า 1391 01:06:59,380 --> 01:07:02,880 ดังนั้นวิธีที่เรานำเสนอการทำเช่นนี้เป็น ที่เราไม่ต้องการที่จะเข้ามาในดัชนี 1392 01:07:02,880 --> 01:07:05,850 อาเรย์ที่เรียกว่าตัวเลขที่ จำนวนเต็มของเราอยู่ 1393 01:07:05,850 --> 01:07:10,740 แต่การที่จะได้รับมีครั้งแรกที่เราต้องการจะทำ สิ่งที่ขนาดของคิวเป็น แต่ 1394 01:07:10,740 --> 01:07:14,080 แล้วเพิ่มไปว่าสิ่งที่ ด้านหน้าของรายการเป็น 1395 01:07:14,080 --> 01:07:17,880 และผลกระทบของการที่จะนำเราที่ ตำแหน่งที่เหมาะสมในคิวและ 1396 01:07:17,880 --> 01:07:20,970 ไม่คิดว่าคนแรกในสาย เป็นที่จุดเริ่มต้นที่เขาหรือ 1397 01:07:20,970 --> 01:07:24,130 เธออาจจะเป็นอย่างแน่นอนถ้าเรา ก็ขยับทุกคน 1398 01:07:24,130 --> 01:07:26,710 แต่เราเพียงแค่การสร้างงาน สำหรับตัวเองถ้าเราเอา 1399 01:07:26,710 --> 01:07:27,800 โดยเฉพาะอย่างยิ่งเส้นทางที่ 1400 01:07:27,800 --> 01:07:29,330 >> เพื่อให้เราสามารถให้มันค่อนข้างง่าย 1401 01:07:29,330 --> 01:07:32,180 เราต้องจำไว้ว่าเราเพียงแค่ เพิ่ม int คิว 1402 01:07:32,180 --> 01:07:35,850 และจากนั้นเราก็กลับจริง 1403 01:07:35,850 --> 01:07:38,560 ในขณะเดียวกันใน dequeue เราถาม คุณทำต่อไปนี้ 1404 01:07:38,560 --> 01:07:42,260 ใช้มันในลักษณะที่มัน dequeues ที่เป็นลบและผลตอบแทน 1405 01:07:42,260 --> 01:07:44,190 int ที่ด้านหน้าของคิว 1406 01:07:44,190 --> 01:07:46,410 ในการลบ int มันพอเพียง ที่จะลืมมัน 1407 01:07:46,410 --> 01:07:47,650 คุณไม่จำเป็นที่จะแทนที่บิต 1408 01:07:47,650 --> 01:07:48,820 ดังนั้นจึงยังคงมีจริง 1409 01:07:48,820 --> 01:07:51,930 เช่นเดียวกับข้อมูลบนฮาร์ดไดรฟ์ เราก็ไม่สนใจความเป็นจริง 1410 01:07:51,930 --> 01:07:52,970 ว่ามันเป็นตอนนี้มี 1411 01:07:52,970 --> 01:07:55,520 และถ้า q ว่างเราควร แทนที่จะกลับเชิงลบ 1 1412 01:07:55,520 --> 01:07:56,750 ดังนั้นนี้รู้สึกโดยพลการ 1413 01:07:56,750 --> 01:08:01,640 ทำไมกลับเชิงลบ 1 แทนการเท็จ 1414 01:08:01,640 --> 01:08:02,620 ใช่ 1415 01:08:02,620 --> 01:08:05,070 >> ผู้ชม: Q มีการจัดเก็บ ค่าบวก 1416 01:08:05,070 --> 01:08:10,950 เมื่อคุณเก็บเฉพาะค่าบวก ใน q ลบข้อผิดพลาด 1417 01:08:10,950 --> 01:08:11,510 >> DAVID เจลัน: ตกลงจริง 1418 01:08:11,510 --> 01:08:14,850 ดังนั้นเพราะเราเพียง แต่การจัดเก็บที่ดี ค่าหรือศูนย์แล้วก็ปรับให้ 1419 01:08:14,850 --> 01:08:18,050 กลับเป็นค่าลบเป็นแมวมอง ค่าสัญลักษณ์พิเศษ 1420 01:08:18,050 --> 01:08:21,630 แต่คุณกำลังเขียนประวัติศาสตร์มี เพราะเหตุผลที่เรากำลังเพียง 1421 01:08:21,630 --> 01:08:25,890 กลับค่าที่ไม่ใช่เชิงลบ เป็นเพราะเราต้องการที่จะ 1422 01:08:25,890 --> 01:08:27,670 มีค่าแมวมอง 1423 01:08:27,670 --> 01:08:32,617 มากขึ้นโดยเฉพาะดังนั้นทำไมไม่เพียงแค่ กลับเท็จในกรณีของข้อผิดพลาด 1424 01:08:32,617 --> 01:08:33,099 ใช่ 1425 01:08:33,099 --> 01:08:35,510 >> ผู้ชม: คุณเคยล้มเหลว เพื่อกลับจำนวนเต็ม 1426 01:08:35,510 --> 01:08:36,630 >> DAVID เจลัน: แน่นอน 1427 01:08:36,630 --> 01:08:38,569 และนี่คือที่ C ได้รับ สวยข้อ จำกัด 1428 01:08:38,569 --> 01:08:40,590 หากคุณกำลังจะบอกว่าคุณกำลังจะ เพื่อกลับ int คุณได้มี 1429 01:08:40,590 --> 01:08:41,279 เพื่อกลับ int 1430 01:08:41,279 --> 01:08:43,689 คุณไม่สามารถรับแฟนซีและเริ่มกลับมา บูลหรือลอยหรือ 1431 01:08:43,689 --> 01:08:45,040 สตริงหรือสิ่งที่ต้องการที่ 1432 01:08:45,040 --> 01:08:49,370 ตอนนี้ขณะที่ JavaScript และ PHP และ ภาษาอื่น ๆ บางส่วนสามารถในความเป็นจริง 1433 01:08:49,370 --> 01:08:51,310 มีคุณกลับมาที่แตกต่างกัน ประเภทของค่า 1434 01:08:51,310 --> 01:08:54,819 และที่จริงจะมีประโยชน์ที่ คุณสามารถกลับ ints บวกศูนย์ 1435 01:08:54,819 --> 01:08:59,439 ints ลบหรือเท็จหรือ null แม้จะมีความหมายผิดพลาด 1436 01:08:59,439 --> 01:09:01,890 แต่เราไม่ได้ว่า ความเก่งกาจใน C. 1437 01:09:01,890 --> 01:09:04,569 >> ดังนั้นด้วย dequeue สิ่งที่เรา เสนอที่จะทำคือ - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB สลิง: คุณสามารถกลับเท็จ 1440 01:09:09,830 --> 01:09:13,189 มันเป็นเพียงการผิดว่าเป็นกัญชา กำหนดเท็จให้เป็นศูนย์ 1441 01:09:13,189 --> 01:09:16,000 ดังนั้นถ้าคุณกลับเท็จ คุณกลับเป็นศูนย์ 1442 01:09:16,000 --> 01:09:25,470 และเป็นศูนย์เป็นสิ่งที่ถูกต้องในคิวของเรา ในขณะที่ลบ 1 ไม่ได้ถ้า 1443 01:09:25,470 --> 01:09:27,000 เท็จที่เกิดขึ้นจะเป็นเชิงลบ 1 1444 01:09:27,000 --> 01:09:29,972 แต่คุณไม่ควรจะได้ จำเป็นต้องรู้ว่า 1445 01:09:29,972 --> 01:09:32,399 >> DAVID เจลัน: นั่น เหตุผลที่ผมไม่ได้พูดมัน 1446 01:09:32,399 --> 01:09:36,450 >> ROB สลิง: แต่มันไม่เป็นความจริง ที่คุณไม่สามารถกลับเท็จ 1447 01:09:36,450 --> 01:09:37,700 >> DAVID เจลัน: แน่นอน 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 ดังนั้น dequeue สังเกตเรายอมรับ เป็นโมฆะเป็นอาร์กิวเมนต์ 1450 01:09:44,240 --> 01:09:45,479 และนั่นเป็นเพราะเราไม่ได้ ผ่านอะไรค่ะ 1451 01:09:45,479 --> 01:09:48,359 เราเพียงแค่ต้องการที่จะลบองค์ประกอบ ที่ด้านหน้าของคิว 1452 01:09:48,359 --> 01:09:49,819 ดังนั้นวิธีที่เราอาจจะไปเกี่ยวกับการทำเช่นนี้? 1453 01:09:49,819 --> 01:09:51,290 ดีแรกให้ทำเช่นนี้ การตรวจสอบสุขภาพจิตดีได้อย่างรวดเร็ว 1454 01:09:51,290 --> 01:09:53,350 ถ้าขนาดคิวเป็น 0 มี งานที่จะทำไม่มี 1455 01:09:53,350 --> 01:09:54,210 กลับเชิงลบ 1 1456 01:09:54,210 --> 01:09:54,800 เสร็จสิ้น 1457 01:09:54,800 --> 01:09:56,340 เพื่อที่ว่าไม่กี่บรรทัดของโปรแกรมของฉัน 1458 01:09:56,340 --> 01:09:58,180 ดังนั้นเพียงสี่สายยังคงอยู่ 1459 01:09:58,180 --> 01:10:01,310 >> ดังนั้นที่นี่ฉันตัดสินใจที่จะพร่อง ขนาด 1460 01:10:01,310 --> 01:10:04,620 และ decrementing ขนาดได้อย่างมีประสิทธิภาพ หมายความว่าฉันลืม 1461 01:10:04,620 --> 01:10:06,010 บางสิ่งบางอย่างที่อยู่ในนั้น 1462 01:10:06,010 --> 01:10:09,910 แต่ฉันยังมีการปรับปรุงที่ ด้านหน้าของตัวเลขที่มี 1463 01:10:09,910 --> 01:10:11,620 ดังนั้นจะทำอย่างไรที่ฉันต้องการ ทำสองสิ่ง 1464 01:10:11,620 --> 01:10:16,390 ครั้งแรกที่ผมต้องจำไว้ว่าจำนวน อยู่ที่ด้านหน้าของคิว 1465 01:10:16,390 --> 01:10:17,860 เพราะผมต้องกลับสิ่งที่ 1466 01:10:17,860 --> 01:10:20,910 ดังนั้นผมจึงไม่ต้องการที่จะตั้งใจลืม เกี่ยวกับเรื่องนี้แล้วเขียนทับ 1467 01:10:20,910 --> 01:10:22,840 ฉันแค่จะต้องจำไว้ใน int 1468 01:10:22,840 --> 01:10:27,310 >> และตอนนี้ผมต้องการที่จะปรับปรุง q.front จะ q.front +1 1469 01:10:27,310 --> 01:10:30,070 ดังนั้นถ้าเรื่องนี้เป็นคนแรกใน สายตอนนี้ฉันต้องการจะทำบวก 1 ถึง 1470 01:10:30,070 --> 01:10:31,930 จุดที่คนถัดไปในบรรทัด 1471 01:10:31,930 --> 01:10:33,420 แต่ก็ต้องจัดการกับฟิล์มว่า 1472 01:10:33,420 --> 01:10:37,270 และถ้ากำลังการผลิตอย่างต่อเนื่องทั่วโลก ที่จะช่วยให้ฉันเพื่อให้แน่ใจว่า 1473 01:10:37,270 --> 01:10:41,140 ที่ผมชี้ไปที่คนสุดท้ายใน สายการทำงานแบบโมดูโลจะนำ 1474 01:10:41,140 --> 01:10:43,840 ผมกลับไปที่ศูนย์ที่ ด้านหน้าของคิว 1475 01:10:43,840 --> 01:10:46,050 และที่จัดการอันโตนี่ 1476 01:10:46,050 --> 01:10:48,950 แล้วฉันจะกลับมาดำเนินการต่อ n 1477 01:10:48,950 --> 01:10:51,530 >> ตอนนี้อย่างเคร่งครัดพูดผมไม่ได้ ต้องประกาศ n 1478 01:10:51,530 --> 01:10:53,880 ฉันไม่ได้มีที่จะคว้ามันและเก็บไว้ ชั่วคราวเนื่องจากมีค่าเป็น 1479 01:10:53,880 --> 01:10:54,740 ยังคงมี 1480 01:10:54,740 --> 01:10:57,490 ดังนั้นฉันก็สามารถทำคณิตศาสตร์ที่เหมาะสม เพื่อกลับไปอดีตหัวหน้า 1481 01:10:57,490 --> 01:10:58,450 ของคิว 1482 01:10:58,450 --> 01:11:01,850 แต่ผมก็รู้สึกว่าเรื่องนี้เป็นที่ชัดเจนมากขึ้น ที่จริงคว้า int ใส่ไว้ 1483 01:11:01,850 --> 01:11:04,320 ใน n แล้​​วกลับที่ เพื่อเห็นแก่ความชัดเจน แต่ 1484 01:11:04,320 --> 01:11:05,735 ไม่จำเป็นอย่างเคร่งครัด 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 พวกเขากำลังทั้งหมดออกเสียงได้ในหัวของฉัน 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB สลิง: คำถามแรกดังนั้น เป็นปัญหาต้นไม้ไบนารี 1490 01:11:19,110 --> 01:11:22,140 ดังนั้นคำถามแรกคือเรา ให้ตัวเลขเหล่านี้ 1491 01:11:22,140 --> 01:11:27,160 และเราต้องการอย่างใดใส่ไว้ใน โหนดเหล่านี้ดังกล่าวว่าเป็น 1492 01:11:27,160 --> 01:11:30,110 ต้นไม้ค้นหาไบนารีที่ถูกต้อง 1493 01:11:30,110 --> 01:11:36,260 ดังนั้นสิ่งหนึ่งที่ต้องจำเ​​กี่ยวกับ ต้นไม้ค้นหาแบบไบนารีคือว่ามันไม่ได้ 1494 01:11:36,260 --> 01:11:39,800 เพียงแค่ว่าสิ่งที่ไปทางซ้าย เป็นน้อยลงและสิ่งที่ 1495 01:11:39,800 --> 01:11:41,120 ที่ถูกต้องมากขึ้น 1496 01:11:41,120 --> 01:11:44,580 มันต้องเป็นไปได้ว่าต้นไม้ทั้ง ด้านซ้ายเป็นน้อยลงและต้นไม้ทั้ง 1497 01:11:44,580 --> 01:11:45,740 ไปทางขวามากขึ้น 1498 01:11:45,740 --> 01:11:55,260 >> ดังนั้นถ้าผมใส่ 34 ที่นี่ที่ด้านบนแล้ว ฉันใส่ 20 ที่นี่เพื่อให้เป็นที่ถูกต้องเพื่อให้ 1499 01:11:55,260 --> 01:11:56,970 ห่างไกลเพราะ 34 ขึ้นที่นี่ 1500 01:11:56,970 --> 01:11:57,920 20 จะไปทางซ้าย 1501 01:11:57,920 --> 01:11:58,950 ดังนั้นที่น้อย 1502 01:11:58,950 --> 01:12:03,640 แต่ฉันไม่สามารถใส่แล้ว 59 ที่นี่เพราะ แม้ว่า 59 อยู่ทางด้านขวาของ 20, 1503 01:12:03,640 --> 01:12:06,140 ก็ยังคงที่ด้านซ้ายของ 34 1504 01:12:06,140 --> 01:12:10,760 ดังนั้นด้วยข้อ จำกัด ในใจว่า วิธีที่ง่ายที่สุดอาจจะแก้ปัญหานี้ 1505 01:12:10,760 --> 01:12:14,330 ปัญหาคือเพียงแค่การจัดเรียง ของตัวเลขเหล่านี้ - 1506 01:12:14,330 --> 01:12:18,720 ดังนั้น 20, 34, 36, 52, 59, 106 1507 01:12:18,720 --> 01:12:21,640 แล้วใส่ที่ จากซ้ายไปขวา 1508 01:12:21,640 --> 01:12:23,390 >> ดังนั้น 20 ไปที่นี่ 1509 01:12:23,390 --> 01:12:24,630 34 ไปที่นี่ 1510 01:12:24,630 --> 01:12:25,830 36 ไปที่นี่ 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106 1512 01:12:29,360 --> 01:12:34,730 และคุณยังจะได้คิดออกด้วย บางเสียบและตระหนัก, 1513 01:12:34,730 --> 01:12:38,830 โอ้รอฉันไม่ได้มีจำนวนมากพอ เพื่อเติมเต็มในที่นี่ 1514 01:12:38,830 --> 01:12:42,170 ดังนั้นผมจึงจำเป็นต้อง reshift สิ่งที่ฉัน บันทึกเส้นทางที่เป็นไปได้ 1515 01:12:42,170 --> 01:12:47,490 แต่สังเกตเห็นว่าในขั้นสุดท้ายสามถ้า คุณอ่านจากซ้ายไปขวาก็อยู่ใน 1516 01:12:47,490 --> 01:12:48,740 การสั่งซื้อที่เพิ่มขึ้น 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> ดังนั้นตอนนี้เราต้องการที่จะประกาศสิ่งที่ struct เป็นไปได้สำหรับ 1519 01:12:56,540 --> 01:12:58,300 โหนดในต้นไม้ต้นนี้ 1520 01:12:58,300 --> 01:13:02,720 ดังนั้นเราจึงทำในสิ่งที่ต้องการในต้นไม้ไบนารี? 1521 01:13:02,720 --> 01:13:05,830 ดังนั้นเราจึงมีค่าของชนิด int ดังนั้นค่า int บาง 1522 01:13:05,830 --> 01:13:07,220 ผมไม่ทราบว่าสิ่งที่เราเรียกว่า ในการแก้ปัญหา - 1523 01:13:07,220 --> 01:13:08,500 int n 1524 01:13:08,500 --> 01:13:13,570 เราจำเป็นต้องมีตัวชี้ไปยังเด็กซ้าย และตัวชี้ไปยังเด็กที่เหมาะสม 1525 01:13:13,570 --> 01:13:17,540 ดังนั้นมันจะมีลักษณะเช่นนี้ 1526 01:13:17,540 --> 01:13:20,510 และเป็นจริงก่อนที่จะดู เมื่อไม่ทวีคูณเชื่อมโยง 1527 01:13:20,510 --> 01:13:25,090 สิ่งที่รายการเพื่อแจ้งให้ทราบล่วงหน้า - 1528 01:13:25,090 --> 01:13:27,860 ฉันจะต้องเลื่อนทั้งหมด ทางกลับลงไปที่ปัญหา 11 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> เพื่อแจ้งให้ทราบว่ามีลักษณะเหมือนกันนี้ ยกเว้นเราก็เกิดขึ้นที่จะเรียกเหล่านี้ 1531 01:13:36,390 --> 01:13:38,590 ชื่อที่แตกต่างกัน 1532 01:13:38,590 --> 01:13:41,440 เรายังมีจำนวนเต็ม ค่าและสองตัวชี้ 1533 01:13:41,440 --> 01:13:44,850 มันเป็นเพียงที่แทนการรักษา ตัวชี้เป็นชี้ไปที่สิ่งต่อไปที่ 1534 01:13:44,850 --> 01:13:47,955 และสิ่งที่ก่อนหน้านี้เรากำลังรักษา ตัวชี้ชี้ไปที่เด็กซ้าย 1535 01:13:47,955 --> 01:13:49,205 และเด็กที่ถูกต้อง 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 ตกลง 1538 01:13:57,860 --> 01:13:59,650 เพื่อให้เป็นโหนด struct ของเรา 1539 01:13:59,650 --> 01:14:03,920 และตอนนี้ฟังก์ชั่นเดียวที่เราต้อง ใช้ในการนี​​้คือการสำรวจที่ 1540 01:14:03,920 --> 01:14:08,320 เราต้องการที่จะไปในช่วงต้นการพิมพ์ ออกค่าของต้นไม้ที่อยู่ในลำดับที่ 1541 01:14:08,320 --> 01:14:15,241 >> ดังนั้นมองหาที่นี่เราจะต้องการพิมพ์ ออก 20, 34, 36, 52, 59, และ 106 1542 01:14:15,241 --> 01:14:17,970 เราจะประสบความสำเร็จได้อย่างไรว่า? 1543 01:14:17,970 --> 01:14:18,890 ดังนั้นจึงเป็นที่สวยเหมือนกัน 1544 01:14:18,890 --> 01:14:22,910 หากคุณเห็นในการสอบที่ผ่านมาปัญหาที่เกิดขึ้น ที่คุณต้องการที่จะพิมพ์ออกมา 1545 01:14:22,910 --> 01:14:25,940 ต้นไม้ทั้งหมดที่มีเครื่องหมายจุลภาคในระหว่าง ทุกอย่างก็เป็นจริงได้ 1546 01:14:25,940 --> 01:14:27,320 ง่ายกว่าที่ 1547 01:14:27,320 --> 01:14:30,950 ดังนั้นนี่คือการแก้ปัญหา 1548 01:14:30,950 --> 01:14:33,110 นี้อย่างมีนัยสำคัญได้ง่ายขึ้น ถ้าคุณทำมันซ้ำ 1549 01:14:33,110 --> 01:14:36,650 ผมไม่ทราบว่าถ้าใครพยายาม ที่จะทำซ้ำ 1550 01:14:36,650 --> 01:14:38,340 >> แต่ก่อนที่เราจะมีกรณีฐานของเรา 1551 01:14:38,340 --> 01:14:39,660 ถ้ารากเป็นโมฆะ? 1552 01:14:39,660 --> 01:14:40,610 แล้วเรากำลังจะกลับ 1553 01:14:40,610 --> 01:14:42,300 เราไม่ต้องการที่จะพิมพ์อะไร 1554 01:14:42,300 --> 01:14:45,940 อื่นที่เรากำลังจะเข้าไป ซ้ำลง 1555 01:14:45,940 --> 01:14:48,140 พิมพ์ทรีย่อยด้านซ้ายทั้งหมด 1556 01:14:48,140 --> 01:14:51,440 ดังนั้นทุกอย่างที่พิมพ์น้อย กว่ามูลค่าปัจจุบันของฉัน 1557 01:14:51,440 --> 01:14:53,930 แล้วฉันจะพิมพ์ตัวเอง 1558 01:14:53,930 --> 01:14:57,310 แล้วฉันจะ recurse ลงของฉัน ทรีย่อยที่เหมาะสมทั้งเพื่อให้ทุกอย่าง 1559 01:14:57,310 --> 01:14:58,810 มากกว่าค่าของฉัน 1560 01:14:58,810 --> 01:15:03,870 และนี่คือที่จะพิมพ์ ทุกสิ่งที่อยู่ในลำดับที่ 1561 01:15:03,870 --> 01:15:05,860 คำถามที่เกี่ยวกับวิธีการนี​​้จริง สำเร็จหรือไม่ 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> ผู้ชม: ผมมีคำถาม บน [ไม่ได้ยิน] 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB สลิง: ดังนั้นวิธีหนึ่งในการเดินเข้ามาใกล้ ปัญหาซ้ำใด ๆ ที่เป็นเพียงแค่คิด 1566 01:15:23,550 --> 01:15:26,275 เกี่ยวกับเรื่องนี้ชอบที่คุณต้องคิด เกี่ยวกับทุกกรณีมุม 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 เพื่อพิจารณาว่าเราต้องการที่จะ พิมพ์ต้นไม้ทั้งหมดนี้ 1569 01:15:38,110 --> 01:15:42,030 ดังนั้นสิ่งที่เรากำลังจะมุ่งเน้นไปที่ เป็นโหนดนี้โดยเฉพาะอย่างยิ่ง - 1570 01:15:42,030 --> 01:15:43,740 36 1571 01:15:43,740 --> 01:15:47,420 เรียก recursive เราหลอก เพียง แต่ผู้ที่ทำงาน 1572 01:15:47,420 --> 01:15:54,000 ดังนั้นที่นี่โทรซ้ำนี้เพื่อ การสำรวจของเราโดยไม่ได้คิด 1573 01:15:54,000 --> 01:15:58,640 เกี่ยวกับเรื่องนี้เพียงแค่ภายในซ้าย สามคิดว่าแล้วพิมพ์ 20 1574 01:15:58,640 --> 01:16:00,730 และ 34 สำหรับเรา 1575 01:16:00,730 --> 01:16:03,350 และจากนั้นเมื่อในที่สุดเราก็ซ้ำ เรียกการสำรวจเมื่อวันที่ 1576 01:16:03,350 --> 01:16:07,890 ขวาที่ถูกต้องจะพิมพ์ 52, 59, และ 106 สำหรับเรา 1577 01:16:07,890 --> 01:16:13,620 >> ได้รับเพื่อให้นี้สามารถพิมพ์ 20, 34, และ อื่น ๆ ที่สามารถพิมพ์ 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 ทั้งหมดที่เราต้องสามารถที่จะทำคือการพิมพ์ เราเองอยู่ตรงกลางของที่ 1579 01:16:17,180 --> 01:16:21,250 ดังนั้นทุกสิ่งที่พิมพ์ออกมาก่อนเรา 1580 01:16:21,250 --> 01:16:27,710 พิมพ์เองจึงพิมพ์โหนดปัจจุบัน 36, printf ปกติแล้ว 1581 01:16:27,710 --> 01:16:31,170 พิมพ์ทุกอย่างที่ตามเรามา 1582 01:16:31,170 --> 01:16:32,730 >> DAVID เจลัน: นี่คือที่เรียกซ้ำ ได้รับสวยงามจริงๆ 1583 01:16:32,730 --> 01:16:36,270 มันเป็นก้าวกระโดดที่น่าตื่นตาตื่นใจนี้ของความศรัทธาที่ ที่คุณทำบิตน้อยที่สุดของการทำงาน 1584 01:16:36,270 --> 01:16:38,460 แล้วคุณจะปล่อยให้คน อื่นทำส่วนที่เหลือ 1585 01:16:38,460 --> 01:16:40,180 และว่าคนอื่น เป็นกระทบกระเทียบคุณ 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 ดังนั้นสำหรับจุดบราวนี่อย่างจริงจังถ้า คุณเลื่อนขึ้นไปบนคำถาม - 1588 01:16:48,360 --> 01:16:50,530 >> ROB สลิง: ในคำถาม? 1589 01:16:50,530 --> 01:16:53,490 >> DAVID เจลัน: และลงเล็กน้อยที่ ตัวเลขที่ไม่มีใครรู้ว่า 1590 01:16:53,490 --> 01:16:55,190 ตัวเลขเหล่านี้มาจากไหน 1591 01:16:55,190 --> 01:16:56,610 >> ROB สลิง: ฉันมีความคิดอย่างแท้จริง 1592 01:16:56,610 --> 01:16:59,794 >> DAVID เจลัน: พวกเขาปรากฏ ตลอดการทดสอบ 1593 01:16:59,794 --> 01:17:01,150 >> ผู้ชม: พวกเขาหมายเลขเดียวกันได้หรือไม่ 1594 01:17:01,150 --> 01:17:01,910 >> DAVID เจลัน: ตัวเลขเหล่านั้น 1595 01:17:01,910 --> 01:17:03,260 ไข่อีสเตอร์เล็ก ๆ น้อย ๆ 1596 01:17:03,260 --> 01:17:08,100 ดังนั้นสำหรับบรรดาของคุณดูออนไลน์ได้ที่ บ้านถ้าคุณสามารถบอกเราผ่านทางอีเมลไปยัง 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net สิ่งที่สำคัญ ของเหล่านี้ที่เกิดขึ้นหกตัวเลข 1598 01:17:12,680 --> 01:17:18,560 ตลอดการทดสอบที่ 1 เราจะอาบน้ำให้คุณ ด้วยความสนใจที่น่าตื่นตาตื่นใจที่สุดท้าย 1599 01:17:18,560 --> 01:17:21,610 การบรรยายและลูกความเครียด 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 ดีบอบบาง 1602 01:17:27,790 --> 01:17:29,570 >> ROB สลิง: ใด ๆ คำถามสุดท้าย เกี่ยวกับสิ่งที่เกี่ยวกับการทดสอบหรือไม่ 1603 01:17:29,570 --> 01:17:32,608